{"version":3,"sources":["../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, CSSProperties } from 'react';\nimport { cn } from '../../utils/utils';\n\ninterface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n  variant?: 'text' | 'circular' | 'rectangular' | 'rounded';\n  width?: string | number;\n  height?: string | number;\n  animation?: 'pulse' | 'none';\n  lines?: number;\n  spacing?: 'none' | 'small' | 'medium' | 'large';\n}\n\nconst SKELETON_ANIMATION_CLASSES = {\n  pulse: 'animate-pulse',\n  none: '',\n};\n\nconst SKELETON_VARIANT_CLASSES = {\n  text: 'h-4 bg-background-200 rounded',\n  circular: 'bg-background-200 rounded-full',\n  rectangular: 'bg-background-200',\n  rounded: 'bg-background-200 rounded-lg',\n};\n\nconst SPACING_CLASSES = {\n  none: '',\n  small: 'space-y-1',\n  medium: 'space-y-2',\n  large: 'space-y-3',\n};\n\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n  (\n    {\n      variant = 'text',\n      width,\n      height,\n      animation = 'pulse',\n      lines = 1,\n      spacing = 'none',\n      className = '',\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const animationClass = SKELETON_ANIMATION_CLASSES[animation];\n    const variantClass = SKELETON_VARIANT_CLASSES[variant];\n    const spacingClass = SPACING_CLASSES[spacing];\n\n    const style: CSSProperties = {\n      width: typeof width === 'number' ? `${width}px` : width,\n      height: typeof height === 'number' ? `${height}px` : height,\n    };\n\n    // Se for múltiplas linhas de texto\n    if (variant === 'text' && lines > 1) {\n      return (\n        <div\n          ref={ref}\n          className={cn('flex flex-col', spacingClass, className)}\n          {...props}\n        >\n          {Array.from({ length: lines }, (_, index) => (\n            <div\n              key={index}\n              className={cn(variantClass, animationClass)}\n              style={index === lines - 1 ? { width: '60%' } : undefined}\n            />\n          ))}\n        </div>\n      );\n    }\n\n    // Se for um único elemento\n    return (\n      <div\n        ref={ref}\n        className={cn(variantClass, animationClass, className)}\n        style={style}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\n// Componentes específicos para casos comuns\nconst SkeletonText = forwardRef<HTMLDivElement, Omit<SkeletonProps, 'variant'>>(\n  (props, ref) => <Skeleton ref={ref} variant=\"text\" {...props} />\n);\n\nconst SkeletonCircle = forwardRef<\n  HTMLDivElement,\n  Omit<SkeletonProps, 'variant'>\n>((props, ref) => <Skeleton ref={ref} variant=\"circular\" {...props} />);\n\nconst SkeletonRectangle = forwardRef<\n  HTMLDivElement,\n  Omit<SkeletonProps, 'variant'>\n>((props, ref) => <Skeleton ref={ref} variant=\"rectangular\" {...props} />);\n\nconst SkeletonRounded = forwardRef<\n  HTMLDivElement,\n  Omit<SkeletonProps, 'variant'>\n>((props, ref) => <Skeleton ref={ref} variant=\"rounded\" {...props} />);\n\n// Componente para card skeleton\ninterface SkeletonCardProps extends HTMLAttributes<HTMLDivElement> {\n  showAvatar?: boolean;\n  showTitle?: boolean;\n  showDescription?: boolean;\n  showActions?: boolean;\n  lines?: number;\n}\n\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n  (\n    {\n      showAvatar = true,\n      showTitle = true,\n      showDescription = true,\n      showActions = true,\n      lines = 2,\n      className = '',\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'w-full p-4 bg-background border border-border-200 rounded-lg',\n          className\n        )}\n        {...props}\n      >\n        <div className=\"flex items-start space-x-3\">\n          {showAvatar && <SkeletonCircle width={40} height={40} />}\n\n          <div className=\"flex-1 space-y-2\">\n            {showTitle && <SkeletonText width=\"60%\" height={20} />}\n\n            {showDescription && <SkeletonText lines={lines} spacing=\"small\" />}\n          </div>\n        </div>\n\n        {showActions && (\n          <div className=\"flex justify-end space-x-2 mt-4\">\n            <SkeletonRectangle width={80} height={32} />\n            <SkeletonRectangle width={80} height={32} />\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\n// Componente para lista skeleton\ninterface SkeletonListProps extends HTMLAttributes<HTMLDivElement> {\n  items?: number;\n  showAvatar?: boolean;\n  showTitle?: boolean;\n  showDescription?: boolean;\n  lines?: number;\n}\n\nconst SkeletonList = forwardRef<HTMLDivElement, SkeletonListProps>(\n  (\n    {\n      items = 3,\n      showAvatar = true,\n      showTitle = true,\n      showDescription = true,\n      lines = 1,\n      className = '',\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <div ref={ref} className={cn('space-y-3', className)} {...props}>\n        {Array.from({ length: items }, (_, index) => (\n          <div key={index} className=\"flex items-start space-x-3 p-3\">\n            {showAvatar && <SkeletonCircle width={32} height={32} />}\n\n            <div className=\"flex-1 space-y-2\">\n              {showTitle && <SkeletonText width=\"40%\" height={16} />}\n\n              {showDescription && (\n                <SkeletonText lines={lines} spacing=\"small\" />\n              )}\n            </div>\n          </div>\n        ))}\n      </div>\n    );\n  }\n);\n\n// Componente para tabela skeleton\ninterface SkeletonTableProps extends HTMLAttributes<HTMLDivElement> {\n  rows?: number;\n  columns?: number;\n  showHeader?: boolean;\n}\n\nconst SkeletonTable = forwardRef<HTMLDivElement, SkeletonTableProps>(\n  (\n    { rows = 5, columns = 4, showHeader = true, className = '', ...props },\n    ref\n  ) => {\n    return (\n      <div ref={ref} className={cn('w-full', className)} {...props}>\n        {showHeader && (\n          <div className=\"flex space-x-2 mb-3\">\n            {Array.from({ length: columns }, (_, index) => (\n              <SkeletonText\n                key={index}\n                width={`${100 / columns}%`}\n                height={20}\n              />\n            ))}\n          </div>\n        )}\n\n        <div className=\"space-y-2\">\n          {Array.from({ length: rows }, (_, rowIndex) => (\n            <div key={rowIndex} className=\"flex space-x-2\">\n              {Array.from({ length: columns }, (_, colIndex) => (\n                <SkeletonText\n                  key={colIndex}\n                  width={`${100 / columns}%`}\n                  height={16}\n                />\n              ))}\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  }\n);\n\nexport {\n  Skeleton,\n  SkeletonText,\n  SkeletonCircle,\n  SkeletonRectangle,\n  SkeletonRounded,\n  SkeletonCard,\n  SkeletonList,\n  SkeletonTable,\n};\n"],"mappings":"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","names":["_"]}