@trustquery/browser 0.3.4 → 0.3.5

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":"trustquery.js","sources":["../src/OverlayRenderer.js","../src/CommandScanner.js","../src/BubbleManager.js","../src/dropdown-manager-helpers/EdgeDetectionHelper.js","../src/DropdownManager.js","../src/InteractionHandler.js","../src/StyleManager.js","../src/CommandHandlers.js","../src/AutoGrow.js","../src/ValidationStateManager.js","../src/MobileKeyboardHandler.js","../src/AttachmentManager.js","../src/AttachmentStyleManager.js","../src/CSVModalManager.js","../src/CSVModalStyleManager.js","../src/TrustQuery.js"],"sourcesContent":["// OverlayRenderer - Renders text with styled matches in a line-based overlay\n// Much simpler than grid approach - each line is a div, matches are spans\n\nexport default class OverlayRenderer {\n /**\n * Create a renderer\n * @param {HTMLElement} overlay - Overlay container element\n * @param {Object} options - Rendering options\n */\n constructor(overlay, options = {}) {\n this.overlay = overlay;\n this.options = {\n theme: options.theme || 'light',\n commandHandlers: options.commandHandlers || null,\n debug: options.debug || false,\n ...options\n };\n\n if (this.options.debug) {\n console.log('[OverlayRenderer] Initialized');\n }\n }\n\n /**\n * Render text with matches\n * @param {string} text - Text content\n * @param {Array} matches - Array of match objects from CommandScanner\n */\n render(text, matches = []) {\n // Split text into lines\n const lines = text.split('\\n');\n\n // Build HTML for each line\n const linesHTML = lines.map((line, lineIndex) => {\n return this.renderLine(line, lineIndex, matches);\n }).join('');\n\n // Update overlay\n this.overlay.innerHTML = linesHTML;\n\n if (this.options.debug) {\n console.log('[OverlayRenderer] Rendered', lines.length, 'lines with', matches.length, 'matches');\n }\n }\n\n /**\n * Render a single line with matches\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number (0-indexed)\n * @param {Array} matches - All matches from scanner\n * @returns {string} HTML for line\n */\n renderLine(line, lineIndex, matches) {\n // Find matches on this line\n const lineMatches = this.getMatchesForLine(line, lineIndex, matches);\n\n if (lineMatches.length === 0) {\n // No matches - render plain line\n return `<div class=\"tq-line\">${this.escapeHtml(line) || '&nbsp;'}</div>`;\n }\n\n // Sort matches by start position\n lineMatches.sort((a, b) => a.start - b.start);\n\n // Build HTML with matches as spans\n let html = '<div class=\"tq-line\">';\n let lastIndex = 0;\n\n for (const match of lineMatches) {\n // Add text before match\n if (match.start > lastIndex) {\n html += this.escapeHtml(line.substring(lastIndex, match.start));\n }\n\n // Add match as styled span\n const matchText = line.substring(match.start, match.end);\n const classes = this.getMatchClasses(match);\n const dataAttrs = this.getMatchDataAttributes(match);\n const inlineStyles = this.getMatchInlineStyles(match);\n\n html += `<span class=\"${classes}\" ${dataAttrs} style=\"${inlineStyles}\">${this.escapeHtml(matchText)}</span>`;\n\n lastIndex = match.end;\n }\n\n // Add remaining text after last match\n if (lastIndex < line.length) {\n html += this.escapeHtml(line.substring(lastIndex));\n }\n\n // Handle empty lines\n if (line.length === 0) {\n html += '&nbsp;';\n }\n\n html += '</div>';\n\n return html;\n }\n\n /**\n * Get matches that apply to a specific line\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number\n * @param {Array} matches - All matches\n * @returns {Array} Matches for this line with adjusted positions\n */\n getMatchesForLine(line, lineIndex, matches) {\n const lineMatches = [];\n\n // Calculate absolute position of this line in the full text\n // (we'll need to know line starts to filter matches)\n // For now, matches already have line info from scanner\n\n for (const match of matches) {\n if (match.line === lineIndex) {\n lineMatches.push({\n ...match,\n start: match.col, // Column position on this line\n end: match.col + match.length\n });\n }\n }\n\n return lineMatches;\n }\n\n /**\n * Get CSS classes for a match\n * @param {Object} match - Match object\n * @returns {string} Space-separated class names\n */\n getMatchClasses(match) {\n const classes = ['tq-match'];\n\n // Add command type as class\n if (match.command && match.command.type) {\n classes.push(`tq-match-${match.command.type}`);\n }\n\n // Add behavior as class (bubble, dropdown, etc.)\n if (match.command && match.command.behavior) {\n classes.push(`tq-behavior-${match.command.behavior}`);\n }\n\n return classes.join(' ');\n }\n\n /**\n * Get data attributes for a match\n * @param {Object} match - Match object\n * @returns {string} Data attributes string\n */\n getMatchDataAttributes(match) {\n const attrs = [];\n\n // Store match text\n attrs.push(`data-match-text=\"${this.escapeAttr(match.text)}\"`);\n\n // Store command info\n if (match.command) {\n attrs.push(`data-command-id=\"${this.escapeAttr(match.command.id || '')}\"`);\n attrs.push(`data-command-type=\"${this.escapeAttr(match.command.commandType || '')}\"`);\n attrs.push(`data-command-path=\"${this.escapeAttr(match.command.commandPath || '')}\"`);\n attrs.push(`data-intent-path=\"${this.escapeAttr(match.command.intentPath || '')}\"`);\n\n // Store intent info as JSON for InteractionHandler\n if (match.command.intent) {\n attrs.push(`data-intent='${this.escapeAttr(JSON.stringify(match.command.intent))}'`);\n }\n\n // Determine behavior based on handler properties\n if (match.command.intent && match.command.intent.handler) {\n const handler = match.command.intent.handler;\n if (handler.options && Array.isArray(handler.options) && handler.options.length > 0) {\n attrs.push(`data-behavior=\"dropdown\"`);\n } else if (handler.message || handler['message-content'] || match.command.intent.description) {\n attrs.push(`data-behavior=\"bubble\"`);\n }\n }\n }\n\n // Store position info\n attrs.push(`data-line=\"${match.line}\"`);\n attrs.push(`data-col=\"${match.col}\"`);\n\n return attrs.join(' ');\n }\n\n /**\n * Get inline styles for a match based on command type or message-state\n * @param {Object} match - Match object\n * @returns {string} Inline style string\n */\n getMatchInlineStyles(match) {\n if (!this.options.commandHandlers || !match.command) {\n return 'pointer-events: auto; cursor: pointer;';\n }\n\n const commandType = match.command.commandType;\n\n // Create matchData with intent info for message-state lookup\n const matchData = {\n intent: match.command.intent,\n commandType: commandType\n };\n\n const styles = this.options.commandHandlers.getStyles(commandType, matchData);\n\n // Convert style object to CSS string\n const styleStr = Object.entries(styles)\n .map(([key, value]) => {\n // Convert camelCase to kebab-case\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n return `${cssKey}: ${value}`;\n })\n .join('; ');\n\n return styleStr + '; pointer-events: auto;';\n }\n\n /**\n * Escape HTML to prevent XSS\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n /**\n * Escape attribute value\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeAttr(text) {\n return String(text)\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n }\n}\n","// CommandScanner - Scans text for word matches based on command map\n// Uses simple string matching (not regex) for simplicity and performance\n\nexport default class CommandScanner {\n constructor(options = {}) {\n this.commandMap = null;\n this.commands = [];\n this.debug = options.debug || false;\n console.log('[CommandScanner] Initialized');\n }\n\n /**\n * Set command map\n * @param {Object} commandMap - Command map object\n */\n setCommandMap(commandMap) {\n this.commandMap = commandMap;\n this.commands = this.parseCommandMap(commandMap);\n console.log('[CommandScanner] Command map set with', this.commands.length, 'commands');\n }\n\n /**\n * Parse simplified TQL triggers format\n * Format: { \"tql-triggers\": { \"error\": [...], \"warning\": [...], \"info\": [...] } }\n * @param {Object} triggerMap - Trigger map from tql-triggers.json\n * @returns {Array} Array of command objects\n */\n parseCommandMap(triggerMap) {\n const commands = [];\n\n // Extract tql-triggers\n const triggers = triggerMap['tql-triggers'] || triggerMap;\n\n if (!triggers || typeof triggers !== 'object') {\n console.warn('[CommandScanner] Invalid trigger map structure');\n return commands;\n }\n\n // Iterate through each message state (error, warning, info)\n Object.keys(triggers).forEach(messageState => {\n // Skip metadata fields\n if (messageState.startsWith('$')) {\n return;\n }\n\n const triggerList = triggers[messageState];\n\n if (!Array.isArray(triggerList)) {\n return;\n }\n\n // Process each trigger in this state\n triggerList.forEach((trigger, index) => {\n const handler = trigger.handler || {};\n const description = trigger.description || handler.message || '';\n const category = trigger.category || 'general';\n\n // Create intent object compatible with handlers\n const intent = {\n description: description,\n handler: {\n ...handler,\n 'message-state': messageState // Add message-state for styling\n },\n category: category\n };\n\n // Handle regex patterns\n if (trigger.type === 'regex' && trigger.regex) {\n trigger.regex.forEach(pattern => {\n commands.push({\n id: `${messageState}-${category}-${index}`,\n match: pattern,\n matchType: 'regex',\n messageState: messageState,\n category: category,\n intent: intent,\n handler: intent.handler,\n caseSensitive: true,\n wholeWord: false\n });\n });\n }\n\n // Handle string matches\n if (trigger.type === 'match' && trigger.match) {\n trigger.match.forEach(matchStr => {\n commands.push({\n id: `${messageState}-${category}-${index}`,\n match: matchStr,\n matchType: 'string',\n messageState: messageState,\n category: category,\n intent: intent,\n handler: intent.handler,\n caseSensitive: false, // Case insensitive for natural language\n wholeWord: true // Whole word matching\n });\n });\n }\n });\n });\n\n // Sort by length (longest first) to match longer patterns first\n commands.sort((a, b) => b.match.length - a.match.length);\n\n return commands;\n }\n\n /**\n * Scan text for all matches\n * @param {string} text - Text to scan\n * @returns {Array} Array of match objects with position info\n */\n scan(text) {\n if (!this.commands || this.commands.length === 0) {\n return [];\n }\n\n const matches = [];\n const lines = text.split('\\n');\n\n // Scan each line\n lines.forEach((line, lineIndex) => {\n const lineMatches = this.scanLine(line, lineIndex);\n matches.push(...lineMatches);\n });\n\n // Only log when matches are found\n if (matches.length > 0) {\n console.log(`[CommandScanner] Found ${matches.length} matches`);\n }\n\n return matches;\n }\n\n /**\n * Scan a single line for matches\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number (0-indexed)\n * @returns {Array} Matches on this line\n */\n scanLine(line, lineIndex) {\n const matches = [];\n const matchedRanges = []; // Track matched positions to avoid overlaps\n\n for (const command of this.commands) {\n const commandMatches = this.findMatches(line, command, lineIndex);\n\n // Filter out overlapping matches\n for (const match of commandMatches) {\n if (!this.overlapsExisting(match, matchedRanges)) {\n matches.push(match);\n matchedRanges.push({ start: match.col, end: match.col + match.length });\n }\n }\n }\n\n // Sort matches by column position\n matches.sort((a, b) => a.col - b.col);\n\n return matches;\n }\n\n /**\n * Find all matches of a command in a line\n * @param {string} line - Line text\n * @param {Object} command - Command to search for\n * @param {number} lineIndex - Line number\n * @returns {Array} Matches\n */\n findMatches(line, command, lineIndex) {\n const matches = [];\n\n // Handle regex patterns\n if (command.matchType === 'regex') {\n try {\n const regex = new RegExp(command.match, 'g');\n let match;\n\n while ((match = regex.exec(line)) !== null) {\n if (this.debug) {\n console.log('[CommandScanner] Regex match debug:', {\n pattern: command.match,\n line: line,\n 'match[0]': match[0],\n 'match[0].length': match[0].length,\n index: match.index\n });\n }\n\n matches.push({\n text: match[0],\n line: lineIndex,\n col: match.index,\n length: match[0].length,\n command: command\n });\n }\n } catch (e) {\n console.warn('[CommandScanner] Invalid regex pattern:', command.match, e);\n }\n\n return matches;\n }\n\n // Handle string patterns (original logic)\n const searchText = command.caseSensitive ? line : line.toLowerCase();\n const pattern = command.caseSensitive ? command.match : command.match.toLowerCase();\n\n let startIndex = 0;\n\n while (true) {\n const index = searchText.indexOf(pattern, startIndex);\n\n if (index === -1) {\n break; // No more matches\n }\n\n // Check if this is a whole word match (if required)\n if (command.wholeWord && !this.isWholeWordMatch(line, index, pattern.length)) {\n startIndex = index + 1;\n continue;\n }\n\n // Create match object\n matches.push({\n text: line.substring(index, index + pattern.length),\n line: lineIndex,\n col: index,\n length: pattern.length,\n command: command\n });\n\n startIndex = index + pattern.length;\n }\n\n return matches;\n }\n\n /**\n * Check if match is a whole word (not part of a larger word)\n * @param {string} text - Text to check\n * @param {number} start - Start index of match\n * @param {number} length - Length of match\n * @returns {boolean} True if whole word\n */\n isWholeWordMatch(text, start, length) {\n const end = start + length;\n\n // Check character before\n if (start > 0) {\n const before = text[start - 1];\n if (this.isWordChar(before)) {\n return false;\n }\n }\n\n // Check character after - treat \"/\" as a word boundary (resolved trigger)\n if (end < text.length) {\n const after = text[end];\n if (this.isWordChar(after) || after === '/') {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if character is a word character (alphanumeric or underscore)\n * @param {string} char - Character to check\n * @returns {boolean} True if word character\n */\n isWordChar(char) {\n return /[a-zA-Z0-9_]/.test(char);\n }\n\n /**\n * Check if a match overlaps with existing matches\n * @param {Object} match - New match to check\n * @param {Array} existingRanges - Array of {start, end} ranges\n * @returns {boolean} True if overlaps\n */\n overlapsExisting(match, existingRanges) {\n const matchStart = match.col;\n const matchEnd = match.col + match.length;\n\n for (const range of existingRanges) {\n // Check for overlap\n if (matchStart < range.end && matchEnd > range.start) {\n return true;\n }\n }\n\n return false;\n }\n}\n","// BubbleManager - Handles hover bubble tooltips for matched words\n\nexport default class BubbleManager {\n /**\n * Create bubble manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n bubbleDelay: options.bubbleDelay || 200,\n styleManager: options.styleManager || null,\n commandHandlers: options.commandHandlers || null,\n ...options\n };\n\n this.currentBubble = null;\n this.hoverTimeout = null;\n\n console.log('[BubbleManager] Initialized');\n }\n\n /**\n * Show bubble for a match element\n * @param {HTMLElement} matchEl - Match element\n * @param {Object} matchData - Match data\n */\n showBubble(matchEl, matchData) {\n // Remove any existing bubble\n this.hideBubble();\n\n // Get bubble content\n const content = this.getBubbleContent(matchData);\n\n if (!content) {\n return; // No content to show\n }\n\n // Create bubble\n const bubble = document.createElement('div');\n bubble.className = 'tq-bubble';\n\n // Add header container based on message-state\n const messageState = matchData.intent?.handler?.['message-state'] || 'info';\n this.createBubbleHeader(bubble, messageState);\n\n // Add content container\n const contentContainer = document.createElement('div');\n contentContainer.className = 'tq-bubble-content';\n contentContainer.innerHTML = content;\n bubble.appendChild(contentContainer);\n\n // Apply inline styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyBubbleStyles(bubble);\n }\n\n // Add to document\n document.body.appendChild(bubble);\n this.currentBubble = bubble;\n\n // Position bubble relative to match element\n this.positionBubble(bubble, matchEl);\n\n // Auto-hide when mouse leaves bubble\n bubble.addEventListener('mouseleave', () => {\n this.hideBubble();\n });\n\n console.log('[BubbleManager] Bubble shown for:', matchData.text);\n }\n\n /**\n * Create header container for bubble\n * @param {HTMLElement} bubble - Bubble element\n * @param {string} messageState - Message state (error, warning, info)\n */\n createBubbleHeader(bubble, messageState) {\n const headerContainer = document.createElement('div');\n headerContainer.className = 'bubble-header-container';\n headerContainer.setAttribute('data-type', messageState);\n\n // Create image\n const img = document.createElement('img');\n img.src = `./assets/trustquery-${messageState}.svg`;\n img.style.height = '24px';\n img.style.width = 'auto';\n\n // Create text span\n const span = document.createElement('span');\n const textMap = {\n 'error': 'TrustQuery Stop',\n 'warning': 'TrustQuery Clarify',\n 'info': 'TrustQuery Quick Link'\n };\n span.textContent = textMap[messageState] || 'TrustQuery';\n\n // Append to header\n headerContainer.appendChild(img);\n headerContainer.appendChild(span);\n\n // Apply styles to header via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyBubbleHeaderStyles(headerContainer, messageState);\n }\n\n bubble.appendChild(headerContainer);\n }\n\n /**\n * Hide current bubble\n */\n hideBubble() {\n if (this.currentBubble) {\n this.currentBubble.remove();\n this.currentBubble = null;\n }\n }\n\n /**\n * Get bubble content using command handler\n * @param {Object} matchData - Match data including command and intent\n * @returns {string|null} HTML content or null\n */\n getBubbleContent(matchData) {\n // Check for new simplified format first (intent.handler.message)\n if (matchData.intent && matchData.intent.handler) {\n const handler = matchData.intent.handler;\n const message = handler.message || handler['message-content'] || matchData.intent.description;\n\n if (message) {\n // Return just the message text - header is added separately\n return this.escapeHtml(message);\n }\n }\n\n // Use command handler if available (legacy support)\n if (this.options.commandHandlers && matchData.commandType) {\n const content = this.options.commandHandlers.getBubbleContent(matchData.commandType, matchData);\n if (content) {\n return content;\n }\n }\n\n // Fallback to legacy method\n const command = matchData.command || {};\n\n if (command.content) {\n return command.content;\n }\n\n if (command.bubbleContent) {\n return command.bubbleContent;\n }\n\n if (command.description) {\n return `<div class=\"tq-bubble-description\">${this.escapeHtml(command.description)}</div>`;\n }\n\n return null;\n }\n\n /**\n * Position bubble relative to match element\n * @param {HTMLElement} bubble - Bubble element\n * @param {HTMLElement} matchEl - Match element\n */\n positionBubble(bubble, matchEl) {\n const rect = matchEl.getBoundingClientRect();\n const bubbleRect = bubble.getBoundingClientRect();\n\n // Position above match by default (since input is at bottom)\n let top = rect.top + window.scrollY - bubbleRect.height - 8;\n let left = rect.left + window.scrollX;\n\n // If bubble goes off top edge, position below instead\n if (top < window.scrollY) {\n top = rect.bottom + window.scrollY + 8;\n }\n\n // Check if bubble goes off right edge\n if (left + bubbleRect.width > window.innerWidth) {\n left = window.innerWidth - bubbleRect.width - 10;\n }\n\n bubble.style.top = `${top}px`;\n bubble.style.left = `${left}px`;\n }\n\n /**\n * Escape HTML\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n /**\n * Cleanup\n */\n cleanup() {\n this.hideBubble();\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n /**\n * Destroy\n */\n destroy() {\n this.cleanup();\n console.log('[BubbleManager] Destroyed');\n }\n}\n","// EdgeDetectionHelper - Calculates dropdown positioning to prevent overflow off viewport edges\n\nexport default class EdgeDetectionHelper {\n /**\n * Calculate optimal position for dropdown to prevent viewport overflow\n * @param {Object} options - Positioning options\n * @param {DOMRect} options.matchRect - Bounding rect of the match element\n * @param {DOMRect} options.dropdownRect - Bounding rect of the dropdown\n * @param {number} options.offset - Offset from match element (default: 28)\n * @param {number} options.padding - Padding from viewport edges (default: 10)\n * @returns {Object} - { top, left } position in pixels\n */\n static calculatePosition({ matchRect, dropdownRect, offset = 28, padding = 10 }) {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n console.log('[EdgeDetectionHelper] Calculation inputs:');\n console.log(' Match rect:', { left: matchRect.left, top: matchRect.top, width: matchRect.width });\n console.log(' Dropdown rect:', { width: dropdownRect.width, height: dropdownRect.height });\n console.log(' Viewport:', { width: viewportWidth, height: viewportHeight });\n console.log(' Scroll:', { x: window.scrollX, y: window.scrollY });\n\n // Calculate initial position (above match by default, since input is at bottom)\n let top = matchRect.top + window.scrollY - dropdownRect.height - offset;\n let left = matchRect.left + window.scrollX;\n\n console.log(' Initial position:', { left, top });\n\n // Vertical positioning: Check if dropdown goes off top edge\n if (top < window.scrollY) {\n // Position below match instead\n top = matchRect.bottom + window.scrollY + offset;\n console.log(' Adjusted for top overflow, new top:', top);\n }\n\n // Horizontal positioning: Check if dropdown goes off right edge\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = viewportWidth + window.scrollX;\n\n console.log(' Right edge check:', { rightEdge, viewportRightEdge: viewportRightEdge - padding });\n\n if (rightEdge > viewportRightEdge - padding) {\n // Calculate how much we overflow past the right edge\n const overflow = rightEdge - (viewportRightEdge - padding);\n console.log(' Right overflow detected:', overflow, 'px');\n\n // Shift left by the overflow amount\n left = left - overflow;\n console.log(' Adjusted left position:', left);\n\n // Ensure we don't go off the left edge either\n const minLeft = window.scrollX + padding;\n if (left < minLeft) {\n console.log(' Hit left edge, clamping to:', minLeft);\n left = minLeft;\n }\n }\n\n // Also check left edge (in case match is near left edge)\n const minLeft = window.scrollX + padding;\n if (left < minLeft) {\n console.log(' Left edge adjustment:', minLeft);\n left = minLeft;\n }\n\n console.log('[EdgeDetectionHelper] Final position:', { left, top });\n\n return { top, left };\n }\n\n /**\n * Check if dropdown would overflow the right edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} padding - Padding from edge\n * @returns {boolean} - True if would overflow\n */\n static wouldOverflowRight(matchRect, dropdownRect, padding = 10) {\n const left = matchRect.left + window.scrollX;\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = window.innerWidth + window.scrollX;\n\n return rightEdge > viewportRightEdge - padding;\n }\n\n /**\n * Check if dropdown would overflow the top edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} offset - Offset from match\n * @returns {boolean} - True if would overflow\n */\n static wouldOverflowTop(matchRect, dropdownRect, offset = 28) {\n const top = matchRect.top + window.scrollY - dropdownRect.height - offset;\n return top < window.scrollY;\n }\n\n /**\n * Calculate overflow amount on the right edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} padding - Padding from edge\n * @returns {number} - Overflow amount in pixels (0 if no overflow)\n */\n static calculateRightOverflow(matchRect, dropdownRect, padding = 10) {\n const left = matchRect.left + window.scrollX;\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = window.innerWidth + window.scrollX;\n\n const overflow = rightEdge - (viewportRightEdge - padding);\n return Math.max(0, overflow);\n }\n}\n","// DropdownManager - Handles dropdown menus with filtering, keyboard navigation, and selection\n\nimport EdgeDetectionHelper from './dropdown-manager-helpers/EdgeDetectionHelper.js';\n\nexport default class DropdownManager {\n /**\n * Create dropdown manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n styleManager: options.styleManager || null,\n textarea: options.textarea || null,\n onWordClick: options.onWordClick || null,\n dropdownOffset: options.dropdownOffset || 10, // Configurable offset from trigger word\n ...options\n };\n\n this.activeDropdown = null;\n this.activeDropdownMatch = null;\n this.dropdownOptions = null;\n this.dropdownMatchData = null;\n this.selectedDropdownIndex = 0;\n this.keyboardHandler = null;\n\n if (this.options.debug) {\n console.log('[DropdownManager] Initialized with offset:', this.options.dropdownOffset);\n }\n }\n\n /**\n * Show dropdown for a match\n * @param {HTMLElement} matchEl - Match element\n * @param {Object} matchData - Match data\n */\n showDropdown(matchEl, matchData) {\n // Close any existing dropdown\n this.hideDropdown();\n\n const command = matchData.command;\n\n // Get dropdown options - check intent.handler.options first (new format)\n const options = matchData.intent?.handler?.options || command.options || command.dropdownOptions || [];\n\n if (options.length === 0) {\n console.warn('[DropdownManager] No dropdown options for:', matchData.text);\n return;\n }\n\n // Store reference to match element\n this.activeDropdownMatch = matchEl;\n this.selectedDropdownIndex = 0;\n\n // Create dropdown\n const dropdown = document.createElement('div');\n dropdown.className = 'tq-dropdown';\n\n // Apply inline styles via StyleManager (pass category for width adjustment)\n const category = matchData.intent?.category || '';\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownStyles(dropdown, category);\n }\n\n // Add header container based on message-state\n const messageState = matchData.intent?.handler?.['message-state'] || 'info';\n this.createHeaderContainer(dropdown, messageState);\n\n // Add description row if message exists\n const message = matchData.intent?.handler?.message;\n if (message) {\n this.createDescriptionRow(dropdown, message, messageState);\n }\n\n // Check if filter is enabled\n const hasFilter = matchData.intent?.handler?.filter === true;\n\n // Add filter input if enabled\n if (hasFilter) {\n this.createFilterInput(dropdown, matchData);\n }\n\n // Create dropdown items\n this.createDropdownItems(dropdown, options, matchData);\n\n // Prevent textarea blur when clicking dropdown (except filter input)\n dropdown.addEventListener('mousedown', (e) => {\n // Allow filter input to receive focus naturally\n if (!e.target.classList.contains('tq-dropdown-filter')) {\n e.preventDefault(); // Prevent blur on textarea for items\n }\n });\n\n // Add to document\n document.body.appendChild(dropdown);\n this.activeDropdown = dropdown;\n this.dropdownOptions = options;\n this.dropdownMatchData = matchData;\n\n // Position dropdown\n this.positionDropdown(dropdown, matchEl);\n\n // Setup keyboard navigation\n this.setupKeyboardHandlers();\n\n // Close on click outside (using mousedown to match icon behavior)\n setTimeout(() => {\n document.addEventListener('mousedown', this.closeDropdownHandler);\n document.addEventListener('click', this.closeDropdownHandler);\n }, 0);\n\n if (this.options.debug) {\n console.log('[DropdownManager] Dropdown shown with', options.length, 'options');\n }\n }\n\n /**\n * Create header container for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} messageState - Message state (error, warning, info)\n */\n createHeaderContainer(dropdown, messageState) {\n const headerContainer = document.createElement('div');\n headerContainer.className = 'bubble-header-container';\n headerContainer.setAttribute('data-type', messageState);\n\n // Create image\n const img = document.createElement('img');\n img.src = `./assets/trustquery-${messageState}.svg`;\n img.style.height = '24px';\n img.style.width = 'auto';\n\n // Create text span\n const span = document.createElement('span');\n const textMap = {\n 'error': 'TrustQuery Stop',\n 'warning': 'TrustQuery Clarify',\n 'info': 'TrustQuery Quick Link'\n };\n span.textContent = textMap[messageState] || 'TrustQuery';\n\n // Append to header\n headerContainer.appendChild(img);\n headerContainer.appendChild(span);\n\n // Apply styles to header via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownHeaderStyles(headerContainer, messageState);\n }\n\n dropdown.appendChild(headerContainer);\n }\n\n /**\n * Create description row for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} message - Description message\n * @param {string} messageState - Message state (error, warning, info)\n */\n createDescriptionRow(dropdown, message, messageState) {\n const descriptionRow = document.createElement('div');\n descriptionRow.className = 'tq-dropdown-description';\n descriptionRow.textContent = message;\n\n // Apply styles to description via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownDescriptionStyles(descriptionRow, messageState);\n }\n\n dropdown.appendChild(descriptionRow);\n }\n\n /**\n * Create filter input for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Object} matchData - Match data\n */\n createFilterInput(dropdown, matchData) {\n const filterInput = document.createElement('input');\n filterInput.type = 'text';\n filterInput.className = 'tq-dropdown-filter';\n filterInput.placeholder = 'Filter options...';\n\n // Apply inline styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownFilterStyles(filterInput);\n }\n\n // Filter click handling is managed by dropdown and closeDropdownHandler\n // No special mousedown/blur handling needed - filter focuses naturally\n\n // Filter options as user types\n filterInput.addEventListener('input', (e) => {\n const query = e.target.value.toLowerCase();\n const items = dropdown.querySelectorAll('.tq-dropdown-item');\n let firstVisibleIndex = -1;\n\n items.forEach((item, index) => {\n const text = item.textContent.toLowerCase();\n const matches = text.includes(query);\n item.style.display = matches ? 'block' : 'none';\n\n // Track first visible item for selection\n if (matches && firstVisibleIndex === -1) {\n firstVisibleIndex = index;\n }\n });\n\n // Update selected index to first visible item\n if (firstVisibleIndex !== -1) {\n this.selectedDropdownIndex = firstVisibleIndex;\n this.updateDropdownSelection();\n }\n });\n\n // Prevent dropdown keyboard navigation from affecting filter input\n filterInput.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n // Move focus to dropdown items\n filterInput.blur();\n this.options.textarea.focus();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.selectCurrentDropdownItem();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.hideDropdown();\n }\n });\n\n dropdown.appendChild(filterInput);\n\n // Don't auto-focus - keep focus on textarea for natural typing/arrow key flow\n }\n\n /**\n * Create dropdown items\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Array} options - Dropdown options\n * @param {Object} matchData - Match data\n */\n createDropdownItems(dropdown, options, matchData) {\n // Check if this is a display-menu-with-uri category\n const category = matchData.intent?.category || '';\n const hasUriSupport = category === 'display-menu-with-uri';\n\n options.forEach((option, index) => {\n // Check if this is a user-input option\n if (typeof option === 'object' && option['user-input'] === true) {\n this.createUserInputOption(dropdown, option, matchData);\n return;\n }\n\n const item = document.createElement('div');\n item.className = 'tq-dropdown-item';\n\n // Create label text\n const labelText = typeof option === 'string' ? option : option.label || option.value;\n\n // If display-menu-with-uri and option has uri, create label + link icon\n if (hasUriSupport && typeof option === 'object' && option.uri) {\n // Create label span\n const labelSpan = document.createElement('span');\n labelSpan.className = 'tq-dropdown-item-label';\n labelSpan.textContent = labelText;\n labelSpan.style.flex = '1';\n labelSpan.style.cursor = 'pointer';\n\n // Create link with truncated URI text\n const linkIcon = document.createElement('a');\n linkIcon.className = 'tq-dropdown-item-link';\n linkIcon.href = option.uri;\n linkIcon.target = '_blank';\n linkIcon.rel = 'noopener noreferrer';\n\n // Truncate URI to 20 characters\n let displayUri = option.uri;\n if (displayUri.length > 20) {\n displayUri = displayUri.substring(0, 20) + '...';\n }\n linkIcon.textContent = displayUri;\n\n linkIcon.style.marginLeft = '8px';\n linkIcon.style.fontSize = '12px';\n linkIcon.style.color = '#3b82f6';\n linkIcon.style.textDecoration = 'underline';\n linkIcon.style.opacity = '0.7';\n linkIcon.style.transition = 'opacity 0.2s';\n linkIcon.style.whiteSpace = 'nowrap';\n linkIcon.title = option.uri;\n linkIcon.setAttribute('aria-label', `Open ${labelText} documentation`);\n\n // Hover effect for link icon\n linkIcon.addEventListener('mouseenter', () => {\n linkIcon.style.opacity = '1';\n });\n linkIcon.addEventListener('mouseleave', () => {\n linkIcon.style.opacity = '0.6';\n });\n\n // Prevent link click from selecting the option\n linkIcon.addEventListener('click', (e) => {\n e.stopPropagation();\n // Link will open naturally via href\n });\n\n // Set item to flex layout\n item.style.display = 'flex';\n item.style.alignItems = 'center';\n item.style.justifyContent = 'space-between';\n\n item.appendChild(labelSpan);\n item.appendChild(linkIcon);\n\n // Only label click should select the option\n labelSpan.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\n });\n } else {\n // Regular option without URI\n item.textContent = labelText;\n\n // Click anywhere on item to select\n item.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\n });\n }\n\n // Highlight first item by default\n if (index === 0) {\n item.classList.add('tq-dropdown-item-selected');\n }\n\n // Apply inline styles to item via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownItemStyles(item);\n }\n\n dropdown.appendChild(item);\n });\n }\n\n /**\n * Create user input option\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Object} option - Option with user-input flag\n * @param {Object} matchData - Match data\n */\n createUserInputOption(dropdown, option, matchData) {\n const container = document.createElement('div');\n container.className = 'tq-dropdown-user-input-container tq-dropdown-item';\n container.setAttribute('data-user-input', 'true');\n\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'tq-dropdown-user-input';\n input.placeholder = option.placeholder || 'Enter custom value...';\n\n container.appendChild(input);\n\n // Apply styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyUserInputStyles(container, input);\n }\n\n // Click on container focuses input\n container.addEventListener('click', (e) => {\n e.stopPropagation();\n input.focus();\n });\n\n // Handle submit on Enter key\n const handleSubmit = () => {\n const value = input.value.trim();\n if (value) {\n const customOption = {\n label: value,\n 'on-select': {\n display: value\n }\n };\n this.handleDropdownSelect(customOption, matchData);\n this.hideDropdown();\n }\n };\n\n input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n handleSubmit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.hideDropdown();\n } else if (e.key === 'ArrowDown') {\n // Navigate to next item\n e.preventDefault();\n e.stopPropagation();\n this.moveDropdownSelection(1);\n this.options.textarea.focus();\n } else if (e.key === 'ArrowUp') {\n // Navigate to previous item\n e.preventDefault();\n e.stopPropagation();\n this.moveDropdownSelection(-1);\n this.options.textarea.focus();\n }\n });\n\n dropdown.appendChild(container);\n }\n\n /**\n * Hide current dropdown\n */\n hideDropdown() {\n if (this.activeDropdown) {\n this.activeDropdown.remove();\n this.activeDropdown = null;\n this.activeDropdownMatch = null;\n this.dropdownOptions = null;\n this.dropdownMatchData = null;\n this.selectedDropdownIndex = 0;\n document.removeEventListener('mousedown', this.closeDropdownHandler);\n document.removeEventListener('click', this.closeDropdownHandler);\n document.removeEventListener('keydown', this.keyboardHandler);\n }\n }\n\n /**\n * Close dropdown handler (bound to document)\n */\n closeDropdownHandler = (e) => {\n // Only close if clicking outside the dropdown AND not on the trigger element\n if (this.activeDropdown && !this.activeDropdown.contains(e.target)) {\n // Check if clicking on the trigger element itself - don't close in that case\n if (this.activeDropdownMatch && (this.activeDropdownMatch === e.target || this.activeDropdownMatch.contains(e.target))) {\n return;\n }\n this.hideDropdown();\n }\n }\n\n /**\n * Position dropdown relative to match element\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {HTMLElement} matchEl - Match element\n */\n positionDropdown(dropdown, matchEl) {\n const matchRect = matchEl.getBoundingClientRect();\n\n // Force a layout calculation by accessing offsetWidth\n // This ensures we get the correct dropdown dimensions after styles are applied\n const _ = dropdown.offsetWidth;\n\n const dropdownRect = dropdown.getBoundingClientRect();\n\n console.log('[DropdownManager] Positioning Debug:');\n console.log(' Trigger position (x, y):', matchRect.left, matchRect.top);\n console.log(' Dropdown width:', dropdownRect.width);\n console.log(' Viewport width:', window.innerWidth);\n\n // Use EdgeDetectionHelper to calculate optimal position\n // Increased padding to account for body margins/transforms and ensure visible clearance\n const position = EdgeDetectionHelper.calculatePosition({\n matchRect,\n dropdownRect,\n offset: this.options.dropdownOffset,\n padding: 35\n });\n\n console.log(' Calculated dropdown position (x, y):', position.left, position.top);\n\n dropdown.style.top = `${position.top}px`;\n dropdown.style.left = `${position.left}px`;\n\n // Verify the position was actually applied\n const computedStyle = window.getComputedStyle(dropdown);\n const actualRect = dropdown.getBoundingClientRect();\n console.log(' Verified applied styles:');\n console.log(' styleTop:', dropdown.style.top);\n console.log(' styleLeft:', dropdown.style.left);\n console.log(' computedPosition:', computedStyle.position);\n console.log(' actualBoundingRect:', JSON.stringify({\n left: actualRect.left,\n top: actualRect.top,\n right: actualRect.right,\n bottom: actualRect.bottom,\n width: actualRect.width,\n height: actualRect.height\n }));\n console.log(' Dropdown right edge:', actualRect.left + actualRect.width, 'vs viewport width:', window.innerWidth);\n }\n\n /**\n * Setup keyboard handlers for dropdown navigation\n */\n setupKeyboardHandlers() {\n // Remove old handler if exists\n if (this.keyboardHandler) {\n document.removeEventListener('keydown', this.keyboardHandler);\n }\n\n // Create new handler\n this.keyboardHandler = (e) => {\n // Only handle if dropdown is active\n if (!this.activeDropdown) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveDropdownSelection(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveDropdownSelection(-1);\n break;\n case 'Enter':\n e.preventDefault();\n this.selectCurrentDropdownItem();\n break;\n case 'Escape':\n e.preventDefault();\n this.hideDropdown();\n break;\n }\n };\n\n // Attach handler\n document.addEventListener('keydown', this.keyboardHandler);\n }\n\n /**\n * Move dropdown selection up or down\n * @param {number} direction - 1 for down, -1 for up\n */\n moveDropdownSelection(direction) {\n if (!this.activeDropdown || !this.dropdownOptions) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n const visibleItems = Array.from(items).filter(item => item.style.display !== 'none');\n\n if (visibleItems.length === 0) {\n return;\n }\n\n // Find current selected visible index\n let currentVisibleIndex = visibleItems.findIndex((item, index) => {\n return Array.from(items).indexOf(item) === this.selectedDropdownIndex;\n });\n\n // Move to next/prev visible item\n currentVisibleIndex += direction;\n\n // Wrap around visible items only\n if (currentVisibleIndex < 0) {\n currentVisibleIndex = visibleItems.length - 1;\n } else if (currentVisibleIndex >= visibleItems.length) {\n currentVisibleIndex = 0;\n }\n\n // Update selected index to the actual index\n this.selectedDropdownIndex = Array.from(items).indexOf(visibleItems[currentVisibleIndex]);\n\n // Update visual selection\n this.updateDropdownSelection();\n }\n\n /**\n * Update visual selection in dropdown\n */\n updateDropdownSelection() {\n if (!this.activeDropdown) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n items.forEach((item, index) => {\n if (index === this.selectedDropdownIndex) {\n item.classList.add('tq-dropdown-item-selected');\n // Scroll into view if needed\n item.scrollIntoView({ block: 'nearest' });\n\n // If this is a user input item, focus the input\n if (item.getAttribute('data-user-input') === 'true') {\n const input = item.querySelector('.tq-dropdown-user-input');\n if (input) {\n setTimeout(() => input.focus(), 0);\n }\n }\n } else {\n item.classList.remove('tq-dropdown-item-selected');\n\n // If this is a user input item, blur the input when navigating away\n if (item.getAttribute('data-user-input') === 'true') {\n const input = item.querySelector('.tq-dropdown-user-input');\n if (input) {\n input.blur();\n }\n }\n }\n });\n }\n\n /**\n * Select the currently highlighted dropdown item\n */\n selectCurrentDropdownItem() {\n if (!this.dropdownOptions || !this.dropdownMatchData) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n const selectedItem = items[this.selectedDropdownIndex];\n\n // Check if this is a user input item\n if (selectedItem && selectedItem.getAttribute('data-user-input') === 'true') {\n // Focus the input field instead of selecting\n const input = selectedItem.querySelector('.tq-dropdown-user-input');\n if (input) {\n input.focus();\n }\n return;\n }\n\n const selectedOption = this.dropdownOptions[this.selectedDropdownIndex];\n this.handleDropdownSelect(selectedOption, this.dropdownMatchData);\n this.hideDropdown();\n }\n\n /**\n * Handle dropdown option selection\n * @param {*} option - Selected option\n * @param {Object} matchData - Match data\n */\n handleDropdownSelect(option, matchData) {\n if (this.options.debug) {\n console.log('[DropdownManager] Dropdown option selected:', option, 'for:', matchData.text);\n }\n\n // Check if option has on-select.display\n if (option['on-select'] && option['on-select'].display && this.options.textarea) {\n const displayText = option['on-select'].display;\n const textarea = this.options.textarea;\n const text = textarea.value;\n\n // Find the trigger text position\n const lines = text.split('\\n');\n const line = lines[matchData.line];\n\n if (line) {\n // Append to trigger text with \"/\" separator\n const before = line.substring(0, matchData.col);\n const after = line.substring(matchData.col + matchData.text.length);\n const newText = matchData.text + '/' + displayText;\n lines[matchData.line] = before + newText + after;\n\n // Update textarea\n textarea.value = lines.join('\\n');\n\n // Trigger input event to re-render\n const inputEvent = new Event('input', { bubbles: true });\n textarea.dispatchEvent(inputEvent);\n\n if (this.options.debug) {\n console.log('[DropdownManager] Appended to', matchData.text, '→', newText);\n }\n }\n }\n\n // Trigger callback\n if (this.options.onWordClick) {\n this.options.onWordClick({\n ...matchData,\n selectedOption: option\n });\n }\n }\n\n /**\n * Cleanup\n */\n cleanup() {\n this.hideDropdown();\n }\n\n /**\n * Destroy\n */\n destroy() {\n this.cleanup();\n if (this.options.debug) {\n console.log('[DropdownManager] Destroyed');\n }\n }\n}\n","// InteractionHandler - Orchestrates hover bubbles and click interactions on matched words\n// Delegates to BubbleManager and DropdownManager for specific functionality\n\nimport BubbleManager from './BubbleManager.js';\nimport DropdownManager from './DropdownManager.js';\n\nexport default class InteractionHandler {\n /**\n * Create interaction handler\n * @param {HTMLElement} overlay - Overlay element containing matches\n * @param {Object} options - Configuration\n */\n constructor(overlay, options = {}) {\n this.overlay = overlay;\n this.options = {\n bubbleDelay: options.bubbleDelay || 200,\n onWordClick: options.onWordClick || null,\n onWordHover: options.onWordHover || null,\n styleManager: options.styleManager || null,\n commandHandlers: options.commandHandlers || null,\n textarea: options.textarea || null,\n ...options\n };\n\n this.hoverTimeout = null;\n\n // Create manager instances\n this.bubbleManager = new BubbleManager({\n bubbleDelay: this.options.bubbleDelay,\n styleManager: this.options.styleManager,\n commandHandlers: this.options.commandHandlers,\n debug: this.options.debug\n });\n\n this.dropdownManager = new DropdownManager({\n styleManager: this.options.styleManager,\n textarea: this.options.textarea,\n onWordClick: this.options.onWordClick,\n dropdownOffset: this.options.dropdownOffset,\n debug: this.options.debug\n });\n\n if (this.options.debug) {\n console.log('[InteractionHandler] Initialized');\n }\n }\n\n /**\n * Update handlers after overlay re-render\n * Attach event listeners to all .tq-match elements\n */\n update() {\n // Remove old handlers (if any)\n this.cleanup();\n\n // Find all match elements\n const matches = this.overlay.querySelectorAll('.tq-match');\n\n matches.forEach(matchEl => {\n const behavior = matchEl.getAttribute('data-behavior');\n\n // Hover events for bubbles\n matchEl.addEventListener('mouseenter', (e) => this.handleMouseEnter(e, matchEl));\n matchEl.addEventListener('mouseleave', (e) => this.handleMouseLeave(e, matchEl));\n\n // Click events for dropdowns/actions\n matchEl.addEventListener('click', (e) => this.handleClick(e, matchEl));\n\n // Add hover class for CSS styling\n matchEl.classList.add('tq-hoverable');\n\n // Auto-show dropdown for dropdown-behavior matches\n if (behavior === 'dropdown') {\n const matchData = this.getMatchData(matchEl);\n // Only show if this isn't the currently active dropdown match\n if (!this.dropdownManager.activeDropdownMatch ||\n this.dropdownManager.activeDropdownMatch.textContent !== matchEl.textContent) {\n this.dropdownManager.showDropdown(matchEl, matchData);\n }\n }\n });\n\n if (this.options.debug) {\n console.log('[InteractionHandler] Updated with', matches.length, 'interactive elements');\n }\n }\n\n /**\n * Handle mouse enter on a match\n * @param {Event} e - Mouse event\n * @param {HTMLElement} matchEl - Match element\n */\n handleMouseEnter(e, matchEl) {\n const behavior = matchEl.getAttribute('data-behavior');\n\n // Only show bubble if behavior is 'bubble' or 'hover'\n if (behavior === 'bubble' || behavior === 'hover') {\n // Clear any existing timeout\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n // Delay bubble appearance\n this.hoverTimeout = setTimeout(() => {\n const matchData = this.getMatchData(matchEl);\n this.bubbleManager.showBubble(matchEl, matchData);\n }, this.options.bubbleDelay);\n }\n\n // Callback\n if (this.options.onWordHover) {\n const matchData = this.getMatchData(matchEl);\n this.options.onWordHover(matchData);\n }\n }\n\n /**\n * Handle mouse leave from a match\n * @param {Event} e - Mouse event\n * @param {HTMLElement} matchEl - Match element\n */\n handleMouseLeave(e, matchEl) {\n // Clear hover timeout\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n\n // Don't immediately hide bubble - let user hover over it\n // Bubble will auto-hide when mouse leaves bubble area\n }\n\n /**\n * Handle click on a match\n * @param {Event} e - Click event\n * @param {HTMLElement} matchEl - Match element\n */\n handleClick(e, matchEl) {\n const behavior = matchEl.getAttribute('data-behavior');\n const matchData = this.getMatchData(matchEl);\n\n console.log('[InteractionHandler] ===== CLICK EVENT START =====');\n console.log('[InteractionHandler] Click details:', {\n behavior: behavior,\n matchText: matchData.text,\n eventType: e.type,\n target: e.target.tagName,\n currentTarget: e.currentTarget.tagName,\n button: e.button,\n buttons: e.buttons,\n clientX: e.clientX,\n clientY: e.clientY,\n offsetX: e.offsetX,\n offsetY: e.offsetY\n });\n console.log('[InteractionHandler] Match element:', {\n textContent: matchEl.textContent,\n offsetWidth: matchEl.offsetWidth,\n offsetHeight: matchEl.offsetHeight,\n attributes: {\n 'data-line': matchEl.getAttribute('data-line'),\n 'data-col': matchEl.getAttribute('data-col'),\n 'data-behavior': behavior\n }\n });\n console.log('[InteractionHandler] Active element before click:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n\n // For non-interactive elements (bubbles), manually pass click to textarea\n if (behavior !== 'dropdown' && behavior !== 'action') {\n console.log('[InteractionHandler] Non-interactive match - manually focusing textarea');\n e.preventDefault();\n e.stopPropagation();\n\n // Focus textarea and position cursor at click location\n if (this.options.textarea) {\n this.options.textarea.focus();\n console.log('[InteractionHandler] Textarea focused. Active element now:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n\n // Get the character offset by finding the match position\n const line = parseInt(matchEl.getAttribute('data-line'));\n const col = parseInt(matchEl.getAttribute('data-col'));\n\n // Calculate absolute position in textarea\n const lines = this.options.textarea.value.split('\\n');\n let offset = 0;\n for (let i = 0; i < line; i++) {\n offset += lines[i].length + 1; // +1 for newline\n }\n const clickOffsetInMatch = (e.offsetX / matchEl.offsetWidth * matchEl.textContent.length);\n offset += col + clickOffsetInMatch;\n\n console.log('[InteractionHandler] Cursor positioning:', {\n line: line,\n col: col,\n clickOffsetInMatch: clickOffsetInMatch,\n finalOffset: offset,\n textareaValue: this.options.textarea.value,\n textareaValueLength: this.options.textarea.value.length\n });\n\n // Set cursor position\n this.options.textarea.setSelectionRange(offset, offset);\n\n console.log('[InteractionHandler] Selection set:', {\n selectionStart: this.options.textarea.selectionStart,\n selectionEnd: this.options.textarea.selectionEnd,\n selectedText: this.options.textarea.value.substring(this.options.textarea.selectionStart, this.options.textarea.selectionEnd)\n });\n }\n\n console.log('[InteractionHandler] ===== CLICK EVENT END (non-interactive) =====');\n return; // Don't process further for bubbles\n }\n\n console.log('[InteractionHandler] Interactive match - handling dropdown/action');\n // Prevent default for interactive elements (dropdown/action)\n e.preventDefault();\n e.stopPropagation();\n\n // Handle different behaviors\n if (behavior === 'dropdown') {\n // Toggle dropdown - close if already open for this match, otherwise show\n if (this.dropdownManager.activeDropdownMatch === matchEl) {\n this.dropdownManager.hideDropdown();\n } else {\n this.dropdownManager.showDropdown(matchEl, matchData);\n }\n } else if (behavior === 'action') {\n // Custom action callback\n if (this.options.onWordClick) {\n this.options.onWordClick(matchData);\n }\n }\n\n // Always trigger callback (unless it's a dropdown toggle to close)\n if (this.options.onWordClick && !(behavior === 'dropdown' && this.dropdownManager.activeDropdownMatch === matchEl)) {\n this.options.onWordClick(matchData);\n }\n\n console.log('[InteractionHandler] ===== CLICK EVENT END (interactive) =====');\n }\n\n /**\n * Hide dropdown (exposed for external use, e.g., when textarea loses focus)\n */\n hideDropdown() {\n this.dropdownManager.hideDropdown();\n }\n\n /**\n * Extract match data from element\n * @param {HTMLElement} matchEl - Match element\n * @returns {Object} Match data\n */\n getMatchData(matchEl) {\n // Parse intent JSON if available\n let intent = null;\n const intentStr = matchEl.getAttribute('data-intent');\n if (intentStr) {\n try {\n intent = JSON.parse(intentStr);\n } catch (e) {\n console.warn('[InteractionHandler] Failed to parse intent JSON:', e);\n }\n }\n\n return {\n text: matchEl.getAttribute('data-match-text'),\n line: parseInt(matchEl.getAttribute('data-line')),\n col: parseInt(matchEl.getAttribute('data-col')),\n commandType: matchEl.getAttribute('data-command-type'),\n commandPath: matchEl.getAttribute('data-command-path'),\n intentPath: matchEl.getAttribute('data-intent-path'),\n intent: intent,\n command: {\n id: matchEl.getAttribute('data-command-id'),\n type: matchEl.getAttribute('data-command-type'),\n behavior: matchEl.getAttribute('data-behavior')\n },\n element: matchEl\n };\n }\n\n /**\n * Cleanup event listeners\n */\n cleanup() {\n this.bubbleManager.cleanup();\n this.dropdownManager.cleanup();\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n /**\n * Destroy handler\n */\n destroy() {\n this.cleanup();\n this.bubbleManager.destroy();\n this.dropdownManager.destroy();\n console.log('[InteractionHandler] Destroyed');\n }\n}\n","// StyleManager - Handles all inline styling for textarea, wrapper, and overlay\n// Makes TrustQuery completely self-contained without requiring external CSS\n\nexport default class StyleManager {\n /**\n * Create style manager\n * @param {Object} options - Theme and style options\n */\n constructor(options = {}) {\n this.options = {\n // Theme colors\n backgroundColor: options.backgroundColor || '#fff',\n textColor: options.textColor || '#333',\n caretColor: options.caretColor || '#000',\n borderColor: options.borderColor || '#ddd',\n borderColorFocus: options.borderColorFocus || '#4a90e2',\n\n // Match colors (can be overridden)\n matchBackgroundColor: options.matchBackgroundColor || 'rgba(74, 144, 226, 0.15)',\n matchTextColor: options.matchTextColor || '#2b6cb0',\n matchHoverBackgroundColor: options.matchHoverBackgroundColor || 'rgba(74, 144, 226, 0.25)',\n\n // Font settings (optional, will use textarea's if not specified)\n fontFamily: options.fontFamily || null,\n fontSize: options.fontSize || null,\n lineHeight: options.lineHeight || null,\n\n ...options\n };\n\n console.log('[StyleManager] Initialized with theme:', this.options);\n }\n\n /**\n * Apply all styles to wrapper, textarea, and overlay\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {HTMLElement} textarea - Textarea element\n * @param {HTMLElement} overlay - Overlay element\n */\n applyAllStyles(wrapper, textarea, overlay) {\n // Get computed styles from original textarea\n const computedStyle = window.getComputedStyle(textarea);\n\n // Apply styles to each element\n this.applyWrapperStyles(wrapper, computedStyle);\n this.applyTextareaStyles(textarea, computedStyle);\n this.applyOverlayStyles(overlay, computedStyle);\n\n // Apply focus handlers\n this.setupFocusStyles(wrapper, textarea);\n\n console.log('[StyleManager] All styles applied');\n }\n\n /**\n * Apply wrapper styles (container for both textarea and overlay)\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {CSSStyleDeclaration} computedStyle - Computed styles from textarea\n */\n applyWrapperStyles(wrapper, computedStyle) {\n Object.assign(wrapper.style, {\n position: 'relative',\n display: 'block',\n width: '100%',\n background: this.options.backgroundColor,\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '4px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease'\n });\n }\n\n /**\n * Apply textarea styles (transparent text, visible caret)\n * @param {HTMLElement} textarea - Textarea element\n * @param {CSSStyleDeclaration} computedStyle - Original computed styles\n */\n applyTextareaStyles(textarea, computedStyle) {\n // Use provided font settings or fall back to computed/defaults\n const fontFamily = this.options.fontFamily || computedStyle.fontFamily || \"'Courier New', monospace\";\n const fontSize = this.options.fontSize || computedStyle.fontSize || '14px';\n const lineHeight = this.options.lineHeight || computedStyle.lineHeight || '1.5';\n const padding = computedStyle.padding || '12px';\n\n // Store existing transition if any (for FOUC prevention)\n const existingTransition = textarea.style.transition;\n\n Object.assign(textarea.style, {\n fontFamily,\n fontSize,\n lineHeight,\n padding,\n border: 'none',\n borderRadius: '0',\n background: 'transparent',\n color: this.options.textColor, // Set color for caret visibility\n WebkitTextFillColor: 'transparent', // Make text transparent but keep caret\n caretColor: this.options.caretColor,\n resize: 'none',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative',\n zIndex: '0', // Below overlay so hover events reach overlay matches\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n outline: 'none',\n margin: '0',\n transition: existingTransition // Preserve opacity transition from HTML\n });\n\n // Add CSS to make placeholder visible (not affected by -webkit-text-fill-color)\n this.ensurePlaceholderStyles();\n\n // Store computed values for overlay to use\n this._textareaStyles = {\n fontFamily,\n fontSize,\n lineHeight,\n padding\n };\n }\n\n /**\n * Apply overlay styles (must match textarea exactly for alignment)\n * @param {HTMLElement} overlay - Overlay element\n * @param {CSSStyleDeclaration} computedStyle - Computed styles from textarea\n */\n applyOverlayStyles(overlay, computedStyle) {\n // Use the stored textarea styles to ensure perfect alignment\n const { fontFamily, fontSize, lineHeight, padding } = this._textareaStyles;\n\n Object.assign(overlay.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n fontFamily,\n fontSize,\n lineHeight,\n padding,\n color: this.options.textColor,\n pointerEvents: 'none', // Let clicks pass through to textarea (except on match spans with pointer-events: auto)\n overflow: 'hidden',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n zIndex: '1', // Above textarea so match spans can receive hover/click events\n boxSizing: 'border-box',\n margin: '0'\n });\n }\n\n /**\n * Setup focus styles (apply on focus, remove on blur)\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {HTMLElement} textarea - Textarea element\n */\n setupFocusStyles(wrapper, textarea) {\n textarea.addEventListener('focus', () => {\n wrapper.style.borderColor = this.options.borderColorFocus;\n wrapper.style.boxShadow = `0 0 0 3px ${this.options.borderColorFocus}1a`; // 1a = 10% opacity\n });\n\n textarea.addEventListener('blur', () => {\n wrapper.style.borderColor = this.options.borderColor;\n wrapper.style.boxShadow = 'none';\n });\n }\n\n /**\n * Apply match (highlighted word) styles\n * @param {HTMLElement} matchElement - Span element for matched word\n * @param {string} matchType - Type of match (keyword, mention, command, etc.)\n */\n applyMatchStyles(matchElement, matchType = 'default') {\n // Base match styles\n Object.assign(matchElement.style, {\n pointerEvents: 'auto', // Enable interactions\n cursor: 'pointer',\n padding: '2px 4px',\n margin: '-2px -4px',\n borderRadius: '3px',\n transition: 'background-color 0.15s ease',\n backgroundColor: this.options.matchBackgroundColor,\n color: this.options.matchTextColor\n });\n\n // Hover styles (on mouseover)\n matchElement.addEventListener('mouseenter', () => {\n matchElement.style.backgroundColor = this.options.matchHoverBackgroundColor;\n });\n\n matchElement.addEventListener('mouseleave', () => {\n matchElement.style.backgroundColor = this.options.matchBackgroundColor;\n });\n }\n\n /**\n * Apply bubble (tooltip) styles\n * @param {HTMLElement} bubble - Bubble element\n */\n applyBubbleStyles(bubble) {\n Object.assign(bubble.style, {\n position: 'absolute',\n background: '#ffffff',\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '6px',\n padding: '0',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: '10000',\n maxWidth: '300px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: '13px',\n lineHeight: '1.4',\n color: this.options.textColor,\n pointerEvents: 'auto',\n opacity: '1',\n overflow: 'hidden',\n animation: 'tq-bubble-appear 0.15s ease-out'\n });\n\n // Add animation keyframes if not already added\n this.ensureAnimationStyles();\n\n // Style the content container\n const contentContainer = bubble.querySelector('.tq-bubble-content');\n if (contentContainer) {\n Object.assign(contentContainer.style, {\n padding: '8px 12px',\n fontSize: '12px',\n lineHeight: '1.4'\n });\n }\n }\n\n /**\n * Apply bubble header styles\n * @param {HTMLElement} header - Header container element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyBubbleHeaderStyles(header, messageState) {\n const colorMap = {\n 'error': '#991b1b',\n 'warning': '#92400e',\n 'info': '#065f46'\n };\n\n const bgColorMap = {\n 'error': '#fee2e2',\n 'warning': '#fef3c7',\n 'info': '#d1fae5'\n };\n\n const color = colorMap[messageState] || '#2b6cb0';\n const bgColor = bgColorMap[messageState] || '#e0f2fe';\n\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: bgColor,\n color: color,\n fontWeight: '600',\n fontSize: '11px',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown (menu) styles\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} category - Optional category to adjust styles\n */\n applyDropdownStyles(dropdown, category = '') {\n // Use wider maxWidth for display-menu-with-uri to accommodate links\n const maxWidth = category === 'display-menu-with-uri' ? '450px' : '300px';\n\n Object.assign(dropdown.style, {\n position: 'absolute',\n background: '#ffffff',\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: '10000',\n minWidth: '150px',\n maxWidth: maxWidth,\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: '14px',\n opacity: '1',\n animation: 'tq-dropdown-appear 0.15s ease-out'\n });\n\n this.ensureAnimationStyles();\n }\n\n /**\n * Apply dropdown header styles\n * @param {HTMLElement} header - Header container element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyDropdownHeaderStyles(header, messageState) {\n const colorMap = {\n 'error': '#991b1b',\n 'warning': '#92400e',\n 'info': '#065f46'\n };\n\n const bgColorMap = {\n 'error': '#fee2e2',\n 'warning': '#fef3c7',\n 'info': '#d1fae5'\n };\n\n const color = colorMap[messageState] || '#2b6cb0';\n const bgColor = bgColorMap[messageState] || '#e0f2fe';\n\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: bgColor,\n color: color,\n fontWeight: '600',\n fontSize: '11px',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown description styles\n * @param {HTMLElement} description - Description element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyDropdownDescriptionStyles(description, messageState) {\n Object.assign(description.style, {\n padding: '8px 12px',\n fontSize: '12px',\n lineHeight: '1.5',\n color: '#4a5568',\n backgroundColor: '#f7fafc',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown item styles\n * @param {HTMLElement} item - Dropdown item element\n */\n applyDropdownItemStyles(item) {\n Object.assign(item.style, {\n padding: '8px 12px',\n cursor: 'pointer',\n color: this.options.textColor,\n transition: 'background-color 0.1s ease'\n });\n\n item.addEventListener('mouseenter', () => {\n item.style.backgroundColor = '#f0f4f8';\n });\n\n item.addEventListener('mouseleave', () => {\n item.style.backgroundColor = 'transparent';\n });\n\n item.addEventListener('mousedown', () => {\n item.style.backgroundColor = '#e2e8f0';\n });\n }\n\n /**\n * Apply user input styles\n * @param {HTMLElement} container - User input container\n * @param {HTMLElement} input - Input element\n */\n applyUserInputStyles(container, input) {\n // Container is now a tq-dropdown-item, so don't add padding here\n // Just set the border and background\n Object.assign(container.style, {\n backgroundColor: 'transparent',\n borderTop: `1px solid ${this.options.borderColor}`,\n // Override cursor from dropdown-item styles\n cursor: 'text'\n });\n\n Object.assign(input.style, {\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n borderBottom: '1px solid #ccc',\n borderRadius: '0',\n fontSize: '14px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n color: this.options.textColor,\n backgroundColor: 'transparent',\n boxSizing: 'border-box',\n outline: 'none'\n });\n\n input.addEventListener('focus', () => {\n input.style.borderBottom = '1px solid #ccc';\n });\n\n input.addEventListener('blur', () => {\n input.style.borderBottom = '1px solid #ccc';\n });\n }\n\n /**\n * Apply dropdown filter input styles\n * @param {HTMLElement} filterInput - Filter input element\n */\n applyDropdownFilterStyles(filterInput) {\n Object.assign(filterInput.style, {\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n borderBottom: `1px solid ${this.options.borderColor}`,\n outline: 'none',\n fontSize: '14px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n color: this.options.textColor,\n backgroundColor: '#f7fafc',\n boxSizing: 'border-box'\n });\n\n // Focus styles\n filterInput.addEventListener('focus', () => {\n filterInput.style.backgroundColor = '#fff';\n filterInput.style.borderBottomColor = this.options.borderColorFocus;\n });\n\n filterInput.addEventListener('blur', () => {\n filterInput.style.backgroundColor = '#f7fafc';\n filterInput.style.borderBottomColor = this.options.borderColor;\n });\n }\n\n /**\n * Ensure animation keyframes are added to document (only once)\n */\n ensureAnimationStyles() {\n if (document.getElementById('tq-animations')) {\n return; // Already added\n }\n\n const style = document.createElement('style');\n style.id = 'tq-animations';\n style.textContent = `\n @keyframes tq-bubble-appear {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes tq-dropdown-appear {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n .tq-dropdown-item-selected {\n background-color: #e2e8f0 !important;\n }\n `;\n document.head.appendChild(style);\n }\n\n /**\n * Ensure placeholder styles are added to document (only once)\n */\n ensurePlaceholderStyles() {\n if (document.getElementById('tq-placeholder-styles')) {\n return; // Already added\n }\n\n const style = document.createElement('style');\n style.id = 'tq-placeholder-styles';\n style.textContent = `\n .tq-textarea::placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n -webkit-text-fill-color: #a0aec0 !important;\n }\n\n .tq-textarea::-webkit-input-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n -webkit-text-fill-color: #a0aec0 !important;\n }\n\n .tq-textarea::-moz-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n }\n\n .tq-textarea:-ms-input-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n }\n `;\n document.head.appendChild(style);\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n console.log('[StyleManager] Theme updated:', this.options);\n }\n}\n","// CommandHandlers - Handler registry for different command types\n// Each command type has specific styling and behavior\n\nexport class CommandHandlerRegistry {\n constructor() {\n this.handlers = new Map();\n this.registerDefaultHandlers();\n }\n\n /**\n * Register default handlers\n */\n registerDefaultHandlers() {\n this.register('not-allowed', new NotAllowedHandler());\n this.register('show-warning', new ShowWarningHandler());\n this.register('user-select-oneOf-and-warn', new UserSelectWithWarningHandler());\n this.register('user-select-oneOf', new UserSelectHandler());\n this.register('api-json-table', new ApiJsonTableHandler());\n this.register('api-md-table', new ApiMdTableHandler());\n this.register('display-menu', new DisplayMenuHandler());\n this.register('display-menu-with-uri', new DisplayMenuWithUriHandler());\n }\n\n /**\n * Register a handler\n * @param {string} commandType - Command type (e.g., 'not-allowed', 'show-warning')\n * @param {CommandHandler} handler - Handler instance\n */\n register(commandType, handler) {\n this.handlers.set(commandType, handler);\n console.log(`[CommandHandlerRegistry] Registered handler: ${commandType}`);\n }\n\n /**\n * Get handler for a command type\n * @param {string} commandType - Command type\n * @returns {CommandHandler|null} Handler or null\n */\n getHandler(commandType) {\n return this.handlers.get(commandType) || null;\n }\n\n /**\n * Get styles for a command type (or based on message-state)\n * @param {string} commandType - Command type\n * @param {Object} matchData - Match data including intent/handler\n * @returns {Object} Style configuration\n */\n getStyles(commandType, matchData = null) {\n // If matchData is provided, check message-state first\n if (matchData && matchData.intent && matchData.intent.handler) {\n const messageState = matchData.intent.handler['message-state'];\n if (messageState) {\n return this.getStylesForMessageState(messageState);\n }\n }\n\n // Fall back to command type handler\n const handler = this.getHandler(commandType);\n return handler ? handler.getStyles() : this.getDefaultStyles();\n }\n\n /**\n * Get styles based on message-state\n * @param {string} messageState - Message state (error, warning, info)\n * @returns {Object} Style configuration\n */\n getStylesForMessageState(messageState) {\n const stateStyles = {\n 'error': {\n backgroundColor: 'rgba(220, 38, 38, 0.15)', // Red\n color: '#991b1b',\n textDecoration: 'none',\n borderBottom: '2px solid #dc2626',\n borderRadius: '0',\n cursor: 'not-allowed'\n },\n 'warning': {\n backgroundColor: 'rgba(245, 158, 11, 0.15)', // Orange\n color: '#92400e',\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b',\n borderRadius: '0',\n cursor: 'help'\n },\n 'info': {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green\n color: '#065f46',\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n borderRadius: '0',\n cursor: 'pointer'\n }\n };\n\n return stateStyles[messageState] || this.getDefaultStyles();\n }\n\n /**\n * Get bubble content for a match\n * @param {string} commandType - Command type\n * @param {Object} matchData - Match data including intent info\n * @returns {string} HTML content for bubble\n */\n getBubbleContent(commandType, matchData) {\n const handler = this.getHandler(commandType);\n return handler ? handler.getBubbleContent(matchData) : null;\n }\n\n /**\n * Get default styles (fallback)\n */\n getDefaultStyles() {\n return {\n backgroundColor: 'rgba(74, 144, 226, 0.15)',\n color: '#2b6cb0',\n textDecoration: 'none',\n borderBottom: 'none'\n };\n }\n}\n\n/**\n * Base handler class\n */\nclass CommandHandler {\n getStyles() {\n return {};\n }\n\n getBubbleContent(matchData) {\n return null;\n }\n\n shouldBlockSubmit(matchData) {\n return false;\n }\n}\n\n/**\n * Handler for not-allowed commands (errors/forbidden)\n * Red background, red underline\n */\nclass NotAllowedHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(220, 38, 38, 0.15)', // Red background\n color: '#991b1b', // Dark red text\n textDecoration: 'none',\n borderBottom: '2px solid #dc2626', // Red underline\n borderRadius: '0', // No radius to avoid curved bottom border\n cursor: 'not-allowed'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const handler = intent.handler || {};\n\n const description = intent.description || 'Not allowed';\n const message = handler['message-content'] || description;\n\n return `\n <div style=\"color: #991b1b;\">\n <div style=\"font-weight: 600; margin-bottom: 4px; display: flex; align-items: center;\">\n <span style=\"margin-right: 6px;\">⛔</span>\n Not Allowed\n </div>\n <div style=\"font-size: 12px; line-height: 1.4;\">\n ${this.escapeHtml(message)}\n </div>\n </div>\n `;\n }\n\n shouldBlockSubmit(matchData) {\n const handler = matchData.intent?.handler || {};\n return handler['block-submit'] === true;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for show-warning commands\n * Yellow/orange background, orange underline\n */\nclass ShowWarningHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(245, 158, 11, 0.15)', // Amber/orange background\n color: '#92400e', // Dark amber text\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b', // Orange underline\n borderRadius: '0', // No radius to avoid curved bottom border\n cursor: 'help'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const handler = intent.handler || {};\n\n const description = intent.description || 'Warning';\n const message = handler['message-content'] || description;\n\n return `\n <div style=\"color: #92400e;\">\n <div style=\"font-weight: 600; margin-bottom: 4px; display: flex; align-items: center;\">\n <span style=\"margin-right: 6px;\">⚠️</span>\n Warning\n </div>\n <div style=\"font-size: 12px; line-height: 1.4;\">\n ${this.escapeHtml(message)}\n </div>\n </div>\n `;\n }\n\n shouldBlockSubmit(matchData) {\n const handler = matchData.intent?.handler || {};\n return handler['block-submit'] === true;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for user-select-oneOf-and-warn commands\n * Shows warning + dropdown\n */\nclass UserSelectWithWarningHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(245, 158, 11, 0.15)',\n color: '#92400e',\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Will show dropdown on click instead of bubble\n return null;\n }\n}\n\n/**\n * Handler for user-select-oneOf commands\n * Shows dropdown without warning\n */\nclass UserSelectHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(59, 130, 246, 0.15)', // Blue background\n color: '#1e40af', // Dark blue text\n textDecoration: 'none',\n borderBottom: '2px solid #3b82f6', // Blue underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Will show dropdown on click instead of bubble\n return null;\n }\n}\n\n/**\n * Handler for api-json-table commands\n */\nclass ApiJsonTableHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const description = intent.description || 'Click to view data';\n\n return `\n <div style=\"color: #065f46;\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">\n 📊 Data Table\n </div>\n <div style=\"font-size: 12px;\">\n ${this.escapeHtml(description)}\n </div>\n </div>\n `;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for api-md-table commands\n */\nclass ApiMdTableHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)',\n color: '#065f46',\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const description = intent.description || 'Click to view data';\n\n return `\n <div style=\"color: #065f46;\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">\n 📊 Data Table\n </div>\n <div style=\"font-size: 12px;\">\n ${this.escapeHtml(description)}\n </div>\n </div>\n `;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for display-menu category\n * Shows dropdown menu with selectable options\n */\nclass DisplayMenuHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981', // Green underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Display menu shows dropdown, not bubble\n return null;\n }\n}\n\n/**\n * Handler for display-menu-with-uri category\n * Shows dropdown menu with selectable options and clickable URI links\n */\nclass DisplayMenuWithUriHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981', // Green underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Display menu with URI shows dropdown, not bubble\n return null;\n }\n}\n\nexport default CommandHandlerRegistry;\n","// AutoGrow - Automatically grows textarea height based on content\n\nexport default class AutoGrow {\n /**\n * Create auto-grow feature\n * @param {HTMLElement} textarea - Textarea element\n * @param {Object} options - Configuration\n */\n constructor(textarea, options = {}) {\n this.textarea = textarea;\n this.options = {\n maxHeight: options.maxHeight || 300,\n minHeight: options.minHeight || 44,\n ...options\n };\n\n this.initialize();\n console.log('[AutoGrow] Initialized with max height:', this.options.maxHeight);\n }\n\n /**\n * Initialize auto-grow functionality\n */\n initialize() {\n // Set initial min-height\n this.textarea.style.minHeight = `${this.options.minHeight}px`;\n\n // Listen for input changes\n this.textarea.addEventListener('input', () => this.adjust());\n\n // Listen for keyboard events (for line breaks)\n this.textarea.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n setTimeout(() => this.adjust(), 0);\n }\n });\n\n // Initial adjustment\n this.adjust();\n }\n\n /**\n * Adjust textarea height based on content\n */\n adjust() {\n // Reset height to calculate new height\n this.textarea.style.height = 'auto';\n\n // Calculate new height (respecting max height)\n const newHeight = Math.min(\n Math.max(this.textarea.scrollHeight, this.options.minHeight),\n this.options.maxHeight\n );\n\n this.textarea.style.height = newHeight + 'px';\n }\n\n /**\n * Destroy auto-grow (remove listeners and reset styles)\n */\n destroy() {\n this.textarea.style.height = '';\n this.textarea.style.minHeight = '';\n console.log('[AutoGrow] Destroyed');\n }\n}\n","// ValidationStateManager - Tracks validation state and triggers callbacks\n\nexport default class ValidationStateManager {\n /**\n * Create validation state manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n onValidationChange: options.onValidationChange || null,\n ...options\n };\n\n this.state = {\n hasBlockingError: false,\n errors: [], // matches with message-state: 'error'\n warnings: [], // matches with message-state: 'warning'\n info: [] // matches with message-state: 'info'\n };\n\n console.log('[ValidationStateManager] Initialized');\n }\n\n /**\n * Update validation state based on current matches\n * @param {Array} matches - Current matches from scanner\n */\n update(matches) {\n if (this.options.debug) {\n console.log('[ValidationStateManager] update() called with matches:', matches.length);\n console.log('[ValidationStateManager] Match details:', JSON.stringify(matches, null, 2));\n }\n\n // Reset state\n const newState = {\n hasBlockingError: false,\n errors: [],\n warnings: [],\n info: []\n };\n\n // Categorize current matches\n matches.forEach(match => {\n const messageState = match.command?.messageState;\n const blockSubmit = match.command?.handler?.['block-submit'] === true;\n\n if (this.options.debug) {\n console.log('[ValidationStateManager] Processing match:', {\n text: match.text,\n messageState,\n blockSubmit,\n hasCommand: !!match.command\n });\n }\n\n if (blockSubmit) {\n newState.hasBlockingError = true;\n }\n\n switch (messageState) {\n case 'error':\n newState.errors.push(match);\n break;\n case 'warning':\n newState.warnings.push(match);\n break;\n case 'info':\n newState.info.push(match);\n break;\n }\n });\n\n if (this.options.debug) {\n console.log('[ValidationStateManager] After categorization:', {\n errors: newState.errors.length,\n warnings: newState.warnings.length,\n info: newState.info.length,\n hasBlockingError: newState.hasBlockingError\n });\n }\n\n // Check if state changed\n const stateChanged =\n this.state.hasBlockingError !== newState.hasBlockingError ||\n this.state.errors.length !== newState.errors.length ||\n this.state.warnings.length !== newState.warnings.length ||\n this.state.info.length !== newState.info.length;\n\n if (stateChanged) {\n this.state = newState;\n\n // Trigger callback\n if (this.options.onValidationChange) {\n this.options.onValidationChange(this.state);\n }\n\n console.log('[ValidationStateManager] State changed:', {\n hasBlockingError: newState.hasBlockingError,\n errors: newState.errors.length,\n warnings: newState.warnings.length,\n info: newState.info.length\n });\n }\n }\n\n /**\n * Get current validation state\n * @returns {Object} Current validation state\n */\n getState() {\n return { ...this.state };\n }\n\n /**\n * Reset validation state to empty\n */\n reset() {\n this.update([]);\n }\n\n /**\n * Check if there are blocking errors\n * @returns {boolean} True if there are blocking errors\n */\n hasBlockingErrors() {\n return this.state.hasBlockingError;\n }\n}\n","// MobileKeyboardHandler - Handles mobile virtual keyboard behavior\n// Detects keyboard appearance and adjusts layout to keep textarea visible\n\nexport default class MobileKeyboardHandler {\n /**\n * Create mobile keyboard handler\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n textarea: options.textarea || null,\n wrapper: options.wrapper || null,\n debug: options.debug || false,\n ...options\n };\n\n this.isKeyboardVisible = false;\n this.lastViewportHeight = window.innerHeight;\n this.visualViewport = window.visualViewport;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Initialized');\n }\n }\n\n /**\n * Initialize keyboard detection\n */\n init() {\n if (!this.options.textarea) {\n console.warn('[MobileKeyboardHandler] No textarea provided');\n return;\n }\n\n // Use Visual Viewport API if available (preferred method)\n if (this.visualViewport) {\n this.visualViewport.addEventListener('resize', this.handleViewportResize);\n this.visualViewport.addEventListener('scroll', this.handleViewportScroll);\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Using Visual Viewport API');\n }\n } else {\n // Fallback to window resize\n window.addEventListener('resize', this.handleWindowResize);\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Using window resize fallback');\n }\n }\n\n // Handle focus events\n this.options.textarea.addEventListener('focus', this.handleFocus);\n this.options.textarea.addEventListener('blur', this.handleBlur);\n }\n\n /**\n * Handle Visual Viewport resize (keyboard appearance/disappearance)\n */\n handleViewportResize = () => {\n if (!this.visualViewport) return;\n\n const viewportHeight = this.visualViewport.height;\n const windowHeight = window.innerHeight;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Viewport resize:', {\n viewportHeight,\n windowHeight,\n scale: this.visualViewport.scale\n });\n }\n\n // Keyboard is visible if viewport height is significantly smaller than window height\n const wasKeyboardVisible = this.isKeyboardVisible;\n this.isKeyboardVisible = viewportHeight < windowHeight * 0.75;\n\n if (this.isKeyboardVisible !== wasKeyboardVisible) {\n if (this.isKeyboardVisible) {\n this.onKeyboardShow();\n } else {\n this.onKeyboardHide();\n }\n }\n\n // Always adjust layout when viewport changes\n if (this.isKeyboardVisible) {\n this.adjustLayout();\n }\n };\n\n /**\n * Handle Visual Viewport scroll\n */\n handleViewportScroll = () => {\n if (this.isKeyboardVisible) {\n // Ensure textarea stays in view during scroll\n this.ensureTextareaVisible();\n }\n };\n\n /**\n * Handle window resize (fallback)\n */\n handleWindowResize = () => {\n const currentHeight = window.innerHeight;\n const heightDifference = this.lastViewportHeight - currentHeight;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Window resize:', {\n lastHeight: this.lastViewportHeight,\n currentHeight,\n difference: heightDifference\n });\n }\n\n // Significant decrease in height suggests keyboard appeared\n if (heightDifference > 150) {\n if (!this.isKeyboardVisible) {\n this.isKeyboardVisible = true;\n this.onKeyboardShow();\n }\n }\n // Significant increase suggests keyboard hidden\n else if (heightDifference < -150) {\n if (this.isKeyboardVisible) {\n this.isKeyboardVisible = false;\n this.onKeyboardHide();\n }\n }\n\n this.lastViewportHeight = currentHeight;\n };\n\n /**\n * Handle textarea focus\n */\n handleFocus = () => {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Textarea focused');\n }\n\n // Delay to allow keyboard to appear\n setTimeout(() => {\n this.ensureTextareaVisible();\n }, 300);\n };\n\n /**\n * Handle textarea blur\n */\n handleBlur = () => {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Textarea blurred');\n }\n };\n\n /**\n * Called when keyboard appears\n */\n onKeyboardShow() {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Keyboard shown');\n }\n\n this.adjustLayout();\n this.ensureTextareaVisible();\n }\n\n /**\n * Called when keyboard hides\n */\n onKeyboardHide() {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Keyboard hidden');\n }\n\n // Reset wrapper height to auto\n if (this.options.wrapper) {\n this.options.wrapper.style.maxHeight = '';\n }\n }\n\n /**\n * Adjust layout to accommodate keyboard\n */\n adjustLayout() {\n if (!this.visualViewport || !this.options.wrapper) return;\n\n const viewportHeight = this.visualViewport.height;\n\n // Set wrapper max-height to visible viewport height minus some padding\n const maxHeight = viewportHeight - 20; // 20px padding\n this.options.wrapper.style.maxHeight = `${maxHeight}px`;\n this.options.wrapper.style.overflow = 'auto';\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Adjusted wrapper height:', maxHeight);\n }\n }\n\n /**\n * Ensure textarea is visible above the keyboard\n */\n ensureTextareaVisible() {\n if (!this.options.textarea) return;\n\n // Scroll textarea into view\n this.options.textarea.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest'\n });\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Scrolled textarea into view');\n }\n }\n\n /**\n * Cleanup event listeners\n */\n destroy() {\n if (this.visualViewport) {\n this.visualViewport.removeEventListener('resize', this.handleViewportResize);\n this.visualViewport.removeEventListener('scroll', this.handleViewportScroll);\n } else {\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n if (this.options.textarea) {\n this.options.textarea.removeEventListener('focus', this.handleFocus);\n this.options.textarea.removeEventListener('blur', this.handleBlur);\n }\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Destroyed');\n }\n }\n}\n","// AttachmentManager - Handles CSV file attachments with drag & drop\n// Single responsibility: manage attachment state and file operations\n\nexport default class AttachmentManager {\n /**\n * Create attachment manager\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n container: options.container || null,\n dropZone: options.dropZone || null,\n styleManager: options.styleManager || null,\n commandScanner: options.commandScanner || null, // For scanning CSV columns\n dropdownManager: options.dropdownManager || null, // For showing dropdown on warning click\n csvModalManager: options.csvModalManager || null, // For displaying CSV content in modal\n onAttachmentAdd: options.onAttachmentAdd || null,\n onAttachmentRemove: options.onAttachmentRemove || null,\n debug: options.debug || false,\n ...options\n };\n\n this.attachedFiles = new Map(); // Store attached files\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Initialized');\n }\n }\n\n /**\n * Initialize drag & drop handlers\n */\n init() {\n if (!this.options.container || !this.options.dropZone) {\n console.warn('[AttachmentManager] Missing container or dropZone');\n return;\n }\n\n this.setupDragAndDrop();\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Drag & drop initialized');\n }\n }\n\n /**\n * Setup drag & drop event handlers\n */\n setupDragAndDrop() {\n const dropZone = this.options.dropZone;\n\n dropZone.addEventListener('dragover', this.handleDragOver);\n dropZone.addEventListener('dragleave', this.handleDragLeave);\n dropZone.addEventListener('drop', this.handleDrop);\n }\n\n /**\n * Handle drag over event\n */\n handleDragOver = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '#f0f9ff';\n this.options.dropZone.style.borderColor = '#3b82f6';\n };\n\n /**\n * Handle drag leave event\n */\n handleDragLeave = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '';\n this.options.dropZone.style.borderColor = '';\n };\n\n /**\n * Handle drop event\n */\n handleDrop = async (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '';\n this.options.dropZone.style.borderColor = '';\n\n const files = Array.from(e.dataTransfer.files);\n for (const file of files) {\n await this.addAttachment(file);\n }\n };\n\n /**\n * Parse CSV and extract metadata\n * @param {string} csvText - CSV file content\n * @returns {Object} - { rows, columns, headers }\n */\n parseCSVMetadata(csvText) {\n const lines = csvText.trim().split('\\n');\n const rows = lines.length;\n\n // Parse first row as headers\n const firstLine = lines[0] || '';\n const headers = firstLine.split(',').map(h => h.trim());\n const columns = headers.length;\n\n return { rows, columns, headers };\n }\n\n /**\n * Scan CSV headers for trigger matches\n * @param {Array} headers - CSV column headers\n * @returns {Array} - Array of matches\n */\n scanCSVHeaders(headers) {\n if (!this.options.commandScanner) {\n return [];\n }\n\n const matches = [];\n\n // Get CSV-specific triggers from command map\n const commandMap = this.options.commandScanner.commandMap;\n if (!commandMap || !commandMap['tql-triggers']) {\n return [];\n }\n\n // Check warning triggers for csv-match-column type\n const warnings = commandMap['tql-triggers'].warning || [];\n const csvTriggers = warnings.filter(t => t.type === 'csv-match-column');\n\n // Check each header against CSV triggers\n headers.forEach((header, index) => {\n csvTriggers.forEach(trigger => {\n if (trigger.match && trigger.match.includes(header)) {\n matches.push({\n header,\n columnIndex: index,\n trigger,\n intent: {\n category: trigger.category,\n handler: trigger.handler\n }\n });\n }\n });\n });\n\n return matches;\n }\n\n /**\n * Format file size in KB\n * @param {number} bytes - File size in bytes\n * @returns {string} - Formatted size\n */\n formatFileSize(bytes) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n /**\n * Create attachment wrapper with icon placeholder and card\n * @param {File} file - File object\n * @param {string} csvText - CSV file content\n * @param {Object} metadata - { rows, columns, headers }\n * @param {Array} matches - CSV header matches\n * @returns {HTMLElement} - Wrapper element\n */\n createAttachmentCard(file, csvText, metadata, matches = []) {\n // Create wrapper container\n const wrapper = document.createElement('div');\n wrapper.className = 'tq-attachment-wrapper';\n\n // Create icon placeholder\n const iconPlaceholder = document.createElement('div');\n iconPlaceholder.className = 'tq-attachment-icon-placeholder';\n\n // Add warning/error/info icon if matches found\n let icon = null;\n if (matches.length > 0) {\n const match = matches[0];\n const messageState = match.intent?.handler?.['message-state'] || 'warning';\n\n // Map message state to icon filename\n const iconMap = {\n 'error': 'trustquery-error.svg',\n 'warning': 'trustquery-warning.svg',\n 'info': 'trustquery-info.svg'\n };\n\n icon = document.createElement('img');\n icon.className = 'tq-attachment-icon';\n icon.src = `./assets/${iconMap[messageState] || iconMap.warning}`;\n icon.title = `CSV column ${messageState} - click to review`;\n\n // Handle icon click - show dropdown (using mousedown to prevent double-firing)\n icon.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.handleWarningClick(icon, matches, wrapper, file.name);\n });\n\n iconPlaceholder.appendChild(icon);\n }\n\n // Create card\n const card = document.createElement('div');\n card.className = 'tq-attachment-card';\n\n // Remove button\n const removeBtn = document.createElement('button');\n removeBtn.className = 'tq-attachment-remove';\n removeBtn.innerHTML = '×';\n removeBtn.onclick = () => this.removeAttachment(file.name, wrapper);\n\n // File name header\n const fileNameHeader = document.createElement('div');\n fileNameHeader.className = 'tq-attachment-header';\n fileNameHeader.textContent = file.name;\n\n // Metadata row\n const metaRow = document.createElement('div');\n metaRow.className = 'tq-attachment-meta';\n\n const sizeSpan = document.createElement('span');\n sizeSpan.textContent = this.formatFileSize(file.size);\n\n const rowsSpan = document.createElement('span');\n rowsSpan.textContent = `${metadata.rows} rows`;\n\n const colsSpan = document.createElement('span');\n colsSpan.textContent = `${metadata.columns} cols`;\n\n metaRow.appendChild(sizeSpan);\n metaRow.appendChild(rowsSpan);\n metaRow.appendChild(colsSpan);\n\n card.appendChild(removeBtn);\n card.appendChild(fileNameHeader);\n card.appendChild(metaRow);\n\n // Apply styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyWrapperStyles(wrapper);\n this.options.styleManager.applyIconPlaceholderStyles(iconPlaceholder, matches.length > 0);\n this.options.styleManager.applyIconStyles(icon);\n this.options.styleManager.applyCardStyles(card);\n this.options.styleManager.applyRemoveButtonStyles(removeBtn);\n this.options.styleManager.applyHeaderStyles(fileNameHeader);\n this.options.styleManager.applyMetaStyles(metaRow);\n }\n\n // Add click handler to card to open CSV modal\n card.style.cursor = 'pointer';\n card.addEventListener('click', (e) => {\n // Don't open modal if clicking remove button\n if (e.target === removeBtn || removeBtn.contains(e.target)) {\n return;\n }\n\n if (this.options.csvModalManager) {\n // Get the latest CSV text from attachedFiles (in case it was updated)\n const attachment = this.attachedFiles.get(file.name);\n const currentText = attachment ? attachment.text : csvText;\n const currentMetadata = attachment ? attachment.metadata : metadata;\n\n this.options.csvModalManager.show({\n file,\n text: currentText,\n metadata: currentMetadata\n });\n }\n });\n\n // Assemble structure\n wrapper.appendChild(iconPlaceholder);\n wrapper.appendChild(card);\n\n return wrapper;\n }\n\n /**\n * Update CSV column header in stored text\n * @param {string} fileName - File name\n * @param {number} colIndex - Column index\n * @param {string} appendText - Text to append (e.g., \"/PST\")\n */\n updateCSVColumnHeader(fileName, colIndex, appendText) {\n const attachment = this.attachedFiles.get(fileName);\n if (!attachment) {\n console.warn('[AttachmentManager] File not found:', fileName);\n return;\n }\n\n // Parse CSV and update header\n const lines = attachment.text.split('\\n');\n if (lines.length === 0) {\n return;\n }\n\n const headers = lines[0].split(',').map(h => h.trim());\n if (colIndex >= headers.length) {\n return;\n }\n\n // Remove any existing suffix (text after /)\n const baseHeader = headers[colIndex].split('/')[0];\n headers[colIndex] = baseHeader + appendText;\n\n // Update first line\n lines[0] = headers.join(', ');\n\n // Update stored text\n attachment.text = lines.join('\\n');\n\n // Update metadata\n attachment.metadata.headers = headers;\n\n // Re-scan headers for matches\n const newMatches = this.scanCSVHeaders(headers);\n attachment.matches = newMatches;\n\n // Update icon visibility based on matches\n if (attachment.wrapper) {\n const iconPlaceholder = attachment.wrapper.querySelector('.tq-attachment-icon-placeholder');\n const existingIcon = iconPlaceholder?.querySelector('.tq-attachment-icon');\n\n if (newMatches.length === 0 && existingIcon) {\n // No more matches - remove the icon and collapse placeholder\n existingIcon.remove();\n\n // Collapse the icon placeholder by setting width to 0\n if (iconPlaceholder) {\n iconPlaceholder.style.width = '0';\n iconPlaceholder.style.minWidth = '0';\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Removed warning icon - all warnings resolved');\n }\n } else if (newMatches.length > 0 && !existingIcon) {\n // New matches appeared - add icon and expand placeholder\n const match = newMatches[0];\n const messageState = match.intent?.handler?.['message-state'] || 'warning';\n const iconMap = {\n 'error': 'trustquery-error.svg',\n 'warning': 'trustquery-warning.svg',\n 'info': 'trustquery-info.svg'\n };\n\n // Expand the icon placeholder back to normal width\n if (iconPlaceholder) {\n iconPlaceholder.style.width = '24px';\n iconPlaceholder.style.minWidth = '24px';\n }\n\n const icon = document.createElement('img');\n icon.className = 'tq-attachment-icon';\n icon.src = `./assets/${iconMap[messageState] || iconMap.warning}`;\n icon.title = `CSV column ${messageState} - click to review`;\n\n // Handle icon click\n icon.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.handleWarningClick(icon, newMatches, attachment.wrapper, fileName);\n });\n\n // Apply styles if styleManager exists\n if (this.options.styleManager) {\n this.options.styleManager.applyIconStyles(icon);\n }\n\n iconPlaceholder?.appendChild(icon);\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Added warning icon - new warnings detected');\n }\n }\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Updated CSV column', colIndex, 'to', headers[colIndex]);\n }\n }\n\n /**\n * Handle warning icon click - show dropdown\n * @param {HTMLElement} iconEl - Warning icon element\n * @param {Array} matches - CSV header matches\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {string} fileName - File name for tracking\n */\n handleWarningClick(iconEl, matches, wrapper, fileName) {\n if (!this.options.dropdownManager || matches.length === 0) {\n return;\n }\n\n // Use the first match (could be enhanced to handle multiple)\n const match = matches[0];\n\n // Create match data similar to text matches\n const matchData = {\n text: match.header,\n command: {\n id: `csv-column-${match.columnIndex}`,\n match: match.header,\n matchType: 'csv-column',\n messageState: match.intent.handler['message-state'] || 'warning',\n category: match.intent.category,\n intent: match.intent,\n handler: match.intent.handler\n },\n intent: match.intent,\n // Add context for attachment icon click\n isAttachmentIcon: true,\n fileName: fileName,\n csvColumnIndex: match.columnIndex\n };\n\n // Show dropdown using DropdownManager\n this.options.dropdownManager.showDropdown(iconEl, matchData);\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Showing dropdown for CSV column:', match.header);\n }\n }\n\n /**\n * Add attachment to container\n * @param {File} file - File to attach\n */\n async addAttachment(file) {\n if (!file.name.endsWith('.csv')) {\n alert('Only CSV files are supported');\n return;\n }\n\n // Check if already attached\n if (this.attachedFiles.has(file.name)) {\n console.warn('[AttachmentManager] File already attached:', file.name);\n return;\n }\n\n // Read file to get metadata\n const text = await file.text();\n const metadata = this.parseCSVMetadata(text);\n\n // Scan CSV headers for trigger matches\n const matches = this.scanCSVHeaders(metadata.headers || []);\n\n // Create wrapper with card and icon\n const wrapper = this.createAttachmentCard(file, text, metadata, matches);\n\n // Store file reference with matches and text\n this.attachedFiles.set(file.name, { file, text, wrapper, metadata, matches });\n\n // Add to container\n this.options.container.appendChild(wrapper);\n this.options.container.classList.add('has-attachments');\n\n // Trigger callback\n if (this.options.onAttachmentAdd) {\n this.options.onAttachmentAdd({ file, metadata, matches });\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Added:', file.name, metadata, 'matches:', matches);\n }\n }\n\n /**\n * Remove attachment\n * @param {string} fileName - File name to remove\n * @param {HTMLElement} wrapper - Wrapper element\n */\n removeAttachment(fileName, wrapper) {\n wrapper.remove();\n const attachment = this.attachedFiles.get(fileName);\n this.attachedFiles.delete(fileName);\n\n // Remove has-attachments class if no attachments left\n if (this.attachedFiles.size === 0) {\n this.options.container.classList.remove('has-attachments');\n }\n\n // Trigger callback\n if (this.options.onAttachmentRemove && attachment) {\n this.options.onAttachmentRemove({ file: attachment.file, metadata: attachment.metadata });\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Removed:', fileName);\n }\n }\n\n /**\n * Get all attached files\n * @returns {Array} - Array of { file, metadata }\n */\n getAttachments() {\n return Array.from(this.attachedFiles.values());\n }\n\n /**\n * Clear all attachments\n */\n clearAll() {\n this.attachedFiles.forEach((attachment, fileName) => {\n this.removeAttachment(fileName, attachment.wrapper);\n });\n }\n\n /**\n * Cleanup\n */\n destroy() {\n if (this.options.dropZone) {\n this.options.dropZone.removeEventListener('dragover', this.handleDragOver);\n this.options.dropZone.removeEventListener('dragleave', this.handleDragLeave);\n this.options.dropZone.removeEventListener('drop', this.handleDrop);\n }\n\n this.clearAll();\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Destroyed');\n }\n }\n}\n","// AttachmentStyleManager - Handles all styling for attachment cards\n// Single responsibility: apply consistent inline styles to attachment UI elements\n\nexport default class AttachmentStyleManager {\n /**\n * Create attachment style manager\n * @param {Object} options - Style options\n */\n constructor(options = {}) {\n this.options = {\n // Card colors\n cardBackground: options.cardBackground || '#f0f9ff', // Light blue background\n cardBorder: options.cardBorder || '#e2e8f0',\n\n // Text colors\n headerColor: options.headerColor || '#1e293b',\n metaColor: options.metaColor || '#64748b',\n\n // Remove button colors\n removeBackground: options.removeBackground || '#ef4444',\n removeBackgroundHover: options.removeBackgroundHover || '#dc2626',\n\n ...options\n };\n }\n\n /**\n * Apply wrapper styles (container for icon + card)\n * @param {HTMLElement} wrapper - Wrapper element\n */\n applyWrapperStyles(wrapper) {\n Object.assign(wrapper.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '6px'\n });\n }\n\n /**\n * Apply icon placeholder styles\n * @param {HTMLElement} placeholder - Icon placeholder element\n * @param {boolean} hasIcon - Whether icon is present\n */\n applyIconPlaceholderStyles(placeholder, hasIcon) {\n Object.assign(placeholder.style, {\n width: '24px',\n minWidth: '24px',\n height: '48px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: '0',\n transition: 'width 0.3s ease, min-width 0.3s ease'\n });\n }\n\n /**\n * Apply icon styles\n * @param {HTMLElement} icon - Icon element\n */\n applyIconStyles(icon) {\n if (!icon) return;\n\n Object.assign(icon.style, {\n width: '20px',\n height: '20px',\n cursor: 'pointer',\n transition: 'transform 0.2s'\n });\n\n // Hover effect - slight scale\n icon.addEventListener('mouseenter', () => {\n icon.style.transform = 'scale(1.1)';\n });\n\n icon.addEventListener('mouseleave', () => {\n icon.style.transform = 'scale(1)';\n });\n }\n\n /**\n * Apply card styles (reduced padding to prevent cutoff)\n * @param {HTMLElement} card - Card element\n */\n applyCardStyles(card) {\n Object.assign(card.style, {\n position: 'relative',\n background: this.options.cardBackground,\n border: `1px solid ${this.options.cardBorder}`,\n borderRadius: '6px',\n padding: '6px 10px',\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n boxSizing: 'border-box',\n maxHeight: '48px',\n overflow: 'hidden',\n flex: '1' // Take remaining space in wrapper\n });\n }\n\n /**\n * Apply remove button styles (dark icon, no background)\n * @param {HTMLElement} button - Remove button element\n */\n applyRemoveButtonStyles(button) {\n Object.assign(button.style, {\n position: 'absolute',\n top: '4px', // Adjusted for reduced padding\n right: '6px',\n background: 'transparent',\n color: '#64748b',\n border: 'none',\n borderRadius: '3px',\n width: '18px',\n height: '18px',\n fontSize: '18px',\n lineHeight: '1',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.2s',\n padding: '0',\n fontWeight: '400'\n });\n\n // Hover effect - darker color\n button.addEventListener('mouseenter', () => {\n button.style.color = '#1e293b'; // Darker on hover\n });\n\n button.addEventListener('mouseleave', () => {\n button.style.color = '#64748b'; // Back to gray\n });\n }\n\n /**\n * Apply header (file name) styles - smaller size\n * @param {HTMLElement} header - Header element\n */\n applyHeaderStyles(header) {\n Object.assign(header.style, {\n fontWeight: '600',\n fontSize: '11px', // Further reduced from 12px to 11px\n color: this.options.headerColor,\n paddingRight: '22px',\n wordBreak: 'break-word',\n lineHeight: '1.2' // Tighter line height\n });\n }\n\n /**\n * Apply metadata row styles\n * @param {HTMLElement} metaRow - Metadata row element\n */\n applyMetaStyles(metaRow) {\n Object.assign(metaRow.style, {\n display: 'flex',\n gap: '10px', // Slightly reduced from 12px\n fontSize: '10px', // Reduced from 11px\n color: this.options.metaColor,\n lineHeight: '1.2'\n });\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n }\n}\n","// CSVModalManager - Handles CSV modal display with trigger matching\n// Single responsibility: manage CSV modal lifecycle and rendering\n\nexport default class CSVModalManager {\n /**\n * Create CSV modal manager\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n styleManager: options.styleManager || null,\n commandScanner: options.commandScanner || null,\n dropdownManager: options.dropdownManager || null,\n onCellClick: options.onCellClick || null,\n debug: options.debug || false,\n ...options\n };\n\n this.modal = null;\n this.currentCSVData = null;\n this.parsedData = null;\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Initialized');\n }\n }\n\n /**\n * Parse CSV text into 2D array\n * @param {string} csvText - Raw CSV text\n * @returns {Array} - 2D array of cells\n */\n parseCSV(csvText) {\n const lines = csvText.trim().split('\\n');\n return lines.map(line => {\n // Simple CSV parsing (handles basic cases)\n return line.split(',').map(cell => cell.trim());\n });\n }\n\n /**\n * Check if a cell value matches any triggers\n * @param {string} cellValue - Cell content\n * @returns {Object|null} - Match data or null\n */\n checkCellForTriggers(cellValue) {\n if (!this.options.commandScanner || !cellValue) {\n return null;\n }\n\n const commandMap = this.options.commandScanner.commandMap;\n if (!commandMap || !commandMap['tql-triggers']) {\n return null;\n }\n\n // Check all trigger states (error, warning, info)\n const triggers = commandMap['tql-triggers'];\n const allTriggers = [\n ...(triggers.error || []),\n ...(triggers.warning || []),\n ...(triggers.info || [])\n ];\n\n // Check each trigger\n for (const trigger of allTriggers) {\n // Handle 'match' type triggers\n if (trigger.type === 'match' && trigger.match) {\n for (const matchText of trigger.match) {\n if (cellValue.toLowerCase() === matchText.toLowerCase()) {\n return {\n text: cellValue,\n trigger,\n matchType: 'exact',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n\n // Handle 'csv-match-column' type triggers (for CSV headers)\n if (trigger.type === 'csv-match-column' && trigger.match) {\n for (const matchText of trigger.match) {\n if (cellValue.toLowerCase() === matchText.toLowerCase()) {\n return {\n text: cellValue,\n trigger,\n matchType: 'csv-column',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n\n // Handle 'regex' type triggers\n if (trigger.type === 'regex' && trigger.regex) {\n for (const pattern of trigger.regex) {\n const regex = new RegExp(pattern);\n if (regex.test(cellValue)) {\n return {\n text: cellValue,\n trigger,\n matchType: 'regex',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Create table cell with optional trigger highlighting\n * @param {string} cellValue - Cell content\n * @param {boolean} isHeader - Whether this is a header cell\n * @param {number} rowIndex - Row index\n * @param {number} colIndex - Column index\n * @returns {HTMLElement} - Table cell element\n */\n createCell(cellValue, isHeader, rowIndex, colIndex) {\n const cell = document.createElement(isHeader ? 'th' : 'td');\n\n // Check for trigger matches\n const match = this.checkCellForTriggers(cellValue);\n\n if (match) {\n // Create highlighted span\n const span = document.createElement('span');\n span.className = 'tq-csv-match';\n span.textContent = cellValue;\n span.setAttribute('data-message-state', match.messageState);\n span.setAttribute('data-row', rowIndex);\n span.setAttribute('data-col', colIndex);\n\n // Apply highlighting styles\n if (this.options.styleManager) {\n this.options.styleManager.applyCellMatchStyles(span, match.messageState);\n }\n\n // Add click handler to show dropdown\n span.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleCellMatchClick(span, match, rowIndex, colIndex);\n });\n\n cell.appendChild(span);\n } else {\n cell.textContent = cellValue;\n }\n\n // Apply cell styles\n if (this.options.styleManager) {\n if (isHeader) {\n this.options.styleManager.applyHeaderCellStyles(cell);\n } else {\n this.options.styleManager.applyDataCellStyles(cell);\n }\n }\n\n return cell;\n }\n\n /**\n * Handle click on matched cell\n * @param {HTMLElement} cellEl - Cell element\n * @param {Object} match - Match data\n * @param {number} rowIndex - Row index\n * @param {number} colIndex - Column index\n */\n handleCellMatchClick(cellEl, match, rowIndex, colIndex) {\n if (!this.options.dropdownManager) {\n return;\n }\n\n // Create match data for dropdown\n const matchData = {\n text: match.text,\n command: {\n id: `csv-cell-${rowIndex}-${colIndex}`,\n matchType: match.matchType,\n messageState: match.messageState,\n category: match.trigger.category,\n intent: {\n category: match.trigger.category,\n handler: match.trigger.handler\n },\n handler: match.trigger.handler\n },\n intent: {\n category: match.trigger.category,\n handler: match.trigger.handler\n },\n // Store cell position for updates\n csvCellPosition: {\n rowIndex,\n colIndex,\n isHeader: rowIndex === 0\n }\n };\n\n // Show dropdown\n this.options.dropdownManager.showDropdown(cellEl, matchData);\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Showing dropdown for cell:', match.text, 'at', rowIndex, colIndex);\n }\n }\n\n /**\n * Update column header with selected option\n * @param {number} colIndex - Column index\n * @param {string} appendText - Text to append (e.g., \"/PST\")\n */\n updateColumnHeader(colIndex, appendText) {\n if (!this.parsedData || !this.parsedData[0]) {\n return;\n }\n\n // Update parsed data\n const originalHeader = this.parsedData[0][colIndex];\n\n // Remove any existing suffix (text after /)\n const baseHeader = originalHeader.split('/')[0];\n this.parsedData[0][colIndex] = baseHeader + appendText;\n\n // Update the displayed table\n this.refreshTable();\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Updated column', colIndex, 'from', originalHeader, 'to', this.parsedData[0][colIndex]);\n }\n }\n\n /**\n * Refresh the table display\n */\n refreshTable() {\n if (!this.modal || !this.parsedData) {\n return;\n }\n\n // Find table container\n const tableContainer = this.modal.querySelector('.tq-csv-table-container');\n if (!tableContainer) {\n return;\n }\n\n // Clear and rebuild table\n tableContainer.innerHTML = '';\n const table = this.createTable(this.parsedData);\n tableContainer.appendChild(table);\n }\n\n /**\n * Create HTML table from parsed CSV data\n * @param {Array} data - 2D array of cells\n * @returns {HTMLElement} - Table element\n */\n createTable(data) {\n const table = document.createElement('table');\n table.className = 'tq-csv-table';\n\n // Create header row\n if (data.length > 0) {\n const thead = document.createElement('thead');\n const headerRow = document.createElement('tr');\n\n data[0].forEach((cellValue, colIndex) => {\n const cell = this.createCell(cellValue, true, 0, colIndex);\n headerRow.appendChild(cell);\n });\n\n thead.appendChild(headerRow);\n table.appendChild(thead);\n }\n\n // Create data rows\n if (data.length > 1) {\n const tbody = document.createElement('tbody');\n\n for (let i = 1; i < data.length; i++) {\n const row = document.createElement('tr');\n\n data[i].forEach((cellValue, colIndex) => {\n const cell = this.createCell(cellValue, false, i, colIndex);\n row.appendChild(cell);\n });\n\n tbody.appendChild(row);\n }\n\n table.appendChild(tbody);\n }\n\n // Apply table styles\n if (this.options.styleManager) {\n this.options.styleManager.applyTableStyles(table);\n }\n\n return table;\n }\n\n /**\n * Show CSV modal\n * @param {Object} csvData - { file, text, metadata }\n */\n show(csvData) {\n // Close any existing modal\n this.hide();\n\n this.currentCSVData = csvData;\n this.parsedData = this.parseCSV(csvData.text);\n\n // Create modal backdrop\n const backdrop = document.createElement('div');\n backdrop.className = 'tq-csv-modal-backdrop';\n\n // Create modal\n const modal = document.createElement('div');\n modal.className = 'tq-csv-modal';\n\n // Create header\n const header = document.createElement('div');\n header.className = 'tq-csv-modal-header';\n\n const title = document.createElement('div');\n title.className = 'tq-csv-modal-title';\n title.textContent = csvData.file.name;\n\n const closeBtn = document.createElement('button');\n closeBtn.className = 'tq-csv-modal-close';\n closeBtn.innerHTML = '×';\n closeBtn.onclick = () => this.hide();\n\n header.appendChild(title);\n header.appendChild(closeBtn);\n\n // Create table container (scrollable)\n const tableContainer = document.createElement('div');\n tableContainer.className = 'tq-csv-table-container';\n\n // Create table\n const table = this.createTable(this.parsedData);\n tableContainer.appendChild(table);\n\n // Assemble modal\n modal.appendChild(header);\n modal.appendChild(tableContainer);\n\n // Apply styles\n if (this.options.styleManager) {\n this.options.styleManager.applyBackdropStyles(backdrop);\n this.options.styleManager.applyModalStyles(modal);\n this.options.styleManager.applyHeaderStyles(header);\n this.options.styleManager.applyTitleStyles(title);\n this.options.styleManager.applyCloseButtonStyles(closeBtn);\n this.options.styleManager.applyTableContainerStyles(tableContainer);\n }\n\n // Add to document\n backdrop.appendChild(modal);\n document.body.appendChild(backdrop);\n\n this.modal = backdrop;\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n this.hide();\n }\n });\n\n // Close on Escape key\n this.escapeHandler = (e) => {\n if (e.key === 'Escape') {\n this.hide();\n }\n };\n document.addEventListener('keydown', this.escapeHandler);\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Modal shown for:', csvData.file.name);\n }\n }\n\n /**\n * Hide modal\n */\n hide() {\n if (this.modal) {\n this.modal.remove();\n this.modal = null;\n this.currentCSVData = null;\n this.parsedData = null;\n }\n\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Modal hidden');\n }\n }\n\n /**\n * Cleanup\n */\n destroy() {\n this.hide();\n if (this.options.debug) {\n console.log('[CSVModalManager] Destroyed');\n }\n }\n}\n","// CSVModalStyleManager - Handles styling for CSV modal\n// Single responsibility: apply consistent styles to CSV modal elements\n\nexport default class CSVModalStyleManager {\n /**\n * Create CSV modal style manager\n * @param {Object} options - Style options\n */\n constructor(options = {}) {\n this.options = {\n // Modal colors\n backdropColor: options.backdropColor || 'rgba(0, 0, 0, 0.5)',\n modalBackground: options.modalBackground || '#ffffff',\n\n // Header colors\n headerBackground: options.headerBackground || '#f8fafc',\n headerBorder: options.headerBorder || '#e2e8f0',\n\n // Table colors\n tableBorder: options.tableBorder || '#e2e8f0',\n headerCellBackground: options.headerCellBackground || '#f1f5f9',\n cellBorder: options.cellBorder || '#e2e8f0',\n\n // Highlight colors (matching textarea triggers)\n errorHighlight: options.errorHighlight || '#fee2e2',\n errorBorder: options.errorBorder || '#ef4444',\n warningHighlight: options.warningHighlight || '#fef3c7',\n warningBorder: options.warningBorder || '#f59e0b',\n infoHighlight: options.infoHighlight || '#dbeafe',\n infoBorder: options.infoBorder || '#3b82f6',\n\n ...options\n };\n }\n\n /**\n * Apply backdrop styles\n * @param {HTMLElement} backdrop - Backdrop element\n */\n applyBackdropStyles(backdrop) {\n Object.assign(backdrop.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: this.options.backdropColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: '10000',\n padding: '20px'\n });\n }\n\n /**\n * Apply modal styles\n * @param {HTMLElement} modal - Modal element\n */\n applyModalStyles(modal) {\n Object.assign(modal.style, {\n backgroundColor: this.options.modalBackground,\n borderRadius: '8px',\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.2)',\n maxWidth: '90vw',\n maxHeight: '90vh',\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n });\n }\n\n /**\n * Apply header styles\n * @param {HTMLElement} header - Header element\n */\n applyHeaderStyles(header) {\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: `1px solid ${this.options.headerBorder}`,\n backgroundColor: this.options.headerBackground,\n flexShrink: '0'\n });\n }\n\n /**\n * Apply title styles\n * @param {HTMLElement} title - Title element\n */\n applyTitleStyles(title) {\n Object.assign(title.style, {\n fontSize: '18px',\n fontWeight: '600',\n color: '#1e293b'\n });\n }\n\n /**\n * Apply close button styles\n * @param {HTMLElement} button - Close button element\n */\n applyCloseButtonStyles(button) {\n Object.assign(button.style, {\n background: 'transparent',\n border: 'none',\n fontSize: '28px',\n color: '#64748b',\n cursor: 'pointer',\n lineHeight: '1',\n padding: '0',\n width: '32px',\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s, color 0.2s'\n });\n\n button.addEventListener('mouseenter', () => {\n button.style.backgroundColor = '#f1f5f9';\n button.style.color = '#1e293b';\n });\n\n button.addEventListener('mouseleave', () => {\n button.style.backgroundColor = 'transparent';\n button.style.color = '#64748b';\n });\n }\n\n /**\n * Apply table container styles (scrollable)\n * @param {HTMLElement} container - Table container element\n */\n applyTableContainerStyles(container) {\n Object.assign(container.style, {\n flex: '1',\n overflow: 'auto',\n padding: '20px'\n });\n }\n\n /**\n * Apply table styles\n * @param {HTMLElement} table - Table element\n */\n applyTableStyles(table) {\n Object.assign(table.style, {\n borderCollapse: 'collapse',\n width: '100%',\n fontSize: '14px',\n backgroundColor: '#ffffff'\n });\n }\n\n /**\n * Apply header cell styles\n * @param {HTMLElement} cell - Header cell element\n */\n applyHeaderCellStyles(cell) {\n Object.assign(cell.style, {\n padding: '12px 16px',\n textAlign: 'left',\n fontWeight: '600',\n backgroundColor: this.options.headerCellBackground,\n border: `1px solid ${this.options.tableBorder}`,\n color: '#1e293b',\n position: 'sticky',\n top: '0',\n zIndex: '10',\n whiteSpace: 'nowrap'\n });\n }\n\n /**\n * Apply data cell styles\n * @param {HTMLElement} cell - Data cell element\n */\n applyDataCellStyles(cell) {\n Object.assign(cell.style, {\n padding: '10px 16px',\n border: `1px solid ${this.options.cellBorder}`,\n color: '#334155',\n whiteSpace: 'nowrap'\n });\n }\n\n /**\n * Apply match highlighting styles to cell content\n * @param {HTMLElement} span - Span element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyCellMatchStyles(span, messageState) {\n const colorMap = {\n 'error': {\n background: this.options.errorHighlight,\n border: this.options.errorBorder\n },\n 'warning': {\n background: this.options.warningHighlight,\n border: this.options.warningBorder\n },\n 'info': {\n background: this.options.infoHighlight,\n border: this.options.infoBorder\n }\n };\n\n const colors = colorMap[messageState] || colorMap.info;\n\n Object.assign(span.style, {\n backgroundColor: colors.background,\n borderBottom: `2px solid ${colors.border}`,\n padding: '2px 4px',\n borderRadius: '3px',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n display: 'inline-block'\n });\n\n // Hover effect\n span.addEventListener('mouseenter', () => {\n span.style.backgroundColor = this.adjustBrightness(colors.background, -10);\n });\n\n span.addEventListener('mouseleave', () => {\n span.style.backgroundColor = colors.background;\n });\n }\n\n /**\n * Adjust color brightness\n * @param {string} color - Hex color\n * @param {number} amount - Amount to adjust (-255 to 255)\n * @returns {string} - Adjusted color\n */\n adjustBrightness(color, amount) {\n // Simple brightness adjustment for hex colors\n const hex = color.replace('#', '');\n const num = parseInt(hex, 16);\n const r = Math.max(0, Math.min(255, (num >> 16) + amount));\n const g = Math.max(0, Math.min(255, ((num >> 8) & 0x00FF) + amount));\n const b = Math.max(0, Math.min(255, (num & 0x0000FF) + amount));\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n }\n}\n","// TrustQuery - Lightweight library to make textareas interactive\n// Turns matching words into interactive elements with hover bubbles and click actions\n\nimport OverlayRenderer from './OverlayRenderer.js';\nimport CommandScanner from './CommandScanner.js';\nimport InteractionHandler from './InteractionHandler.js';\nimport StyleManager from './StyleManager.js';\nimport CommandHandlerRegistry from './CommandHandlers.js';\nimport AutoGrow from './AutoGrow.js';\nimport ValidationStateManager from './ValidationStateManager.js';\nimport MobileKeyboardHandler from './MobileKeyboardHandler.js';\n\n// Import attachment managers for re-export\nimport AttachmentManager from './AttachmentManager.js';\nimport AttachmentStyleManager from './AttachmentStyleManager.js';\nimport CSVModalManager from './CSVModalManager.js';\nimport CSVModalStyleManager from './CSVModalStyleManager.js';\n\nexport default class TrustQuery {\n // Store all instances\n static instances = new Map();\n\n /**\n * Initialize TrustQuery on a textarea\n * @param {string|HTMLElement} textareaId - ID or element of textarea\n * @param {Object} options - Configuration options\n * @returns {TrustQuery} Instance\n */\n static init(textareaId, options = {}) {\n const textarea = typeof textareaId === 'string'\n ? document.getElementById(textareaId)\n : textareaId;\n\n if (!textarea) {\n console.error('[TrustQuery] Textarea not found:', textareaId);\n return null;\n }\n\n // Check if already initialized\n const existingInstance = TrustQuery.instances.get(textarea);\n if (existingInstance) {\n console.warn('[TrustQuery] Already initialized on this textarea, returning existing instance');\n return existingInstance;\n }\n\n // Create new instance\n const instance = new TrustQuery(textarea, options);\n TrustQuery.instances.set(textarea, instance);\n\n console.log('[TrustQuery] Initialized successfully on:', textarea.id || textarea);\n return instance;\n }\n\n /**\n * Get existing instance\n * @param {string|HTMLElement} textareaId - ID or element\n * @returns {TrustQuery|null} Instance or null\n */\n static getInstance(textareaId) {\n const textarea = typeof textareaId === 'string'\n ? document.getElementById(textareaId)\n : textareaId;\n return TrustQuery.instances.get(textarea) || null;\n }\n\n /**\n * Create a TrustQuery instance\n * @param {HTMLElement} textarea - Textarea element\n * @param {Object} options - Configuration\n */\n constructor(textarea, options = {}) {\n this.textarea = textarea;\n\n // Normalize options (support both old and new API)\n this.options = this.normalizeOptions(options);\n\n this.commandMap = null;\n this.isReady = false;\n this.features = {};\n\n // Initialize components\n this.init();\n }\n\n /**\n * Normalize options - support both old and new API\n * @param {Object} options - Raw options\n * @returns {Object} Normalized options\n */\n normalizeOptions(options) {\n // New API structure\n const triggerMap = options.triggerMap || {};\n const features = options.features || {};\n const ui = options.ui || {};\n const events = options.events || {};\n\n // Build normalized config (backward compatible)\n return {\n // Trigger map configuration\n commandMapUrl: triggerMap.url || options.commandMapUrl || null,\n commandMap: triggerMap.data || options.commandMap || null,\n autoLoadCommandMap: options.autoLoadCommandMap !== false,\n triggerMapSource: triggerMap.source || (triggerMap.url ? 'url' : triggerMap.data ? 'inline' : null),\n triggerMapApi: triggerMap.api || null,\n\n // Features\n autoGrow: features.autoGrow || false,\n autoGrowMaxHeight: features.maxHeight || 300,\n debug: features.debug || false,\n\n // UI settings\n theme: ui.theme || options.theme || 'light',\n bubbleDelay: ui.bubbleDelay !== undefined ? ui.bubbleDelay : (options.bubbleDelay || 200),\n dropdownOffset: ui.dropdownOffset !== undefined ? ui.dropdownOffset : (options.dropdownOffset || 28),\n\n // Events (callbacks)\n onWordClick: events.onWordClick || options.onWordClick || null,\n onWordHover: events.onWordHover || options.onWordHover || null,\n onValidationChange: events.onValidationChange || options.onValidationChange || null,\n\n // Theme/style options (passed to StyleManager)\n backgroundColor: ui.backgroundColor || options.backgroundColor,\n textColor: ui.textColor || options.textColor,\n caretColor: ui.caretColor || options.caretColor,\n borderColor: ui.borderColor || options.borderColor,\n borderColorFocus: ui.borderColorFocus || options.borderColorFocus,\n matchBackgroundColor: ui.matchBackgroundColor || options.matchBackgroundColor,\n matchTextColor: ui.matchTextColor || options.matchTextColor,\n matchHoverBackgroundColor: ui.matchHoverBackgroundColor || options.matchHoverBackgroundColor,\n fontFamily: ui.fontFamily || options.fontFamily,\n fontSize: ui.fontSize || options.fontSize,\n lineHeight: ui.lineHeight || options.lineHeight,\n\n ...options\n };\n }\n\n /**\n * Initialize all components\n */\n async init() {\n console.log('[TrustQuery] Starting initialization...');\n\n // Initialize command handler registry\n this.commandHandlers = new CommandHandlerRegistry();\n\n // Initialize style manager (handles all inline styling)\n this.styleManager = new StyleManager(this.options);\n\n // Create wrapper and overlay structure\n this.createOverlayStructure();\n\n // Initialize renderer\n this.renderer = new OverlayRenderer(this.overlay, {\n theme: this.options.theme,\n commandHandlers: this.commandHandlers, // Pass handlers for styling\n debug: this.options.debug // Pass debug flag\n });\n\n // Initialize scanner (will be configured when command map loads)\n this.scanner = new CommandScanner({\n debug: this.options.debug\n });\n\n // Initialize interaction handler\n this.interactionHandler = new InteractionHandler(this.overlay, {\n bubbleDelay: this.options.bubbleDelay,\n dropdownOffset: this.options.dropdownOffset,\n onWordClick: this.options.onWordClick,\n onWordHover: this.options.onWordHover,\n styleManager: this.styleManager, // Pass style manager for bubbles/dropdowns\n commandHandlers: this.commandHandlers, // Pass handlers for bubble content\n textarea: this.textarea, // Pass textarea for on-select display updates\n debug: this.options.debug // Pass debug flag\n });\n\n // Initialize validation state manager\n this.validationStateManager = new ValidationStateManager({\n onValidationChange: this.options.onValidationChange,\n debug: this.options.debug\n });\n\n // Initialize features\n this.initializeFeatures();\n\n // Setup textarea event listeners\n this.setupTextareaListeners();\n\n // Load command map\n if (this.options.autoLoadCommandMap) {\n await this.loadCommandMap();\n } else if (this.options.commandMap) {\n this.updateCommandMap(this.options.commandMap);\n }\n\n // Initial render\n this.render();\n\n this.isReady = true;\n\n // Auto-focus textarea to show cursor\n setTimeout(() => {\n this.textarea.focus();\n }, 100);\n\n console.log('[TrustQuery] Initialization complete');\n }\n\n /**\n * Initialize optional features based on configuration\n */\n initializeFeatures() {\n // Auto-grow textarea feature\n if (this.options.autoGrow) {\n this.features.autoGrow = new AutoGrow(this.textarea, {\n maxHeight: this.options.autoGrowMaxHeight,\n minHeight: 44\n });\n console.log('[TrustQuery] AutoGrow feature enabled');\n }\n\n // Mobile keyboard handler (enabled by default, can be disabled via options)\n if (this.options.mobileKeyboard !== false) {\n this.features.mobileKeyboard = new MobileKeyboardHandler({\n textarea: this.textarea,\n wrapper: this.wrapper,\n debug: this.options.debug\n });\n this.features.mobileKeyboard.init();\n console.log('[TrustQuery] Mobile keyboard handler enabled');\n }\n\n // Debug logging feature\n if (this.options.debug) {\n this.enableDebugLogging();\n console.log('[TrustQuery] Debug logging enabled');\n }\n }\n\n /**\n * Enable debug logging for events\n */\n enableDebugLogging() {\n const originalOnWordHover = this.options.onWordHover;\n const originalOnWordClick = this.options.onWordClick;\n\n this.options.onWordHover = (matchData) => {\n console.log('[TrustQuery Debug] Word Hover:', matchData);\n if (originalOnWordHover) originalOnWordHover(matchData);\n };\n\n this.options.onWordClick = (matchData) => {\n console.log('[TrustQuery Debug] Word Click:', matchData);\n if (originalOnWordClick) originalOnWordClick(matchData);\n };\n }\n\n /**\n * Create the overlay structure\n */\n createOverlayStructure() {\n // Create wrapper to contain both textarea and overlay\n const wrapper = document.createElement('div');\n wrapper.className = 'tq-wrapper';\n\n // Wrap textarea\n this.textarea.parentNode.insertBefore(wrapper, this.textarea);\n wrapper.appendChild(this.textarea);\n\n // Add TrustQuery class to textarea\n this.textarea.classList.add('tq-textarea');\n\n // Create overlay\n this.overlay = document.createElement('div');\n this.overlay.className = 'tq-overlay';\n wrapper.appendChild(this.overlay);\n\n // Store wrapper reference\n this.wrapper = wrapper;\n\n // Apply all inline styles via StyleManager\n this.styleManager.applyAllStyles(wrapper, this.textarea, this.overlay);\n\n // Show textarea now that structure is ready (prevents FOUC)\n this.textarea.style.opacity = '1';\n\n console.log('[TrustQuery] Overlay structure created with inline styles');\n }\n\n /**\n * Setup textarea event listeners\n */\n setupTextareaListeners() {\n // Input event - re-render on content change\n this.textarea.addEventListener('input', () => {\n this.render();\n });\n\n // Scroll event - sync overlay scroll with textarea\n this.textarea.addEventListener('scroll', () => {\n this.overlay.scrollTop = this.textarea.scrollTop;\n this.overlay.scrollLeft = this.textarea.scrollLeft;\n });\n\n // Keyboard event logging for debugging selection issues\n this.textarea.addEventListener('keydown', (e) => {\n const isCmdOrCtrl = e.metaKey || e.ctrlKey;\n const isSelectAll = (e.metaKey || e.ctrlKey) && e.key === 'a';\n\n if (isCmdOrCtrl || isSelectAll) {\n console.log('[TrustQuery] ===== KEYBOARD EVENT =====');\n console.log('[TrustQuery] Key pressed:', {\n key: e.key,\n code: e.code,\n metaKey: e.metaKey,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n altKey: e.altKey,\n isSelectAll: isSelectAll\n });\n console.log('[TrustQuery] Active element:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n console.log('[TrustQuery] Textarea state BEFORE:', {\n value: this.textarea.value,\n valueLength: this.textarea.value.length,\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd)\n });\n\n if (isSelectAll) {\n // Log state after select all (use setTimeout to let browser process the event)\n setTimeout(() => {\n console.log('[TrustQuery] Textarea state AFTER CMD+A:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd),\n selectedLength: this.textarea.selectionEnd - this.textarea.selectionStart\n });\n console.log('[TrustQuery] ===== KEYBOARD EVENT END =====');\n }, 0);\n } else {\n console.log('[TrustQuery] ===== KEYBOARD EVENT END =====');\n }\n }\n });\n\n // Selection change event\n this.textarea.addEventListener('select', (e) => {\n console.log('[TrustQuery] ===== SELECTION CHANGE EVENT =====');\n console.log('[TrustQuery] Selection:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd),\n selectedLength: this.textarea.selectionEnd - this.textarea.selectionStart\n });\n });\n\n // Context menu event - prevent keyboard-triggered context menu\n this.textarea.addEventListener('contextmenu', (e) => {\n console.log('[TrustQuery] ===== CONTEXTMENU EVENT =====');\n console.log('[TrustQuery] Context menu triggered:', {\n type: e.type,\n isTrusted: e.isTrusted,\n button: e.button,\n buttons: e.buttons,\n clientX: e.clientX,\n clientY: e.clientY,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n target: e.target.tagName\n });\n\n // Prevent context menu if triggered by keyboard (button === -1)\n // This prevents the macOS context menu from opening after CMD+A\n if (e.button === -1 && e.buttons === 0) {\n console.log('[TrustQuery] Preventing keyboard-triggered context menu');\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n console.log('[TrustQuery] Allowing mouse-triggered context menu');\n });\n\n // Also prevent context menu on overlay (it interferes with text selection)\n this.overlay.addEventListener('contextmenu', (e) => {\n console.log('[TrustQuery] ===== CONTEXTMENU EVENT ON OVERLAY =====');\n console.log('[TrustQuery] Context menu on overlay - preventing');\n\n // Always prevent context menu on overlay\n // The overlay should be transparent to user interactions\n e.preventDefault();\n e.stopPropagation();\n });\n\n // Focus/blur events - add/remove focus class\n this.textarea.addEventListener('focus', (e) => {\n console.log('[TrustQuery] ===== FOCUS EVENT =====');\n console.log('[TrustQuery] Textarea focused. Active element:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n console.log('[TrustQuery] Current selection:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd\n });\n this.wrapper.classList.add('tq-focused');\n });\n\n this.textarea.addEventListener('blur', (e) => {\n console.log('[TrustQuery] ===== BLUR EVENT =====');\n console.log('[TrustQuery] Textarea blurred. Related target:', e.relatedTarget?.tagName || '(none)');\n console.log('[TrustQuery] Blur event details:', {\n type: e.type,\n isTrusted: e.isTrusted,\n eventPhase: e.eventPhase,\n target: e.target.tagName,\n currentTarget: e.currentTarget.tagName\n });\n console.log('[TrustQuery] Stack trace at blur:');\n console.trace();\n\n // Close dropdown when textarea loses focus (unless interacting with dropdown)\n if (this.interactionHandler) {\n // Use setTimeout to let the new focus target be set and check if clicking on dropdown\n setTimeout(() => {\n const activeElement = document.activeElement;\n const isDropdownRelated = activeElement && (\n activeElement.classList.contains('tq-dropdown-filter') ||\n activeElement.closest('.tq-dropdown') // Check if clicking anywhere in dropdown\n );\n\n console.log('[TrustQuery] After blur - active element:', activeElement?.tagName || '(none)', 'isDropdownRelated:', isDropdownRelated);\n\n // Only close if not interacting with dropdown\n if (!isDropdownRelated) {\n this.interactionHandler.hideDropdown();\n }\n\n // Remove focus class only if we're truly leaving the component\n if (!isDropdownRelated) {\n this.wrapper.classList.remove('tq-focused');\n }\n }, 0);\n }\n });\n\n console.log('[TrustQuery] Textarea listeners attached');\n }\n\n /**\n * Load command map (static tql-triggers.json or from URL)\n */\n async loadCommandMap() {\n try {\n // Default to static file if no URL provided\n const url = this.options.commandMapUrl || '/trustquery/tql-triggers.json';\n\n console.log('[TrustQuery] Loading trigger map from:', url);\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.json();\n this.updateCommandMap(data);\n\n console.log('[TrustQuery] Trigger map loaded successfully');\n } catch (error) {\n console.error('[TrustQuery] Failed to load trigger map:', error);\n }\n }\n\n /**\n * Update command map\n * @param {Object} commandMap - New command map\n */\n updateCommandMap(commandMap) {\n this.commandMap = commandMap;\n this.scanner.setCommandMap(commandMap);\n console.log('[TrustQuery] Command map updated');\n\n // Re-render with new command map\n if (this.isReady) {\n this.render();\n }\n }\n\n /**\n * Render the overlay with styled text\n */\n render() {\n const text = this.textarea.value;\n\n // Scan text for matches\n const matches = this.scanner.scan(text);\n\n // Render overlay with matches\n this.renderer.render(text, matches);\n\n // Update interaction handler with new elements\n this.interactionHandler.update();\n\n // Update validation state\n if (this.validationStateManager) {\n this.validationStateManager.update(matches);\n }\n }\n\n /**\n * Destroy instance and cleanup\n */\n destroy() {\n console.log('[TrustQuery] Destroying instance');\n\n // Remove event listeners\n this.textarea.removeEventListener('input', this.render);\n this.textarea.removeEventListener('scroll', this.syncScroll);\n\n // Cleanup interaction handler\n if (this.interactionHandler) {\n this.interactionHandler.destroy();\n }\n\n // Cleanup mobile keyboard handler\n if (this.features.mobileKeyboard) {\n this.features.mobileKeyboard.destroy();\n }\n\n // Cleanup auto-grow\n if (this.features.autoGrow) {\n this.features.autoGrow.destroy();\n }\n\n // Unwrap textarea\n const parent = this.wrapper.parentNode;\n parent.insertBefore(this.textarea, this.wrapper);\n parent.removeChild(this.wrapper);\n\n // Remove from instances\n TrustQuery.instances.delete(this.textarea);\n\n console.log('[TrustQuery] Destroyed');\n }\n\n /**\n * Get current value\n */\n getValue() {\n return this.textarea.value;\n }\n\n /**\n * Set value\n */\n setValue(value) {\n this.textarea.value = value;\n this.render();\n }\n}\n\n// Export attachment managers as named exports\nexport {\n AttachmentManager,\n AttachmentStyleManager,\n CSVModalManager,\n CSVModalStyleManager\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trustquery.js","sources":["../src/OverlayRenderer.js","../src/CommandScanner.js","../src/BubbleManager.js","../src/dropdown-manager-helpers/EdgeDetectionHelper.js","../src/DropdownManager.js","../src/InteractionHandler.js","../src/StyleManager.js","../src/CommandHandlers.js","../src/AutoGrow.js","../src/ValidationStateManager.js","../src/MobileKeyboardHandler.js","../src/AttachmentManager.js","../src/AttachmentStyleManager.js","../src/CSVModalManager.js","../src/CSVModalStyleManager.js","../src/TrustQuery.js"],"sourcesContent":["// OverlayRenderer - Renders text with styled matches in a line-based overlay\n// Much simpler than grid approach - each line is a div, matches are spans\n\nexport default class OverlayRenderer {\n /**\n * Create a renderer\n * @param {HTMLElement} overlay - Overlay container element\n * @param {Object} options - Rendering options\n */\n constructor(overlay, options = {}) {\n this.overlay = overlay;\n this.options = {\n theme: options.theme || 'light',\n commandHandlers: options.commandHandlers || null,\n debug: options.debug || false,\n ...options\n };\n\n if (this.options.debug) {\n console.log('[OverlayRenderer] Initialized');\n }\n }\n\n /**\n * Render text with matches\n * @param {string} text - Text content\n * @param {Array} matches - Array of match objects from CommandScanner\n */\n render(text, matches = []) {\n // Split text into lines\n const lines = text.split('\\n');\n\n // Build HTML for each line\n const linesHTML = lines.map((line, lineIndex) => {\n return this.renderLine(line, lineIndex, matches);\n }).join('');\n\n // Update overlay\n this.overlay.innerHTML = linesHTML;\n\n if (this.options.debug) {\n console.log('[OverlayRenderer] Rendered', lines.length, 'lines with', matches.length, 'matches');\n }\n }\n\n /**\n * Render a single line with matches\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number (0-indexed)\n * @param {Array} matches - All matches from scanner\n * @returns {string} HTML for line\n */\n renderLine(line, lineIndex, matches) {\n // Find matches on this line\n const lineMatches = this.getMatchesForLine(line, lineIndex, matches);\n\n if (lineMatches.length === 0) {\n // No matches - render plain line\n return `<div class=\"tq-line\">${this.escapeHtml(line) || '&nbsp;'}</div>`;\n }\n\n // Sort matches by start position\n lineMatches.sort((a, b) => a.start - b.start);\n\n // Build HTML with matches as spans\n let html = '<div class=\"tq-line\">';\n let lastIndex = 0;\n\n for (const match of lineMatches) {\n // Add text before match\n if (match.start > lastIndex) {\n html += this.escapeHtml(line.substring(lastIndex, match.start));\n }\n\n // Add match as styled span\n const matchText = line.substring(match.start, match.end);\n const classes = this.getMatchClasses(match);\n const dataAttrs = this.getMatchDataAttributes(match);\n const inlineStyles = this.getMatchInlineStyles(match);\n\n html += `<span class=\"${classes}\" ${dataAttrs} style=\"${inlineStyles}\">${this.escapeHtml(matchText)}</span>`;\n\n lastIndex = match.end;\n }\n\n // Add remaining text after last match\n if (lastIndex < line.length) {\n html += this.escapeHtml(line.substring(lastIndex));\n }\n\n // Handle empty lines\n if (line.length === 0) {\n html += '&nbsp;';\n }\n\n html += '</div>';\n\n return html;\n }\n\n /**\n * Get matches that apply to a specific line\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number\n * @param {Array} matches - All matches\n * @returns {Array} Matches for this line with adjusted positions\n */\n getMatchesForLine(line, lineIndex, matches) {\n const lineMatches = [];\n\n // Calculate absolute position of this line in the full text\n // (we'll need to know line starts to filter matches)\n // For now, matches already have line info from scanner\n\n for (const match of matches) {\n if (match.line === lineIndex) {\n lineMatches.push({\n ...match,\n start: match.col, // Column position on this line\n end: match.col + match.length\n });\n }\n }\n\n return lineMatches;\n }\n\n /**\n * Get CSS classes for a match\n * @param {Object} match - Match object\n * @returns {string} Space-separated class names\n */\n getMatchClasses(match) {\n const classes = ['tq-match'];\n\n // Add command type as class\n if (match.command && match.command.type) {\n classes.push(`tq-match-${match.command.type}`);\n }\n\n // Add behavior as class (bubble, dropdown, etc.)\n if (match.command && match.command.behavior) {\n classes.push(`tq-behavior-${match.command.behavior}`);\n }\n\n return classes.join(' ');\n }\n\n /**\n * Get data attributes for a match\n * @param {Object} match - Match object\n * @returns {string} Data attributes string\n */\n getMatchDataAttributes(match) {\n const attrs = [];\n\n // Store match text\n attrs.push(`data-match-text=\"${this.escapeAttr(match.text)}\"`);\n\n // Store command info\n if (match.command) {\n attrs.push(`data-command-id=\"${this.escapeAttr(match.command.id || '')}\"`);\n attrs.push(`data-command-type=\"${this.escapeAttr(match.command.commandType || '')}\"`);\n attrs.push(`data-command-path=\"${this.escapeAttr(match.command.commandPath || '')}\"`);\n attrs.push(`data-intent-path=\"${this.escapeAttr(match.command.intentPath || '')}\"`);\n\n // Store intent info as JSON for InteractionHandler\n if (match.command.intent) {\n attrs.push(`data-intent='${this.escapeAttr(JSON.stringify(match.command.intent))}'`);\n }\n\n // Determine behavior based on handler properties\n if (match.command.intent && match.command.intent.handler) {\n const handler = match.command.intent.handler;\n if (handler.options && Array.isArray(handler.options) && handler.options.length > 0) {\n attrs.push(`data-behavior=\"dropdown\"`);\n } else if (handler.message || handler['message-content'] || match.command.intent.description) {\n attrs.push(`data-behavior=\"bubble\"`);\n }\n }\n }\n\n // Store position info\n attrs.push(`data-line=\"${match.line}\"`);\n attrs.push(`data-col=\"${match.col}\"`);\n\n return attrs.join(' ');\n }\n\n /**\n * Get inline styles for a match based on command type or message-state\n * @param {Object} match - Match object\n * @returns {string} Inline style string\n */\n getMatchInlineStyles(match) {\n if (!this.options.commandHandlers || !match.command) {\n return 'pointer-events: auto; cursor: pointer;';\n }\n\n const commandType = match.command.commandType;\n\n // Create matchData with intent info for message-state lookup\n const matchData = {\n intent: match.command.intent,\n commandType: commandType\n };\n\n const styles = this.options.commandHandlers.getStyles(commandType, matchData);\n\n // Convert style object to CSS string\n const styleStr = Object.entries(styles)\n .map(([key, value]) => {\n // Convert camelCase to kebab-case\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n return `${cssKey}: ${value}`;\n })\n .join('; ');\n\n return styleStr + '; pointer-events: auto;';\n }\n\n /**\n * Escape HTML to prevent XSS\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n /**\n * Escape attribute value\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeAttr(text) {\n return String(text)\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n }\n}\n","// CommandScanner - Scans text for word matches based on command map\n// Uses simple string matching (not regex) for simplicity and performance\n\nexport default class CommandScanner {\n constructor(options = {}) {\n this.commandMap = null;\n this.commands = [];\n this.debug = options.debug || false;\n console.log('[CommandScanner] Initialized');\n }\n\n /**\n * Set command map\n * @param {Object} commandMap - Command map object\n */\n setCommandMap(commandMap) {\n this.commandMap = commandMap;\n this.commands = this.parseCommandMap(commandMap);\n console.log('[CommandScanner] Command map set with', this.commands.length, 'commands');\n }\n\n /**\n * Parse simplified TQL triggers format\n * Format: { \"tql-triggers\": { \"error\": [...], \"warning\": [...], \"info\": [...] } }\n * @param {Object} triggerMap - Trigger map from tql-triggers.json\n * @returns {Array} Array of command objects\n */\n parseCommandMap(triggerMap) {\n const commands = [];\n\n // Extract tql-triggers\n const triggers = triggerMap['tql-triggers'] || triggerMap;\n\n if (!triggers || typeof triggers !== 'object') {\n console.warn('[CommandScanner] Invalid trigger map structure');\n return commands;\n }\n\n // Iterate through each message state (error, warning, info)\n Object.keys(triggers).forEach(messageState => {\n // Skip metadata fields\n if (messageState.startsWith('$')) {\n return;\n }\n\n const triggerList = triggers[messageState];\n\n if (!Array.isArray(triggerList)) {\n return;\n }\n\n // Process each trigger in this state\n triggerList.forEach((trigger, index) => {\n const handler = trigger.handler || {};\n const description = trigger.description || handler.message || '';\n const category = trigger.category || 'general';\n\n // Create intent object compatible with handlers\n const intent = {\n description: description,\n handler: {\n ...handler,\n 'message-state': messageState // Add message-state for styling\n },\n category: category\n };\n\n // Handle regex patterns\n if (trigger.type === 'regex' && trigger.regex) {\n trigger.regex.forEach(pattern => {\n commands.push({\n id: `${messageState}-${category}-${index}`,\n match: pattern,\n matchType: 'regex',\n messageState: messageState,\n category: category,\n intent: intent,\n handler: intent.handler,\n caseSensitive: true,\n wholeWord: false\n });\n });\n }\n\n // Handle string matches\n if (trigger.type === 'match' && trigger.match) {\n trigger.match.forEach(matchStr => {\n commands.push({\n id: `${messageState}-${category}-${index}`,\n match: matchStr,\n matchType: 'string',\n messageState: messageState,\n category: category,\n intent: intent,\n handler: intent.handler,\n caseSensitive: false, // Case insensitive for natural language\n wholeWord: true // Whole word matching\n });\n });\n }\n });\n });\n\n // Sort by length (longest first) to match longer patterns first\n commands.sort((a, b) => b.match.length - a.match.length);\n\n return commands;\n }\n\n /**\n * Scan text for all matches\n * @param {string} text - Text to scan\n * @returns {Array} Array of match objects with position info\n */\n scan(text) {\n if (!this.commands || this.commands.length === 0) {\n return [];\n }\n\n const matches = [];\n const lines = text.split('\\n');\n\n // Scan each line\n lines.forEach((line, lineIndex) => {\n const lineMatches = this.scanLine(line, lineIndex);\n matches.push(...lineMatches);\n });\n\n // Only log when matches are found\n if (matches.length > 0) {\n console.log(`[CommandScanner] Found ${matches.length} matches`);\n }\n\n return matches;\n }\n\n /**\n * Scan a single line for matches\n * @param {string} line - Line text\n * @param {number} lineIndex - Line number (0-indexed)\n * @returns {Array} Matches on this line\n */\n scanLine(line, lineIndex) {\n const matches = [];\n const matchedRanges = []; // Track matched positions to avoid overlaps\n\n for (const command of this.commands) {\n const commandMatches = this.findMatches(line, command, lineIndex);\n\n // Filter out overlapping matches\n for (const match of commandMatches) {\n if (!this.overlapsExisting(match, matchedRanges)) {\n matches.push(match);\n matchedRanges.push({ start: match.col, end: match.col + match.length });\n }\n }\n }\n\n // Sort matches by column position\n matches.sort((a, b) => a.col - b.col);\n\n return matches;\n }\n\n /**\n * Find all matches of a command in a line\n * @param {string} line - Line text\n * @param {Object} command - Command to search for\n * @param {number} lineIndex - Line number\n * @returns {Array} Matches\n */\n findMatches(line, command, lineIndex) {\n const matches = [];\n\n // Handle regex patterns\n if (command.matchType === 'regex') {\n try {\n const regex = new RegExp(command.match, 'g');\n let match;\n\n while ((match = regex.exec(line)) !== null) {\n if (this.debug) {\n console.log('[CommandScanner] Regex match debug:', {\n pattern: command.match,\n line: line,\n 'match[0]': match[0],\n 'match[0].length': match[0].length,\n index: match.index\n });\n }\n\n matches.push({\n text: match[0],\n line: lineIndex,\n col: match.index,\n length: match[0].length,\n command: command\n });\n }\n } catch (e) {\n console.warn('[CommandScanner] Invalid regex pattern:', command.match, e);\n }\n\n return matches;\n }\n\n // Handle string patterns (original logic)\n const searchText = command.caseSensitive ? line : line.toLowerCase();\n const pattern = command.caseSensitive ? command.match : command.match.toLowerCase();\n\n let startIndex = 0;\n\n while (true) {\n const index = searchText.indexOf(pattern, startIndex);\n\n if (index === -1) {\n break; // No more matches\n }\n\n // Check if this is a whole word match (if required)\n if (command.wholeWord && !this.isWholeWordMatch(line, index, pattern.length)) {\n startIndex = index + 1;\n continue;\n }\n\n // Create match object\n matches.push({\n text: line.substring(index, index + pattern.length),\n line: lineIndex,\n col: index,\n length: pattern.length,\n command: command\n });\n\n startIndex = index + pattern.length;\n }\n\n return matches;\n }\n\n /**\n * Check if match is a whole word (not part of a larger word)\n * @param {string} text - Text to check\n * @param {number} start - Start index of match\n * @param {number} length - Length of match\n * @returns {boolean} True if whole word\n */\n isWholeWordMatch(text, start, length) {\n const end = start + length;\n\n // Check character before\n if (start > 0) {\n const before = text[start - 1];\n if (this.isWordChar(before)) {\n return false;\n }\n }\n\n // Check character after - treat \"/\" as a word boundary (resolved trigger)\n if (end < text.length) {\n const after = text[end];\n if (this.isWordChar(after) || after === '/') {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if character is a word character (alphanumeric or underscore)\n * @param {string} char - Character to check\n * @returns {boolean} True if word character\n */\n isWordChar(char) {\n return /[a-zA-Z0-9_]/.test(char);\n }\n\n /**\n * Check if a match overlaps with existing matches\n * @param {Object} match - New match to check\n * @param {Array} existingRanges - Array of {start, end} ranges\n * @returns {boolean} True if overlaps\n */\n overlapsExisting(match, existingRanges) {\n const matchStart = match.col;\n const matchEnd = match.col + match.length;\n\n for (const range of existingRanges) {\n // Check for overlap\n if (matchStart < range.end && matchEnd > range.start) {\n return true;\n }\n }\n\n return false;\n }\n}\n","// BubbleManager - Handles hover bubble tooltips for matched words\n\nexport default class BubbleManager {\n /**\n * Create bubble manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n bubbleDelay: options.bubbleDelay || 200,\n styleManager: options.styleManager || null,\n commandHandlers: options.commandHandlers || null,\n ...options\n };\n\n this.currentBubble = null;\n this.hoverTimeout = null;\n\n console.log('[BubbleManager] Initialized');\n }\n\n /**\n * Show bubble for a match element\n * @param {HTMLElement} matchEl - Match element\n * @param {Object} matchData - Match data\n */\n showBubble(matchEl, matchData) {\n // Remove any existing bubble\n this.hideBubble();\n\n // Get bubble content\n const content = this.getBubbleContent(matchData);\n\n if (!content) {\n return; // No content to show\n }\n\n // Create bubble\n const bubble = document.createElement('div');\n bubble.className = 'tq-bubble';\n\n // Add header container based on message-state\n const messageState = matchData.intent?.handler?.['message-state'] || 'info';\n this.createBubbleHeader(bubble, messageState);\n\n // Add content container\n const contentContainer = document.createElement('div');\n contentContainer.className = 'tq-bubble-content';\n contentContainer.innerHTML = content;\n bubble.appendChild(contentContainer);\n\n // Apply inline styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyBubbleStyles(bubble);\n }\n\n // Add to document\n document.body.appendChild(bubble);\n this.currentBubble = bubble;\n\n // Position bubble relative to match element\n this.positionBubble(bubble, matchEl);\n\n // Auto-hide when mouse leaves bubble\n bubble.addEventListener('mouseleave', () => {\n this.hideBubble();\n });\n\n console.log('[BubbleManager] Bubble shown for:', matchData.text);\n }\n\n /**\n * Create header container for bubble\n * @param {HTMLElement} bubble - Bubble element\n * @param {string} messageState - Message state (error, warning, info)\n */\n createBubbleHeader(bubble, messageState) {\n const headerContainer = document.createElement('div');\n headerContainer.className = 'bubble-header-container';\n headerContainer.setAttribute('data-type', messageState);\n\n // Create image\n const img = document.createElement('img');\n img.src = `./assets/trustquery-${messageState}.svg`;\n img.style.height = '24px';\n img.style.width = 'auto';\n\n // Create text span\n const span = document.createElement('span');\n const textMap = {\n 'error': 'TrustQuery Stop',\n 'warning': 'TrustQuery Clarify',\n 'info': 'TrustQuery Quick Link'\n };\n span.textContent = textMap[messageState] || 'TrustQuery';\n\n // Append to header\n headerContainer.appendChild(img);\n headerContainer.appendChild(span);\n\n // Apply styles to header via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyBubbleHeaderStyles(headerContainer, messageState);\n }\n\n bubble.appendChild(headerContainer);\n }\n\n /**\n * Hide current bubble\n */\n hideBubble() {\n if (this.currentBubble) {\n this.currentBubble.remove();\n this.currentBubble = null;\n }\n }\n\n /**\n * Get bubble content using command handler\n * @param {Object} matchData - Match data including command and intent\n * @returns {string|null} HTML content or null\n */\n getBubbleContent(matchData) {\n // Check for new simplified format first (intent.handler.message)\n if (matchData.intent && matchData.intent.handler) {\n const handler = matchData.intent.handler;\n const message = handler.message || handler['message-content'] || matchData.intent.description;\n\n if (message) {\n // Return just the message text - header is added separately\n return this.escapeHtml(message);\n }\n }\n\n // Use command handler if available (legacy support)\n if (this.options.commandHandlers && matchData.commandType) {\n const content = this.options.commandHandlers.getBubbleContent(matchData.commandType, matchData);\n if (content) {\n return content;\n }\n }\n\n // Fallback to legacy method\n const command = matchData.command || {};\n\n if (command.content) {\n return command.content;\n }\n\n if (command.bubbleContent) {\n return command.bubbleContent;\n }\n\n if (command.description) {\n return `<div class=\"tq-bubble-description\">${this.escapeHtml(command.description)}</div>`;\n }\n\n return null;\n }\n\n /**\n * Position bubble relative to match element\n * @param {HTMLElement} bubble - Bubble element\n * @param {HTMLElement} matchEl - Match element\n */\n positionBubble(bubble, matchEl) {\n const rect = matchEl.getBoundingClientRect();\n const bubbleRect = bubble.getBoundingClientRect();\n\n // Position above match by default (since input is at bottom)\n let top = rect.top + window.scrollY - bubbleRect.height - 8;\n let left = rect.left + window.scrollX;\n\n // If bubble goes off top edge, position below instead\n if (top < window.scrollY) {\n top = rect.bottom + window.scrollY + 8;\n }\n\n // Check if bubble goes off right edge\n if (left + bubbleRect.width > window.innerWidth) {\n left = window.innerWidth - bubbleRect.width - 10;\n }\n\n bubble.style.top = `${top}px`;\n bubble.style.left = `${left}px`;\n }\n\n /**\n * Escape HTML\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n /**\n * Cleanup\n */\n cleanup() {\n this.hideBubble();\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n /**\n * Destroy\n */\n destroy() {\n this.cleanup();\n console.log('[BubbleManager] Destroyed');\n }\n}\n","// EdgeDetectionHelper - Calculates dropdown positioning to prevent overflow off viewport edges\n\nexport default class EdgeDetectionHelper {\n /**\n * Calculate optimal position for dropdown to prevent viewport overflow\n * @param {Object} options - Positioning options\n * @param {DOMRect} options.matchRect - Bounding rect of the match element\n * @param {DOMRect} options.dropdownRect - Bounding rect of the dropdown\n * @param {number} options.offset - Offset from match element (default: 28)\n * @param {number} options.padding - Padding from viewport edges (default: 10)\n * @returns {Object} - { top, left } position in pixels\n */\n static calculatePosition({ matchRect, dropdownRect, offset = 28, padding = 10 }) {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n console.log('[EdgeDetectionHelper] Calculation inputs:');\n console.log(' Match rect:', { left: matchRect.left, top: matchRect.top, width: matchRect.width });\n console.log(' Dropdown rect:', { width: dropdownRect.width, height: dropdownRect.height });\n console.log(' Viewport:', { width: viewportWidth, height: viewportHeight });\n console.log(' Scroll:', { x: window.scrollX, y: window.scrollY });\n\n // Calculate initial position (above match by default, since input is at bottom)\n let top = matchRect.top + window.scrollY - dropdownRect.height - offset;\n let left = matchRect.left + window.scrollX;\n\n console.log(' Initial position:', { left, top });\n\n // Vertical positioning: Check if dropdown goes off top edge\n if (top < window.scrollY) {\n // Position below match instead\n top = matchRect.bottom + window.scrollY + offset;\n console.log(' Adjusted for top overflow, new top:', top);\n }\n\n // Horizontal positioning: Check if dropdown goes off right edge\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = viewportWidth + window.scrollX;\n\n console.log(' Right edge check:', { rightEdge, viewportRightEdge: viewportRightEdge - padding });\n\n if (rightEdge > viewportRightEdge - padding) {\n // Calculate how much we overflow past the right edge\n const overflow = rightEdge - (viewportRightEdge - padding);\n console.log(' Right overflow detected:', overflow, 'px');\n\n // Shift left by the overflow amount\n left = left - overflow;\n console.log(' Adjusted left position:', left);\n\n // Ensure we don't go off the left edge either\n const minLeft = window.scrollX + padding;\n if (left < minLeft) {\n console.log(' Hit left edge, clamping to:', minLeft);\n left = minLeft;\n }\n }\n\n // Also check left edge (in case match is near left edge)\n const minLeft = window.scrollX + padding;\n if (left < minLeft) {\n console.log(' Left edge adjustment:', minLeft);\n left = minLeft;\n }\n\n console.log('[EdgeDetectionHelper] Final position:', { left, top });\n\n return { top, left };\n }\n\n /**\n * Check if dropdown would overflow the right edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} padding - Padding from edge\n * @returns {boolean} - True if would overflow\n */\n static wouldOverflowRight(matchRect, dropdownRect, padding = 10) {\n const left = matchRect.left + window.scrollX;\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = window.innerWidth + window.scrollX;\n\n return rightEdge > viewportRightEdge - padding;\n }\n\n /**\n * Check if dropdown would overflow the top edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} offset - Offset from match\n * @returns {boolean} - True if would overflow\n */\n static wouldOverflowTop(matchRect, dropdownRect, offset = 28) {\n const top = matchRect.top + window.scrollY - dropdownRect.height - offset;\n return top < window.scrollY;\n }\n\n /**\n * Calculate overflow amount on the right edge\n * @param {DOMRect} matchRect - Match element rect\n * @param {DOMRect} dropdownRect - Dropdown rect\n * @param {number} padding - Padding from edge\n * @returns {number} - Overflow amount in pixels (0 if no overflow)\n */\n static calculateRightOverflow(matchRect, dropdownRect, padding = 10) {\n const left = matchRect.left + window.scrollX;\n const rightEdge = left + dropdownRect.width;\n const viewportRightEdge = window.innerWidth + window.scrollX;\n\n const overflow = rightEdge - (viewportRightEdge - padding);\n return Math.max(0, overflow);\n }\n}\n","// DropdownManager - Handles dropdown menus with filtering, keyboard navigation, and selection\n\nimport EdgeDetectionHelper from './dropdown-manager-helpers/EdgeDetectionHelper.js';\n\nexport default class DropdownManager {\n /**\n * Create dropdown manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n styleManager: options.styleManager || null,\n textarea: options.textarea || null,\n onWordClick: options.onWordClick || null,\n dropdownOffset: options.dropdownOffset || 10, // Configurable offset from trigger word\n ...options\n };\n\n this.activeDropdown = null;\n this.activeDropdownMatch = null;\n this.dropdownOptions = null;\n this.dropdownMatchData = null;\n this.selectedDropdownIndex = 0;\n this.keyboardHandler = null;\n\n if (this.options.debug) {\n console.log('[DropdownManager] Initialized with offset:', this.options.dropdownOffset);\n }\n }\n\n /**\n * Show dropdown for a match\n * @param {HTMLElement} matchEl - Match element\n * @param {Object} matchData - Match data\n */\n showDropdown(matchEl, matchData) {\n // Close any existing dropdown\n this.hideDropdown();\n\n const command = matchData.command;\n\n // Get dropdown options - check intent.handler.options first (new format)\n const options = matchData.intent?.handler?.options || command.options || command.dropdownOptions || [];\n\n if (options.length === 0) {\n console.warn('[DropdownManager] No dropdown options for:', matchData.text);\n return;\n }\n\n // Store reference to match element\n this.activeDropdownMatch = matchEl;\n this.selectedDropdownIndex = 0;\n\n // Create dropdown\n const dropdown = document.createElement('div');\n dropdown.className = 'tq-dropdown';\n\n // Apply inline styles via StyleManager (pass category for width adjustment)\n const category = matchData.intent?.category || '';\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownStyles(dropdown, category);\n }\n\n // Add header container based on message-state\n const messageState = matchData.intent?.handler?.['message-state'] || 'info';\n this.createHeaderContainer(dropdown, messageState);\n\n // Add description row if message exists\n const message = matchData.intent?.handler?.message;\n if (message) {\n this.createDescriptionRow(dropdown, message, messageState);\n }\n\n // Check if filter is enabled\n const hasFilter = matchData.intent?.handler?.filter === true;\n\n // Add filter input if enabled\n if (hasFilter) {\n this.createFilterInput(dropdown, matchData);\n }\n\n // Create dropdown items\n this.createDropdownItems(dropdown, options, matchData);\n\n // Prevent textarea blur when clicking dropdown (except filter input)\n dropdown.addEventListener('mousedown', (e) => {\n // Allow filter input to receive focus naturally\n if (!e.target.classList.contains('tq-dropdown-filter')) {\n e.preventDefault(); // Prevent blur on textarea for items\n }\n });\n\n // Add to document\n document.body.appendChild(dropdown);\n this.activeDropdown = dropdown;\n this.dropdownOptions = options;\n this.dropdownMatchData = matchData;\n\n // Position dropdown\n this.positionDropdown(dropdown, matchEl);\n\n // Setup keyboard navigation\n this.setupKeyboardHandlers();\n\n // Close on click outside (using mousedown to match icon behavior)\n setTimeout(() => {\n document.addEventListener('mousedown', this.closeDropdownHandler);\n document.addEventListener('click', this.closeDropdownHandler);\n }, 0);\n\n if (this.options.debug) {\n console.log('[DropdownManager] Dropdown shown with', options.length, 'options');\n }\n }\n\n /**\n * Create header container for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} messageState - Message state (error, warning, info)\n */\n createHeaderContainer(dropdown, messageState) {\n const headerContainer = document.createElement('div');\n headerContainer.className = 'bubble-header-container';\n headerContainer.setAttribute('data-type', messageState);\n\n // Create image\n const img = document.createElement('img');\n img.src = `./assets/trustquery-${messageState}.svg`;\n img.style.height = '24px';\n img.style.width = 'auto';\n\n // Create text span\n const span = document.createElement('span');\n const textMap = {\n 'error': 'TrustQuery Stop',\n 'warning': 'TrustQuery Clarify',\n 'info': 'TrustQuery Quick Link'\n };\n span.textContent = textMap[messageState] || 'TrustQuery';\n\n // Append to header\n headerContainer.appendChild(img);\n headerContainer.appendChild(span);\n\n // Apply styles to header via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownHeaderStyles(headerContainer, messageState);\n }\n\n dropdown.appendChild(headerContainer);\n }\n\n /**\n * Create description row for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} message - Description message\n * @param {string} messageState - Message state (error, warning, info)\n */\n createDescriptionRow(dropdown, message, messageState) {\n const descriptionRow = document.createElement('div');\n descriptionRow.className = 'tq-dropdown-description';\n descriptionRow.textContent = message;\n\n // Apply styles to description via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownDescriptionStyles(descriptionRow, messageState);\n }\n\n dropdown.appendChild(descriptionRow);\n }\n\n /**\n * Create filter input for dropdown\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Object} matchData - Match data\n */\n createFilterInput(dropdown, matchData) {\n const filterInput = document.createElement('input');\n filterInput.type = 'text';\n filterInput.className = 'tq-dropdown-filter';\n filterInput.placeholder = 'Filter options...';\n\n // Apply inline styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownFilterStyles(filterInput);\n }\n\n // Filter click handling is managed by dropdown and closeDropdownHandler\n // No special mousedown/blur handling needed - filter focuses naturally\n\n // Filter options as user types\n filterInput.addEventListener('input', (e) => {\n const query = e.target.value.toLowerCase();\n const items = dropdown.querySelectorAll('.tq-dropdown-item');\n let firstVisibleIndex = -1;\n\n items.forEach((item, index) => {\n const text = item.textContent.toLowerCase();\n const matches = text.includes(query);\n item.style.display = matches ? 'block' : 'none';\n\n // Track first visible item for selection\n if (matches && firstVisibleIndex === -1) {\n firstVisibleIndex = index;\n }\n });\n\n // Update selected index to first visible item\n if (firstVisibleIndex !== -1) {\n this.selectedDropdownIndex = firstVisibleIndex;\n this.updateDropdownSelection();\n }\n });\n\n // Prevent dropdown keyboard navigation from affecting filter input\n filterInput.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n // Move focus to dropdown items\n filterInput.blur();\n this.options.textarea.focus();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.selectCurrentDropdownItem();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.hideDropdown();\n }\n });\n\n dropdown.appendChild(filterInput);\n\n // Don't auto-focus - keep focus on textarea for natural typing/arrow key flow\n }\n\n /**\n * Create dropdown items\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Array} options - Dropdown options\n * @param {Object} matchData - Match data\n */\n createDropdownItems(dropdown, options, matchData) {\n // Check if this is a display-menu-with-uri category\n const category = matchData.intent?.category || '';\n const hasUriSupport = category === 'display-menu-with-uri';\n\n options.forEach((option, index) => {\n // Check if this is a user-input option\n if (typeof option === 'object' && option['user-input'] === true) {\n this.createUserInputOption(dropdown, option, matchData);\n return;\n }\n\n const item = document.createElement('div');\n item.className = 'tq-dropdown-item';\n\n // Create label text\n const labelText = typeof option === 'string' ? option : option.label || option.value;\n\n // If display-menu-with-uri and option has uri, create label + link icon\n if (hasUriSupport && typeof option === 'object' && option.uri) {\n // Create label span\n const labelSpan = document.createElement('span');\n labelSpan.className = 'tq-dropdown-item-label';\n labelSpan.textContent = labelText;\n labelSpan.style.flex = '1';\n labelSpan.style.cursor = 'pointer';\n\n // Create link with truncated URI text\n const linkIcon = document.createElement('a');\n linkIcon.className = 'tq-dropdown-item-link';\n linkIcon.href = option.uri;\n linkIcon.target = '_blank';\n linkIcon.rel = 'noopener noreferrer';\n\n // Truncate URI to 20 characters\n let displayUri = option.uri;\n if (displayUri.length > 20) {\n displayUri = displayUri.substring(0, 20) + '...';\n }\n linkIcon.textContent = displayUri;\n\n linkIcon.style.marginLeft = '8px';\n linkIcon.style.fontSize = '12px';\n linkIcon.style.color = '#3b82f6';\n linkIcon.style.textDecoration = 'underline';\n linkIcon.style.opacity = '0.7';\n linkIcon.style.transition = 'opacity 0.2s';\n linkIcon.style.whiteSpace = 'nowrap';\n linkIcon.title = option.uri;\n linkIcon.setAttribute('aria-label', `Open ${labelText} documentation`);\n\n // Hover effect for link icon\n linkIcon.addEventListener('mouseenter', () => {\n linkIcon.style.opacity = '1';\n });\n linkIcon.addEventListener('mouseleave', () => {\n linkIcon.style.opacity = '0.6';\n });\n\n // Prevent link click from selecting the option\n linkIcon.addEventListener('click', (e) => {\n e.stopPropagation();\n // Link will open naturally via href\n });\n\n // Set item to flex layout\n item.style.display = 'flex';\n item.style.alignItems = 'center';\n item.style.justifyContent = 'space-between';\n\n item.appendChild(labelSpan);\n item.appendChild(linkIcon);\n\n // Only label click should select the option\n labelSpan.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\n });\n } else {\n // Regular option without URI\n item.textContent = labelText;\n\n // Click anywhere on item to select\n item.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\n });\n }\n\n // Highlight first item by default\n if (index === 0) {\n item.classList.add('tq-dropdown-item-selected');\n }\n\n // Apply inline styles to item via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownItemStyles(item);\n }\n\n dropdown.appendChild(item);\n });\n }\n\n /**\n * Create user input option\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {Object} option - Option with user-input flag\n * @param {Object} matchData - Match data\n */\n createUserInputOption(dropdown, option, matchData) {\n const container = document.createElement('div');\n container.className = 'tq-dropdown-user-input-container tq-dropdown-item';\n container.setAttribute('data-user-input', 'true');\n\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'tq-dropdown-user-input';\n input.placeholder = option.placeholder || 'Enter custom value...';\n\n container.appendChild(input);\n\n // Apply styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyUserInputStyles(container, input);\n }\n\n // Click on container focuses input\n container.addEventListener('click', (e) => {\n e.stopPropagation();\n input.focus();\n });\n\n // Handle submit on Enter key\n const handleSubmit = () => {\n const value = input.value.trim();\n if (value) {\n const customOption = {\n label: value,\n 'on-select': {\n display: value\n }\n };\n this.handleDropdownSelect(customOption, matchData);\n this.hideDropdown();\n }\n };\n\n input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n handleSubmit();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.hideDropdown();\n } else if (e.key === 'ArrowDown') {\n // Navigate to next item\n e.preventDefault();\n e.stopPropagation();\n this.moveDropdownSelection(1);\n this.options.textarea.focus();\n } else if (e.key === 'ArrowUp') {\n // Navigate to previous item\n e.preventDefault();\n e.stopPropagation();\n this.moveDropdownSelection(-1);\n this.options.textarea.focus();\n }\n });\n\n dropdown.appendChild(container);\n }\n\n /**\n * Hide current dropdown\n */\n hideDropdown() {\n if (this.activeDropdown) {\n this.activeDropdown.remove();\n this.activeDropdown = null;\n this.activeDropdownMatch = null;\n this.dropdownOptions = null;\n this.dropdownMatchData = null;\n this.selectedDropdownIndex = 0;\n document.removeEventListener('mousedown', this.closeDropdownHandler);\n document.removeEventListener('click', this.closeDropdownHandler);\n document.removeEventListener('keydown', this.keyboardHandler);\n }\n }\n\n /**\n * Close dropdown handler (bound to document)\n */\n closeDropdownHandler = (e) => {\n // Only close if clicking outside the dropdown AND not on the trigger element\n if (this.activeDropdown && !this.activeDropdown.contains(e.target)) {\n // Check if clicking on the trigger element itself - don't close in that case\n if (this.activeDropdownMatch && (this.activeDropdownMatch === e.target || this.activeDropdownMatch.contains(e.target))) {\n return;\n }\n this.hideDropdown();\n }\n }\n\n /**\n * Position dropdown relative to match element\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {HTMLElement} matchEl - Match element\n */\n positionDropdown(dropdown, matchEl) {\n const matchRect = matchEl.getBoundingClientRect();\n\n // Force a layout calculation by accessing offsetWidth\n // This ensures we get the correct dropdown dimensions after styles are applied\n const _ = dropdown.offsetWidth;\n\n const dropdownRect = dropdown.getBoundingClientRect();\n\n console.log('[DropdownManager] Positioning Debug:');\n console.log(' Trigger position (x, y):', matchRect.left, matchRect.top);\n console.log(' Dropdown width:', dropdownRect.width);\n console.log(' Viewport width:', window.innerWidth);\n\n // Use EdgeDetectionHelper to calculate optimal position\n // Increased padding to account for body margins/transforms and ensure visible clearance\n const position = EdgeDetectionHelper.calculatePosition({\n matchRect,\n dropdownRect,\n offset: this.options.dropdownOffset,\n padding: 35\n });\n\n console.log(' Calculated dropdown position (x, y):', position.left, position.top);\n\n dropdown.style.top = `${position.top}px`;\n dropdown.style.left = `${position.left}px`;\n\n // Verify the position was actually applied\n const computedStyle = window.getComputedStyle(dropdown);\n const actualRect = dropdown.getBoundingClientRect();\n console.log(' Verified applied styles:');\n console.log(' styleTop:', dropdown.style.top);\n console.log(' styleLeft:', dropdown.style.left);\n console.log(' computedPosition:', computedStyle.position);\n console.log(' actualBoundingRect:', JSON.stringify({\n left: actualRect.left,\n top: actualRect.top,\n right: actualRect.right,\n bottom: actualRect.bottom,\n width: actualRect.width,\n height: actualRect.height\n }));\n console.log(' Dropdown right edge:', actualRect.left + actualRect.width, 'vs viewport width:', window.innerWidth);\n }\n\n /**\n * Setup keyboard handlers for dropdown navigation\n */\n setupKeyboardHandlers() {\n // Remove old handler if exists\n if (this.keyboardHandler) {\n document.removeEventListener('keydown', this.keyboardHandler);\n }\n\n // Create new handler\n this.keyboardHandler = (e) => {\n // Only handle if dropdown is active\n if (!this.activeDropdown) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveDropdownSelection(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveDropdownSelection(-1);\n break;\n case 'Enter':\n e.preventDefault();\n this.selectCurrentDropdownItem();\n break;\n case 'Escape':\n e.preventDefault();\n this.hideDropdown();\n break;\n }\n };\n\n // Attach handler\n document.addEventListener('keydown', this.keyboardHandler);\n }\n\n /**\n * Move dropdown selection up or down\n * @param {number} direction - 1 for down, -1 for up\n */\n moveDropdownSelection(direction) {\n if (!this.activeDropdown || !this.dropdownOptions) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n const visibleItems = Array.from(items).filter(item => item.style.display !== 'none');\n\n if (visibleItems.length === 0) {\n return;\n }\n\n // Find current selected visible index\n let currentVisibleIndex = visibleItems.findIndex((item, index) => {\n return Array.from(items).indexOf(item) === this.selectedDropdownIndex;\n });\n\n // Move to next/prev visible item\n currentVisibleIndex += direction;\n\n // Wrap around visible items only\n if (currentVisibleIndex < 0) {\n currentVisibleIndex = visibleItems.length - 1;\n } else if (currentVisibleIndex >= visibleItems.length) {\n currentVisibleIndex = 0;\n }\n\n // Update selected index to the actual index\n this.selectedDropdownIndex = Array.from(items).indexOf(visibleItems[currentVisibleIndex]);\n\n // Update visual selection\n this.updateDropdownSelection();\n }\n\n /**\n * Update visual selection in dropdown\n */\n updateDropdownSelection() {\n if (!this.activeDropdown) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n items.forEach((item, index) => {\n if (index === this.selectedDropdownIndex) {\n item.classList.add('tq-dropdown-item-selected');\n // Scroll into view if needed\n item.scrollIntoView({ block: 'nearest' });\n\n // If this is a user input item, focus the input\n if (item.getAttribute('data-user-input') === 'true') {\n const input = item.querySelector('.tq-dropdown-user-input');\n if (input) {\n setTimeout(() => input.focus(), 0);\n }\n }\n } else {\n item.classList.remove('tq-dropdown-item-selected');\n\n // If this is a user input item, blur the input when navigating away\n if (item.getAttribute('data-user-input') === 'true') {\n const input = item.querySelector('.tq-dropdown-user-input');\n if (input) {\n input.blur();\n }\n }\n }\n });\n }\n\n /**\n * Select the currently highlighted dropdown item\n */\n selectCurrentDropdownItem() {\n if (!this.dropdownOptions || !this.dropdownMatchData) {\n return;\n }\n\n const items = this.activeDropdown.querySelectorAll('.tq-dropdown-item');\n const selectedItem = items[this.selectedDropdownIndex];\n\n // Check if this is a user input item\n if (selectedItem && selectedItem.getAttribute('data-user-input') === 'true') {\n // Focus the input field instead of selecting\n const input = selectedItem.querySelector('.tq-dropdown-user-input');\n if (input) {\n input.focus();\n }\n return;\n }\n\n const selectedOption = this.dropdownOptions[this.selectedDropdownIndex];\n this.handleDropdownSelect(selectedOption, this.dropdownMatchData);\n this.hideDropdown();\n }\n\n /**\n * Handle dropdown option selection\n * @param {*} option - Selected option\n * @param {Object} matchData - Match data\n */\n handleDropdownSelect(option, matchData) {\n if (this.options.debug) {\n console.log('[DropdownManager] Dropdown option selected:', option, 'for:', matchData.text);\n }\n\n // IMPORTANT: Trigger callback FIRST, before input event dispatch\n // The input event triggers a synchronous re-render that removes the dropdown,\n // so the callback must run while everything is still intact\n if (this.options.onWordClick) {\n this.options.onWordClick({\n ...matchData,\n selectedOption: option\n });\n }\n\n // Check if option has on-select.display\n if (option['on-select'] && option['on-select'].display && this.options.textarea) {\n const displayText = option['on-select'].display;\n const textarea = this.options.textarea;\n const text = textarea.value;\n\n // Find the trigger text position\n const lines = text.split('\\n');\n const line = lines[matchData.line];\n\n if (line) {\n // Append to trigger text with \"/\" separator\n const before = line.substring(0, matchData.col);\n const after = line.substring(matchData.col + matchData.text.length);\n const newText = matchData.text + '/' + displayText;\n lines[matchData.line] = before + newText + after;\n\n // Update textarea\n textarea.value = lines.join('\\n');\n\n // Trigger input event to re-render\n const inputEvent = new Event('input', { bubbles: true });\n textarea.dispatchEvent(inputEvent);\n\n if (this.options.debug) {\n console.log('[DropdownManager] Appended to', matchData.text, '→', newText);\n }\n }\n }\n }\n\n /**\n * Cleanup\n */\n cleanup() {\n this.hideDropdown();\n }\n\n /**\n * Destroy\n */\n destroy() {\n this.cleanup();\n if (this.options.debug) {\n console.log('[DropdownManager] Destroyed');\n }\n }\n}\n","// InteractionHandler - Orchestrates hover bubbles and click interactions on matched words\n// Delegates to BubbleManager and DropdownManager for specific functionality\n\nimport BubbleManager from './BubbleManager.js';\nimport DropdownManager from './DropdownManager.js';\n\nexport default class InteractionHandler {\n /**\n * Create interaction handler\n * @param {HTMLElement} overlay - Overlay element containing matches\n * @param {Object} options - Configuration\n */\n constructor(overlay, options = {}) {\n this.overlay = overlay;\n this.options = {\n bubbleDelay: options.bubbleDelay || 200,\n onWordClick: options.onWordClick || null,\n onWordHover: options.onWordHover || null,\n styleManager: options.styleManager || null,\n commandHandlers: options.commandHandlers || null,\n textarea: options.textarea || null,\n ...options\n };\n\n this.hoverTimeout = null;\n\n // Create manager instances\n this.bubbleManager = new BubbleManager({\n bubbleDelay: this.options.bubbleDelay,\n styleManager: this.options.styleManager,\n commandHandlers: this.options.commandHandlers,\n debug: this.options.debug\n });\n\n this.dropdownManager = new DropdownManager({\n styleManager: this.options.styleManager,\n textarea: this.options.textarea,\n onWordClick: this.options.onWordClick,\n dropdownOffset: this.options.dropdownOffset,\n debug: this.options.debug\n });\n\n if (this.options.debug) {\n console.log('[InteractionHandler] Initialized');\n }\n }\n\n /**\n * Update handlers after overlay re-render\n * Attach event listeners to all .tq-match elements\n */\n update() {\n // Remove old handlers (if any)\n this.cleanup();\n\n // Find all match elements\n const matches = this.overlay.querySelectorAll('.tq-match');\n\n matches.forEach(matchEl => {\n const behavior = matchEl.getAttribute('data-behavior');\n\n // Hover events for bubbles\n matchEl.addEventListener('mouseenter', (e) => this.handleMouseEnter(e, matchEl));\n matchEl.addEventListener('mouseleave', (e) => this.handleMouseLeave(e, matchEl));\n\n // Click events for dropdowns/actions\n matchEl.addEventListener('click', (e) => this.handleClick(e, matchEl));\n\n // Add hover class for CSS styling\n matchEl.classList.add('tq-hoverable');\n\n // Auto-show dropdown for dropdown-behavior matches\n if (behavior === 'dropdown') {\n const matchData = this.getMatchData(matchEl);\n // Only show if this isn't the currently active dropdown match\n if (!this.dropdownManager.activeDropdownMatch ||\n this.dropdownManager.activeDropdownMatch.textContent !== matchEl.textContent) {\n this.dropdownManager.showDropdown(matchEl, matchData);\n }\n }\n });\n\n if (this.options.debug) {\n console.log('[InteractionHandler] Updated with', matches.length, 'interactive elements');\n }\n }\n\n /**\n * Handle mouse enter on a match\n * @param {Event} e - Mouse event\n * @param {HTMLElement} matchEl - Match element\n */\n handleMouseEnter(e, matchEl) {\n const behavior = matchEl.getAttribute('data-behavior');\n\n // Only show bubble if behavior is 'bubble' or 'hover'\n if (behavior === 'bubble' || behavior === 'hover') {\n // Clear any existing timeout\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n\n // Delay bubble appearance\n this.hoverTimeout = setTimeout(() => {\n const matchData = this.getMatchData(matchEl);\n this.bubbleManager.showBubble(matchEl, matchData);\n }, this.options.bubbleDelay);\n }\n\n // Callback\n if (this.options.onWordHover) {\n const matchData = this.getMatchData(matchEl);\n this.options.onWordHover(matchData);\n }\n }\n\n /**\n * Handle mouse leave from a match\n * @param {Event} e - Mouse event\n * @param {HTMLElement} matchEl - Match element\n */\n handleMouseLeave(e, matchEl) {\n // Clear hover timeout\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n\n // Don't immediately hide bubble - let user hover over it\n // Bubble will auto-hide when mouse leaves bubble area\n }\n\n /**\n * Handle click on a match\n * @param {Event} e - Click event\n * @param {HTMLElement} matchEl - Match element\n */\n handleClick(e, matchEl) {\n const behavior = matchEl.getAttribute('data-behavior');\n const matchData = this.getMatchData(matchEl);\n\n console.log('[InteractionHandler] ===== CLICK EVENT START =====');\n console.log('[InteractionHandler] Click details:', {\n behavior: behavior,\n matchText: matchData.text,\n eventType: e.type,\n target: e.target.tagName,\n currentTarget: e.currentTarget.tagName,\n button: e.button,\n buttons: e.buttons,\n clientX: e.clientX,\n clientY: e.clientY,\n offsetX: e.offsetX,\n offsetY: e.offsetY\n });\n console.log('[InteractionHandler] Match element:', {\n textContent: matchEl.textContent,\n offsetWidth: matchEl.offsetWidth,\n offsetHeight: matchEl.offsetHeight,\n attributes: {\n 'data-line': matchEl.getAttribute('data-line'),\n 'data-col': matchEl.getAttribute('data-col'),\n 'data-behavior': behavior\n }\n });\n console.log('[InteractionHandler] Active element before click:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n\n // For non-interactive elements (bubbles), manually pass click to textarea\n if (behavior !== 'dropdown' && behavior !== 'action') {\n console.log('[InteractionHandler] Non-interactive match - manually focusing textarea');\n e.preventDefault();\n e.stopPropagation();\n\n // Focus textarea and position cursor at click location\n if (this.options.textarea) {\n this.options.textarea.focus();\n console.log('[InteractionHandler] Textarea focused. Active element now:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n\n // Get the character offset by finding the match position\n const line = parseInt(matchEl.getAttribute('data-line'));\n const col = parseInt(matchEl.getAttribute('data-col'));\n\n // Calculate absolute position in textarea\n const lines = this.options.textarea.value.split('\\n');\n let offset = 0;\n for (let i = 0; i < line; i++) {\n offset += lines[i].length + 1; // +1 for newline\n }\n const clickOffsetInMatch = (e.offsetX / matchEl.offsetWidth * matchEl.textContent.length);\n offset += col + clickOffsetInMatch;\n\n console.log('[InteractionHandler] Cursor positioning:', {\n line: line,\n col: col,\n clickOffsetInMatch: clickOffsetInMatch,\n finalOffset: offset,\n textareaValue: this.options.textarea.value,\n textareaValueLength: this.options.textarea.value.length\n });\n\n // Set cursor position\n this.options.textarea.setSelectionRange(offset, offset);\n\n console.log('[InteractionHandler] Selection set:', {\n selectionStart: this.options.textarea.selectionStart,\n selectionEnd: this.options.textarea.selectionEnd,\n selectedText: this.options.textarea.value.substring(this.options.textarea.selectionStart, this.options.textarea.selectionEnd)\n });\n }\n\n console.log('[InteractionHandler] ===== CLICK EVENT END (non-interactive) =====');\n return; // Don't process further for bubbles\n }\n\n console.log('[InteractionHandler] Interactive match - handling dropdown/action');\n // Prevent default for interactive elements (dropdown/action)\n e.preventDefault();\n e.stopPropagation();\n\n // Handle different behaviors\n if (behavior === 'dropdown') {\n // Toggle dropdown - close if already open for this match, otherwise show\n if (this.dropdownManager.activeDropdownMatch === matchEl) {\n this.dropdownManager.hideDropdown();\n } else {\n this.dropdownManager.showDropdown(matchEl, matchData);\n }\n } else if (behavior === 'action') {\n // Custom action callback\n if (this.options.onWordClick) {\n this.options.onWordClick(matchData);\n }\n }\n\n // Always trigger callback (unless it's a dropdown toggle to close)\n if (this.options.onWordClick && !(behavior === 'dropdown' && this.dropdownManager.activeDropdownMatch === matchEl)) {\n this.options.onWordClick(matchData);\n }\n\n console.log('[InteractionHandler] ===== CLICK EVENT END (interactive) =====');\n }\n\n /**\n * Hide dropdown (exposed for external use, e.g., when textarea loses focus)\n */\n hideDropdown() {\n this.dropdownManager.hideDropdown();\n }\n\n /**\n * Extract match data from element\n * @param {HTMLElement} matchEl - Match element\n * @returns {Object} Match data\n */\n getMatchData(matchEl) {\n // Parse intent JSON if available\n let intent = null;\n const intentStr = matchEl.getAttribute('data-intent');\n if (intentStr) {\n try {\n intent = JSON.parse(intentStr);\n } catch (e) {\n console.warn('[InteractionHandler] Failed to parse intent JSON:', e);\n }\n }\n\n return {\n text: matchEl.getAttribute('data-match-text'),\n line: parseInt(matchEl.getAttribute('data-line')),\n col: parseInt(matchEl.getAttribute('data-col')),\n commandType: matchEl.getAttribute('data-command-type'),\n commandPath: matchEl.getAttribute('data-command-path'),\n intentPath: matchEl.getAttribute('data-intent-path'),\n intent: intent,\n command: {\n id: matchEl.getAttribute('data-command-id'),\n type: matchEl.getAttribute('data-command-type'),\n behavior: matchEl.getAttribute('data-behavior')\n },\n element: matchEl\n };\n }\n\n /**\n * Cleanup event listeners\n */\n cleanup() {\n this.bubbleManager.cleanup();\n this.dropdownManager.cleanup();\n\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n /**\n * Destroy handler\n */\n destroy() {\n this.cleanup();\n this.bubbleManager.destroy();\n this.dropdownManager.destroy();\n console.log('[InteractionHandler] Destroyed');\n }\n}\n","// StyleManager - Handles all inline styling for textarea, wrapper, and overlay\n// Makes TrustQuery completely self-contained without requiring external CSS\n\nexport default class StyleManager {\n /**\n * Create style manager\n * @param {Object} options - Theme and style options\n */\n constructor(options = {}) {\n this.options = {\n // Theme colors\n backgroundColor: options.backgroundColor || '#fff',\n textColor: options.textColor || '#333',\n caretColor: options.caretColor || '#000',\n borderColor: options.borderColor || '#ddd',\n borderColorFocus: options.borderColorFocus || '#4a90e2',\n\n // Match colors (can be overridden)\n matchBackgroundColor: options.matchBackgroundColor || 'rgba(74, 144, 226, 0.15)',\n matchTextColor: options.matchTextColor || '#2b6cb0',\n matchHoverBackgroundColor: options.matchHoverBackgroundColor || 'rgba(74, 144, 226, 0.25)',\n\n // Font settings (optional, will use textarea's if not specified)\n fontFamily: options.fontFamily || null,\n fontSize: options.fontSize || null,\n lineHeight: options.lineHeight || null,\n\n ...options\n };\n\n console.log('[StyleManager] Initialized with theme:', this.options);\n }\n\n /**\n * Apply all styles to wrapper, textarea, and overlay\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {HTMLElement} textarea - Textarea element\n * @param {HTMLElement} overlay - Overlay element\n */\n applyAllStyles(wrapper, textarea, overlay) {\n // Get computed styles from original textarea\n const computedStyle = window.getComputedStyle(textarea);\n\n // Apply styles to each element\n this.applyWrapperStyles(wrapper, computedStyle);\n this.applyTextareaStyles(textarea, computedStyle);\n this.applyOverlayStyles(overlay, computedStyle);\n\n // Apply focus handlers\n this.setupFocusStyles(wrapper, textarea);\n\n console.log('[StyleManager] All styles applied');\n }\n\n /**\n * Apply wrapper styles (container for both textarea and overlay)\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {CSSStyleDeclaration} computedStyle - Computed styles from textarea\n */\n applyWrapperStyles(wrapper, computedStyle) {\n Object.assign(wrapper.style, {\n position: 'relative',\n display: 'block',\n width: '100%',\n background: this.options.backgroundColor,\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '4px',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease'\n });\n }\n\n /**\n * Apply textarea styles (transparent text, visible caret)\n * @param {HTMLElement} textarea - Textarea element\n * @param {CSSStyleDeclaration} computedStyle - Original computed styles\n */\n applyTextareaStyles(textarea, computedStyle) {\n // Use provided font settings or fall back to computed/defaults\n const fontFamily = this.options.fontFamily || computedStyle.fontFamily || \"'Courier New', monospace\";\n const fontSize = this.options.fontSize || computedStyle.fontSize || '14px';\n const lineHeight = this.options.lineHeight || computedStyle.lineHeight || '1.5';\n const padding = computedStyle.padding || '12px';\n\n // Store existing transition if any (for FOUC prevention)\n const existingTransition = textarea.style.transition;\n\n Object.assign(textarea.style, {\n fontFamily,\n fontSize,\n lineHeight,\n padding,\n border: 'none',\n borderRadius: '0',\n background: 'transparent',\n color: this.options.textColor, // Set color for caret visibility\n WebkitTextFillColor: 'transparent', // Make text transparent but keep caret\n caretColor: this.options.caretColor,\n resize: 'none',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative',\n zIndex: '0', // Below overlay so hover events reach overlay matches\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n outline: 'none',\n margin: '0',\n transition: existingTransition // Preserve opacity transition from HTML\n });\n\n // Add CSS to make placeholder visible (not affected by -webkit-text-fill-color)\n this.ensurePlaceholderStyles();\n\n // Store computed values for overlay to use\n this._textareaStyles = {\n fontFamily,\n fontSize,\n lineHeight,\n padding\n };\n }\n\n /**\n * Apply overlay styles (must match textarea exactly for alignment)\n * @param {HTMLElement} overlay - Overlay element\n * @param {CSSStyleDeclaration} computedStyle - Computed styles from textarea\n */\n applyOverlayStyles(overlay, computedStyle) {\n // Use the stored textarea styles to ensure perfect alignment\n const { fontFamily, fontSize, lineHeight, padding } = this._textareaStyles;\n\n Object.assign(overlay.style, {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n fontFamily,\n fontSize,\n lineHeight,\n padding,\n color: this.options.textColor,\n pointerEvents: 'none', // Let clicks pass through to textarea (except on match spans with pointer-events: auto)\n overflow: 'hidden',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n zIndex: '1', // Above textarea so match spans can receive hover/click events\n boxSizing: 'border-box',\n margin: '0'\n });\n }\n\n /**\n * Setup focus styles (apply on focus, remove on blur)\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {HTMLElement} textarea - Textarea element\n */\n setupFocusStyles(wrapper, textarea) {\n textarea.addEventListener('focus', () => {\n wrapper.style.borderColor = this.options.borderColorFocus;\n wrapper.style.boxShadow = `0 0 0 3px ${this.options.borderColorFocus}1a`; // 1a = 10% opacity\n });\n\n textarea.addEventListener('blur', () => {\n wrapper.style.borderColor = this.options.borderColor;\n wrapper.style.boxShadow = 'none';\n });\n }\n\n /**\n * Apply match (highlighted word) styles\n * @param {HTMLElement} matchElement - Span element for matched word\n * @param {string} matchType - Type of match (keyword, mention, command, etc.)\n */\n applyMatchStyles(matchElement, matchType = 'default') {\n // Base match styles\n Object.assign(matchElement.style, {\n pointerEvents: 'auto', // Enable interactions\n cursor: 'pointer',\n padding: '2px 4px',\n margin: '-2px -4px',\n borderRadius: '3px',\n transition: 'background-color 0.15s ease',\n backgroundColor: this.options.matchBackgroundColor,\n color: this.options.matchTextColor\n });\n\n // Hover styles (on mouseover)\n matchElement.addEventListener('mouseenter', () => {\n matchElement.style.backgroundColor = this.options.matchHoverBackgroundColor;\n });\n\n matchElement.addEventListener('mouseleave', () => {\n matchElement.style.backgroundColor = this.options.matchBackgroundColor;\n });\n }\n\n /**\n * Apply bubble (tooltip) styles\n * @param {HTMLElement} bubble - Bubble element\n */\n applyBubbleStyles(bubble) {\n Object.assign(bubble.style, {\n position: 'absolute',\n background: '#ffffff',\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '6px',\n padding: '0',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: '10000',\n maxWidth: '300px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: '13px',\n lineHeight: '1.4',\n color: this.options.textColor,\n pointerEvents: 'auto',\n opacity: '1',\n overflow: 'hidden',\n animation: 'tq-bubble-appear 0.15s ease-out'\n });\n\n // Add animation keyframes if not already added\n this.ensureAnimationStyles();\n\n // Style the content container\n const contentContainer = bubble.querySelector('.tq-bubble-content');\n if (contentContainer) {\n Object.assign(contentContainer.style, {\n padding: '8px 12px',\n fontSize: '12px',\n lineHeight: '1.4'\n });\n }\n }\n\n /**\n * Apply bubble header styles\n * @param {HTMLElement} header - Header container element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyBubbleHeaderStyles(header, messageState) {\n const colorMap = {\n 'error': '#991b1b',\n 'warning': '#92400e',\n 'info': '#065f46'\n };\n\n const bgColorMap = {\n 'error': '#fee2e2',\n 'warning': '#fef3c7',\n 'info': '#d1fae5'\n };\n\n const color = colorMap[messageState] || '#2b6cb0';\n const bgColor = bgColorMap[messageState] || '#e0f2fe';\n\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: bgColor,\n color: color,\n fontWeight: '600',\n fontSize: '11px',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown (menu) styles\n * @param {HTMLElement} dropdown - Dropdown element\n * @param {string} category - Optional category to adjust styles\n */\n applyDropdownStyles(dropdown, category = '') {\n // Use wider maxWidth for display-menu-with-uri to accommodate links\n const maxWidth = category === 'display-menu-with-uri' ? '450px' : '300px';\n\n Object.assign(dropdown.style, {\n position: 'absolute',\n background: '#ffffff',\n border: `1px solid ${this.options.borderColor}`,\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: '10000',\n minWidth: '150px',\n maxWidth: maxWidth,\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n fontSize: '14px',\n opacity: '1',\n animation: 'tq-dropdown-appear 0.15s ease-out'\n });\n\n this.ensureAnimationStyles();\n }\n\n /**\n * Apply dropdown header styles\n * @param {HTMLElement} header - Header container element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyDropdownHeaderStyles(header, messageState) {\n const colorMap = {\n 'error': '#991b1b',\n 'warning': '#92400e',\n 'info': '#065f46'\n };\n\n const bgColorMap = {\n 'error': '#fee2e2',\n 'warning': '#fef3c7',\n 'info': '#d1fae5'\n };\n\n const color = colorMap[messageState] || '#2b6cb0';\n const bgColor = bgColorMap[messageState] || '#e0f2fe';\n\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n backgroundColor: bgColor,\n color: color,\n fontWeight: '600',\n fontSize: '11px',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown description styles\n * @param {HTMLElement} description - Description element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyDropdownDescriptionStyles(description, messageState) {\n Object.assign(description.style, {\n padding: '8px 12px',\n fontSize: '12px',\n lineHeight: '1.5',\n color: '#4a5568',\n backgroundColor: '#f7fafc',\n borderBottom: `1px solid ${this.options.borderColor}`\n });\n }\n\n /**\n * Apply dropdown item styles\n * @param {HTMLElement} item - Dropdown item element\n */\n applyDropdownItemStyles(item) {\n Object.assign(item.style, {\n padding: '8px 12px',\n cursor: 'pointer',\n color: this.options.textColor,\n transition: 'background-color 0.1s ease'\n });\n\n item.addEventListener('mouseenter', () => {\n item.style.backgroundColor = '#f0f4f8';\n });\n\n item.addEventListener('mouseleave', () => {\n item.style.backgroundColor = 'transparent';\n });\n\n item.addEventListener('mousedown', () => {\n item.style.backgroundColor = '#e2e8f0';\n });\n }\n\n /**\n * Apply user input styles\n * @param {HTMLElement} container - User input container\n * @param {HTMLElement} input - Input element\n */\n applyUserInputStyles(container, input) {\n // Container is now a tq-dropdown-item, so don't add padding here\n // Just set the border and background\n Object.assign(container.style, {\n backgroundColor: 'transparent',\n borderTop: `1px solid ${this.options.borderColor}`,\n // Override cursor from dropdown-item styles\n cursor: 'text'\n });\n\n Object.assign(input.style, {\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n borderBottom: '1px solid #ccc',\n borderRadius: '0',\n fontSize: '14px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n color: this.options.textColor,\n backgroundColor: 'transparent',\n boxSizing: 'border-box',\n outline: 'none'\n });\n\n input.addEventListener('focus', () => {\n input.style.borderBottom = '1px solid #ccc';\n });\n\n input.addEventListener('blur', () => {\n input.style.borderBottom = '1px solid #ccc';\n });\n }\n\n /**\n * Apply dropdown filter input styles\n * @param {HTMLElement} filterInput - Filter input element\n */\n applyDropdownFilterStyles(filterInput) {\n Object.assign(filterInput.style, {\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n borderBottom: `1px solid ${this.options.borderColor}`,\n outline: 'none',\n fontSize: '14px',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n color: this.options.textColor,\n backgroundColor: '#f7fafc',\n boxSizing: 'border-box'\n });\n\n // Focus styles\n filterInput.addEventListener('focus', () => {\n filterInput.style.backgroundColor = '#fff';\n filterInput.style.borderBottomColor = this.options.borderColorFocus;\n });\n\n filterInput.addEventListener('blur', () => {\n filterInput.style.backgroundColor = '#f7fafc';\n filterInput.style.borderBottomColor = this.options.borderColor;\n });\n }\n\n /**\n * Ensure animation keyframes are added to document (only once)\n */\n ensureAnimationStyles() {\n if (document.getElementById('tq-animations')) {\n return; // Already added\n }\n\n const style = document.createElement('style');\n style.id = 'tq-animations';\n style.textContent = `\n @keyframes tq-bubble-appear {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes tq-dropdown-appear {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n\n .tq-dropdown-item-selected {\n background-color: #e2e8f0 !important;\n }\n `;\n document.head.appendChild(style);\n }\n\n /**\n * Ensure placeholder styles are added to document (only once)\n */\n ensurePlaceholderStyles() {\n if (document.getElementById('tq-placeholder-styles')) {\n return; // Already added\n }\n\n const style = document.createElement('style');\n style.id = 'tq-placeholder-styles';\n style.textContent = `\n .tq-textarea::placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n -webkit-text-fill-color: #a0aec0 !important;\n }\n\n .tq-textarea::-webkit-input-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n -webkit-text-fill-color: #a0aec0 !important;\n }\n\n .tq-textarea::-moz-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n }\n\n .tq-textarea:-ms-input-placeholder {\n color: #a0aec0 !important;\n opacity: 1 !important;\n }\n `;\n document.head.appendChild(style);\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n console.log('[StyleManager] Theme updated:', this.options);\n }\n}\n","// CommandHandlers - Handler registry for different command types\n// Each command type has specific styling and behavior\n\nexport class CommandHandlerRegistry {\n constructor() {\n this.handlers = new Map();\n this.registerDefaultHandlers();\n }\n\n /**\n * Register default handlers\n */\n registerDefaultHandlers() {\n this.register('not-allowed', new NotAllowedHandler());\n this.register('show-warning', new ShowWarningHandler());\n this.register('user-select-oneOf-and-warn', new UserSelectWithWarningHandler());\n this.register('user-select-oneOf', new UserSelectHandler());\n this.register('api-json-table', new ApiJsonTableHandler());\n this.register('api-md-table', new ApiMdTableHandler());\n this.register('display-menu', new DisplayMenuHandler());\n this.register('display-menu-with-uri', new DisplayMenuWithUriHandler());\n }\n\n /**\n * Register a handler\n * @param {string} commandType - Command type (e.g., 'not-allowed', 'show-warning')\n * @param {CommandHandler} handler - Handler instance\n */\n register(commandType, handler) {\n this.handlers.set(commandType, handler);\n console.log(`[CommandHandlerRegistry] Registered handler: ${commandType}`);\n }\n\n /**\n * Get handler for a command type\n * @param {string} commandType - Command type\n * @returns {CommandHandler|null} Handler or null\n */\n getHandler(commandType) {\n return this.handlers.get(commandType) || null;\n }\n\n /**\n * Get styles for a command type (or based on message-state)\n * @param {string} commandType - Command type\n * @param {Object} matchData - Match data including intent/handler\n * @returns {Object} Style configuration\n */\n getStyles(commandType, matchData = null) {\n // If matchData is provided, check message-state first\n if (matchData && matchData.intent && matchData.intent.handler) {\n const messageState = matchData.intent.handler['message-state'];\n if (messageState) {\n return this.getStylesForMessageState(messageState);\n }\n }\n\n // Fall back to command type handler\n const handler = this.getHandler(commandType);\n return handler ? handler.getStyles() : this.getDefaultStyles();\n }\n\n /**\n * Get styles based on message-state\n * @param {string} messageState - Message state (error, warning, info)\n * @returns {Object} Style configuration\n */\n getStylesForMessageState(messageState) {\n const stateStyles = {\n 'error': {\n backgroundColor: 'rgba(220, 38, 38, 0.15)', // Red\n color: '#991b1b',\n textDecoration: 'none',\n borderBottom: '2px solid #dc2626',\n borderRadius: '0',\n cursor: 'not-allowed'\n },\n 'warning': {\n backgroundColor: 'rgba(245, 158, 11, 0.15)', // Orange\n color: '#92400e',\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b',\n borderRadius: '0',\n cursor: 'help'\n },\n 'info': {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green\n color: '#065f46',\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n borderRadius: '0',\n cursor: 'pointer'\n }\n };\n\n return stateStyles[messageState] || this.getDefaultStyles();\n }\n\n /**\n * Get bubble content for a match\n * @param {string} commandType - Command type\n * @param {Object} matchData - Match data including intent info\n * @returns {string} HTML content for bubble\n */\n getBubbleContent(commandType, matchData) {\n const handler = this.getHandler(commandType);\n return handler ? handler.getBubbleContent(matchData) : null;\n }\n\n /**\n * Get default styles (fallback)\n */\n getDefaultStyles() {\n return {\n backgroundColor: 'rgba(74, 144, 226, 0.15)',\n color: '#2b6cb0',\n textDecoration: 'none',\n borderBottom: 'none'\n };\n }\n}\n\n/**\n * Base handler class\n */\nclass CommandHandler {\n getStyles() {\n return {};\n }\n\n getBubbleContent(matchData) {\n return null;\n }\n\n shouldBlockSubmit(matchData) {\n return false;\n }\n}\n\n/**\n * Handler for not-allowed commands (errors/forbidden)\n * Red background, red underline\n */\nclass NotAllowedHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(220, 38, 38, 0.15)', // Red background\n color: '#991b1b', // Dark red text\n textDecoration: 'none',\n borderBottom: '2px solid #dc2626', // Red underline\n borderRadius: '0', // No radius to avoid curved bottom border\n cursor: 'not-allowed'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const handler = intent.handler || {};\n\n const description = intent.description || 'Not allowed';\n const message = handler['message-content'] || description;\n\n return `\n <div style=\"color: #991b1b;\">\n <div style=\"font-weight: 600; margin-bottom: 4px; display: flex; align-items: center;\">\n <span style=\"margin-right: 6px;\">⛔</span>\n Not Allowed\n </div>\n <div style=\"font-size: 12px; line-height: 1.4;\">\n ${this.escapeHtml(message)}\n </div>\n </div>\n `;\n }\n\n shouldBlockSubmit(matchData) {\n const handler = matchData.intent?.handler || {};\n return handler['block-submit'] === true;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for show-warning commands\n * Yellow/orange background, orange underline\n */\nclass ShowWarningHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(245, 158, 11, 0.15)', // Amber/orange background\n color: '#92400e', // Dark amber text\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b', // Orange underline\n borderRadius: '0', // No radius to avoid curved bottom border\n cursor: 'help'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const handler = intent.handler || {};\n\n const description = intent.description || 'Warning';\n const message = handler['message-content'] || description;\n\n return `\n <div style=\"color: #92400e;\">\n <div style=\"font-weight: 600; margin-bottom: 4px; display: flex; align-items: center;\">\n <span style=\"margin-right: 6px;\">⚠️</span>\n Warning\n </div>\n <div style=\"font-size: 12px; line-height: 1.4;\">\n ${this.escapeHtml(message)}\n </div>\n </div>\n `;\n }\n\n shouldBlockSubmit(matchData) {\n const handler = matchData.intent?.handler || {};\n return handler['block-submit'] === true;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for user-select-oneOf-and-warn commands\n * Shows warning + dropdown\n */\nclass UserSelectWithWarningHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(245, 158, 11, 0.15)',\n color: '#92400e',\n textDecoration: 'none',\n borderBottom: '2px solid #f59e0b',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Will show dropdown on click instead of bubble\n return null;\n }\n}\n\n/**\n * Handler for user-select-oneOf commands\n * Shows dropdown without warning\n */\nclass UserSelectHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(59, 130, 246, 0.15)', // Blue background\n color: '#1e40af', // Dark blue text\n textDecoration: 'none',\n borderBottom: '2px solid #3b82f6', // Blue underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Will show dropdown on click instead of bubble\n return null;\n }\n}\n\n/**\n * Handler for api-json-table commands\n */\nclass ApiJsonTableHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const description = intent.description || 'Click to view data';\n\n return `\n <div style=\"color: #065f46;\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">\n 📊 Data Table\n </div>\n <div style=\"font-size: 12px;\">\n ${this.escapeHtml(description)}\n </div>\n </div>\n `;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for api-md-table commands\n */\nclass ApiMdTableHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)',\n color: '#065f46',\n textDecoration: 'none',\n borderBottom: '2px solid #10b981',\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n const intent = matchData.intent || {};\n const description = intent.description || 'Click to view data';\n\n return `\n <div style=\"color: #065f46;\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">\n 📊 Data Table\n </div>\n <div style=\"font-size: 12px;\">\n ${this.escapeHtml(description)}\n </div>\n </div>\n `;\n }\n\n escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n\n/**\n * Handler for display-menu category\n * Shows dropdown menu with selectable options\n */\nclass DisplayMenuHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981', // Green underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Display menu shows dropdown, not bubble\n return null;\n }\n}\n\n/**\n * Handler for display-menu-with-uri category\n * Shows dropdown menu with selectable options and clickable URI links\n */\nclass DisplayMenuWithUriHandler extends CommandHandler {\n getStyles() {\n return {\n backgroundColor: 'rgba(16, 185, 129, 0.15)', // Green background\n color: '#065f46', // Dark green text\n textDecoration: 'none',\n borderBottom: '2px solid #10b981', // Green underline\n cursor: 'pointer'\n };\n }\n\n getBubbleContent(matchData) {\n // Display menu with URI shows dropdown, not bubble\n return null;\n }\n}\n\nexport default CommandHandlerRegistry;\n","// AutoGrow - Automatically grows textarea height based on content\n\nexport default class AutoGrow {\n /**\n * Create auto-grow feature\n * @param {HTMLElement} textarea - Textarea element\n * @param {Object} options - Configuration\n */\n constructor(textarea, options = {}) {\n this.textarea = textarea;\n this.options = {\n maxHeight: options.maxHeight || 300,\n minHeight: options.minHeight || 44,\n ...options\n };\n\n this.initialize();\n console.log('[AutoGrow] Initialized with max height:', this.options.maxHeight);\n }\n\n /**\n * Initialize auto-grow functionality\n */\n initialize() {\n // Set initial min-height\n this.textarea.style.minHeight = `${this.options.minHeight}px`;\n\n // Listen for input changes\n this.textarea.addEventListener('input', () => this.adjust());\n\n // Listen for keyboard events (for line breaks)\n this.textarea.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n setTimeout(() => this.adjust(), 0);\n }\n });\n\n // Initial adjustment\n this.adjust();\n }\n\n /**\n * Adjust textarea height based on content\n */\n adjust() {\n // Reset height to calculate new height\n this.textarea.style.height = 'auto';\n\n // Calculate new height (respecting max height)\n const newHeight = Math.min(\n Math.max(this.textarea.scrollHeight, this.options.minHeight),\n this.options.maxHeight\n );\n\n this.textarea.style.height = newHeight + 'px';\n }\n\n /**\n * Destroy auto-grow (remove listeners and reset styles)\n */\n destroy() {\n this.textarea.style.height = '';\n this.textarea.style.minHeight = '';\n console.log('[AutoGrow] Destroyed');\n }\n}\n","// ValidationStateManager - Tracks validation state and triggers callbacks\n\nexport default class ValidationStateManager {\n /**\n * Create validation state manager\n * @param {Object} options - Configuration\n */\n constructor(options = {}) {\n this.options = {\n onValidationChange: options.onValidationChange || null,\n ...options\n };\n\n this.state = {\n hasBlockingError: false,\n errors: [], // matches with message-state: 'error'\n warnings: [], // matches with message-state: 'warning'\n info: [] // matches with message-state: 'info'\n };\n\n console.log('[ValidationStateManager] Initialized');\n }\n\n /**\n * Update validation state based on current matches\n * @param {Array} matches - Current matches from scanner\n */\n update(matches) {\n if (this.options.debug) {\n console.log('[ValidationStateManager] update() called with matches:', matches.length);\n console.log('[ValidationStateManager] Match details:', JSON.stringify(matches, null, 2));\n }\n\n // Reset state\n const newState = {\n hasBlockingError: false,\n errors: [],\n warnings: [],\n info: []\n };\n\n // Categorize current matches\n matches.forEach(match => {\n const messageState = match.command?.messageState;\n const blockSubmit = match.command?.handler?.['block-submit'] === true;\n\n if (this.options.debug) {\n console.log('[ValidationStateManager] Processing match:', {\n text: match.text,\n messageState,\n blockSubmit,\n hasCommand: !!match.command\n });\n }\n\n if (blockSubmit) {\n newState.hasBlockingError = true;\n }\n\n switch (messageState) {\n case 'error':\n newState.errors.push(match);\n break;\n case 'warning':\n newState.warnings.push(match);\n break;\n case 'info':\n newState.info.push(match);\n break;\n }\n });\n\n if (this.options.debug) {\n console.log('[ValidationStateManager] After categorization:', {\n errors: newState.errors.length,\n warnings: newState.warnings.length,\n info: newState.info.length,\n hasBlockingError: newState.hasBlockingError\n });\n }\n\n // Check if state changed\n const stateChanged =\n this.state.hasBlockingError !== newState.hasBlockingError ||\n this.state.errors.length !== newState.errors.length ||\n this.state.warnings.length !== newState.warnings.length ||\n this.state.info.length !== newState.info.length;\n\n if (stateChanged) {\n this.state = newState;\n\n // Trigger callback\n if (this.options.onValidationChange) {\n this.options.onValidationChange(this.state);\n }\n\n console.log('[ValidationStateManager] State changed:', {\n hasBlockingError: newState.hasBlockingError,\n errors: newState.errors.length,\n warnings: newState.warnings.length,\n info: newState.info.length\n });\n }\n }\n\n /**\n * Get current validation state\n * @returns {Object} Current validation state\n */\n getState() {\n return { ...this.state };\n }\n\n /**\n * Reset validation state to empty\n */\n reset() {\n this.update([]);\n }\n\n /**\n * Check if there are blocking errors\n * @returns {boolean} True if there are blocking errors\n */\n hasBlockingErrors() {\n return this.state.hasBlockingError;\n }\n}\n","// MobileKeyboardHandler - Handles mobile virtual keyboard behavior\n// Detects keyboard appearance and adjusts layout to keep textarea visible\n\nexport default class MobileKeyboardHandler {\n /**\n * Create mobile keyboard handler\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n textarea: options.textarea || null,\n wrapper: options.wrapper || null,\n debug: options.debug || false,\n ...options\n };\n\n this.isKeyboardVisible = false;\n this.lastViewportHeight = window.innerHeight;\n this.visualViewport = window.visualViewport;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Initialized');\n }\n }\n\n /**\n * Initialize keyboard detection\n */\n init() {\n if (!this.options.textarea) {\n console.warn('[MobileKeyboardHandler] No textarea provided');\n return;\n }\n\n // Use Visual Viewport API if available (preferred method)\n if (this.visualViewport) {\n this.visualViewport.addEventListener('resize', this.handleViewportResize);\n this.visualViewport.addEventListener('scroll', this.handleViewportScroll);\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Using Visual Viewport API');\n }\n } else {\n // Fallback to window resize\n window.addEventListener('resize', this.handleWindowResize);\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Using window resize fallback');\n }\n }\n\n // Handle focus events\n this.options.textarea.addEventListener('focus', this.handleFocus);\n this.options.textarea.addEventListener('blur', this.handleBlur);\n }\n\n /**\n * Handle Visual Viewport resize (keyboard appearance/disappearance)\n */\n handleViewportResize = () => {\n if (!this.visualViewport) return;\n\n const viewportHeight = this.visualViewport.height;\n const windowHeight = window.innerHeight;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Viewport resize:', {\n viewportHeight,\n windowHeight,\n scale: this.visualViewport.scale\n });\n }\n\n // Keyboard is visible if viewport height is significantly smaller than window height\n const wasKeyboardVisible = this.isKeyboardVisible;\n this.isKeyboardVisible = viewportHeight < windowHeight * 0.75;\n\n if (this.isKeyboardVisible !== wasKeyboardVisible) {\n if (this.isKeyboardVisible) {\n this.onKeyboardShow();\n } else {\n this.onKeyboardHide();\n }\n }\n\n // Always adjust layout when viewport changes\n if (this.isKeyboardVisible) {\n this.adjustLayout();\n }\n };\n\n /**\n * Handle Visual Viewport scroll\n */\n handleViewportScroll = () => {\n if (this.isKeyboardVisible) {\n // Ensure textarea stays in view during scroll\n this.ensureTextareaVisible();\n }\n };\n\n /**\n * Handle window resize (fallback)\n */\n handleWindowResize = () => {\n const currentHeight = window.innerHeight;\n const heightDifference = this.lastViewportHeight - currentHeight;\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Window resize:', {\n lastHeight: this.lastViewportHeight,\n currentHeight,\n difference: heightDifference\n });\n }\n\n // Significant decrease in height suggests keyboard appeared\n if (heightDifference > 150) {\n if (!this.isKeyboardVisible) {\n this.isKeyboardVisible = true;\n this.onKeyboardShow();\n }\n }\n // Significant increase suggests keyboard hidden\n else if (heightDifference < -150) {\n if (this.isKeyboardVisible) {\n this.isKeyboardVisible = false;\n this.onKeyboardHide();\n }\n }\n\n this.lastViewportHeight = currentHeight;\n };\n\n /**\n * Handle textarea focus\n */\n handleFocus = () => {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Textarea focused');\n }\n\n // Delay to allow keyboard to appear\n setTimeout(() => {\n this.ensureTextareaVisible();\n }, 300);\n };\n\n /**\n * Handle textarea blur\n */\n handleBlur = () => {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Textarea blurred');\n }\n };\n\n /**\n * Called when keyboard appears\n */\n onKeyboardShow() {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Keyboard shown');\n }\n\n this.adjustLayout();\n this.ensureTextareaVisible();\n }\n\n /**\n * Called when keyboard hides\n */\n onKeyboardHide() {\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Keyboard hidden');\n }\n\n // Reset wrapper height to auto\n if (this.options.wrapper) {\n this.options.wrapper.style.maxHeight = '';\n }\n }\n\n /**\n * Adjust layout to accommodate keyboard\n */\n adjustLayout() {\n if (!this.visualViewport || !this.options.wrapper) return;\n\n const viewportHeight = this.visualViewport.height;\n\n // Set wrapper max-height to visible viewport height minus some padding\n const maxHeight = viewportHeight - 20; // 20px padding\n this.options.wrapper.style.maxHeight = `${maxHeight}px`;\n this.options.wrapper.style.overflow = 'auto';\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Adjusted wrapper height:', maxHeight);\n }\n }\n\n /**\n * Ensure textarea is visible above the keyboard\n */\n ensureTextareaVisible() {\n if (!this.options.textarea) return;\n\n // Scroll textarea into view\n this.options.textarea.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest'\n });\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Scrolled textarea into view');\n }\n }\n\n /**\n * Cleanup event listeners\n */\n destroy() {\n if (this.visualViewport) {\n this.visualViewport.removeEventListener('resize', this.handleViewportResize);\n this.visualViewport.removeEventListener('scroll', this.handleViewportScroll);\n } else {\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n if (this.options.textarea) {\n this.options.textarea.removeEventListener('focus', this.handleFocus);\n this.options.textarea.removeEventListener('blur', this.handleBlur);\n }\n\n if (this.options.debug) {\n console.log('[MobileKeyboardHandler] Destroyed');\n }\n }\n}\n","// AttachmentManager - Handles CSV file attachments with drag & drop\n// Single responsibility: manage attachment state and file operations\n\nexport default class AttachmentManager {\n /**\n * Create attachment manager\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n container: options.container || null,\n dropZone: options.dropZone || null,\n styleManager: options.styleManager || null,\n commandScanner: options.commandScanner || null, // For scanning CSV columns\n dropdownManager: options.dropdownManager || null, // For showing dropdown on warning click\n csvModalManager: options.csvModalManager || null, // For displaying CSV content in modal\n onAttachmentAdd: options.onAttachmentAdd || null,\n onAttachmentRemove: options.onAttachmentRemove || null,\n debug: options.debug || false,\n ...options\n };\n\n this.attachedFiles = new Map(); // Store attached files\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Initialized');\n }\n }\n\n /**\n * Initialize drag & drop handlers\n */\n init() {\n if (!this.options.container || !this.options.dropZone) {\n console.warn('[AttachmentManager] Missing container or dropZone');\n return;\n }\n\n this.setupDragAndDrop();\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Drag & drop initialized');\n }\n }\n\n /**\n * Setup drag & drop event handlers\n */\n setupDragAndDrop() {\n const dropZone = this.options.dropZone;\n\n dropZone.addEventListener('dragover', this.handleDragOver);\n dropZone.addEventListener('dragleave', this.handleDragLeave);\n dropZone.addEventListener('drop', this.handleDrop);\n }\n\n /**\n * Handle drag over event\n */\n handleDragOver = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '#f0f9ff';\n this.options.dropZone.style.borderColor = '#3b82f6';\n };\n\n /**\n * Handle drag leave event\n */\n handleDragLeave = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '';\n this.options.dropZone.style.borderColor = '';\n };\n\n /**\n * Handle drop event\n */\n handleDrop = async (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.options.dropZone.style.background = '';\n this.options.dropZone.style.borderColor = '';\n\n const files = Array.from(e.dataTransfer.files);\n for (const file of files) {\n await this.addAttachment(file);\n }\n };\n\n /**\n * Parse CSV and extract metadata\n * @param {string} csvText - CSV file content\n * @returns {Object} - { rows, columns, headers }\n */\n parseCSVMetadata(csvText) {\n const lines = csvText.trim().split('\\n');\n const rows = lines.length;\n\n // Parse first row as headers\n const firstLine = lines[0] || '';\n const headers = firstLine.split(',').map(h => h.trim());\n const columns = headers.length;\n\n return { rows, columns, headers };\n }\n\n /**\n * Scan CSV headers for trigger matches\n * @param {Array} headers - CSV column headers\n * @returns {Array} - Array of matches\n */\n scanCSVHeaders(headers) {\n if (!this.options.commandScanner) {\n return [];\n }\n\n const matches = [];\n\n // Get CSV-specific triggers from command map\n const commandMap = this.options.commandScanner.commandMap;\n if (!commandMap || !commandMap['tql-triggers']) {\n return [];\n }\n\n // Check warning triggers for csv-match-column type\n const warnings = commandMap['tql-triggers'].warning || [];\n const csvTriggers = warnings.filter(t => t.type === 'csv-match-column');\n\n // Check each header against CSV triggers\n headers.forEach((header, index) => {\n csvTriggers.forEach(trigger => {\n if (trigger.match && trigger.match.includes(header)) {\n matches.push({\n header,\n columnIndex: index,\n trigger,\n intent: {\n category: trigger.category,\n handler: trigger.handler\n }\n });\n }\n });\n });\n\n return matches;\n }\n\n /**\n * Format file size in KB\n * @param {number} bytes - File size in bytes\n * @returns {string} - Formatted size\n */\n formatFileSize(bytes) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n /**\n * Create attachment wrapper with icon placeholder and card\n * @param {File} file - File object\n * @param {string} csvText - CSV file content\n * @param {Object} metadata - { rows, columns, headers }\n * @param {Array} matches - CSV header matches\n * @returns {HTMLElement} - Wrapper element\n */\n createAttachmentCard(file, csvText, metadata, matches = []) {\n // Create wrapper container\n const wrapper = document.createElement('div');\n wrapper.className = 'tq-attachment-wrapper';\n\n // Create icon placeholder\n const iconPlaceholder = document.createElement('div');\n iconPlaceholder.className = 'tq-attachment-icon-placeholder';\n\n // Add warning/error/info icon if matches found\n let icon = null;\n if (matches.length > 0) {\n const match = matches[0];\n const messageState = match.intent?.handler?.['message-state'] || 'warning';\n\n // Map message state to icon filename\n const iconMap = {\n 'error': 'trustquery-error.svg',\n 'warning': 'trustquery-warning.svg',\n 'info': 'trustquery-info.svg'\n };\n\n icon = document.createElement('img');\n icon.className = 'tq-attachment-icon';\n icon.src = `./assets/${iconMap[messageState] || iconMap.warning}`;\n icon.title = `CSV column ${messageState} - click to review`;\n\n // Handle icon click - show dropdown (using mousedown to prevent double-firing)\n icon.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.handleWarningClick(icon, matches, wrapper, file.name);\n });\n\n iconPlaceholder.appendChild(icon);\n }\n\n // Create card\n const card = document.createElement('div');\n card.className = 'tq-attachment-card';\n\n // Remove button\n const removeBtn = document.createElement('button');\n removeBtn.className = 'tq-attachment-remove';\n removeBtn.innerHTML = '×';\n removeBtn.onclick = () => this.removeAttachment(file.name, wrapper);\n\n // File name header\n const fileNameHeader = document.createElement('div');\n fileNameHeader.className = 'tq-attachment-header';\n fileNameHeader.textContent = file.name;\n\n // Metadata row\n const metaRow = document.createElement('div');\n metaRow.className = 'tq-attachment-meta';\n\n const sizeSpan = document.createElement('span');\n sizeSpan.textContent = this.formatFileSize(file.size);\n\n const rowsSpan = document.createElement('span');\n rowsSpan.textContent = `${metadata.rows} rows`;\n\n const colsSpan = document.createElement('span');\n colsSpan.textContent = `${metadata.columns} cols`;\n\n metaRow.appendChild(sizeSpan);\n metaRow.appendChild(rowsSpan);\n metaRow.appendChild(colsSpan);\n\n card.appendChild(removeBtn);\n card.appendChild(fileNameHeader);\n card.appendChild(metaRow);\n\n // Apply styles via StyleManager\n if (this.options.styleManager) {\n this.options.styleManager.applyWrapperStyles(wrapper);\n this.options.styleManager.applyIconPlaceholderStyles(iconPlaceholder, matches.length > 0);\n this.options.styleManager.applyIconStyles(icon);\n this.options.styleManager.applyCardStyles(card);\n this.options.styleManager.applyRemoveButtonStyles(removeBtn);\n this.options.styleManager.applyHeaderStyles(fileNameHeader);\n this.options.styleManager.applyMetaStyles(metaRow);\n }\n\n // Add click handler to card to open CSV modal\n card.style.cursor = 'pointer';\n card.addEventListener('click', (e) => {\n // Don't open modal if clicking remove button\n if (e.target === removeBtn || removeBtn.contains(e.target)) {\n return;\n }\n\n if (this.options.csvModalManager) {\n // Get the latest CSV text from attachedFiles (in case it was updated)\n const attachment = this.attachedFiles.get(file.name);\n const currentText = attachment ? attachment.text : csvText;\n const currentMetadata = attachment ? attachment.metadata : metadata;\n\n this.options.csvModalManager.show({\n file,\n text: currentText,\n metadata: currentMetadata\n });\n }\n });\n\n // Assemble structure\n wrapper.appendChild(iconPlaceholder);\n wrapper.appendChild(card);\n\n return wrapper;\n }\n\n /**\n * Update CSV column header in stored text\n * @param {string} fileName - File name\n * @param {number} colIndex - Column index\n * @param {string} appendText - Text to append (e.g., \"/PST\")\n */\n updateCSVColumnHeader(fileName, colIndex, appendText) {\n const attachment = this.attachedFiles.get(fileName);\n if (!attachment) {\n console.warn('[AttachmentManager] File not found:', fileName);\n return;\n }\n\n // Parse CSV and update header\n const lines = attachment.text.split('\\n');\n if (lines.length === 0) {\n return;\n }\n\n const headers = lines[0].split(',').map(h => h.trim());\n if (colIndex >= headers.length) {\n return;\n }\n\n // Remove any existing suffix (text after /)\n const baseHeader = headers[colIndex].split('/')[0];\n headers[colIndex] = baseHeader + appendText;\n\n // Update first line\n lines[0] = headers.join(', ');\n\n // Update stored text\n attachment.text = lines.join('\\n');\n\n // Update metadata\n attachment.metadata.headers = headers;\n\n // Re-scan headers for matches\n const newMatches = this.scanCSVHeaders(headers);\n attachment.matches = newMatches;\n\n // Update icon visibility based on matches\n if (attachment.wrapper) {\n const iconPlaceholder = attachment.wrapper.querySelector('.tq-attachment-icon-placeholder');\n const existingIcon = iconPlaceholder?.querySelector('.tq-attachment-icon');\n\n if (newMatches.length === 0 && existingIcon) {\n // No more matches - remove the icon and collapse placeholder\n existingIcon.remove();\n\n // Collapse the icon placeholder by setting width to 0\n if (iconPlaceholder) {\n iconPlaceholder.style.width = '0';\n iconPlaceholder.style.minWidth = '0';\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Removed warning icon - all warnings resolved');\n }\n } else if (newMatches.length > 0 && !existingIcon) {\n // New matches appeared - add icon and expand placeholder\n const match = newMatches[0];\n const messageState = match.intent?.handler?.['message-state'] || 'warning';\n const iconMap = {\n 'error': 'trustquery-error.svg',\n 'warning': 'trustquery-warning.svg',\n 'info': 'trustquery-info.svg'\n };\n\n // Expand the icon placeholder back to normal width\n if (iconPlaceholder) {\n iconPlaceholder.style.width = '24px';\n iconPlaceholder.style.minWidth = '24px';\n }\n\n const icon = document.createElement('img');\n icon.className = 'tq-attachment-icon';\n icon.src = `./assets/${iconMap[messageState] || iconMap.warning}`;\n icon.title = `CSV column ${messageState} - click to review`;\n\n // Handle icon click\n icon.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.handleWarningClick(icon, newMatches, attachment.wrapper, fileName);\n });\n\n // Apply styles if styleManager exists\n if (this.options.styleManager) {\n this.options.styleManager.applyIconStyles(icon);\n }\n\n iconPlaceholder?.appendChild(icon);\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Added warning icon - new warnings detected');\n }\n }\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Updated CSV column', colIndex, 'to', headers[colIndex]);\n }\n }\n\n /**\n * Handle warning icon click - show dropdown\n * @param {HTMLElement} iconEl - Warning icon element\n * @param {Array} matches - CSV header matches\n * @param {HTMLElement} wrapper - Wrapper element\n * @param {string} fileName - File name for tracking\n */\n handleWarningClick(iconEl, matches, wrapper, fileName) {\n if (!this.options.dropdownManager || matches.length === 0) {\n return;\n }\n\n // Use the first match (could be enhanced to handle multiple)\n const match = matches[0];\n\n // Create match data similar to text matches\n const matchData = {\n text: match.header,\n command: {\n id: `csv-column-${match.columnIndex}`,\n match: match.header,\n matchType: 'csv-column',\n messageState: match.intent.handler['message-state'] || 'warning',\n category: match.intent.category,\n intent: match.intent,\n handler: match.intent.handler\n },\n intent: match.intent,\n // Add context for attachment icon click\n isAttachmentIcon: true,\n fileName: fileName,\n csvColumnIndex: match.columnIndex\n };\n\n // Show dropdown using DropdownManager\n this.options.dropdownManager.showDropdown(iconEl, matchData);\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Showing dropdown for CSV column:', match.header);\n }\n }\n\n /**\n * Add attachment to container\n * @param {File} file - File to attach\n */\n async addAttachment(file) {\n if (!file.name.endsWith('.csv')) {\n alert('Only CSV files are supported');\n return;\n }\n\n // Check if already attached\n if (this.attachedFiles.has(file.name)) {\n console.warn('[AttachmentManager] File already attached:', file.name);\n return;\n }\n\n // Read file to get metadata\n const text = await file.text();\n const metadata = this.parseCSVMetadata(text);\n\n // Scan CSV headers for trigger matches\n const matches = this.scanCSVHeaders(metadata.headers || []);\n\n // Create wrapper with card and icon\n const wrapper = this.createAttachmentCard(file, text, metadata, matches);\n\n // Store file reference with matches and text\n this.attachedFiles.set(file.name, { file, text, wrapper, metadata, matches });\n\n // Add to container\n this.options.container.appendChild(wrapper);\n this.options.container.classList.add('has-attachments');\n\n // Trigger callback\n if (this.options.onAttachmentAdd) {\n this.options.onAttachmentAdd({ file, metadata, matches });\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Added:', file.name, metadata, 'matches:', matches);\n }\n }\n\n /**\n * Remove attachment\n * @param {string} fileName - File name to remove\n * @param {HTMLElement} wrapper - Wrapper element\n */\n removeAttachment(fileName, wrapper) {\n wrapper.remove();\n const attachment = this.attachedFiles.get(fileName);\n this.attachedFiles.delete(fileName);\n\n // Remove has-attachments class if no attachments left\n if (this.attachedFiles.size === 0) {\n this.options.container.classList.remove('has-attachments');\n }\n\n // Trigger callback\n if (this.options.onAttachmentRemove && attachment) {\n this.options.onAttachmentRemove({ file: attachment.file, metadata: attachment.metadata });\n }\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Removed:', fileName);\n }\n }\n\n /**\n * Get all attached files\n * @returns {Array} - Array of { file, metadata }\n */\n getAttachments() {\n return Array.from(this.attachedFiles.values());\n }\n\n /**\n * Clear all attachments\n */\n clearAll() {\n this.attachedFiles.forEach((attachment, fileName) => {\n this.removeAttachment(fileName, attachment.wrapper);\n });\n }\n\n /**\n * Cleanup\n */\n destroy() {\n if (this.options.dropZone) {\n this.options.dropZone.removeEventListener('dragover', this.handleDragOver);\n this.options.dropZone.removeEventListener('dragleave', this.handleDragLeave);\n this.options.dropZone.removeEventListener('drop', this.handleDrop);\n }\n\n this.clearAll();\n\n if (this.options.debug) {\n console.log('[AttachmentManager] Destroyed');\n }\n }\n}\n","// AttachmentStyleManager - Handles all styling for attachment cards\n// Single responsibility: apply consistent inline styles to attachment UI elements\n\nexport default class AttachmentStyleManager {\n /**\n * Create attachment style manager\n * @param {Object} options - Style options\n */\n constructor(options = {}) {\n this.options = {\n // Card colors\n cardBackground: options.cardBackground || '#f0f9ff', // Light blue background\n cardBorder: options.cardBorder || '#e2e8f0',\n\n // Text colors\n headerColor: options.headerColor || '#1e293b',\n metaColor: options.metaColor || '#64748b',\n\n // Remove button colors\n removeBackground: options.removeBackground || '#ef4444',\n removeBackgroundHover: options.removeBackgroundHover || '#dc2626',\n\n ...options\n };\n }\n\n /**\n * Apply wrapper styles (container for icon + card)\n * @param {HTMLElement} wrapper - Wrapper element\n */\n applyWrapperStyles(wrapper) {\n Object.assign(wrapper.style, {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '6px'\n });\n }\n\n /**\n * Apply icon placeholder styles\n * @param {HTMLElement} placeholder - Icon placeholder element\n * @param {boolean} hasIcon - Whether icon is present\n */\n applyIconPlaceholderStyles(placeholder, hasIcon) {\n Object.assign(placeholder.style, {\n width: '24px',\n minWidth: '24px',\n height: '48px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: '0',\n transition: 'width 0.3s ease, min-width 0.3s ease'\n });\n }\n\n /**\n * Apply icon styles\n * @param {HTMLElement} icon - Icon element\n */\n applyIconStyles(icon) {\n if (!icon) return;\n\n Object.assign(icon.style, {\n width: '20px',\n height: '20px',\n cursor: 'pointer',\n transition: 'transform 0.2s'\n });\n\n // Hover effect - slight scale\n icon.addEventListener('mouseenter', () => {\n icon.style.transform = 'scale(1.1)';\n });\n\n icon.addEventListener('mouseleave', () => {\n icon.style.transform = 'scale(1)';\n });\n }\n\n /**\n * Apply card styles (reduced padding to prevent cutoff)\n * @param {HTMLElement} card - Card element\n */\n applyCardStyles(card) {\n Object.assign(card.style, {\n position: 'relative',\n background: this.options.cardBackground,\n border: `1px solid ${this.options.cardBorder}`,\n borderRadius: '6px',\n padding: '6px 10px',\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n boxSizing: 'border-box',\n maxHeight: '48px',\n overflow: 'hidden',\n flex: '1' // Take remaining space in wrapper\n });\n }\n\n /**\n * Apply remove button styles (dark icon, no background)\n * @param {HTMLElement} button - Remove button element\n */\n applyRemoveButtonStyles(button) {\n Object.assign(button.style, {\n position: 'absolute',\n top: '4px', // Adjusted for reduced padding\n right: '6px',\n background: 'transparent',\n color: '#64748b',\n border: 'none',\n borderRadius: '3px',\n width: '18px',\n height: '18px',\n fontSize: '18px',\n lineHeight: '1',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'color 0.2s',\n padding: '0',\n fontWeight: '400'\n });\n\n // Hover effect - darker color\n button.addEventListener('mouseenter', () => {\n button.style.color = '#1e293b'; // Darker on hover\n });\n\n button.addEventListener('mouseleave', () => {\n button.style.color = '#64748b'; // Back to gray\n });\n }\n\n /**\n * Apply header (file name) styles - smaller size\n * @param {HTMLElement} header - Header element\n */\n applyHeaderStyles(header) {\n Object.assign(header.style, {\n fontWeight: '600',\n fontSize: '11px', // Further reduced from 12px to 11px\n color: this.options.headerColor,\n paddingRight: '22px',\n wordBreak: 'break-word',\n lineHeight: '1.2' // Tighter line height\n });\n }\n\n /**\n * Apply metadata row styles\n * @param {HTMLElement} metaRow - Metadata row element\n */\n applyMetaStyles(metaRow) {\n Object.assign(metaRow.style, {\n display: 'flex',\n gap: '10px', // Slightly reduced from 12px\n fontSize: '10px', // Reduced from 11px\n color: this.options.metaColor,\n lineHeight: '1.2'\n });\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n }\n}\n","// CSVModalManager - Handles CSV modal display with trigger matching\n// Single responsibility: manage CSV modal lifecycle and rendering\n\nexport default class CSVModalManager {\n /**\n * Create CSV modal manager\n * @param {Object} options - Configuration options\n */\n constructor(options = {}) {\n this.options = {\n styleManager: options.styleManager || null,\n commandScanner: options.commandScanner || null,\n dropdownManager: options.dropdownManager || null,\n onCellClick: options.onCellClick || null,\n debug: options.debug || false,\n ...options\n };\n\n this.modal = null;\n this.currentCSVData = null;\n this.parsedData = null;\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Initialized');\n }\n }\n\n /**\n * Parse CSV text into 2D array\n * @param {string} csvText - Raw CSV text\n * @returns {Array} - 2D array of cells\n */\n parseCSV(csvText) {\n const lines = csvText.trim().split('\\n');\n return lines.map(line => {\n // Simple CSV parsing (handles basic cases)\n return line.split(',').map(cell => cell.trim());\n });\n }\n\n /**\n * Check if a cell value matches any triggers\n * @param {string} cellValue - Cell content\n * @returns {Object|null} - Match data or null\n */\n checkCellForTriggers(cellValue) {\n if (!this.options.commandScanner || !cellValue) {\n return null;\n }\n\n const commandMap = this.options.commandScanner.commandMap;\n if (!commandMap || !commandMap['tql-triggers']) {\n return null;\n }\n\n // Check all trigger states (error, warning, info)\n const triggers = commandMap['tql-triggers'];\n const allTriggers = [\n ...(triggers.error || []),\n ...(triggers.warning || []),\n ...(triggers.info || [])\n ];\n\n // Check each trigger\n for (const trigger of allTriggers) {\n // Handle 'match' type triggers\n if (trigger.type === 'match' && trigger.match) {\n for (const matchText of trigger.match) {\n if (cellValue.toLowerCase() === matchText.toLowerCase()) {\n return {\n text: cellValue,\n trigger,\n matchType: 'exact',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n\n // Handle 'csv-match-column' type triggers (for CSV headers)\n if (trigger.type === 'csv-match-column' && trigger.match) {\n for (const matchText of trigger.match) {\n if (cellValue.toLowerCase() === matchText.toLowerCase()) {\n return {\n text: cellValue,\n trigger,\n matchType: 'csv-column',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n\n // Handle 'regex' type triggers\n if (trigger.type === 'regex' && trigger.regex) {\n for (const pattern of trigger.regex) {\n const regex = new RegExp(pattern);\n if (regex.test(cellValue)) {\n return {\n text: cellValue,\n trigger,\n matchType: 'regex',\n messageState: trigger.handler?.['message-state'] || 'info'\n };\n }\n }\n }\n }\n\n return null;\n }\n\n /**\n * Create table cell with optional trigger highlighting\n * @param {string} cellValue - Cell content\n * @param {boolean} isHeader - Whether this is a header cell\n * @param {number} rowIndex - Row index\n * @param {number} colIndex - Column index\n * @returns {HTMLElement} - Table cell element\n */\n createCell(cellValue, isHeader, rowIndex, colIndex) {\n const cell = document.createElement(isHeader ? 'th' : 'td');\n\n // Check for trigger matches\n const match = this.checkCellForTriggers(cellValue);\n\n if (match) {\n // Create highlighted span\n const span = document.createElement('span');\n span.className = 'tq-csv-match';\n span.textContent = cellValue;\n span.setAttribute('data-message-state', match.messageState);\n span.setAttribute('data-row', rowIndex);\n span.setAttribute('data-col', colIndex);\n\n // Apply highlighting styles\n if (this.options.styleManager) {\n this.options.styleManager.applyCellMatchStyles(span, match.messageState);\n }\n\n // Add click handler to show dropdown\n span.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleCellMatchClick(span, match, rowIndex, colIndex);\n });\n\n cell.appendChild(span);\n } else {\n cell.textContent = cellValue;\n }\n\n // Apply cell styles\n if (this.options.styleManager) {\n if (isHeader) {\n this.options.styleManager.applyHeaderCellStyles(cell);\n } else {\n this.options.styleManager.applyDataCellStyles(cell);\n }\n }\n\n return cell;\n }\n\n /**\n * Handle click on matched cell\n * @param {HTMLElement} cellEl - Cell element\n * @param {Object} match - Match data\n * @param {number} rowIndex - Row index\n * @param {number} colIndex - Column index\n */\n handleCellMatchClick(cellEl, match, rowIndex, colIndex) {\n if (!this.options.dropdownManager) {\n return;\n }\n\n // Create match data for dropdown\n const matchData = {\n text: match.text,\n command: {\n id: `csv-cell-${rowIndex}-${colIndex}`,\n matchType: match.matchType,\n messageState: match.messageState,\n category: match.trigger.category,\n intent: {\n category: match.trigger.category,\n handler: match.trigger.handler\n },\n handler: match.trigger.handler\n },\n intent: {\n category: match.trigger.category,\n handler: match.trigger.handler\n },\n // Store cell position for updates\n csvCellPosition: {\n rowIndex,\n colIndex,\n isHeader: rowIndex === 0\n }\n };\n\n // Show dropdown\n this.options.dropdownManager.showDropdown(cellEl, matchData);\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Showing dropdown for cell:', match.text, 'at', rowIndex, colIndex);\n }\n }\n\n /**\n * Update column header with selected option\n * @param {number} colIndex - Column index\n * @param {string} appendText - Text to append (e.g., \"/PST\")\n */\n updateColumnHeader(colIndex, appendText) {\n if (!this.parsedData || !this.parsedData[0]) {\n return;\n }\n\n // Update parsed data\n const originalHeader = this.parsedData[0][colIndex];\n\n // Remove any existing suffix (text after /)\n const baseHeader = originalHeader.split('/')[0];\n this.parsedData[0][colIndex] = baseHeader + appendText;\n\n // Update the displayed table\n this.refreshTable();\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Updated column', colIndex, 'from', originalHeader, 'to', this.parsedData[0][colIndex]);\n }\n }\n\n /**\n * Refresh the table display\n */\n refreshTable() {\n if (!this.modal || !this.parsedData) {\n return;\n }\n\n // Find table container\n const tableContainer = this.modal.querySelector('.tq-csv-table-container');\n if (!tableContainer) {\n return;\n }\n\n // Clear and rebuild table\n tableContainer.innerHTML = '';\n const table = this.createTable(this.parsedData);\n tableContainer.appendChild(table);\n }\n\n /**\n * Create HTML table from parsed CSV data\n * @param {Array} data - 2D array of cells\n * @returns {HTMLElement} - Table element\n */\n createTable(data) {\n const table = document.createElement('table');\n table.className = 'tq-csv-table';\n\n // Create header row\n if (data.length > 0) {\n const thead = document.createElement('thead');\n const headerRow = document.createElement('tr');\n\n data[0].forEach((cellValue, colIndex) => {\n const cell = this.createCell(cellValue, true, 0, colIndex);\n headerRow.appendChild(cell);\n });\n\n thead.appendChild(headerRow);\n table.appendChild(thead);\n }\n\n // Create data rows\n if (data.length > 1) {\n const tbody = document.createElement('tbody');\n\n for (let i = 1; i < data.length; i++) {\n const row = document.createElement('tr');\n\n data[i].forEach((cellValue, colIndex) => {\n const cell = this.createCell(cellValue, false, i, colIndex);\n row.appendChild(cell);\n });\n\n tbody.appendChild(row);\n }\n\n table.appendChild(tbody);\n }\n\n // Apply table styles\n if (this.options.styleManager) {\n this.options.styleManager.applyTableStyles(table);\n }\n\n return table;\n }\n\n /**\n * Show CSV modal\n * @param {Object} csvData - { file, text, metadata }\n */\n show(csvData) {\n // Close any existing modal\n this.hide();\n\n this.currentCSVData = csvData;\n this.parsedData = this.parseCSV(csvData.text);\n\n // Create modal backdrop\n const backdrop = document.createElement('div');\n backdrop.className = 'tq-csv-modal-backdrop';\n\n // Create modal\n const modal = document.createElement('div');\n modal.className = 'tq-csv-modal';\n\n // Create header\n const header = document.createElement('div');\n header.className = 'tq-csv-modal-header';\n\n const title = document.createElement('div');\n title.className = 'tq-csv-modal-title';\n title.textContent = csvData.file.name;\n\n const closeBtn = document.createElement('button');\n closeBtn.className = 'tq-csv-modal-close';\n closeBtn.innerHTML = '×';\n closeBtn.onclick = () => this.hide();\n\n header.appendChild(title);\n header.appendChild(closeBtn);\n\n // Create table container (scrollable)\n const tableContainer = document.createElement('div');\n tableContainer.className = 'tq-csv-table-container';\n\n // Create table\n const table = this.createTable(this.parsedData);\n tableContainer.appendChild(table);\n\n // Assemble modal\n modal.appendChild(header);\n modal.appendChild(tableContainer);\n\n // Apply styles\n if (this.options.styleManager) {\n this.options.styleManager.applyBackdropStyles(backdrop);\n this.options.styleManager.applyModalStyles(modal);\n this.options.styleManager.applyHeaderStyles(header);\n this.options.styleManager.applyTitleStyles(title);\n this.options.styleManager.applyCloseButtonStyles(closeBtn);\n this.options.styleManager.applyTableContainerStyles(tableContainer);\n }\n\n // Add to document\n backdrop.appendChild(modal);\n document.body.appendChild(backdrop);\n\n this.modal = backdrop;\n\n // Close on backdrop click\n backdrop.addEventListener('click', (e) => {\n if (e.target === backdrop) {\n this.hide();\n }\n });\n\n // Close on Escape key\n this.escapeHandler = (e) => {\n if (e.key === 'Escape') {\n this.hide();\n }\n };\n document.addEventListener('keydown', this.escapeHandler);\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Modal shown for:', csvData.file.name);\n }\n }\n\n /**\n * Hide modal\n */\n hide() {\n if (this.modal) {\n this.modal.remove();\n this.modal = null;\n this.currentCSVData = null;\n this.parsedData = null;\n }\n\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = null;\n }\n\n if (this.options.debug) {\n console.log('[CSVModalManager] Modal hidden');\n }\n }\n\n /**\n * Cleanup\n */\n destroy() {\n this.hide();\n if (this.options.debug) {\n console.log('[CSVModalManager] Destroyed');\n }\n }\n}\n","// CSVModalStyleManager - Handles styling for CSV modal\n// Single responsibility: apply consistent styles to CSV modal elements\n\nexport default class CSVModalStyleManager {\n /**\n * Create CSV modal style manager\n * @param {Object} options - Style options\n */\n constructor(options = {}) {\n this.options = {\n // Modal colors\n backdropColor: options.backdropColor || 'rgba(0, 0, 0, 0.5)',\n modalBackground: options.modalBackground || '#ffffff',\n\n // Header colors\n headerBackground: options.headerBackground || '#f8fafc',\n headerBorder: options.headerBorder || '#e2e8f0',\n\n // Table colors\n tableBorder: options.tableBorder || '#e2e8f0',\n headerCellBackground: options.headerCellBackground || '#f1f5f9',\n cellBorder: options.cellBorder || '#e2e8f0',\n\n // Highlight colors (matching textarea triggers)\n errorHighlight: options.errorHighlight || '#fee2e2',\n errorBorder: options.errorBorder || '#ef4444',\n warningHighlight: options.warningHighlight || '#fef3c7',\n warningBorder: options.warningBorder || '#f59e0b',\n infoHighlight: options.infoHighlight || '#dbeafe',\n infoBorder: options.infoBorder || '#3b82f6',\n\n ...options\n };\n }\n\n /**\n * Apply backdrop styles\n * @param {HTMLElement} backdrop - Backdrop element\n */\n applyBackdropStyles(backdrop) {\n Object.assign(backdrop.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n backgroundColor: this.options.backdropColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: '10000',\n padding: '20px'\n });\n }\n\n /**\n * Apply modal styles\n * @param {HTMLElement} modal - Modal element\n */\n applyModalStyles(modal) {\n Object.assign(modal.style, {\n backgroundColor: this.options.modalBackground,\n borderRadius: '8px',\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.2)',\n maxWidth: '90vw',\n maxHeight: '90vh',\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden'\n });\n }\n\n /**\n * Apply header styles\n * @param {HTMLElement} header - Header element\n */\n applyHeaderStyles(header) {\n Object.assign(header.style, {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: `1px solid ${this.options.headerBorder}`,\n backgroundColor: this.options.headerBackground,\n flexShrink: '0'\n });\n }\n\n /**\n * Apply title styles\n * @param {HTMLElement} title - Title element\n */\n applyTitleStyles(title) {\n Object.assign(title.style, {\n fontSize: '18px',\n fontWeight: '600',\n color: '#1e293b'\n });\n }\n\n /**\n * Apply close button styles\n * @param {HTMLElement} button - Close button element\n */\n applyCloseButtonStyles(button) {\n Object.assign(button.style, {\n background: 'transparent',\n border: 'none',\n fontSize: '28px',\n color: '#64748b',\n cursor: 'pointer',\n lineHeight: '1',\n padding: '0',\n width: '32px',\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s, color 0.2s'\n });\n\n button.addEventListener('mouseenter', () => {\n button.style.backgroundColor = '#f1f5f9';\n button.style.color = '#1e293b';\n });\n\n button.addEventListener('mouseleave', () => {\n button.style.backgroundColor = 'transparent';\n button.style.color = '#64748b';\n });\n }\n\n /**\n * Apply table container styles (scrollable)\n * @param {HTMLElement} container - Table container element\n */\n applyTableContainerStyles(container) {\n Object.assign(container.style, {\n flex: '1',\n overflow: 'auto',\n padding: '20px'\n });\n }\n\n /**\n * Apply table styles\n * @param {HTMLElement} table - Table element\n */\n applyTableStyles(table) {\n Object.assign(table.style, {\n borderCollapse: 'collapse',\n width: '100%',\n fontSize: '14px',\n backgroundColor: '#ffffff'\n });\n }\n\n /**\n * Apply header cell styles\n * @param {HTMLElement} cell - Header cell element\n */\n applyHeaderCellStyles(cell) {\n Object.assign(cell.style, {\n padding: '12px 16px',\n textAlign: 'left',\n fontWeight: '600',\n backgroundColor: this.options.headerCellBackground,\n border: `1px solid ${this.options.tableBorder}`,\n color: '#1e293b',\n position: 'sticky',\n top: '0',\n zIndex: '10',\n whiteSpace: 'nowrap'\n });\n }\n\n /**\n * Apply data cell styles\n * @param {HTMLElement} cell - Data cell element\n */\n applyDataCellStyles(cell) {\n Object.assign(cell.style, {\n padding: '10px 16px',\n border: `1px solid ${this.options.cellBorder}`,\n color: '#334155',\n whiteSpace: 'nowrap'\n });\n }\n\n /**\n * Apply match highlighting styles to cell content\n * @param {HTMLElement} span - Span element\n * @param {string} messageState - Message state (error, warning, info)\n */\n applyCellMatchStyles(span, messageState) {\n const colorMap = {\n 'error': {\n background: this.options.errorHighlight,\n border: this.options.errorBorder\n },\n 'warning': {\n background: this.options.warningHighlight,\n border: this.options.warningBorder\n },\n 'info': {\n background: this.options.infoHighlight,\n border: this.options.infoBorder\n }\n };\n\n const colors = colorMap[messageState] || colorMap.info;\n\n Object.assign(span.style, {\n backgroundColor: colors.background,\n borderBottom: `2px solid ${colors.border}`,\n padding: '2px 4px',\n borderRadius: '3px',\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n display: 'inline-block'\n });\n\n // Hover effect\n span.addEventListener('mouseenter', () => {\n span.style.backgroundColor = this.adjustBrightness(colors.background, -10);\n });\n\n span.addEventListener('mouseleave', () => {\n span.style.backgroundColor = colors.background;\n });\n }\n\n /**\n * Adjust color brightness\n * @param {string} color - Hex color\n * @param {number} amount - Amount to adjust (-255 to 255)\n * @returns {string} - Adjusted color\n */\n adjustBrightness(color, amount) {\n // Simple brightness adjustment for hex colors\n const hex = color.replace('#', '');\n const num = parseInt(hex, 16);\n const r = Math.max(0, Math.min(255, (num >> 16) + amount));\n const g = Math.max(0, Math.min(255, ((num >> 8) & 0x00FF) + amount));\n const b = Math.max(0, Math.min(255, (num & 0x0000FF) + amount));\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;\n }\n\n /**\n * Update theme colors dynamically\n * @param {Object} newColors - New color options\n */\n updateTheme(newColors) {\n Object.assign(this.options, newColors);\n }\n}\n","// TrustQuery - Lightweight library to make textareas interactive\n// Turns matching words into interactive elements with hover bubbles and click actions\n\nimport OverlayRenderer from './OverlayRenderer.js';\nimport CommandScanner from './CommandScanner.js';\nimport InteractionHandler from './InteractionHandler.js';\nimport StyleManager from './StyleManager.js';\nimport CommandHandlerRegistry from './CommandHandlers.js';\nimport AutoGrow from './AutoGrow.js';\nimport ValidationStateManager from './ValidationStateManager.js';\nimport MobileKeyboardHandler from './MobileKeyboardHandler.js';\n\n// Import attachment managers for re-export\nimport AttachmentManager from './AttachmentManager.js';\nimport AttachmentStyleManager from './AttachmentStyleManager.js';\nimport CSVModalManager from './CSVModalManager.js';\nimport CSVModalStyleManager from './CSVModalStyleManager.js';\n\nexport default class TrustQuery {\n // Store all instances\n static instances = new Map();\n\n /**\n * Initialize TrustQuery on a textarea\n * @param {string|HTMLElement} textareaId - ID or element of textarea\n * @param {Object} options - Configuration options\n * @returns {TrustQuery} Instance\n */\n static init(textareaId, options = {}) {\n const textarea = typeof textareaId === 'string'\n ? document.getElementById(textareaId)\n : textareaId;\n\n if (!textarea) {\n console.error('[TrustQuery] Textarea not found:', textareaId);\n return null;\n }\n\n // Check if already initialized\n const existingInstance = TrustQuery.instances.get(textarea);\n if (existingInstance) {\n console.warn('[TrustQuery] Already initialized on this textarea, returning existing instance');\n return existingInstance;\n }\n\n // Create new instance\n const instance = new TrustQuery(textarea, options);\n TrustQuery.instances.set(textarea, instance);\n\n console.log('[TrustQuery] Initialized successfully on:', textarea.id || textarea);\n return instance;\n }\n\n /**\n * Get existing instance\n * @param {string|HTMLElement} textareaId - ID or element\n * @returns {TrustQuery|null} Instance or null\n */\n static getInstance(textareaId) {\n const textarea = typeof textareaId === 'string'\n ? document.getElementById(textareaId)\n : textareaId;\n return TrustQuery.instances.get(textarea) || null;\n }\n\n /**\n * Create a TrustQuery instance\n * @param {HTMLElement} textarea - Textarea element\n * @param {Object} options - Configuration\n */\n constructor(textarea, options = {}) {\n this.textarea = textarea;\n\n // Normalize options (support both old and new API)\n this.options = this.normalizeOptions(options);\n\n this.commandMap = null;\n this.isReady = false;\n this.features = {};\n\n // Initialize components\n this.init();\n }\n\n /**\n * Normalize options - support both old and new API\n * @param {Object} options - Raw options\n * @returns {Object} Normalized options\n */\n normalizeOptions(options) {\n // New API structure\n const triggerMap = options.triggerMap || {};\n const features = options.features || {};\n const ui = options.ui || {};\n const events = options.events || {};\n\n // Build normalized config (backward compatible)\n return {\n // Trigger map configuration\n commandMapUrl: triggerMap.url || options.commandMapUrl || null,\n commandMap: triggerMap.data || options.commandMap || null,\n autoLoadCommandMap: options.autoLoadCommandMap !== false,\n triggerMapSource: triggerMap.source || (triggerMap.url ? 'url' : triggerMap.data ? 'inline' : null),\n triggerMapApi: triggerMap.api || null,\n\n // Features\n autoGrow: features.autoGrow || false,\n autoGrowMaxHeight: features.maxHeight || 300,\n debug: features.debug || false,\n\n // UI settings\n theme: ui.theme || options.theme || 'light',\n bubbleDelay: ui.bubbleDelay !== undefined ? ui.bubbleDelay : (options.bubbleDelay || 200),\n dropdownOffset: ui.dropdownOffset !== undefined ? ui.dropdownOffset : (options.dropdownOffset || 28),\n\n // Events (callbacks)\n onWordClick: events.onWordClick || options.onWordClick || null,\n onWordHover: events.onWordHover || options.onWordHover || null,\n onValidationChange: events.onValidationChange || options.onValidationChange || null,\n\n // Theme/style options (passed to StyleManager)\n backgroundColor: ui.backgroundColor || options.backgroundColor,\n textColor: ui.textColor || options.textColor,\n caretColor: ui.caretColor || options.caretColor,\n borderColor: ui.borderColor || options.borderColor,\n borderColorFocus: ui.borderColorFocus || options.borderColorFocus,\n matchBackgroundColor: ui.matchBackgroundColor || options.matchBackgroundColor,\n matchTextColor: ui.matchTextColor || options.matchTextColor,\n matchHoverBackgroundColor: ui.matchHoverBackgroundColor || options.matchHoverBackgroundColor,\n fontFamily: ui.fontFamily || options.fontFamily,\n fontSize: ui.fontSize || options.fontSize,\n lineHeight: ui.lineHeight || options.lineHeight,\n\n ...options\n };\n }\n\n /**\n * Initialize all components\n */\n async init() {\n console.log('[TrustQuery] Starting initialization...');\n\n // Initialize command handler registry\n this.commandHandlers = new CommandHandlerRegistry();\n\n // Initialize style manager (handles all inline styling)\n this.styleManager = new StyleManager(this.options);\n\n // Create wrapper and overlay structure\n this.createOverlayStructure();\n\n // Initialize renderer\n this.renderer = new OverlayRenderer(this.overlay, {\n theme: this.options.theme,\n commandHandlers: this.commandHandlers, // Pass handlers for styling\n debug: this.options.debug // Pass debug flag\n });\n\n // Initialize scanner (will be configured when command map loads)\n this.scanner = new CommandScanner({\n debug: this.options.debug\n });\n\n // Initialize interaction handler\n this.interactionHandler = new InteractionHandler(this.overlay, {\n bubbleDelay: this.options.bubbleDelay,\n dropdownOffset: this.options.dropdownOffset,\n onWordClick: this.options.onWordClick,\n onWordHover: this.options.onWordHover,\n styleManager: this.styleManager, // Pass style manager for bubbles/dropdowns\n commandHandlers: this.commandHandlers, // Pass handlers for bubble content\n textarea: this.textarea, // Pass textarea for on-select display updates\n debug: this.options.debug // Pass debug flag\n });\n\n // Initialize validation state manager\n this.validationStateManager = new ValidationStateManager({\n onValidationChange: this.options.onValidationChange,\n debug: this.options.debug\n });\n\n // Initialize features\n this.initializeFeatures();\n\n // Setup textarea event listeners\n this.setupTextareaListeners();\n\n // Load command map\n if (this.options.autoLoadCommandMap) {\n await this.loadCommandMap();\n } else if (this.options.commandMap) {\n this.updateCommandMap(this.options.commandMap);\n }\n\n // Initial render\n this.render();\n\n this.isReady = true;\n\n // Auto-focus textarea to show cursor\n setTimeout(() => {\n this.textarea.focus();\n }, 100);\n\n console.log('[TrustQuery] Initialization complete');\n }\n\n /**\n * Initialize optional features based on configuration\n */\n initializeFeatures() {\n // Auto-grow textarea feature\n if (this.options.autoGrow) {\n this.features.autoGrow = new AutoGrow(this.textarea, {\n maxHeight: this.options.autoGrowMaxHeight,\n minHeight: 44\n });\n console.log('[TrustQuery] AutoGrow feature enabled');\n }\n\n // Mobile keyboard handler (enabled by default, can be disabled via options)\n if (this.options.mobileKeyboard !== false) {\n this.features.mobileKeyboard = new MobileKeyboardHandler({\n textarea: this.textarea,\n wrapper: this.wrapper,\n debug: this.options.debug\n });\n this.features.mobileKeyboard.init();\n console.log('[TrustQuery] Mobile keyboard handler enabled');\n }\n\n // Debug logging feature\n if (this.options.debug) {\n this.enableDebugLogging();\n console.log('[TrustQuery] Debug logging enabled');\n }\n }\n\n /**\n * Enable debug logging for events\n */\n enableDebugLogging() {\n const originalOnWordHover = this.options.onWordHover;\n const originalOnWordClick = this.options.onWordClick;\n\n this.options.onWordHover = (matchData) => {\n console.log('[TrustQuery Debug] Word Hover:', matchData);\n if (originalOnWordHover) originalOnWordHover(matchData);\n };\n\n this.options.onWordClick = (matchData) => {\n console.log('[TrustQuery Debug] Word Click:', matchData);\n if (originalOnWordClick) originalOnWordClick(matchData);\n };\n }\n\n /**\n * Create the overlay structure\n */\n createOverlayStructure() {\n // Create wrapper to contain both textarea and overlay\n const wrapper = document.createElement('div');\n wrapper.className = 'tq-wrapper';\n\n // Wrap textarea\n this.textarea.parentNode.insertBefore(wrapper, this.textarea);\n wrapper.appendChild(this.textarea);\n\n // Add TrustQuery class to textarea\n this.textarea.classList.add('tq-textarea');\n\n // Create overlay\n this.overlay = document.createElement('div');\n this.overlay.className = 'tq-overlay';\n wrapper.appendChild(this.overlay);\n\n // Store wrapper reference\n this.wrapper = wrapper;\n\n // Apply all inline styles via StyleManager\n this.styleManager.applyAllStyles(wrapper, this.textarea, this.overlay);\n\n // Show textarea now that structure is ready (prevents FOUC)\n this.textarea.style.opacity = '1';\n\n console.log('[TrustQuery] Overlay structure created with inline styles');\n }\n\n /**\n * Setup textarea event listeners\n */\n setupTextareaListeners() {\n // Input event - re-render on content change\n this.textarea.addEventListener('input', () => {\n this.render();\n });\n\n // Scroll event - sync overlay scroll with textarea\n this.textarea.addEventListener('scroll', () => {\n this.overlay.scrollTop = this.textarea.scrollTop;\n this.overlay.scrollLeft = this.textarea.scrollLeft;\n });\n\n // Keyboard event logging for debugging selection issues\n this.textarea.addEventListener('keydown', (e) => {\n const isCmdOrCtrl = e.metaKey || e.ctrlKey;\n const isSelectAll = (e.metaKey || e.ctrlKey) && e.key === 'a';\n\n if (isCmdOrCtrl || isSelectAll) {\n console.log('[TrustQuery] ===== KEYBOARD EVENT =====');\n console.log('[TrustQuery] Key pressed:', {\n key: e.key,\n code: e.code,\n metaKey: e.metaKey,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n altKey: e.altKey,\n isSelectAll: isSelectAll\n });\n console.log('[TrustQuery] Active element:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n console.log('[TrustQuery] Textarea state BEFORE:', {\n value: this.textarea.value,\n valueLength: this.textarea.value.length,\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd)\n });\n\n if (isSelectAll) {\n // Log state after select all (use setTimeout to let browser process the event)\n setTimeout(() => {\n console.log('[TrustQuery] Textarea state AFTER CMD+A:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd),\n selectedLength: this.textarea.selectionEnd - this.textarea.selectionStart\n });\n console.log('[TrustQuery] ===== KEYBOARD EVENT END =====');\n }, 0);\n } else {\n console.log('[TrustQuery] ===== KEYBOARD EVENT END =====');\n }\n }\n });\n\n // Selection change event\n this.textarea.addEventListener('select', (e) => {\n console.log('[TrustQuery] ===== SELECTION CHANGE EVENT =====');\n console.log('[TrustQuery] Selection:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd,\n selectedText: this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd),\n selectedLength: this.textarea.selectionEnd - this.textarea.selectionStart\n });\n });\n\n // Context menu event - prevent keyboard-triggered context menu\n this.textarea.addEventListener('contextmenu', (e) => {\n console.log('[TrustQuery] ===== CONTEXTMENU EVENT =====');\n console.log('[TrustQuery] Context menu triggered:', {\n type: e.type,\n isTrusted: e.isTrusted,\n button: e.button,\n buttons: e.buttons,\n clientX: e.clientX,\n clientY: e.clientY,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n target: e.target.tagName\n });\n\n // Prevent context menu if triggered by keyboard (button === -1)\n // This prevents the macOS context menu from opening after CMD+A\n if (e.button === -1 && e.buttons === 0) {\n console.log('[TrustQuery] Preventing keyboard-triggered context menu');\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n console.log('[TrustQuery] Allowing mouse-triggered context menu');\n });\n\n // Also prevent context menu on overlay (it interferes with text selection)\n this.overlay.addEventListener('contextmenu', (e) => {\n console.log('[TrustQuery] ===== CONTEXTMENU EVENT ON OVERLAY =====');\n console.log('[TrustQuery] Context menu on overlay - preventing');\n\n // Always prevent context menu on overlay\n // The overlay should be transparent to user interactions\n e.preventDefault();\n e.stopPropagation();\n });\n\n // Focus/blur events - add/remove focus class\n this.textarea.addEventListener('focus', (e) => {\n console.log('[TrustQuery] ===== FOCUS EVENT =====');\n console.log('[TrustQuery] Textarea focused. Active element:', document.activeElement.tagName, document.activeElement.id || '(no id)');\n console.log('[TrustQuery] Current selection:', {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd\n });\n this.wrapper.classList.add('tq-focused');\n });\n\n this.textarea.addEventListener('blur', (e) => {\n console.log('[TrustQuery] ===== BLUR EVENT =====');\n console.log('[TrustQuery] Textarea blurred. Related target:', e.relatedTarget?.tagName || '(none)');\n console.log('[TrustQuery] Blur event details:', {\n type: e.type,\n isTrusted: e.isTrusted,\n eventPhase: e.eventPhase,\n target: e.target.tagName,\n currentTarget: e.currentTarget.tagName\n });\n console.log('[TrustQuery] Stack trace at blur:');\n console.trace();\n\n // Close dropdown when textarea loses focus (unless interacting with dropdown)\n if (this.interactionHandler) {\n // Use setTimeout to let the new focus target be set and check if clicking on dropdown\n setTimeout(() => {\n const activeElement = document.activeElement;\n const isDropdownRelated = activeElement && (\n activeElement.classList.contains('tq-dropdown-filter') ||\n activeElement.closest('.tq-dropdown') // Check if clicking anywhere in dropdown\n );\n\n console.log('[TrustQuery] After blur - active element:', activeElement?.tagName || '(none)', 'isDropdownRelated:', isDropdownRelated);\n\n // Only close if not interacting with dropdown\n if (!isDropdownRelated) {\n this.interactionHandler.hideDropdown();\n }\n\n // Remove focus class only if we're truly leaving the component\n if (!isDropdownRelated) {\n this.wrapper.classList.remove('tq-focused');\n }\n }, 0);\n }\n });\n\n console.log('[TrustQuery] Textarea listeners attached');\n }\n\n /**\n * Load command map (static tql-triggers.json or from URL)\n */\n async loadCommandMap() {\n try {\n // Default to static file if no URL provided\n const url = this.options.commandMapUrl || '/trustquery/tql-triggers.json';\n\n console.log('[TrustQuery] Loading trigger map from:', url);\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = await response.json();\n this.updateCommandMap(data);\n\n console.log('[TrustQuery] Trigger map loaded successfully');\n } catch (error) {\n console.error('[TrustQuery] Failed to load trigger map:', error);\n }\n }\n\n /**\n * Update command map\n * @param {Object} commandMap - New command map\n */\n updateCommandMap(commandMap) {\n this.commandMap = commandMap;\n this.scanner.setCommandMap(commandMap);\n console.log('[TrustQuery] Command map updated');\n\n // Re-render with new command map\n if (this.isReady) {\n this.render();\n }\n }\n\n /**\n * Render the overlay with styled text\n */\n render() {\n const text = this.textarea.value;\n\n // Scan text for matches\n const matches = this.scanner.scan(text);\n\n // Render overlay with matches\n this.renderer.render(text, matches);\n\n // Update interaction handler with new elements\n this.interactionHandler.update();\n\n // Update validation state\n if (this.validationStateManager) {\n this.validationStateManager.update(matches);\n }\n }\n\n /**\n * Destroy instance and cleanup\n */\n destroy() {\n console.log('[TrustQuery] Destroying instance');\n\n // Remove event listeners\n this.textarea.removeEventListener('input', this.render);\n this.textarea.removeEventListener('scroll', this.syncScroll);\n\n // Cleanup interaction handler\n if (this.interactionHandler) {\n this.interactionHandler.destroy();\n }\n\n // Cleanup mobile keyboard handler\n if (this.features.mobileKeyboard) {\n this.features.mobileKeyboard.destroy();\n }\n\n // Cleanup auto-grow\n if (this.features.autoGrow) {\n this.features.autoGrow.destroy();\n }\n\n // Unwrap textarea\n const parent = this.wrapper.parentNode;\n parent.insertBefore(this.textarea, this.wrapper);\n parent.removeChild(this.wrapper);\n\n // Remove from instances\n TrustQuery.instances.delete(this.textarea);\n\n console.log('[TrustQuery] Destroyed');\n }\n\n /**\n * Get current value\n */\n getValue() {\n return this.textarea.value;\n }\n\n /**\n * Set value\n */\n setValue(value) {\n this.textarea.value = value;\n this.render();\n }\n}\n\n// Export attachment managers as named exports\nexport {\n AttachmentManager,\n AttachmentStyleManager,\n CSVModalManager,\n CSVModalStyleManager\n};\n"],"names":[],"mappings":"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"}