Загрузка данных
import type { DrawingStyleField, DrawingStyleSettings } from './styleSettings';
import { getThemeStore } from '@src/theme';
export interface CommonDrawingStyleSettings extends DrawingStyleSettings {
borderColor: string;
borderWidth: number;
backgroundColor: string;
backgroundOpacity: number;
textColor: string;
text: string;
fontSize: number;
isBold: boolean;
isItalic: boolean;
showBackground: boolean;
showBorder: boolean;
wordWrap: boolean;
}
export function createDefaultDrawingStyleSettings(): CommonDrawingStyleSettings {
const { colors } = getThemeStore();
return {
borderColor: colors.chartLineColor,
borderWidth: 1,
backgroundColor: colors.axisMarkerLabelFill,
backgroundOpacity: 100,
textColor: colors.chartPriceLineText,
text: '',
fontSize: 14,
isBold: false,
isItalic: false,
showBackground: true,
showBorder: false,
wordWrap: false,
};
}
export function getCommonDrawingStyleFields(
defaults: CommonDrawingStyleSettings = createDefaultDrawingStyleSettings(),
): DrawingStyleField[] {
return [
{
type: 'color',
key: 'textColor',
label: 'Текст',
defaultValue: defaults.textColor,
},
{
type: 'number',
key: 'fontSize',
label: 'Размер шрифта',
defaultValue: defaults.fontSize,
min: 8,
max: 72,
},
{
type: 'boolean',
key: 'isBold',
label: 'Жирный',
defaultValue: defaults.isBold,
},
{
type: 'boolean',
key: 'isItalic',
label: 'Курсив',
defaultValue: defaults.isItalic,
},
{
type: 'textarea',
key: 'text',
label: 'Текст',
defaultValue: defaults.text,
placeholder: 'Введите текст',
},
{
type: 'boolean',
key: 'showBackground',
label: 'Фон',
defaultValue: defaults.showBackground,
},
{
type: 'color',
key: 'backgroundColor',
label: 'Цвет фона',
defaultValue: defaults.backgroundColor,
},
{
type: 'number',
key: 'backgroundOpacity',
label: 'Прозрачность',
defaultValue: defaults.backgroundOpacity,
min: 0,
max: 100,
},
{
type: 'boolean',
key: 'showBorder',
label: 'Граница',
defaultValue: defaults.showBorder,
},
{
type: 'color',
key: 'borderColor',
label: 'Цвет границы',
defaultValue: defaults.borderColor,
},
{
type: 'number',
key: 'borderWidth',
label: 'Толщина границы',
defaultValue: defaults.borderWidth,
min: 1,
max: 10,
},
{
type: 'boolean',
key: 'wordWrap',
label: 'Перенос строк',
defaultValue: defaults.wordWrap,
},
];
}
export function mergeDrawingStyleSettings<T extends DrawingStyleSettings>(current: T, next: DrawingStyleSettings): T {
return {
...current,
...next,
} as T;
}
export function applyOpacityToHex(hex: string, opacity: number): string {
const normalized = hex.replace('#', '');
const alpha = Math.round((opacity / 100) * 255)
.toString(16)
.padStart(2, '0');
return `#${normalized}${alpha}`;
}
export type DrawingStyleValue = string | number | boolean;
export type DrawingStyleSettings = Record<string, DrawingStyleValue>;
interface BaseDrawingStyleField {
key: string;
label: string;
}
export interface NumberDrawingStyleField extends BaseDrawingStyleField {
type: 'number';
defaultValue: number;
min?: number;
max?: number;
}
export interface SelectDrawingStyleField extends BaseDrawingStyleField {
type: 'select';
defaultValue: string | number;
options: { label: string; value: string | number }[];
}
export interface ColorDrawingStyleField extends BaseDrawingStyleField {
type: 'color';
defaultValue: string;
}
export interface TextDrawingStyleField extends BaseDrawingStyleField {
type: 'text';
defaultValue: string;
placeholder?: string;
}
export interface TextAreaDrawingStyleField extends BaseDrawingStyleField {
type: 'textarea';
defaultValue: string;
placeholder?: string;
}
export interface BooleanDrawingStyleField extends BaseDrawingStyleField {
type: 'boolean';
defaultValue: boolean;
}
export type DrawingStyleField =
| NumberDrawingStyleField
| SelectDrawingStyleField
| ColorDrawingStyleField
| TextDrawingStyleField
| TextAreaDrawingStyleField
| BooleanDrawingStyleField;