@skbkontur/colors 2.0.0-alpha.1 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,13 +7,20 @@ export interface ColorObject {
7
7
  }
8
8
  export type ColorValue = string | ColorObject | ColorValue[];
9
9
  type ColorStructure = ColorObject | ColorValue[];
10
+ export type ColorFormat = 'hex/rgba' | 'rgb/rgba' | 'oklch' | 'hex-aarrggbb';
10
11
  export interface ConfigOptions {
11
12
  brand: PresetOrCustom<keyof typeof DEFAULT_SWATCH.brand>;
12
13
  accent: PresetOrCustom<(typeof ACCENT_PARAMS)[number]>;
13
14
  system?: typeof DEFAULT_SWATCH.system;
15
+ format?: ColorFormat;
14
16
  }
15
17
  export declare function getBaseTokens({ brand, accent, system }: ConfigOptions): BaseTokens;
16
18
  export declare function convertOklchToHex(obj: ColorStructure): ColorStructure;
17
19
  export declare const convertOklchToRgba: (oklchString: string) => string;
18
20
  export declare function convertAlphaOklchToRgba(obj: ColorStructure): ColorStructure;
21
+ export declare const convertHexToRgbString: (hexString: string) => string;
22
+ export declare function convertHexValuesToRgb(obj: ColorStructure): ColorStructure;
23
+ export declare const convertToAarrggbb: (colorString: string) => string;
24
+ export declare function convertToAarrggbbRecursive(obj: ColorStructure): ColorStructure;
25
+ export declare function convertColorFormat(obj: ColorStructure, format?: ColorFormat): ColorStructure;
19
26
  export {};
@@ -133,6 +133,7 @@ export function convertAlphaOklchToRgba(obj) {
133
133
  for (var key in obj) {
134
134
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
135
135
  var value = obj[key];
136
+ // Конвертируем OKLCH с альфа-каналом (содержит '/') в RGBA
136
137
  if (typeof value === 'string' && value.includes('oklch(')) {
137
138
  value = convertOklchToRgba(value);
138
139
  }
@@ -145,3 +146,112 @@ export function convertAlphaOklchToRgba(obj) {
145
146
  }
146
147
  return newObj;
147
148
  }
149
+ export var convertHexToRgbString = function (hexString) {
150
+ var _a;
151
+ var color = converter('rgb')(hexString);
152
+ if (!color) {
153
+ return hexString;
154
+ }
155
+ var r = Math.round(color.r * 255);
156
+ var g = Math.round(color.g * 255);
157
+ var b = Math.round(color.b * 255);
158
+ var alpha = (_a = color.alpha) !== null && _a !== void 0 ? _a : 1;
159
+ return alpha === 1
160
+ ? 'rgb('.concat(r, ', ').concat(g, ', ').concat(b, ')')
161
+ : 'rgba('.concat(r, ', ').concat(g, ', ').concat(b, ', ').concat(alpha, ')');
162
+ };
163
+ export function convertHexValuesToRgb(obj) {
164
+ if (typeof obj !== 'object' || obj === null) {
165
+ return obj;
166
+ }
167
+ if (Array.isArray(obj)) {
168
+ return obj.map(function (item) {
169
+ if (typeof item === 'object' && item !== null) {
170
+ return convertHexValuesToRgb(item);
171
+ }
172
+ return item;
173
+ });
174
+ }
175
+ var newObj = {};
176
+ for (var key in obj) {
177
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
178
+ var value = obj[key];
179
+ // Конвертируем HEX-строки в RGB(A)-строки
180
+ if (typeof value === 'string' && value.startsWith('#')) {
181
+ newObj[key] = convertHexToRgbString(value);
182
+ } else if (typeof value === 'object' && value !== null) {
183
+ newObj[key] = convertHexValuesToRgb(value);
184
+ } else {
185
+ newObj[key] = value;
186
+ }
187
+ }
188
+ }
189
+ return newObj;
190
+ }
191
+ export var convertToAarrggbb = function (colorString) {
192
+ var _a;
193
+ var color = converter('rgb')(colorString);
194
+ if (!color) {
195
+ return colorString;
196
+ }
197
+ var r = Math.round(color.r * 255);
198
+ var g = Math.round(color.g * 255);
199
+ var b = Math.round(color.b * 255);
200
+ var alpha = Math.round(((_a = color.alpha) !== null && _a !== void 0 ? _a : 1) * 255);
201
+ var toHex = function (c) {
202
+ return c.toString(16).padStart(2, '0');
203
+ };
204
+ var rgbHex = ''.concat(toHex(r)).concat(toHex(g)).concat(toHex(b)).toUpperCase();
205
+ if (alpha === 255) {
206
+ return '#'.concat(rgbHex);
207
+ }
208
+ return '#'.concat(toHex(alpha)).concat(rgbHex).toUpperCase();
209
+ };
210
+ export function convertToAarrggbbRecursive(obj) {
211
+ if (typeof obj !== 'object' || obj === null) {
212
+ return obj;
213
+ }
214
+ if (Array.isArray(obj)) {
215
+ return obj.map(function (item) {
216
+ if (typeof item === 'object' && item !== null) {
217
+ return convertToAarrggbbRecursive(item);
218
+ }
219
+ return item;
220
+ });
221
+ }
222
+ var newObj = {};
223
+ for (var key in obj) {
224
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
225
+ var value = obj[key];
226
+ // Конвертируем строки цветов (HEX, RGBA) в AARRGGBB
227
+ if (typeof value === 'string') {
228
+ newObj[key] = convertToAarrggbb(value); // Измененная логика в этой функции
229
+ } else if (typeof value === 'object' && value !== null) {
230
+ newObj[key] = convertToAarrggbbRecursive(value);
231
+ } else {
232
+ newObj[key] = value;
233
+ }
234
+ }
235
+ }
236
+ return newObj;
237
+ }
238
+ export function convertColorFormat(obj, format) {
239
+ if (format === void 0) {
240
+ format = 'hex/rgba';
241
+ }
242
+ var result = obj;
243
+ result = convertOklchToHex(obj);
244
+ result = convertAlphaOklchToRgba(result);
245
+ switch (format) {
246
+ case 'oklch':
247
+ return obj;
248
+ case 'hex/rgba':
249
+ return result;
250
+ case 'rgb/rgba':
251
+ return convertHexValuesToRgb(result);
252
+ case 'hex-aarrggbb':
253
+ return convertToAarrggbbRecursive(result);
254
+ default:
255
+ return result;
256
+ }
257
+ }
@@ -1,4 +1,4 @@
1
- import { type ConfigOptions } from './get-base-tokens';
1
+ import { type ConfigOptions, type ColorFormat } from './get-base-tokens';
2
2
  import { getDefaultTokens } from './get-default-tokens';
