{"version":3,"sources":["../../src/components/Search/Search.tsx","../../src/components/DropdownMenu/DropdownMenu.tsx","../../src/utils/utils.ts","../../src/components/Button/Button.tsx"],"sourcesContent":["import { CaretLeft, X } from 'phosphor-react';\nimport {\n  InputHTMLAttributes,\n  forwardRef,\n  useState,\n  useId,\n  useMemo,\n  useEffect,\n  useRef,\n  ChangeEvent,\n  MouseEvent,\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  /** 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      ...props\n    },\n    ref\n  ) => {\n    // Dropdown state and logic\n    const [dropdownOpen, setDropdownOpen] = useState(false);\n    const dropdownStore = useRef(createDropdownStore()).current;\n    const dropdownRef = useRef<HTMLDivElement>(null);\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      controlledShowDropdown ??\n      (dropdownOpen && value && String(value).length > 0);\n\n    // Handle dropdown visibility changes\n    useEffect(() => {\n      const shouldShow = Boolean(value && String(value).length > 0);\n      setDropdownOpen(shouldShow);\n      dropdownStore.setState({ open: shouldShow });\n      onDropdownChange?.(shouldShow);\n    }, [value, onDropdownChange, dropdownStore]);\n\n    // Handle option selection\n    const handleSelectOption = (option: string) => {\n      onSelect?.(option);\n      setDropdownOpen(false);\n      dropdownStore.setState({ open: 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          setDropdownOpen(false);\n          dropdownStore.setState({ open: false });\n        }\n      };\n\n      if (showDropdown) {\n        document.addEventListener('mousedown', handleClickOutside);\n      }\n\n      return () => {\n        document.removeEventListener('mousedown', handleClickOutside);\n      };\n    }, [showDropdown, dropdownStore]);\n\n    // Generate unique ID if not provided\n    const generatedId = useId();\n    const inputId = id ?? `search-${generatedId}`;\n\n    // Handle clear button\n    const handleClear = () => {\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 left icon click - remove focus from input\n    const handleLeftIconClick = () => {\n      if (ref && 'current' in ref && ref.current) {\n        ref.current.blur();\n      }\n    };\n\n    // Handle input change\n    const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n      onChange?.(e);\n      onSearch?.(e.target.value);\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 if we should show clear button\n    const showClearButton = value && !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          {/* Left Icon - Back */}\n          <div className=\"absolute left-3 top-1/2 transform -translate-y-1/2\">\n            <button\n              type=\"button\"\n              className=\"w-6 h-6 text-text-800 flex items-center justify-center bg-transparent border-0 p-0 cursor-pointer hover:text-text-600 transition-colors\"\n              onClick={handleLeftIconClick}\n              aria-label=\"Voltar\"\n            >\n              <CaretLeft />\n            </button>\n          </div>\n\n          {/* Search Input Field */}\n          <input\n            ref={ref}\n            id={inputId}\n            type=\"text\"\n            className={`w-full py-0 px-4 pl-10 ${showClearButton ? 'pr-10' : 'pr-4'} font-normal text-text-900 focus:outline-primary-950 border rounded-full bg-primary 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            disabled={disabled}\n            readOnly={readOnly}\n            placeholder={placeholder}\n            aria-expanded={showDropdown ? 'true' : undefined}\n            aria-haspopup={options.length > 0 ? 'listbox' : undefined}\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                  <X />\n                </span>\n              </button>\n            </div>\n          )}\n        </div>\n\n        {/* Search Dropdown */}\n        {showDropdown && (\n          <DropdownMenu open={showDropdown} onOpenChange={setDropdownOpen}>\n            <DropdownMenuContent\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","import { SignOut, User } from 'phosphor-react';\nimport {\n  forwardRef,\n  ReactNode,\n  ButtonHTMLAttributes,\n  useEffect,\n  useRef,\n  HTMLAttributes,\n  MouseEvent,\n  KeyboardEvent,\n  isValidElement,\n  Children,\n  cloneElement,\n  ReactElement,\n  useState,\n} from 'react';\nimport { create, StoreApi, useStore } from 'zustand';\nimport Button from '../Button/Button';\nimport { cn } from '../../utils/utils';\n\ninterface DropdownStore {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n}\n\ntype DropdownStoreApi = StoreApi<DropdownStore>;\n\nexport function createDropdownStore(): DropdownStoreApi {\n  return create<DropdownStore>((set) => ({\n    open: false,\n    setOpen: (open) => set({ open }),\n  }));\n}\n\nexport const useDropdownStore = (externalStore?: DropdownStoreApi) => {\n  if (!externalStore) {\n    throw new Error(\n      'Component must be used within a DropdownMenu (store is missing)'\n    );\n  }\n\n  return externalStore;\n};\n\nconst injectStore = (\n  children: ReactNode,\n  store: DropdownStoreApi\n): ReactNode => {\n  return Children.map(children, (child) => {\n    if (isValidElement(child)) {\n      const typedChild = child as ReactElement<{\n        store?: DropdownStoreApi;\n        children?: ReactNode;\n      }>;\n\n      const newProps: Partial<{\n        store: DropdownStoreApi;\n        children: ReactNode;\n      }> = {\n        store,\n      };\n\n      if (typedChild.props.children) {\n        newProps.children = injectStore(typedChild.props.children, store);\n      }\n\n      return cloneElement(typedChild, newProps);\n    }\n    return child;\n  });\n};\n\ninterface DropdownMenuProps {\n  children: ReactNode;\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}\n\nconst DropdownMenu = ({\n  children,\n  open: propOpen,\n  onOpenChange,\n}: DropdownMenuProps) => {\n  const storeRef = useRef<DropdownStoreApi | null>(null);\n  storeRef.current ??= createDropdownStore();\n  const store = storeRef.current;\n  const { open, setOpen: storeSetOpen } = useStore(store, (s) => s);\n\n  const setOpen = (newOpen: boolean) => {\n    storeSetOpen(newOpen);\n  };\n\n  const menuRef = useRef<HTMLDivElement | null>(null);\n\n  const handleArrowDownOrArrowUp = (event: globalThis.KeyboardEvent) => {\n    const menuContent = menuRef.current?.querySelector('[role=\"menu\"]');\n    if (menuContent) {\n      event.preventDefault();\n\n      const items = Array.from(\n        menuContent.querySelectorAll(\n          '[role=\"menuitem\"]:not([aria-disabled=\"true\"])'\n        )\n      ).filter((el): el is HTMLElement => el instanceof HTMLElement);\n\n      if (items.length === 0) return;\n\n      const focusedItem = document.activeElement as HTMLElement;\n      const currentIndex = items.findIndex((item) => item === focusedItem);\n\n      let nextIndex;\n      if (event.key === 'ArrowDown') {\n        nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % items.length;\n      } else {\n        // ArrowUp\n        nextIndex =\n          currentIndex === -1\n            ? items.length - 1\n            : (currentIndex - 1 + items.length) % items.length;\n      }\n\n      items[nextIndex]?.focus();\n    }\n  };\n\n  const handleDownkey = (event: globalThis.KeyboardEvent) => {\n    if (event.key === 'Escape') {\n      setOpen(false);\n    } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n      handleArrowDownOrArrowUp(event);\n    }\n  };\n\n  const handleClickOutside = (event: globalThis.MouseEvent) => {\n    if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n      setOpen(false);\n    }\n  };\n\n  useEffect(() => {\n    if (open) {\n      document.addEventListener('mousedown', handleClickOutside);\n      document.addEventListener('keydown', handleDownkey);\n    }\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside);\n      document.removeEventListener('keydown', handleDownkey);\n    };\n  }, [open]);\n\n  useEffect(() => {\n    setOpen(open);\n    onOpenChange?.(open);\n  }, [open, onOpenChange]);\n\n  useEffect(() => {\n    if (propOpen) {\n      setOpen(propOpen);\n    }\n  }, [propOpen]);\n\n  return (\n    <div className=\"relative\" ref={menuRef}>\n      {injectStore(children, store)}\n    </div>\n  );\n};\n\n// Componentes genéricos do DropdownMenu\nconst DropdownMenuTrigger = ({\n  className,\n  children,\n  onClick,\n  store: externalStore,\n  ...props\n}: ButtonHTMLAttributes<HTMLButtonElement> & {\n  disabled?: boolean;\n  store?: DropdownStoreApi;\n}) => {\n  const store = useDropdownStore(externalStore);\n\n  const open = useStore(store, (s) => s.open);\n  const toggleOpen = () => store.setState({ open: !open });\n\n  return (\n    <button\n      onClick={(e) => {\n        e.stopPropagation();\n        toggleOpen();\n        if (onClick) onClick(e);\n      }}\n      aria-expanded={open}\n      className={cn(className)}\n      {...props}\n    >\n      {children}\n    </button>\n  );\n};\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger';\n\nconst ITEM_SIZE_CLASSES = {\n  small: 'text-sm',\n  medium: 'text-md',\n} as const;\n\nconst SIDE_CLASSES = {\n  top: 'bottom-full',\n  right: 'top-full',\n  bottom: 'top-full',\n  left: 'top-full',\n};\n\nconst ALIGN_CLASSES = {\n  start: 'left-0',\n  center: 'left-1/2 -translate-x-1/2',\n  end: 'right-0',\n};\n\nconst MENUCONTENT_VARIANT_CLASSES = {\n  menu: 'p-1',\n  profile: 'p-6',\n};\n\nconst MenuLabel = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & {\n    inset?: boolean;\n    store?: DropdownStoreApi;\n  }\n>(({ className, inset, store: _store, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn('text-sm w-full', inset ? 'pl-8' : '', className)}\n      {...props}\n    />\n  );\n});\nMenuLabel.displayName = 'MenuLabel';\n\nconst DropdownMenuContent = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & {\n    align?: 'start' | 'center' | 'end';\n    side?: 'top' | 'right' | 'bottom' | 'left';\n    variant?: 'menu' | 'profile';\n    sideOffset?: number;\n    store?: DropdownStoreApi;\n  }\n>(\n  (\n    {\n      className,\n      align = 'start',\n      side = 'bottom',\n      variant = 'menu',\n      sideOffset = 4,\n      children,\n      store: externalStore,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useDropdownStore(externalStore);\n    const open = useStore(store, (s) => s.open);\n    const [isVisible, setIsVisible] = useState(open);\n\n    useEffect(() => {\n      if (open) {\n        setIsVisible(true);\n      } else {\n        const timer = setTimeout(() => setIsVisible(false), 200);\n        return () => clearTimeout(timer);\n      }\n    }, [open]);\n\n    if (!isVisible) return null;\n\n    const getPositionClasses = () => {\n      const vertical = SIDE_CLASSES[side];\n      const horizontal = ALIGN_CLASSES[align];\n\n      return `absolute ${vertical} ${horizontal}`;\n    };\n\n    const variantClasses = MENUCONTENT_VARIANT_CLASSES[variant];\n    return (\n      <div\n        ref={ref}\n        role=\"menu\"\n        className={`\n        bg-background z-50 min-w-[210px] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md border-border-100\n        ${open ? 'animate-in fade-in-0 zoom-in-95' : 'animate-out fade-out-0 zoom-out-95'}\n        ${getPositionClasses()}\n        ${variantClasses}\n        ${className}\n      `}\n        style={{\n          marginTop: side === 'bottom' ? sideOffset : undefined,\n          marginBottom: side === 'top' ? sideOffset : undefined,\n          marginLeft: side === 'right' ? sideOffset : undefined,\n          marginRight: side === 'left' ? sideOffset : undefined,\n        }}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nconst DropdownMenuItem = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & {\n    inset?: boolean;\n    size?: 'small' | 'medium';\n    iconLeft?: ReactNode;\n    iconRight?: ReactNode;\n    disabled?: boolean;\n    variant?: 'profile' | 'menu';\n    store?: DropdownStoreApi;\n  }\n>(\n  (\n    {\n      className,\n      size = 'small',\n      children,\n      iconRight,\n      iconLeft,\n      disabled = false,\n      onClick,\n      variant = 'menu',\n      store: externalStore,\n      ...props\n    },\n    ref\n  ) => {\n    const store = useDropdownStore(externalStore);\n    const setOpen = useStore(store, (s) => s.setOpen);\n    const sizeClasses = ITEM_SIZE_CLASSES[size];\n\n    const handleClick = (\n      e: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>\n    ) => {\n      if (disabled) {\n        e.preventDefault();\n        e.stopPropagation();\n        return;\n      }\n      onClick?.(e as MouseEvent<HTMLDivElement>);\n      setOpen(false);\n    };\n\n    const getVariantClasses = () => {\n      if (variant === 'profile') {\n        return 'relative flex flex-row justify-between select-none items-center gap-2 rounded-sm p-4 text-sm outline-none transition-colors [&>svg]:size-6 [&>svg]:shrink-0';\n      }\n      return 'relative flex select-none items-center gap-2 rounded-sm p-3 text-sm outline-none transition-colors [&>svg]:size-4 [&>svg]:shrink-0';\n    };\n\n    const getVariantProps = () => {\n      return variant === 'profile' ? { 'data-variant': 'profile' } : {};\n    };\n\n    return (\n      <div\n        ref={ref}\n        role=\"menuitem\"\n        {...getVariantProps()}\n        aria-disabled={disabled}\n        className={`\n          focus-visible:bg-background-50\n           ${getVariantClasses()}\n          ${sizeClasses}\n          ${className}\n          ${\n            disabled\n              ? 'cursor-not-allowed text-text-400'\n              : 'cursor-pointer hover:bg-background-50 text-text-700 focus:bg-accent focus:text-accent-foreground hover:bg-accent hover:text-accent-foreground'\n          }\n        `}\n        onClick={handleClick}\n        onKeyDown={(e) => {\n          if (e.key === 'Enter' || e.key === ' ') handleClick(e);\n        }}\n        tabIndex={disabled ? -1 : 0}\n        {...props}\n      >\n        {iconLeft}\n        <span className=\"w-full text-md\">{children}</span>\n        {iconRight}\n      </div>\n    );\n  }\n);\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nconst DropdownMenuSeparator = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & { store?: DropdownStoreApi }\n>(({ className, store: _store, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn('my-1 h-px bg-border-200', className)}\n    {...props}\n  />\n));\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\n// Componentes específicos do ProfileMenu\nconst ProfileMenuTrigger = forwardRef<\n  HTMLButtonElement,\n  ButtonHTMLAttributes<HTMLButtonElement> & { store?: DropdownStoreApi }\n>(({ className, onClick, store: externalStore, ...props }, ref) => {\n  const store = useDropdownStore(externalStore);\n  const open = useStore(store, (s) => s.open);\n  const toggleOpen = () => store.setState({ open: !open });\n\n  return (\n    <button\n      ref={ref}\n      className={cn(\n        'rounded-lg size-10 bg-primary-50 flex items-center justify-center cursor-pointer',\n        className\n      )}\n      onClick={(e) => {\n        e.stopPropagation();\n        toggleOpen();\n        onClick?.(e);\n      }}\n      aria-expanded={open}\n      {...props}\n    >\n      <span className=\"size-6 rounded-full bg-primary-100 flex items-center justify-center\">\n        <User className=\"text-primary-950\" size={18} />\n      </span>\n    </button>\n  );\n});\nProfileMenuTrigger.displayName = 'ProfileMenuTrigger';\n\nconst ProfileMenuHeader = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & {\n    name: string;\n    email: string;\n    store?: DropdownStoreApi;\n  }\n>(({ className, name, email, store: _store, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      data-component=\"ProfileMenuHeader\"\n      className={cn('flex flex-row gap-4 items-center', className)}\n      {...props}\n    >\n      <span className=\"size-16 bg-primary-100 rounded-full flex items-center justify-center\">\n        <User size={34} className=\"text-primary-950\" />\n      </span>\n      <div className=\"flex flex-col \">\n        <p className=\"text-xl font-bold text-text-950\">{name}</p>\n        <p className=\"text-md text-text-600\">{email}</p>\n      </div>\n    </div>\n  );\n});\nProfileMenuHeader.displayName = 'ProfileMenuHeader';\n\nconst ProfileMenuSection = forwardRef<\n  HTMLDivElement,\n  HTMLAttributes<HTMLDivElement> & { store?: DropdownStoreApi }\n>(({ className, children, store: _store, ...props }, ref) => {\n  return (\n    <div ref={ref} className={cn('flex flex-col p-2', className)} {...props}>\n      {children}\n    </div>\n  );\n});\nProfileMenuSection.displayName = 'ProfileMenuSection';\n\nconst ProfileMenuFooter = ({\n  className,\n  disabled = false,\n  onClick,\n  store: externalStore,\n  ...props\n}: HTMLAttributes<HTMLButtonElement> & {\n  disabled?: boolean;\n  store?: DropdownStoreApi;\n}) => {\n  const store = useDropdownStore(externalStore);\n  const setOpen = useStore(store, (s) => s.setOpen);\n\n  return (\n    <Button\n      variant=\"outline\"\n      className={cn('w-full', className)}\n      disabled={disabled}\n      onClick={(e) => {\n        setOpen(false);\n        onClick?.(e);\n      }}\n      {...props}\n    >\n      <span className=\"mr-2 flex items-center\">\n        <SignOut />\n      </span>\n      <span>Sair</span>\n    </Button>\n  );\n};\nProfileMenuFooter.displayName = 'ProfileMenuFooter';\n\n// Exportações\nexport default DropdownMenu;\nexport {\n  // Componentes genéricos\n  DropdownMenuTrigger,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  MenuLabel,\n  DropdownMenuSeparator,\n\n  // Componentes específicos do ProfileMenu\n  ProfileMenuTrigger,\n  ProfileMenuHeader,\n  ProfileMenuSection,\n  ProfileMenuFooter,\n};\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n","import { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n  solid: {\n    primary:\n      'bg-primary-950 text-text border border-primary-950 hover:bg-primary-800 hover:border-primary-800 focus-visible:outline-none focus-visible:bg-primary-950 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-primary-700 active:border-primary-700 disabled:bg-primary-500 disabled:border-primary-500 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-success-500 text-text border border-success-500 hover:bg-success-600 hover:border-success-600 focus-visible:outline-none focus-visible:bg-success-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-success-700 active:border-success-700 disabled:bg-success-500 disabled:border-success-500 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-error-500 text-text border border-error-500 hover:bg-error-600 hover:border-error-600 focus-visible:outline-none focus-visible:bg-error-500 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:bg-error-700 active:border-error-700 disabled:bg-error-500 disabled:border-error-500 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n  outline: {\n    primary:\n      'bg-transparent text-primary-950 border border-primary-950 hover:bg-background-50 hover:text-primary-400 hover:border-primary-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 active:border-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-transparent text-success-500 border border-success-300 hover:bg-background-50 hover:text-success-400 hover:border-success-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 active:border-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-transparent text-error-500 border border-error-300 hover:bg-background-50 hover:text-error-400 hover:border-error-400 focus-visible:border-0 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 active:border-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n  link: {\n    primary:\n      'bg-transparent text-primary-950 hover:text-primary-400 focus-visible:outline-none focus-visible:text-primary-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-primary-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    positive:\n      'bg-transparent text-success-500 hover:text-success-400 focus-visible:outline-none focus-visible:text-success-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-success-700 disabled:opacity-40 disabled:cursor-not-allowed',\n    negative:\n      'bg-transparent text-error-500 hover:text-error-400 focus-visible:outline-none focus-visible:text-error-600 focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-indicator-info active:text-error-700 disabled:opacity-40 disabled:cursor-not-allowed',\n  },\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n  'extra-small': 'text-xs px-3.5 py-2',\n  small: 'text-sm px-4 py-2.5',\n  medium: 'text-md px-5 py-2.5',\n  large: 'text-lg px-6 py-3',\n  'extra-large': 'text-lg px-7 py-3.5',\n} as const;\n\n/**\n * Button component props interface\n */\ntype ButtonProps = {\n  /** Content to be displayed inside the button */\n  children: ReactNode;\n  /** Ícone à esquerda do texto */\n  iconLeft?: ReactNode;\n  /** Ícone à direita do texto */\n  iconRight?: ReactNode;\n  /** Size of the button */\n  size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n  /** Visual variant of the button */\n  variant?: 'solid' | 'outline' | 'link';\n  /** Action type of the button */\n  action?: 'primary' | 'positive' | 'negative';\n  /** Additional CSS classes to apply */\n  className?: string;\n} & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * Button component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the button\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard button HTML attributes\n * @returns A styled button element\n *\n * @example\n * ```tsx\n * <Button variant=\"solid\" action=\"primary\" size=\"medium\" onClick={() => console.log('clicked')}>\n *   Click me\n * </Button>\n * ```\n */\nconst Button = ({\n  children,\n  iconLeft,\n  iconRight,\n  size = 'medium',\n  variant = 'solid',\n  action = 'primary',\n  className = '',\n  disabled,\n  type = 'button',\n  ...props\n}: ButtonProps) => {\n  // Get classes from lookup tables\n  const sizeClasses = SIZE_CLASSES[size];\n  const variantClasses = VARIANT_ACTION_CLASSES[variant][action];\n\n  const baseClasses =\n    'inline-flex items-center justify-center rounded-full cursor-pointer font-medium';\n\n  return (\n    <button\n      className={cn(baseClasses, variantClasses, sizeClasses, className)}\n      disabled={disabled}\n      type={type}\n      {...props}\n    >\n      {iconLeft && <span className=\"mr-2 flex items-center\">{iconLeft}</span>}\n      {children}\n      {iconRight && <span className=\"ml-2 flex items-center\">{iconRight}</span>}\n    </button>\n  );\n};\n\nexport default Button;\n"],"mappings":"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","names":["forwardRef","useState","useEffect","useRef","jsx","jsxs","jsx","jsxs","forwardRef","useState","useRef","useEffect","disabled","readOnly"]}