Added file upload component
This commit is contained in:
parent
9f2d80933d
commit
69245a0ea0
3 changed files with 138 additions and 0 deletions
114
src/components/File/File.sass
Normal file
114
src/components/File/File.sass
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
@use '/src/styles/variables.sass' as vars
|
||||||
|
@use 'sass:color'
|
||||||
|
|
||||||
|
.filefield
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
height: 200px
|
||||||
|
width: 100%
|
||||||
|
row-gap: 5px
|
||||||
|
border: 1px solid #ffffff6c
|
||||||
|
border-radius: 8px
|
||||||
|
|
||||||
|
&__label
|
||||||
|
color: white
|
||||||
|
font-size: 14px
|
||||||
|
font-weight: 500
|
||||||
|
user-select: none
|
||||||
|
|
||||||
|
&__dropzone
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
row-gap: 10px
|
||||||
|
align-items: center
|
||||||
|
justify-content: center
|
||||||
|
width: 100%
|
||||||
|
height: 100%
|
||||||
|
color: #5f8ebe9c
|
||||||
|
cursor: pointer
|
||||||
|
font-size: 1rem
|
||||||
|
|
||||||
|
// &__trigger
|
||||||
|
// background-color: vars.$primaryColor
|
||||||
|
// border: none
|
||||||
|
// border-radius: 8px
|
||||||
|
// color: white
|
||||||
|
// padding: 0.5rem 1.25rem
|
||||||
|
// text-align: center
|
||||||
|
// text-decoration: none
|
||||||
|
// display: inline-block
|
||||||
|
// font-size: 1rem
|
||||||
|
// font-weight: 500
|
||||||
|
// cursor: pointer
|
||||||
|
// transition: all 0.2s ease-out
|
||||||
|
|
||||||
|
// &:hover
|
||||||
|
// background-color: color.adjust(vars.$primaryColor, $blackness: 20%)
|
||||||
|
|
||||||
|
// &:active
|
||||||
|
// transform: scale(0.95)
|
||||||
|
|
||||||
|
&__itemList
|
||||||
|
display: flex
|
||||||
|
flex-direction: column
|
||||||
|
gap: 3px
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
&__item
|
||||||
|
width: 82%
|
||||||
|
display: grid
|
||||||
|
// padding: 1rem
|
||||||
|
column-gap: 10px
|
||||||
|
border-radius: 8px
|
||||||
|
grid-template-columns: auto 1fr auto
|
||||||
|
grid-template-areas: "preview name delete" "preview size delete"
|
||||||
|
column-gap: 5px
|
||||||
|
// border: 1px solid rgba(187, 187, 187, 0.706)
|
||||||
|
padding: 10px
|
||||||
|
background-color: #2b4055b7
|
||||||
|
margin: 0 1rem
|
||||||
|
|
||||||
|
&__itemPreview
|
||||||
|
grid-area: preview
|
||||||
|
|
||||||
|
&__itemPreviewImage
|
||||||
|
width: 6rem
|
||||||
|
object-fit: scale-down
|
||||||
|
height: auto
|
||||||
|
aspect-ratio: 1
|
||||||
|
|
||||||
|
&__itemName
|
||||||
|
font-weight: 500
|
||||||
|
grid-area: name
|
||||||
|
font-size: 1rem
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
&__itemSize
|
||||||
|
grid-area: size
|
||||||
|
font-size: 14px
|
||||||
|
color: rgb(181, 179, 173)
|
||||||
|
|
||||||
|
&__itemDeleteTrigger
|
||||||
|
grid-area: delete
|
||||||
|
background-color: #a23434
|
||||||
|
border: none
|
||||||
|
border-radius: 8px
|
||||||
|
color: white
|
||||||
|
padding: 0.5rem 1.25rem
|
||||||
|
text-align: center
|
||||||
|
text-decoration: none
|
||||||
|
display: inline-block
|
||||||
|
font-size: 1rem
|
||||||
|
font-weight: 500
|
||||||
|
cursor: pointer
|
||||||
|
transition: all 0.2s ease-out
|
||||||
|
height: max-content
|
||||||
|
align-self: center
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
background-color: color.adjust(#a23434, $blackness: 20%)
|
||||||
|
|
||||||
|
&:active
|
||||||
|
transform: scale(0.95)
|
||||||
23
src/components/File/File.tsx
Normal file
23
src/components/File/File.tsx
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
import './File.sass'
|
||||||
|
import { FileField } from '@kobalte/core/file-field'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<FileField class="filefield" multiple maxFiles={1} onFileAccept={(data) => console.log('data', data)} onFileReject={(data) => console.log('data', data)} onFileChange={(data) => console.log('data', data)}>
|
||||||
|
<FileField.Dropzone class="filefield__dropzone">Drag and drop file here or click to upload file</FileField.Dropzone>
|
||||||
|
<FileField.HiddenInput />
|
||||||
|
<FileField.ItemList class="filefield__itemList">
|
||||||
|
{() => (
|
||||||
|
<FileField.Item class="filefield__item">
|
||||||
|
<FileField.ItemPreviewImage class="filefield__itemPreviewImage" />
|
||||||
|
<FileField.ItemName class="filefield__itemName" />
|
||||||
|
<FileField.ItemSize class="filefield__itemSize" />
|
||||||
|
<FileField.ItemDeleteTrigger class="filefield__itemDeleteTrigger">Delete</FileField.ItemDeleteTrigger>
|
||||||
|
</FileField.Item>
|
||||||
|
)}
|
||||||
|
</FileField.ItemList>
|
||||||
|
</FileField>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -16,6 +16,7 @@ export { default as Padding } from './Padding/Padding'
|
||||||
export { default as Modal } from './Modal/Modal'
|
export { default as Modal } from './Modal/Modal'
|
||||||
export { default as Table } from './Table/Table'
|
export { default as Table } from './Table/Table'
|
||||||
export { default as Combobox } from './Combobox/Combobox'
|
export { default as Combobox } from './Combobox/Combobox'
|
||||||
|
export { default as File } from './File/File'
|
||||||
|
|
||||||
// export { default as OptimizeBackground } from './Optimizers/OptimizeBackground'
|
// export { default as OptimizeBackground } from './Optimizers/OptimizeBackground'
|
||||||
// export { default as OptimizeImage } from './Optimizers/OptimizeImage'
|
// export { default as OptimizeImage } from './Optimizers/OptimizeImage'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue