打印
This commit is contained in:
74
src/components/ColorValueField.tsx
Normal file
74
src/components/ColorValueField.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
import React from 'react';
|
||||
import { colorPickerPreviewValue, colorValueUsesVariable } from '../colorUtils';
|
||||
import { CommitInput } from './CommitInput';
|
||||
|
||||
interface ColorValueFieldProps {
|
||||
label?: string;
|
||||
value: string;
|
||||
onChange: (value: string) => void;
|
||||
variableOptions?: string[];
|
||||
defaultColor?: string;
|
||||
placeholder?: string;
|
||||
className?: string;
|
||||
hint?: string;
|
||||
}
|
||||
|
||||
export const ColorValueField: React.FC<ColorValueFieldProps> = ({
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
variableOptions = [],
|
||||
defaultColor = '#111827',
|
||||
placeholder = '#111827',
|
||||
className = '',
|
||||
hint,
|
||||
}) => {
|
||||
const usesVariable = colorValueUsesVariable(value);
|
||||
const pickerValue = colorPickerPreviewValue(value, defaultColor);
|
||||
|
||||
return (
|
||||
<div className={className}>
|
||||
{label && <label className="ps-field-label">{label}</label>}
|
||||
<div className="flex gap-1 items-center">
|
||||
<input
|
||||
type="color"
|
||||
value={pickerValue}
|
||||
disabled={usesVariable}
|
||||
onChange={(e) => onChange(e.target.value)}
|
||||
className="color-input shrink-0 disabled:opacity-40"
|
||||
title={usesVariable ? '当前为变量颜色,请使用文本框编辑' : undefined}
|
||||
/>
|
||||
<CommitInput
|
||||
type="text"
|
||||
value={value}
|
||||
placeholder={placeholder}
|
||||
onCommit={onChange}
|
||||
className="ps-field font-mono text-[11px] flex-1 min-w-0"
|
||||
/>
|
||||
</div>
|
||||
{variableOptions.length > 0 && (
|
||||
<div className="flex flex-wrap gap-1 mt-1.5">
|
||||
{variableOptions.map((v) => (
|
||||
<button
|
||||
key={v}
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const token = `{${v}}`;
|
||||
onChange(value.includes(token) ? value : value ? `${value} ${token}` : token);
|
||||
}}
|
||||
className="ps-btn text-[9px] font-mono"
|
||||
>
|
||||
{`{${v}}`}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
{hint && <p className="text-[9px] text-[#666] mt-1 leading-relaxed">{hint}</p>}
|
||||
{!hint && variableOptions.length > 0 && (
|
||||
<p className="text-[9px] text-[#666] mt-1 leading-relaxed">
|
||||
支持 hex/rgb/transparent 或 {`{变量名}`};排版印刷色彩模式下按行数据解析
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user