import * as React from 'react' import {__, _x} from '@wordpress/i18n' import { useState, } from '@wordpress/element' import { __experimentalVStack as VStack, } from '@wordpress/components' import { ActionInput, Button, } from '@ska/components' import Radio from '../radio' import { useSkaBlocks, } from '../../hooks' import { Attribute, VARIANT_DEFAULT_STATE, TailwindFeatureAttribute, } from '../../../tailwind/attributes' export interface AddVariantProps { currentVariants?: TailwindFeatureAttribute[Attribute.VARIANTS] onAdd: (variant: keyof TailwindFeatureAttribute[Attribute.VARIANTS], defaultValue?: TailwindFeatureAttribute[Attribute.VARIANTS]['value']) => void setActiveVariant: (activeVariant: keyof TailwindFeatureAttribute[Attribute.VARIANTS]) => void } const AddVariant: React.FC = ({ currentVariants = {}, onAdd, setActiveVariant, }) => { const [variant, setVariant] = useState('') const [inheritFrom, setInheritFrom] = useState('') const [showMore, setShowMore] = useState(false) // TODO: parser has a list of all available variants const { compiler: { variantOptions: VARIANTS, }, } = useSkaBlocks() const usedVariants = Object.keys(currentVariants) const USED_VARIANTS = usedVariants.map(variant => ({ label: variant === VARIANT_DEFAULT_STATE ? _x('Default', 'Label for "default state" variant', 'ska-blocks') : variant, value: variant, })) const addVariant = (variant: string, inheritFrom?: string) => { onAdd( variant, inheritFrom ? ( Object(currentVariants).hasOwnProperty(inheritFrom) ? currentVariants[inheritFrom] : undefined ) : undefined ) } return ( { setVariant(nextValue) }} onSubmit={value => { addVariant(value, inheritFrom) setVariant('') }} onClear={() => setVariant('')} disabled={usedVariants.includes(variant)} /> variant.split(':').filter(v => v).includes(value)} onChange={value => { const variants = variant.split(':').filter(v => v) setVariant( variants.includes(value) ? variants.filter(v => v !== value).join(':') : ( variants.length > 0 ? variants.concat(value).join(':') : value ) ) }} onDoubleClick={value => { if(!usedVariants.includes(value)) { addVariant(value, inheritFrom) } setVariant('') setActiveVariant(value) }} onAdd={arbitraryValue => { setVariant([variant, `[${arbitraryValue}]`].filter(v => v).join(':')) }} /> {!showMore && (