UNPKG

@undp/design-system-react

Version:

React based design system for UNDP

1 lines 6.38 kB
{"version":3,"file":"file-upload-BUvU8RiK.cjs","names":["__iconNode","createLucideIcon","createLucideIcon"],"sources":["../node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/lucide-react/dist/esm/icons/upload.js","../src/components/ui/file-upload.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.542.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3v12\", key: \"1x0j5s\" }],\n [\"path\", { d: \"m17 8-5-5-5 5\", key: \"7q97r8\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }]\n];\nconst Upload = createLucideIcon(\"upload\", __iconNode);\n\nexport { __iconNode, Upload as default };\n//# sourceMappingURL=upload.js.map\n","import { Trash2, Upload } from 'lucide-react';\nimport type React from 'react';\nimport { useState } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { cn, generateRandomId } from '@/lib/utils';\nimport { Badge } from './badge';\nimport { Label } from './label';\nimport { P } from './typography';\n\nfunction FileUpload({\n onFileChange,\n children,\n ...props\n}: React.InputHTMLAttributes<HTMLInputElement> & {\n onFileChange?: (_d: File[]) => void;\n}) {\n const idForHtml = props.id || generateRandomId();\n const [files, setFiles] = useState<File[]>([]);\n\n const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) {\n let updatedFiles = [...Array.from(event.target.files)];\n if (props.multiple) {\n updatedFiles = [...files, ...Array.from(event.target.files)];\n }\n setFiles(updatedFiles);\n onFileChange?.(updatedFiles);\n }\n };\n const handleRemoveFile = (index: number) => {\n const updatedFiles = files.filter((_, i) => i !== index);\n setFiles(updatedFiles);\n onFileChange?.(updatedFiles);\n };\n\n return (\n <>\n <div className={cn('mb-2.5 flex w-full flex-col items-center gap-4', props.className)}>\n <input\n {...props}\n id={idForHtml}\n type='file'\n className='hidden'\n onChange={handleFileChange}\n />\n\n {/* Custom Upload Button */}\n <label htmlFor={idForHtml} className='flex w-full'>\n {children || (\n <div className='flex w-full cursor-pointer flex-col items-center gap-2 rounded-base bg-surface px-4 py-6 text-content-primary hover:bg-surface-hover'>\n <Upload className='h-7 w-7' strokeWidth={1} />\n <P className='text-content-primary' size='sm' marginBottom='none'>\n Click on this area to upload\n </P>\n </div>\n )}\n </label>\n </div>\n {files.length > 0 ? (\n <>\n <Label>File(s) uploaded</Label>\n <div className='justify-left mt-1 flex w-full flex-wrap gap-2.5'>\n {files?.map((file, index) => (\n <Badge\n key={file.name}\n variant='surface'\n className='flex gap-4 border border-stroke bg-surface pr-4 pl-4'\n >\n <span className='truncate text-base text-content-primary'>{file.name}</span>\n <Button variant='icon' padding='none' onClick={() => handleRemoveFile(index)}>\n <Trash2 className='h-4 w-4 stroke-error' />\n </Button>\n </Badge>\n ))}\n </div>\n </>\n ) : null}\n </>\n );\n}\n\nexport { FileUpload };\n"],"x_google_ignoreList":[0,1],"mappings":"8PAgBA,IAAM,EAASC,EAAAA,EAAiB,UAAWD,CANzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE,EAAG,2CAA4C,IAAK,QAAS,CAAC,EACzE,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAS,CAAC,EACxC,CAAC,OAAQ,CAAE,EAAG,yCAA0C,IAAK,QAAS,CAAC,CAE9BA,CAAU,ECF/C,EAASE,EAAAA,EAAiB,SAAU,CAJxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAS,CAAC,EACzC,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAS,CAAC,EAC9C,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAS,CAAC,CAElC,CAAU,ECLpD,SAAS,EAAW,CAClB,eACA,WACA,GAAG,GAGF,CACD,IAAM,EAAY,EAAM,IAAM,EAAA,EAAiB,EACzC,CAAC,EAAO,IAAA,EAAA,EAAA,SAAA,CAA6B,CAAC,CAAC,EAEvC,EAAoB,GAA+C,CACvE,GAAI,EAAM,OAAO,MAAO,CACtB,IAAI,EAAe,CAAC,GAAG,MAAM,KAAK,EAAM,OAAO,KAAK,CAAC,EACjD,EAAM,WACR,EAAe,CAAC,GAAG,EAAO,GAAG,MAAM,KAAK,EAAM,OAAO,KAAK,CAAC,GAE7D,EAAS,CAAY,EACrB,IAAe,CAAY,CAC7B,CACF,EACM,EAAoB,GAAkB,CAC1C,IAAM,EAAe,EAAM,QAAQ,EAAG,IAAM,IAAM,CAAK,EACvD,EAAS,CAAY,EACrB,IAAe,CAAY,CAC7B,EAEA,OACE,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,EAAG,iDAAkD,EAAM,SAAS,WAApF,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CACE,GAAI,EACJ,GAAI,EACJ,KAAK,OACL,UAAU,SACV,SAAU,CACX,CAAA,GAGD,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,QAAS,EAAW,UAAU,uBAClC,IACC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gJAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,UAAU,UAAU,YAAa,CAAI,CAAA,GAC7C,EAAA,EAAA,IAAA,CAAC,EAAA,EAAD,CAAG,UAAU,uBAAuB,KAAK,KAAK,aAAa,gBAAO,8BAE/D,CAAA,CACA,GAEF,CAAA,CACJ,IACJ,EAAM,OAAS,GACd,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAA,EAAD,CAAA,SAAO,kBAAuB,CAAA,GAC9B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,2DACZ,GAAO,KAAK,EAAM,KACjB,EAAA,EAAA,KAAA,CAAC,EAAA,MAAD,CAEE,QAAQ,UACR,UAAU,gEAHZ,EAKE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,mDAA2C,EAAK,IAAW,CAAA,GAC3E,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CAAQ,QAAQ,OAAO,QAAQ,OAAO,YAAe,EAAiB,CAAK,YACzE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAQ,UAAU,sBAAwB,CAAA,CACpC,CAAA,CACH,GARA,EAAK,IAQL,CACR,CACE,CAAA,CACL,CAAA,CAAA,EACA,IACJ,CAAA,CAAA,CAEN"}