/** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal * @author Alexander Rose */ import { Color } from '../../mol-util/color'; import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { camelCaseToWords, stringToWords } from '../../mol-util/string'; import * as React from 'react'; import { _Props, _State } from '../base'; import { ParamProps } from './parameters'; import { TextInput } from './common'; import { DefaultColorSwatch } from '../../mol-util/color/swatches'; export class CombinedColorControl extends React.PureComponent, { isExpanded: boolean }> { state = { isExpanded: !!this.props.param.isExpanded } protected update(value: Color) { this.props.onChange({ param: this.props.param, name: this.props.name, value }); } toggleExpanded = (e: React.MouseEvent) => { this.setState({ isExpanded: !this.state.isExpanded }); e.currentTarget.blur(); } onClickSwatch = (e: React.MouseEvent) => { const value = Color(+(e.currentTarget.getAttribute('data-color') || '0')); if (value !== this.props.value) { if (!this.props.param.isExpanded) this.setState({ isExpanded: false }); this.update(value); } } onChangeText = (value: Color) => { if (value !== this.props.value) { this.update(value); } } swatch() { // const def = this.props.param.defaultValue; return
{/* */} {DefaultColorSwatch.map(c => )}
; } render() { const label = this.props.param.label || camelCaseToWords(this.props.name); return <>
{label}
{this.state.isExpanded &&
{this.swatch()}
RGB
} ; } } function formatColorRGB(c: Color) { const [r, g, b] = Color.toRgb(c); return `${r} ${g} ${b}`; } function getColorFromString(s: string) { const cs = s.split(/\s+/g); return Color.fromRgb(+cs[0], +cs[1], +cs[2]); } function isValidColorString(s: string) { const cs = s.split(/\s+/g); if (cs.length !== 3 && !(cs.length === 4 && cs[3] === '')) return false; for (const c of cs) { if (c === '') continue; const n = +c; if ('' + n !== c) return false; if (n < 0 || n > 255) return false; } return true; } let _colors: React.ReactFragment | undefined = void 0; export function ColorOptions() { if (_colors) return _colors; _colors = <>{DefaultColorSwatch.map(v => )}; return _colors; } const DefaultColorSwatchMap = (function () { const map = new Map() for (const v of DefaultColorSwatch) map.set(v[1], v[0]) return map })() export function ColorValueOption(color: Color) { return !DefaultColorSwatchMap.has(color) ? : null }