{"version":3,"sources":["../src/components/Search/Search.tsx"],"sourcesContent":["import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react/dist/csr/MagnifyingGlass';\nimport {\n  InputHTMLAttributes,\n  forwardRef,\n  useState,\n  useId,\n  useMemo,\n  useEffect,\n  useRef,\n  ChangeEvent,\n  MouseEvent,\n  KeyboardEvent,\n} from 'react';\nimport DropdownMenu, {\n  DropdownMenuContent,\n  DropdownMenuItem,\n  createDropdownStore,\n} from '../DropdownMenu/DropdownMenu';\n\n/**\n * Search component props interface\n */\ntype SearchProps = {\n  /** List of options to show in dropdown */\n  options: string[];\n  /** Callback when an option is selected from dropdown */\n  onSelect?: (value: string) => void;\n  /** Callback when search input changes */\n  onSearch?: (query: string) => void;\n  /** Control dropdown visibility externally */\n  showDropdown?: boolean;\n  /** Callback when dropdown open state changes */\n  onDropdownChange?: (open: boolean) => void;\n  /** Maximum height of dropdown in pixels */\n  dropdownMaxHeight?: number;\n  /** Text to show when no results are found */\n  noResultsText?: string;\n  /** Debounce delay in ms for onSearch. Default 0 (no debounce). */\n  debounceMs?: number;\n  /** Additional CSS classes to apply to the input */\n  className?: string;\n  /** Additional CSS classes to apply to the container */\n  containerClassName?: string;\n  /** Callback when clear button is clicked */\n  onClear?: () => void;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'onSelect'>;\n\n/**\n * Search component for Analytica Ensino platforms\n *\n * A specialized search input component with dropdown suggestions.\n * Features filtering, keyboard navigation, and customizable options.\n *\n * @param options - Array of search options to display in dropdown\n * @param onSelect - Callback when an option is selected\n * @param onSearch - Callback when search query changes\n * @param placeholder - Placeholder text for the input\n * @param noResultsText - Text to show when no results are found\n * @param dropdownMaxHeight - Maximum height of dropdown in pixels\n * @param className - Additional CSS classes for the input\n * @param containerClassName - Additional CSS classes for the container\n * @param props - All other standard input HTML attributes\n * @returns A styled search input with dropdown functionality\n *\n * @example\n * ```tsx\n * // Basic search\n * <Search\n *   options={['Filosofia', 'Física', 'Matemática']}\n *   placeholder=\"Buscar matéria...\"\n *   onSelect={(value) => console.log('Selected:', value)}\n * />\n *\n * // With custom filtering\n * <Search\n *   options={materias}\n *   onSearch={(query) => setFilteredMaterias(filterMaterias(query))}\n *   noResultsText=\"Nenhum resultado encontrado\"\n * />\n * ```\n */\n\n/**\n * Filter options based on search query\n */\nconst filterOptions = (options: string[], query: string): string[] => {\n  if (!query || query.length < 1) return [];\n\n  return options.filter((option) =>\n    option.toLowerCase().includes(query.toLowerCase())\n  );\n};\n\n/**\n * Updates input value and creates appropriate change event\n */\nconst updateInputValue = (\n  value: string,\n  ref:\n    | { current: HTMLInputElement | null }\n    | ((instance: HTMLInputElement | null) => void)\n    | null,\n  onChange?: (event: ChangeEvent<HTMLInputElement>) => void\n) => {\n  if (!onChange) return;\n\n  if (ref && 'current' in ref && ref.current) {\n    ref.current.value = value;\n    const event = new Event('input', { bubbles: true });\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: ref.current,\n    });\n    onChange(event as unknown as ChangeEvent<HTMLInputElement>);\n  } else {\n    // Fallback for cases where ref is not available\n    const event = {\n      target: { value },\n      currentTarget: { value },\n    } as ChangeEvent<HTMLInputElement>;\n    onChange(event);\n  }\n};\n\nconst Search = forwardRef<HTMLInputElement, SearchProps>(\n  (\n    {\n      options = [],\n      onSelect,\n      onSearch,\n      showDropdown: controlledShowDropdown,\n      onDropdownChange,\n      dropdownMaxHeight = 240,\n      noResultsText = 'Nenhum resultado encontrado',\n      className = '',\n      containerClassName = '',\n      disabled,\n      readOnly,\n      id,\n      onClear,\n      value,\n      onChange,\n      placeholder = 'Buscar...',\n      onKeyDown: userOnKeyDown,\n      debounceMs = 0,\n      ...props\n    },\n    ref\n  ) => {\n    // Dropdown state and logic\n    const [dropdownOpen, setDropdownOpen] = useState(false);\n    const [forceClose, setForceClose] = useState(false);\n    const justSelectedRef = useRef(false);\n    const dropdownStore = useRef(createDropdownStore()).current;\n    const dropdownRef = useRef<HTMLDivElement>(null);\n    const inputElRef = useRef<HTMLInputElement>(null);\n    const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    useEffect(() => {\n      return () => {\n        if (debounceTimer.current) clearTimeout(debounceTimer.current);\n      };\n    }, []);\n\n    // Filter options based on input value\n    const filteredOptions = useMemo(() => {\n      if (!options.length) {\n        return [];\n      }\n      const filtered = filterOptions(options, (value as string) || '');\n      return filtered;\n    }, [options, value]);\n\n    // Control dropdown visibility\n    const showDropdown =\n      !forceClose &&\n      (controlledShowDropdown ??\n        (dropdownOpen && value && String(value).length > 0));\n\n    // Helper to keep all consumers in sync\n    const setOpenAndNotify = (open: boolean) => {\n      setDropdownOpen(open);\n      dropdownStore.setState({ open });\n      onDropdownChange?.(open);\n    };\n\n    // Handle dropdown visibility changes\n    useEffect(() => {\n      // Don't reopen dropdown if we just selected an option\n      if (justSelectedRef.current) {\n        justSelectedRef.current = false;\n        return;\n      }\n      // Respect forceClose even if value is non-empty\n      if (forceClose) {\n        setOpenAndNotify(false);\n        return;\n      }\n\n      const shouldShow = Boolean(value && String(value).length > 0);\n      setOpenAndNotify(shouldShow);\n    }, [value, forceClose, onDropdownChange, dropdownStore]);\n\n    // Handle option selection\n    const handleSelectOption = (option: string) => {\n      justSelectedRef.current = true; // Prevent immediate dropdown reopen\n      setForceClose(true); // Force dropdown to close immediately\n      onSelect?.(option);\n      setOpenAndNotify(false);\n\n      // Update input value if onChange is provided\n      updateInputValue(option, ref, onChange);\n    };\n\n    // Handle click outside dropdown\n    useEffect(() => {\n      const handleClickOutside = (event: globalThis.MouseEvent) => {\n        if (\n          dropdownRef.current &&\n          !dropdownRef.current.contains(event.target as Node)\n        ) {\n          setOpenAndNotify(false);\n        }\n      };\n\n      if (showDropdown) {\n        document.addEventListener('click', handleClickOutside);\n      }\n\n      return () => {\n        document.removeEventListener('click', handleClickOutside);\n      };\n    }, [showDropdown, dropdownStore, onDropdownChange]);\n\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `search-${generatedId}`;\n    const dropdownId = `${inputId}-dropdown`;\n\n    // Handle clear button\n    const handleClear = () => {\n      if (debounceTimer.current) {\n        clearTimeout(debounceTimer.current);\n        debounceTimer.current = null;\n      }\n      if (onClear) {\n        onClear();\n      } else {\n        updateInputValue('', ref, onChange);\n      }\n    };\n\n    // Handle clear button click - mantém foco no input\n    const handleClearClick = (e: MouseEvent) => {\n      e.preventDefault(); // Evita que o input perca foco\n      e.stopPropagation(); // Para propagação do evento\n      handleClear();\n    };\n\n    // Handle search icon click - focus on input\n    const handleSearchIconClick = (e: MouseEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setTimeout(() => {\n        inputElRef.current?.focus();\n      }, 0);\n    };\n\n    // Handle input change\n    const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n      setForceClose(false); // Allow dropdown to open when user types\n      onChange?.(e);\n      if (debounceMs > 0) {\n        if (debounceTimer.current) clearTimeout(debounceTimer.current);\n        const value = e.target.value;\n        debounceTimer.current = setTimeout(() => {\n          onSearch?.(value);\n        }, debounceMs);\n      } else {\n        onSearch?.(e.target.value);\n      }\n    };\n\n    // Handle keyboard events\n    const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n      // Let consumer run first; if they prevent default, skip our logic\n      userOnKeyDown?.(e);\n      if (e.defaultPrevented) return;\n\n      if (e.key === 'Enter') {\n        e.preventDefault();\n\n        // If dropdown is open and there are filtered options, select the first one\n        if (showDropdown && filteredOptions.length > 0) {\n          handleSelectOption(filteredOptions[0]);\n        } else if (value) {\n          // If no dropdown or no options, execute search\n          onSearch?.(String(value));\n          setForceClose(true);\n          setOpenAndNotify(false);\n        }\n      }\n    };\n\n    // Helper function for input state classes\n    const getInputStateClasses = (disabled?: boolean, readOnly?: boolean) => {\n      if (disabled) return 'cursor-not-allowed opacity-40';\n      if (readOnly) return 'cursor-default focus:outline-none !text-text-900';\n      return 'hover:border-border-400';\n    };\n\n    // Determine which icon to show\n    const hasValue = String(value ?? '').length > 0;\n    const showClearButton = hasValue && !disabled && !readOnly;\n    const showSearchIcon = !hasValue && !disabled && !readOnly;\n\n    return (\n      <div\n        ref={dropdownRef}\n        className={`w-full max-w-lg md:w-[488px] ${containerClassName}`}\n      >\n        {/* Search Input Container */}\n        <div className=\"relative flex items-center\">\n          {/* Search Input Field */}\n          <input\n            ref={(node) => {\n              // Forward to parent\n              if (ref) {\n                if (typeof ref === 'function') ref(node);\n                else\n                  (ref as { current: HTMLInputElement | null }).current = node;\n              }\n              // Keep our own handle\n              inputElRef.current = node;\n            }}\n            id={inputId}\n            type=\"text\"\n            className={`w-full py-0 px-4 pr-10 font-normal text-text-900 focus:outline-primary-950 border rounded-full bg-background focus:bg-primary-50 border-border-300 focus:border-2 focus:border-primary-950 h-10 placeholder:text-text-600 ${getInputStateClasses(disabled, readOnly)} ${className}`}\n            value={value}\n            onChange={handleInputChange}\n            onKeyDown={handleKeyDown}\n            disabled={disabled}\n            readOnly={readOnly}\n            placeholder={placeholder}\n            aria-expanded={showDropdown ? 'true' : undefined}\n            aria-haspopup={options.length > 0 ? 'listbox' : undefined}\n            aria-controls={showDropdown ? dropdownId : undefined}\n            aria-autocomplete=\"list\"\n            role={options.length > 0 ? 'combobox' : undefined}\n            {...props}\n          />\n\n          {/* Right Icon - Clear Button */}\n          {showClearButton && (\n            <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n              <button\n                type=\"button\"\n                className=\"p-0 border-0 bg-transparent cursor-pointer\"\n                onMouseDown={handleClearClick}\n                aria-label=\"Limpar busca\"\n              >\n                <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n                  <XIcon />\n                </span>\n              </button>\n            </div>\n          )}\n\n          {/* Right Icon - Search Icon */}\n          {showSearchIcon && (\n            <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n              <button\n                type=\"button\"\n                className=\"p-0 border-0 bg-transparent cursor-pointer\"\n                onMouseDown={handleSearchIconClick}\n                aria-label=\"Buscar\"\n              >\n                <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n                  <MagnifyingGlassIcon />\n                </span>\n              </button>\n            </div>\n          )}\n        </div>\n\n        {/* Search Dropdown */}\n        {showDropdown && (\n          <DropdownMenu open={showDropdown} onOpenChange={setDropdownOpen}>\n            <DropdownMenuContent\n              id={dropdownId}\n              className=\"w-full mt-1\"\n              style={{ maxHeight: dropdownMaxHeight }}\n              align=\"start\"\n            >\n              {filteredOptions.length > 0 ? (\n                filteredOptions.map((option) => (\n                  <DropdownMenuItem\n                    key={option}\n                    onClick={() => handleSelectOption(option)}\n                    className=\"text-text-700 text-base leading-6 cursor-pointer\"\n                  >\n                    {option}\n                  </DropdownMenuItem>\n                ))\n              ) : (\n                <div className=\"px-3 py-3 text-text-700 text-base\">\n                  {noResultsText}\n                </div>\n              )}\n            </DropdownMenuContent>\n          </DropdownMenu>\n        )}\n      </div>\n    );\n  }\n);\n\nSearch.displayName = 'Search';\n\nexport default Search;\n"],"mappings":"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","names":["value","disabled","readOnly"]}