@herb-tools/dev-tools 0.8.9 → 0.9.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"herb-dev-tools.esm.js","sources":["../../../../node_modules/style-inject/dist/style-inject.es.js","../src/error-overlay.ts","../src/herb-overlay.ts","../src/index.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || 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\nexport default styleInject;\n","import { Diagnostic } from '@herb-tools/core';\n\nexport interface ValidationError extends Omit<Diagnostic, 'location'> {\n location?: {\n line: number;\n column: number;\n };\n suggestion?: string;\n}\n\nexport interface ValidationData {\n validationErrors: ValidationError[];\n filename: string;\n timestamp: string;\n}\n\nexport class ErrorOverlay {\n private overlay: HTMLElement | null = null;\n private allValidationData: ValidationData[] = [];\n private isVisible = false;\n\n constructor() {\n this.init();\n }\n\n private init() {\n this.detectValidationErrors();\n\n const hasParserErrors = document.querySelector('.herb-parser-error-overlay') !== null;\n\n if (this.getTotalErrorCount() > 0) {\n this.createOverlay();\n this.setupToggleHandler();\n } else if (hasParserErrors) {\n console.log('[ErrorOverlay] Parser error overlay already displayed');\n } else {\n console.log('[ErrorOverlay] No errors found, not creating overlay');\n }\n }\n\n private detectValidationErrors() {\n const templatesToRemove: HTMLTemplateElement[] = [];\n const validationTemplates = document.querySelectorAll('template[data-herb-validation-error]') as NodeListOf<HTMLTemplateElement>;\n\n if (validationTemplates.length > 0) {\n this.processValidationTemplates(validationTemplates, templatesToRemove);\n }\n\n const jsonTemplates = document.querySelectorAll('template[data-herb-validation-errors]') as NodeListOf<HTMLTemplateElement>;\n\n jsonTemplates.forEach((template, _index) => {\n try {\n let jsonData = template.textContent?.trim();\n\n if (!jsonData) {\n jsonData = template.innerHTML?.trim();\n }\n\n if (jsonData) {\n const validationData = JSON.parse(jsonData) as ValidationData;\n this.allValidationData.push(validationData);\n\n templatesToRemove.push(template);\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\n templatesToRemove.push(template);\n }\n });\n\n const htmlTemplates = document.querySelectorAll('template[data-herb-parser-error]') as NodeListOf<HTMLTemplateElement>;\n\n htmlTemplates.forEach((template, _index) => {\n try {\n let htmlContent = template.innerHTML?.trim() || template.textContent?.trim();\n\n if (htmlContent) {\n this.displayParserErrorOverlay(htmlContent);\n templatesToRemove.push(template);\n }\n } catch (error) {\n console.error('Failed to process parser error template:', error);\n templatesToRemove.push(template);\n }\n });\n\n templatesToRemove.forEach((template, _index) => template.remove());\n }\n\n private processValidationTemplates(templates: NodeListOf<HTMLTemplateElement>, templatesToRemove: HTMLTemplateElement[]) {\n const validationFragments: Array<{\n metadata: {\n severity: string;\n source: string;\n code: string;\n line: number;\n column: number;\n filename: string;\n message: string;\n suggestion?: string;\n timestamp: string;\n };\n html: string;\n count: number;\n }> = [];\n\n const errorMap = new Map<string, typeof validationFragments[0]>();\n\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\n const html = template.innerHTML?.trim() || '';\n\n if (html) {\n const errorKey = `${metadata.filename}:${metadata.line}:${metadata.column}:${metadata.code}:${metadata.message}`;\n\n if (errorMap.has(errorKey)) {\n const existing = errorMap.get(errorKey)!;\n existing.count++;\n } else {\n errorMap.set(errorKey, { metadata, html, count: 1 });\n }\n\n templatesToRemove.push(template);\n }\n } catch (error) {\n console.error('Failed to process validation template:', error);\n templatesToRemove.push(template);\n }\n });\n\n validationFragments.push(...errorMap.values());\n\n if (validationFragments.length > 0) {\n this.displayValidationOverlay(validationFragments);\n }\n }\n\n private createOverlay() {\n if (this.allValidationData.length === 0) return;\n\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\n document.body.appendChild(this.overlay);\n\n const closeBtn = this.overlay.querySelector('.herb-error-close');\n closeBtn?.addEventListener('click', () => this.hide());\n\n this.overlay.addEventListener('click', (e) => {\n if (e.target === this.overlay) {\n this.hide();\n }\n });\n\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n });\n }\n\n private 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\n if (this.hasErrorSeverity()) {\n setTimeout(() => this.show(), 100);\n }\n }\n\n private getTotalErrorCount(): number {\n return this.allValidationData.reduce((total, data) => total + data.validationErrors.length, 0);\n }\n\n private getErrorSummary(errors: ValidationError[]): string {\n if (errors.length === 1) {\n return '1 error';\n }\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 }, {} as Record<string, number>);\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\n return `${count} ${sourceLabel} error${count === 1 ? '' : 's'}`;\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\n return `${errors.length} errors (${parts.join(', ')})`;\n }\n }\n\n private getSourceLabel(source: string): string {\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\n private hasErrorSeverity(): boolean {\n return this.allValidationData.some(data =>\n data.validationErrors.some(error => error.severity === 'error')\n );\n }\n\n private escapeHtml(unsafe: string): string {\n return unsafe\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n public show() {\n if (this.overlay) {\n this.overlay.style.display = 'block';\n this.isVisible = true;\n }\n }\n\n public hide() {\n if (this.overlay) {\n this.overlay.style.display = 'none';\n this.isVisible = false;\n }\n }\n\n public toggle() {\n if (this.isVisible) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n public hasErrors(): boolean {\n return this.getTotalErrorCount() > 0;\n }\n\n public getErrorCount(): number {\n return this.getTotalErrorCount();\n }\n\n private displayParserErrorOverlay(htmlContent: string) {\n const existingOverlay = document.querySelector('.herb-parser-error-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n\n const container = document.createElement('div');\n container.innerHTML = htmlContent;\n\n const overlay = container.querySelector('.herb-parser-error-overlay') as HTMLElement;\n\n if (overlay) {\n document.body.appendChild(overlay);\n overlay.style.display = 'flex';\n } else {\n console.error('[ErrorOverlay] No parser error overlay found in HTML template');\n }\n }\n\n private displayValidationOverlay(fragments: Array<{\n metadata: {\n severity: string;\n source: string;\n code: string;\n line: number;\n column: number;\n filename: string;\n message: string;\n suggestion?: string;\n timestamp: string;\n };\n html: string;\n count: number;\n }>) {\n const existingOverlay = document.querySelector('.herb-validation-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n\n const errorsBySource = new Map<string, typeof fragments>();\n const errorsByFile = new Map<string, typeof fragments>();\n\n fragments.forEach(fragment => {\n const source = fragment.metadata.source;\n\n if (!errorsBySource.has(source)) {\n errorsBySource.set(source, []);\n }\n\n errorsBySource.get(source)!.push(fragment);\n\n const file = fragment.metadata.filename;\n\n if (!errorsByFile.has(file)) {\n errorsByFile.set(file, []);\n }\n errorsByFile.get(file)!.push(fragment);\n });\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\n const overlayHTML = this.buildValidationOverlayHTML(\n fragments,\n errorsBySource,\n errorsByFile,\n { errorCount, warningCount, totalCount, uniqueCount }\n );\n\n const overlay = document.createElement('div');\n overlay.className = 'herb-validation-overlay';\n overlay.innerHTML = overlayHTML;\n\n document.body.appendChild(overlay);\n\n this.setupValidationOverlayHandlers(overlay);\n }\n\n private buildValidationOverlayHTML(\n _fragments: Array<any>,\n errorsBySource: Map<string, any[]>,\n errorsByFile: Map<string, any[]>,\n counts: { errorCount: number; warningCount: number; totalCount: number; uniqueCount: number }\n ): string {\n let title = counts.uniqueCount === 1 ? 'Validation Issue' : `Validation Issues`;\n\n if (counts.totalCount !== counts.uniqueCount) {\n title += ` (${counts.uniqueCount} unique, ${counts.totalCount} total)`;\n } else {\n title += ` (${counts.totalCount})`;\n }\n\n const subtitle = [];\n\n if (counts.errorCount > 0) subtitle.push(`${counts.errorCount} error${counts.errorCount !== 1 ? 's' : ''}`);\n if (counts.warningCount > 0) subtitle.push(`${counts.warningCount} warning${counts.warningCount !== 1 ? 's' : ''}`);\n\n let fileTabs = '';\n\n if (errorsByFile.size > 1) {\n const totalErrors = Array.from(errorsByFile.values()).reduce((sum, errors) => sum + errors.length, 0);\n\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\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\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\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 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 </div>\n </div>\n `;\n }\n\n private getValidationOverlayStyles(): string {\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\n private setupValidationOverlayHandlers(overlay: HTMLElement) {\n const closeBtn = overlay.querySelector('.herb-close-button');\n\n if (closeBtn) {\n closeBtn.addEventListener('click', () => overlay.remove());\n }\n\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n\n const escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n overlay.remove();\n document.removeEventListener('keydown', escHandler);\n }\n };\n\n document.addEventListener('keydown', escHandler);\n\n const fileTabs = overlay.querySelectorAll('.herb-file-tab');\n\n fileTabs.forEach(tab => {\n tab.addEventListener('click', () => {\n const selectedFile = tab.getAttribute('data-file');\n\n fileTabs.forEach(t => t.classList.remove('active'));\n tab.classList.add('active');\n\n const errorContainers = overlay.querySelectorAll('[data-error-file]');\n const validatorSections = overlay.querySelectorAll('.herb-validator-section');\n\n errorContainers.forEach(container => {\n const containerFile = container.getAttribute('data-error-file');\n if (selectedFile === '*' || containerFile === selectedFile) {\n container.classList.remove('hidden');\n } else {\n container.classList.add('hidden');\n }\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\n const header = section.querySelector('h3');\n const source = section.getAttribute('data-source')?.replace('Validator', '') || 'Unknown';\n\n if (header) {\n header.textContent = `${source} Issues (${visibleErrors})`;\n }\n\n if (visibleErrors === 0) {\n section.classList.add('hidden');\n } else {\n section.classList.remove('hidden');\n }\n });\n });\n });\n }\n\n private escapeAttr(text: string): string {\n return this.escapeHtml(text).replace(/\"/g, '"');\n }\n}\n","import { ErrorOverlay } from './error-overlay';\n\nexport interface HerbDevToolsOptions {\n projectPath?: string;\n autoInit?: boolean;\n}\n\nexport class HerbOverlay {\n private showingERB = false;\n private showingERBOutlines = false;\n private showingERBHoverReveal = false;\n private showingTooltips = true;\n private showingViewOutlines = false;\n private showingPartialOutlines = false;\n private showingComponentOutlines = false;\n private menuOpen = false;\n private projectPath = '';\n private preferredEditor = 'auto';\n private defaultEditorFromServer = 'vscode';\n private currentlyHoveredERBElement: HTMLElement | null = null;\n private errorOverlay: ErrorOverlay | null = null;\n\n private static readonly SETTINGS_KEY = 'herb-dev-tools-settings';\n private static readonly 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\n constructor(private options: HerbDevToolsOptions = {}) {\n if (options.autoInit !== false) {\n this.init();\n }\n }\n\n private 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\n private loadProjectPath() {\n if (this.options.projectPath) {\n this.projectPath = this.options.projectPath;\n return;\n }\n\n const metaTag = document.querySelector('meta[name=\"herb-project-path\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n this.projectPath = metaTag.content;\n }\n }\n\n private loadDefaultEditor() {\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n const defaultEditor = metaTag.content.toLowerCase();\n const isValidEditor = HerbOverlay.EDITOR_OPTIONS.some(option => option.value === defaultEditor);\n\n if (isValidEditor) {\n this.defaultEditorFromServer = defaultEditor;\n }\n }\n }\n\n private 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 } catch (e) {\n console.warn('Failed to load Herb dev tools settings:', e);\n }\n }\n }\n\n private 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\n localStorage.setItem(HerbOverlay.SETTINGS_KEY, JSON.stringify(settings));\n this.updateMenuButtonState();\n }\n\n private 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 } else {\n menuTrigger.classList.remove('has-active-options');\n }\n }\n }\n\n private injectMenu() {\n const existingMenu = document.querySelector('.herb-floating-menu');\n\n if (existingMenu) {\n return;\n }\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\">Show 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\">Show 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\">Show 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\">Show 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 =>\n `<option value=\"${editor.value}\">${editor.label}</option>`\n ).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\n document.body.insertAdjacentHTML('beforeend', menuHTML);\n }\n\n private 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\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n\n if (menuTrigger && menuPanel && this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n }\n\n private setupMenuToggle() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n\n if (menuTrigger && menuPanel) {\n menuTrigger.addEventListener('click', () => {\n this.menuOpen = !this.menuOpen;\n\n if (this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n } else {\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n }\n\n this.saveSettings();\n });\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const floatingMenu = document.querySelector('.herb-floating-menu');\n\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\n private setupTurboListeners() {\n document.addEventListener('turbo:load', () => {\n this.reinitializeAfterNavigation();\n });\n\n document.addEventListener('turbo:render', () => {\n this.reinitializeAfterNavigation();\n });\n\n document.addEventListener('turbo:visit', () => {\n this.reinitializeAfterNavigation();\n });\n }\n\n private reinitializeAfterNavigation() {\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.applySettings();\n this.updateMenuButtonState();\n }\n\n private setupToggleSwitches() {\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines') as HTMLInputElement;\n\n if (toggleViewOutlinesSwitch) {\n toggleViewOutlinesSwitch.checked = this.showingViewOutlines;\n toggleViewOutlinesSwitch.addEventListener('change', () => {\n this.toggleViewOutlines(toggleViewOutlinesSwitch.checked);\n });\n }\n\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines') as HTMLInputElement;\n\n if (togglePartialOutlinesSwitch) {\n togglePartialOutlinesSwitch.checked = this.showingPartialOutlines;\n togglePartialOutlinesSwitch.addEventListener('change', () => {\n this.togglePartialOutlines(togglePartialOutlinesSwitch.checked);\n });\n }\n\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines') as HTMLInputElement;\n\n if (toggleComponentOutlinesSwitch) {\n toggleComponentOutlinesSwitch.checked = this.showingComponentOutlines;\n toggleComponentOutlinesSwitch.addEventListener('change', () => {\n this.toggleComponentOutlines(toggleComponentOutlinesSwitch.checked);\n });\n }\n\n const toggleERBSwitch = document.getElementById('herbToggleERB') as HTMLInputElement;\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines') as HTMLInputElement;\n\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\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\n this.toggleERBOutlines(toggleERBOutlinesSwitch.checked);\n this.updateNestedToggleVisibility();\n });\n } else {\n console.warn('ERB outlines toggle switch not found');\n }\n\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = this.showingERBHoverReveal;\n toggleERBHoverRevealSwitch.addEventListener('change', () => {\n this.toggleERBHoverReveal(toggleERBHoverRevealSwitch.checked);\n });\n }\n\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = this.showingTooltips;\n toggleTooltipsSwitch.addEventListener('change', () => {\n this.toggleTooltips(toggleTooltipsSwitch.checked);\n });\n }\n\n this.updateNestedToggleVisibility();\n\n const disableAllBtn = document.getElementById('herbDisableAll') as HTMLButtonElement;\n if (disableAllBtn) {\n disableAllBtn.addEventListener('click', () => {\n this.disableAll();\n });\n }\n }\n\n private setupEditorDropdown() {\n const editorSelect = document.getElementById('herbEditorSelect') as HTMLSelectElement;\n\n if (editorSelect) {\n const autoOption = editorSelect.querySelector('option[value=\"auto\"]') as HTMLOptionElement;\n\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\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n autoOption.textContent = `Auto (from server): ${editorLabel}`;\n } else {\n autoOption.textContent = `Auto (default): ${editorLabel}`;\n }\n }\n\n editorSelect.value = this.preferredEditor;\n\n editorSelect.addEventListener('change', () => {\n this.preferredEditor = editorSelect.value;\n this.saveSettings();\n });\n }\n }\n\n private toggleViewOutlines(show?: boolean) {\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\n viewOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'view');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private togglePartialOutlines(show?: boolean) {\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\n partialOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'partial');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private toggleComponentOutlines(show?: boolean) {\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\n componentOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'component');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private createOverlayLabel(element: HTMLElement, type: 'view' | 'partial' | 'component') {\n if (element.querySelector('.herb-overlay-label')) {\n return;\n }\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\n label.className = 'herb-overlay-label';\n label.textContent = shortName;\n label.setAttribute('data-label-setup', 'true');\n\n label.addEventListener('mouseenter', () => {\n label.textContent = relativePath;\n\n document.querySelectorAll('.herb-overlay-label').forEach(otherLabel => {\n (otherLabel as HTMLElement).style.zIndex = '1000';\n });\n\n label.style.zIndex = '1002';\n });\n\n label.addEventListener('mouseleave', () => {\n label.textContent = shortName;\n label.style.zIndex = '1000';\n });\n\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.openFileInEditor(fullPath, 1, 1);\n });\n\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n\n element.style.outline = 'none';\n element.classList.remove('show-outline');\n\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\n parent.setAttribute('data-herb-debug-attached-outline-type', type);\n\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\n parent.appendChild(label);\n return;\n }\n\n if (element.localName === 'html' || window.getComputedStyle(element).overflowY !== 'visible') {\n label.style.top = '0';\n }\n \n if (window.getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n element.appendChild(label);\n }\n\n private removeOverlayLabel(element: HTMLElement) {\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n const label = parent.querySelector('.herb-overlay-label');\n\n if (label) {\n label.remove();\n }\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 } else {\n const label = element.querySelector('.herb-overlay-label');\n\n if (label) {\n label.remove();\n }\n }\n }\n\n private resetShowingERB() {\n const elements = document.querySelectorAll('[data-herb-debug-showing-erb')\n\n elements.forEach(element => {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\")\n })\n }\n\n private toggleERBTags(show?: boolean) {\n this.showingERB = show !== undefined ? show : !this.showingERB;\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((element) => {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n\n if (this.showingERB && erbCode) {\n // this.resetShowingERB()\n\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n\n element.textContent = erbCode;\n element.setAttribute(\"data-herb-debug-showing-erb\", \"true\")\n\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n } else {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n\n if (element && element.hasAttribute(\"data-herb-debug-showing-erb\")) {\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\")\n }\n\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n\n this.saveSettings();\n }\n\n private toggleERBOutlines(show?: boolean) {\n this.showingERBOutlines = show !== undefined ? show : !this.showingERBOutlines;\n\n this.clearCurrentHoveredERB();\n\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach(element => {\n const inserted = element.hasAttribute(\"data-herb-debug-inserted\")\n const needsWrapperToggled = (inserted && !element.children[0])\n\n const realElement = (element.children[0] as HTMLElement) || element\n\n if (this.showingERBOutlines) {\n\n realElement.style.outline = '2px dotted #a78bfa';\n realElement.style.outlineOffset = '1px';\n\n if (needsWrapperToggled) {\n element.style.display = 'inline';\n }\n\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n\n if (this.showingERBHoverReveal) {\n this.addERBHoverReveal(element);\n }\n } else {\n realElement.style.outline = 'none';\n realElement.style.outlineOffset = '0';\n\n if (needsWrapperToggled) {\n element.style.display = 'contents';\n }\n\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n this.removeERBHoverReveal(element);\n }\n });\n\n this.saveSettings();\n }\n\n private updateNestedToggleVisibility() {\n const nestedToggle = document.getElementById('herbERBHoverRevealNested');\n const tooltipsNestedToggle = document.getElementById('herbTooltipsNested');\n\n if (nestedToggle) {\n nestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n\n if (tooltipsNestedToggle) {\n tooltipsNestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n }\n\n private toggleERBHoverReveal(show?: boolean) {\n this.showingERBHoverReveal = show !== undefined ? show : !this.showingERBHoverReveal;\n\n if (this.showingERBHoverReveal && this.showingTooltips) {\n this.toggleTooltips(false);\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = false;\n }\n }\n\n this.clearCurrentHoveredERB();\n\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((el) => {\n const element = el as HTMLElement;\n\n this.removeERBHoverReveal(element);\n\n if (this.showingERBHoverReveal && this.showingERBOutlines) {\n this.addERBHoverReveal(element);\n }\n });\n\n this.saveSettings();\n }\n\n private clearCurrentHoveredERB() {\n if (this.currentlyHoveredERBElement) {\n const handlers = (this.currentlyHoveredERBElement as any)._erbHoverHandlers;\n if (handlers) {\n handlers.hideERBCode();\n }\n this.currentlyHoveredERBElement = null;\n }\n }\n\n private handleRevealedERBClick = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.currentTarget as HTMLElement;\n if (!element) return;\n\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\n if (fullPath) {\n this.openFileInEditor(\n fullPath,\n line ? parseInt(line) : 1,\n column ? parseInt(column) : 1\n );\n }\n }\n\n private addERBHoverReveal(element: HTMLElement) {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (!erbCode) return;\n\n this.removeERBHoverReveal(element);\n\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n\n const showERBCode = () => {\n if (!this.showingERBHoverReveal || !this.showingERBOutlines) {\n return;\n }\n\n if (this.currentlyHoveredERBElement === element) {\n return;\n }\n\n this.clearCurrentHoveredERB();\n\n this.currentlyHoveredERBElement = element;\n\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\n element.addEventListener('click', this.handleRevealedERBClick);\n };\n\n const hideERBCode = () => {\n if (this.currentlyHoveredERBElement === element) {\n this.currentlyHoveredERBElement = null;\n }\n\n const originalContent = element.getAttribute('data-herb-debug-original');\n\n if (originalContent) {\n element.innerHTML = originalContent;\n }\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\n element.removeEventListener('click', this.handleRevealedERBClick);\n };\n\n (element as any)._erbHoverHandlers = { showERBCode, hideERBCode };\n\n element.addEventListener('mouseenter', showERBCode);\n }\n\n private removeERBHoverReveal(element: HTMLElement) {\n const handlers = (element as any)._erbHoverHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showERBCode);\n\n delete (element as any)._erbHoverHandlers;\n\n handlers.hideERBCode();\n }\n }\n\n private createHoverTooltip(element: HTMLElement, elementForPosition: HTMLElement) {\n this.removeHoverTooltip(element);\n\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\n if (!relativePath || !erb) return;\n\n const tooltip = document.createElement('div');\n tooltip.className = 'herb-tooltip';\n\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\n let hideTimeout: number | null = null;\n\n const showTooltip = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n tooltip.classList.add('visible');\n };\n\n const hideTooltip = () => {\n hideTimeout = window.setTimeout(() => {\n tooltip.classList.remove('visible');\n }, 100);\n };\n\n element.addEventListener('mouseenter', showTooltip);\n element.addEventListener('mouseleave', hideTooltip);\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n\n const locationElement = tooltip.querySelector('.herb-location');\n const openInEditor = (e: Event) => {\n if ((e.target as HTMLElement).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\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n const copyFilePath = (e: Event) => {\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\n const positionTooltip = () => {\n const elementRect = elementForPosition.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\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\n const actualTooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = actualTooltipRect.width;\n const tooltipHeight = actualTooltipRect.height;\n\n let left = elementRect.left + (elementRect.width / 2) - (tooltipWidth / 2);\n let top = elementRect.top - tooltipHeight - 8;\n\n if (left < 8) {\n left = 8;\n } else if (left + tooltipWidth > viewportWidth - 8) {\n left = viewportWidth - tooltipWidth - 8;\n }\n\n if (top < 8) {\n top = elementRect.bottom + 8;\n\n if (top + tooltipHeight > viewportHeight - 8) {\n top = Math.max(8, (viewportHeight - tooltipHeight) / 2);\n }\n }\n\n if (top + tooltipHeight > viewportHeight - 8) {\n top = viewportHeight - tooltipHeight - 8;\n }\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\n (element as any)._tooltipHandlers = { showTooltip, hideTooltip, openInEditor, copyFilePath, positionTooltip };\n (tooltip as any)._tooltipHandlers = { showTooltip, hideTooltip };\n\n element.appendChild(tooltip);\n\n setTimeout(positionTooltip, 0);\n window.addEventListener('scroll', positionTooltip, { passive: true });\n window.addEventListener('resize', positionTooltip, { passive: true });\n }\n\n private removeHoverTooltip(element: HTMLElement) {\n const tooltip = element.querySelector('.herb-tooltip');\n\n if (tooltip) {\n const handlers = (element as any)._tooltipHandlers;\n const tooltipHandlers = (tooltip as any)._tooltipHandlers;\n\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showTooltip);\n element.removeEventListener('mouseleave', handlers.hideTooltip);\n\n const locationElement = tooltip.querySelector('.herb-location');\n locationElement?.removeEventListener('click', handlers.openInEditor);\n\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n copyButton?.removeEventListener('click', handlers.copyFilePath);\n\n if (handlers.positionTooltip) {\n window.removeEventListener('scroll', handlers.positionTooltip);\n window.removeEventListener('resize', handlers.positionTooltip);\n }\n\n delete (element as any)._tooltipHandlers;\n }\n\n if (tooltipHandlers) {\n tooltip.removeEventListener('mouseenter', tooltipHandlers.showTooltip);\n tooltip.removeEventListener('mouseleave', tooltipHandlers.hideTooltip);\n delete (tooltip as any)._tooltipHandlers;\n }\n\n tooltip.remove();\n }\n }\n\n private addTooltipHoverHandler(element: HTMLElement) {\n this.removeTooltipHoverHandler(element);\n\n const lazyTooltipHandler = () => {\n if (!this.showingTooltips || !this.showingERBOutlines) {\n return;\n }\n\n if (element.querySelector('.herb-tooltip')) {\n return;\n }\n\n this.createHoverTooltip(element, element);\n };\n\n (element as any)._lazyTooltipHandler = lazyTooltipHandler;\n element.addEventListener('mouseenter', lazyTooltipHandler);\n }\n\n private removeTooltipHoverHandler(element: HTMLElement) {\n const handler = (element as any)._lazyTooltipHandler;\n if (handler) {\n element.removeEventListener('mouseenter', handler);\n delete (element as any)._lazyTooltipHandler;\n }\n }\n\n private getEditorUrl(editor: string, absolutePath: string, line: number, column: number): string {\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\n private openFileInEditor(file: string, line: number, column: number) {\n const absolutePath = file.startsWith('/') ? file : (this.projectPath ? `${this.projectPath}/${file}` : file);\n\n const editorToUse = this.preferredEditor === 'auto' ? this.defaultEditorFromServer : this.preferredEditor;\n const url = this.getEditorUrl(editorToUse, absolutePath, line, column);\n\n if (url) {\n try {\n window.open(url, '_self');\n } catch (error) {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n } else {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n\n private toggleTooltips(show?: boolean) {\n this.showingTooltips = show !== undefined ? show : !this.showingTooltips;\n\n if (this.showingTooltips && this.showingERBHoverReveal) {\n this.toggleERBHoverReveal(false);\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = false;\n }\n }\n\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((element) => {\n if (this.showingERBOutlines && this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n } else {\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n\n this.saveSettings();\n }\n\n private disableAll() {\n this.clearCurrentHoveredERB();\n\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\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines') as HTMLInputElement;\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines') as HTMLInputElement;\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines') as HTMLInputElement;\n const toggleERBSwitch = document.getElementById('herbToggleERB') as HTMLInputElement;\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines') as HTMLInputElement;\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleViewOutlinesSwitch) toggleViewOutlinesSwitch.checked = false;\n if (togglePartialOutlinesSwitch) togglePartialOutlinesSwitch.checked = false;\n if (toggleComponentOutlinesSwitch) toggleComponentOutlinesSwitch.checked = false;\n if (toggleERBSwitch) toggleERBSwitch.checked = false;\n if (toggleERBOutlinesSwitch) toggleERBOutlinesSwitch.checked = false;\n if (toggleERBHoverRevealSwitch) toggleERBHoverRevealSwitch.checked = false;\n if (toggleTooltipsSwitch) toggleTooltipsSwitch.checked = false;\n }\n\n private initializeErrorOverlay() {\n this.errorOverlay = new ErrorOverlay();\n }\n}\n","import './styles.css';\nimport { HerbOverlay, type HerbDevToolsOptions } from './herb-overlay.js';\n\nexport { HerbOverlay };\nexport type { HerbDevToolsOptions };\n\nexport function initHerbDevTools(options: HerbDevToolsOptions = {}): HerbOverlay {\n return new HerbOverlay(options);\n}\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\n if (shouldAutoInit) {\n document.addEventListener('DOMContentLoaded', () => {\n initHerbDevTools();\n });\n }\n}\n\nif (typeof window !== 'undefined') {\n (window as any).HerbDevTools = {\n init: initHerbDevTools,\n HerbOverlay\n };\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"herb-dev-tools.esm.js","sources":["../../../../node_modules/style-inject/dist/style-inject.es.js","../src/error-overlay.ts","../src/herb-overlay.ts","../src/index.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || 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\nexport default styleInject;\n","import { Diagnostic } from '@herb-tools/core';\n\nexport interface ValidationError extends Omit<Diagnostic, 'location'> {\n location?: {\n line: number;\n column: number;\n };\n suggestion?: string;\n}\n\nexport interface ValidationData {\n validationErrors: ValidationError[];\n filename: string;\n timestamp: string;\n}\n\nexport class ErrorOverlay {\n private overlay: HTMLElement | null = null;\n private allValidationData: ValidationData[] = [];\n private isVisible = false;\n\n constructor() {\n this.init();\n }\n\n private init() {\n this.detectValidationErrors();\n\n const hasParserErrors = document.querySelector('.herb-parser-error-overlay') !== null;\n\n if (this.getTotalErrorCount() > 0) {\n this.createOverlay();\n this.setupToggleHandler();\n } else if (hasParserErrors) {\n console.log('[ErrorOverlay] Parser error overlay already displayed');\n } else {\n console.log('[ErrorOverlay] No errors found, not creating overlay');\n }\n }\n\n private detectValidationErrors() {\n const templatesToRemove: HTMLTemplateElement[] = [];\n const validationTemplates = document.querySelectorAll('template[data-herb-validation-error]') as NodeListOf<HTMLTemplateElement>;\n\n if (validationTemplates.length > 0) {\n this.processValidationTemplates(validationTemplates, templatesToRemove);\n }\n\n const jsonTemplates = document.querySelectorAll('template[data-herb-validation-errors]') as NodeListOf<HTMLTemplateElement>;\n\n jsonTemplates.forEach((template, _index) => {\n try {\n let jsonData = template.textContent?.trim();\n\n if (!jsonData) {\n jsonData = template.innerHTML?.trim();\n }\n\n if (jsonData) {\n const validationData = JSON.parse(jsonData) as ValidationData;\n this.allValidationData.push(validationData);\n\n templatesToRemove.push(template);\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\n templatesToRemove.push(template);\n }\n });\n\n const htmlTemplates = document.querySelectorAll('template[data-herb-parser-error]') as NodeListOf<HTMLTemplateElement>;\n\n htmlTemplates.forEach((template, _index) => {\n try {\n const htmlContent = template.innerHTML?.trim() || template.textContent?.trim();\n\n if (htmlContent) {\n this.displayParserErrorOverlay(htmlContent);\n templatesToRemove.push(template);\n }\n } catch (error) {\n console.error('Failed to process parser error template:', error);\n templatesToRemove.push(template);\n }\n });\n\n templatesToRemove.forEach((template, _index) => template.remove());\n }\n\n private processValidationTemplates(templates: NodeListOf<HTMLTemplateElement>, templatesToRemove: HTMLTemplateElement[]) {\n const validationFragments: Array<{\n metadata: {\n severity: string;\n source: string;\n code: string;\n line: number;\n column: number;\n filename: string;\n message: string;\n suggestion?: string;\n timestamp: string;\n };\n html: string;\n count: number;\n }> = [];\n\n const errorMap = new Map<string, typeof validationFragments[0]>();\n\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\n const html = template.innerHTML?.trim() || '';\n\n if (html) {\n const errorKey = `${metadata.filename}:${metadata.line}:${metadata.column}:${metadata.code}:${metadata.message}`;\n\n if (errorMap.has(errorKey)) {\n const existing = errorMap.get(errorKey)!;\n existing.count++;\n } else {\n errorMap.set(errorKey, { metadata, html, count: 1 });\n }\n\n templatesToRemove.push(template);\n }\n } catch (error) {\n console.error('Failed to process validation template:', error);\n templatesToRemove.push(template);\n }\n });\n\n validationFragments.push(...errorMap.values());\n\n if (validationFragments.length > 0) {\n this.displayValidationOverlay(validationFragments);\n }\n }\n\n private createOverlay() {\n if (this.allValidationData.length === 0) return;\n\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\n document.body.appendChild(this.overlay);\n\n const closeBtn = this.overlay.querySelector('.herb-error-close');\n closeBtn?.addEventListener('click', () => this.hide());\n\n this.overlay.addEventListener('click', (e) => {\n if (e.target === this.overlay) {\n this.hide();\n }\n });\n\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n });\n }\n\n private 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\n if (this.hasErrorSeverity()) {\n setTimeout(() => this.show(), 100);\n }\n }\n\n private getTotalErrorCount(): number {\n return this.allValidationData.reduce((total, data) => total + data.validationErrors.length, 0);\n }\n\n private getErrorSummary(errors: ValidationError[]): string {\n if (errors.length === 1) {\n return '1 error';\n }\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 }, {} as Record<string, number>);\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\n return `${count} ${sourceLabel} error${count === 1 ? '' : 's'}`;\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\n return `${errors.length} errors (${parts.join(', ')})`;\n }\n }\n\n private getSourceLabel(source: string): string {\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\n private hasErrorSeverity(): boolean {\n return this.allValidationData.some(data =>\n data.validationErrors.some(error => error.severity === 'error')\n );\n }\n\n private escapeHtml(unsafe: string): string {\n return unsafe\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n public show() {\n if (this.overlay) {\n this.overlay.style.display = 'block';\n this.isVisible = true;\n }\n }\n\n public hide() {\n if (this.overlay) {\n this.overlay.style.display = 'none';\n this.isVisible = false;\n }\n }\n\n public toggle() {\n if (this.isVisible) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n public hasErrors(): boolean {\n return this.getTotalErrorCount() > 0;\n }\n\n public getErrorCount(): number {\n return this.getTotalErrorCount();\n }\n\n private displayParserErrorOverlay(htmlContent: string) {\n const existingOverlay = document.querySelector('.herb-parser-error-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n\n const container = document.createElement('div');\n container.innerHTML = htmlContent;\n\n const overlay = container.querySelector('.herb-parser-error-overlay') as HTMLElement;\n\n if (overlay) {\n document.body.appendChild(overlay);\n overlay.style.display = 'flex';\n } else {\n console.error('[ErrorOverlay] No parser error overlay found in HTML template');\n }\n }\n\n private displayValidationOverlay(fragments: Array<{\n metadata: {\n severity: string;\n source: string;\n code: string;\n line: number;\n column: number;\n filename: string;\n message: string;\n suggestion?: string;\n timestamp: string;\n };\n html: string;\n count: number;\n }>) {\n const existingOverlay = document.querySelector('.herb-validation-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n\n const errorsBySource = new Map<string, typeof fragments>();\n const errorsByFile = new Map<string, typeof fragments>();\n\n fragments.forEach(fragment => {\n const source = fragment.metadata.source;\n\n if (!errorsBySource.has(source)) {\n errorsBySource.set(source, []);\n }\n\n errorsBySource.get(source)!.push(fragment);\n\n const file = fragment.metadata.filename;\n\n if (!errorsByFile.has(file)) {\n errorsByFile.set(file, []);\n }\n errorsByFile.get(file)!.push(fragment);\n });\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\n const overlayHTML = this.buildValidationOverlayHTML(\n fragments,\n errorsBySource,\n errorsByFile,\n { errorCount, warningCount, totalCount, uniqueCount }\n );\n\n const overlay = document.createElement('div');\n overlay.className = 'herb-validation-overlay';\n overlay.innerHTML = overlayHTML;\n\n document.body.appendChild(overlay);\n\n this.setupValidationOverlayHandlers(overlay);\n }\n\n private buildValidationOverlayHTML(\n _fragments: Array<any>,\n errorsBySource: Map<string, any[]>,\n errorsByFile: Map<string, any[]>,\n counts: { errorCount: number; warningCount: number; totalCount: number; uniqueCount: number }\n ): string {\n let title = counts.uniqueCount === 1 ? 'Validation Issue' : `Validation Issues`;\n\n if (counts.totalCount !== counts.uniqueCount) {\n title += ` (${counts.uniqueCount} unique, ${counts.totalCount} total)`;\n } else {\n title += ` (${counts.totalCount})`;\n }\n\n const subtitle = [];\n\n if (counts.errorCount > 0) subtitle.push(`${counts.errorCount} error${counts.errorCount !== 1 ? 's' : ''}`);\n if (counts.warningCount > 0) subtitle.push(`${counts.warningCount} warning${counts.warningCount !== 1 ? 's' : ''}`);\n\n let fileTabs = '';\n\n if (errorsByFile.size > 1) {\n const totalErrors = Array.from(errorsByFile.values()).reduce((sum, errors) => sum + errors.length, 0);\n\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\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\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\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 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 </div>\n </div>\n `;\n }\n\n private getValidationOverlayStyles(): string {\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\n private setupValidationOverlayHandlers(overlay: HTMLElement) {\n const closeBtn = overlay.querySelector('.herb-close-button');\n\n if (closeBtn) {\n closeBtn.addEventListener('click', () => overlay.remove());\n }\n\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n\n const escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n overlay.remove();\n document.removeEventListener('keydown', escHandler);\n }\n };\n\n document.addEventListener('keydown', escHandler);\n\n const fileTabs = overlay.querySelectorAll('.herb-file-tab');\n\n fileTabs.forEach(tab => {\n tab.addEventListener('click', () => {\n const selectedFile = tab.getAttribute('data-file');\n\n fileTabs.forEach(t => t.classList.remove('active'));\n tab.classList.add('active');\n\n const errorContainers = overlay.querySelectorAll('[data-error-file]');\n const validatorSections = overlay.querySelectorAll('.herb-validator-section');\n\n errorContainers.forEach(container => {\n const containerFile = container.getAttribute('data-error-file');\n if (selectedFile === '*' || containerFile === selectedFile) {\n container.classList.remove('hidden');\n } else {\n container.classList.add('hidden');\n }\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\n const header = section.querySelector('h3');\n const source = section.getAttribute('data-source')?.replace('Validator', '') || 'Unknown';\n\n if (header) {\n header.textContent = `${source} Issues (${visibleErrors})`;\n }\n\n if (visibleErrors === 0) {\n section.classList.add('hidden');\n } else {\n section.classList.remove('hidden');\n }\n });\n });\n });\n }\n\n private escapeAttr(text: string): string {\n return this.escapeHtml(text).replace(/\"/g, '"');\n }\n}\n","import { ErrorOverlay } from './error-overlay';\n\nexport interface HerbDevToolsOptions {\n projectPath?: string;\n autoInit?: boolean;\n}\n\nexport class HerbOverlay {\n private showingERB = false;\n private showingERBOutlines = false;\n private showingERBHoverReveal = false;\n private showingTooltips = true;\n private showingViewOutlines = false;\n private showingPartialOutlines = false;\n private showingComponentOutlines = false;\n private menuOpen = false;\n private projectPath = '';\n private preferredEditor = 'auto';\n private defaultEditorFromServer = 'vscode';\n private currentlyHoveredERBElement: HTMLElement | null = null;\n private errorOverlay: ErrorOverlay | null = null;\n\n private static readonly SETTINGS_KEY = 'herb-dev-tools-settings';\n private static readonly 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\n constructor(private options: HerbDevToolsOptions = {}) {\n if (options.autoInit !== false) {\n this.init();\n }\n }\n\n private 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\n private loadProjectPath() {\n if (this.options.projectPath) {\n this.projectPath = this.options.projectPath;\n return;\n }\n\n const metaTag = document.querySelector('meta[name=\"herb-project-path\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n this.projectPath = metaTag.content;\n }\n }\n\n private loadDefaultEditor() {\n const metaTag = document.querySelector('meta[name=\"herb-default-editor\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n const defaultEditor = metaTag.content.toLowerCase();\n const isValidEditor = HerbOverlay.EDITOR_OPTIONS.some(option => option.value === defaultEditor);\n\n if (isValidEditor) {\n this.defaultEditorFromServer = defaultEditor;\n }\n }\n }\n\n private 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 } catch (e) {\n console.warn('Failed to load Herb dev tools settings:', e);\n }\n }\n }\n\n private 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\n localStorage.setItem(HerbOverlay.SETTINGS_KEY, JSON.stringify(settings));\n this.updateMenuButtonState();\n }\n\n private 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 } else {\n menuTrigger.classList.remove('has-active-options');\n }\n }\n }\n\n private injectMenu() {\n const existingMenu = document.querySelector('.herb-floating-menu');\n\n if (existingMenu) {\n return;\n }\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 =>\n `<option value=\"${editor.value}\">${editor.label}</option>`\n ).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\n document.body.insertAdjacentHTML('beforeend', menuHTML);\n }\n\n private 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\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n\n if (menuTrigger && menuPanel && this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n }\n\n private setupMenuToggle() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n\n if (menuTrigger && menuPanel) {\n menuTrigger.addEventListener('click', () => {\n this.menuOpen = !this.menuOpen;\n\n if (this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n } else {\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n }\n\n this.saveSettings();\n });\n\n document.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n const floatingMenu = document.querySelector('.herb-floating-menu');\n\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\n private setupTurboListeners() {\n document.addEventListener('turbo:load', () => {\n this.reinitializeAfterNavigation();\n });\n\n document.addEventListener('turbo:render', () => {\n this.reinitializeAfterNavigation();\n });\n\n document.addEventListener('turbo:visit', () => {\n this.reinitializeAfterNavigation();\n });\n }\n\n private reinitializeAfterNavigation() {\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.setupEditorDropdown();\n this.applySettings();\n this.updateMenuButtonState();\n }\n\n private setupToggleSwitches() {\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines') as HTMLInputElement;\n\n if (toggleViewOutlinesSwitch) {\n toggleViewOutlinesSwitch.checked = this.showingViewOutlines;\n toggleViewOutlinesSwitch.addEventListener('change', () => {\n this.toggleViewOutlines(toggleViewOutlinesSwitch.checked);\n });\n }\n\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines') as HTMLInputElement;\n\n if (togglePartialOutlinesSwitch) {\n togglePartialOutlinesSwitch.checked = this.showingPartialOutlines;\n togglePartialOutlinesSwitch.addEventListener('change', () => {\n this.togglePartialOutlines(togglePartialOutlinesSwitch.checked);\n });\n }\n\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines') as HTMLInputElement;\n\n if (toggleComponentOutlinesSwitch) {\n toggleComponentOutlinesSwitch.checked = this.showingComponentOutlines;\n toggleComponentOutlinesSwitch.addEventListener('change', () => {\n this.toggleComponentOutlines(toggleComponentOutlinesSwitch.checked);\n });\n }\n\n const toggleERBSwitch = document.getElementById('herbToggleERB') as HTMLInputElement;\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines') as HTMLInputElement;\n\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\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\n this.toggleERBOutlines(toggleERBOutlinesSwitch.checked);\n this.updateNestedToggleVisibility();\n });\n } else {\n console.warn('ERB outlines toggle switch not found');\n }\n\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = this.showingERBHoverReveal;\n toggleERBHoverRevealSwitch.addEventListener('change', () => {\n this.toggleERBHoverReveal(toggleERBHoverRevealSwitch.checked);\n });\n }\n\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = this.showingTooltips;\n toggleTooltipsSwitch.addEventListener('change', () => {\n this.toggleTooltips(toggleTooltipsSwitch.checked);\n });\n }\n\n this.updateNestedToggleVisibility();\n\n const disableAllBtn = document.getElementById('herbDisableAll') as HTMLButtonElement;\n if (disableAllBtn) {\n disableAllBtn.addEventListener('click', () => {\n this.disableAll();\n });\n }\n }\n\n private setupEditorDropdown() {\n const editorSelect = document.getElementById('herbEditorSelect') as HTMLSelectElement;\n\n if (editorSelect) {\n const autoOption = editorSelect.querySelector('option[value=\"auto\"]') as HTMLOptionElement;\n\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\"]') as HTMLMetaElement;\n\n if (metaTag?.content) {\n autoOption.textContent = `Auto (from server): ${editorLabel}`;\n } else {\n autoOption.textContent = `Auto (default): ${editorLabel}`;\n }\n }\n\n editorSelect.value = this.preferredEditor;\n\n editorSelect.addEventListener('change', () => {\n this.preferredEditor = editorSelect.value;\n this.saveSettings();\n });\n }\n }\n\n private toggleViewOutlines(show?: boolean) {\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\n viewOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'view');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private togglePartialOutlines(show?: boolean) {\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\n partialOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'partial');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private toggleComponentOutlines(show?: boolean) {\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\n componentOutlines.forEach((outline) => {\n const element = outline as HTMLElement;\n\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\n this.createOverlayLabel(element, 'component');\n } else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n\n this.removeOverlayLabel(element);\n }\n });\n\n this.saveSettings();\n }\n\n private createOverlayLabel(element: HTMLElement, type: 'view' | 'partial' | 'component') {\n if (element.querySelector('.herb-overlay-label')) {\n return;\n }\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\n label.className = 'herb-overlay-label';\n label.textContent = shortName;\n label.setAttribute('data-label-setup', 'true');\n\n label.addEventListener('mouseenter', () => {\n label.textContent = relativePath;\n\n document.querySelectorAll('.herb-overlay-label').forEach(otherLabel => {\n (otherLabel as HTMLElement).style.zIndex = '1000';\n });\n\n label.style.zIndex = '1002';\n });\n\n label.addEventListener('mouseleave', () => {\n label.textContent = shortName;\n label.style.zIndex = '1000';\n });\n\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.openFileInEditor(fullPath, 1, 1);\n });\n\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n\n element.style.outline = 'none';\n element.classList.remove('show-outline');\n\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\n parent.setAttribute('data-herb-debug-attached-outline-type', type);\n\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\n parent.appendChild(label);\n return;\n }\n\n if (element.localName === 'html' || window.getComputedStyle(element).overflowY !== 'visible') {\n label.style.top = '0';\n }\n\n if (window.getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n element.appendChild(label);\n }\n\n private removeOverlayLabel(element: HTMLElement) {\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n const label = parent.querySelector('.herb-overlay-label');\n\n if (label) {\n label.remove();\n }\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 } else {\n const label = element.querySelector('.herb-overlay-label');\n\n if (label) {\n label.remove();\n }\n }\n }\n\n private resetShowingERB() {\n const elements = document.querySelectorAll('[data-herb-debug-showing-erb')\n\n elements.forEach(element => {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\")\n })\n }\n\n private toggleERBTags(show?: boolean) {\n this.showingERB = show !== undefined ? show : !this.showingERB;\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((element) => {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n\n if (this.showingERB && erbCode) {\n // this.resetShowingERB()\n\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n\n element.textContent = erbCode;\n element.setAttribute(\"data-herb-debug-showing-erb\", \"true\")\n\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n } else {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n\n if (element && element.hasAttribute(\"data-herb-debug-showing-erb\")) {\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\")\n }\n\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n\n this.saveSettings();\n }\n\n private toggleERBOutlines(show?: boolean) {\n this.showingERBOutlines = show !== undefined ? show : !this.showingERBOutlines;\n\n this.clearCurrentHoveredERB();\n\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach(element => {\n const inserted = element.hasAttribute(\"data-herb-debug-inserted\")\n const needsWrapperToggled = (inserted && !element.children[0])\n\n const realElement = (element.children[0] as HTMLElement) || element\n\n if (this.showingERBOutlines) {\n\n realElement.style.outline = '2px dotted #a78bfa';\n realElement.style.outlineOffset = '1px';\n\n if (needsWrapperToggled) {\n element.style.display = 'inline';\n }\n\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n\n if (this.showingERBHoverReveal) {\n this.addERBHoverReveal(element);\n }\n } else {\n realElement.style.outline = 'none';\n realElement.style.outlineOffset = '0';\n\n if (needsWrapperToggled) {\n element.style.display = 'contents';\n }\n\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n this.removeERBHoverReveal(element);\n }\n });\n\n this.saveSettings();\n }\n\n private updateNestedToggleVisibility() {\n const nestedToggle = document.getElementById('herbERBHoverRevealNested');\n const tooltipsNestedToggle = document.getElementById('herbTooltipsNested');\n\n if (nestedToggle) {\n nestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n\n if (tooltipsNestedToggle) {\n tooltipsNestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n }\n\n private toggleERBHoverReveal(show?: boolean) {\n this.showingERBHoverReveal = show !== undefined ? show : !this.showingERBHoverReveal;\n\n if (this.showingERBHoverReveal && this.showingTooltips) {\n this.toggleTooltips(false);\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = false;\n }\n }\n\n this.clearCurrentHoveredERB();\n\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((el) => {\n const element = el as HTMLElement;\n\n this.removeERBHoverReveal(element);\n\n if (this.showingERBHoverReveal && this.showingERBOutlines) {\n this.addERBHoverReveal(element);\n }\n });\n\n this.saveSettings();\n }\n\n private clearCurrentHoveredERB() {\n if (this.currentlyHoveredERBElement) {\n const handlers = (this.currentlyHoveredERBElement as any)._erbHoverHandlers;\n if (handlers) {\n handlers.hideERBCode();\n }\n this.currentlyHoveredERBElement = null;\n }\n }\n\n private handleRevealedERBClick = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n const element = event.currentTarget as HTMLElement;\n if (!element) return;\n\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\n if (fullPath) {\n this.openFileInEditor(\n fullPath,\n line ? parseInt(line) : 1,\n column ? parseInt(column) : 1\n );\n }\n }\n\n private addERBHoverReveal(element: HTMLElement) {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (!erbCode) return;\n\n this.removeERBHoverReveal(element);\n\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n\n const showERBCode = () => {\n if (!this.showingERBHoverReveal || !this.showingERBOutlines) {\n return;\n }\n\n if (this.currentlyHoveredERBElement === element) {\n return;\n }\n\n this.clearCurrentHoveredERB();\n\n this.currentlyHoveredERBElement = element;\n\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\n element.addEventListener('click', this.handleRevealedERBClick);\n };\n\n const hideERBCode = () => {\n if (this.currentlyHoveredERBElement === element) {\n this.currentlyHoveredERBElement = null;\n }\n\n const originalContent = element.getAttribute('data-herb-debug-original');\n\n if (originalContent) {\n element.innerHTML = originalContent;\n }\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\n element.removeEventListener('click', this.handleRevealedERBClick);\n };\n\n (element as any)._erbHoverHandlers = { showERBCode, hideERBCode };\n\n element.addEventListener('mouseenter', showERBCode);\n }\n\n private removeERBHoverReveal(element: HTMLElement) {\n const handlers = (element as any)._erbHoverHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showERBCode);\n\n delete (element as any)._erbHoverHandlers;\n\n handlers.hideERBCode();\n }\n }\n\n private createHoverTooltip(element: HTMLElement, elementForPosition: HTMLElement) {\n this.removeHoverTooltip(element);\n\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\n if (!relativePath || !erb) return;\n\n const tooltip = document.createElement('div');\n tooltip.className = 'herb-tooltip';\n\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\n let hideTimeout: number | null = null;\n\n const showTooltip = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n tooltip.classList.add('visible');\n };\n\n const hideTooltip = () => {\n hideTimeout = window.setTimeout(() => {\n tooltip.classList.remove('visible');\n }, 100);\n };\n\n element.addEventListener('mouseenter', showTooltip);\n element.addEventListener('mouseleave', hideTooltip);\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n\n const locationElement = tooltip.querySelector('.herb-location');\n const openInEditor = (e: Event) => {\n if ((e.target as HTMLElement).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\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n const copyFilePath = (e: Event) => {\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\n const positionTooltip = () => {\n const elementRect = elementForPosition.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\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\n const actualTooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = actualTooltipRect.width;\n const tooltipHeight = actualTooltipRect.height;\n\n let left = elementRect.left + (elementRect.width / 2) - (tooltipWidth / 2);\n let top = elementRect.top - tooltipHeight - 8;\n\n if (left < 8) {\n left = 8;\n } else if (left + tooltipWidth > viewportWidth - 8) {\n left = viewportWidth - tooltipWidth - 8;\n }\n\n if (top < 8) {\n top = elementRect.bottom + 8;\n\n if (top + tooltipHeight > viewportHeight - 8) {\n top = Math.max(8, (viewportHeight - tooltipHeight) / 2);\n }\n }\n\n if (top + tooltipHeight > viewportHeight - 8) {\n top = viewportHeight - tooltipHeight - 8;\n }\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\n (element as any)._tooltipHandlers = { showTooltip, hideTooltip, openInEditor, copyFilePath, positionTooltip };\n (tooltip as any)._tooltipHandlers = { showTooltip, hideTooltip };\n\n element.appendChild(tooltip);\n\n setTimeout(positionTooltip, 0);\n window.addEventListener('scroll', positionTooltip, { passive: true });\n window.addEventListener('resize', positionTooltip, { passive: true });\n }\n\n private removeHoverTooltip(element: HTMLElement) {\n const tooltip = element.querySelector('.herb-tooltip');\n\n if (tooltip) {\n const handlers = (element as any)._tooltipHandlers;\n const tooltipHandlers = (tooltip as any)._tooltipHandlers;\n\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showTooltip);\n element.removeEventListener('mouseleave', handlers.hideTooltip);\n\n const locationElement = tooltip.querySelector('.herb-location');\n locationElement?.removeEventListener('click', handlers.openInEditor);\n\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n copyButton?.removeEventListener('click', handlers.copyFilePath);\n\n if (handlers.positionTooltip) {\n window.removeEventListener('scroll', handlers.positionTooltip);\n window.removeEventListener('resize', handlers.positionTooltip);\n }\n\n delete (element as any)._tooltipHandlers;\n }\n\n if (tooltipHandlers) {\n tooltip.removeEventListener('mouseenter', tooltipHandlers.showTooltip);\n tooltip.removeEventListener('mouseleave', tooltipHandlers.hideTooltip);\n delete (tooltip as any)._tooltipHandlers;\n }\n\n tooltip.remove();\n }\n }\n\n private addTooltipHoverHandler(element: HTMLElement) {\n this.removeTooltipHoverHandler(element);\n\n const lazyTooltipHandler = () => {\n if (!this.showingTooltips || !this.showingERBOutlines) {\n return;\n }\n\n if (element.querySelector('.herb-tooltip')) {\n return;\n }\n\n this.createHoverTooltip(element, element);\n };\n\n (element as any)._lazyTooltipHandler = lazyTooltipHandler;\n element.addEventListener('mouseenter', lazyTooltipHandler);\n }\n\n private removeTooltipHoverHandler(element: HTMLElement) {\n const handler = (element as any)._lazyTooltipHandler;\n if (handler) {\n element.removeEventListener('mouseenter', handler);\n delete (element as any)._lazyTooltipHandler;\n }\n }\n\n private getEditorUrl(editor: string, absolutePath: string, line: number, column: number): string {\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\n private openFileInEditor(file: string, line: number, column: number) {\n const absolutePath = file.startsWith('/') ? file : (this.projectPath ? `${this.projectPath}/${file}` : file);\n\n const editorToUse = this.preferredEditor === 'auto' ? this.defaultEditorFromServer : this.preferredEditor;\n const url = this.getEditorUrl(editorToUse, absolutePath, line, column);\n\n if (url) {\n try {\n window.open(url, '_self');\n } catch (_error) {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n } else {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n\n private toggleTooltips(show?: boolean) {\n this.showingTooltips = show !== undefined ? show : !this.showingTooltips;\n\n if (this.showingTooltips && this.showingERBHoverReveal) {\n this.toggleERBHoverReveal(false);\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = false;\n }\n }\n\n const erbOutputs = document.querySelectorAll<HTMLElement>('[data-herb-debug-outline-type*=\"erb-output\"]');\n\n erbOutputs.forEach((element) => {\n if (this.showingERBOutlines && this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n } else {\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n\n this.saveSettings();\n }\n\n private disableAll() {\n this.clearCurrentHoveredERB();\n\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\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines') as HTMLInputElement;\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines') as HTMLInputElement;\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines') as HTMLInputElement;\n const toggleERBSwitch = document.getElementById('herbToggleERB') as HTMLInputElement;\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines') as HTMLInputElement;\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal') as HTMLInputElement;\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips') as HTMLInputElement;\n\n if (toggleViewOutlinesSwitch) toggleViewOutlinesSwitch.checked = false;\n if (togglePartialOutlinesSwitch) togglePartialOutlinesSwitch.checked = false;\n if (toggleComponentOutlinesSwitch) toggleComponentOutlinesSwitch.checked = false;\n if (toggleERBSwitch) toggleERBSwitch.checked = false;\n if (toggleERBOutlinesSwitch) toggleERBOutlinesSwitch.checked = false;\n if (toggleERBHoverRevealSwitch) toggleERBHoverRevealSwitch.checked = false;\n if (toggleTooltipsSwitch) toggleTooltipsSwitch.checked = false;\n }\n\n private initializeErrorOverlay() {\n this.errorOverlay = new ErrorOverlay();\n }\n}\n","import './styles.css';\nimport { HerbOverlay, type HerbDevToolsOptions } from './herb-overlay.js';\n\nexport { HerbOverlay };\nexport type { HerbDevToolsOptions };\n\nexport function initHerbDevTools(options: HerbDevToolsOptions = {}): HerbOverlay {\n return new HerbOverlay(options);\n}\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\n if (shouldAutoInit) {\n document.addEventListener('DOMContentLoaded', () => {\n initHerbDevTools();\n });\n }\n}\n\nif (typeof window !== 'undefined') {\n (window as any).HerbDevTools = {\n init: initHerbDevTools,\n HerbOverlay\n };\n}\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|