1
0
Fork 0
freesewing/sites/shared/components/collapse.mjs

45 lines
1.4 KiB
JavaScript
Raw Normal View History

2023-02-25 20:06:00 +01:00
import { useState } from 'react'
2023-02-25 18:19:11 +01:00
import { DownIcon } from 'shared/components/icons.mjs'
2023-02-25 20:06:00 +01:00
export const Collapse = ({ title, children, valid = true, buttons = [], opened = false }) => {
const [open, setOpen] = useState(opened)
return (
2023-02-25 18:19:11 +01:00
<div
2023-02-25 20:06:00 +01:00
className={`
${valid ? 'border-primary' : 'border-warning'}
shadow my-4 border-solid border-l-[6px]
border-r-0 border-t-0 border-b-0`}
2023-02-25 18:19:11 +01:00
>
2023-02-25 20:06:00 +01:00
<div
className={`
${valid ? `bg-primary bg-opacity-0` : `bg-warning bg-opacity-20`} ${
open ? 'bg-opacity-100 min-h-0 text-primary-content' : ''
}
p-0 min-h-0 `}
onClick={() => setOpen(!open)}
>
<div className="px-4 py-1 flex flex-row items-center justify-between hover:cursor-pointer">
<div>
<b>{title[0]}</b> <span className="font-normal font-lg">{title[1]}</span>
</div>
<div className="flex flex-row gap-2 items-center">
{buttons}
<DownIcon
stroke={3}
className={`w-6 h-6 transition-transform ${
open ? 'text-primary-content rotate-180' : 'text-base-content'
}`}
/>
</div>
2023-02-25 18:19:11 +01:00
</div>
2023-02-25 20:06:00 +01:00
{open ? (
<div className="bg-base-100 text-base-content px-4 py-2">
<div className="pt-4">{children}</div>
</div>
) : null}
2023-02-25 18:19:11 +01:00
</div>
</div>
2023-02-25 20:06:00 +01:00
)
}