reactionview 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/app/assets/javascripts/reactionview-dev-tools.esm.js +808 -10
- data/app/assets/javascripts/reactionview-dev-tools.esm.js.map +1 -1
- data/app/assets/javascripts/reactionview-dev-tools.umd.js +2124 -1326
- data/app/assets/javascripts/reactionview-dev-tools.umd.js.map +1 -1
- data/lib/generators/reactionview/install_generator.rb +6 -0
- data/lib/reactionview/asset_manifest.rb +88 -0
- data/lib/reactionview/config.rb +31 -0
- data/lib/reactionview/middleware/asset_manifest_check.rb +94 -0
- data/lib/reactionview/railtie.rb +10 -2
- data/lib/reactionview/stale_asset_manifest_error.rb +9 -0
- data/lib/reactionview/template/handlers/erb.rb +41 -5
- data/lib/reactionview/template/handlers/herb.rb +42 -26
- data/lib/reactionview/template/local_template.rb +22 -0
- data/lib/reactionview/version.rb +1 -1
- data/lib/reactionview.rb +2 -0
- data/reactionview.gemspec +2 -1
- metadata +24 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactionview-dev-tools.esm.js","sources":["../../../node_modules/@herb-tools/dev-tools/dist/herb-dev-tools.esm.js","../../../javascript/packages/dev-tools/src/index.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".herb-overlay-label{background:rgba(0,0,0,.8);border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,monospace;font-size:11px;font-weight:500;left:4px;line-height:1.2;padding:2px 6px;position:absolute;top:-18px;transition:all .2s ease;white-space:nowrap;z-index:1000}.herb-overlay-label:hover{background:rgba(0,0,0,.9);color:#374151;transform:scale(1.02);z-index:1001}[data-herb-debug-outline-type*=view]>.herb-overlay-label{background:#dbeafe;border-color:#93c5fd;color:#1e40af}[data-herb-debug-outline-type*=partial]>.herb-overlay-label{background:#d1fae5;border-color:#6ee7b7;color:#065f46}[data-herb-debug-outline-type*=component]>.herb-overlay-label{background:#fef3c7;border-color:#fcd34d;color:#92400e}[data-herb-debug-outline-type*=erb-output]{transition:all .3s ease}.herb-tooltip{background:#fff;border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.12),0 2px 8px rgba(0,0,0,.08);display:flex;flex-direction:column;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:14px;gap:12px;max-width:calc(100vw - 16px);opacity:0;overflow:visible;padding:16px 20px;pointer-events:none;position:fixed;transition:opacity .2s ease,visibility .2s ease;visibility:hidden;white-space:nowrap;z-index:10001}.herb-tooltip.visible{opacity:1;pointer-events:auto;visibility:visible}.herb-tooltip .herb-location{align-items:center;background:#f8f9fa;border-radius:12px 12px 0 0;color:#6b7280;cursor:pointer;display:flex;font-size:13px;font-weight:500;gap:12px;justify-content:space-between;margin:-16px -20px 0;padding:12px 20px;transition:all .2s ease}.herb-tooltip .herb-location:hover{background:#f1f3f4;color:#374151}.herb-copy-path-btn{background:transparent;border:none;border-radius:4px;color:#6b7280;cursor:pointer;flex-shrink:0;font-size:14px;padding:4px;position:relative;transition:all .2s ease}.herb-copy-path-btn:hover{background:hsla(220,9%,46%,.1);color:#374151}.herb-copy-path-btn:active{transform:scale(.95)}.herb-location:after{background:#1f2937;border-radius:6px;bottom:calc(100% + 8px);color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;white-space:nowrap}.herb-location:after,.herb-location:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10002}.herb-location:before{border:4px solid transparent;border-top-color:#1f2937;bottom:calc(100% + 2px);content:\\\"\\\"}.herb-location:hover:after,.herb-location:hover:before{opacity:1;visibility:visible}.herb-location:has(.herb-copy-path-btn:hover):after,.herb-location:has(.herb-copy-path-btn:hover):before{opacity:0!important;visibility:hidden!important}.herb-copy-path-btn:after{background:#1f2937;border-radius:6px;color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;top:-36px;white-space:nowrap}.herb-copy-path-btn:after,.herb-copy-path-btn:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10003}.herb-copy-path-btn:before{border:4px solid transparent;border-bottom-color:#1f2937;content:\\\"\\\";top:-6px}.herb-copy-path-btn:hover:after,.herb-copy-path-btn:hover:before{opacity:1;visibility:visible}.herb-tooltip .herb-erb-code{color:#111827;cursor:text;font-size:16px;font-weight:600;letter-spacing:-.025em;user-select:text}.herb-tooltip:before{bottom:-8px;content:\\\"\\\";height:8px;left:0;pointer-events:auto;position:absolute;right:0}.herb-tooltip:after{border:6px solid transparent;border-top-color:#e5e7eb;bottom:-6px;content:\\\"\\\";left:50%;pointer-events:none;position:absolute;transform:translateX(-50%);z-index:10000}.herb-floating-menu{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;position:fixed;right:0;top:0;z-index:2147483643}.herb-menu-trigger{align-items:center;background:#fff;border:1px solid silver;border-radius:0 0 0 10px;border-right:none;border-top:none;box-shadow:0 1px 3px rgba(0,0,0,.1);cursor:pointer;display:flex;font-size:12px;gap:4px;justify-content:center;padding:4px 7px;position:relative;transition:all .2s ease;z-index:2147483640}.herb-menu-trigger:hover{background:#f9fafb;border-color:#9ca3af;box-shadow:0 4px 12px rgba(0,0,0,.15)}.herb-menu-trigger:active{transform:scale(.98)}.herb-menu-trigger.has-active-options{background:#dbeafe;border-color:#3b82f6}.herb-menu-trigger.has-active-options:hover{background:#bfdbfe;border-color:#2563eb}.herb-menu-trigger.has-active-options .herb-text{color:#1d4ed8}.herb-icon{display:block;font-size:14px;line-height:1}.herb-text{color:#555;font-size:11px;font-weight:600;letter-spacing:.2px}.herb-menu-panel{background:#fff;border:1px solid silver;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-width:280px;opacity:0;padding:0;position:absolute;right:10px;top:28px;transform:translateY(-10px) scale(.95);transform-origin:top right;transition:all .3s cubic-bezier(.4,0,.2,1);visibility:hidden}.herb-menu-panel.open{opacity:1;transform:translateY(0) scale(1);visibility:visible}.herb-menu-header{background:#f9fafb;border-bottom:1px solid #e5e7eb;border-radius:8px 8px 0 0;color:#374151;font-size:14px;font-weight:600;padding:16px 20px}.herb-toggle-item{border-bottom:1px solid #f3f4f6;padding:12px 20px}.herb-toggle-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-nested-toggle{border-left:2px solid #f3f4f6;margin-top:8px;padding-left:24px;transition:all .3s ease}.herb-nested-label{opacity:.8}.herb-nested-label .herb-toggle-text{color:#6b7280;font-size:13px}.herb-nested-switch{background:#e5e7eb;height:20px;width:36px}.herb-nested-switch:after{height:14px;left:3px;top:3px;width:14px}.herb-toggle-input:checked+.herb-nested-switch:after{transform:translateX(16px)}.herb-toggle-label{align-items:center;cursor:pointer;display:flex;gap:12px;user-select:none}.herb-toggle-input{display:none}.herb-toggle-switch{background:#cbd5e1;border-radius:12px;flex-shrink:0;height:24px;position:relative;transition:background .3s ease;width:44px}.herb-toggle-switch:after{background:#fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2);content:\\\"\\\";height:18px;left:3px;position:absolute;top:3px;transition:transform .3s ease;width:18px}.herb-toggle-input:checked+.herb-toggle-switch{background:#8b5cf6}.herb-toggle-input:checked+.herb-toggle-switch:after{transform:translateX(20px)}.herb-toggle-text{color:#374151;flex:1;font-size:14px}.herb-outline-preview{border:2px dotted transparent;border-radius:4px;padding:2px 8px}.herb-outline-view{background-color:#eff6ff;border-color:#3b82f6}.herb-outline-partial{background-color:#ecfdf5;border-color:#10b981}.herb-outline-component{background-color:#fffbeb;border-color:#f59e0b}.herb-outline-erb{background-color:#f5f3ff;border-color:#a78bfa}.herb-toggle-label:hover .herb-toggle-switch{background:#94a3b8}.herb-toggle-label:hover .herb-toggle-input:checked+.herb-toggle-switch{background:#7c3aed}.herb-editor-section{background:linear-gradient(135deg,#fafbfc,#f8f9fa);border-bottom:1px solid #f3f4f6;overflow:hidden;padding:16px 20px;position:relative}.herb-editor-section:before{background:linear-gradient(90deg,transparent,rgba(139,92,246,.2),transparent);content:\\\"\\\";height:2px;left:0;position:absolute;right:0;top:0}.herb-editor-label{cursor:default;display:flex;flex-direction:column;gap:10px}.herb-editor-text{align-items:center;color:#6b7280;display:flex;font-size:12px;font-weight:600;gap:6px;letter-spacing:.5px;text-transform:uppercase}.herb-editor-select{appearance:none;background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;box-shadow:0 1px 2px rgba(0,0,0,.05);color:#1f2937;cursor:pointer;font-size:13.5px;font-weight:500;padding:10px 36px 10px 12px;transition:all .2s cubic-bezier(.4,0,.2,1);width:100%}.herb-editor-select,.herb-editor-select option{font-family:Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.herb-editor-select option{font-size:14px;font-weight:400;padding:8px 12px}.herb-editor-select:hover{background-color:#fafafa;border-color:#8b5cf6;box-shadow:0 2px 4px rgba(0,0,0,.08),0 0 0 1px rgba(139,92,246,.1);transform:translateY(-1px)}.herb-editor-select:focus{background-color:#fff;border-color:#8b5cf6;box-shadow:0 0 0 3px rgba(139,92,246,.15),0 2px 8px rgba(139,92,246,.1);outline:none;transform:translateY(-1px)}.herb-editor-select:active{box-shadow:0 1px 2px rgba(0,0,0,.05);transform:translateY(0)}.herb-disable-all-section{background:#f9fafb;border-radius:0 0 8px 8px;border-top:1px solid #f3f4f6;padding:16px 20px}.herb-disable-all-btn{background:#ef4444;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;padding:8px 16px;transition:background .2s ease;width:100%}.herb-disable-all-btn:hover{background:#dc2626}.herb-disable-all-btn:active{background:#b91c1c}.herb-validation-overlay{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.8);bottom:0;color:#e5e5e5;display:flex;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;justify-content:center;left:0;line-height:1.6;overflow-y:auto;padding:20px;position:fixed;right:0;top:0;z-index:2147483640}.herb-validation-panel{background:#000;border:1px solid #374151;border-radius:12px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);display:flex;flex-direction:column;max-height:80vh;max-width:1200px;overflow:hidden;width:100%}.herb-validation-header{align-items:flex-start;background:linear-gradient(135deg,#dc2626,#b91c1c);border-bottom:1px solid #374151;border-radius:12px 12px 0 0;color:#fff;display:flex;flex-shrink:0;gap:16px;justify-content:space-between;padding:20px 24px}.herb-validation-title{font-size:18px;font-weight:600;margin:0}.herb-validation-close{align-items:center;background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-shrink:0;font-size:16px;height:32px;justify-content:center;padding:0;transition:all .2s;width:32px}.herb-validation-close:hover{background:hsla(0,0%,100%,.2);border-color:hsla(0,0%,100%,.3)}.herb-file-tabs{background:#262626;border-bottom:1px solid #374151;display:flex;flex-shrink:0;overflow-x:auto}.herb-file-tab{background:none;border:none;border-bottom:3px solid transparent;color:#9ca3af;cursor:pointer;font-size:14px;font-weight:500;padding:12px 16px;transition:all .2s ease;white-space:nowrap}.herb-file-tab:hover{background:#2d2d2d;color:#e5e5e5}.herb-file-tab.active{background:#374151;border-bottom-color:#3b82f6;color:#fff}.herb-validation-content{flex:1;overflow-y:auto;padding:24px}.herb-validator-section{margin-bottom:32px}.herb-validator-section:last-child{margin-bottom:0}.herb-validator-section.hidden{display:none}.herb-validator-header{align-items:center;background:#262626;border-bottom:1px solid #374151;border-radius:8px 8px 0 0;color:#e5e5e5;display:flex;font-size:16px;font-weight:600;justify-content:space-between;padding:12px 16px}.herb-validator-count{background:hsla(0,0%,100%,.2);border-radius:12px;font-size:14px;font-weight:500;padding:2px 8px}.herb-validator-items{background:#111;border:1px solid #374151;border-radius:0 0 8px 8px;border-top:none}.herb-validation-item{background:#111;border-bottom:1px solid #374151;padding:20px}.herb-validation-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-validation-item.hidden{display:none}.herb-validation-item .herb-validation-header{align-items:center;background:#1a1a1a;border:none;border-bottom:1px solid #374151;color:#9ca3af;display:flex;font-size:13px;gap:12px;margin:-20px -20px 16px;padding:12px 16px}.herb-validation-badge{border-radius:4px;color:#fff;font-size:12px;font-weight:600;letter-spacing:.025em;padding:4px 8px;text-transform:uppercase}.herb-validation-location{color:#9ca3af;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:13px}.herb-validation-message{background:#1a1a1a;border-bottom:1px solid #374151;color:#fbbf24;font-size:13px;font-weight:500;line-height:1.4;margin:-16px -16px 16px;padding:12px 16px}.herb-code-snippet{background:#1f2937;border-radius:6px;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;margin-bottom:16px;overflow:hidden}.herb-code-line{align-items:stretch;display:flex}.herb-code-line.herb-error-line{background:rgba(239,68,68,.1)}.herb-validation-overlay .herb-line-number{background:#374151;border-right:1px solid #4b5563;color:#9ca3af;flex-shrink:0;font-size:13px;padding:8px 12px;text-align:right;user-select:none;width:40px}.herb-validation-overlay .herb-error-line .herb-line-number{background:#dc2626;color:#fff}.herb-validation-overlay .herb-line-content{color:#e5e7eb;flex:1;font-size:13px;padding:8px 16px;white-space:pre-wrap}.herb-validation-overlay .herb-error-pointer{background:#1f2937;color:#dc2626;font-size:13px;font-weight:700;padding:4px 16px 8px 57px}.herb-validation-suggestion{align-items:flex-start;background:#111;border:1px solid #374151;border-radius:6px;color:#d1d5db;display:flex;font-size:14px;gap:8px;margin-top:16px;padding:12px 16px}.herb-suggestion-icon{color:#10b981;flex-shrink:0;font-size:16px;margin-top:1px}.herb-erb{color:#fbbf24;font-weight:600}.herb-erb-content{color:#34d399}.herb-tag{color:#60a5fa;font-weight:500}.herb-attr{color:#f472b6}.herb-value{color:#a78bfa}.herb-comment{color:#6b7280;font-style:italic}\";\nstyleInject(css_248z);\n\nclass ErrorOverlay {\n constructor() {\n this.overlay = null;\n this.allValidationData = [];\n this.isVisible = false;\n this.init();\n }\n init() {\n this.detectValidationErrors();\n const hasParserErrors = document.querySelector('.herb-parser-error-overlay') !== null;\n if (this.getTotalErrorCount() > 0) {\n this.createOverlay();\n this.setupToggleHandler();\n }\n else if (hasParserErrors) {\n console.log('[ErrorOverlay] Parser error overlay already displayed');\n }\n else {\n console.log('[ErrorOverlay] No errors found, not creating overlay');\n }\n }\n detectValidationErrors() {\n const templatesToRemove = [];\n const validationTemplates = document.querySelectorAll('template[data-herb-validation-error]');\n if (validationTemplates.length > 0) {\n this.processValidationTemplates(validationTemplates, templatesToRemove);\n }\n const jsonTemplates = document.querySelectorAll('template[data-herb-validation-errors]');\n jsonTemplates.forEach((template, _index) => {\n try {\n let jsonData = template.textContent?.trim();\n if (!jsonData) {\n jsonData = template.innerHTML?.trim();\n }\n if (jsonData) {\n const validationData = JSON.parse(jsonData);\n this.allValidationData.push(validationData);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to parse validation errors from template:', error, {\n textContent: template.textContent,\n innerHTML: template.innerHTML\n });\n templatesToRemove.push(template);\n }\n });\n const htmlTemplates = document.querySelectorAll('template[data-herb-parser-error]');\n htmlTemplates.forEach((template, _index) => {\n try {\n const htmlContent = template.innerHTML?.trim() || template.textContent?.trim();\n if (htmlContent) {\n this.displayParserErrorOverlay(htmlContent);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process parser error template:', error);\n templatesToRemove.push(template);\n }\n });\n templatesToRemove.forEach((template, _index) => template.remove());\n }\n processValidationTemplates(templates, templatesToRemove) {\n const validationFragments = [];\n const errorMap = new Map();\n templates.forEach((template) => {\n try {\n const metadata = {\n severity: template.getAttribute('data-severity') || 'error',\n source: template.getAttribute('data-source') || 'unknown',\n code: template.getAttribute('data-code') || '',\n line: parseInt(template.getAttribute('data-line') || '0'),\n column: parseInt(template.getAttribute('data-column') || '0'),\n filename: template.getAttribute('data-filename') || 'unknown',\n message: template.getAttribute('data-message') || '',\n suggestion: template.getAttribute('data-suggestion') || undefined,\n timestamp: template.getAttribute('data-timestamp') || new Date().toISOString()\n };\n const html = template.innerHTML?.trim() || '';\n if (html) {\n const errorKey = `${metadata.filename}:${metadata.line}:${metadata.column}:${metadata.code}:${metadata.message}`;\n if (errorMap.has(errorKey)) {\n const existing = errorMap.get(errorKey);\n existing.count++;\n }\n else {\n errorMap.set(errorKey, { metadata, html, count: 1 });\n }\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process validation template:', error);\n templatesToRemove.push(template);\n }\n });\n validationFragments.push(...errorMap.values());\n if (validationFragments.length > 0) {\n this.displayValidationOverlay(validationFragments);\n }\n }\n createOverlay() {\n if (this.allValidationData.length === 0)\n return;\n this.overlay = document.createElement('div');\n this.overlay.id = 'herb-error-overlay';\n this.overlay.innerHTML = `\n <style>\n #herb-error-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 10000;\n display: none;\n overflow: auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .herb-error-content {\n background: #1a1a1a;\n margin: 20px auto;\n padding: 20px;\n border-radius: 8px;\n max-width: 800px;\n color: #fff;\n }\n\n .herb-error-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n border-bottom: 1px solid #333;\n padding-bottom: 10px;\n }\n\n .herb-error-title {\n font-size: 18px;\n font-weight: 600;\n color: #ff6b6b;\n }\n\n .herb-error-close {\n background: none;\n border: none;\n color: #fff;\n font-size: 20px;\n cursor: pointer;\n padding: 5px;\n }\n\n .herb-error-file-section {\n margin-bottom: 20px;\n }\n\n .herb-error-file {\n font-size: 14px;\n color: #888;\n margin-bottom: 10px;\n font-weight: 600;\n }\n\n .herb-error-item {\n background: #2a2a2a;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 10px;\n border-left: 4px solid #ff6b6b;\n }\n\n .herb-error-item.warning {\n border-left-color: #ffd93d;\n }\n\n .herb-error-item.info {\n border-left-color: #4ecdc4;\n }\n\n .herb-error-item.hint {\n border-left-color: #95a5a6;\n }\n\n .herb-error-message {\n font-size: 14px;\n margin-bottom: 8px;\n line-height: 1.4;\n }\n\n .herb-error-location {\n font-size: 12px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .herb-error-suggestion {\n font-size: 12px;\n color: #4ecdc4;\n font-style: italic;\n }\n\n .herb-error-source {\n font-size: 11px;\n color: #666;\n text-align: right;\n }\n\n .herb-file-separator {\n border-top: 1px solid #444;\n margin: 20px 0;\n }\n </style>\n\n <div class=\"herb-error-content\">\n <div class=\"herb-error-header\">\n <div class=\"herb-error-title\">\n Errors (${this.getTotalErrorCount()})\n </div>\n <button class=\"herb-error-close\">×</button>\n </div>\n\n <div class=\"herb-error-files\">\n ${this.allValidationData.map((validationData, index) => `\n ${index > 0 ? '<div class=\"herb-file-separator\"></div>' : ''}\n <div class=\"herb-error-file-section\">\n <div class=\"herb-error-file\">${validationData.filename} (${this.getErrorSummary(validationData.validationErrors)})</div>\n <div class=\"herb-error-list\">\n ${validationData.validationErrors.map(error => `\n <div class=\"herb-error-item ${error.severity}\">\n <div class=\"herb-error-message\">${this.escapeHtml(error.message)}</div>\n ${error.location ? `<div class=\"herb-error-location\">Line ${error.location.line}, Column ${error.location.column}</div>` : ''}\n ${error.suggestion ? `<div class=\"herb-error-suggestion\">💡 ${this.escapeHtml(error.suggestion)}</div>` : ''}\n <div class=\"herb-error-source\">${error.source}${error.code ? ` (${error.code})` : ''}</div>\n </div>\n `).join('')}\n </div>\n </div>\n `).join('')}\n </div>\n </div>\n `;\n document.body.appendChild(this.overlay);\n const closeBtn = this.overlay.querySelector('.herb-error-close');\n closeBtn?.addEventListener('click', () => this.hide());\n this.overlay.addEventListener('click', (e) => {\n if (e.target === this.overlay) {\n this.hide();\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n });\n }\n setupToggleHandler() {\n document.addEventListener('keydown', (e) => {\n if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'E') {\n e.preventDefault();\n this.toggle();\n }\n });\n if (this.hasErrorSeverity()) {\n setTimeout(() => this.show(), 100);\n }\n }\n getTotalErrorCount() {\n return this.allValidationData.reduce((total, data) => total + data.validationErrors.length, 0);\n }\n getErrorSummary(errors) {\n if (errors.length === 1) {\n return '1 error';\n }\n const errorsBySource = errors.reduce((acc, error) => {\n const source = error.source || 'Unknown';\n acc[source] = (acc[source] || 0) + 1;\n return acc;\n }, {});\n const sourceKeys = Object.keys(errorsBySource);\n if (sourceKeys.length === 1) {\n const source = sourceKeys[0];\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel} error${count === 1 ? '' : 's'}`;\n }\n else {\n const parts = sourceKeys.map(source => {\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel}`;\n });\n return `${errors.length} errors (${parts.join(', ')})`;\n }\n }\n getSourceLabel(source) {\n switch (source) {\n case 'Parser': return 'parser';\n case 'SecurityValidator': return 'security';\n case 'NestingValidator': return 'nesting';\n case 'AccessibilityValidator': return 'accessibility';\n default: return 'validation';\n }\n }\n hasErrorSeverity() {\n return this.allValidationData.some(data => data.validationErrors.some(error => error.severity === 'error'));\n }\n escapeHtml(unsafe) {\n return unsafe\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n show() {\n if (this.overlay) {\n this.overlay.style.display = 'block';\n this.isVisible = true;\n }\n }\n hide() {\n if (this.overlay) {\n this.overlay.style.display = 'none';\n this.isVisible = false;\n }\n }\n toggle() {\n if (this.isVisible) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n hasErrors() {\n return this.getTotalErrorCount() > 0;\n }\n getErrorCount() {\n return this.getTotalErrorCount();\n }\n displayParserErrorOverlay(htmlContent) {\n const existingOverlay = document.querySelector('.herb-parser-error-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const container = document.createElement('div');\n container.innerHTML = htmlContent;\n const overlay = container.querySelector('.herb-parser-error-overlay');\n if (overlay) {\n document.body.appendChild(overlay);\n overlay.style.display = 'flex';\n }\n else {\n console.error('[ErrorOverlay] No parser error overlay found in HTML template');\n }\n }\n displayValidationOverlay(fragments) {\n const existingOverlay = document.querySelector('.herb-validation-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const errorsBySource = new Map();\n const errorsByFile = new Map();\n fragments.forEach(fragment => {\n const source = fragment.metadata.source;\n if (!errorsBySource.has(source)) {\n errorsBySource.set(source, []);\n }\n errorsBySource.get(source).push(fragment);\n const file = fragment.metadata.filename;\n if (!errorsByFile.has(file)) {\n errorsByFile.set(file, []);\n }\n errorsByFile.get(file).push(fragment);\n });\n const errorCount = fragments.filter(f => f.metadata.severity === 'error').reduce((sum, f) => sum + f.count, 0);\n const warningCount = fragments.filter(f => f.metadata.severity === 'warning').reduce((sum, f) => sum + f.count, 0);\n const totalCount = fragments.reduce((sum, f) => sum + f.count, 0);\n const uniqueCount = fragments.length;\n const overlayHTML = this.buildValidationOverlayHTML(fragments, errorsBySource, errorsByFile, { errorCount, warningCount, totalCount, uniqueCount });\n const overlay = document.createElement('div');\n overlay.className = 'herb-validation-overlay';\n overlay.innerHTML = overlayHTML;\n document.body.appendChild(overlay);\n this.setupValidationOverlayHandlers(overlay);\n }\n buildValidationOverlayHTML(_fragments, errorsBySource, errorsByFile, counts) {\n let title = counts.uniqueCount === 1 ? 'Validation Issue' : `Validation Issues`;\n if (counts.totalCount !== counts.uniqueCount) {\n title += ` (${counts.uniqueCount} unique, ${counts.totalCount} total)`;\n }\n else {\n title += ` (${counts.totalCount})`;\n }\n const subtitle = [];\n if (counts.errorCount > 0)\n subtitle.push(`${counts.errorCount} error${counts.errorCount !== 1 ? 's' : ''}`);\n if (counts.warningCount > 0)\n subtitle.push(`${counts.warningCount} warning${counts.warningCount !== 1 ? 's' : ''}`);\n let fileTabs = '';\n if (errorsByFile.size > 1) {\n const totalErrors = Array.from(errorsByFile.values()).reduce((sum, errors) => sum + errors.length, 0);\n fileTabs = `\n <div class=\"herb-file-tabs\">\n <button class=\"herb-file-tab active\" data-file=\"*\">\n All (${totalErrors})\n </button>\n ${Array.from(errorsByFile.entries()).map(([file, errors]) => `\n <button class=\"herb-file-tab\" data-file=\"${this.escapeAttr(file)}\">\n ${this.escapeHtml(file)} (${errors.length})\n </button>\n `).join('')}\n </div>\n `;\n }\n const contentSections = Array.from(errorsBySource.entries()).map(([source, sourceFragments]) => `\n <div class=\"herb-validator-section\" data-source=\"${this.escapeAttr(source)}\">\n <div class=\"herb-validator-header\">\n <h3>${this.escapeHtml(source.replace('Validator', ''))} Issues (${sourceFragments.length})</h3>\n </div>\n <div class=\"herb-validator-content\">\n ${sourceFragments.map(f => {\n const fileAttribute = `data-error-file=\"${this.escapeAttr(f.metadata.filename)}\"`;\n if (f.count > 1) {\n return `\n <div class=\"herb-validation-item-wrapper\" ${fileAttribute}>\n ${f.html}\n <div class=\"herb-occurrence-badge\" title=\"This error occurs ${f.count} times in the template\">\n <span class=\"herb-occurrence-icon\">⚠</span>\n <span class=\"herb-occurrence-count\">×${f.count}</span>\n </div>\n </div>\n `;\n }\n return `<div class=\"herb-validation-error-container\" ${fileAttribute}>${f.html}</div>`;\n }).join('')}\n </div>\n </div>\n `).join('');\n return `\n <style>${this.getValidationOverlayStyles()}</style>\n <div class=\"herb-validation-container\">\n <div class=\"herb-validation-header\">\n <div class=\"herb-validation-header-content\">\n <div class=\"herb-validation-title\">\n <span class=\"herb-validation-icon\">⚠️</span>\n ${title}\n </div>\n <div class=\"herb-validation-subtitle\">${subtitle.join(', ')}</div>\n </div>\n <button class=\"herb-close-button\" title=\"Close (Esc)\">×</button>\n </div>\n ${fileTabs}\n <div class=\"herb-validation-content\">\n ${contentSections}\n </div>\n <div class=\"herb-dismiss-hint\" style=\"padding-left: 24px; padding-right: 24px; padding-bottom: 12px;\">\n Click outside, press <kbd style=\"display: inline-block; padding: 2px 6px; font-family: monospace; font-size: 0.9em; color: #333; background: #f7f7f7; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 0 #ccc, 0 2px 3px rgba(0,0,0,0.2) inset;\">Esc</kbd> key, or fix the code to dismiss.<br>\n\n ${this.getDismissHint()}\n </div>\n </div>\n `;\n }\n getDismissHint() {\n const template = document.querySelector('template[data-herb-dismiss-hint]');\n if (template) {\n return template.innerHTML.trim();\n }\n return `You can also disable this overlay by passing <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">validation_mode: :none</code> to <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">Herb::Engine</code>.`;\n }\n getValidationOverlayStyles() {\n return `\n .herb-validation-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\n color: #e5e5e5;\n line-height: 1.6;\n }\n\n .herb-validation-container {\n background: #000000;\n border: 1px solid #374151;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 1200px;\n max-height: 80vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .herb-validation-header {\n background: linear-gradient(135deg, #f59e0b, #d97706);\n padding: 20px 24px;\n border-bottom: 1px solid #374151;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n }\n\n .herb-validation-title {\n font-size: 18px;\n font-weight: 600;\n color: white;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .herb-validation-subtitle {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.9);\n margin-top: 4px;\n }\n\n .herb-file-tabs {\n background: #1a1a1a;\n border-bottom: 1px solid #374151;\n padding: 0;\n display: flex;\n overflow-x: auto;\n }\n\n .herb-file-tab {\n background: transparent;\n border: none;\n color: #9ca3af;\n padding: 12px 20px;\n cursor: pointer;\n font-size: 13px;\n white-space: nowrap;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n }\n\n .herb-file-tab:hover {\n background: #262626;\n color: #e5e5e5;\n }\n\n .herb-file-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n background: #262626;\n }\n\n .herb-validation-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .herb-validator-section {\n background: #0f0f0f;\n border: 1px solid #2d2d2d;\n border-radius: 8px;\n }\n\n .herb-validator-header {\n background: #1a1a1a;\n padding: 12px 16px;\n border-bottom: 1px solid #2d2d2d;\n }\n\n .herb-validator-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 500;\n color: #e5e5e5;\n }\n\n .herb-validator-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .herb-validation-item {\n border-left: 3px solid #4a4a4a;\n padding-left: 16px;\n }\n\n .herb-validation-item[data-severity=\"error\"] {\n border-left-color: #7f1d1d;\n }\n\n .herb-validation-item[data-severity=\"warning\"] {\n border-left-color: #78350f;\n }\n\n .herb-validation-item[data-severity=\"info\"] {\n border-left-color: #1e3a8a;\n }\n\n .herb-validation-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .herb-validation-badge {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n color: white;\n text-transform: uppercase;\n }\n\n .herb-validation-location {\n font-size: 12px;\n color: #9ca3af;\n }\n\n .herb-validation-message {\n font-size: 14px;\n margin-bottom: 12px;\n line-height: 1.5;\n }\n\n .herb-code-snippet {\n background: #1a1a1a;\n border: 1px solid #2d2d2d;\n border-radius: 4px;\n padding: 12px;\n overflow-x: auto;\n }\n\n .herb-code-line {\n display: flex;\n align-items: flex-start;\n min-height: 20px;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .herb-line-number {\n color: #6b7280;\n width: 40px;\n text-align: right;\n padding-right: 16px;\n user-select: none;\n flex-shrink: 0;\n }\n\n .herb-line-content {\n flex: 1;\n white-space: pre;\n font-family: inherit;\n }\n\n .herb-error-line {\n background: rgba(220, 38, 38, 0.1);\n }\n\n .herb-error-line .herb-line-number {\n color: #dc2626;\n font-weight: 600;\n }\n\n .herb-error-pointer {\n color: #dc2626;\n font-weight: bold;\n margin-left: 56px;\n font-size: 12px;\n }\n\n .herb-validation-suggestion {\n background: #1e3a1e;\n border: 1px solid #10b981;\n border-radius: 4px;\n padding: 8px 12px;\n margin-top: 8px;\n font-size: 13px;\n color: #10b981;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .herb-validation-item-wrapper,\n .herb-validation-error-container {\n position: relative;\n }\n\n .herb-validation-error-container.hidden,\n .herb-validation-item-wrapper.hidden,\n .herb-validator-section.hidden {\n display: none;\n }\n\n .herb-occurrence-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n background: #dc2626;\n color: white;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n\n .herb-occurrence-icon {\n font-size: 10px;\n }\n\n .herb-occurrence-count {\n font-weight: bold;\n }\n\n .herb-close-button {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: white;\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n }\n\n .herb-close-button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n }\n\n /* Syntax highlighting */\n .herb-erb { color: #61dafb; }\n .herb-erb-content { color: #c678dd; }\n .herb-tag { color: #e06c75; }\n .herb-attr { color: #d19a66; }\n .herb-value { color: #98c379; }\n .herb-comment { color: #5c6370; font-style: italic; }\n `;\n }\n setupValidationOverlayHandlers(overlay) {\n const closeBtn = overlay.querySelector('.herb-close-button');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => overlay.remove());\n }\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n const escHandler = (e) => {\n if (e.key === 'Escape') {\n overlay.remove();\n document.removeEventListener('keydown', escHandler);\n }\n };\n document.addEventListener('keydown', escHandler);\n const fileTabs = overlay.querySelectorAll('.herb-file-tab');\n fileTabs.forEach(tab => {\n tab.addEventListener('click', () => {\n const selectedFile = tab.getAttribute('data-file');\n fileTabs.forEach(t => t.classList.remove('active'));\n tab.classList.add('active');\n const errorContainers = overlay.querySelectorAll('[data-error-file]');\n const validatorSections = overlay.querySelectorAll('.herb-validator-section');\n errorContainers.forEach(container => {\n const containerFile = container.getAttribute('data-error-file');\n if (selectedFile === '*' || containerFile === selectedFile) {\n container.classList.remove('hidden');\n }\n else {\n container.classList.add('hidden');\n }\n });\n validatorSections.forEach(section => {\n const sectionContent = section.querySelector('.herb-validator-content');\n const visibleErrors = sectionContent?.querySelectorAll('[data-error-file]:not(.hidden)').length || 0;\n const header = section.querySelector('h3');\n const source = section.getAttribute('data-source')?.replace('Validator', '') || 'Unknown';\n if (header) {\n header.textContent = `${source} Issues (${visibleErrors})`;\n }\n if (visibleErrors === 0) {\n section.classList.add('hidden');\n }\n else {\n section.classList.remove('hidden');\n }\n });\n });\n });\n }\n escapeAttr(text) {\n return this.escapeHtml(text).replace(/\"/g, '"');\n }\n}\n\nclass HerbOverlay {\n constructor(options = {}) {\n this.options = options;\n this.showingERB = false;\n this.showingERBOutlines = false;\n this.showingERBHoverReveal = false;\n this.showingTooltips = true;\n this.showingViewOutlines = false;\n this.showingPartialOutlines = false;\n this.showingComponentOutlines = false;\n this.menuOpen = false;\n this.projectPath = '';\n this.preferredEditor = 'auto';\n this.defaultEditorFromServer = 'vscode';\n this.currentlyHoveredERBElement = null;\n this.errorOverlay = null;\n this.handleRevealedERBClick = (event) => {\n event.stopPropagation();\n event.preventDefault();\n const element = event.currentTarget;\n if (!element)\n return;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path');\n const line = element.getAttribute('data-herb-debug-line');\n const column = element.getAttribute('data-herb-debug-column');\n if (fullPath) {\n this.openFileInEditor(fullPath, line ? parseInt(line) : 1, column ? parseInt(column) : 1);\n }\n };\n if (options.autoInit !== false) {\n this.init();\n }\n }\n init() {\n this.loadProjectPath();\n this.loadDefaultEditor();\n this.loadSettings();\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.initializeErrorOverlay();\n this.setupTurboListeners();\n this.applySettings();\n }\n loadProjectPath() {\n if (this.options.projectPath) {\n this.projectPath = this.options.projectPath;\n return;\n }\n const metaTag = document.querySelector('meta[name=\"herb-project-path\"]');\n if (metaTag?.content) {\n this.projectPath = metaTag.content;\n }\n }\n loadDefaultEditor() {\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]');\n if (metaTag?.content) {\n const defaultEditor = metaTag.content.toLowerCase();\n const isValidEditor = HerbOverlay.EDITOR_OPTIONS.some(option => option.value === defaultEditor);\n if (isValidEditor) {\n this.defaultEditorFromServer = defaultEditor;\n }\n }\n }\n loadSettings() {\n const savedSettings = localStorage.getItem(HerbOverlay.SETTINGS_KEY);\n if (savedSettings) {\n try {\n const settings = JSON.parse(savedSettings);\n this.showingERB = settings.showingERB || false;\n this.showingERBOutlines = settings.showingERBOutlines || false;\n this.showingERBHoverReveal = settings.showingERBHoverReveal || false;\n this.showingTooltips = settings.showingTooltips !== undefined ? settings.showingTooltips : true;\n this.showingViewOutlines = settings.showingViewOutlines || false;\n this.showingPartialOutlines = settings.showingPartialOutlines || false;\n this.showingComponentOutlines = settings.showingComponentOutlines || false;\n this.menuOpen = settings.menuOpen || false;\n if (settings.preferredEditor) {\n this.preferredEditor = settings.preferredEditor;\n }\n }\n catch (e) {\n console.warn('Failed to load Herb dev tools settings:', e);\n }\n }\n }\n saveSettings() {\n const settings = {\n showingERB: this.showingERB,\n showingERBOutlines: this.showingERBOutlines,\n showingERBHoverReveal: this.showingERBHoverReveal,\n showingTooltips: this.showingTooltips,\n showingViewOutlines: this.showingViewOutlines,\n showingPartialOutlines: this.showingPartialOutlines,\n showingComponentOutlines: this.showingComponentOutlines,\n menuOpen: this.menuOpen,\n preferredEditor: this.preferredEditor\n };\n localStorage.setItem(HerbOverlay.SETTINGS_KEY, JSON.stringify(settings));\n this.updateMenuButtonState();\n }\n updateMenuButtonState() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n if (menuTrigger) {\n const hasActiveOptions = this.showingERB || this.showingERBOutlines || this.showingViewOutlines || this.showingPartialOutlines || this.showingComponentOutlines;\n if (hasActiveOptions) {\n menuTrigger.classList.add('has-active-options');\n }\n else {\n menuTrigger.classList.remove('has-active-options');\n }\n }\n }\n injectMenu() {\n const existingMenu = document.querySelector('.herb-floating-menu');\n if (existingMenu) {\n return;\n }\n const menuHTML = `\n <div class=\"herb-floating-menu\">\n <button class=\"herb-menu-trigger\" id=\"herbMenuTrigger\">\n <span class=\"herb-icon\">🌿</span>\n <span class=\"herb-text\">Herb</span>\n </button>\n\n <div class=\"herb-menu-panel\" id=\"herbMenuPanel\">\n <div class=\"herb-menu-header\">Herb Debug Tools</div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleViewOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-view\">View Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbTogglePartialOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-partial\">Partial Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleComponentOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-component\">Component Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERBOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-erb\">ERB Output Outlines</span>\n </label>\n\n <div class=\"herb-nested-toggle\" id=\"herbERBHoverRevealNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleERBHoverReveal\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Reveal ERB Output tag on hover</span>\n </label>\n </div>\n\n <div class=\"herb-nested-toggle\" id=\"herbTooltipsNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleTooltips\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Show Tooltips</span>\n </label>\n </div>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERB\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show ERB Output Tags</span>\n </label>\n </div>\n\n <div class=\"herb-editor-section\">\n <label class=\"herb-editor-label\">\n <span class=\"herb-editor-text\">Editor</span>\n <select id=\"herbEditorSelect\" class=\"herb-editor-select\">\n ${HerbOverlay.EDITOR_OPTIONS.map(editor => `<option value=\"${editor.value}\">${editor.label}</option>`).join('')}\n </select>\n </label>\n </div>\n\n <div class=\"herb-disable-all-section\">\n <button id=\"herbDisableAll\" class=\"herb-disable-all-btn\">Disable All</button>\n </div>\n </div>\n </div>\n `;\n document.body.insertAdjacentHTML('beforeend', menuHTML);\n }\n applySettings() {\n this.toggleViewOutlines(this.showingViewOutlines);\n this.togglePartialOutlines(this.showingPartialOutlines);\n this.toggleComponentOutlines(this.showingComponentOutlines);\n this.toggleERBTags(this.showingERB);\n this.toggleERBOutlines(this.showingERBOutlines);\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel && this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n }\n setupMenuToggle() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel) {\n menuTrigger.addEventListener('click', () => {\n this.menuOpen = !this.menuOpen;\n if (this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n else {\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n }\n this.saveSettings();\n });\n document.addEventListener('click', (e) => {\n const target = e.target;\n const floatingMenu = document.querySelector('.herb-floating-menu');\n if (floatingMenu && !floatingMenu.contains(target) && this.menuOpen) {\n this.menuOpen = false;\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n this.saveSettings();\n }\n });\n }\n }\n setupTurboListeners() {\n document.addEventListener('turbo:load', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:render', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:visit', () => {\n this.reinitializeAfterNavigation();\n });\n }\n reinitializeAfterNavigation() {\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.applySettings();\n this.updateMenuButtonState();\n }\n setupToggleSwitches() {\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n if (toggleViewOutlinesSwitch) {\n toggleViewOutlinesSwitch.checked = this.showingViewOutlines;\n toggleViewOutlinesSwitch.addEventListener('change', () => {\n this.toggleViewOutlines(toggleViewOutlinesSwitch.checked);\n });\n }\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n if (togglePartialOutlinesSwitch) {\n togglePartialOutlinesSwitch.checked = this.showingPartialOutlines;\n togglePartialOutlinesSwitch.addEventListener('change', () => {\n this.togglePartialOutlines(togglePartialOutlinesSwitch.checked);\n });\n }\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n if (toggleComponentOutlinesSwitch) {\n toggleComponentOutlinesSwitch.checked = this.showingComponentOutlines;\n toggleComponentOutlinesSwitch.addEventListener('change', () => {\n this.toggleComponentOutlines(toggleComponentOutlinesSwitch.checked);\n });\n }\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n if (toggleERBSwitch) {\n toggleERBSwitch.checked = this.showingERB;\n toggleERBSwitch.addEventListener('change', () => {\n if (toggleERBSwitch.checked && toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = false;\n this.toggleERBOutlines(false);\n }\n this.toggleERBTags(toggleERBSwitch.checked);\n });\n }\n if (toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = this.showingERBOutlines;\n toggleERBOutlinesSwitch.addEventListener('change', () => {\n if (toggleERBOutlinesSwitch.checked && toggleERBSwitch) {\n toggleERBSwitch.checked = false;\n this.toggleERBTags(false);\n }\n this.toggleERBOutlines(toggleERBOutlinesSwitch.checked);\n this.updateNestedToggleVisibility();\n });\n }\n else {\n console.warn('ERB outlines toggle switch not found');\n }\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = this.showingERBHoverReveal;\n toggleERBHoverRevealSwitch.addEventListener('change', () => {\n this.toggleERBHoverReveal(toggleERBHoverRevealSwitch.checked);\n });\n }\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = this.showingTooltips;\n toggleTooltipsSwitch.addEventListener('change', () => {\n this.toggleTooltips(toggleTooltipsSwitch.checked);\n });\n }\n this.updateNestedToggleVisibility();\n const disableAllBtn = document.getElementById('herbDisableAll');\n if (disableAllBtn) {\n disableAllBtn.addEventListener('click', () => {\n this.disableAll();\n });\n }\n }\n setupEditorDropdown() {\n const editorSelect = document.getElementById('herbEditorSelect');\n if (editorSelect) {\n const autoOption = editorSelect.querySelector('option[value=\"auto\"]');\n if (autoOption) {\n const editorLabel = HerbOverlay.EDITOR_OPTIONS.find(opt => opt.value === this.defaultEditorFromServer)?.label || this.defaultEditorFromServer;\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]');\n if (metaTag?.content) {\n autoOption.textContent = `Auto (from server): ${editorLabel}`;\n }\n else {\n autoOption.textContent = `Auto (default): ${editorLabel}`;\n }\n }\n editorSelect.value = this.preferredEditor;\n editorSelect.addEventListener('change', () => {\n this.preferredEditor = editorSelect.value;\n this.saveSettings();\n });\n }\n }\n toggleViewOutlines(show) {\n this.showingViewOutlines = show !== undefined ? show : !this.showingViewOutlines;\n const viewOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"view\"], [data-herb-debug-outline-type*=\"view\"]');\n viewOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingViewOutlines) {\n element.style.outline = '2px dotted #3b82f6';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'view');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n togglePartialOutlines(show) {\n this.showingPartialOutlines = show !== undefined ? show : !this.showingPartialOutlines;\n const partialOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"partial\"], [data-herb-debug-outline-type*=\"partial\"]');\n partialOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingPartialOutlines) {\n element.style.outline = '2px dotted #10b981';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'partial');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n toggleComponentOutlines(show) {\n this.showingComponentOutlines = show !== undefined ? show : !this.showingComponentOutlines;\n const componentOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"component\"], [data-herb-debug-outline-type*=\"component\"]');\n componentOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingComponentOutlines) {\n element.style.outline = '2px dotted #f59e0b';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'component');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n createOverlayLabel(element, type) {\n if (element.querySelector('.herb-overlay-label')) {\n return;\n }\n const shortName = element.getAttribute('data-herb-debug-file-name') || '';\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || shortName;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const label = document.createElement('div');\n label.className = 'herb-overlay-label';\n label.textContent = shortName;\n label.setAttribute('data-label-setup', 'true');\n label.addEventListener('mouseenter', () => {\n label.textContent = relativePath;\n document.querySelectorAll('.herb-overlay-label').forEach(otherLabel => {\n otherLabel.style.zIndex = '1000';\n });\n label.style.zIndex = '1002';\n });\n label.addEventListener('mouseleave', () => {\n label.textContent = shortName;\n label.style.zIndex = '1000';\n });\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.openFileInEditor(fullPath, 1, 1);\n });\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n element.style.outline = 'none';\n element.classList.remove('show-outline');\n const outlineColor = type === 'component' ? '#f59e0b' : type === 'partial' ? '#10b981' : '#3b82f6';\n parent.style.outline = `2px dotted ${outlineColor}`;\n parent.style.outlineOffset = parent.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n parent.classList.add('show-outline');\n parent.setAttribute('data-herb-debug-attached-outline-type', type);\n if (window.getComputedStyle(parent).position === 'static') {\n parent.style.position = 'relative';\n }\n label.style.position = 'absolute';\n label.style.top = '0';\n label.style.left = '0';\n parent.appendChild(label);\n return;\n }\n if (element.localName === 'html' || window.getComputedStyle(element).overflowY !== 'visible') {\n label.style.top = '0';\n }\n if (window.getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n element.appendChild(label);\n }\n removeOverlayLabel(element) {\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n const label = parent.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n parent.style.outline = 'none';\n parent.style.outlineOffset = '0';\n parent.classList.remove('show-outline');\n parent.removeAttribute('data-herb-debug-attached-outline-type');\n }\n else {\n const label = element.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n }\n }\n resetShowingERB() {\n const elements = document.querySelectorAll('[data-herb-debug-showing-erb');\n elements.forEach(element => {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n });\n }\n toggleERBTags(show) {\n this.showingERB = show !== undefined ? show : !this.showingERB;\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (this.showingERB && erbCode) {\n // this.resetShowingERB()\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n element.textContent = erbCode;\n element.setAttribute(\"data-herb-debug-showing-erb\", \"true\");\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n }\n else {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n if (element && element.hasAttribute(\"data-herb-debug-showing-erb\")) {\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n toggleERBOutlines(show) {\n this.showingERBOutlines = show !== undefined ? show : !this.showingERBOutlines;\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach(element => {\n const inserted = element.hasAttribute(\"data-herb-debug-inserted\");\n const needsWrapperToggled = (inserted && !element.children[0]);\n const realElement = element.children[0] || element;\n if (this.showingERBOutlines) {\n realElement.style.outline = '2px dotted #a78bfa';\n realElement.style.outlineOffset = '1px';\n if (needsWrapperToggled) {\n element.style.display = 'inline';\n }\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n if (this.showingERBHoverReveal) {\n this.addERBHoverReveal(element);\n }\n }\n else {\n realElement.style.outline = 'none';\n realElement.style.outlineOffset = '0';\n if (needsWrapperToggled) {\n element.style.display = 'contents';\n }\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n this.removeERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n updateNestedToggleVisibility() {\n const nestedToggle = document.getElementById('herbERBHoverRevealNested');\n const tooltipsNestedToggle = document.getElementById('herbTooltipsNested');\n if (nestedToggle) {\n nestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n if (tooltipsNestedToggle) {\n tooltipsNestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n }\n toggleERBHoverReveal(show) {\n this.showingERBHoverReveal = show !== undefined ? show : !this.showingERBHoverReveal;\n if (this.showingERBHoverReveal && this.showingTooltips) {\n this.toggleTooltips(false);\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = false;\n }\n }\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((el) => {\n const element = el;\n this.removeERBHoverReveal(element);\n if (this.showingERBHoverReveal && this.showingERBOutlines) {\n this.addERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n clearCurrentHoveredERB() {\n if (this.currentlyHoveredERBElement) {\n const handlers = this.currentlyHoveredERBElement._erbHoverHandlers;\n if (handlers) {\n handlers.hideERBCode();\n }\n this.currentlyHoveredERBElement = null;\n }\n }\n addERBHoverReveal(element) {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (!erbCode)\n return;\n this.removeERBHoverReveal(element);\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n const showERBCode = () => {\n if (!this.showingERBHoverReveal || !this.showingERBOutlines) {\n return;\n }\n if (this.currentlyHoveredERBElement === element) {\n return;\n }\n this.clearCurrentHoveredERB();\n this.currentlyHoveredERBElement = element;\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '3px';\n element.style.cursor = 'pointer';\n element.textContent = erbCode;\n element.addEventListener('click', this.handleRevealedERBClick);\n };\n const hideERBCode = () => {\n if (this.currentlyHoveredERBElement === element) {\n this.currentlyHoveredERBElement = null;\n }\n const originalContent = element.getAttribute('data-herb-debug-original');\n if (originalContent) {\n element.innerHTML = originalContent;\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '0';\n element.style.cursor = 'default';\n element.removeEventListener('click', this.handleRevealedERBClick);\n };\n element._erbHoverHandlers = { showERBCode, hideERBCode };\n element.addEventListener('mouseenter', showERBCode);\n }\n removeERBHoverReveal(element) {\n const handlers = element._erbHoverHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showERBCode);\n delete element._erbHoverHandlers;\n handlers.hideERBCode();\n }\n }\n createHoverTooltip(element, elementForPosition) {\n this.removeHoverTooltip(element);\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || element.getAttribute('data-herb-debug-file-name') || '';\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const line = element.getAttribute('data-herb-debug-line') || '';\n const column = element.getAttribute('data-herb-debug-column') || '';\n const erb = element.getAttribute('data-herb-debug-erb') || '';\n if (!relativePath || !erb)\n return;\n const tooltip = document.createElement('div');\n tooltip.className = 'herb-tooltip';\n tooltip.innerHTML = `\n <div class=\"herb-location\" data-tooltip=\"Open in Editor\">\n <span class=\"herb-file-path\">${relativePath}:${line}:${column}</span>\n <button class=\"herb-copy-path-btn\" data-tooltip=\"Copy file path\">📋</button>\n </div>\n <div class=\"herb-erb-code\">${erb}</div>\n `;\n let hideTimeout = null;\n const showTooltip = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n tooltip.classList.add('visible');\n };\n const hideTooltip = () => {\n hideTimeout = window.setTimeout(() => {\n tooltip.classList.remove('visible');\n }, 100);\n };\n element.addEventListener('mouseenter', showTooltip);\n element.addEventListener('mouseleave', hideTooltip);\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n const openInEditor = (e) => {\n if (e.target.closest('.herb-copy-path-btn')) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.openFileInEditor(fullPath, parseInt(line), parseInt(column));\n };\n locationElement?.addEventListener('click', openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n const copyFilePath = (e) => {\n e.preventDefault();\n e.stopPropagation();\n const textToCopy = `${relativePath}:${line}:${column}`;\n navigator.clipboard.writeText(textToCopy).then(() => {\n copyButton.textContent = '✅';\n setTimeout(() => {\n copyButton.textContent = '📋';\n }, 1000);\n }).catch((err) => {\n console.error('Failed to copy file path:', err);\n });\n };\n copyButton?.addEventListener('click', copyFilePath);\n const positionTooltip = () => {\n const elementRect = elementForPosition.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n tooltip.style.position = 'fixed';\n tooltip.style.left = '0';\n tooltip.style.top = '0';\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n const actualTooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = actualTooltipRect.width;\n const tooltipHeight = actualTooltipRect.height;\n let left = elementRect.left + (elementRect.width / 2) - (tooltipWidth / 2);\n let top = elementRect.top - tooltipHeight - 8;\n if (left < 8) {\n left = 8;\n }\n else if (left + tooltipWidth > viewportWidth - 8) {\n left = viewportWidth - tooltipWidth - 8;\n }\n if (top < 8) {\n top = elementRect.bottom + 8;\n if (top + tooltipHeight > viewportHeight - 8) {\n top = Math.max(8, (viewportHeight - tooltipHeight) / 2);\n }\n }\n if (top + tooltipHeight > viewportHeight - 8) {\n top = viewportHeight - tooltipHeight - 8;\n }\n tooltip.style.position = 'fixed';\n tooltip.style.left = `${left}px`;\n tooltip.style.top = `${top}px`;\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n };\n element._tooltipHandlers = { showTooltip, hideTooltip, openInEditor, copyFilePath, positionTooltip };\n tooltip._tooltipHandlers = { showTooltip, hideTooltip };\n element.appendChild(tooltip);\n setTimeout(positionTooltip, 0);\n window.addEventListener('scroll', positionTooltip, { passive: true });\n window.addEventListener('resize', positionTooltip, { passive: true });\n }\n removeHoverTooltip(element) {\n const tooltip = element.querySelector('.herb-tooltip');\n if (tooltip) {\n const handlers = element._tooltipHandlers;\n const tooltipHandlers = tooltip._tooltipHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showTooltip);\n element.removeEventListener('mouseleave', handlers.hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n locationElement?.removeEventListener('click', handlers.openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n copyButton?.removeEventListener('click', handlers.copyFilePath);\n if (handlers.positionTooltip) {\n window.removeEventListener('scroll', handlers.positionTooltip);\n window.removeEventListener('resize', handlers.positionTooltip);\n }\n delete element._tooltipHandlers;\n }\n if (tooltipHandlers) {\n tooltip.removeEventListener('mouseenter', tooltipHandlers.showTooltip);\n tooltip.removeEventListener('mouseleave', tooltipHandlers.hideTooltip);\n delete tooltip._tooltipHandlers;\n }\n tooltip.remove();\n }\n }\n addTooltipHoverHandler(element) {\n this.removeTooltipHoverHandler(element);\n const lazyTooltipHandler = () => {\n if (!this.showingTooltips || !this.showingERBOutlines) {\n return;\n }\n if (element.querySelector('.herb-tooltip')) {\n return;\n }\n this.createHoverTooltip(element, element);\n };\n element._lazyTooltipHandler = lazyTooltipHandler;\n element.addEventListener('mouseenter', lazyTooltipHandler);\n }\n removeTooltipHoverHandler(element) {\n const handler = element._lazyTooltipHandler;\n if (handler) {\n element.removeEventListener('mouseenter', handler);\n delete element._lazyTooltipHandler;\n }\n }\n getEditorUrl(editor, absolutePath, line, column) {\n switch (editor) {\n case 'cursor':\n return `cursor://file/${absolutePath}:${line}:${column}`;\n case 'vscode':\n return `vscode://file/${absolutePath}:${line}:${column}`;\n case 'vscodium':\n return `vscodium://file/${absolutePath}:${line}:${column}`;\n case 'zed':\n return `zed://file/${absolutePath}:${line}:${column}`;\n case 'windsurf':\n return `windsurf://file/${absolutePath}:${line}:${column}`;\n case 'sublime':\n return `subl://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'atom':\n return `atom://core/open/file?filename=${absolutePath}&line=${line}&column=${column}`;\n case 'textmate':\n return `txmt://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'emacs':\n return `emacs://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'idea':\n return `idea://open?file=${absolutePath}&line=${line}&column=${column}`;\n case 'rubymine':\n return `x-mine://open?file=${absolutePath}&line=${line}&column=${column}`;\n case 'nova':\n return `nova://open?path=${absolutePath}&line=${line}&column=${column}`;\n case 'macvim':\n return `mvim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'vim':\n return `vim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'nvim':\n return `nvim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n default:\n return '';\n }\n }\n openFileInEditor(file, line, column) {\n const absolutePath = file.startsWith('/') ? file : (this.projectPath ? `${this.projectPath}/${file}` : file);\n const editorToUse = this.preferredEditor === 'auto' ? this.defaultEditorFromServer : this.preferredEditor;\n const url = this.getEditorUrl(editorToUse, absolutePath, line, column);\n if (url) {\n try {\n window.open(url, '_self');\n }\n catch (_error) {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n else {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n toggleTooltips(show) {\n this.showingTooltips = show !== undefined ? show : !this.showingTooltips;\n if (this.showingTooltips && this.showingERBHoverReveal) {\n this.toggleERBHoverReveal(false);\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = false;\n }\n }\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n if (this.showingERBOutlines && this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n else {\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n disableAll() {\n this.clearCurrentHoveredERB();\n this.toggleViewOutlines(false);\n this.togglePartialOutlines(false);\n this.toggleComponentOutlines(false);\n this.toggleERBTags(false);\n this.toggleERBOutlines(false);\n this.toggleERBHoverReveal(false);\n this.toggleTooltips(false);\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleViewOutlinesSwitch)\n toggleViewOutlinesSwitch.checked = false;\n if (togglePartialOutlinesSwitch)\n togglePartialOutlinesSwitch.checked = false;\n if (toggleComponentOutlinesSwitch)\n toggleComponentOutlinesSwitch.checked = false;\n if (toggleERBSwitch)\n toggleERBSwitch.checked = false;\n if (toggleERBOutlinesSwitch)\n toggleERBOutlinesSwitch.checked = false;\n if (toggleERBHoverRevealSwitch)\n toggleERBHoverRevealSwitch.checked = false;\n if (toggleTooltipsSwitch)\n toggleTooltipsSwitch.checked = false;\n }\n initializeErrorOverlay() {\n this.errorOverlay = new ErrorOverlay();\n }\n}\nHerbOverlay.SETTINGS_KEY = 'herb-dev-tools-settings';\nHerbOverlay.EDITOR_OPTIONS = [\n { value: 'auto', label: 'Auto (from server via RAILS_EDITOR or EDITOR)' },\n { value: 'atom', label: 'Atom' },\n { value: 'cursor', label: 'Cursor' },\n { value: 'emacs', label: 'Emacs' },\n { value: 'idea', label: 'IntelliJ IDEA' },\n { value: 'macvim', label: 'MacVim' },\n { value: 'nova', label: 'Nova' },\n { value: 'nvim', label: 'Neovim' },\n { value: 'rubymine', label: 'RubyMine' },\n { value: 'sublime', label: 'Sublime Text' },\n { value: 'textmate', label: 'TextMate' },\n { value: 'vim', label: 'Vim' },\n { value: 'vscode', label: 'Visual Studio Code' },\n { value: 'vscodium', label: 'VSCodium' },\n { value: 'windsurf', label: 'Windsurf' },\n { value: 'zed', label: 'Zed' },\n];\n\nfunction initHerbDevTools(options = {}) {\n return new HerbOverlay(options);\n}\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const hasDebugMode = document.querySelector('meta[name=\"herb-debug-mode\"]')?.getAttribute('content') === 'true';\n const hasDebugErb = document.querySelector('[data-herb-debug-erb]') !== null;\n const hasValidationErrors = document.querySelector('template[data-herb-validation-errors]') !== null;\n const hasValidationError = document.querySelector('template[data-herb-validation-error]') !== null;\n const hasParserErrors = document.querySelector('template[data-herb-parser-error]') !== null;\n const shouldAutoInit = hasDebugMode || hasDebugErb || hasValidationErrors || hasValidationError || hasParserErrors;\n if (shouldAutoInit) {\n document.addEventListener('DOMContentLoaded', () => {\n initHerbDevTools();\n });\n }\n}\nif (typeof window !== 'undefined') {\n window.HerbDevTools = {\n init: initHerbDevTools,\n HerbOverlay\n };\n}\n\nexport { HerbOverlay, initHerbDevTools };\n//# sourceMappingURL=herb-dev-tools.esm.js.map\n","import { initHerbDevTools, HerbOverlay, type HerbDevToolsOptions } from \"@herb-tools/dev-tools\"\n\nexport interface ReActionViewDevToolsOptions extends HerbDevToolsOptions {\n projectPath?: string\n autoInit?: boolean\n}\n\nexport class ReActionViewDevTools {\n private herbOverlay: HerbOverlay | null = null\n private static instance: ReActionViewDevTools | null = null\n\n constructor(private options: ReActionViewDevToolsOptions = {}) {\n if (options.autoInit !== false) {\n this.init()\n }\n }\n\n init(): HerbOverlay {\n if (this.herbOverlay) {\n this.destroy()\n }\n\n this.herbOverlay = initHerbDevTools({\n projectPath: this.options.projectPath,\n ...this.options\n })\n\n return this.herbOverlay\n }\n\n destroy(): void {\n if (this.herbOverlay) {\n const existingMenu = document.querySelector(\".herb-floating-menu\")\n\n if (existingMenu) {\n existingMenu.remove()\n }\n }\n\n this.herbOverlay = null\n }\n\n getHerbOverlay(): HerbOverlay | null {\n return this.herbOverlay\n }\n\n static getInstance(): ReActionViewDevTools | null {\n return ReActionViewDevTools.instance\n }\n\n static setInstance(instance: ReActionViewDevTools | null): void {\n ReActionViewDevTools.instance = instance\n }\n}\n\nexport function initReActionViewDevTools(options: ReActionViewDevToolsOptions = {}): ReActionViewDevTools {\n const existingInstance = ReActionViewDevTools.getInstance()\n\n if (existingInstance) {\n existingInstance.destroy()\n }\n\n const instance = new ReActionViewDevTools(options)\n ReActionViewDevTools.setInstance(instance)\n\n return instance\n}\n\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n let isInitializing = false\n\n const initializeDevTools = () => {\n if (isInitializing) {\n console.log(\"ReActionView dev tools initialization already in progress, skipping...\")\n\n return\n }\n\n const shouldAutoInit = document.querySelector(`meta[name=\"herb-debug-mode\"]`)?.getAttribute(\"content\") === \"true\" || document.querySelector(\"[data-herb-debug-erb]\") !== null\n\n if (!shouldAutoInit) {\n console.log(\"ReActionView debug mode not detected, skipping dev tools initialization\")\n return\n }\n\n isInitializing = true\n\n try {\n let projectPath: string | undefined\n const railsRoot = document.querySelector(`meta[name=\"herb-rails-root\"]`)?.getAttribute(\"content\")\n if (railsRoot) {\n projectPath = railsRoot\n }\n\n initReActionViewDevTools({\n projectPath,\n autoInit: true\n })\n\n } catch (error) {\n console.warn(\"Could not initialize ReActionView dev tools:\", error)\n } finally {\n isInitializing = false\n }\n }\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", initializeDevTools, { once: true })\n } else {\n setTimeout(initializeDevTools, 0)\n }\n\n document.addEventListener(\"turbo:load\", initializeDevTools)\n document.addEventListener(\"turbo:render\", initializeDevTools)\n document.addEventListener(\"turbo:visit\", initializeDevTools)\n}\n\ndeclare global {\n interface Window {\n ReActionViewDevTools: {\n init: typeof initReActionViewDevTools\n ReActionViewDevTools: typeof ReActionViewDevTools\n HerbOverlay: typeof HerbOverlay\n }\n }\n}\n\nif (typeof window !== \"undefined\") {\n window.ReActionViewDevTools = {\n init: initReActionViewDevTools,\n ReActionViewDevTools,\n HerbOverlay\n }\n}\n\nexport { HerbOverlay, type HerbDevToolsOptions }\n"],"names":[],"mappings":"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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL,IAAI;AACJ,IAAI,8BAA8B,CAAC,OAAO,EAAE;AAC5C,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC;AACpE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;AACtE,QAAQ;AACR,QAAQ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;AACjD,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE;AACtC,gBAAgB,OAAO,CAAC,MAAM,EAAE;AAChC,YAAY;AACZ,QAAQ,CAAC,CAAC;A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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"reactionview-dev-tools.esm.js","sources":["../../../node_modules/@herb-tools/client/dist/herb-client.esm.js","../../../node_modules/@herb-tools/dev-tools/dist/herb-dev-tools.esm.js","../../../javascript/packages/dev-tools/src/index.ts"],"sourcesContent":["const DEFAULT_RECONNECT_INTERVAL = 1000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 10;\nclass Connection {\n constructor(options) {\n this.socket = null;\n this.reconnectAttempts = 0;\n this.reconnectTimer = null;\n this.givenUp = false;\n this.options = {\n reconnectInterval: DEFAULT_RECONNECT_INTERVAL,\n maxReconnectAttempts: DEFAULT_MAX_RECONNECT_ATTEMPTS,\n ...options,\n };\n }\n get reconnectInterval() {\n return this.options.reconnectInterval ?? DEFAULT_RECONNECT_INTERVAL;\n }\n get maxReconnectAttempts() {\n return this.options.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS;\n }\n connect() {\n if (this.socket?.readyState === WebSocket.OPEN)\n return;\n this.givenUp = false;\n this.reconnectAttempts = 0;\n this.attemptConnect();\n }\n disconnect() {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.givenUp = false;\n this.reconnectAttempts = this.maxReconnectAttempts;\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n retry() {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.socket) {\n this.socket.onclose = null;\n this.socket.close();\n this.socket = null;\n }\n this.givenUp = false;\n this.reconnectAttempts = 0;\n this.attemptConnect();\n }\n get hasGivenUp() {\n return this.givenUp;\n }\n attemptConnect() {\n try {\n this.socket = new WebSocket(this.options.url);\n this.socket.onopen = () => {\n this.reconnectAttempts = 0;\n this.options.onConnect?.();\n };\n this.socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data);\n this.options.onMessage?.(message);\n }\n catch (error) {\n console.warn(\"[herb-client] failed to parse message:\", error);\n }\n };\n this.socket.onclose = () => {\n console.debug(\"[herb-client] disconnected from dev server\");\n this.options.onDisconnect?.();\n this.scheduleReconnect();\n };\n this.socket.onerror = () => {\n try {\n this.socket?.close();\n }\n catch {\n this.scheduleReconnect();\n }\n };\n }\n catch {\n this.scheduleReconnect();\n }\n }\n scheduleReconnect() {\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n console.debug(\"[herb-client] gave up reconnecting after %d attempts\", this.reconnectAttempts);\n this.givenUp = true;\n this.options.onGivenUp?.();\n return;\n }\n this.reconnectAttempts++;\n const delay = Math.min(this.reconnectInterval * Math.pow(1.5, this.reconnectAttempts - 1), 10000);\n this.options.onReconnecting?.(this.reconnectAttempts, this.maxReconnectAttempts, delay);\n this.reconnectTimer = setTimeout(() => {\n this.attemptConnect();\n }, delay);\n }\n}\n\nconst colors = {\n green: \"#22c55e\",\n greenDark: \"#059669\",\n greenLight: \"#ecfdf5\",\n greenBorder: \"#10b981\",\n greenGlow: \"0 0 4px rgba(34, 197, 94, 0.5)\",\n red: \"#ef4444\",\n redDark: \"#991b1b\",\n redLight: \"#fef2f2\",\n amber: \"#f59e0b\",\n amberDark: \"#92400e\",\n amberDarker: \"#d97706\",\n amberLight: \"#fffbeb\",\n gray: \"#6b7280\",\n grayLighter: \"#a16207\",\n};\n\nconst TOAST_DURATION = 3000;\nconst TOAST_FADE_DURATION = 300;\nconst TOAST_ID = \"herbDevServerToast\";\nconst TOAST_STYLES = {\n connected: { background: colors.greenLight, border: colors.greenBorder, text: \"#065f46\", icon: \"\\u{1F7E2}\" },\n disconnected: { background: colors.redLight, border: colors.red, text: colors.redDark, icon: \"\\u{1F534}\" },\n warning: { background: colors.amberLight, border: colors.amber, text: colors.amberDark, icon: \"\\u{1F7E1}\" },\n};\nclass Toast {\n static show(message, type) {\n document.getElementById(TOAST_ID)?.remove();\n const style = TOAST_STYLES[type];\n const toast = document.createElement(\"div\");\n toast.id = TOAST_ID;\n toast.style.cssText = `position:fixed;top:36px;right:10px;z-index:999997;background:${style.background};border:1px solid ${style.border};border-radius:8px;padding:8px 14px;font-family:system-ui,sans-serif;font-size:12px;color:${style.text};box-shadow:0 4px 12px rgba(0,0,0,0.1);display:flex;align-items:center;gap:8px;transition:opacity 0.3s ease;`;\n const icon = document.createElement(\"span\");\n icon.textContent = style.icon;\n const text = document.createElement(\"span\");\n text.textContent = message;\n toast.appendChild(icon);\n toast.appendChild(text);\n document.body.appendChild(toast);\n setTimeout(() => {\n toast.style.opacity = \"0\";\n setTimeout(() => toast.remove(), TOAST_FADE_DURATION);\n }, TOAST_DURATION);\n }\n}\n\nclass ConnectionDot {\n constructor(client) {\n this.reconnectCountdown = null;\n this.client = client;\n }\n apply() {\n if (this.reconnectCountdown) {\n clearInterval(this.reconnectCountdown);\n this.reconnectCountdown = null;\n }\n const dot = document.getElementById(\"herbConnectionDot\");\n if (!dot)\n return;\n const panelDot = document.getElementById(\"herbDevServerDot\");\n const panelStatus = document.getElementById(\"herbDevServerStatus\");\n const panelRetry = document.getElementById(\"herbDevServerRetry\");\n const retryHandler = (e) => { e.stopPropagation(); this.client.retry(); };\n const state = this.client.getState();\n switch (state) {\n case \"connected\":\n this.setDotStyle(dot, colors.green, true, true);\n dot.style.cursor = \"default\";\n dot.title = \"Connected to herb dev server\";\n dot.onclick = null;\n this.updatePanel(panelDot, panelStatus, panelRetry, {\n dotColor: colors.green,\n statusText: `Dev Server connected (port ${this.client.getPort()})`,\n statusColor: colors.greenDark,\n retryVisible: false,\n });\n break;\n case \"disconnected\":\n this.setDotStyle(dot, colors.red, false, false);\n dot.style.cursor = \"default\";\n dot.title = \"Disconnected from herb dev server\";\n dot.onclick = null;\n this.updatePanel(panelDot, panelStatus, panelRetry, {\n dotColor: colors.red,\n statusText: \"Dev Server disconnected\",\n statusColor: colors.gray,\n retryVisible: true,\n retryHandler,\n });\n break;\n case \"given-up\":\n this.setDotStyle(dot, colors.amber, false, false);\n dot.style.cursor = \"pointer\";\n dot.title = \"Connection to herb dev server failed — click to retry\";\n dot.onclick = retryHandler;\n this.updatePanel(panelDot, panelStatus, panelRetry, {\n dotColor: colors.amber,\n statusText: \"Dev Server not available\",\n statusColor: colors.amberDarker,\n retryVisible: true,\n retryHandler,\n });\n break;\n }\n }\n updateReconnectCountdown(attempt, maxAttempts, delay) {\n const panelStatus = document.getElementById(\"herbDevServerStatus\");\n if (!panelStatus)\n return;\n if (this.reconnectCountdown) {\n clearInterval(this.reconnectCountdown);\n this.reconnectCountdown = null;\n }\n let remaining = Math.ceil(delay / 1000);\n panelStatus.textContent = `Retry ${attempt}/${maxAttempts} in ${remaining}s`;\n panelStatus.style.color = colors.gray;\n this.reconnectCountdown = setInterval(() => {\n remaining--;\n if (remaining <= 0) {\n if (this.reconnectCountdown) {\n clearInterval(this.reconnectCountdown);\n this.reconnectCountdown = null;\n }\n panelStatus.textContent = `Retry ${attempt}/${maxAttempts} connecting...`;\n return;\n }\n panelStatus.textContent = `Retry ${attempt}/${maxAttempts} in ${remaining}s`;\n }, 1000);\n }\n updatePanel(panelDot, panelStatus, panelRetry, options) {\n if (panelDot)\n this.setDotStyle(panelDot, options.dotColor, false, false);\n if (panelStatus) {\n panelStatus.textContent = options.statusText;\n panelStatus.style.color = options.statusColor;\n }\n if (panelRetry) {\n panelRetry.style.display = options.retryVisible ? \"block\" : \"none\";\n if (options.retryHandler) {\n panelRetry.onclick = options.retryHandler;\n }\n }\n }\n setDotStyle(element, background, glow, pulse) {\n element.style.background = background;\n element.style.boxShadow = glow ? colors.greenGlow : \"none\";\n element.style.animation = pulse ? \"herb-dot-pulse 2s ease-in-out infinite\" : \"none\";\n }\n}\n\nconst ALERT_ID = \"herbProjectMismatchAlert\";\nclass MismatchAlert {\n static show(serverProject, clientProject) {\n if (document.getElementById(ALERT_ID))\n return;\n const serverName = serverProject.split(\"/\").pop() ?? serverProject;\n const clientName = clientProject.split(\"/\").pop() ?? clientProject;\n const alert = document.createElement(\"div\");\n alert.id = ALERT_ID;\n alert.style.cssText = `position:fixed;top:32px;right:10px;z-index:999998;background:${colors.amberLight};border:1px solid ${colors.amber};border-radius:8px;padding:12px 16px;max-width:320px;font-family:system-ui,sans-serif;font-size:13px;color:${colors.amberDark};box-shadow:0 4px 12px rgba(0,0,0,0.1);display:flex;gap:10px;align-items:flex-start;`;\n const iconElement = document.createElement(\"span\");\n iconElement.style.cssText = \"font-size:18px;line-height:1;\";\n iconElement.textContent = \"\\u26A0\\uFE0F\";\n const content = document.createElement(\"div\");\n content.style.flex = \"1\";\n const title = document.createElement(\"div\");\n title.style.cssText = \"font-weight:600;margin-bottom:4px;\";\n title.textContent = \"Herb Dev Server mismatch\";\n const description = document.createElement(\"div\");\n description.style.cssText = `font-size:12px;color:${colors.grayLighter};`;\n description.textContent = `The dev server is watching ${serverName} but this page is from ${clientName}. Messages will be ignored.`;\n content.appendChild(title);\n content.appendChild(description);\n const dismiss = document.createElement(\"button\");\n dismiss.style.cssText = `background:none;border:none;cursor:pointer;font-size:16px;color:${colors.amberDark};padding:0;line-height:1;`;\n dismiss.textContent = \"\\u2715\";\n dismiss.addEventListener(\"click\", () => alert.remove());\n alert.appendChild(iconElement);\n alert.appendChild(content);\n alert.appendChild(dismiss);\n document.body.appendChild(alert);\n const panelStatus = document.getElementById(\"herbDevServerStatus\");\n const panelDot = document.getElementById(\"herbDevServerDot\");\n if (panelStatus) {\n panelStatus.textContent = `Wrong project (${serverName})`;\n panelStatus.style.color = colors.amberDarker;\n }\n if (panelDot) {\n panelDot.style.background = colors.amber;\n }\n }\n}\n\nfunction applyPatch(message) {\n const selector = `[data-herb-debug-file-relative-path=\"${message.file}\"]`;\n const roots = document.querySelectorAll(selector);\n if (roots.length === 0) {\n console.debug(\"[herb-client] no roots found for selector:\", selector);\n return false;\n }\n let applied = false;\n for (const operation of message.operations) {\n let operationApplied = false;\n for (let i = 0; i < roots.length; i++) {\n if (applyOperation(roots[i], operation)) {\n operationApplied = true;\n }\n else {\n console.debug(`[herb-client] operation not applied to root ${i}:`, roots[i]);\n }\n }\n if (operationApplied) {\n applied = true;\n }\n else {\n console.debug(\"[herb-client] operation not applied:\", operation);\n }\n }\n return applied;\n}\nfunction applyOperation(root, operation) {\n switch (operation.type) {\n case \"text_changed\":\n return applyTextChange(root, operation);\n case \"attribute_value_changed\":\n return applyAttributeChange(root, operation);\n case \"attribute_added\":\n return applyAttributeAdd(root, operation);\n case \"attribute_removed\":\n return applyAttributeRemove(root, operation);\n default:\n console.debug(`[herb-client] unhandled operation type: ${operation.type}`);\n return false;\n }\n}\nfunction parseAttribute(value) {\n const match = value.match(/^([^=]+)=\"(.*)\"$/);\n if (!match)\n return null;\n return { name: match[1], value: match[2] };\n}\nfunction findTarget(root, operation) {\n if (!operation.old_value)\n return null;\n const attribute = parseAttribute(operation.old_value);\n if (!attribute)\n return null;\n if (root.getAttribute(attribute.name) === attribute.value)\n return root;\n const target = root.querySelector(`[${attribute.name}=\"${CSS.escape(attribute.value)}\"]`);\n return target;\n}\nfunction findTextTarget(root, operation) {\n if (operation.old_value === null)\n return null;\n const trimmedOld = operation.old_value.trim();\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n let node;\n while ((node = walker.nextNode())) {\n if (node.textContent?.trim() === trimmedOld) {\n return node;\n }\n }\n return null;\n}\nfunction applyTextChange(root, operation) {\n if (operation.new_value === null)\n return false;\n const textNode = findTextTarget(root, operation);\n if (textNode) {\n textNode.textContent = operation.new_value;\n return true;\n }\n return false;\n}\nfunction applyAttributeChange(root, operation) {\n if (operation.old_value === null || operation.new_value === null)\n return false;\n const node = findTarget(root, operation);\n if (!node)\n return false;\n const newAttr = parseAttribute(operation.new_value);\n if (!newAttr)\n return false;\n node.setAttribute(newAttr.name, newAttr.value);\n return true;\n}\nfunction applyAttributeAdd(root, operation) {\n if (operation.new_value === null)\n return false;\n const attribute = parseAttribute(operation.new_value);\n if (!attribute)\n return false;\n const node = findTarget(root, operation) ?? root;\n node.setAttribute(attribute.name, attribute.value);\n return true;\n}\nfunction applyAttributeRemove(root, operation) {\n if (operation.old_value === null)\n return false;\n const node = findTarget(root, operation);\n if (!node)\n return false;\n const match = operation.old_value.match(/^([^=]+)(?:=\".*\")?$/);\n if (!match)\n return false;\n node.removeAttribute(match[1]);\n return true;\n}\n\nconst DEFAULT_PORT = 8592;\nclass HerbClient {\n constructor(options = {}) {\n this.state = \"disconnected\";\n this.hasConnectedBefore = false;\n this.projectMatch = null;\n this.options = options;\n const port = options.port ?? this.detectPort() ?? DEFAULT_PORT;\n const host = options.host ?? \"localhost\";\n this.port = port;\n this.connectionDot = new ConnectionDot(this);\n this.connection = new Connection({\n url: `ws://${host}:${port}`,\n onMessage: (message) => this.handleMessage(message),\n onConnect: () => this.onConnect(),\n onDisconnect: () => this.onDisconnect(),\n onReconnecting: (attempt, maxAttempts, delay) => this.onReconnecting(attempt, maxAttempts, delay),\n onGivenUp: () => this.onGivenUp(),\n });\n }\n connect() {\n this.connection.connect();\n }\n disconnect() {\n this.connection.disconnect();\n }\n retry() {\n this.updateState(\"disconnected\");\n this.connection.retry();\n }\n getState() {\n return this.state;\n }\n getPort() {\n return this.port;\n }\n applyConnectionDot() {\n this.connectionDot.apply();\n }\n onConnect() {\n const wasDisconnected = this.state === \"disconnected\" || this.state === \"given-up\";\n if (this.hasConnectedBefore && wasDisconnected) {\n Toast.show(\"Herb Dev Server reconnected\", \"connected\");\n }\n this.hasConnectedBefore = true;\n this.updateState(\"connected\");\n this.options.onConnect?.();\n }\n onDisconnect() {\n if (this.hasConnectedBefore && this.state === \"connected\") {\n Toast.show(\"Herb Dev Server disconnected\", \"disconnected\");\n }\n this.updateState(\"disconnected\");\n this.options.onDisconnect?.();\n }\n onReconnecting(attempt, maxAttempts, delay) {\n console.debug(`[herb-client] reconnecting (attempt ${attempt}/${maxAttempts}, next try in ${(delay / 1000).toFixed(1)}s)...`);\n this.connectionDot.updateReconnectCountdown(attempt, maxAttempts, delay);\n }\n onGivenUp() {\n this.updateState(\"given-up\");\n Toast.show(\"Herb Dev Server not available — click the dot to retry\", \"warning\");\n }\n handleMessage(message) {\n if (message.type !== \"welcome\" && this.projectMatch === false)\n return;\n switch (message.type) {\n case \"welcome\":\n this.handleWelcome(message);\n break;\n case \"patch\":\n this.handlePatch(message);\n break;\n case \"reload\":\n this.handleReload(message);\n break;\n case \"error\":\n this.handleError(message);\n break;\n case \"fixed\":\n this.handleFixed(message);\n break;\n }\n }\n handleWelcome(message) {\n const clientProject = document.querySelector('meta[name=\"herb-project-path\"]')?.getAttribute(\"content\");\n if (clientProject && message.project && clientProject !== message.project) {\n this.projectMatch = false;\n console.warn(`[herb-client] project mismatch — server: ${message.project}, client: ${clientProject}. Ignoring messages.`);\n this.updateState(\"disconnected\");\n MismatchAlert.show(message.project, clientProject);\n }\n else {\n this.projectMatch = true;\n }\n }\n handlePatch(message) {\n this.options.onPatch?.(message);\n const applied = applyPatch(message);\n if (!applied) {\n window.location.reload();\n }\n }\n handleReload(message) {\n this.options.onReload?.(message);\n window.location.reload();\n }\n handleError(message) {\n this.options.onError?.(message);\n const overlay = this.getErrorOverlay();\n if (overlay) {\n const errors = message.errors.map((error) => ({\n severity: \"error\",\n message: error.message,\n name: error.name,\n location: { line: error.line, column: error.column },\n }));\n overlay.showErrors(errors, message.file);\n }\n }\n handleFixed(message) {\n this.options.onFixed?.(message);\n this.getErrorOverlay()?.clearErrors();\n }\n updateState(state) {\n this.state = state;\n this.connectionDot.apply();\n }\n getErrorOverlay() {\n const devTools = window.HerbDevTools;\n return devTools?._errorOverlay ?? devTools?._overlay?.errorOverlay ?? null;\n }\n detectPort() {\n const meta = document.querySelector('meta[name=\"herb-dev-server-port\"]');\n if (meta) {\n const port = parseInt(meta.getAttribute(\"content\") ?? \"\", 10);\n if (!isNaN(port))\n return port;\n }\n return null;\n }\n}\n\nlet instance = null;\nfunction initHerbClient(options = {}) {\n if (instance) {\n instance.disconnect();\n }\n instance = new HerbClient(options);\n window.__herbClient = instance;\n instance.connect();\n return instance;\n}\nfunction getHerbClient() {\n return instance;\n}\nfunction autoInitialize() {\n const debugMeta = document.querySelector('meta[name=\"herb-debug-mode\"]');\n if (!debugMeta || debugMeta.getAttribute(\"content\") !== \"true\")\n return;\n initHerbClient();\n}\nif (typeof document !== \"undefined\") {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", autoInitialize);\n }\n else {\n autoInitialize();\n }\n}\n\nexport { Connection, ConnectionDot, HerbClient, MismatchAlert, Toast, applyPatch, getHerbClient, initHerbClient };\n//# sourceMappingURL=herb-client.esm.js.map\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".herb-overlay-label{background:rgba(0,0,0,.8);border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,monospace;font-size:11px;font-weight:500;left:4px;line-height:1.2;padding:2px 6px;position:absolute;top:-18px;transition:all .2s ease;white-space:nowrap;z-index:1000}.herb-overlay-label:hover{background:rgba(0,0,0,.9);color:#374151;transform:scale(1.02);z-index:1001}[data-herb-debug-outline-type*=view]>.herb-overlay-label{background:#dbeafe;border-color:#93c5fd;color:#1e40af}[data-herb-debug-outline-type*=partial]>.herb-overlay-label{background:#d1fae5;border-color:#6ee7b7;color:#065f46}[data-herb-debug-outline-type*=component]>.herb-overlay-label{background:#fef3c7;border-color:#fcd34d;color:#92400e}[data-herb-debug-outline-type*=erb-output]{transition:all .3s ease}.herb-tooltip{background:#fff;border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.12),0 2px 8px rgba(0,0,0,.08);display:flex;flex-direction:column;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:14px;gap:12px;max-width:calc(100vw - 16px);opacity:0;overflow:visible;padding:16px 20px;pointer-events:none;position:fixed;transition:opacity .2s ease,visibility .2s ease;visibility:hidden;white-space:nowrap;z-index:10001}.herb-tooltip.visible{opacity:1;pointer-events:auto;visibility:visible}.herb-tooltip .herb-location{align-items:center;background:#f8f9fa;border-radius:12px 12px 0 0;color:#6b7280;cursor:pointer;display:flex;font-size:13px;font-weight:500;gap:12px;justify-content:space-between;margin:-16px -20px 0;padding:12px 20px;transition:all .2s ease}.herb-tooltip .herb-location:hover{background:#f1f3f4;color:#374151}.herb-copy-path-btn{background:transparent;border:none;border-radius:4px;color:#6b7280;cursor:pointer;flex-shrink:0;font-size:14px;padding:4px;position:relative;transition:all .2s ease}.herb-copy-path-btn:hover{background:hsla(220,9%,46%,.1);color:#374151}.herb-copy-path-btn:active{transform:scale(.95)}.herb-location:after{background:#1f2937;border-radius:6px;bottom:calc(100% + 8px);color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;white-space:nowrap}.herb-location:after,.herb-location:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10002}.herb-location:before{border:4px solid transparent;border-top-color:#1f2937;bottom:calc(100% + 2px);content:\\\"\\\"}.herb-location:hover:after,.herb-location:hover:before{opacity:1;visibility:visible}.herb-location:has(.herb-copy-path-btn:hover):after,.herb-location:has(.herb-copy-path-btn:hover):before{opacity:0!important;visibility:hidden!important}.herb-copy-path-btn:after{background:#1f2937;border-radius:6px;color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;top:-36px;white-space:nowrap}.herb-copy-path-btn:after,.herb-copy-path-btn:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10003}.herb-copy-path-btn:before{border:4px solid transparent;border-bottom-color:#1f2937;content:\\\"\\\";top:-6px}.herb-copy-path-btn:hover:after,.herb-copy-path-btn:hover:before{opacity:1;visibility:visible}.herb-tooltip .herb-erb-code{color:#111827;cursor:text;font-size:16px;font-weight:600;letter-spacing:-.025em;user-select:text}.herb-tooltip:before{bottom:-8px;content:\\\"\\\";height:8px;left:0;pointer-events:auto;position:absolute;right:0}.herb-tooltip:after{border:6px solid transparent;border-top-color:#e5e7eb;bottom:-6px;content:\\\"\\\";left:50%;pointer-events:none;position:absolute;transform:translateX(-50%);z-index:10000}.herb-floating-menu{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;position:fixed;right:0;top:0;z-index:2147483643}.herb-menu-trigger{align-items:center;background:#fff;border:1px solid silver;border-radius:0 0 0 10px;border-right:none;border-top:none;box-shadow:0 1px 3px rgba(0,0,0,.1);cursor:pointer;display:flex;font-size:12px;gap:4px;justify-content:center;padding:4px 7px;position:relative;transition:all .2s ease;z-index:2147483640}.herb-menu-trigger:hover{background:#f9fafb;border-color:#9ca3af;box-shadow:0 4px 12px rgba(0,0,0,.15)}.herb-menu-trigger:active{transform:scale(.98)}.herb-menu-trigger.has-active-options{background:#dbeafe;border-color:#3b82f6}.herb-menu-trigger.has-active-options:hover{background:#bfdbfe;border-color:#2563eb}.herb-menu-trigger.has-active-options .herb-text{color:#1d4ed8}.herb-icon{display:block;font-size:14px;line-height:1}.herb-text{color:#555;font-size:11px;font-weight:600;letter-spacing:.2px}.herb-connection-dot{background:#d1d5db;border-radius:50%;display:block;height:8px;transition:background .3s ease,box-shadow .3s ease;width:8px}@keyframes herb-dot-pulse{0%,to{opacity:1}50%{opacity:.5}}.herb-dev-server-section{align-items:center;border-bottom:1px solid #e5e7eb;display:flex;font-size:11px;gap:8px;min-height:32px;padding:8px 20px}.herb-dev-server-dot{background:#d1d5db;border-radius:50%;flex-shrink:0;height:8px;transition:background .3s ease;width:8px}.herb-dev-server-status{color:#6b7280}.herb-dev-server-retry{background:#fff;border:1px solid #d1d5db;border-radius:4px;color:#374151;cursor:pointer;display:none;font-size:10px;margin-left:auto;padding:2px 8px;transition:background .15s ease,border-color .15s ease}.herb-dev-server-retry:hover{background:#f3f4f6;border-color:#9ca3af}.herb-menu-panel{background:#fff;border:1px solid silver;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-width:280px;opacity:0;padding:0;position:absolute;right:10px;top:28px;transform:translateY(-10px) scale(.95);transform-origin:top right;transition:all .3s cubic-bezier(.4,0,.2,1);visibility:hidden}.herb-menu-panel.open{opacity:1;transform:translateY(0) scale(1);visibility:visible}.herb-menu-header{background:#f9fafb;border-bottom:1px solid #e5e7eb;border-radius:8px 8px 0 0;color:#374151;font-size:14px;font-weight:600;padding:16px 20px}.herb-toggle-item{border-bottom:1px solid #f3f4f6;padding:12px 20px}.herb-toggle-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-nested-toggle{border-left:2px solid #f3f4f6;margin-top:8px;padding-left:24px;transition:all .3s ease}.herb-nested-label{opacity:.8}.herb-nested-label .herb-toggle-text{color:#6b7280;font-size:13px}.herb-nested-switch{background:#e5e7eb;height:20px;width:36px}.herb-nested-switch:after{height:14px;left:3px;top:3px;width:14px}.herb-toggle-input:checked+.herb-nested-switch:after{transform:translateX(16px)}.herb-toggle-label{align-items:center;cursor:pointer;display:flex;gap:12px;user-select:none}.herb-toggle-input{display:none}.herb-toggle-switch{background:#cbd5e1;border-radius:12px;flex-shrink:0;height:24px;position:relative;transition:background .3s ease;width:44px}.herb-toggle-switch:after{background:#fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2);content:\\\"\\\";height:18px;left:3px;position:absolute;top:3px;transition:transform .3s ease;width:18px}.herb-toggle-input:checked+.herb-toggle-switch{background:#8b5cf6}.herb-toggle-input:checked+.herb-toggle-switch:after{transform:translateX(20px)}.herb-toggle-text{color:#374151;flex:1;font-size:14px}.herb-outline-preview{border:2px dotted transparent;border-radius:4px;padding:2px 8px}.herb-outline-view{background-color:#eff6ff;border-color:#3b82f6}.herb-outline-partial{background-color:#ecfdf5;border-color:#10b981}.herb-outline-component{background-color:#fffbeb;border-color:#f59e0b}.herb-outline-erb{background-color:#f5f3ff;border-color:#a78bfa}.herb-toggle-label:hover .herb-toggle-switch{background:#94a3b8}.herb-toggle-label:hover .herb-toggle-input:checked+.herb-toggle-switch{background:#7c3aed}.herb-editor-section{background:linear-gradient(135deg,#fafbfc,#f8f9fa);border-bottom:1px solid #f3f4f6;overflow:hidden;padding:16px 20px;position:relative}.herb-editor-section:before{background:linear-gradient(90deg,transparent,rgba(139,92,246,.2),transparent);content:\\\"\\\";height:2px;left:0;position:absolute;right:0;top:0}.herb-editor-label{cursor:default;display:flex;flex-direction:column;gap:10px}.herb-editor-text{align-items:center;color:#6b7280;display:flex;font-size:12px;font-weight:600;gap:6px;letter-spacing:.5px;text-transform:uppercase}.herb-editor-select{appearance:none;background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;box-shadow:0 1px 2px rgba(0,0,0,.05);color:#1f2937;cursor:pointer;font-size:13.5px;font-weight:500;padding:10px 36px 10px 12px;transition:all .2s cubic-bezier(.4,0,.2,1);width:100%}.herb-editor-select,.herb-editor-select option{font-family:Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.herb-editor-select option{font-size:14px;font-weight:400;padding:8px 12px}.herb-editor-select:hover{background-color:#fafafa;border-color:#8b5cf6;box-shadow:0 2px 4px rgba(0,0,0,.08),0 0 0 1px rgba(139,92,246,.1);transform:translateY(-1px)}.herb-editor-select:focus{background-color:#fff;border-color:#8b5cf6;box-shadow:0 0 0 3px rgba(139,92,246,.15),0 2px 8px rgba(139,92,246,.1);outline:none;transform:translateY(-1px)}.herb-editor-select:active{box-shadow:0 1px 2px rgba(0,0,0,.05);transform:translateY(0)}.herb-disable-all-section{background:#f9fafb;border-radius:0 0 8px 8px;border-top:1px solid #f3f4f6;padding:16px 20px}.herb-disable-all-btn{background:#ef4444;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;padding:8px 16px;transition:background .2s ease;width:100%}.herb-disable-all-btn:hover{background:#dc2626}.herb-disable-all-btn:active{background:#b91c1c}.herb-validation-overlay{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.8);bottom:0;color:#e5e5e5;display:flex;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;justify-content:center;left:0;line-height:1.6;overflow-y:auto;padding:20px;position:fixed;right:0;top:0;z-index:2147483640}.herb-validation-panel{background:#000;border:1px solid #374151;border-radius:12px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);display:flex;flex-direction:column;max-height:80vh;max-width:1200px;overflow:hidden;width:100%}.herb-validation-header{align-items:flex-start;background:linear-gradient(135deg,#dc2626,#b91c1c);border-bottom:1px solid #374151;border-radius:12px 12px 0 0;color:#fff;display:flex;flex-shrink:0;gap:16px;justify-content:space-between;padding:20px 24px}.herb-validation-title{font-size:18px;font-weight:600;margin:0}.herb-validation-close{align-items:center;background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-shrink:0;font-size:16px;height:32px;justify-content:center;padding:0;transition:all .2s;width:32px}.herb-validation-close:hover{background:hsla(0,0%,100%,.2);border-color:hsla(0,0%,100%,.3)}.herb-file-tabs{background:#262626;border-bottom:1px solid #374151;display:flex;flex-shrink:0;overflow-x:auto}.herb-file-tab{background:none;border:none;border-bottom:3px solid transparent;color:#9ca3af;cursor:pointer;font-size:14px;font-weight:500;padding:12px 16px;transition:all .2s ease;white-space:nowrap}.herb-file-tab:hover{background:#2d2d2d;color:#e5e5e5}.herb-file-tab.active{background:#374151;border-bottom-color:#3b82f6;color:#fff}.herb-validation-content{flex:1;overflow-y:auto;padding:24px}.herb-validator-section{margin-bottom:32px}.herb-validator-section:last-child{margin-bottom:0}.herb-validator-section.hidden{display:none}.herb-validator-header{align-items:center;background:#262626;border-bottom:1px solid #374151;border-radius:8px 8px 0 0;color:#e5e5e5;display:flex;font-size:16px;font-weight:600;justify-content:space-between;padding:12px 16px}.herb-validator-count{background:hsla(0,0%,100%,.2);border-radius:12px;font-size:14px;font-weight:500;padding:2px 8px}.herb-validator-items{background:#111;border:1px solid #374151;border-radius:0 0 8px 8px;border-top:none}.herb-validation-item{background:#111;border-bottom:1px solid #374151;padding:20px}.herb-validation-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-validation-item.hidden{display:none}.herb-validation-item .herb-validation-header{align-items:center;background:#1a1a1a;border:none;border-bottom:1px solid #374151;color:#9ca3af;display:flex;font-size:13px;gap:12px;margin:-20px -20px 16px;padding:12px 16px}.herb-validation-badge{border-radius:4px;color:#fff;font-size:12px;font-weight:600;letter-spacing:.025em;padding:4px 8px;text-transform:uppercase}.herb-validation-location{color:#9ca3af;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:13px}.herb-validation-message{background:#1a1a1a;border-bottom:1px solid #374151;color:#fbbf24;font-size:13px;font-weight:500;line-height:1.4;margin:-16px -16px 16px;padding:12px 16px}.herb-code-snippet{background:#1f2937;border-radius:6px;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;margin-bottom:16px;overflow:hidden}.herb-code-line{align-items:stretch;display:flex}.herb-code-line.herb-error-line{background:rgba(239,68,68,.1)}.herb-validation-overlay .herb-line-number{background:#374151;border-right:1px solid #4b5563;color:#9ca3af;flex-shrink:0;font-size:13px;padding:8px 12px;text-align:right;user-select:none;width:40px}.herb-validation-overlay .herb-error-line .herb-line-number{background:#dc2626;color:#fff}.herb-validation-overlay .herb-line-content{color:#e5e7eb;flex:1;font-size:13px;padding:8px 16px;white-space:pre-wrap}.herb-validation-overlay .herb-error-pointer{background:#1f2937;color:#dc2626;font-size:13px;font-weight:700;padding:4px 16px 8px 57px}.herb-validation-suggestion{align-items:flex-start;background:#111;border:1px solid #374151;border-radius:6px;color:#d1d5db;display:flex;font-size:14px;gap:8px;margin-top:16px;padding:12px 16px}.herb-suggestion-icon{color:#10b981;flex-shrink:0;font-size:16px;margin-top:1px}.herb-erb{color:#fbbf24;font-weight:600}.herb-erb-content{color:#34d399}.herb-tag{color:#60a5fa;font-weight:500}.herb-attr{color:#f472b6}.herb-value{color:#a78bfa}.herb-comment{color:#6b7280;font-style:italic}\";\nstyleInject(css_248z);\n\nconst optimizationMismatches = new Set();\nlet optimizationBadgeInitialized = false;\nfunction scanForOptimizationMismatches() {\n const templates = document.querySelectorAll('template[data-herb-optimization-mismatch]');\n templates.forEach((template) => {\n optimizationMismatches.add(template.getAttribute('data-filename') || '(unknown)');\n template.remove();\n });\n if (optimizationMismatches.size > 0) {\n renderOptimizationBadge();\n }\n}\nfunction renderOptimizationBadge() {\n document.querySelector('.herb-optimization-badge')?.remove();\n document.querySelector('.herb-optimization-panel')?.remove();\n const filenames = Array.from(optimizationMismatches);\n const projectPath = document.querySelector('meta[name=\"herb-project-path\"]')?.getAttribute('content') || '';\n const displayNames = filenames.map(f => projectPath && f.startsWith(projectPath) ? f.slice(projectPath.length).replace(/^\\//, '') : f);\n const title = `\\u26A0\\uFE0F ${filenames.length} Compile-Time Optimization Mismatch${filenames.length === 1 ? '' : 'es'}`;\n if (!optimizationBadgeInitialized) {\n optimizationBadgeInitialized = true;\n const style = document.createElement('style');\n style.className = 'herb-optimization-badge-style';\n style.textContent = `\n .herb-floating-menu {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n }\n\n .herb-optimization-badge {\n background: #fffbeb;\n color: #92400e;\n font-size: 11px;\n font-weight: 600;\n padding: 4px 7px;\n border-radius: 0 0 0 10px;\n border: 1px solid #f59e0b;\n border-top: none;\n border-right: none;\n cursor: pointer;\n text-align: center;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);\n z-index: 2147483640;\n transition: all 0.2s ease;\n order: -1;\n }\n\n .herb-optimization-badge:hover {\n background: #fef3c7;\n border-color: #d97706;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .herb-floating-menu .herb-optimization-badge + .herb-menu-trigger {\n border-radius: 0 0 0 0;\n }\n\n .herb-optimization-panel {\n position: fixed;\n top: 30px;\n right: 8px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n width: 420px;\n max-height: 400px;\n overflow-y: auto;\n z-index: 2147483642;\n font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\n font-size: 12px;\n color: #374151;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n display: none;\n }\n\n .herb-optimization-panel.visible {\n display: block;\n }\n\n .herb-optimization-panel-header {\n background: #fffbeb;\n padding: 10px 14px;\n color: #92400e;\n font-weight: 600;\n font-size: 13px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid #fde68a;\n border-radius: 8px 8px 0 0;\n }\n\n .herb-optimization-panel-close {\n background: none;\n border: none;\n color: #92400e;\n cursor: pointer;\n font-size: 16px;\n padding: 0 4px;\n }\n\n .herb-optimization-panel-close:hover {\n color: #78350f;\n }\n\n .herb-optimization-panel-list {\n padding: 4px 0;\n }\n\n .herb-optimization-panel-item {\n padding: 6px 14px;\n color: #6b7280;\n border-bottom: 1px solid #f3f4f6;\n word-break: break-all;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n }\n\n .herb-optimization-panel-item:last-child {\n border-bottom: none;\n }\n\n .herb-optimization-panel-hint {\n padding: 8px 14px;\n color: #9ca3af;\n font-size: 11px;\n border-top: 1px solid #e5e7eb;\n background: #f9fafb;\n border-radius: 0 0 8px 8px;\n }\n `;\n document.head.appendChild(style);\n }\n const panel = document.createElement('div');\n panel.className = 'herb-optimization-panel';\n panel.innerHTML = `\n <div class=\"herb-optimization-panel-header\">\n <span>${title}</span>\n <button class=\"herb-optimization-panel-close\">×</button>\n </div>\n\n <div class=\"herb-optimization-panel-list\">\n ${displayNames.map(f => `<div class=\"herb-optimization-panel-item\">${f.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</div>`).join('')}\n </div>\n\n <div class=\"herb-optimization-panel-hint\">\n Check Rails log for details. Disable with <code>config.verify_optimizations = false</code>.\n </div>\n `;\n document.body.appendChild(panel);\n panel.querySelector('.herb-optimization-panel-close')?.addEventListener('click', () => {\n panel.classList.remove('visible');\n });\n const badge = document.createElement('div');\n badge.className = 'herb-optimization-badge';\n badge.textContent = `\\u26A0\\uFE0F ${filenames.length}`;\n badge.title = title;\n badge.addEventListener('click', () => {\n panel.classList.toggle('visible');\n });\n const menu = document.querySelector('.herb-floating-menu');\n if (menu) {\n menu.prepend(badge);\n }\n else {\n badge.style.position = 'fixed';\n badge.style.top = '0';\n badge.style.right = '0';\n document.body.appendChild(badge);\n }\n}\nclass ErrorOverlay {\n constructor() {\n this.overlay = null;\n this.allValidationData = [];\n this.isVisible = false;\n this.init();\n }\n init() {\n this.detectValidationErrors();\n scanForOptimizationMismatches();\n const hasParserErrors = document.querySelector('.herb-parser-error-overlay') !== null;\n if (this.getTotalErrorCount() > 0) {\n this.createOverlay();\n this.setupToggleHandler();\n }\n else if (hasParserErrors) {\n console.log('[ErrorOverlay] Parser error overlay already displayed');\n }\n else {\n console.log('[ErrorOverlay] No errors found, not creating overlay');\n }\n }\n detectValidationErrors() {\n const templatesToRemove = [];\n const validationTemplates = document.querySelectorAll('template[data-herb-validation-error]');\n if (validationTemplates.length > 0) {\n this.processValidationTemplates(validationTemplates, templatesToRemove);\n }\n const jsonTemplates = document.querySelectorAll('template[data-herb-validation-errors]');\n jsonTemplates.forEach((template, _index) => {\n try {\n let jsonData = template.textContent?.trim();\n if (!jsonData) {\n jsonData = template.innerHTML?.trim();\n }\n if (jsonData) {\n const validationData = JSON.parse(jsonData);\n this.allValidationData.push(validationData);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to parse validation errors from template:', error, {\n textContent: template.textContent,\n innerHTML: template.innerHTML\n });\n templatesToRemove.push(template);\n }\n });\n const htmlTemplates = document.querySelectorAll('template[data-herb-parser-error]');\n htmlTemplates.forEach((template, _index) => {\n try {\n const htmlContent = template.innerHTML?.trim() || template.textContent?.trim();\n if (htmlContent) {\n this.displayParserErrorOverlay(htmlContent);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process parser error template:', error);\n templatesToRemove.push(template);\n }\n });\n templatesToRemove.forEach((template, _index) => template.remove());\n }\n processValidationTemplates(templates, templatesToRemove) {\n const validationFragments = [];\n const errorMap = new Map();\n templates.forEach((template) => {\n try {\n const metadata = {\n severity: template.getAttribute('data-severity') || 'error',\n source: template.getAttribute('data-source') || 'unknown',\n code: template.getAttribute('data-code') || '',\n line: parseInt(template.getAttribute('data-line') || '0'),\n column: parseInt(template.getAttribute('data-column') || '0'),\n filename: template.getAttribute('data-filename') || 'unknown',\n message: template.getAttribute('data-message') || '',\n suggestion: template.getAttribute('data-suggestion') || undefined,\n timestamp: template.getAttribute('data-timestamp') || new Date().toISOString()\n };\n const html = template.innerHTML?.trim() || '';\n if (html) {\n const errorKey = `${metadata.filename}:${metadata.line}:${metadata.column}:${metadata.code}:${metadata.message}`;\n if (errorMap.has(errorKey)) {\n const existing = errorMap.get(errorKey);\n existing.count++;\n }\n else {\n errorMap.set(errorKey, { metadata, html, count: 1 });\n }\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process validation template:', error);\n templatesToRemove.push(template);\n }\n });\n validationFragments.push(...errorMap.values());\n if (validationFragments.length > 0) {\n this.displayValidationOverlay(validationFragments);\n }\n }\n createOverlay() {\n if (this.allValidationData.length === 0)\n return;\n this.overlay = document.createElement('div');\n this.overlay.id = 'herb-error-overlay';\n this.overlay.innerHTML = `\n <style>\n #herb-error-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 10000;\n display: none;\n overflow: auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .herb-error-content {\n background: #1a1a1a;\n margin: 20px auto;\n padding: 20px;\n border-radius: 8px;\n max-width: 800px;\n color: #fff;\n }\n\n .herb-error-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n border-bottom: 1px solid #333;\n padding-bottom: 10px;\n }\n\n .herb-error-title {\n font-size: 18px;\n font-weight: 600;\n color: #ff6b6b;\n }\n\n .herb-error-close {\n background: none;\n border: none;\n color: #fff;\n font-size: 20px;\n cursor: pointer;\n padding: 5px;\n }\n\n .herb-error-file-section {\n margin-bottom: 20px;\n }\n\n .herb-error-file {\n font-size: 14px;\n color: #888;\n margin-bottom: 10px;\n font-weight: 600;\n }\n\n .herb-error-item {\n background: #2a2a2a;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 10px;\n border-left: 4px solid #ff6b6b;\n }\n\n .herb-error-item.warning {\n border-left-color: #ffd93d;\n }\n\n .herb-error-item.info {\n border-left-color: #4ecdc4;\n }\n\n .herb-error-item.hint {\n border-left-color: #95a5a6;\n }\n\n .herb-error-message {\n font-size: 14px;\n margin-bottom: 8px;\n line-height: 1.4;\n }\n\n .herb-error-location {\n font-size: 12px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .herb-error-suggestion {\n font-size: 12px;\n color: #4ecdc4;\n font-style: italic;\n }\n\n .herb-error-source {\n font-size: 11px;\n color: #666;\n text-align: right;\n }\n\n .herb-file-separator {\n border-top: 1px solid #444;\n margin: 20px 0;\n }\n </style>\n\n <div class=\"herb-error-content\">\n <div class=\"herb-error-header\">\n <div class=\"herb-error-title\">\n Errors (${this.getTotalErrorCount()})\n </div>\n <button class=\"herb-error-close\">×</button>\n </div>\n\n <div class=\"herb-error-files\">\n ${this.allValidationData.map((validationData, index) => `\n ${index > 0 ? '<div class=\"herb-file-separator\"></div>' : ''}\n <div class=\"herb-error-file-section\">\n <div class=\"herb-error-file\">${validationData.filename} (${this.getErrorSummary(validationData.validationErrors)})</div>\n <div class=\"herb-error-list\">\n ${validationData.validationErrors.map(error => `\n <div class=\"herb-error-item ${error.severity}\">\n <div class=\"herb-error-message\">${this.escapeHtml(error.message)}</div>\n ${error.location ? `<div class=\"herb-error-location\">Line ${error.location.line}, Column ${error.location.column}</div>` : ''}\n ${error.suggestion ? `<div class=\"herb-error-suggestion\">💡 ${this.escapeHtml(error.suggestion)}</div>` : ''}\n <div class=\"herb-error-source\">${error.source}${error.code ? ` (${error.code})` : ''}</div>\n </div>\n `).join('')}\n </div>\n </div>\n `).join('')}\n </div>\n </div>\n `;\n document.body.appendChild(this.overlay);\n const closeBtn = this.overlay.querySelector('.herb-error-close');\n closeBtn?.addEventListener('click', () => this.hide());\n this.overlay.addEventListener('click', (e) => {\n if (e.target === this.overlay) {\n this.hide();\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n });\n }\n setupToggleHandler() {\n document.addEventListener('keydown', (e) => {\n if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'E') {\n e.preventDefault();\n this.toggle();\n }\n });\n if (this.hasErrorSeverity()) {\n setTimeout(() => this.show(), 100);\n }\n }\n getTotalErrorCount() {\n return this.allValidationData.reduce((total, data) => total + data.validationErrors.length, 0);\n }\n getErrorSummary(errors) {\n if (errors.length === 1) {\n return '1 error';\n }\n const errorsBySource = errors.reduce((acc, error) => {\n const source = error.source || 'Unknown';\n acc[source] = (acc[source] || 0) + 1;\n return acc;\n }, {});\n const sourceKeys = Object.keys(errorsBySource);\n if (sourceKeys.length === 1) {\n const source = sourceKeys[0];\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel} error${count === 1 ? '' : 's'}`;\n }\n else {\n const parts = sourceKeys.map(source => {\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel}`;\n });\n return `${errors.length} errors (${parts.join(', ')})`;\n }\n }\n getSourceLabel(source) {\n switch (source) {\n case 'Parser': return 'parser';\n case 'SecurityValidator': return 'security';\n case 'NestingValidator': return 'nesting';\n case 'AccessibilityValidator': return 'accessibility';\n default: return 'validation';\n }\n }\n hasErrorSeverity() {\n return this.allValidationData.some(data => data.validationErrors.some(error => error.severity === 'error'));\n }\n escapeHtml(unsafe) {\n return unsafe\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n show() {\n if (this.overlay) {\n this.overlay.style.display = 'block';\n this.isVisible = true;\n }\n }\n hide() {\n if (this.overlay) {\n this.overlay.style.display = 'none';\n this.isVisible = false;\n }\n }\n toggle() {\n if (this.isVisible) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n hasErrors() {\n return this.getTotalErrorCount() > 0;\n }\n getErrorCount() {\n return this.getTotalErrorCount();\n }\n showErrors(errors, filename) {\n this.allValidationData = this.allValidationData.filter(data => data.filename !== filename);\n this.allValidationData.push({\n validationErrors: errors,\n filename,\n timestamp: new Date().toISOString(),\n });\n if (this.overlay) {\n this.overlay.remove();\n this.overlay = null;\n }\n this.createOverlay();\n this.show();\n }\n clearErrors() {\n this.allValidationData = [];\n if (this.overlay) {\n this.overlay.remove();\n this.overlay = null;\n this.isVisible = false;\n }\n }\n displayParserErrorOverlay(htmlContent) {\n const existingOverlay = document.querySelector('.herb-parser-error-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const container = document.createElement('div');\n container.innerHTML = htmlContent;\n const overlay = container.querySelector('.herb-parser-error-overlay');\n if (overlay) {\n document.body.appendChild(overlay);\n overlay.style.display = 'flex';\n }\n else {\n console.error('[ErrorOverlay] No parser error overlay found in HTML template');\n }\n }\n displayValidationOverlay(fragments) {\n const existingOverlay = document.querySelector('.herb-validation-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const errorsBySource = new Map();\n const errorsByFile = new Map();\n fragments.forEach(fragment => {\n const source = fragment.metadata.source;\n if (!errorsBySource.has(source)) {\n errorsBySource.set(source, []);\n }\n errorsBySource.get(source).push(fragment);\n const file = fragment.metadata.filename;\n if (!errorsByFile.has(file)) {\n errorsByFile.set(file, []);\n }\n errorsByFile.get(file).push(fragment);\n });\n const errorCount = fragments.filter(f => f.metadata.severity === 'error').reduce((sum, f) => sum + f.count, 0);\n const warningCount = fragments.filter(f => f.metadata.severity === 'warning').reduce((sum, f) => sum + f.count, 0);\n const totalCount = fragments.reduce((sum, f) => sum + f.count, 0);\n const uniqueCount = fragments.length;\n const overlayHTML = this.buildValidationOverlayHTML(fragments, errorsBySource, errorsByFile, { errorCount, warningCount, totalCount, uniqueCount });\n const overlay = document.createElement('div');\n overlay.className = 'herb-validation-overlay';\n overlay.innerHTML = overlayHTML;\n document.body.appendChild(overlay);\n this.setupValidationOverlayHandlers(overlay);\n }\n buildValidationOverlayHTML(_fragments, errorsBySource, errorsByFile, counts) {\n let title = counts.uniqueCount === 1 ? 'Validation Issue' : `Validation Issues`;\n if (counts.totalCount !== counts.uniqueCount) {\n title += ` (${counts.uniqueCount} unique, ${counts.totalCount} total)`;\n }\n else {\n title += ` (${counts.totalCount})`;\n }\n const subtitle = [];\n if (counts.errorCount > 0)\n subtitle.push(`${counts.errorCount} error${counts.errorCount !== 1 ? 's' : ''}`);\n if (counts.warningCount > 0)\n subtitle.push(`${counts.warningCount} warning${counts.warningCount !== 1 ? 's' : ''}`);\n let fileTabs = '';\n if (errorsByFile.size > 1) {\n const totalErrors = Array.from(errorsByFile.values()).reduce((sum, errors) => sum + errors.length, 0);\n fileTabs = `\n <div class=\"herb-file-tabs\">\n <button class=\"herb-file-tab active\" data-file=\"*\">\n All (${totalErrors})\n </button>\n ${Array.from(errorsByFile.entries()).map(([file, errors]) => `\n <button class=\"herb-file-tab\" data-file=\"${this.escapeAttr(file)}\">\n ${this.escapeHtml(file)} (${errors.length})\n </button>\n `).join('')}\n </div>\n `;\n }\n const contentSections = Array.from(errorsBySource.entries()).map(([source, sourceFragments]) => `\n <div class=\"herb-validator-section\" data-source=\"${this.escapeAttr(source)}\">\n <div class=\"herb-validator-header\">\n <h3>${this.escapeHtml(source.replace('Validator', ''))} Issues (${sourceFragments.length})</h3>\n </div>\n <div class=\"herb-validator-content\">\n ${sourceFragments.map(f => {\n const fileAttribute = `data-error-file=\"${this.escapeAttr(f.metadata.filename)}\"`;\n if (f.count > 1) {\n return `\n <div class=\"herb-validation-item-wrapper\" ${fileAttribute}>\n ${f.html}\n <div class=\"herb-occurrence-badge\" title=\"This error occurs ${f.count} times in the template\">\n <span class=\"herb-occurrence-icon\">⚠</span>\n <span class=\"herb-occurrence-count\">×${f.count}</span>\n </div>\n </div>\n `;\n }\n return `<div class=\"herb-validation-error-container\" ${fileAttribute}>${f.html}</div>`;\n }).join('')}\n </div>\n </div>\n `).join('');\n return `\n <style>${this.getValidationOverlayStyles()}</style>\n <div class=\"herb-validation-container\">\n <div class=\"herb-validation-header\">\n <div class=\"herb-validation-header-content\">\n <div class=\"herb-validation-title\">\n <span class=\"herb-validation-icon\">⚠️</span>\n ${title}\n </div>\n <div class=\"herb-validation-subtitle\">${subtitle.join(', ')}</div>\n </div>\n <button class=\"herb-close-button\" title=\"Close (Esc)\">×</button>\n </div>\n ${fileTabs}\n <div class=\"herb-validation-content\">\n ${contentSections}\n </div>\n <div class=\"herb-dismiss-hint\" style=\"padding-left: 24px; padding-right: 24px; padding-bottom: 12px;\">\n Click outside, press <kbd style=\"display: inline-block; padding: 2px 6px; font-family: monospace; font-size: 0.9em; color: #333; background: #f7f7f7; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 0 #ccc, 0 2px 3px rgba(0,0,0,0.2) inset;\">Esc</kbd> key, or fix the code to dismiss.<br>\n\n ${this.getDismissHint()}\n </div>\n </div>\n `;\n }\n getDismissHint() {\n const template = document.querySelector('template[data-herb-dismiss-hint]');\n if (template) {\n return template.innerHTML.trim();\n }\n return `You can also disable this overlay by passing <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">validation_mode: :none</code> to <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">Herb::Engine</code>.`;\n }\n getValidationOverlayStyles() {\n return `\n .herb-validation-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\n color: #e5e5e5;\n line-height: 1.6;\n }\n\n .herb-validation-container {\n background: #000000;\n border: 1px solid #374151;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 1200px;\n max-height: 80vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .herb-validation-header {\n background: linear-gradient(135deg, #f59e0b, #d97706);\n padding: 20px 24px;\n border-bottom: 1px solid #374151;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n }\n\n .herb-validation-title {\n font-size: 18px;\n font-weight: 600;\n color: white;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .herb-validation-subtitle {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.9);\n margin-top: 4px;\n }\n\n .herb-file-tabs {\n background: #1a1a1a;\n border-bottom: 1px solid #374151;\n padding: 0;\n display: flex;\n overflow-x: auto;\n }\n\n .herb-file-tab {\n background: transparent;\n border: none;\n color: #9ca3af;\n padding: 12px 20px;\n cursor: pointer;\n font-size: 13px;\n white-space: nowrap;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n }\n\n .herb-file-tab:hover {\n background: #262626;\n color: #e5e5e5;\n }\n\n .herb-file-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n background: #262626;\n }\n\n .herb-validation-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .herb-validator-section {\n background: #0f0f0f;\n border: 1px solid #2d2d2d;\n border-radius: 8px;\n }\n\n .herb-validator-header {\n background: #1a1a1a;\n padding: 12px 16px;\n border-bottom: 1px solid #2d2d2d;\n }\n\n .herb-validator-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 500;\n color: #e5e5e5;\n }\n\n .herb-validator-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .herb-validation-item {\n border-left: 3px solid #4a4a4a;\n padding-left: 16px;\n }\n\n .herb-validation-item[data-severity=\"error\"] {\n border-left-color: #7f1d1d;\n }\n\n .herb-validation-item[data-severity=\"warning\"] {\n border-left-color: #78350f;\n }\n\n .herb-validation-item[data-severity=\"info\"] {\n border-left-color: #1e3a8a;\n }\n\n .herb-validation-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .herb-validation-badge {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n color: white;\n text-transform: uppercase;\n }\n\n .herb-validation-location {\n font-size: 12px;\n color: #9ca3af;\n }\n\n .herb-validation-message {\n font-size: 14px;\n margin-bottom: 12px;\n line-height: 1.5;\n }\n\n .herb-code-snippet {\n background: #1a1a1a;\n border: 1px solid #2d2d2d;\n border-radius: 4px;\n padding: 12px;\n overflow-x: auto;\n }\n\n .herb-code-line {\n display: flex;\n align-items: flex-start;\n min-height: 20px;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .herb-line-number {\n color: #6b7280;\n width: 40px;\n text-align: right;\n padding-right: 16px;\n user-select: none;\n flex-shrink: 0;\n }\n\n .herb-line-content {\n flex: 1;\n white-space: pre;\n font-family: inherit;\n }\n\n .herb-error-line {\n background: rgba(220, 38, 38, 0.1);\n }\n\n .herb-error-line .herb-line-number {\n color: #dc2626;\n font-weight: 600;\n }\n\n .herb-error-pointer {\n color: #dc2626;\n font-weight: bold;\n margin-left: 56px;\n font-size: 12px;\n }\n\n .herb-validation-suggestion {\n background: #1e3a1e;\n border: 1px solid #10b981;\n border-radius: 4px;\n padding: 8px 12px;\n margin-top: 8px;\n font-size: 13px;\n color: #10b981;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .herb-validation-item-wrapper,\n .herb-validation-error-container {\n position: relative;\n }\n\n .herb-validation-error-container.hidden,\n .herb-validation-item-wrapper.hidden,\n .herb-validator-section.hidden {\n display: none;\n }\n\n .herb-occurrence-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n background: #dc2626;\n color: white;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n\n .herb-occurrence-icon {\n font-size: 10px;\n }\n\n .herb-occurrence-count {\n font-weight: bold;\n }\n\n .herb-close-button {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: white;\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n }\n\n .herb-close-button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n }\n\n /* Syntax highlighting */\n .herb-erb { color: #61dafb; }\n .herb-erb-content { color: #c678dd; }\n .herb-tag { color: #e06c75; }\n .herb-attr { color: #d19a66; }\n .herb-value { color: #98c379; }\n .herb-comment { color: #5c6370; font-style: italic; }\n `;\n }\n setupValidationOverlayHandlers(overlay) {\n const closeBtn = overlay.querySelector('.herb-close-button');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => overlay.remove());\n }\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n const escHandler = (e) => {\n if (e.key === 'Escape') {\n overlay.remove();\n document.removeEventListener('keydown', escHandler);\n }\n };\n document.addEventListener('keydown', escHandler);\n const fileTabs = overlay.querySelectorAll('.herb-file-tab');\n fileTabs.forEach(tab => {\n tab.addEventListener('click', () => {\n const selectedFile = tab.getAttribute('data-file');\n fileTabs.forEach(t => t.classList.remove('active'));\n tab.classList.add('active');\n const errorContainers = overlay.querySelectorAll('[data-error-file]');\n const validatorSections = overlay.querySelectorAll('.herb-validator-section');\n errorContainers.forEach(container => {\n const containerFile = container.getAttribute('data-error-file');\n if (selectedFile === '*' || containerFile === selectedFile) {\n container.classList.remove('hidden');\n }\n else {\n container.classList.add('hidden');\n }\n });\n validatorSections.forEach(section => {\n const sectionContent = section.querySelector('.herb-validator-content');\n const visibleErrors = sectionContent?.querySelectorAll('[data-error-file]:not(.hidden)').length || 0;\n const header = section.querySelector('h3');\n const source = section.getAttribute('data-source')?.replace('Validator', '') || 'Unknown';\n if (header) {\n header.textContent = `${source} Issues (${visibleErrors})`;\n }\n if (visibleErrors === 0) {\n section.classList.add('hidden');\n }\n else {\n section.classList.remove('hidden');\n }\n });\n });\n });\n }\n escapeAttr(text) {\n return this.escapeHtml(text).replace(/\"/g, '"');\n }\n}\n\nclass HerbOverlay {\n constructor(options = {}) {\n this.options = options;\n this.showingERB = false;\n this.showingERBOutlines = false;\n this.showingERBHoverReveal = false;\n this.showingTooltips = true;\n this.showingViewOutlines = false;\n this.showingPartialOutlines = false;\n this.showingComponentOutlines = false;\n this.menuOpen = false;\n this.projectPath = '';\n this.preferredEditor = 'auto';\n this.defaultEditorFromServer = 'vscode';\n this.currentlyHoveredERBElement = null;\n this.errorOverlay = null;\n this.handleRevealedERBClick = (event) => {\n event.stopPropagation();\n event.preventDefault();\n const element = event.currentTarget;\n if (!element)\n return;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path');\n const line = element.getAttribute('data-herb-debug-line');\n const column = element.getAttribute('data-herb-debug-column');\n if (fullPath) {\n this.openFileInEditor(fullPath, line ? parseInt(line) : 1, column ? parseInt(column) : 1);\n }\n };\n if (options.autoInit !== false) {\n this.init();\n }\n }\n syncConnectionDot() {\n const herbClient = window.__herbClient;\n if (herbClient) {\n herbClient.applyConnectionDot();\n }\n }\n init() {\n this.loadProjectPath();\n this.loadDefaultEditor();\n this.loadSettings();\n this.injectMenu();\n this.syncConnectionDot();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.initializeErrorOverlay();\n this.setupTurboListeners();\n this.applySettings();\n }\n loadProjectPath() {\n if (this.options.projectPath) {\n this.projectPath = this.options.projectPath;\n return;\n }\n const metaTag = document.querySelector('meta[name=\"herb-project-path\"]');\n if (metaTag?.content) {\n this.projectPath = metaTag.content;\n }\n }\n loadDefaultEditor() {\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]');\n if (metaTag?.content) {\n const defaultEditor = metaTag.content.toLowerCase();\n const isValidEditor = HerbOverlay.EDITOR_OPTIONS.some(option => option.value === defaultEditor);\n if (isValidEditor) {\n this.defaultEditorFromServer = defaultEditor;\n }\n }\n }\n loadSettings() {\n const savedSettings = localStorage.getItem(HerbOverlay.SETTINGS_KEY);\n if (savedSettings) {\n try {\n const settings = JSON.parse(savedSettings);\n this.showingERB = settings.showingERB || false;\n this.showingERBOutlines = settings.showingERBOutlines || false;\n this.showingERBHoverReveal = settings.showingERBHoverReveal || false;\n this.showingTooltips = settings.showingTooltips !== undefined ? settings.showingTooltips : true;\n this.showingViewOutlines = settings.showingViewOutlines || false;\n this.showingPartialOutlines = settings.showingPartialOutlines || false;\n this.showingComponentOutlines = settings.showingComponentOutlines || false;\n this.menuOpen = settings.menuOpen || false;\n if (settings.preferredEditor) {\n this.preferredEditor = settings.preferredEditor;\n }\n }\n catch (e) {\n console.warn('Failed to load Herb dev tools settings:', e);\n }\n }\n }\n saveSettings() {\n const settings = {\n showingERB: this.showingERB,\n showingERBOutlines: this.showingERBOutlines,\n showingERBHoverReveal: this.showingERBHoverReveal,\n showingTooltips: this.showingTooltips,\n showingViewOutlines: this.showingViewOutlines,\n showingPartialOutlines: this.showingPartialOutlines,\n showingComponentOutlines: this.showingComponentOutlines,\n menuOpen: this.menuOpen,\n preferredEditor: this.preferredEditor\n };\n localStorage.setItem(HerbOverlay.SETTINGS_KEY, JSON.stringify(settings));\n this.updateMenuButtonState();\n }\n updateMenuButtonState() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n if (menuTrigger) {\n const hasActiveOptions = this.showingERB || this.showingERBOutlines || this.showingViewOutlines || this.showingPartialOutlines || this.showingComponentOutlines;\n if (hasActiveOptions) {\n menuTrigger.classList.add('has-active-options');\n }\n else {\n menuTrigger.classList.remove('has-active-options');\n }\n }\n }\n injectMenu() {\n const existingMenu = document.querySelector('.herb-floating-menu');\n if (existingMenu) {\n return;\n }\n const menuHTML = `\n <div class=\"herb-floating-menu\">\n <button class=\"herb-menu-trigger\" id=\"herbMenuTrigger\">\n <span class=\"herb-icon\">🌿</span>\n <span class=\"herb-text\">Herb</span>\n <span id=\"herbConnectionDot\" class=\"herb-connection-dot\" data-herb-connection-dot></span>\n </button>\n\n <div class=\"herb-menu-panel\" id=\"herbMenuPanel\">\n <div class=\"herb-menu-header\">Herb Debug Tools</div>\n\n <div id=\"herbDevServerSection\" class=\"herb-dev-server-section\">\n <span id=\"herbDevServerDot\" class=\"herb-dev-server-dot\"></span>\n <span id=\"herbDevServerStatus\" class=\"herb-dev-server-status\">Dev Server</span>\n <button id=\"herbDevServerRetry\" class=\"herb-dev-server-retry\">Retry</button>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleViewOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-view\">View Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbTogglePartialOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-partial\">Partial Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleComponentOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-component\">Component Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERBOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text herb-outline-preview herb-outline-erb\">ERB Output Outlines</span>\n </label>\n\n <div class=\"herb-nested-toggle\" id=\"herbERBHoverRevealNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleERBHoverReveal\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Reveal ERB Output tag on hover</span>\n </label>\n </div>\n\n <div class=\"herb-nested-toggle\" id=\"herbTooltipsNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleTooltips\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Show Tooltips</span>\n </label>\n </div>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERB\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show ERB Output Tags</span>\n </label>\n </div>\n\n <div class=\"herb-editor-section\">\n <label class=\"herb-editor-label\">\n <span class=\"herb-editor-text\">Editor</span>\n <select id=\"herbEditorSelect\" class=\"herb-editor-select\">\n ${HerbOverlay.EDITOR_OPTIONS.map(editor => `<option value=\"${editor.value}\">${editor.label}</option>`).join('')}\n </select>\n </label>\n </div>\n\n <div class=\"herb-disable-all-section\">\n <button id=\"herbDisableAll\" class=\"herb-disable-all-btn\">Disable All</button>\n </div>\n </div>\n </div>\n `;\n document.body.insertAdjacentHTML('beforeend', menuHTML);\n }\n applySettings() {\n this.toggleViewOutlines(this.showingViewOutlines);\n this.togglePartialOutlines(this.showingPartialOutlines);\n this.toggleComponentOutlines(this.showingComponentOutlines);\n this.toggleERBTags(this.showingERB);\n this.toggleERBOutlines(this.showingERBOutlines);\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel && this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n }\n setupMenuToggle() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel) {\n menuTrigger.addEventListener('click', () => {\n this.menuOpen = !this.menuOpen;\n if (this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n else {\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n }\n this.saveSettings();\n });\n document.addEventListener('click', (e) => {\n const target = e.target;\n const floatingMenu = document.querySelector('.herb-floating-menu');\n if (floatingMenu && !floatingMenu.contains(target) && this.menuOpen) {\n this.menuOpen = false;\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n this.saveSettings();\n }\n });\n }\n }\n setupTurboListeners() {\n document.addEventListener('turbo:load', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:render', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:visit', () => {\n this.reinitializeAfterNavigation();\n });\n }\n reinitializeAfterNavigation() {\n this.injectMenu();\n this.syncConnectionDot();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.applySettings();\n this.updateMenuButtonState();\n }\n setupToggleSwitches() {\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n if (toggleViewOutlinesSwitch) {\n toggleViewOutlinesSwitch.checked = this.showingViewOutlines;\n toggleViewOutlinesSwitch.addEventListener('change', () => {\n this.toggleViewOutlines(toggleViewOutlinesSwitch.checked);\n });\n }\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n if (togglePartialOutlinesSwitch) {\n togglePartialOutlinesSwitch.checked = this.showingPartialOutlines;\n togglePartialOutlinesSwitch.addEventListener('change', () => {\n this.togglePartialOutlines(togglePartialOutlinesSwitch.checked);\n });\n }\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n if (toggleComponentOutlinesSwitch) {\n toggleComponentOutlinesSwitch.checked = this.showingComponentOutlines;\n toggleComponentOutlinesSwitch.addEventListener('change', () => {\n this.toggleComponentOutlines(toggleComponentOutlinesSwitch.checked);\n });\n }\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n if (toggleERBSwitch) {\n toggleERBSwitch.checked = this.showingERB;\n toggleERBSwitch.addEventListener('change', () => {\n if (toggleERBSwitch.checked && toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = false;\n this.toggleERBOutlines(false);\n }\n this.toggleERBTags(toggleERBSwitch.checked);\n });\n }\n if (toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = this.showingERBOutlines;\n toggleERBOutlinesSwitch.addEventListener('change', () => {\n if (toggleERBOutlinesSwitch.checked && toggleERBSwitch) {\n toggleERBSwitch.checked = false;\n this.toggleERBTags(false);\n }\n this.toggleERBOutlines(toggleERBOutlinesSwitch.checked);\n this.updateNestedToggleVisibility();\n });\n }\n else {\n console.warn('ERB outlines toggle switch not found');\n }\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = this.showingERBHoverReveal;\n toggleERBHoverRevealSwitch.addEventListener('change', () => {\n this.toggleERBHoverReveal(toggleERBHoverRevealSwitch.checked);\n });\n }\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = this.showingTooltips;\n toggleTooltipsSwitch.addEventListener('change', () => {\n this.toggleTooltips(toggleTooltipsSwitch.checked);\n });\n }\n this.updateNestedToggleVisibility();\n const disableAllBtn = document.getElementById('herbDisableAll');\n if (disableAllBtn) {\n disableAllBtn.addEventListener('click', () => {\n this.disableAll();\n });\n }\n }\n setupEditorDropdown() {\n const editorSelect = document.getElementById('herbEditorSelect');\n if (editorSelect) {\n const autoOption = editorSelect.querySelector('option[value=\"auto\"]');\n if (autoOption) {\n const editorLabel = HerbOverlay.EDITOR_OPTIONS.find(opt => opt.value === this.defaultEditorFromServer)?.label || this.defaultEditorFromServer;\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]');\n if (metaTag?.content) {\n autoOption.textContent = `Auto (from server): ${editorLabel}`;\n }\n else {\n autoOption.textContent = `Auto (default): ${editorLabel}`;\n }\n }\n editorSelect.value = this.preferredEditor;\n editorSelect.addEventListener('change', () => {\n this.preferredEditor = editorSelect.value;\n this.saveSettings();\n });\n }\n }\n toggleViewOutlines(show) {\n this.showingViewOutlines = show !== undefined ? show : !this.showingViewOutlines;\n const viewOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"view\"], [data-herb-debug-outline-type*=\"view\"]');\n viewOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingViewOutlines) {\n element.style.outline = '2px dotted #3b82f6';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'view');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n togglePartialOutlines(show) {\n this.showingPartialOutlines = show !== undefined ? show : !this.showingPartialOutlines;\n const partialOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"partial\"], [data-herb-debug-outline-type*=\"partial\"]');\n partialOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingPartialOutlines) {\n element.style.outline = '2px dotted #10b981';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'partial');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n toggleComponentOutlines(show) {\n this.showingComponentOutlines = show !== undefined ? show : !this.showingComponentOutlines;\n const componentOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"component\"], [data-herb-debug-outline-type*=\"component\"]');\n componentOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingComponentOutlines) {\n element.style.outline = '2px dotted #f59e0b';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'component');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n createOverlayLabel(element, type) {\n if (element.querySelector('.herb-overlay-label')) {\n return;\n }\n const shortName = element.getAttribute('data-herb-debug-file-name') || '';\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || shortName;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const label = document.createElement('div');\n label.className = 'herb-overlay-label';\n label.textContent = shortName;\n label.setAttribute('data-label-setup', 'true');\n label.addEventListener('mouseenter', () => {\n label.textContent = relativePath;\n document.querySelectorAll('.herb-overlay-label').forEach(otherLabel => {\n otherLabel.style.zIndex = '1000';\n });\n label.style.zIndex = '1002';\n });\n label.addEventListener('mouseleave', () => {\n label.textContent = shortName;\n label.style.zIndex = '1000';\n });\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.openFileInEditor(fullPath, 1, 1);\n });\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n element.style.outline = 'none';\n element.classList.remove('show-outline');\n const outlineColor = type === 'component' ? '#f59e0b' : type === 'partial' ? '#10b981' : '#3b82f6';\n parent.style.outline = `2px dotted ${outlineColor}`;\n parent.style.outlineOffset = parent.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n parent.classList.add('show-outline');\n parent.setAttribute('data-herb-debug-attached-outline-type', type);\n if (window.getComputedStyle(parent).position === 'static') {\n parent.style.position = 'relative';\n }\n label.style.position = 'absolute';\n label.style.top = '0';\n label.style.left = '0';\n parent.appendChild(label);\n return;\n }\n if (element.localName === 'html' || window.getComputedStyle(element).overflowY !== 'visible') {\n label.style.top = '0';\n }\n if (window.getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n element.appendChild(label);\n }\n removeOverlayLabel(element) {\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n const label = parent.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n parent.style.outline = 'none';\n parent.style.outlineOffset = '0';\n parent.classList.remove('show-outline');\n parent.removeAttribute('data-herb-debug-attached-outline-type');\n }\n else {\n const label = element.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n }\n }\n resetShowingERB() {\n const elements = document.querySelectorAll('[data-herb-debug-showing-erb');\n elements.forEach(element => {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n });\n }\n toggleERBTags(show) {\n this.showingERB = show !== undefined ? show : !this.showingERB;\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (this.showingERB && erbCode) {\n // this.resetShowingERB()\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n element.textContent = erbCode;\n element.setAttribute(\"data-herb-debug-showing-erb\", \"true\");\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n }\n else {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n if (element && element.hasAttribute(\"data-herb-debug-showing-erb\")) {\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n toggleERBOutlines(show) {\n this.showingERBOutlines = show !== undefined ? show : !this.showingERBOutlines;\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach(element => {\n const inserted = element.hasAttribute(\"data-herb-debug-inserted\");\n const needsWrapperToggled = (inserted && !element.children[0]);\n const realElement = element.children[0] || element;\n if (this.showingERBOutlines) {\n realElement.style.outline = '2px dotted #a78bfa';\n realElement.style.outlineOffset = '1px';\n if (needsWrapperToggled) {\n element.style.display = 'inline';\n }\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n if (this.showingERBHoverReveal) {\n this.addERBHoverReveal(element);\n }\n }\n else {\n realElement.style.outline = 'none';\n realElement.style.outlineOffset = '0';\n if (needsWrapperToggled) {\n element.style.display = 'contents';\n }\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n this.removeERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n updateNestedToggleVisibility() {\n const nestedToggle = document.getElementById('herbERBHoverRevealNested');\n const tooltipsNestedToggle = document.getElementById('herbTooltipsNested');\n if (nestedToggle) {\n nestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n if (tooltipsNestedToggle) {\n tooltipsNestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n }\n toggleERBHoverReveal(show) {\n this.showingERBHoverReveal = show !== undefined ? show : !this.showingERBHoverReveal;\n if (this.showingERBHoverReveal && this.showingTooltips) {\n this.toggleTooltips(false);\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = false;\n }\n }\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((el) => {\n const element = el;\n this.removeERBHoverReveal(element);\n if (this.showingERBHoverReveal && this.showingERBOutlines) {\n this.addERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n clearCurrentHoveredERB() {\n if (this.currentlyHoveredERBElement) {\n const handlers = this.currentlyHoveredERBElement._erbHoverHandlers;\n if (handlers) {\n handlers.hideERBCode();\n }\n this.currentlyHoveredERBElement = null;\n }\n }\n addERBHoverReveal(element) {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (!erbCode)\n return;\n this.removeERBHoverReveal(element);\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n const showERBCode = () => {\n if (!this.showingERBHoverReveal || !this.showingERBOutlines) {\n return;\n }\n if (this.currentlyHoveredERBElement === element) {\n return;\n }\n this.clearCurrentHoveredERB();\n this.currentlyHoveredERBElement = element;\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '3px';\n element.style.cursor = 'pointer';\n element.textContent = erbCode;\n element.addEventListener('click', this.handleRevealedERBClick);\n };\n const hideERBCode = () => {\n if (this.currentlyHoveredERBElement === element) {\n this.currentlyHoveredERBElement = null;\n }\n const originalContent = element.getAttribute('data-herb-debug-original');\n if (originalContent) {\n element.innerHTML = originalContent;\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '0';\n element.style.cursor = 'default';\n element.removeEventListener('click', this.handleRevealedERBClick);\n };\n element._erbHoverHandlers = { showERBCode, hideERBCode };\n element.addEventListener('mouseenter', showERBCode);\n }\n removeERBHoverReveal(element) {\n const handlers = element._erbHoverHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showERBCode);\n delete element._erbHoverHandlers;\n handlers.hideERBCode();\n }\n }\n createHoverTooltip(element, elementForPosition) {\n this.removeHoverTooltip(element);\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || element.getAttribute('data-herb-debug-file-name') || '';\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const line = element.getAttribute('data-herb-debug-line') || '';\n const column = element.getAttribute('data-herb-debug-column') || '';\n const erb = element.getAttribute('data-herb-debug-erb') || '';\n if (!relativePath || !erb)\n return;\n const tooltip = document.createElement('div');\n tooltip.className = 'herb-tooltip';\n tooltip.innerHTML = `\n <div class=\"herb-location\" data-tooltip=\"Open in Editor\">\n <span class=\"herb-file-path\">${relativePath}:${line}:${column}</span>\n <button class=\"herb-copy-path-btn\" data-tooltip=\"Copy file path\">📋</button>\n </div>\n <div class=\"herb-erb-code\">${erb}</div>\n `;\n let hideTimeout = null;\n const showTooltip = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n tooltip.classList.add('visible');\n };\n const hideTooltip = () => {\n hideTimeout = window.setTimeout(() => {\n tooltip.classList.remove('visible');\n }, 100);\n };\n element.addEventListener('mouseenter', showTooltip);\n element.addEventListener('mouseleave', hideTooltip);\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n const openInEditor = (e) => {\n if (e.target.closest('.herb-copy-path-btn')) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.openFileInEditor(fullPath, parseInt(line), parseInt(column));\n };\n locationElement?.addEventListener('click', openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n const copyFilePath = (e) => {\n e.preventDefault();\n e.stopPropagation();\n const textToCopy = `${relativePath}:${line}:${column}`;\n navigator.clipboard.writeText(textToCopy).then(() => {\n copyButton.textContent = '✅';\n setTimeout(() => {\n copyButton.textContent = '📋';\n }, 1000);\n }).catch((err) => {\n console.error('Failed to copy file path:', err);\n });\n };\n copyButton?.addEventListener('click', copyFilePath);\n const positionTooltip = () => {\n const elementRect = elementForPosition.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n tooltip.style.position = 'fixed';\n tooltip.style.left = '0';\n tooltip.style.top = '0';\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n const actualTooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = actualTooltipRect.width;\n const tooltipHeight = actualTooltipRect.height;\n let left = elementRect.left + (elementRect.width / 2) - (tooltipWidth / 2);\n let top = elementRect.top - tooltipHeight - 8;\n if (left < 8) {\n left = 8;\n }\n else if (left + tooltipWidth > viewportWidth - 8) {\n left = viewportWidth - tooltipWidth - 8;\n }\n if (top < 8) {\n top = elementRect.bottom + 8;\n if (top + tooltipHeight > viewportHeight - 8) {\n top = Math.max(8, (viewportHeight - tooltipHeight) / 2);\n }\n }\n if (top + tooltipHeight > viewportHeight - 8) {\n top = viewportHeight - tooltipHeight - 8;\n }\n tooltip.style.position = 'fixed';\n tooltip.style.left = `${left}px`;\n tooltip.style.top = `${top}px`;\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n };\n element._tooltipHandlers = { showTooltip, hideTooltip, openInEditor, copyFilePath, positionTooltip };\n tooltip._tooltipHandlers = { showTooltip, hideTooltip };\n element.appendChild(tooltip);\n setTimeout(positionTooltip, 0);\n window.addEventListener('scroll', positionTooltip, { passive: true });\n window.addEventListener('resize', positionTooltip, { passive: true });\n }\n removeHoverTooltip(element) {\n const tooltip = element.querySelector('.herb-tooltip');\n if (tooltip) {\n const handlers = element._tooltipHandlers;\n const tooltipHandlers = tooltip._tooltipHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showTooltip);\n element.removeEventListener('mouseleave', handlers.hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n locationElement?.removeEventListener('click', handlers.openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n copyButton?.removeEventListener('click', handlers.copyFilePath);\n if (handlers.positionTooltip) {\n window.removeEventListener('scroll', handlers.positionTooltip);\n window.removeEventListener('resize', handlers.positionTooltip);\n }\n delete element._tooltipHandlers;\n }\n if (tooltipHandlers) {\n tooltip.removeEventListener('mouseenter', tooltipHandlers.showTooltip);\n tooltip.removeEventListener('mouseleave', tooltipHandlers.hideTooltip);\n delete tooltip._tooltipHandlers;\n }\n tooltip.remove();\n }\n }\n addTooltipHoverHandler(element) {\n this.removeTooltipHoverHandler(element);\n const lazyTooltipHandler = () => {\n if (!this.showingTooltips || !this.showingERBOutlines) {\n return;\n }\n if (element.querySelector('.herb-tooltip')) {\n return;\n }\n this.createHoverTooltip(element, element);\n };\n element._lazyTooltipHandler = lazyTooltipHandler;\n element.addEventListener('mouseenter', lazyTooltipHandler);\n }\n removeTooltipHoverHandler(element) {\n const handler = element._lazyTooltipHandler;\n if (handler) {\n element.removeEventListener('mouseenter', handler);\n delete element._lazyTooltipHandler;\n }\n }\n getEditorUrl(editor, absolutePath, line, column) {\n switch (editor) {\n case 'cursor':\n return `cursor://file/${absolutePath}:${line}:${column}`;\n case 'vscode':\n return `vscode://file/${absolutePath}:${line}:${column}`;\n case 'vscodium':\n return `vscodium://file/${absolutePath}:${line}:${column}`;\n case 'zed':\n return `zed://file/${absolutePath}:${line}:${column}`;\n case 'windsurf':\n return `windsurf://file/${absolutePath}:${line}:${column}`;\n case 'sublime':\n return `subl://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'atom':\n return `atom://core/open/file?filename=${absolutePath}&line=${line}&column=${column}`;\n case 'textmate':\n return `txmt://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'emacs':\n return `emacs://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'idea':\n return `idea://open?file=${absolutePath}&line=${line}&column=${column}`;\n case 'rubymine':\n return `x-mine://open?file=${absolutePath}&line=${line}&column=${column}`;\n case 'nova':\n return `nova://open?path=${absolutePath}&line=${line}&column=${column}`;\n case 'macvim':\n return `mvim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'vim':\n return `vim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n case 'nvim':\n return `nvim://open?url=file://${absolutePath}&line=${line}&column=${column}`;\n default:\n return '';\n }\n }\n openFileInEditor(file, line, column) {\n const absolutePath = file.startsWith('/') ? file : (this.projectPath ? `${this.projectPath}/${file}` : file);\n const editorToUse = this.preferredEditor === 'auto' ? this.defaultEditorFromServer : this.preferredEditor;\n const url = this.getEditorUrl(editorToUse, absolutePath, line, column);\n if (url) {\n try {\n window.open(url, '_self');\n }\n catch (_error) {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n else {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n toggleTooltips(show) {\n this.showingTooltips = show !== undefined ? show : !this.showingTooltips;\n if (this.showingTooltips && this.showingERBHoverReveal) {\n this.toggleERBHoverReveal(false);\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = false;\n }\n }\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n if (this.showingERBOutlines && this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n else {\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n disableAll() {\n this.clearCurrentHoveredERB();\n this.toggleViewOutlines(false);\n this.togglePartialOutlines(false);\n this.toggleComponentOutlines(false);\n this.toggleERBTags(false);\n this.toggleERBOutlines(false);\n this.toggleERBHoverReveal(false);\n this.toggleTooltips(false);\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleViewOutlinesSwitch)\n toggleViewOutlinesSwitch.checked = false;\n if (togglePartialOutlinesSwitch)\n togglePartialOutlinesSwitch.checked = false;\n if (toggleComponentOutlinesSwitch)\n toggleComponentOutlinesSwitch.checked = false;\n if (toggleERBSwitch)\n toggleERBSwitch.checked = false;\n if (toggleERBOutlinesSwitch)\n toggleERBOutlinesSwitch.checked = false;\n if (toggleERBHoverRevealSwitch)\n toggleERBHoverRevealSwitch.checked = false;\n if (toggleTooltipsSwitch)\n toggleTooltipsSwitch.checked = false;\n }\n initializeErrorOverlay() {\n this.errorOverlay = new ErrorOverlay();\n }\n}\nHerbOverlay.SETTINGS_KEY = 'herb-dev-tools-settings';\nHerbOverlay.EDITOR_OPTIONS = [\n { value: 'auto', label: 'Auto (from server via RAILS_EDITOR or EDITOR)' },\n { value: 'atom', label: 'Atom' },\n { value: 'cursor', label: 'Cursor' },\n { value: 'emacs', label: 'Emacs' },\n { value: 'idea', label: 'IntelliJ IDEA' },\n { value: 'macvim', label: 'MacVim' },\n { value: 'nova', label: 'Nova' },\n { value: 'nvim', label: 'Neovim' },\n { value: 'rubymine', label: 'RubyMine' },\n { value: 'sublime', label: 'Sublime Text' },\n { value: 'textmate', label: 'TextMate' },\n { value: 'vim', label: 'Vim' },\n { value: 'vscode', label: 'Visual Studio Code' },\n { value: 'vscodium', label: 'VSCodium' },\n { value: 'windsurf', label: 'Windsurf' },\n { value: 'zed', label: 'Zed' },\n];\n\nfunction initHerbDevTools(options = {}) {\n const overlay = new HerbOverlay(options);\n if (typeof window !== 'undefined') {\n window.HerbDevTools._overlay = overlay;\n window.HerbDevTools._errorOverlay = overlay.errorOverlay;\n }\n return overlay;\n}\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const hasDebugMode = document.querySelector('meta[name=\"herb-debug-mode\"]')?.getAttribute('content') === 'true';\n const hasDebugErb = document.querySelector('[data-herb-debug-erb]') !== null;\n const hasValidationErrors = document.querySelector('template[data-herb-validation-errors]') !== null;\n const hasValidationError = document.querySelector('template[data-herb-validation-error]') !== null;\n const hasParserErrors = document.querySelector('template[data-herb-parser-error]') !== null;\n const hasOptimizationMismatches = document.querySelector('template[data-herb-optimization-mismatch]') !== null;\n const shouldAutoInit = hasDebugMode || hasDebugErb || hasValidationErrors || hasValidationError || hasParserErrors || hasOptimizationMismatches;\n if (shouldAutoInit) {\n document.addEventListener('DOMContentLoaded', () => {\n initHerbDevTools();\n });\n }\n}\nif (typeof window !== 'undefined') {\n window.HerbDevTools = {\n init: initHerbDevTools,\n HerbOverlay,\n ErrorOverlay\n };\n}\n\nexport { ErrorOverlay, HerbOverlay, initHerbDevTools };\n//# sourceMappingURL=herb-dev-tools.esm.js.map\n","import \"@herb-tools/client\"\n\nimport { initHerbDevTools, HerbOverlay, type HerbDevToolsOptions } from \"@herb-tools/dev-tools\"\n\nexport interface ReActionViewDevToolsOptions extends HerbDevToolsOptions {\n projectPath?: string\n autoInit?: boolean\n}\n\nexport class ReActionViewDevTools {\n private herbOverlay: HerbOverlay | null = null\n private static instance: ReActionViewDevTools | null = null\n\n constructor(private options: ReActionViewDevToolsOptions = {}) {\n if (options.autoInit !== false) {\n this.init()\n }\n }\n\n init(): HerbOverlay {\n if (this.herbOverlay) {\n this.destroy()\n }\n\n this.herbOverlay = initHerbDevTools({\n projectPath: this.options.projectPath,\n ...this.options\n })\n\n return this.herbOverlay\n }\n\n destroy(): void {\n if (this.herbOverlay) {\n const existingMenu = document.querySelector(\".herb-floating-menu\")\n\n if (existingMenu) {\n existingMenu.remove()\n }\n }\n\n this.herbOverlay = null\n }\n\n getHerbOverlay(): HerbOverlay | null {\n return this.herbOverlay\n }\n\n static getInstance(): ReActionViewDevTools | null {\n return ReActionViewDevTools.instance\n }\n\n static setInstance(instance: ReActionViewDevTools | null): void {\n ReActionViewDevTools.instance = instance\n }\n}\n\nexport function initReActionViewDevTools(options: ReActionViewDevToolsOptions = {}): ReActionViewDevTools {\n const existingInstance = ReActionViewDevTools.getInstance()\n\n if (existingInstance) {\n existingInstance.destroy()\n }\n\n const instance = new ReActionViewDevTools(options)\n ReActionViewDevTools.setInstance(instance)\n\n return instance\n}\n\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n let isInitializing = false\n\n const initializeDevTools = () => {\n if (isInitializing) {\n console.log(\"ReActionView dev tools initialization already in progress, skipping...\")\n\n return\n }\n\n const shouldAutoInit = document.querySelector(`meta[name=\"herb-debug-mode\"]`)?.getAttribute(\"content\") === \"true\" || document.querySelector(\"[data-herb-debug-erb]\") !== null\n\n if (!shouldAutoInit) {\n console.log(\"ReActionView debug mode not detected, skipping dev tools initialization\")\n return\n }\n\n isInitializing = true\n\n try {\n const projectPath = document.querySelector(`meta[name=\"herb-project-path\"]`)?.getAttribute(\"content\") ?? undefined\n\n initReActionViewDevTools({\n projectPath,\n autoInit: true\n })\n\n } catch (error) {\n console.warn(\"Could not initialize ReActionView dev tools:\", error)\n } finally {\n isInitializing = false\n }\n }\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", initializeDevTools, { once: true })\n } else {\n setTimeout(initializeDevTools, 0)\n }\n\n document.addEventListener(\"turbo:load\", initializeDevTools)\n document.addEventListener(\"turbo:render\", initializeDevTools)\n document.addEventListener(\"turbo:visit\", initializeDevTools)\n}\n\ndeclare global {\n interface Window {\n ReActionViewDevTools: {\n init: typeof initReActionViewDevTools\n ReActionViewDevTools: typeof ReActionViewDevTools\n HerbOverlay: typeof HerbOverlay\n }\n }\n}\n\nif (typeof window !== \"undefined\") {\n window.ReActionViewDevTools = {\n init: initReActionViewDevTools,\n ReActionViewDevTools,\n HerbOverlay\n }\n}\n\nexport { HerbOverlay, type HerbDevToolsOptions }\n"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAAG,IAAI;AACvC,MAAM,8BAA8B,GAAG,EAAE;AACzC,MAAM,UAAU,CAAC;AACjB,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAClC,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,OAAO,GAAG;AACvB,YAAY,iBAAiB,EAAE,0BAA0B;AACzD,YAAY,oBAAoB,EAAE,8BAA8B;AAChE,YAAY,GAAG,OAAO;AACtB,SAAS;AACT,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,0BAA0B;AAC3E,IAAI;AACJ,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,8BAA8B;AAClF,IAAI;AACJ,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI;AACtD,YAAY;AACZ,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAClC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7C,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI;AACtC,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB;AAC1D,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC/B,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI;AAC9B,QAAQ;AACR,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7C,YAAY,IAAI,CAAC,cAAc,GAAG,IAAI;AACtC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;AACtC,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC/B,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI;AAC9B,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAClC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,IAAI;AACJ,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACzD,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM;AACvC,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAC1C,gBAAgB,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI;AAC1C,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,KAAK,KAAK;AAC/C,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1D,oBAAoB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;AACrD,gBAAgB;AAChB,gBAAgB,OAAO,KAAK,EAAE;AAC9B,oBAAoB,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC;AACjF,gBAAgB;AAChB,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM;AACxC,gBAAgB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3E,gBAAgB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI;AAC7C,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;AACxC,YAAY,CAAC;AACb,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM;AACxC,gBAAgB,IAAI;AACpB,oBAAoB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;AACxC,gBAAgB;AAChB,gBAAgB,MAAM;AACtB,oBAAoB,IAAI,CAAC,iBAAiB,EAAE;AAC5C,gBAAgB;AAChB,YAAY,CAAC;AACb,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACjE,YAAY,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACzG,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI;AAC/B,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI;AACtC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;AACzG,QAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC;AAC/F,QAAQ,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;AAC/C,YAAY,IAAI,CAAC,cAAc,EAAE;AACjC,QAAQ,CAAC,EAAE,KAAK,CAAC;AACjB,IAAI;AACJ;;AAEA,MAAM,MAAM,GAAG;AACf,IAAI,KAAK,EAAE,SAAS;AACpB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,UAAU,EAAE,SAAS;AACzB,IAAI,WAAW,EAAE,SAAS;AAC1B,IAAI,SAAS,EAAE,gCAAgC;AAC/C,IAAI,GAAG,EAAE,SAAS;AAClB,IAAI,OAAO,EAAE,SAAS;AACtB,IAAI,QAAQ,EAAE,SAAS;AACvB,IAAI,KAAK,EAAE,SAAS;AACpB,IAAI,SAAS,EAAE,SAAS;AACxB,IAAI,WAAW,EAAE,SAAS;AAC1B,IAAI,UAAU,EAAE,SAAS;AACzB,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,WAAW,EAAE,SAAS;AAC1B,CAAC;;AAED,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,mBAAmB,GAAG,GAAG;AAC/B,MAAM,QAAQ,GAAG,oBAAoB;AACrC,MAAM,YAAY,GAAG;AACrB,IAAI,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;AAChH,IAAI,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;AAC9G,IAAI,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;AAC/G,CAAC;AACD,MAAM,KAAK,CAAC;AACZ,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAC/B,QAAQ,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE;AACnD,QAAQ,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC;AACxC,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,QAAQ,KAAK,CAAC,EAAE,GAAG,QAAQ;AAC3B,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,6DAA6D,EAAE,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,0FAA0F,EAAE,KAAK,CAAC,IAAI,CAAC,4GAA4G,CAAC;AACpW,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACnD,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI;AACrC,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACnD,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO;AAClC,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAQ,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACrC,YAAY,UAAU,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC;AACjE,QAAQ,CAAC,EAAE,cAAc,CAAC;AAC1B,IAAI;AACJ;;AAEA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACtC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAClD,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC1C,QAAQ;AACR,QAAQ,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC;AAChE,QAAQ,IAAI,CAAC,GAAG;AAChB,YAAY;AACZ,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;AACpE,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC;AAC1E,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;AACxE,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjF,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC5C,QAAQ,QAAQ,KAAK;AACrB,YAAY,KAAK,WAAW;AAC5B,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;AAC/D,gBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AAC5C,gBAAgB,GAAG,CAAC,KAAK,GAAG,8BAA8B;AAC1D,gBAAgB,GAAG,CAAC,OAAO,GAAG,IAAI;AAClC,gBAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACpE,oBAAoB,QAAQ,EAAE,MAAM,CAAC,KAAK;AAC1C,oBAAoB,UAAU,EAAE,CAAC,2BAA2B,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACtF,oBAAoB,WAAW,EAAE,MAAM,CAAC,SAAS;AACjD,oBAAoB,YAAY,EAAE,KAAK;AACvC,iBAAiB,CAAC;AAClB,gBAAgB;AAChB,YAAY,KAAK,cAAc;AAC/B,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;AAC/D,gBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AAC5C,gBAAgB,GAAG,CAAC,KAAK,GAAG,mCAAmC;AAC/D,gBAAgB,GAAG,CAAC,OAAO,GAAG,IAAI;AAClC,gBAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACpE,oBAAoB,QAAQ,EAAE,MAAM,CAAC,GAAG;AACxC,oBAAoB,UAAU,EAAE,yBAAyB;AACzD,oBAAoB,WAAW,EAAE,MAAM,CAAC,IAAI;AAC5C,oBAAoB,YAAY,EAAE,IAAI;AACtC,oBAAoB,YAAY;AAChC,iBAAiB,CAAC;AAClB,gBAAgB;AAChB,YAAY,KAAK,UAAU;AAC3B,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACjE,gBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;AAC5C,gBAAgB,GAAG,CAAC,KAAK,GAAG,uDAAuD;AACnF,gBAAgB,GAAG,CAAC,OAAO,GAAG,YAAY;AAC1C,gBAAgB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;AACpE,oBAAoB,QAAQ,EAAE,MAAM,CAAC,KAAK;AAC1C,oBAAoB,UAAU,EAAE,0BAA0B;AAC1D,oBAAoB,WAAW,EAAE,MAAM,CAAC,WAAW;AACnD,oBAAoB,YAAY,EAAE,IAAI;AACtC,oBAAoB,YAAY;AAChC,iBAAiB,CAAC;AAClB,gBAAgB;AAChB;AACA,IAAI;AACJ,IAAI,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE;AAC1D,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC;AAC1E,QAAQ,IAAI,CAAC,WAAW;AACxB,YAAY;AACZ,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAClD,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC1C,QAAQ;AACR,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC/C,QAAQ,WAAW,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AACpF,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI;AAC7C,QAAQ,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,MAAM;AACpD,YAAY,SAAS,EAAE;AACvB,YAAY,IAAI,SAAS,IAAI,CAAC,EAAE;AAChC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7C,oBAAoB,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC1D,oBAAoB,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAClD,gBAAgB;AAChB,gBAAgB,WAAW,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC;AACzF,gBAAgB;AAChB,YAAY;AACZ,YAAY,WAAW,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AACxF,QAAQ,CAAC,EAAE,IAAI,CAAC;AAChB,IAAI;AACJ,IAAI,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE;AAC5D,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;AACtE,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU;AACxD,YAAY,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW;AACzD,QAAQ;AACR,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,GAAG,MAAM;AAC9E,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE;AACtC,gBAAgB,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY;AACzD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;AAClD,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU;AAC7C,QAAQ,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM;AAClE,QAAQ,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,GAAG,wCAAwC,GAAG,MAAM;AAC3F,IAAI;AACJ;;AAEA,MAAM,QAAQ,GAAG,0BAA0B;AAC3C,MAAM,aAAa,CAAC;AACpB,IAAI,OAAO,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE;AAC9C,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC7C,YAAY;AACZ,QAAQ,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa;AAC1E,QAAQ,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa;AAC1E,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,QAAQ,KAAK,CAAC,EAAE,GAAG,QAAQ;AAC3B,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,6DAA6D,EAAE,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,2GAA2G,EAAE,MAAM,CAAC,SAAS,CAAC,oFAAoF,CAAC;AACpW,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC1D,QAAQ,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,+BAA+B;AACnE,QAAQ,WAAW,CAAC,WAAW,GAAG,cAAc;AAChD,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACrD,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AAChC,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACnD,QAAQ,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,oCAAoC;AAClE,QAAQ,KAAK,CAAC,WAAW,GAAG,0BAA0B;AACtD,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzD,QAAQ,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACjF,QAAQ,WAAW,CAAC,WAAW,GAAG,CAAC,2BAA2B,EAAE,UAAU,CAAC,uBAAuB,EAAE,UAAU,CAAC,2BAA2B,CAAC;AAC3I,QAAQ,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC,QAAQ,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;AACxC,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACxD,QAAQ,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,gEAAgE,EAAE,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC9I,QAAQ,OAAO,CAAC,WAAW,GAAG,QAAQ;AACtC,QAAQ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/D,QAAQ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC;AACtC,QAAQ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,QAAQ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAClC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC;AAC1E,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;AACpE,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,WAAW,CAAC,WAAW,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;AACrE,YAAY,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW;AACxD,QAAQ;AACR,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AACpD,QAAQ;AACR,IAAI;AACJ;;AAEA,SAAS,UAAU,CAAC,OAAO,EAAE;AAC7B,IAAI,MAAM,QAAQ,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7E,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACrD,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAQ,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,QAAQ,CAAC;AAC7E,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,OAAO,GAAG,KAAK;AACvB,IAAI,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE;AAChD,QAAQ,IAAI,gBAAgB,GAAG,KAAK;AACpC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAY,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE;AACrD,gBAAgB,gBAAgB,GAAG,IAAI;AACvC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,OAAO,CAAC,KAAK,CAAC,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5F,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,gBAAgB,EAAE;AAC9B,YAAY,OAAO,GAAG,IAAI;AAC1B,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,SAAS,CAAC;AAC5E,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,OAAO;AAClB;AACA,SAAS,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE;AACzC,IAAI,QAAQ,SAAS,CAAC,IAAI;AAC1B,QAAQ,KAAK,cAAc;AAC3B,YAAY,OAAO,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC;AACnD,QAAQ,KAAK,yBAAyB;AACtC,YAAY,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC;AACxD,QAAQ,KAAK,iBAAiB;AAC9B,YAAY,OAAO,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;AACrD,QAAQ,KAAK,mBAAmB;AAChC,YAAY,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC;AACxD,QAAQ;AACR,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC,wCAAwC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,YAAY,OAAO,KAAK;AACxB;AACA;AACA,SAAS,cAAc,CAAC,KAAK,EAAE;AAC/B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC;AACjD,IAAI,IAAI,CAAC,KAAK;AACd,QAAQ,OAAO,IAAI;AACnB,IAAI,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;AAC9C;AACA,SAAS,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE;AACrC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS;AAC5B,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;AACzD,IAAI,IAAI,CAAC,SAAS;AAClB,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK;AAC7D,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7F,IAAI,OAAO,MAAM;AACjB;AACA,SAAS,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE;AACzC,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;AACjD,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;AACxE,IAAI,IAAI,IAAI;AACZ,IAAI,QAAQ,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG;AACvC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE;AACrD,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE;AAC1C,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI;AACpC,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AACpD,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,SAAS;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC/C,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI;AACpE,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAC5C,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;AACvD,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;AAClD,IAAI,OAAO,IAAI;AACf;AACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC5C,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI;AACpC,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;AACzD,IAAI,IAAI,CAAC,SAAS;AAClB,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI;AACpD,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AACtD,IAAI,OAAO,IAAI;AACf;AACA,SAAS,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC/C,IAAI,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI;AACpC,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;AAC5C,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC;AAClE,IAAI,IAAI,CAAC,KAAK;AACd,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC,IAAI,OAAO,IAAI;AACf;;AAEA,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,UAAU,CAAC;AACjB,IAAI,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;AAC9B,QAAQ,IAAI,CAAC,KAAK,GAAG,cAAc;AACnC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACvC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,YAAY;AACtE,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW;AAChD,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;AACpD,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;AACzC,YAAY,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvC,YAAY,SAAS,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC/D,YAAY,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC7C,YAAY,YAAY,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AACnD,YAAY,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;AAC7G,YAAY,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC7C,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACjC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AACpC,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACxC,QAAQ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC/B,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK;AACzB,IAAI;AACJ,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI;AACxB,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAClC,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,KAAK,cAAc,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU;AAC1F,QAAQ,IAAI,IAAI,CAAC,kBAAkB,IAAI,eAAe,EAAE;AACxD,YAAY,KAAK,CAAC,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC;AAClE,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACtC,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AACrC,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI;AAClC,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;AACnE,YAAY,KAAK,CAAC,IAAI,CAAC,8BAA8B,EAAE,cAAc,CAAC;AACtE,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACxC,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI;AACrC,IAAI;AACJ,IAAI,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE;AAChD,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrI,QAAQ,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;AAChF,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACpC,QAAQ,KAAK,CAAC,IAAI,CAAC,wDAAwD,EAAE,SAAS,CAAC;AACvF,IAAI;AACJ,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;AACrE,YAAY;AACZ,QAAQ,QAAQ,OAAO,CAAC,IAAI;AAC5B,YAAY,KAAK,SAAS;AAC1B,gBAAgB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC3C,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACzC,gBAAgB;AAChB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC1C,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACzC,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACzC,gBAAgB;AAChB;AACA,IAAI;AACJ,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC;AAC/G,QAAQ,IAAI,aAAa,IAAI,OAAO,CAAC,OAAO,IAAI,aAAa,KAAK,OAAO,CAAC,OAAO,EAAE;AACnF,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK;AACrC,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,yCAAyC,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;AACrI,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AAC5C,YAAY,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;AAC9D,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,GAAG,IAAI;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AACvC,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;AAC3C,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxC,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AAChC,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AACvC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC1D,gBAAgB,QAAQ,EAAE,OAAO;AACjC,gBAAgB,OAAO,EAAE,KAAK,CAAC,OAAO;AACtC,gBAAgB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChC,gBAAgB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;AACpE,aAAa,CAAC,CAAC;AACf,YAAY,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;AACpD,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;AACvC,QAAQ,IAAI,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE;AAC7C,IAAI;AACJ,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAClC,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY;AAC5C,QAAQ,OAAO,QAAQ,EAAE,aAAa,IAAI,QAAQ,EAAE,QAAQ,EAAE,YAAY,IAAI,IAAI;AAClF,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,mCAAmC,CAAC;AAChF,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AACzE,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5B,gBAAgB,OAAO,IAAI;AAC3B,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;;AAEA,IAAI,QAAQ,GAAG,IAAI;AACnB,SAAS,cAAc,CAAC,OAAO,GAAG,EAAE,EAAE;AACtC,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,QAAQ,CAAC,UAAU,EAAE;AAC7B,IAAI;AACJ,IAAI,QAAQ,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AACtC,IAAI,MAAM,CAAC,YAAY,GAAG,QAAQ;AAClC,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,IAAI,OAAO,QAAQ;AACnB;AAIA,SAAS,cAAc,GAAG;AAC1B,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,8BAA8B,CAAC;AAC5E,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,MAAM;AAClE,QAAQ;AACR,IAAI,cAAc,EAAE;AACpB;AACA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACrC,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;AAC3C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,CAAC;AACrE,IAAI;AACJ,SAAS;AACT,QAAQ,cAAc,EAAE;AACxB,IAAI;AACJ;;ACzkBA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEjD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;AAEA,IAAI,QAAQ,GAAG,uybAAuyb;AACtzb,WAAW,CAAC,QAAQ,CAAC;;AAErB,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE;AACxC,IAAI,4BAA4B,GAAG,KAAK;AACxC,SAAS,6BAA6B,GAAG;AACzC,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,2CAA2C,CAAC;AAC5F,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACpC,QAAQ,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC;AACzF,QAAQ,QAAQ,CAAC,MAAM,EAAE;AACzB,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,sBAAsB,CAAC,IAAI,GAAG,CAAC,EAAE;AACzC,QAAQ,uBAAuB,EAAE;AACjC,IAAI;AACJ;AACA,SAAS,uBAAuB,GAAG;AACnC,IAAI,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE;AAChE,IAAI,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE;AAChE,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACxD,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;AAC/G,IAAI,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAC1I,IAAI,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,mCAAmC,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5H,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACvC,QAAQ,4BAA4B,GAAG,IAAI;AAC3C,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACrD,QAAQ,KAAK,CAAC,SAAS,GAAG,+BAA+B;AACzD,QAAQ,KAAK,CAAC,WAAW,GAAG;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,IAAI,KAAK,CAAC,SAAS,GAAG,yBAAyB;AAC/C,IAAI,KAAK,CAAC,SAAS,GAAG;AACtB;AACA,YAAY,EAAE,KAAK,CAAC;AACpB;AACA;;AAEA;AACA,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0CAA0C,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACjK;;AAEA;AACA;AACA;AACA,EAAE,CAAC;AACH,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACpC,IAAI,KAAK,CAAC,aAAa,CAAC,gCAAgC,CAAC,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC3F,QAAQ,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AACzC,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,IAAI,KAAK,CAAC,SAAS,GAAG,yBAAyB;AAC/C,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1D,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC1C,QAAQ,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AACzC,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAC9D,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3B,IAAI;AACJ,SAAS;AACT,QAAQ,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AACtC,QAAQ,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AAC7B,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;AAC/B,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACxC,IAAI;AACJ;AACA,MAAM,YAAY,CAAC;AACnB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,IAAI;AACJ,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAQ,6BAA6B,EAAE;AACvC,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC,KAAK,IAAI;AAC7F,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;AAC3C,YAAY,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,aAAa,IAAI,eAAe,EAAE;AAClC,YAAY,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;AAChF,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC;AAC/E,QAAQ;AACR,IAAI;AACJ,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,MAAM,iBAAiB,GAAG,EAAE;AACpC,QAAQ,MAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,sCAAsC,CAAC;AACrG,QAAQ,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AACnF,QAAQ;AACR,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,uCAAuC,CAAC;AAChG,QAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK;AACpD,YAAY,IAAI;AAChB,gBAAgB,IAAI,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;AAC3D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AAC/B,oBAAoB,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;AACzD,gBAAgB;AAChB,gBAAgB,IAAI,QAAQ,EAAE;AAC9B,oBAAoB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC/D,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/D,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,EAAE;AACzF,oBAAoB,WAAW,EAAE,QAAQ,CAAC,WAAW;AACrD,oBAAoB,SAAS,EAAE,QAAQ,CAAC;AACxC,iBAAiB,CAAC;AAClB,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,kCAAkC,CAAC;AAC3F,QAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK;AACpD,YAAY,IAAI;AAChB,gBAAgB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;AAC9F,gBAAgB,IAAI,WAAW,EAAE;AACjC,oBAAoB,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;AAC/D,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAChF,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1E,IAAI;AACJ,IAAI,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,EAAE;AAC7D,QAAQ,MAAM,mBAAmB,GAAG,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAClC,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACxC,YAAY,IAAI;AAChB,gBAAgB,MAAM,QAAQ,GAAG;AACjC,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,OAAO;AAC/E,oBAAoB,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,SAAS;AAC7E,oBAAoB,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;AAClE,oBAAoB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;AAC7E,oBAAoB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;AACjF,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,SAAS;AACjF,oBAAoB,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE;AACxE,oBAAoB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,SAAS;AACrF,oBAAoB,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW;AAChG,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;AAC7D,gBAAgB,IAAI,IAAI,EAAE;AAC1B,oBAAoB,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpI,oBAAoB,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChD,wBAAwB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/D,wBAAwB,QAAQ,CAAC,KAAK,EAAE;AACxC,oBAAoB;AACpB,yBAAyB;AACzB,wBAAwB,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5E,oBAAoB;AACpB,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;AAC9E,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,mBAAmB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AACtD,QAAQ,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;AAC9D,QAAQ;AACR,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAY;AACZ,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACpD,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,oBAAoB;AAC9C,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;AACjC;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChD;AACA;AACA;;AAEA;AACA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,KAAK,KAAK;AAClE,YAAY,EAAE,KAAK,GAAG,CAAC,GAAG,yCAAyC,GAAG,EAAE;AACxE;AACA,2CAA2C,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC/H;AACA,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI;AAC/D,8CAA8C,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC/D,oDAAoD,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrF,oBAAoB,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,sCAAsC,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AACjJ,oBAAoB,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AAChI,mDAAmD,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzG;AACA,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B;AACA;AACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AACA;AACA,IAAI,CAAC;AACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC;AACxE,QAAQ,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9D,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;AACtD,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;AAC3C,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;AACpD,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACtD,gBAAgB,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;AACpD,YAAY,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;AACzE,gBAAgB,CAAC,CAAC,cAAc,EAAE;AAClC,gBAAgB,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACrC,YAAY,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9C,QAAQ;AACR,IAAI;AACJ,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AACtG,IAAI;AACJ,IAAI,eAAe,CAAC,MAAM,EAAE;AAC5B,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAY,OAAO,SAAS;AAC5B,QAAQ;AACR,QAAQ,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AAC7D,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS;AACpD,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC,EAAE,EAAE,CAAC;AACd,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AACtD,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;AACxC,YAAY,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;AAChD,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3D,YAAY,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AAC3E,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI;AACnD,gBAAgB,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;AACpD,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC/D,gBAAgB,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAChD,YAAY,CAAC,CAAC;AACd,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ,IAAI,cAAc,CAAC,MAAM,EAAE;AAC3B,QAAQ,QAAQ,MAAM;AACtB,YAAY,KAAK,QAAQ,EAAE,OAAO,QAAQ;AAC1C,YAAY,KAAK,mBAAmB,EAAE,OAAO,UAAU;AACvD,YAAY,KAAK,kBAAkB,EAAE,OAAO,SAAS;AACrD,YAAY,KAAK,wBAAwB,EAAE,OAAO,eAAe;AACjE,YAAY,SAAS,OAAO,YAAY;AACxC;AACA,IAAI;AACJ,IAAI,gBAAgB,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACnH,IAAI;AACJ,IAAI,UAAU,CAAC,MAAM,EAAE;AACvB,QAAQ,OAAO;AACf,aAAa,OAAO,CAAC,IAAI,EAAE,OAAO;AAClC,aAAa,OAAO,CAAC,IAAI,EAAE,MAAM;AACjC,aAAa,OAAO,CAAC,IAAI,EAAE,MAAM;AACjC,aAAa,OAAO,CAAC,IAAI,EAAE,QAAQ;AACnC,aAAa,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpC,IAAI;AACJ,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAChD,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,GAAG;AACX,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC/C,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,IAAI,EAAE;AACvB,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,EAAE;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;AAC5C,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE;AACxC,IAAI;AACJ,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;AACjC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAClG,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACpC,YAAY,gBAAgB,EAAE,MAAM;AACpC,YAAY,QAAQ;AACpB,YAAY,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,SAAS,CAAC;AACV,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACjC,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI;AAC/B,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,yBAAyB,CAAC,WAAW,EAAE;AAC3C,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC;AACpF,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,eAAe,CAAC,MAAM,EAAE;AACpC,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACvD,QAAQ,SAAS,CAAC,SAAS,GAAG,WAAW;AACzC,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,4BAA4B,CAAC;AAC7E,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC9C,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC1C,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC;AAC1F,QAAQ;AACR,IAAI;AACJ,IAAI,wBAAwB,CAAC,SAAS,EAAE;AACxC,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC;AAClF,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,eAAe,CAAC,MAAM,EAAE;AACpC,QAAQ;AACR,QAAQ,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;AACtC,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AACtC,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;AACnD,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC7C,gBAAgB,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;AAC9C,YAAY;AACZ,YAAY,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrD,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ;AACnD,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAgB,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1C,YAAY;AACZ,YAAY,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjD,QAAQ,CAAC,CAAC;AACV,QAAQ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACtH,QAAQ,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1H,QAAQ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACzE,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM;AAC5C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC3J,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACrD,QAAQ,OAAO,CAAC,SAAS,GAAG,yBAAyB;AACrD,QAAQ,OAAO,CAAC,SAAS,GAAG,WAAW;AACvC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1C,QAAQ,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC;AACpD,IAAI;AACJ,IAAI,0BAA0B,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE;AACjF,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,KAAK,CAAC,GAAG,kBAAkB,GAAG,CAAC,iBAAiB,CAAC;AACvF,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,WAAW,EAAE;AACtD,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AAClF,QAAQ;AACR,aAAa;AACb,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;AACjC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5F,QAAQ,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC;AACnC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAClG,QAAQ,IAAI,QAAQ,GAAG,EAAE;AACzB,QAAQ,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;AACnC,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACjH,YAAY,QAAQ,GAAG;AACvB;AACA;AACA,iBAAiB,EAAE,WAAW,CAAC;AAC/B;AACA,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK;AACvE,qDAAqD,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC7E,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AACxD;AACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AACA,MAAM,CAAC;AACP,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK;AACxG,uDAAuD,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjF;AACA,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC;AACnG;AACA;AACA,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI;AACrC,YAAY,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7F,YAAY,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;AAC7B,gBAAgB,OAAO;AACvB,0DAA0D,EAAE,aAAa,CAAC;AAC1E,kBAAkB,EAAE,CAAC,CAAC,IAAI;AAC1B,8EAA8E,EAAE,CAAC,CAAC,KAAK,CAAC;AACxF;AACA,yDAAyD,EAAE,CAAC,CAAC,KAAK,CAAC;AACnE;AACA;AACA,cAAc,CAAC;AACf,YAAY;AACZ,YAAY,OAAO,CAAC,6CAA6C,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAClG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACnB;AACA;AACA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,QAAQ,OAAO;AACf,aAAa,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,cAAc,EAAE,KAAK;AACrB;AACA,kDAAkD,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE;AACA;AACA;AACA,QAAQ,EAAE,QAAQ;AAClB;AACA,UAAU,EAAE,eAAe;AAC3B;AACA;AACA;;AAEA,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE;AACjC;AACA;AACA,IAAI,CAAC;AACL,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,kCAAkC,CAAC;AACnF,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;AAC5C,QAAQ;AACR,QAAQ,OAAO,CAAC,gPAAgP,CAAC;AACjQ,IAAI;AACJ,IAAI,0BAA0B,GAAG;AACjC,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;A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","x_google_ignoreList":[0,1]}
|