import React, { FC, useEffect, useState, useRef } from 'react' import styled from 'styled-components' import { useStore } from '@nanostores/react' import { exportToHexPalette, exportToTokens, parseHexPalette, } from 'store/palette' import { exportToCSS } from 'store/palette/converters' import { paletteStore, setPalette } from 'store/palette' import { TextArea } from './inputs' import { CopyButton } from './CopyButton' export const TokenExportButton: FC = () => { const palette = useStore(paletteStore) return ( { const tokens = exportToTokens(palette) return JSON.stringify(tokens, null, 2) }} > Copy tokens ) } export const CSSExportButton: FC = () => { const palette = useStore(paletteStore) return ( exportToCSS(palette)}> Copy CSS variables ) } export const ExportField: FC = () => { const palette = useStore(paletteStore) const ref = useRef() const [areaValue, setAreaValue] = useState('') const currentJSON = JSON.stringify(exportToHexPalette(palette), null, 2) useEffect(() => { if (document.activeElement !== ref.current) { const newPaletteJson = currentJSON setAreaValue(newPaletteJson) } }, [currentJSON]) return ( setAreaValue(currentJSON)} value={areaValue} onFocus={e => e.target.select()} onChange={e => { const value = e.target.value setAreaValue(value) if (value) { try { const json = JSON.parse(value) const newPalette = parseHexPalette(json, palette.mode) setPalette(newPalette) } catch (error) { console.warn('Parsing error', error) } } }} /> ) } const JSONArea = styled(TextArea)` width: 100%; min-height: 120px; resize: none; `