{"version":3,"file":"realsoft-reusable-components-select-search.mjs","sources":["../../../src/reusable-components/select-search/src/select-search.ts","../../../src/reusable-components/select-search/realsoft-reusable-components-select-search.ts"],"sourcesContent":["import { AfterViewInit, Directive, ElementRef, Renderer2, Input, OnDestroy, Output, EventEmitter, inject } from '@angular/core';\r\n\r\nexport interface RealsoftSearchFilterDetails {\r\n  searchTerm: string;\r\n  visibleCount: number;\r\n  selectedButHiddenCount: number;\r\n  multi: boolean;\r\n}\r\n\r\n@Directive({\r\n  selector: '[realsoft-search-input]',\r\n  exportAs: 'realsoftSearchInput',\r\n  standalone: true\r\n})\r\nexport class RealsoftSelectSearch implements AfterViewInit, OnDestroy {\r\n  private inputElement!: HTMLInputElement;\r\n  private optionElements: HTMLElement[] = [];\r\n  private selectContainer: HTMLElement | null = null;\r\n  private overlayPanel: HTMLElement | null = null;\r\n  private mutationObserver?: MutationObserver;\r\n  private overlayObserver?: MutationObserver;\r\n  \r\n  @Input() searchTarget: string = 'realsoft-option'; // Allow customization of target elements\r\n  @Input() searchProperty: string = 'textContent'; // Allow searching by different properties\r\n  @Input() caseSensitive: boolean = false; // Allow case-sensitive search\r\n  @Input() debounceTime: number = 0; // Optional debouncing\r\n  @Input() clearOnClose: boolean = true; // Auto-clear search when select closes\r\n\r\n  @Output() searchFilterApplied: EventEmitter<RealsoftSearchFilterDetails> = new EventEmitter<RealsoftSearchFilterDetails>();\r\n  @Output() searchCleared: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n  @Output() selectClosed: EventEmitter<{searchCleared: boolean}> = new EventEmitter<{searchCleared: boolean}>();\r\n  \r\n  private debounceTimer: any;\r\n  private isSelectOpen: boolean = false;\r\n  private isMultiSelect: boolean = false;\r\n  private el = inject(ElementRef);\r\n  private renderer = inject(Renderer2);\r\n\r\n  constructor() {}\r\n\r\n  ngAfterViewInit() {\r\n    this.inputElement = this.el.nativeElement as HTMLInputElement;\r\n    \r\n    // Find the closest select container\r\n    this.selectContainer = this.findSelectContainer(this.inputElement);\r\n    \r\n    // Determine if this is a multi-select\r\n    this.detectMultiSelect();\r\n    \r\n    // Setup search listener immediately\r\n    this.setupSearchListener();\r\n    \r\n    // Setup observer for dynamic content (like CDK overlays)\r\n    this.setupDynamicContentObserver();\r\n    \r\n    // Setup overlay close detection\r\n    this.setupOverlayCloseDetection();\r\n    \r\n    // Try to collect options initially (for static content)\r\n    this.collectOptionElements();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.debounceTimer) {\r\n      clearTimeout(this.debounceTimer);\r\n    }\r\n    if (this.mutationObserver) {\r\n      this.mutationObserver.disconnect();\r\n    }\r\n    if (this.overlayObserver) {\r\n      this.overlayObserver.disconnect();\r\n    }\r\n  }\r\n\r\n  private detectMultiSelect() {\r\n    if (this.selectContainer) {\r\n      // Check for common multi-select indicators\r\n      const select = this.selectContainer.querySelector('realsoft-select,  select');\r\n      if (select) {\r\n        this.isMultiSelect = select.hasAttribute('multiple') || \r\n                           select.getAttribute('aria-multiselectable') === 'true' ||\r\n                           select.classList.contains('multi-select');\r\n      }\r\n    }\r\n  }\r\n\r\n  private isOptionSelected(option: HTMLElement): boolean {\r\n    // Check various ways an option might be marked as selected\r\n    return option.hasAttribute('selected') ||\r\n           option.getAttribute('aria-selected') === 'true' ||\r\n           option.classList.contains('selected') ||\r\n           option.classList.contains('realsoft-selected') ||\r\n           option.classList.contains('cdk-selected');\r\n  }\r\n\r\n  private setupOverlayCloseDetection() {\r\n    if (!this.clearOnClose) return;\r\n\r\n    // Listen for clicks outside the select to detect close\r\n    this.renderer.listen('document', 'click', (event) => {\r\n      if (this.isSelectOpen && this.inputElement && this.overlayPanel) {\r\n        const clickedElement = event.target as HTMLElement;\r\n        \r\n        // Check if click is outside the select and overlay\r\n        const isInsideInput = this.inputElement.contains(clickedElement);\r\n        const isInsideOverlay = this.overlayPanel.contains(clickedElement);\r\n        const isInsideSelect = this.selectContainer?.contains(clickedElement);\r\n        \r\n        if (!isInsideInput && !isInsideOverlay && !isInsideSelect) {\r\n          this.onSelectClose();\r\n        }\r\n      }\r\n    });\r\n\r\n    // Listen for escape key to detect close\r\n    this.renderer.listen('document', 'keydown', (event) => {\r\n      if (this.isSelectOpen && event.key === 'Escape') {\r\n        this.onSelectClose();\r\n      }\r\n    });\r\n\r\n    // Observer to detect when overlay panel is removed from DOM\r\n    this.overlayObserver = new MutationObserver((mutations) => {\r\n      mutations.forEach((mutation) => {\r\n        if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {\r\n          const removedElements = Array.from(mutation.removedNodes).filter(node => \r\n            node.nodeType === Node.ELEMENT_NODE\r\n          ) as HTMLElement[];\r\n          \r\n          for (const element of removedElements) {\r\n            if (element === this.overlayPanel || \r\n                element.classList.contains('realsoft-select-panel') ||\r\n                element.classList.contains('cdk-overlay-pane')) {\r\n              this.onSelectClose();\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n\r\n    // Start observing the document body for overlay removal\r\n    this.overlayObserver.observe(document.body, {\r\n      childList: true,\r\n      subtree: true\r\n    });\r\n  }\r\n\r\n  private onSelectClose() {\r\n    if (this.isSelectOpen) {\r\n      this.isSelectOpen = false;\r\n      \r\n      if (this.clearOnClose && this.inputElement.value) {\r\n        this.clearSearch();\r\n        \r\n        // Emit custom event for close\r\n        this.selectClosed.emit({ searchCleared: true });\r\n    }\r\n  }\r\n}\r\n\r\n  private setupDynamicContentObserver() {\r\n    // Watch for changes in the DOM to detect when overlay content is added\r\n    this.mutationObserver = new MutationObserver((mutations) => {\r\n      mutations.forEach((mutation) => {\r\n        if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {\r\n          // Check if any added nodes contain our target options\r\n          const addedElements = Array.from(mutation.addedNodes).filter(node => \r\n            node.nodeType === Node.ELEMENT_NODE\r\n          ) as HTMLElement[];\r\n          \r\n          for (const element of addedElements) {\r\n            if (element.classList.contains('realsoft-select-panel') || \r\n                element.classList.contains('cdk-overlay-pane') ||\r\n                element.querySelector(this.searchTarget)) {\r\n              // Select is opening\r\n              this.isSelectOpen = true;\r\n              \r\n              // Re-collect options when overlay content is added\r\n              setTimeout(() => this.collectOptionElements(), 0);\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    });\r\n\r\n    // Start observing the document body for overlay changes\r\n    this.mutationObserver.observe(document.body, {\r\n      childList: true,\r\n      subtree: true\r\n    });\r\n  }\r\n\r\n  private findSelectContainer(element: HTMLElement): HTMLElement | null {\r\n    let current = element.parentElement;\r\n    \r\n    while (current) {\r\n      // Look for common select container selectors\r\n      if (current.tagName.toLowerCase() === 'realsoft-select' || \r\n          current.classList.contains('realsoft-select-panel') ||\r\n          current.classList.contains('select-container')) {\r\n        return current;\r\n      }\r\n      current = current.parentElement;\r\n    }\r\n    \r\n    return null;\r\n  }\r\n\r\n  private collectOptionElements() {\r\n    // Clear previous options\r\n    this.optionElements = [];\r\n    \r\n    // First try to find options in the direct container\r\n    if (this.selectContainer) {\r\n      const directOptions = this.selectContainer.querySelectorAll(this.searchTarget);\r\n      this.optionElements = Array.from(directOptions) as HTMLElement[];\r\n    }\r\n    \r\n    // If no options found, look in overlay panels\r\n    if (this.optionElements.length === 0) {\r\n      const overlayPanels = Array.from(document.querySelectorAll('.realsoft-select-panel, .cdk-overlay-pane'));\r\n      \r\n      for (const panel of overlayPanels) {\r\n        const options = panel.querySelectorAll(this.searchTarget);\r\n        if (options.length > 0) {\r\n          this.optionElements = Array.from(options) as HTMLElement[];\r\n          this.overlayPanel = panel as HTMLElement;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  private setupSearchListener() {\r\n    this.renderer.listen(this.inputElement, 'input', (event) => {\r\n      const value = (event.target as HTMLInputElement).value;\r\n      \r\n      if (this.debounceTime > 0) {\r\n        if (this.debounceTimer) {\r\n          clearTimeout(this.debounceTimer);\r\n        }\r\n        this.debounceTimer = setTimeout(() => {\r\n          this.performSearch(value);\r\n        }, this.debounceTime);\r\n      } else {\r\n        this.performSearch(value);\r\n      }\r\n    });\r\n\r\n    // Prevent the input from triggering select option selection\r\n    this.renderer.listen(this.inputElement, 'click', (event) => {\r\n      event.stopPropagation();\r\n    });\r\n\r\n    this.renderer.listen(this.inputElement, 'keydown', (event) => {\r\n      // Prevent space key from triggering select actions\r\n      if (event.key === ' ') {\r\n        event.stopPropagation();\r\n      }\r\n      \r\n      // Handle escape to clear search (but don't close select)\r\n      if (event.key === 'Escape') {\r\n        this.clearSearch();\r\n        event.stopPropagation();\r\n      }\r\n    });\r\n\r\n    // Listen for focus to re-collect options (useful when select opens)\r\n    this.renderer.listen(this.inputElement, 'focus', () => {\r\n      this.isSelectOpen = true;\r\n      // Delay collection to ensure overlay is rendered\r\n      setTimeout(() => this.collectOptionElements(), 100);\r\n    });\r\n  }\r\n\r\n  private performSearch(searchTerm: string) {\r\n    // Re-collect options if we don't have any (handles dynamic content)\r\n    if (this.optionElements.length === 0) {\r\n      this.collectOptionElements();\r\n    }\r\n\r\n    const normalizedSearchTerm = this.caseSensitive ? searchTerm : searchTerm.toLowerCase();\r\n\r\n    let visibleCount = 0;\r\n    let selectedButHiddenCount = 0;\r\n\r\n    this.optionElements.forEach(option => {\r\n      const text = this.getSearchableText(option);\r\n      const normalizedText = this.caseSensitive ? text : text.toLowerCase();\r\n      const matchesSearch = normalizedText.includes(normalizedSearchTerm);\r\n      const isSelected = this.isOptionSelected(option);\r\n      \r\n      // Determine if option should be visible\r\n      let shouldShow = matchesSearch;\r\n      \r\n      // In multi-select mode, keep selected items visible if configured\r\n      if (this.isMultiSelect && isSelected) {\r\n        shouldShow = true;\r\n      }\r\n      \r\n      // Apply visibility\r\n      this.renderer.setStyle(option, 'display', shouldShow ? '' : 'none');\r\n      \r\n      // Remove previous search-related classes\r\n      this.renderer.removeClass(option, 'search-hidden');\r\n      this.renderer.removeClass(option, 'search-selected-nomatch');\r\n      \r\n      if (shouldShow) {\r\n        visibleCount++;\r\n        \r\n        // Add special styling for selected items that don't match search\r\n        if (this.isMultiSelect && isSelected && !matchesSearch && searchTerm) {\r\n          this.renderer.addClass(option, 'search-selected-nomatch');\r\n        }\r\n      } else {\r\n        this.renderer.addClass(option, 'search-hidden');\r\n        \r\n        if (isSelected) {\r\n          selectedButHiddenCount++;\r\n        }\r\n      }\r\n    });\r\n\r\n    this.searchFilterApplied.emit({\r\n      searchTerm: searchTerm, \r\n      visibleCount: visibleCount,\r\n      selectedButHiddenCount: selectedButHiddenCount,\r\n      multi: this.isMultiSelect\r\n    })\r\n  }\r\n\r\n  private getSearchableText(option: HTMLElement): string {\r\n    if (this.searchProperty === 'textContent') {\r\n      return option.textContent || '';\r\n    } else if (this.searchProperty === 'value') {\r\n      return option.getAttribute('value') || '';\r\n    } else {\r\n      return option.getAttribute(this.searchProperty) || option.textContent || '';\r\n    }\r\n  }\r\n\r\n  public clearSearch() {\r\n    this.inputElement.value = '';\r\n    this.optionElements.forEach(option => {\r\n      this.renderer.setStyle(option, 'display', '');\r\n      this.renderer.removeClass(option, 'search-hidden');\r\n      this.renderer.removeClass(option, 'search-selected-nomatch');\r\n    });\r\n\r\n    // Emit clear event\r\n    this.searchCleared.emit(true);\r\n  }\r\n\r\n  public refreshOptions() {\r\n    this.collectOptionElements();\r\n  }\r\n\r\n  // Public method to programmatically search\r\n  public search(term: string) {\r\n    this.inputElement.value = term;\r\n    this.performSearch(term);\r\n  }\r\n\r\n  // Public method to enable/disable auto-clear\r\n  public setClearOnClose(enabled: boolean) {\r\n    this.clearOnClose = enabled;\r\n  }\r\n\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}