@trustquery/browser 0.2.3 → 0.2.4

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.
@@ -249,9 +249,10 @@ class OverlayRenderer {
249
249
  // Uses simple string matching (not regex) for simplicity and performance
250
250
 
251
251
  class CommandScanner {
252
- constructor() {
252
+ constructor(options = {}) {
253
253
  this.commandMap = null;
254
254
  this.commands = [];
255
+ this.debug = options.debug || false;
255
256
  console.log('[CommandScanner] Initialized');
256
257
  }
257
258
 
@@ -425,6 +426,16 @@ class CommandScanner {
425
426
  let match;
426
427
 
427
428
  while ((match = regex.exec(line)) !== null) {
429
+ if (this.debug) {
430
+ console.log('[CommandScanner] Regex match debug:', {
431
+ pattern: command.match,
432
+ line: line,
433
+ 'match[0]': match[0],
434
+ 'match[0].length': match[0].length,
435
+ index: match.index
436
+ });
437
+ }
438
+
428
439
  matches.push({
429
440
  text: match[0],
430
441
  line: lineIndex,
@@ -2801,7 +2812,9 @@ class TrustQuery {
2801
2812
  });
2802
2813
 
2803
2814
  // Initialize scanner (will be configured when command map loads)
2804
- this.scanner = new CommandScanner();
2815
+ this.scanner = new CommandScanner({
2816
+ debug: this.options.debug
2817
+ });
2805
2818
 
2806
2819
  // Initialize interaction handler
2807
2820
  this.interactionHandler = new InteractionHandler(this.overlay, {
@@ -2817,7 +2830,8 @@ class TrustQuery {
2817
2830
 
2818
2831
  // Initialize validation state manager
2819
2832
  this.validationStateManager = new ValidationStateManager({
2820
- onValidationChange: this.options.onValidationChange
2833
+ onValidationChange: this.options.onValidationChange,
2834
+ debug: this.options.debug
2821
2835
  });
2822
2836
 
2823
2837
  // Initialize features
@@ -1 +1 @@
1
- {"version":3,"file":"trustquery.js","sources":["../src/OverlayRenderer.js","../src/CommandScanner.js","../src/BubbleManager.js","../src/DropdownManager.js","../src/InteractionHandler.js","../src/StyleManager.js","../src/CommandHandlers.js","../src/AutoGrow.js","../src/ValidationStateManager.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() {\n this.commandMap = null;\n this.commands = [];\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 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","// DropdownManager - Handles dropdown menus with filtering, keyboard navigation, and selection\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\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownStyles(dropdown);\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\n setTimeout(() => {\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 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 item.textContent = typeof option === 'string' ? option : option.label || option.value;\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 item.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\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('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\n if (this.activeDropdown && !this.activeDropdown.contains(e.target)) {\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 rect = matchEl.getBoundingClientRect();\n const dropdownRect = dropdown.getBoundingClientRect();\n const offset = this.options.dropdownOffset;\n\n // Position above match by default (since input is at bottom)\n let top = rect.top + window.scrollY - dropdownRect.height - offset;\n let left = rect.left + window.scrollX;\n\n // If dropdown goes off top edge, position below instead\n if (top < window.scrollY) {\n top = rect.bottom + window.scrollY + offset;\n }\n\n // Check if dropdown goes off right edge\n if (left + dropdownRect.width > window.innerWidth) {\n left = window.innerWidth - dropdownRect.width - 10;\n }\n\n dropdown.style.top = `${top}px`;\n dropdown.style.left = `${left}px`;\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 e.preventDefault();\n e.stopPropagation();\n\n const behavior = matchEl.getAttribute('data-behavior');\n const matchData = this.getMatchData(matchEl);\n\n console.log('[InteractionHandler] Match clicked:', matchData);\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\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 */\n applyDropdownStyles(dropdown) {\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: '300px',\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 }\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\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","// 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';\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\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 });\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 // 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 // Focus/blur events - add/remove focus class\n this.textarea.addEventListener('focus', () => {\n this.wrapper.classList.add('tq-focused');\n });\n\n this.textarea.addEventListener('blur', (e) => {\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 // 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 // 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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trustquery.js","sources":["../src/OverlayRenderer.js","../src/CommandScanner.js","../src/BubbleManager.js","../src/DropdownManager.js","../src/InteractionHandler.js","../src/StyleManager.js","../src/CommandHandlers.js","../src/AutoGrow.js","../src/ValidationStateManager.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","// DropdownManager - Handles dropdown menus with filtering, keyboard navigation, and selection\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\n if (this.options.styleManager) {\n this.options.styleManager.applyDropdownStyles(dropdown);\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\n setTimeout(() => {\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 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 item.textContent = typeof option === 'string' ? option : option.label || option.value;\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 item.addEventListener('click', (e) => {\n e.stopPropagation();\n this.handleDropdownSelect(option, matchData);\n this.hideDropdown();\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('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\n if (this.activeDropdown && !this.activeDropdown.contains(e.target)) {\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 rect = matchEl.getBoundingClientRect();\n const dropdownRect = dropdown.getBoundingClientRect();\n const offset = this.options.dropdownOffset;\n\n // Position above match by default (since input is at bottom)\n let top = rect.top + window.scrollY - dropdownRect.height - offset;\n let left = rect.left + window.scrollX;\n\n // If dropdown goes off top edge, position below instead\n if (top < window.scrollY) {\n top = rect.bottom + window.scrollY + offset;\n }\n\n // Check if dropdown goes off right edge\n if (left + dropdownRect.width > window.innerWidth) {\n left = window.innerWidth - dropdownRect.width - 10;\n }\n\n dropdown.style.top = `${top}px`;\n dropdown.style.left = `${left}px`;\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 e.preventDefault();\n e.stopPropagation();\n\n const behavior = matchEl.getAttribute('data-behavior');\n const matchData = this.getMatchData(matchEl);\n\n console.log('[InteractionHandler] Match clicked:', matchData);\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\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 */\n applyDropdownStyles(dropdown) {\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: '300px',\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 }\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\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","// 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';\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 // 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 // Focus/blur events - add/remove focus class\n this.textarea.addEventListener('focus', () => {\n this.wrapper.classList.add('tq-focused');\n });\n\n this.textarea.addEventListener('blur', (e) => {\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 // 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 // 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"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trustquery/browser",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Turn any textarea into an interactive trigger-based editor with inline styling",
5
5
  "type": "module",
6
6
  "main": "dist/trustquery.js",
@@ -2,9 +2,10 @@
2
2
  // Uses simple string matching (not regex) for simplicity and performance
3
3
 
4
4
  export default class CommandScanner {
5
- constructor() {
5
+ constructor(options = {}) {
6
6
  this.commandMap = null;
7
7
  this.commands = [];
8
+ this.debug = options.debug || false;
8
9
  console.log('[CommandScanner] Initialized');
9
10
  }
10
11
 
@@ -178,6 +179,16 @@ export default class CommandScanner {
178
179
  let match;
179
180
 
180
181
  while ((match = regex.exec(line)) !== null) {
182
+ if (this.debug) {
183
+ console.log('[CommandScanner] Regex match debug:', {
184
+ pattern: command.match,
185
+ line: line,
186
+ 'match[0]': match[0],
187
+ 'match[0].length': match[0].length,
188
+ index: match.index
189
+ });
190
+ }
191
+
181
192
  matches.push({
182
193
  text: match[0],
183
194
  line: lineIndex,
package/src/TrustQuery.js CHANGED
@@ -151,7 +151,9 @@ export default class TrustQuery {
151
151
  });
152
152
 
153
153
  // Initialize scanner (will be configured when command map loads)
154
- this.scanner = new CommandScanner();
154
+ this.scanner = new CommandScanner({
155
+ debug: this.options.debug
156
+ });
155
157
 
156
158
  // Initialize interaction handler
157
159
  this.interactionHandler = new InteractionHandler(this.overlay, {
@@ -167,7 +169,8 @@ export default class TrustQuery {
167
169
 
168
170
  // Initialize validation state manager
169
171
  this.validationStateManager = new ValidationStateManager({
170
- onValidationChange: this.options.onValidationChange
172
+ onValidationChange: this.options.onValidationChange,
173
+ debug: this.options.debug
171
174
  });
172
175
 
173
176
  // Initialize features