{"version":3,"sources":["../../src/components/FileInputButton.tsx","../../src/components/icons/Upload.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useCallback, useRef, type ChangeEvent, type ReactNode } from 'react';\nimport Button from '@mui/material/Button';\nimport { styled, useThemeProps } from '@mui/material/styles';\n\nimport { Upload } from './icons';\n\ninterface FileInputButtonProps {\n    onSelect?: (files: FileList | null) => void;\n    acceptedFileTypes?: string[];\n    allowsMultiple?: boolean;\n    icon?: ReactNode | false;\n    buttonText?: string | ReactNode;\n    variant?: 'contained' | 'outlined';\n    size?: 'small' | 'medium' | 'large';\n    className?: string;\n    disabled?: boolean;\n}\n\nconst FileInputButtonRoot = styled('span', {\n    name: 'MuiFileInputButton',\n    slot: 'root',\n})({\n    display: 'inline-flex',\n});\n\nconst FileInputButtonHiddenInput = styled('input', {\n    name: 'MuiFileInputButton',\n    slot: 'hiddenInput',\n})({\n    display: 'none',\n});\n\nconst FileInputButton = forwardRef<HTMLSpanElement, FileInputButtonProps>(\n    function FileInputButton(inProps, ref) {\n        const props = useThemeProps({ props: inProps, name: 'MuiFileInputButton' });\n        const {\n            onSelect,\n            acceptedFileTypes,\n            allowsMultiple = false,\n            icon,\n            buttonText = 'Browse files',\n            variant = 'contained',\n            size = 'medium',\n            className,\n            disabled,\n        } = props;\n\n        const inputRef = useRef<HTMLInputElement>(null);\n\n        const handleClick = useCallback(() => {\n            inputRef.current?.click();\n        }, []);\n\n        const handleChange = useCallback(\n            (e: ChangeEvent<HTMLInputElement>) => {\n                onSelect?.(e.target.files);\n                // Reset so the same file can be selected again\n                if (inputRef.current) {\n                    inputRef.current.value = '';\n                }\n            },\n            [onSelect]\n        );\n\n        const accept = acceptedFileTypes?.join(',');\n\n        return (\n            <FileInputButtonRoot ref={ref} className={className}>\n                <FileInputButtonHiddenInput\n                    ref={inputRef}\n                    type=\"file\"\n                    accept={accept}\n                    multiple={allowsMultiple}\n                    onChange={handleChange}\n                />\n                <Button\n                    variant={variant}\n                    size={size}\n                    disabled={disabled}\n                    onClick={handleClick}\n                    startIcon={icon !== false ? (icon ?? <Upload />) : undefined}>\n                    {buttonText}\n                </Button>\n            </FileInputButtonRoot>\n        );\n    }\n);\n\nexport { FileInputButton };\nexport type { FileInputButtonProps };\n","import { createSvgIcon } from '@mui/material/utils';\n\nconst Upload = createSvgIcon(\n    <svg viewBox=\"0 -960 960 960\">\n        <path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\" />\n    </svg>,\n    'Upload'\n);\n\nexport { Upload };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkF;AAClF,oBAAmB;AACnB,oBAAsC;;;ACJtC,mBAA8B;AAItB;AAFR,IAAM,aAAS;AAAA,EACX,4CAAC,SAAI,SAAQ,kBACT,sDAAC,UAAK,GAAE,+JAA8J,GAC1K;AAAA,EACA;AACJ;;;AD8DY,IAAAA,sBAAA;AAjDZ,IAAM,0BAAsB,sBAAO,QAAQ;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AACV,CAAC,EAAE;AAAA,EACC,SAAS;AACb,CAAC;AAED,IAAM,iCAA6B,sBAAO,SAAS;AAAA,EAC/C,MAAM;AAAA,EACN,MAAM;AACV,CAAC,EAAE;AAAA,EACC,SAAS;AACb,CAAC;AAED,IAAM,sBAAkB;AAAA,EACpB,SAASC,iBAAgB,SAAS,KAAK;AACnC,UAAM,YAAQ,6BAAc,EAAE,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC1E,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA,aAAa;AAAA,MACb,UAAU;AAAA,MACV,OAAO;AAAA,MACP;AAAA,MACA;AAAA,IACJ,IAAI;AAEJ,UAAM,eAAW,qBAAyB,IAAI;AAE9C,UAAM,kBAAc,0BAAY,MAAM;AAClC,eAAS,SAAS,MAAM;AAAA,IAC5B,GAAG,CAAC,CAAC;AAEL,UAAM,mBAAe;AAAA,MACjB,CAAC,MAAqC;AAClC,mBAAW,EAAE,OAAO,KAAK;AAEzB,YAAI,SAAS,SAAS;AAClB,mBAAS,QAAQ,QAAQ;AAAA,QAC7B;AAAA,MACJ;AAAA,MACA,CAAC,QAAQ;AAAA,IACb;AAEA,UAAM,SAAS,mBAAmB,KAAK,GAAG;AAE1C,WACI,8CAAC,uBAAoB,KAAU,WAC3B;AAAA;AAAA,QAAC;AAAA;AAAA,UACG,KAAK;AAAA,UACL,MAAK;AAAA,UACL;AAAA,UACA,UAAU;AAAA,UACV,UAAU;AAAA;AAAA,MACd;AAAA,MACA;AAAA,QAAC,cAAAC;AAAA,QAAA;AAAA,UACG;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT,WAAW,SAAS,QAAS,QAAQ,6CAAC,UAAO,IAAM;AAAA,UAClD;AAAA;AAAA,MACL;AAAA,OACJ;AAAA,EAER;AACJ;","names":["import_jsx_runtime","FileInputButton","Button"]}