import React, { useState } from 'react'
import { CloseIcon } from '@freesewing/react/components/Icon'
/*
* Resist the urge to DRY this up by contructing classNames dynamically
* as doing so will cause them to be dropped from the production bundle
*/
const types = {
comment: {
bg: 'tw:bg-success/5',
border: 'tw:border-success',
text: 'tw:text-success',
},
error: {
bg: 'tw:bg-error/5',
border: 'tw:border-error',
text: 'tw:text-error',
},
fixme: {
bg: 'tw:bg-neutral/5',
border: 'tw:border-neutral',
text: 'tw:text-error',
},
link: {
bg: 'tw:bg-secondary/5',
border: 'tw:border-secondary',
text: 'tw:text-secondary',
},
note: {
bg: 'tw:bg-primary/5',
border: 'tw:border-primary',
text: 'tw:text-primary',
},
related: {
bg: 'tw:bg-info/5',
border: 'tw:border-info',
text: 'tw:text-info',
},
tip: {
bg: 'tw:bg-accent/5',
border: 'tw:border-accent',
text: 'tw:text-accent',
},
warning: {
bg: 'tw:bg-warning/5',
border: 'tw:border-warning',
text: 'tw:text-warning',
},
}
/**
* This popout component is a way to make some content stand out
*
* @component
* @param {object} props - All React props
* @param {string} [props.by = false] - When type is comment, this will be used to show who made the comment
* @param {JSX.Element} props.children - The component children, will be rendered if props.js is not set
* @param {boolean} [props.compact = false] - Set this to render a compact style
* @param {boolean} [props.dense = false] - Set this to render a dense style (only for compact view)
* @param {boolean} [props.hideable = false] - Set this to make the popout hideable/dismissable
* @param {string} [props.type = note] - One of the available types: comment, error, fixme, link, note, related, tip, warning
* @param {string} [props.title = false] - Set this to use a custom title
* @returns {JSX.Element}
*/
export const Popout = ({
by = false,
children = null,
compact = false,
dense = false,
hideable = false,
type = 'note',
title = false,
}) => {
// Make this hideable/dismissable
const [hide, setHide] = useState(false)
if (hide) return null
return compact ? (