@3rtools/tyts-mcp 1.18.2 → 1.19.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/README.md +29 -2
- package/dist/document.d.ts +83 -6
- package/dist/document.js +276 -26
- package/dist/document.js.map +1 -1
- package/dist/schemas.d.ts +829 -0
- package/dist/schemas.js +68 -3
- package/dist/schemas.js.map +1 -1
- package/dist/server.js +81 -16
- package/dist/server.js.map +1 -1
- package/dist/session.d.ts +7 -0
- package/dist/session.js +4 -0
- package/dist/session.js.map +1 -1
- package/editor/assets/{index-IsTIouZf.js → index-CUMfZ4B-.js} +2 -2
- package/editor/assets/{index.es-B2BDgK7g.js → index.es-CWFRC_1c.js} +1 -1
- package/editor/index.html +1 -1
- package/editor/tyts-embed.js +2 -2
- package/package.json +1 -1
- package/static/harness.html +18 -0
package/README.md
CHANGED
|
@@ -50,6 +50,9 @@ claude mcp add tyts -- npx -y @3rtools/tyts-mcp
|
|
|
50
50
|
| `image` | шлях до файлу, http(s) URL або data URL |
|
|
51
51
|
| `pins` | анотації; координати в пікселях **оригінальної** картинки |
|
|
52
52
|
| `document` | замість `image`+`pins` — повний `TytsDocument` (наприклад, з попереднього рендера) |
|
|
53
|
+
| `crop` | `{x, y, width, height}` — кадрувати картинку; координати `pins` лишаються в оригіналі |
|
|
54
|
+
| `stamp` | `{image, corner?, size?, marginX?, marginY?}` — лого в кут, як інструмент «Штамп» |
|
|
55
|
+
| `strokeWidth` | товщина ліній для всіх пінів без власної (0.25–4, типово 1) |
|
|
53
56
|
| `format` | `png` (типово), `jpeg`, `pdf` |
|
|
54
57
|
| `width` або `scale` | цільова ширина в px або множник (1 = полотно × 2) |
|
|
55
58
|
| `output` | шлях для файлу; типово `$TYTS_OUTPUT_DIR/tyts-<час>.<ext>` |
|
|
@@ -69,8 +72,32 @@ claude mcp add tyts -- npx -y @3rtools/tyts-mcp
|
|
|
69
72
|
}
|
|
70
73
|
```
|
|
71
74
|
|
|
72
|
-
Типи
|
|
73
|
-
`
|
|
75
|
+
Типи фігур — усі, що є в редакторі: `point`, `rectangle`, `ellipse`, `polygon`, `polyline`, `arrow`,
|
|
76
|
+
`text` (з `point` — «точка з текстом»), `compass`, `standalone`, `numbering`, `image` (картинка поверх
|
|
77
|
+
фото), `redact` (розмиття / пікселізація / заливка), `linked` (ще одна виноска до тієї ж фігури).
|
|
78
|
+
|
|
79
|
+
Картка-виноска будь-якого піна: `text`, **`photo`** (фото в картці — шлях, URL або data URL),
|
|
80
|
+
`textPosition` (текст над / під фото), `theme`, `bold` / `italic` / `underline` / `strike`, `fontSize`,
|
|
81
|
+
`textColor`, `cardBackground` (`none` — прозорий), `card` (явна позиція), `hideCallout`, `bends`
|
|
82
|
+
(злами лінії). Фігура: `color`, `strokeStyle`, `fillStyle`, `strokeWidth`.
|
|
83
|
+
|
|
84
|
+
Картки без `card` MCP розкладає так само, як редактор (колонки від правого краю), але картка з фото
|
|
85
|
+
вища — під пропорції фото. Поля кожного типу — у ресурсі `tyts://docs/annotations` (агент читає його сам).
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"image": "./scene.jpg",
|
|
90
|
+
"pins": [
|
|
91
|
+
{ "id": "tech", "type": "rectangle", "x": 130, "y": 360, "width": 220, "height": 130, "text": "Техніка", "photo": "./closeup.jpg" },
|
|
92
|
+
{ "type": "linked", "to": "tech", "text": "Друга виноска до тієї ж рамки" },
|
|
93
|
+
{ "type": "redact", "x": 40, "y": 40, "width": 120, "height": 60, "mode": "pixelate" }
|
|
94
|
+
],
|
|
95
|
+
"crop": { "x": 0, "y": 100, "width": 1600, "height": 900 },
|
|
96
|
+
"stamp": { "image": "./logo.png", "corner": "se" }
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Не вміє лише часткове форматування тексту (жирне окреме слово): стиль задається на всю картку.
|
|
74
101
|
|
|
75
102
|
### `tyts_image_info`
|
|
76
103
|
|
package/dist/document.d.ts
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
|
-
import type { SimplePin } from './schemas.js';
|
|
1
|
+
import type { CropInput, SimplePin, StampInput } from './schemas.js';
|
|
2
2
|
/** Палітра редактора (src/constants.ts PIN_COLORS); дублюється, бо пакет не імпортує код застосунку. */
|
|
3
3
|
export declare const PIN_COLORS: readonly ["#FBD710", "#F0462F", "#FF8D28", "#4FD553", "#00C0E8", "#0088FF", "#E246A1", "#FFFFFF", "#A0522D", "#888888", "#000000"];
|
|
4
4
|
export interface Size {
|
|
5
5
|
w: number;
|
|
6
6
|
h: number;
|
|
7
7
|
}
|
|
8
|
+
/** Завантажена картинка (фото в картці, картинка-обʼєкт, штамп): data URL і пропорції. */
|
|
9
|
+
export interface ImageAsset {
|
|
10
|
+
src: string;
|
|
11
|
+
aspect: number;
|
|
12
|
+
}
|
|
8
13
|
export interface EditorPin {
|
|
9
14
|
id: string;
|
|
10
15
|
label: number;
|
|
11
16
|
color: string;
|
|
12
17
|
description: string;
|
|
13
18
|
descPos: 'above' | 'below';
|
|
14
|
-
image: null;
|
|
15
|
-
imageAspect: null;
|
|
19
|
+
image: string | null;
|
|
20
|
+
imageAspect: number | null;
|
|
16
21
|
anchor: Record<string, unknown>;
|
|
17
22
|
strokeStyle?: 'solid' | 'dashed';
|
|
18
23
|
fillStyle?: 'filled' | 'none';
|
|
24
|
+
strokeWidthScale?: number;
|
|
25
|
+
leaderPoints?: Array<{
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
}>;
|
|
29
|
+
theme?: 'dark' | 'light';
|
|
30
|
+
textBold?: boolean;
|
|
31
|
+
textItalic?: boolean;
|
|
32
|
+
textUnderline?: boolean;
|
|
33
|
+
textStrike?: boolean;
|
|
34
|
+
textFontSize?: number;
|
|
35
|
+
textColor?: string;
|
|
36
|
+
textBackgroundColor?: string | null;
|
|
37
|
+
calloutHidden?: boolean;
|
|
19
38
|
}
|
|
20
39
|
export interface CardPosition {
|
|
21
40
|
x: number;
|
|
@@ -45,7 +64,25 @@ export declare function escapeHtml(text: string): string;
|
|
|
45
64
|
export declare function textToDescription(text: string | undefined): string;
|
|
46
65
|
/** Коефіцієнт «оригінальні пікселі → простір редактора» (редактор масштабує до 1500 px). */
|
|
47
66
|
export declare function scaleFactor(imageSize: Size, sourceImageSize: Size | null): number;
|
|
48
|
-
|
|
67
|
+
/** Усі джерела картинок, які треба завантажити перед `buildDocument`. */
|
|
68
|
+
export declare function imageSourcesOf(pins: readonly SimplePin[], stamp?: StampInput): string[];
|
|
69
|
+
export declare function toAnchor(pin: SimplePin, k: number, assets?: Record<string, ImageAsset>): Record<string, unknown>;
|
|
70
|
+
/** Зсув усієї геометрії піна — для `crop`: координати агента лишаються в оригіналі. */
|
|
71
|
+
export declare function translatePin(pin: SimplePin, dx: number, dy: number): SimplePin;
|
|
72
|
+
/** Кадр у межах картинки (цілі пікселі). */
|
|
73
|
+
export declare function clampCrop(crop: CropInput, source: Size): CropInput;
|
|
74
|
+
/**
|
|
75
|
+
* Номери — як `relabelPinsSequential` у редакторі: нумерація (`numbering`) — своя
|
|
76
|
+
* послідовність, супутник бере номер фігури, решта йде по порядку.
|
|
77
|
+
*/
|
|
78
|
+
export declare function assignLabels(pins: readonly EditorPin[]): EditorPin[];
|
|
79
|
+
/** Прямокутник штампа — як `stampRect` у редакторі (src/utils/stamp.ts). */
|
|
80
|
+
export declare function stampRect(stamp: Pick<StampInput, 'corner' | 'size' | 'marginX' | 'marginY'>, aspect: number, imageSize: Size): {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
};
|
|
49
86
|
export interface BuildDocumentInput {
|
|
50
87
|
backgroundImage: string;
|
|
51
88
|
imageSize: Size;
|
|
@@ -53,16 +90,56 @@ export interface BuildDocumentInput {
|
|
|
53
90
|
pins: SimplePin[];
|
|
54
91
|
/** 'source' — координати в пікселях оригіналу (масштабуються), 'editor' — уже в просторі редактора. */
|
|
55
92
|
coordinates?: 'source' | 'editor';
|
|
93
|
+
/** Завантажені картинки за їхнім джерелом (`photo`, `src` картинки, лого штампа). */
|
|
94
|
+
assets?: Record<string, ImageAsset>;
|
|
95
|
+
stamp?: StampInput;
|
|
96
|
+
/** Глобальна товщина ліній (settings.strokeWidthScale). */
|
|
97
|
+
strokeWidth?: number;
|
|
56
98
|
meta?: EditorDocument['meta'];
|
|
57
99
|
}
|
|
58
100
|
export declare function buildDocument(input: BuildDocumentInput): EditorDocument;
|
|
59
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Позиції карток без явного `card`: колонки від правого краю, зверху вниз,
|
|
103
|
+
* як у редакторі. Але картка з фото вища — під пропорції фото (плюс місце під
|
|
104
|
+
* текст), а приховані виноски місця не займають. `cardSize` — стандартна
|
|
105
|
+
* картка редактора (береться з його власної розкладки).
|
|
106
|
+
*/
|
|
107
|
+
export declare function layoutCards(doc: EditorDocument, cardSize: {
|
|
108
|
+
width: number;
|
|
109
|
+
height: number;
|
|
110
|
+
}, explicit: Record<string, CardPosition>): Record<string, CardPosition>;
|
|
111
|
+
/** Документ без base64-картинок — для відповіді агенту. */
|
|
60
112
|
export declare function summarizeDocument(doc: EditorDocument | null): {
|
|
61
113
|
backgroundImage: string;
|
|
114
|
+
pins: {
|
|
115
|
+
anchor: Record<string, unknown>;
|
|
116
|
+
image: string | null;
|
|
117
|
+
id: string;
|
|
118
|
+
label: number;
|
|
119
|
+
color: string;
|
|
120
|
+
description: string;
|
|
121
|
+
descPos: "above" | "below";
|
|
122
|
+
imageAspect: number | null;
|
|
123
|
+
strokeStyle?: "solid" | "dashed";
|
|
124
|
+
fillStyle?: "filled" | "none";
|
|
125
|
+
strokeWidthScale?: number;
|
|
126
|
+
leaderPoints?: Array<{
|
|
127
|
+
x: number;
|
|
128
|
+
y: number;
|
|
129
|
+
}>;
|
|
130
|
+
theme?: "dark" | "light";
|
|
131
|
+
textBold?: boolean;
|
|
132
|
+
textItalic?: boolean;
|
|
133
|
+
textUnderline?: boolean;
|
|
134
|
+
textStrike?: boolean;
|
|
135
|
+
textFontSize?: number;
|
|
136
|
+
textColor?: string;
|
|
137
|
+
textBackgroundColor?: string | null;
|
|
138
|
+
calloutHidden?: boolean;
|
|
139
|
+
}[];
|
|
62
140
|
version: 1;
|
|
63
141
|
imageSize: Size;
|
|
64
142
|
sourceImageSize: Size | null;
|
|
65
|
-
pins: EditorPin[];
|
|
66
143
|
cardPositions: Record<string, CardPosition>;
|
|
67
144
|
settings?: {
|
|
68
145
|
fontId?: string;
|
package/dist/document.js
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
export const PIN_COLORS = [
|
|
3
3
|
'#FBD710', '#F0462F', '#FF8D28', '#4FD553', '#00C0E8', '#0088FF', '#E246A1', '#FFFFFF', '#A0522D', '#888888', '#000000',
|
|
4
4
|
];
|
|
5
|
+
/** Типові значення редактора (src/constants.ts). */
|
|
6
|
+
const REDACT_DEFAULT_MODE = 'blur';
|
|
7
|
+
const REDACT_STRENGTH_DEFAULT = 0.5;
|
|
8
|
+
const IMAGE_OBJECT_MIN_SIDE = 16;
|
|
9
|
+
const POINT_TEXT_DEFAULT_TEXT_COLOR = '#ffffff';
|
|
10
|
+
const POINT_TEXT_DEFAULT_BG_COLOR = '#000000';
|
|
11
|
+
/** Фігури, до яких можна причепити `linked` (src/utils/linkedCallouts.ts HOSTABLE_ANCHORS). */
|
|
12
|
+
const HOSTABLE = new Set(['point', 'polygon', 'polyline', 'rectangle', 'ellipse', 'arrow', 'compass', 'numbering', 'image']);
|
|
5
13
|
export function escapeHtml(text) {
|
|
6
14
|
return text
|
|
7
15
|
.replace(/&/g, '&')
|
|
@@ -24,17 +32,41 @@ export function scaleFactor(imageSize, sourceImageSize) {
|
|
|
24
32
|
}
|
|
25
33
|
const s = (v, k) => Math.round(v * k * 1000) / 1000;
|
|
26
34
|
const sp = (p, k) => ({ x: s(p.x, k), y: s(p.y, k) });
|
|
27
|
-
|
|
35
|
+
/** Усі джерела картинок, які треба завантажити перед `buildDocument`. */
|
|
36
|
+
export function imageSourcesOf(pins, stamp) {
|
|
37
|
+
const out = new Set();
|
|
38
|
+
for (const pin of pins) {
|
|
39
|
+
if (pin.photo)
|
|
40
|
+
out.add(pin.photo);
|
|
41
|
+
if (pin.type === 'image')
|
|
42
|
+
out.add(pin.src);
|
|
43
|
+
}
|
|
44
|
+
if (stamp)
|
|
45
|
+
out.add(stamp.image);
|
|
46
|
+
return [...out];
|
|
47
|
+
}
|
|
48
|
+
function assetFor(assets, source) {
|
|
49
|
+
const asset = assets[source];
|
|
50
|
+
if (!asset)
|
|
51
|
+
throw new Error(`Image was not loaded: ${source}`);
|
|
52
|
+
return asset;
|
|
53
|
+
}
|
|
54
|
+
export function toAnchor(pin, k, assets = {}) {
|
|
28
55
|
switch (pin.type) {
|
|
29
56
|
case 'point':
|
|
30
57
|
case 'standalone':
|
|
31
58
|
return { type: pin.type, x: s(pin.x, k), y: s(pin.y, k) };
|
|
32
59
|
case 'rectangle':
|
|
60
|
+
return {
|
|
61
|
+
type: 'rectangle',
|
|
62
|
+
x: s(pin.x, k), y: s(pin.y, k), width: s(pin.width, k), height: s(pin.height, k),
|
|
63
|
+
...(pin.rotation !== undefined ? { rotation: pin.rotation } : {}),
|
|
64
|
+
};
|
|
33
65
|
case 'text':
|
|
34
66
|
return {
|
|
35
|
-
type:
|
|
67
|
+
type: 'text',
|
|
36
68
|
x: s(pin.x, k), y: s(pin.y, k), width: s(pin.width, k), height: s(pin.height, k),
|
|
37
|
-
...(
|
|
69
|
+
...(pin.point ? { point: sp(pin.point, k) } : {}),
|
|
38
70
|
};
|
|
39
71
|
case 'ellipse':
|
|
40
72
|
return { type: 'ellipse', cx: s(pin.cx, k), cy: s(pin.cy, k), rx: s(pin.rx, k), ry: s(pin.ry, k), ...(pin.rotation !== undefined ? { rotation: pin.rotation } : {}) };
|
|
@@ -47,39 +79,213 @@ export function toAnchor(pin, k) {
|
|
|
47
79
|
}
|
|
48
80
|
case 'compass':
|
|
49
81
|
return { type: 'compass', cx: s(pin.cx, k), cy: s(pin.cy, k), radius: s(pin.radius, k), ...(pin.rotation !== undefined ? { rotation: pin.rotation } : {}) };
|
|
82
|
+
case 'numbering':
|
|
83
|
+
return { type: 'numbering', start: sp(pin.start, k), end: sp(pin.end, k) };
|
|
84
|
+
case 'image': {
|
|
85
|
+
const asset = assetFor(assets, pin.src);
|
|
86
|
+
if (pin.width === undefined && pin.height === undefined) {
|
|
87
|
+
throw new Error(`Pin "${pin.id ?? 'image'}": give image width or height`);
|
|
88
|
+
}
|
|
89
|
+
// Одна сторона — друга з пропорцій; обидві — як задано (редактор так само дозволяє розтягнути).
|
|
90
|
+
const width = pin.width ?? pin.height * asset.aspect;
|
|
91
|
+
const height = pin.height ?? pin.width / asset.aspect;
|
|
92
|
+
return {
|
|
93
|
+
type: 'image',
|
|
94
|
+
x: s(pin.x, k), y: s(pin.y, k),
|
|
95
|
+
width: Math.max(IMAGE_OBJECT_MIN_SIDE, s(width, k)),
|
|
96
|
+
height: Math.max(IMAGE_OBJECT_MIN_SIDE, s(height, k)),
|
|
97
|
+
src: asset.src,
|
|
98
|
+
aspect: asset.aspect,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
case 'redact':
|
|
102
|
+
return {
|
|
103
|
+
type: 'redact',
|
|
104
|
+
x: s(pin.x, k), y: s(pin.y, k), width: s(pin.width, k), height: s(pin.height, k),
|
|
105
|
+
mode: pin.mode ?? REDACT_DEFAULT_MODE,
|
|
106
|
+
strength: pin.strength ?? REDACT_STRENGTH_DEFAULT,
|
|
107
|
+
};
|
|
108
|
+
case 'linked':
|
|
109
|
+
return { type: 'linked', pinId: pin.to };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Зсув усієї геометрії піна — для `crop`: координати агента лишаються в оригіналі. */
|
|
113
|
+
export function translatePin(pin, dx, dy) {
|
|
114
|
+
const p = (q) => ({ x: q.x + dx, y: q.y + dy });
|
|
115
|
+
const bends = pin.bends ? { bends: pin.bends.map(p) } : {};
|
|
116
|
+
const card = pin.card ? { card: { ...pin.card, x: pin.card.x + dx, y: pin.card.y + dy } } : {};
|
|
117
|
+
const extra = { ...bends, ...card };
|
|
118
|
+
switch (pin.type) {
|
|
119
|
+
case 'point':
|
|
120
|
+
case 'standalone':
|
|
121
|
+
case 'rectangle':
|
|
122
|
+
case 'image':
|
|
123
|
+
case 'redact':
|
|
124
|
+
return { ...pin, ...extra, x: pin.x + dx, y: pin.y + dy };
|
|
125
|
+
case 'text':
|
|
126
|
+
return { ...pin, ...extra, x: pin.x + dx, y: pin.y + dy, ...(pin.point ? { point: p(pin.point) } : {}) };
|
|
127
|
+
case 'ellipse':
|
|
128
|
+
case 'compass':
|
|
129
|
+
return { ...pin, ...extra, cx: pin.cx + dx, cy: pin.cy + dy };
|
|
130
|
+
case 'polygon':
|
|
131
|
+
case 'polyline':
|
|
132
|
+
return { ...pin, ...extra, points: pin.points.map(p) };
|
|
133
|
+
case 'arrow':
|
|
134
|
+
return { ...pin, ...extra, start: p(pin.start), end: p(pin.end), ...(pin.control ? { control: p(pin.control) } : {}) };
|
|
135
|
+
case 'numbering':
|
|
136
|
+
return { ...pin, ...extra, start: p(pin.start), end: p(pin.end) };
|
|
137
|
+
case 'linked':
|
|
138
|
+
return { ...pin, ...extra };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Кадр у межах картинки (цілі пікселі). */
|
|
142
|
+
export function clampCrop(crop, source) {
|
|
143
|
+
const x = Math.max(0, Math.min(Math.floor(crop.x), source.w - 1));
|
|
144
|
+
const y = Math.max(0, Math.min(Math.floor(crop.y), source.h - 1));
|
|
145
|
+
return {
|
|
146
|
+
x, y,
|
|
147
|
+
width: Math.max(1, Math.min(Math.round(crop.width), source.w - x)),
|
|
148
|
+
height: Math.max(1, Math.min(Math.round(crop.height), source.h - y)),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Номери — як `relabelPinsSequential` у редакторі: нумерація (`numbering`) — своя
|
|
153
|
+
* послідовність, супутник бере номер фігури, решта йде по порядку.
|
|
154
|
+
*/
|
|
155
|
+
export function assignLabels(pins) {
|
|
156
|
+
let numIdx = 0;
|
|
157
|
+
let otherIdx = 0;
|
|
158
|
+
const byId = new Map();
|
|
159
|
+
const first = pins.map((p) => {
|
|
160
|
+
if (p.anchor.type === 'linked')
|
|
161
|
+
return p;
|
|
162
|
+
const label = p.anchor.type === 'numbering' ? ++numIdx : ++otherIdx;
|
|
163
|
+
byId.set(p.id, label);
|
|
164
|
+
return { ...p, label };
|
|
165
|
+
});
|
|
166
|
+
return first.map((p) => (p.anchor.type === 'linked'
|
|
167
|
+
? { ...p, label: byId.get(p.anchor.pinId) ?? 1 }
|
|
168
|
+
: p));
|
|
169
|
+
}
|
|
170
|
+
/** Прямокутник штампа — як `stampRect` у редакторі (src/utils/stamp.ts). */
|
|
171
|
+
export function stampRect(stamp, aspect, imageSize) {
|
|
172
|
+
const base = Math.min(imageSize.w, imageSize.h);
|
|
173
|
+
const maxSide = Math.max(IMAGE_OBJECT_MIN_SIDE, (base * stamp.size) / 100);
|
|
174
|
+
const marginX = (base * stamp.marginX) / 100;
|
|
175
|
+
const marginY = (base * stamp.marginY) / 100;
|
|
176
|
+
const a = Number.isFinite(aspect) && aspect > 0 ? aspect : 1;
|
|
177
|
+
const width = a >= 1 ? maxSide : maxSide * a;
|
|
178
|
+
const height = a >= 1 ? maxSide / a : maxSide;
|
|
179
|
+
const left = stamp.corner === 'nw' || stamp.corner === 'sw';
|
|
180
|
+
const top = stamp.corner === 'nw' || stamp.corner === 'ne';
|
|
181
|
+
return {
|
|
182
|
+
x: left ? marginX : Math.max(marginX, imageSize.w - marginX - width),
|
|
183
|
+
y: top ? marginY : Math.max(marginY, imageSize.h - marginY - height),
|
|
184
|
+
width,
|
|
185
|
+
height,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function editorPinFor(pin, index, k, assets) {
|
|
189
|
+
const id = pin.id ?? `pin-${index + 1}`;
|
|
190
|
+
const photo = pin.photo ? assetFor(assets, pin.photo) : null;
|
|
191
|
+
const out = {
|
|
192
|
+
id,
|
|
193
|
+
label: 1,
|
|
194
|
+
color: pin.color ?? PIN_COLORS[index % PIN_COLORS.length],
|
|
195
|
+
description: textToDescription(pin.text),
|
|
196
|
+
descPos: pin.textPosition ?? 'below',
|
|
197
|
+
image: photo ? photo.src : null,
|
|
198
|
+
imageAspect: photo ? photo.aspect : null,
|
|
199
|
+
anchor: toAnchor(pin, k, assets),
|
|
200
|
+
};
|
|
201
|
+
if (pin.strokeStyle)
|
|
202
|
+
out.strokeStyle = pin.strokeStyle;
|
|
203
|
+
if (pin.fillStyle)
|
|
204
|
+
out.fillStyle = pin.fillStyle;
|
|
205
|
+
if (pin.strokeWidth !== undefined)
|
|
206
|
+
out.strokeWidthScale = pin.strokeWidth;
|
|
207
|
+
if (pin.bends?.length)
|
|
208
|
+
out.leaderPoints = pin.bends.map((p) => sp(p, k));
|
|
209
|
+
if (pin.theme)
|
|
210
|
+
out.theme = pin.theme;
|
|
211
|
+
if (pin.bold !== undefined)
|
|
212
|
+
out.textBold = pin.bold;
|
|
213
|
+
if (pin.italic !== undefined)
|
|
214
|
+
out.textItalic = pin.italic;
|
|
215
|
+
if (pin.underline !== undefined)
|
|
216
|
+
out.textUnderline = pin.underline;
|
|
217
|
+
if (pin.strike !== undefined)
|
|
218
|
+
out.textStrike = pin.strike;
|
|
219
|
+
if (pin.fontSize !== undefined)
|
|
220
|
+
out.textFontSize = pin.fontSize;
|
|
221
|
+
// «Точка з текстом» у редакторі одразу біла на чорному — тримаємо той самий вигляд.
|
|
222
|
+
const isPointText = pin.type === 'text' && !!pin.point;
|
|
223
|
+
const textColor = pin.textColor ?? (isPointText ? POINT_TEXT_DEFAULT_TEXT_COLOR : undefined);
|
|
224
|
+
if (textColor)
|
|
225
|
+
out.textColor = textColor;
|
|
226
|
+
if (pin.cardBackground !== undefined) {
|
|
227
|
+
out.textBackgroundColor = pin.cardBackground.toLowerCase() === 'none' ? null : pin.cardBackground;
|
|
228
|
+
}
|
|
229
|
+
else if (isPointText) {
|
|
230
|
+
out.textBackgroundColor = POINT_TEXT_DEFAULT_BG_COLOR;
|
|
50
231
|
}
|
|
232
|
+
// Картинка, компас, нумерація й замальовка в редакторі з'являються без виноски — так само тут.
|
|
233
|
+
const hiddenByDefault = pin.type === 'image' || pin.type === 'compass' || pin.type === 'redact' || pin.type === 'numbering';
|
|
234
|
+
const hidden = pin.hideCallout ?? (hiddenByDefault && !pin.text && !pin.photo);
|
|
235
|
+
if (hidden)
|
|
236
|
+
out.calloutHidden = true;
|
|
237
|
+
return out;
|
|
51
238
|
}
|
|
52
239
|
export function buildDocument(input) {
|
|
53
240
|
const k = input.coordinates === 'editor' ? 1 : scaleFactor(input.imageSize, input.sourceImageSize);
|
|
241
|
+
const assets = input.assets ?? {};
|
|
54
242
|
const cardPositions = {};
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
const editorPin = {
|
|
58
|
-
id,
|
|
59
|
-
label: index + 1,
|
|
60
|
-
color: pin.color ?? PIN_COLORS[index % PIN_COLORS.length],
|
|
61
|
-
description: textToDescription(pin.text),
|
|
62
|
-
descPos: 'below',
|
|
63
|
-
image: null,
|
|
64
|
-
imageAspect: null,
|
|
65
|
-
anchor: toAnchor(pin, k),
|
|
66
|
-
};
|
|
67
|
-
if (pin.strokeStyle)
|
|
68
|
-
editorPin.strokeStyle = pin.strokeStyle;
|
|
69
|
-
if (pin.fillStyle)
|
|
70
|
-
editorPin.fillStyle = pin.fillStyle;
|
|
243
|
+
let pins = input.pins.map((pin, index) => {
|
|
244
|
+
const editorPin = editorPinFor(pin, index, k, assets);
|
|
71
245
|
if (pin.card) {
|
|
72
|
-
cardPositions[id] = { x: s(pin.card.x, k), y: s(pin.card.y, k), width: s(pin.card.width, k), height: s(pin.card.height, k) };
|
|
246
|
+
cardPositions[editorPin.id] = { x: s(pin.card.x, k), y: s(pin.card.y, k), width: s(pin.card.width, k), height: s(pin.card.height, k) };
|
|
73
247
|
}
|
|
74
248
|
return editorPin;
|
|
75
249
|
});
|
|
76
|
-
const
|
|
250
|
+
const byId = new Map();
|
|
77
251
|
for (const pin of pins) {
|
|
78
|
-
if (
|
|
252
|
+
if (byId.has(pin.id))
|
|
79
253
|
throw new Error(`Duplicate pin id: ${pin.id}`);
|
|
80
|
-
|
|
254
|
+
byId.set(pin.id, pin);
|
|
81
255
|
}
|
|
82
|
-
|
|
256
|
+
pins = pins.map((pin, index) => {
|
|
257
|
+
if (pin.anchor.type !== 'linked')
|
|
258
|
+
return pin;
|
|
259
|
+
const host = byId.get(pin.anchor.pinId);
|
|
260
|
+
if (!host)
|
|
261
|
+
throw new Error(`Pin "${pin.id}": linked "to" refers to unknown id "${String(pin.anchor.pinId)}"`);
|
|
262
|
+
if (!HOSTABLE.has(host.anchor.type)) {
|
|
263
|
+
throw new Error(`Pin "${pin.id}": cannot link to "${host.id}" of type ${String(host.anchor.type)} (only shapes: ${[...HOSTABLE].join(', ')})`);
|
|
264
|
+
}
|
|
265
|
+
// Як кнопка «+» у редакторі: супутник того ж кольору, що й фігура.
|
|
266
|
+
return input.pins[index].color ? pin : { ...pin, color: host.color };
|
|
267
|
+
});
|
|
268
|
+
// Штамп — останнім: картинки теж займають номер у редакторі, хай не зсуває номери виносок.
|
|
269
|
+
if (input.stamp) {
|
|
270
|
+
const logo = assetFor(assets, input.stamp.image);
|
|
271
|
+
const rect = stampRect(input.stamp, logo.aspect, input.imageSize);
|
|
272
|
+
let id = 'stamp';
|
|
273
|
+
for (let n = 2; byId.has(id); n += 1)
|
|
274
|
+
id = `stamp-${n}`;
|
|
275
|
+
pins.push({
|
|
276
|
+
id,
|
|
277
|
+
label: 1,
|
|
278
|
+
color: PIN_COLORS[0],
|
|
279
|
+
description: '',
|
|
280
|
+
descPos: 'below',
|
|
281
|
+
image: null,
|
|
282
|
+
imageAspect: null,
|
|
283
|
+
anchor: { type: 'image', ...rect, src: logo.src, aspect: logo.aspect, stamp: true },
|
|
284
|
+
calloutHidden: true,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
pins = assignLabels(pins);
|
|
288
|
+
const doc = {
|
|
83
289
|
version: 1,
|
|
84
290
|
backgroundImage: input.backgroundImage,
|
|
85
291
|
imageSize: input.imageSize,
|
|
@@ -88,14 +294,58 @@ export function buildDocument(input) {
|
|
|
88
294
|
cardPositions,
|
|
89
295
|
meta: input.meta,
|
|
90
296
|
};
|
|
297
|
+
if (input.strokeWidth !== undefined)
|
|
298
|
+
doc.settings = { strokeWidthScale: input.strokeWidth };
|
|
299
|
+
return doc;
|
|
300
|
+
}
|
|
301
|
+
/** Розкладка карток — як `computeCardPositions` у редакторі (src/utils/perimeter.ts). */
|
|
302
|
+
const EDGE_PAD = 20;
|
|
303
|
+
const V_GAP = 12;
|
|
304
|
+
const H_GAP = 12;
|
|
305
|
+
/** Чи малює редактор картку цього піна (текстовий блок і приховані — без картки). */
|
|
306
|
+
function hasCard(pin) {
|
|
307
|
+
return pin.anchor.type !== 'text' && pin.anchor.type !== 'redact' && !pin.calloutHidden;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Позиції карток без явного `card`: колонки від правого краю, зверху вниз,
|
|
311
|
+
* як у редакторі. Але картка з фото вища — під пропорції фото (плюс місце під
|
|
312
|
+
* текст), а приховані виноски місця не займають. `cardSize` — стандартна
|
|
313
|
+
* картка редактора (береться з його власної розкладки).
|
|
314
|
+
*/
|
|
315
|
+
export function layoutCards(doc, cardSize, explicit) {
|
|
316
|
+
const { w: W, h: H } = doc.imageSize;
|
|
317
|
+
const maxH = Math.max(cardSize.height, H - 2 * EDGE_PAD);
|
|
318
|
+
const out = { ...explicit };
|
|
319
|
+
let col = 0;
|
|
320
|
+
let y = EDGE_PAD;
|
|
321
|
+
for (const pin of doc.pins) {
|
|
322
|
+
if (!hasCard(pin) || explicit[pin.id])
|
|
323
|
+
continue;
|
|
324
|
+
const photoH = pin.image && pin.imageAspect ? cardSize.width / pin.imageAspect : 0;
|
|
325
|
+
const height = Math.min(maxH, photoH > 0 ? Math.round(photoH + (pin.description ? cardSize.height : 0)) : cardSize.height);
|
|
326
|
+
if (y > EDGE_PAD && y + height > H - EDGE_PAD) {
|
|
327
|
+
col += 1;
|
|
328
|
+
y = EDGE_PAD;
|
|
329
|
+
}
|
|
330
|
+
const x = Math.max(EDGE_PAD, Math.min(W - EDGE_PAD - cardSize.width - col * (cardSize.width + H_GAP), W - cardSize.width - EDGE_PAD));
|
|
331
|
+
out[pin.id] = { x, y: Math.max(EDGE_PAD, Math.min(y, H - height - EDGE_PAD)), width: cardSize.width, height };
|
|
332
|
+
y += height + V_GAP;
|
|
333
|
+
}
|
|
334
|
+
return out;
|
|
91
335
|
}
|
|
92
|
-
/** Документ без base64
|
|
336
|
+
/** Документ без base64-картинок — для відповіді агенту. */
|
|
93
337
|
export function summarizeDocument(doc) {
|
|
94
338
|
if (!doc)
|
|
95
339
|
return null;
|
|
340
|
+
const kb = (dataUrl) => `<data URL, ${Math.round(dataUrl.length * 0.75 / 1024)} KB>`;
|
|
96
341
|
return {
|
|
97
342
|
...doc,
|
|
98
|
-
backgroundImage:
|
|
343
|
+
backgroundImage: kb(doc.backgroundImage),
|
|
344
|
+
pins: doc.pins.map((pin) => ({
|
|
345
|
+
...pin,
|
|
346
|
+
...(pin.image ? { image: kb(pin.image) } : {}),
|
|
347
|
+
...(typeof pin.anchor.src === 'string' ? { anchor: { ...pin.anchor, src: kb(pin.anchor.src) } } : {}),
|
|
348
|
+
})),
|
|
99
349
|
};
|
|
100
350
|
}
|
|
101
351
|
//# sourceMappingURL=document.js.map
|
package/dist/document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"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"}
|