@connectorvol/shared 2.1.1 → 4.0.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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/nagGlyphs.d.ts +40 -0
- package/dist/nagGlyphs.js +137 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -6,3 +6,4 @@ export { Square } from "./square.js";
|
|
|
6
6
|
export { type PieceSet } from "./pieceSet.js";
|
|
7
7
|
export { type Move } from "./move.js";
|
|
8
8
|
export { calculatePly } from "./calculatePly.js";
|
|
9
|
+
export { MOVE_EVALUATION_NAG_IDS, NOVELTY_NAG_ID, PUZZLE_BRANCH_CORRECT_NAG_ID, PUZZLE_BRANCH_NAG_IDS, PUZZLE_BRANCH_WRONG_NAG_ID, type TNagMoveBoardGlyph, type TSplitMoveEvaluationNagsForBoard, isMoveEvaluationNag, isPuzzleBranchNag, moveEvaluationNagBoardGlyph, nagBadgeBackground, pickFirstMoveEvaluationNag, splitMoveEvaluationNagsForBoard, transformNag, } from "./nagGlyphs.js";
|
package/dist/index.js
CHANGED
|
@@ -6,3 +6,4 @@ export { Square } from "./square.js";
|
|
|
6
6
|
export {} from "./pieceSet.js";
|
|
7
7
|
export {} from "./move.js";
|
|
8
8
|
export { calculatePly } from "./calculatePly.js";
|
|
9
|
+
export { MOVE_EVALUATION_NAG_IDS, NOVELTY_NAG_ID, PUZZLE_BRANCH_CORRECT_NAG_ID, PUZZLE_BRANCH_NAG_IDS, PUZZLE_BRANCH_WRONG_NAG_ID, isMoveEvaluationNag, isPuzzleBranchNag, moveEvaluationNagBoardGlyph, nagBadgeBackground, pickFirstMoveEvaluationNag, splitMoveEvaluationNagsForBoard, transformNag, } from "./nagGlyphs.js";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Представляет NAG группы «Оценка хода» (Lichess / PGN) для бейджа на клетке назначения.
|
|
3
|
+
*/
|
|
4
|
+
export declare const MOVE_EVALUATION_NAG_IDS: readonly [1, 2, 3, 4, 5, 6, 146];
|
|
5
|
+
/** Представляет NAG новизны (новинка) в группе «Оценка хода». */
|
|
6
|
+
export declare const NOVELTY_NAG_ID: 146;
|
|
7
|
+
/** Представляет NAG метки «верная ветка решения задачи» (развилка со стороны решателя). */
|
|
8
|
+
export declare const PUZZLE_BRANCH_CORRECT_NAG_ID: 147;
|
|
9
|
+
/** Представляет NAG метки «неверная ветка решения задачи». */
|
|
10
|
+
export declare const PUZZLE_BRANCH_WRONG_NAG_ID: 148;
|
|
11
|
+
/** Представляет пару NAG для обязательной разметки альтернатив на шаге задачи. */
|
|
12
|
+
export declare const PUZZLE_BRANCH_NAG_IDS: readonly [147, 148];
|
|
13
|
+
/** Представляет проверку: NAG относится к паре «верно / неверно» для ветки задачи. */
|
|
14
|
+
export declare function isPuzzleBranchNag(nag: number): boolean;
|
|
15
|
+
/** Представляет результат разбиения NAG группы «Оценка хода» для отображения на доске. */
|
|
16
|
+
export interface TSplitMoveEvaluationNagsForBoard {
|
|
17
|
+
/** Возвращает номер NAG новизны (146), если он присутствует в списке. */
|
|
18
|
+
noveltyNag?: number;
|
|
19
|
+
/** Возвращает первый остальной NAG из той же группы (не новизна). */
|
|
20
|
+
secondaryNag?: number;
|
|
21
|
+
}
|
|
22
|
+
/** Представляет стиль круглого бейджа NAG на доске (фон и подпись). */
|
|
23
|
+
export type TNagMoveBoardGlyph = {
|
|
24
|
+
/** Возвращает CSS `background` (градиент). */
|
|
25
|
+
background: string;
|
|
26
|
+
/** Возвращает короткий символ глифа. */
|
|
27
|
+
label: string;
|
|
28
|
+
};
|
|
29
|
+
/** Представляет проверку: NAG относится к группе «Оценка хода». */
|
|
30
|
+
export declare function isMoveEvaluationNag(nag: number): boolean;
|
|
31
|
+
/** Представляет первый NAG из списка, входящий в группу «Оценка хода». */
|
|
32
|
+
export declare function pickFirstMoveEvaluationNag(nags: readonly number[] | undefined): number | undefined;
|
|
33
|
+
/** Представляет выделение NAG новизны и одной дополнительной оценки хода для двух углов клетки. */
|
|
34
|
+
export declare function splitMoveEvaluationNagsForBoard(nags: readonly number[] | undefined): TSplitMoveEvaluationNagsForBoard;
|
|
35
|
+
/** Представляет CSS `background` для бейджа NAG. */
|
|
36
|
+
export declare function nagBadgeBackground(nag: number): string;
|
|
37
|
+
/** Представляет преобразование номера NAG в строку для UI (как в меню Lichess). */
|
|
38
|
+
export declare function transformNag(nag: number | undefined): string;
|
|
39
|
+
/** Представляет глиф и фон для бейджа оценки хода на клетке `to` или null, если NAG не из этой группы. */
|
|
40
|
+
export declare function moveEvaluationNagBoardGlyph(nag: number): TNagMoveBoardGlyph | null;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Представляет NAG группы «Оценка хода» (Lichess / PGN) для бейджа на клетке назначения.
|
|
3
|
+
*/
|
|
4
|
+
export const MOVE_EVALUATION_NAG_IDS = [1, 2, 3, 4, 5, 6, 146];
|
|
5
|
+
const MOVE_EVAL_SET = new Set(MOVE_EVALUATION_NAG_IDS);
|
|
6
|
+
/** Представляет NAG новизны (новинка) в группе «Оценка хода». */
|
|
7
|
+
export const NOVELTY_NAG_ID = 146;
|
|
8
|
+
/** Представляет NAG метки «верная ветка решения задачи» (развилка со стороны решателя). */
|
|
9
|
+
export const PUZZLE_BRANCH_CORRECT_NAG_ID = 147;
|
|
10
|
+
/** Представляет NAG метки «неверная ветка решения задачи». */
|
|
11
|
+
export const PUZZLE_BRANCH_WRONG_NAG_ID = 148;
|
|
12
|
+
/** Представляет пару NAG для обязательной разметки альтернатив на шаге задачи. */
|
|
13
|
+
export const PUZZLE_BRANCH_NAG_IDS = [
|
|
14
|
+
PUZZLE_BRANCH_CORRECT_NAG_ID,
|
|
15
|
+
PUZZLE_BRANCH_WRONG_NAG_ID,
|
|
16
|
+
];
|
|
17
|
+
const PUZZLE_BRANCH_SET = new Set(PUZZLE_BRANCH_NAG_IDS);
|
|
18
|
+
/** Представляет проверку: NAG относится к паре «верно / неверно» для ветки задачи. */
|
|
19
|
+
export function isPuzzleBranchNag(nag) {
|
|
20
|
+
return PUZZLE_BRANCH_SET.has(nag);
|
|
21
|
+
}
|
|
22
|
+
const NAG_SYMBOLS = {
|
|
23
|
+
1: "!",
|
|
24
|
+
2: "?",
|
|
25
|
+
3: "!!",
|
|
26
|
+
4: "??",
|
|
27
|
+
5: "!?",
|
|
28
|
+
6: "?!",
|
|
29
|
+
7: "□",
|
|
30
|
+
22: "⨀",
|
|
31
|
+
10: "=",
|
|
32
|
+
13: "∞",
|
|
33
|
+
14: "⩲",
|
|
34
|
+
15: "⩱",
|
|
35
|
+
16: "±",
|
|
36
|
+
17: "∓",
|
|
37
|
+
18: "+\u2212",
|
|
38
|
+
19: "-+",
|
|
39
|
+
146: "N",
|
|
40
|
+
147: "✓",
|
|
41
|
+
148: "✗",
|
|
42
|
+
32: "↑↑",
|
|
43
|
+
36: "↑",
|
|
44
|
+
40: "→",
|
|
45
|
+
132: "⇆",
|
|
46
|
+
138: "⊕",
|
|
47
|
+
44: "=∞",
|
|
48
|
+
140: "\u2206",
|
|
49
|
+
};
|
|
50
|
+
const NAG_BADGE_GRADIENTS = {
|
|
51
|
+
1: "linear-gradient(145deg, #15803d 0%, #22c55e 100%)",
|
|
52
|
+
2: "linear-gradient(145deg, #991b1b 0%, #ef4444 100%)",
|
|
53
|
+
3: "linear-gradient(145deg, #a16207 0%, #facc15 55%, #fde047 100%)",
|
|
54
|
+
4: "linear-gradient(145deg, #450a0a 0%, #7f1d1d 65%, #b91c1c 100%)",
|
|
55
|
+
5: "linear-gradient(145deg, #0f766e 0%, #14b8a6 55%, #5eead4 100%)",
|
|
56
|
+
6: "linear-gradient(145deg, #c2410c 0%, #f97316 100%)",
|
|
57
|
+
7: "linear-gradient(145deg, #4b5563 0%, #9ca3af 100%)",
|
|
58
|
+
22: "linear-gradient(145deg, #581c87 0%, #a855f7 55%, #c084fc 100%)",
|
|
59
|
+
10: "linear-gradient(145deg, #475569 0%, #94a3b8 100%)",
|
|
60
|
+
13: "linear-gradient(145deg, #5b21b6 0%, #8b5cf6 50%, #a78bfa 100%)",
|
|
61
|
+
14: "linear-gradient(145deg, #1d4ed8 0%, #3b82f6 55%, #60a5fa 100%)",
|
|
62
|
+
15: "linear-gradient(145deg, #713f12 0%, #b45309 50%, #d97706 100%)",
|
|
63
|
+
16: "linear-gradient(145deg, #1e3a8a 0%, #2563eb 55%, #3b82f6 100%)",
|
|
64
|
+
17: "linear-gradient(145deg, #78350f 0%, #b45309 70%, #ea580c 100%)",
|
|
65
|
+
18: "linear-gradient(145deg, #172554 0%, #1e40af 45%, #2563eb 100%)",
|
|
66
|
+
19: "linear-gradient(145deg, #292524 0%, #44403c 40%, #7c2d12 100%)",
|
|
67
|
+
146: "linear-gradient(145deg, #9d174d 0%, #ec4899 55%, #f472b6 100%)",
|
|
68
|
+
147: "linear-gradient(145deg, #166534 0%, #22c55e 55%, #4ade80 100%)",
|
|
69
|
+
148: "linear-gradient(145deg, #991b1b 0%, #dc2626 55%, #f87171 100%)",
|
|
70
|
+
32: "linear-gradient(145deg, #166534 0%, #22c55e 50%, #86efac 100%)",
|
|
71
|
+
36: "linear-gradient(145deg, #b45309 0%, #f59e0b 55%, #fbbf24 100%)",
|
|
72
|
+
40: "linear-gradient(145deg, #b91c1c 0%, #ef4444 45%, #fb7185 100%)",
|
|
73
|
+
132: "linear-gradient(145deg, #0e7490 0%, #06b6d4 50%, #22d3ee 100%)",
|
|
74
|
+
138: "linear-gradient(145deg, #881337 0%, #e11d48 50%, #fb7185 100%)",
|
|
75
|
+
44: "linear-gradient(145deg, #115e59 0%, #0d9488 50%, #2dd4bf 100%)",
|
|
76
|
+
140: "linear-gradient(145deg, #312e81 0%, #4f46e5 50%, #818cf8 100%)",
|
|
77
|
+
};
|
|
78
|
+
/** Представляет проверку: NAG относится к группе «Оценка хода». */
|
|
79
|
+
export function isMoveEvaluationNag(nag) {
|
|
80
|
+
return MOVE_EVAL_SET.has(nag);
|
|
81
|
+
}
|
|
82
|
+
/** Представляет первый NAG из списка, входящий в группу «Оценка хода». */
|
|
83
|
+
export function pickFirstMoveEvaluationNag(nags) {
|
|
84
|
+
if (!nags?.length)
|
|
85
|
+
return undefined;
|
|
86
|
+
for (const n of nags) {
|
|
87
|
+
if (MOVE_EVAL_SET.has(n))
|
|
88
|
+
return n;
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
/** Представляет выделение NAG новизны и одной дополнительной оценки хода для двух углов клетки. */
|
|
93
|
+
export function splitMoveEvaluationNagsForBoard(nags) {
|
|
94
|
+
if (!nags?.length)
|
|
95
|
+
return {};
|
|
96
|
+
let noveltyNag;
|
|
97
|
+
let secondaryNag;
|
|
98
|
+
for (const n of nags) {
|
|
99
|
+
if (!MOVE_EVAL_SET.has(n))
|
|
100
|
+
continue;
|
|
101
|
+
if (n === NOVELTY_NAG_ID) {
|
|
102
|
+
if (noveltyNag === undefined)
|
|
103
|
+
noveltyNag = n;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (secondaryNag === undefined)
|
|
107
|
+
secondaryNag = n;
|
|
108
|
+
}
|
|
109
|
+
return { noveltyNag, secondaryNag };
|
|
110
|
+
}
|
|
111
|
+
/** Представляет CSS `background` для бейджа NAG. */
|
|
112
|
+
export function nagBadgeBackground(nag) {
|
|
113
|
+
const preset = NAG_BADGE_GRADIENTS[nag];
|
|
114
|
+
if (preset)
|
|
115
|
+
return preset;
|
|
116
|
+
const h = (((nag * 137.508) % 360) + 360) % 360;
|
|
117
|
+
const h2 = (h + 48) % 360;
|
|
118
|
+
return `linear-gradient(145deg, hsl(${h} 62% 38%) 0%, hsl(${h2} 58% 28%) 100%)`;
|
|
119
|
+
}
|
|
120
|
+
/** Представляет преобразование номера NAG в строку для UI (как в меню Lichess). */
|
|
121
|
+
export function transformNag(nag) {
|
|
122
|
+
if (nag === undefined || Number.isNaN(nag))
|
|
123
|
+
return "";
|
|
124
|
+
const symbol = NAG_SYMBOLS[nag];
|
|
125
|
+
if (symbol !== undefined)
|
|
126
|
+
return symbol;
|
|
127
|
+
return `$${nag}`;
|
|
128
|
+
}
|
|
129
|
+
/** Представляет глиф и фон для бейджа оценки хода на клетке `to` или null, если NAG не из этой группы. */
|
|
130
|
+
export function moveEvaluationNagBoardGlyph(nag) {
|
|
131
|
+
if (!isMoveEvaluationNag(nag))
|
|
132
|
+
return null;
|
|
133
|
+
return {
|
|
134
|
+
background: nagBadgeBackground(nag),
|
|
135
|
+
label: transformNag(nag) || `$${nag}`,
|
|
136
|
+
};
|
|
137
|
+
}
|