{"version":3,"file":"input-file-BH3SMNJ7.mjs","sources":["../../src/components/ui/input-file/input-file.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Input } from \"@/components/ui/input\";\nimport { cn } from \"@/lib/utils\";\nimport { styleInput, styleInputError } from \"@/utils/styles\";\n\nexport interface InputFileProps extends Omit<React.ComponentProps<\"input\">, \"type\" | \"value\"> {\n\tvalue?: File | string | null;\n\tisError?: boolean;\n}\n\nexport const InputFile = React.forwardRef<HTMLInputElement, InputFileProps>(\n\t({ className, value, isError, disabled, placeholder, ...props }, ref) => {\n\t\tconst internalRef = React.useRef<HTMLInputElement>(null);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLInputElement | null) => {\n\t\t\t\tinternalRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tlet fileName = \"\";\n\t\tif (value instanceof File) {\n\t\t\tfileName = value.name;\n\t\t} else if (typeof value === \"string\" && value.length > 0) {\n\t\t\tconst withoutQuery = value.split(\"?\")[0];\n\t\t\tfileName = withoutQuery.split(\"/\").pop() || value;\n\t\t}\n\n\t\tconst renderFileName = () => {\n\t\t\tif (!fileName) {\n\t\t\t\treturn (\n\t\t\t\t\t<span className=\"text-muted-foreground truncate\">\n\t\t\t\t\t\t{placeholder || \"Nenhum arquivo escolhido\"}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst lastDotIndex = fileName.lastIndexOf(\".\");\n\t\t\tif (lastDotIndex === -1) {\n\t\t\t\treturn <span className=\"truncate\">{fileName}</span>;\n\t\t\t}\n\n\t\t\tconst namePart = fileName.substring(0, lastDotIndex);\n\t\t\tconst extPart = fileName.substring(lastDotIndex);\n\n\t\t\treturn (\n\t\t\t\t<div className=\"flex min-w-0 items-center\">\n\t\t\t\t\t<span className=\"truncate\">{namePart}</span>\n\t\t\t\t\t<span className=\"shrink-0\">{extPart}</span>\n\t\t\t\t</div>\n\t\t\t);\n\t\t};\n\n\t\tconst handleClear = (e: React.MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (internalRef.current) {\n\t\t\t\tinternalRef.current.value = \"\";\n\t\t\t}\n\t\t\tif (props.onChange) {\n\t\t\t\tconst event = {\n\t\t\t\t\ttarget: { files: null, value: \"\" },\n\t\t\t\t\tcurrentTarget: { files: null, value: \"\" },\n\t\t\t\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\tprops.onChange(event);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className=\"relative flex items-center gap-2\">\n\t\t\t\t{!disabled && (\n\t\t\t\t\t<Input\n\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\tref={mergedRef}\n\t\t\t\t\t\tclassName=\"absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tstyleInput,\n\t\t\t\t\t\t\"flex w-full cursor-pointer items-center justify-between text-sm\",\n\t\t\t\t\t\tisError && styleInputError,\n\t\t\t\t\t\tdisabled && \"cursor-not-allowed opacity-50\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex-1 min-w-0 flex items-center\">{renderFileName()}</div>\n\t\t\t\t\t{fileName && !disabled ? (\n\t\t\t\t\t\t<div className=\"relative z-20 ml-2 shrink-0\">\n\t\t\t\t\t\t\t<button type=\"button\" onClick={handleClear} className=\"cursor-pointer p-1\">\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4 opacity-50 hover:opacity-100\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t!disabled && (\n\t\t\t\t\t\t\t<Badge variant=\"secondary\" className=\"pointer-events-none shrink-0\">\n\t\t\t\t\t\t\t\tSelecionar arquivo\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nInputFile.displayName = \"InputFile\";\n"],"names":["InputFile","React","forwardRef","className","value","isError","disabled","placeholder","props","ref","internalRef","useRef","mergedRef","useCallback","node","current","fileName","File","name","length","withoutQuery","split","pop","renderFileName","span","lastDotIndex","lastIndexOf","namePart","substring","extPart","div","handleClear","e","preventDefault","stopPropagation","onChange","event","target","files","currentTarget","Input","type","cn","styleInput","styleInputError","button","onClick","X","Badge","variant","displayName"],"mappings":"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"}