2022-02-19 17:00:46 +01:00
|
|
|
import { useState } from 'react'
|
|
|
|
import CloseIcon from 'shared/components/icons/close.js'
|
|
|
|
|
2021-12-18 15:41:37 +01:00
|
|
|
const colors = {
|
2021-12-28 12:24:24 +01:00
|
|
|
comment: 'secondary',
|
2021-12-26 12:52:00 +01:00
|
|
|
note: 'primary',
|
|
|
|
tip: 'accent',
|
2021-12-18 15:41:37 +01:00
|
|
|
warning: 'error',
|
|
|
|
fixme: 'warning',
|
2021-12-26 12:52:00 +01:00
|
|
|
link: 'secondary',
|
2021-12-18 15:41:37 +01:00
|
|
|
related: 'info',
|
|
|
|
none: '',
|
|
|
|
}
|
|
|
|
|
|
|
|
const Popout = (props) => {
|
2022-02-19 17:00:46 +01:00
|
|
|
|
|
|
|
const [hide, setHide] = useState(false)
|
|
|
|
if (hide) return null
|
|
|
|
|
2021-12-18 15:41:37 +01:00
|
|
|
let type = 'none'
|
|
|
|
for (const t in colors) {
|
|
|
|
if (props[t]) type = t
|
|
|
|
}
|
|
|
|
const color = colors[type]
|
2021-12-28 16:11:46 +01:00
|
|
|
const { className=''} = props
|
2021-12-18 15:41:37 +01:00
|
|
|
|
2022-02-19 17:00:46 +01:00
|
|
|
return props.compact
|
|
|
|
? (
|
2022-07-02 22:54:59 +02:00
|
|
|
<div className={`relative my-4 bg-${color} bg-opacity-5 -ml-6 -mr-6 sm:ml-0 sm:mr-0 ${className}`}>
|
2022-02-19 17:00:46 +01:00
|
|
|
<div className={`
|
|
|
|
border-y-4 sm:border-0 sm:border-l-4 px-4
|
|
|
|
shadow text-base border-${color}
|
|
|
|
flex flex-row items-center
|
|
|
|
`}>
|
|
|
|
<div className={`font-bold uppercase text-${color}`}>
|
|
|
|
<span>{type}</span>
|
|
|
|
<span className="px-3">|</span>
|
|
|
|
</div>
|
|
|
|
<div className="popout-content">
|
|
|
|
{props.noP
|
|
|
|
? props.children
|
|
|
|
: <p>{props.children}</p>
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
: (
|
2022-07-02 22:54:59 +02:00
|
|
|
<div className={`relative my-8 bg-${color} bg-opacity-5 -ml-6 -mr-6 sm:ml-0 sm:mr-0 ${className}`}>
|
2022-02-19 17:00:46 +01:00
|
|
|
<div className={`
|
|
|
|
border-y-4 sm:border-0 sm:border-l-4 px-6 sm:px-8 py-4 sm:py-2
|
|
|
|
shadow text-base border-${color}
|
|
|
|
`}>
|
|
|
|
<div className={`font-bold flex flex-row gap-1 items-end justify-between` }>
|
|
|
|
<div>
|
|
|
|
<span className={`font-bold uppercase text-${color}`}>{type}</span>
|
|
|
|
<span className={`font-normal text-base text-${color}`}>
|
|
|
|
{type === 'comment' && <> by <b>{props.by}</b></>}
|
|
|
|
</span>
|
|
|
|
</div>
|
2022-07-12 20:47:39 +02:00
|
|
|
{props.hideable && (
|
2022-02-19 17:00:46 +01:00
|
|
|
<button
|
|
|
|
onClick={() => setHide(true)}
|
|
|
|
className="hover:text-secondary"
|
|
|
|
title="Close"
|
|
|
|
><CloseIcon /></button>
|
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
<div className="py-1 first:mt-0 popout-content">{props.children}</div>
|
|
|
|
{type === 'comment' && (
|
|
|
|
<div className={`font-bold italic text-${color}`}>{props.by}</div>
|
|
|
|
)}
|
2021-12-18 15:41:37 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
2022-02-19 17:00:46 +01:00
|
|
|
)
|
2021-12-18 15:41:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export default Popout
|