3
3
  import type { BaseTokens } from './types/base-tokens';
4
4
  export interface Themed<T> {
@@ -10,6 +10,7 @@ export type DefaultTokens = DefaultTokensFull['light' | 'dark'];
10
10
  export interface SemanticConfigOptions<T> extends ConfigOptions {
11
11
  theme?: 'light' | 'dark';
12
12
  overrides?: (base: BaseTokens, defaults?: DefaultTokensFull, params?: SemanticConfigOptions<T>) => Themed<T>;
13
+ format?: ColorFormat;
13
14
  }
14
15
  export declare function getColors(params: SemanticConfigOptions<DefaultTokens>): DefaultTokens;
15
16
  export declare function getColors<T>(
@@ -1,4 +1,4 @@
1
- import { getBaseTokens, convertOklchToHex, convertAlphaOklchToRgba } from './get-base-tokens'; //
1
+ import { getBaseTokens, convertColorFormat } from './get-base-tokens';
2
2
  import { getDefaultTokens } from './get-default-tokens';
3
3
  var DEFAULT_THEME = 'light';
4
4
  export function getColors(params) {
@@ -6,16 +6,11 @@ export function getColors(params) {
6
6
  var base = getBaseTokens(params);
7
7
  var defaults = getDefaultTokens(base);
8
8
  var result;
9
- // 1. Получаем базовый объект цветов (либо дефолтный, либо переопределенный)
10
9
  if (params.overrides) {
11
10
  result = params.overrides(base, defaults, params)[theme];
12
11
  } else {
13
12
  result = defaults[theme];
14
13
  }
15
- // 2. Конвертируем oklch без прозрачности в HEX
16
- // Используем 'as any', так как конвертеры рассчитаны на рекурсивную структуру ColorStructure
17
- var hexConverted = convertOklchToHex(result);
18
- // 3. Конвертируем оставшиеся oklch (с прозрачностью) в RGBA
19
- var finalResult = convertAlphaOklchToRgba(hexConverted);
14
+ var finalResult = convertColorFormat(result, params.format);
20
15
  return finalResult;
21
16
  }
@@ -223,9 +223,9 @@ export function calculateBaseHueAndCorrectionRange(inputColorString, abneyData)
223
223
  };
224
224
  }
225
225
  export function calcOnBrand(hex) {
226
- var whiteContrast = Number(calcAPCA('#fff', hex));
227
- var blackContrast = Number(calcAPCA('#000', hex));
228
- if (whiteContrast - 10 <= blackContrast) {
226
+ var whiteContrast = Math.abs(Number(calcAPCA('#fff', hex)));
227
+ var blackContrast = Math.abs(Number(calcAPCA('#000', hex)));
228
+ if (whiteContrast + 10 >= blackContrast) {
229
229
  return DefaultSwatch.whiteAlpha;
230
230
  }
231
231
  return DefaultSwatch.blackAlpha;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/colors",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0-alpha.2",
4
4
  "author": "Kontur",
5
5
  "publishConfig": {
6
6
  "access": "public",