tsgrid-ui 2.1.0 → 2.2.0
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.
- package/CHANGELOG.md +21 -0
- package/dist/tsgrid-ui.css +2 -2
- package/dist/tsgrid-ui.d.ts +1 -0
- package/dist/tsgrid-ui.es6.js +9 -4
- package/dist/tsgrid-ui.js +10 -5
- package/dist/tsgrid-ui.min.css +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to **TsGrid UI** will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## v2.2.0 — 2026-05-13
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`TsUtils.colorContrastValue(color1, color2): number`** — numeric companion to `colorContrast()` that returns the raw WCAG ratio as a `number` instead of a `.toFixed(2)` string. Consumers performing threshold checks no longer need to wrap the result in `Number(...)` or `parseFloat(...)`.
|
|
10
|
+
|
|
11
|
+
### Refactor
|
|
12
|
+
|
|
13
|
+
- `colorContrast()` now delegates to `colorContrastValue().toFixed(2)`. Output is byte-identical to v2.1.0; no behavior change.
|
|
14
|
+
- `tstoolbar.ts` background-color contrast check upgraded to the numeric API (`TsUtils.colorContrastValue('#fff', color) < 2`), removing the `Number(...)` cast.
|
|
15
|
+
|
|
16
|
+
### Tests
|
|
17
|
+
|
|
18
|
+
- Added 4 unit tests for `colorContrastValue` (111 → 115): typeof number, white/black ≥ 21 (max WCAG), identical = 1, parity with `colorContrast` string form via `.toFixed(2)`.
|
|
19
|
+
|
|
20
|
+
### BC
|
|
21
|
+
|
|
22
|
+
Net-additive. `colorContrast` return type and value unchanged. SEMVER MINOR. BC verdict: NONE.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
5
26
|
## v2.1.0 — 2026-05-13
|
|
6
27
|
|
|
7
28
|
### Refactor
|
package/dist/tsgrid-ui.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* tsgrid-ui 1.0.x (nightly) (5/13/2026,
|
|
1
|
+
/* tsgrid-ui 1.0.x (nightly) (5/13/2026, 4:05:55 PM) (c) 2014 vitmalina@gmail.com, (c) 2026 DaverSoGT — MIT */
|
|
2
2
|
/**
|
|
3
3
|
* TODO:
|
|
4
4
|
* - remove default styling, only keep tsg-* styles
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
@font-face {
|
|
11
11
|
font-family: "tsgrid-font";
|
|
12
|
-
src: url("data:application/x-font-woff;charset=utf-8;base64,
|
|
12
|
+
src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff");
|
|
13
13
|
font-weight: normal;
|
|
14
14
|
font-style: normal;
|
|
15
15
|
}
|
package/dist/tsgrid-ui.d.ts
CHANGED
|
@@ -587,6 +587,7 @@ declare class Utils {
|
|
|
587
587
|
setCursorPosition(input: HTMLElement | null, pos: number, posEnd?: number): void;
|
|
588
588
|
parseColor(str: string | null | undefined): TsColorRgb | null;
|
|
589
589
|
colorContrast(color1: string, color2: string): string;
|
|
590
|
+
colorContrastValue(color1: string, color2: string): number;
|
|
590
591
|
hsv2rgb(h: any, s?: any, v?: any, a?: any): {
|
|
591
592
|
r: number;
|
|
592
593
|
g: number;
|
package/dist/tsgrid-ui.es6.js
CHANGED
|
@@ -1148,11 +1148,10 @@ function parseColor(str) {
|
|
|
1148
1148
|
}
|
|
1149
1149
|
return color;
|
|
1150
1150
|
}
|
|
1151
|
-
function
|
|
1151
|
+
function colorContrastValue(color1, color2) {
|
|
1152
1152
|
const lum1 = calcLumens(color1);
|
|
1153
1153
|
const lum2 = calcLumens(color2);
|
|
1154
|
-
|
|
1155
|
-
return ratio.toFixed(2);
|
|
1154
|
+
return (Math.max(lum1, lum2) + 0.05) / (Math.min(lum1, lum2) + 0.05);
|
|
1156
1155
|
function calcLumens(color) {
|
|
1157
1156
|
const { r, g, b } = parseColor(color) ?? { r: 0, g: 0, b: 0, a: 1 };
|
|
1158
1157
|
const gamma = 2.2;
|
|
@@ -1165,6 +1164,9 @@ function colorContrast(color1, color2) {
|
|
|
1165
1164
|
return 0.2126 * sR + 0.7152 * sG + 0.0722 * sB;
|
|
1166
1165
|
}
|
|
1167
1166
|
}
|
|
1167
|
+
function colorContrast(color1, color2) {
|
|
1168
|
+
return colorContrastValue(color1, color2).toFixed(2);
|
|
1169
|
+
}
|
|
1168
1170
|
function hsv2rgb(h, s, v, a) {
|
|
1169
1171
|
let r, g, b;
|
|
1170
1172
|
if (typeof h === "object" && h !== null) {
|
|
@@ -3429,6 +3431,9 @@ var Utils = class {
|
|
|
3429
3431
|
colorContrast(color1, color2) {
|
|
3430
3432
|
return colorContrast(color1, color2);
|
|
3431
3433
|
}
|
|
3434
|
+
colorContrastValue(color1, color2) {
|
|
3435
|
+
return colorContrastValue(color1, color2);
|
|
3436
|
+
}
|
|
3432
3437
|
// h=0..360, s=0..100, v=0..100
|
|
3433
3438
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3434
3439
|
hsv2rgb(h, s, v, a) {
|
|
@@ -8191,7 +8196,7 @@ var TsToolbar = class extends TsBase {
|
|
|
8191
8196
|
let bcolor = item.backColor;
|
|
8192
8197
|
if (item.backColor === true) {
|
|
8193
8198
|
bcolor = "#fff";
|
|
8194
|
-
if (
|
|
8199
|
+
if (TsUtils.colorContrastValue("#fff", color) < 2) {
|
|
8195
8200
|
bcolor = "#555";
|
|
8196
8201
|
}
|
|
8197
8202
|
}
|
package/dist/tsgrid-ui.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* tsgrid-ui 1.0.x (nightly) (5/13/2026,
|
|
1
|
+
/* tsgrid-ui 1.0.x (nightly) (5/13/2026, 4:06:07 PM) (c) 2014 vitmalina@gmail.com, (c) 2026 DaverSoGT — MIT */
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1183,11 +1183,10 @@ function parseColor(str) {
|
|
|
1183
1183
|
}
|
|
1184
1184
|
return color;
|
|
1185
1185
|
}
|
|
1186
|
-
function
|
|
1186
|
+
function colorContrastValue(color1, color2) {
|
|
1187
1187
|
const lum1 = calcLumens(color1);
|
|
1188
1188
|
const lum2 = calcLumens(color2);
|
|
1189
|
-
|
|
1190
|
-
return ratio.toFixed(2);
|
|
1189
|
+
return (Math.max(lum1, lum2) + 0.05) / (Math.min(lum1, lum2) + 0.05);
|
|
1191
1190
|
function calcLumens(color) {
|
|
1192
1191
|
const { r, g, b } = parseColor(color) ?? { r: 0, g: 0, b: 0, a: 1 };
|
|
1193
1192
|
const gamma = 2.2;
|
|
@@ -1200,6 +1199,9 @@ function colorContrast(color1, color2) {
|
|
|
1200
1199
|
return 0.2126 * sR + 0.7152 * sG + 0.0722 * sB;
|
|
1201
1200
|
}
|
|
1202
1201
|
}
|
|
1202
|
+
function colorContrast(color1, color2) {
|
|
1203
|
+
return colorContrastValue(color1, color2).toFixed(2);
|
|
1204
|
+
}
|
|
1203
1205
|
function hsv2rgb(h, s, v, a) {
|
|
1204
1206
|
let r, g, b;
|
|
1205
1207
|
if (typeof h === "object" && h !== null) {
|
|
@@ -3464,6 +3466,9 @@ var Utils = class {
|
|
|
3464
3466
|
colorContrast(color1, color2) {
|
|
3465
3467
|
return colorContrast(color1, color2);
|
|
3466
3468
|
}
|
|
3469
|
+
colorContrastValue(color1, color2) {
|
|
3470
|
+
return colorContrastValue(color1, color2);
|
|
3471
|
+
}
|
|
3467
3472
|
// h=0..360, s=0..100, v=0..100
|
|
3468
3473
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3469
3474
|
hsv2rgb(h, s, v, a) {
|
|
@@ -8226,7 +8231,7 @@ var TsToolbar = class extends TsBase {
|
|
|
8226
8231
|
let bcolor = item.backColor;
|
|
8227
8232
|
if (item.backColor === true) {
|
|
8228
8233
|
bcolor = "#fff";
|
|
8229
|
-
if (
|
|
8234
|
+
if (TsUtils.colorContrastValue("#fff", color) < 2) {
|
|
8230
8235
|
bcolor = "#555";
|
|
8231
8236
|
}
|
|
8232
8237
|
}
|