Загрузка данных


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;