@extenshi/mcp 0.18.0 → 0.20.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 +5 -3
- package/dist/bff.d.ts +10 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +1 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +23 -23
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +7 -3
- package/dist/development-guide.js.map +1 -1
- package/dist/pin-guide-kit.d.ts +94 -0
- package/dist/pin-guide-kit.d.ts.map +1 -0
- package/dist/pin-guide-kit.js +341 -0
- package/dist/pin-guide-kit.js.map +1 -0
- package/dist/pin-guide-strings.d.ts +67 -0
- package/dist/pin-guide-strings.d.ts.map +1 -0
- package/dist/pin-guide-strings.js +349 -0
- package/dist/pin-guide-strings.js.map +1 -0
- package/dist/pin-guide-tool.d.ts +32 -0
- package/dist/pin-guide-tool.d.ts.map +1 -0
- package/dist/pin-guide-tool.js +132 -0
- package/dist/pin-guide-tool.js.map +1 -0
- package/dist/pin-guide.d.ts +102 -0
- package/dist/pin-guide.d.ts.map +1 -0
- package/dist/pin-guide.js +448 -0
- package/dist/pin-guide.js.map +1 -0
- package/dist/tools.d.ts +2 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +107 -10
- package/dist/tools.js.map +1 -1
- package/dist/uninstall-form-tools.d.ts +1 -0
- package/dist/uninstall-form-tools.d.ts.map +1 -1
- package/dist/uninstall-form-tools.js +33 -0
- package/dist/uninstall-form-tools.js.map +1 -1
- package/dist/welcome-agent-brief.d.ts.map +1 -1
- package/dist/welcome-agent-brief.js +5 -0
- package/dist/welcome-agent-brief.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pin guide — the templated "find the extension and pin it to the toolbar"
|
|
3
|
+
* illustration sequence.
|
|
4
|
+
*
|
|
5
|
+
* This is the single highest-value thing a welcome page can teach: a new user
|
|
6
|
+
* who never finds the toolbar button churns silently. The steps are the same
|
|
7
|
+
* for every Chromium extension on earth, so they are TEMPLATES, not something
|
|
8
|
+
* an author (or a model) should redraw each time — the only per-extension part
|
|
9
|
+
* is the icon, which rides in as an overlay.
|
|
10
|
+
*
|
|
11
|
+
* Output is `WelcomeBlock[]`, i.e. the same block model the constructor, the
|
|
12
|
+
* renderer and the agent brief already speak. That is what lets this generator
|
|
13
|
+
* be BOTH a standalone tool and a section inside the welcome-page builder
|
|
14
|
+
* without a second implementation.
|
|
15
|
+
*
|
|
16
|
+
* The SVG is written to survive `scrubSvgMarkup` untouched: flat shapes, no
|
|
17
|
+
* script/style/animation, no external or `data:` references. Anything that
|
|
18
|
+
* would be stripped is deliberately absent rather than "sanitized later".
|
|
19
|
+
*
|
|
20
|
+
* Fidelity matters here more than it looks. The guide's whole job is that a
|
|
21
|
+
* user recognises the drawing as their own toolbar, so the browser chrome is
|
|
22
|
+
* modelled (tab strip, back/forward/reload/home, omnibox with lock and star,
|
|
23
|
+
* app menu) and the extensions button uses the real jigsaw glyph rather than a
|
|
24
|
+
* hand-rolled approximation. The per-row control differs by browser and is
|
|
25
|
+
* drawn as what that browser actually shows: a pushpin in Chrome, an eye in
|
|
26
|
+
* Edge, a ⋯ overflow menu in Firefox.
|
|
27
|
+
*
|
|
28
|
+
* SELF-CONTAINED ON PURPOSE — its only import is the sibling captions file, so
|
|
29
|
+
* the pair (plus pin-guide-kit.ts) can be copied into the published `@extenshi/mcp`
|
|
30
|
+
* and `@extenshi/cli` packages. The copy procedure and the drift
|
|
31
|
+
* tests are described at the top of ./pin-guide-strings.ts. The block types
|
|
32
|
+
* below are structural stand-ins for `WelcomeBlock` (shared-types/onboarding-page.ts):
|
|
33
|
+
* every value this file returns is assignable to it, which the welcome builder
|
|
34
|
+
* and the BFF tests rely on.
|
|
35
|
+
*/
|
|
36
|
+
import type { PinGuideLocale } from './pin-guide-strings.js';
|
|
37
|
+
export type PinGuideBrowser = 'chrome' | 'edge' | 'firefox';
|
|
38
|
+
/** Same value as WELCOME_DEFAULT_ACCENT (shared-types/welcome-agent-brief.ts), pinned by a test. */
|
|
39
|
+
export declare const PIN_GUIDE_DEFAULT_ACCENT = "#5e5ce6";
|
|
40
|
+
/** The extension's icon drawn over an illustration, in percent of the frame. */
|
|
41
|
+
export interface PinGuideIconOverlay {
|
|
42
|
+
url: string;
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
size: number;
|
|
46
|
+
}
|
|
47
|
+
/** A numbered badge, in percent of the frame. */
|
|
48
|
+
export interface PinGuideMarker {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
kind: 'number';
|
|
52
|
+
n: number;
|
|
53
|
+
label: null;
|
|
54
|
+
}
|
|
55
|
+
export interface PinGuideBlock {
|
|
56
|
+
kind: 'step';
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
body: string | null;
|
|
60
|
+
media: {
|
|
61
|
+
source: 'svg';
|
|
62
|
+
svg: string;
|
|
63
|
+
alt: string;
|
|
64
|
+
annotations: PinGuideMarker[];
|
|
65
|
+
icon: PinGuideIconOverlay | null;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export declare const PIN_GUIDE_BROWSER_LABELS: Record<PinGuideBrowser, string>;
|
|
69
|
+
export interface PinGuideInput {
|
|
70
|
+
extensionName: string;
|
|
71
|
+
browser: PinGuideBrowser;
|
|
72
|
+
/** Accent used for highlight rings, matching the page's accent. */
|
|
73
|
+
accentColor: string;
|
|
74
|
+
/**
|
|
75
|
+
* The extension's icon. When absent the illustration falls back to a neutral
|
|
76
|
+
* placeholder tile — still useful, just less recognisable.
|
|
77
|
+
*/
|
|
78
|
+
iconUrl?: string | null;
|
|
79
|
+
/** Light/dark chrome, so the mock matches the page it sits on. */
|
|
80
|
+
theme?: 'light' | 'dark';
|
|
81
|
+
/**
|
|
82
|
+
* Caption language. Unknown tags fall back to English, which is also the
|
|
83
|
+
* default — and the English output is what hosted pages have always shown.
|
|
84
|
+
*/
|
|
85
|
+
locale?: PinGuideLocale | string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build the four-step pin sequence.
|
|
89
|
+
*
|
|
90
|
+
* Step 3 (the pin toggle) is the one users actually miss, so it gets its own
|
|
91
|
+
* frame rather than being folded into step 2 — the whole point of the guide is
|
|
92
|
+
* that clicking the row is not the same as pinning it — and that frame is a
|
|
93
|
+
* zoom of the row, because at toolbar scale the control is 18px wide and the
|
|
94
|
+
* numbered badge that points at it is larger than the thing it points at.
|
|
95
|
+
*
|
|
96
|
+
* Badges are deliberately placed OFF the target with a short accent leader
|
|
97
|
+
* running back to the ring. The badge is a fixed-pixel HTML overlay while the
|
|
98
|
+
* illustration scales with the column, so a badge centred on its target covers
|
|
99
|
+
* it outright at every width the preview is ever rendered at.
|
|
100
|
+
*/
|
|
101
|
+
export declare function buildPinGuideBlocks(input: PinGuideInput): PinGuideBlock[];
|
|
102
|
+
//# sourceMappingURL=pin-guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pin-guide.d.ts","sourceRoot":"","sources":["../src/pin-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3D,oGAAoG;AACpG,eAAO,MAAM,wBAAwB,YAAY,CAAA;AAEjD,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC9B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,IAAI,EAAE,QAAQ,CAAA;IACd,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,IAAI,CAAA;CACX;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE;QACN,MAAM,EAAE,KAAK,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,WAAW,EAAE,cAAc,EAAE,CAAA;QAC7B,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAChC,CAAA;CACD;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAIpE,CAAA;AAED,MAAM,WAAW,aAAa;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,eAAe,CAAA;IACxB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;CAChC;AAsWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CA4IzE"}
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pin guide — the templated "find the extension and pin it to the toolbar"
|
|
3
|
+
* illustration sequence.
|
|
4
|
+
*
|
|
5
|
+
* This is the single highest-value thing a welcome page can teach: a new user
|
|
6
|
+
* who never finds the toolbar button churns silently. The steps are the same
|
|
7
|
+
* for every Chromium extension on earth, so they are TEMPLATES, not something
|
|
8
|
+
* an author (or a model) should redraw each time — the only per-extension part
|
|
9
|
+
* is the icon, which rides in as an overlay.
|
|
10
|
+
*
|
|
11
|
+
* Output is `WelcomeBlock[]`, i.e. the same block model the constructor, the
|
|
12
|
+
* renderer and the agent brief already speak. That is what lets this generator
|
|
13
|
+
* be BOTH a standalone tool and a section inside the welcome-page builder
|
|
14
|
+
* without a second implementation.
|
|
15
|
+
*
|
|
16
|
+
* The SVG is written to survive `scrubSvgMarkup` untouched: flat shapes, no
|
|
17
|
+
* script/style/animation, no external or `data:` references. Anything that
|
|
18
|
+
* would be stripped is deliberately absent rather than "sanitized later".
|
|
19
|
+
*
|
|
20
|
+
* Fidelity matters here more than it looks. The guide's whole job is that a
|
|
21
|
+
* user recognises the drawing as their own toolbar, so the browser chrome is
|
|
22
|
+
* modelled (tab strip, back/forward/reload/home, omnibox with lock and star,
|
|
23
|
+
* app menu) and the extensions button uses the real jigsaw glyph rather than a
|
|
24
|
+
* hand-rolled approximation. The per-row control differs by browser and is
|
|
25
|
+
* drawn as what that browser actually shows: a pushpin in Chrome, an eye in
|
|
26
|
+
* Edge, a ⋯ overflow menu in Firefox.
|
|
27
|
+
*
|
|
28
|
+
* SELF-CONTAINED ON PURPOSE — its only import is the sibling captions file, so
|
|
29
|
+
* the pair (plus pin-guide-kit.ts) can be copied into the published `@extenshi/mcp`
|
|
30
|
+
* and `@extenshi/cli` packages. The copy procedure and the drift
|
|
31
|
+
* tests are described at the top of ./pin-guide-strings.ts. The block types
|
|
32
|
+
* below are structural stand-ins for `WelcomeBlock` (shared-types/onboarding-page.ts):
|
|
33
|
+
* every value this file returns is assignable to it, which the welcome builder
|
|
34
|
+
* and the BFF tests rely on.
|
|
35
|
+
*/
|
|
36
|
+
import { PIN_GUIDE_STRINGS, pinGuideLocale, pinGuideText } from './pin-guide-strings.js';
|
|
37
|
+
/** Same value as WELCOME_DEFAULT_ACCENT (shared-types/welcome-agent-brief.ts), pinned by a test. */
|
|
38
|
+
export const PIN_GUIDE_DEFAULT_ACCENT = '#5e5ce6';
|
|
39
|
+
export const PIN_GUIDE_BROWSER_LABELS = {
|
|
40
|
+
chrome: 'Chrome',
|
|
41
|
+
edge: 'Edge',
|
|
42
|
+
firefox: 'Firefox',
|
|
43
|
+
};
|
|
44
|
+
const VIEW_W = 640;
|
|
45
|
+
/**
|
|
46
|
+
* Frames are as short as their content allows rather than a single tall canvas:
|
|
47
|
+
* a toolbar-only step padded out to the height of the open-menu step is mostly
|
|
48
|
+
* empty page, which reads as a rendering bug rather than as breathing room.
|
|
49
|
+
*/
|
|
50
|
+
const H_TOOLBAR = 168;
|
|
51
|
+
const H_MENU = 240;
|
|
52
|
+
/** Toolbar band: everything above is the tab strip, everything below is the page. */
|
|
53
|
+
const TOOLBAR_Y = 38;
|
|
54
|
+
const TOOLBAR_H = 44;
|
|
55
|
+
const CONTENT_Y = TOOLBAR_Y + TOOLBAR_H;
|
|
56
|
+
const ICON_CY = TOOLBAR_Y + TOOLBAR_H / 2;
|
|
57
|
+
function palette(theme) {
|
|
58
|
+
return theme === 'dark'
|
|
59
|
+
? {
|
|
60
|
+
chromeBg: '#202124',
|
|
61
|
+
toolbarBg: '#292a2d',
|
|
62
|
+
urlBg: '#35363a',
|
|
63
|
+
stroke: '#585b60',
|
|
64
|
+
text: '#c4c7cb',
|
|
65
|
+
pageBg: '#1b1c1f',
|
|
66
|
+
panelBg: '#303134',
|
|
67
|
+
rowBg: '#3c3d40',
|
|
68
|
+
}
|
|
69
|
+
: {
|
|
70
|
+
chromeBg: '#dee1e6',
|
|
71
|
+
toolbarBg: '#ffffff',
|
|
72
|
+
urlBg: '#f1f3f4',
|
|
73
|
+
stroke: '#bfc4cc',
|
|
74
|
+
text: '#5f6368',
|
|
75
|
+
pageBg: '#f8f9fa',
|
|
76
|
+
panelBg: '#ffffff',
|
|
77
|
+
rowBg: '#eef1f5',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const BROWSER_UI = {
|
|
81
|
+
chrome: { toggle: 'pin', appMenu: 'kebab' },
|
|
82
|
+
edge: { toggle: 'eye', appMenu: 'ellipsis' },
|
|
83
|
+
firefox: { toggle: 'more', appMenu: 'hamburger' },
|
|
84
|
+
};
|
|
85
|
+
/** Escape text that goes inside an SVG text node. */
|
|
86
|
+
function esc(s) {
|
|
87
|
+
return s
|
|
88
|
+
.replaceAll('&', '&')
|
|
89
|
+
.replaceAll('<', '<')
|
|
90
|
+
.replaceAll('>', '>')
|
|
91
|
+
.replaceAll('"', '"')
|
|
92
|
+
.replaceAll("'", ''');
|
|
93
|
+
}
|
|
94
|
+
/** Truncate a display name so it cannot overflow the mocked menu row. */
|
|
95
|
+
function clip(s, max = 22) {
|
|
96
|
+
const t = s.trim();
|
|
97
|
+
return t.length <= max ? t : `${t.slice(0, max - 1)}…`;
|
|
98
|
+
}
|
|
99
|
+
function num(n) {
|
|
100
|
+
return String(Math.round(n * 1000) / 1000);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Material-style 24×24 glyphs, placed by translate+scale.
|
|
104
|
+
*
|
|
105
|
+
* These are the real icon outlines the browsers ship, not approximations: a
|
|
106
|
+
* blocky stand-in reads as "some square button" and the user never matches it
|
|
107
|
+
* against their own toolbar, which defeats the illustration.
|
|
108
|
+
*/
|
|
109
|
+
const GLYPH_24 = {
|
|
110
|
+
// The jigsaw "extension" piece — Chrome, Edge and Firefox all use this shape
|
|
111
|
+
// for the extensions button.
|
|
112
|
+
puzzle: '<path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-2 .9-2 2v3.8h1.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7s2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/>',
|
|
113
|
+
// Pushpin, as shown beside each row in the Chrome extensions panel.
|
|
114
|
+
pin: '<path d="M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z"/>',
|
|
115
|
+
// Eye — Edge's "Show in toolbar" toggle.
|
|
116
|
+
eye: '<path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>',
|
|
117
|
+
// Horizontal ⋯ — Firefox's per-extension overflow button.
|
|
118
|
+
more: '<circle cx="5" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="19" cy="12" r="2"/>',
|
|
119
|
+
};
|
|
120
|
+
function glyph(inner, x, y, size, fill) {
|
|
121
|
+
return `<g transform="translate(${num(x)} ${num(y)}) scale(${num(size / 24)})" fill="${fill}">${inner}</g>`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Draw a callout: the accent ring on the target, plus the leader towards its
|
|
125
|
+
* badge. Emitted together so a frame can never carry one without the other.
|
|
126
|
+
*
|
|
127
|
+
* The ring comes first in the markup, which is also the order the tests look for
|
|
128
|
+
* it: the badge-outside-ring invariant reads the first accent-stroked rect.
|
|
129
|
+
*/
|
|
130
|
+
function drawCallout(c, accent) {
|
|
131
|
+
const { box, leader } = c;
|
|
132
|
+
const rx = Math.min(box.w, box.h) / 2;
|
|
133
|
+
return (`<rect x="${num(box.x)}" y="${num(box.y)}" width="${num(box.w)}" height="${num(box.h)}" rx="${num(rx)}" fill="none" stroke="${accent}" stroke-width="3"/>` +
|
|
134
|
+
`<path d="M ${num(leader[0])} ${num(leader[1])} L ${num(leader[2])} ${num(leader[3])}" stroke="${accent}" stroke-width="3" stroke-linecap="round"/>`);
|
|
135
|
+
}
|
|
136
|
+
// ── Toolbar geometry ──────────────────────────────────────────────────────────
|
|
137
|
+
/** The extensions (puzzle) button. */
|
|
138
|
+
const MENU_BTN = { x: 526, y: 48, w: 28, h: 24 };
|
|
139
|
+
/** Where a pinned extension icon lands: between the omnibox and the puzzle. */
|
|
140
|
+
const PINNED = { x: 500, y: 50, size: 20 };
|
|
141
|
+
/** The dropped-down extensions panel. */
|
|
142
|
+
const PANEL = { x: 364, y: 92, w: 260, h: 130 };
|
|
143
|
+
/** Our extension's row inside that panel, and the two controls on it. */
|
|
144
|
+
const ROW = { x: 374, y: 120, w: 240, h: 34, rx: 8 };
|
|
145
|
+
const ICON_IN_ROW = { x: 384, y: 128, size: 18 };
|
|
146
|
+
const TOGGLE = { x: 586, y: 128, size: 18 };
|
|
147
|
+
/** The greyed filler row, its contents, and the panel's header/footer bars. */
|
|
148
|
+
const ROW_2 = { x: 374, y: 160, w: 240, h: 34, rx: 8 };
|
|
149
|
+
const ICON_IN_ROW_2 = { x: 384, y: 168, size: 18 };
|
|
150
|
+
const TOGGLE_2 = { x: 586, y: 168, size: 18 };
|
|
151
|
+
const ROW_2_TEXT = { x: 410, y: 173, w: 86, h: 6 };
|
|
152
|
+
const PANEL_HEADER = { x: 380, y: 104, w: 72, h: 7 };
|
|
153
|
+
const PANEL_FOOTER = { x: 384, y: 204, w: 104, h: 6 };
|
|
154
|
+
// ── Step-3 zoom geometry ──────────────────────────────────────────────────────
|
|
155
|
+
// Step 3 zooms the row so the control it is about is not an 18px speck. Named
|
|
156
|
+
// out in full, like the toolbar above: the frame has to stay internally
|
|
157
|
+
// consistent when any one of these moves.
|
|
158
|
+
const ZOOM_PANEL = { x: 90, y: 24, w: 460, h: 192 };
|
|
159
|
+
const ZOOM_HEADER = { x: 118, y: 50, w: 120, h: 10 };
|
|
160
|
+
const ZOOM_ROW = { x: 106, y: 76, w: 428, h: 58, rx: 12 };
|
|
161
|
+
const ZOOM_ICON = { x: 126, y: 90, size: 30 };
|
|
162
|
+
const ZOOM_TOGGLE = { x: 484, y: 90, size: 30 };
|
|
163
|
+
const ZOOM_ROW_2 = { x: 106, y: 146, w: 428, h: 48, rx: 12 };
|
|
164
|
+
const ZOOM_ICON_2 = { x: 126, y: 158, size: 24 };
|
|
165
|
+
const ZOOM_TOGGLE_2 = { x: 487, y: 158, size: 24 };
|
|
166
|
+
const ZOOM_ROW_2_TEXT = { x: 166, y: 168, w: 120, h: 8 };
|
|
167
|
+
/** Where the extension's name sits in each row. */
|
|
168
|
+
const ROW_TEXT_ANCHOR = { x: 410, y: 141, size: 13 };
|
|
169
|
+
const ZOOM_TEXT_ANCHOR = { x: 172, y: 113, size: 20 };
|
|
170
|
+
// ── Callouts: the ring, its leader, and where the badge lands ─────────────────
|
|
171
|
+
/**
|
|
172
|
+
* A callout is one padded box around a click target. The drawn ring, the accent
|
|
173
|
+
* leader and the numbered badge's anchor are all derived from that single box,
|
|
174
|
+
* so nudging a target moves all three together — the badge cannot drift back
|
|
175
|
+
* onto the control, and it cannot drift so far that it points at nothing.
|
|
176
|
+
*
|
|
177
|
+
* Offsets are shared by every frame. They were per-frame before, which is only
|
|
178
|
+
* why the badge anchors used to be unexplainable literals: the value fell out of
|
|
179
|
+
* whatever ring padding that step happened to use.
|
|
180
|
+
*/
|
|
181
|
+
const LEADER_GAP = 4;
|
|
182
|
+
const LEADER_LEN = 12;
|
|
183
|
+
/** Clearance from the leader's end to the badge's CENTRE. The badge is a
|
|
184
|
+
* fixed-pixel overlay ~14px in radius, so this has to leave room for it. */
|
|
185
|
+
const BADGE_GAP = 20;
|
|
186
|
+
/**
|
|
187
|
+
* Build a callout around a target box.
|
|
188
|
+
*
|
|
189
|
+
* `len` overrides the leader length for the one frame (step 3's zoom) drawn at a
|
|
190
|
+
* different scale, where the shared length reads as a stub.
|
|
191
|
+
*/
|
|
192
|
+
function callout(target, dir, pad, len = LEADER_LEN) {
|
|
193
|
+
const box = { x: target.x - pad, y: target.y - pad, w: target.w + pad * 2, h: target.h + pad * 2 };
|
|
194
|
+
const cx = box.x + box.w / 2;
|
|
195
|
+
const cy = box.y + box.h / 2;
|
|
196
|
+
if (dir === 'down') {
|
|
197
|
+
const from = box.y + box.h + LEADER_GAP;
|
|
198
|
+
const to = from + len;
|
|
199
|
+
return { box, leader: [cx, from, cx, to], badge: [cx, to + BADGE_GAP] };
|
|
200
|
+
}
|
|
201
|
+
if (dir === 'right') {
|
|
202
|
+
const from = box.x + box.w + LEADER_GAP;
|
|
203
|
+
const to = from + len;
|
|
204
|
+
return { box, leader: [from, cy, to, cy], badge: [to + BADGE_GAP, cy] };
|
|
205
|
+
}
|
|
206
|
+
const from = box.x - LEADER_GAP;
|
|
207
|
+
const to = from - len;
|
|
208
|
+
return { box, leader: [from, cy, to, cy], badge: [to - BADGE_GAP, cy] };
|
|
209
|
+
}
|
|
210
|
+
/** A square target box, for the icon-sized controls. */
|
|
211
|
+
function square(t) {
|
|
212
|
+
return { x: t.x, y: t.y, w: t.size, h: t.size };
|
|
213
|
+
}
|
|
214
|
+
function appMenu(kind, p) {
|
|
215
|
+
const cx = 604;
|
|
216
|
+
if (kind === 'hamburger') {
|
|
217
|
+
return `<path d="M ${cx - 7} ${ICON_CY - 5} h 14 M ${cx - 7} ${ICON_CY} h 14 M ${cx - 7} ${ICON_CY + 5} h 14" stroke="${p.text}" stroke-width="1.8" stroke-linecap="round" fill="none"/>`;
|
|
218
|
+
}
|
|
219
|
+
// Typed as tuples so destructuring yields `number`, not `number | undefined`:
|
|
220
|
+
// a bare `number[][]` needed casts that would have survived a shape change.
|
|
221
|
+
const dots = kind === 'ellipsis'
|
|
222
|
+
? [
|
|
223
|
+
[cx - 6, ICON_CY],
|
|
224
|
+
[cx, ICON_CY],
|
|
225
|
+
[cx + 6, ICON_CY],
|
|
226
|
+
]
|
|
227
|
+
: [
|
|
228
|
+
[cx, ICON_CY - 6],
|
|
229
|
+
[cx, ICON_CY],
|
|
230
|
+
[cx, ICON_CY + 6],
|
|
231
|
+
];
|
|
232
|
+
return dots.map(([x, y]) => `<circle cx="${num(x)}" cy="${num(y)}" r="1.8" fill="${p.text}"/>`).join('');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The window: tab strip, navigation controls, omnibox, toolbar buttons, page.
|
|
236
|
+
*
|
|
237
|
+
* Everything here is chrome the user sees every day; the closer it is, the more
|
|
238
|
+
* the highlighted control reads as "that thing on my screen".
|
|
239
|
+
*/
|
|
240
|
+
function browserFrame(p, ui, h) {
|
|
241
|
+
const nav = `stroke="${p.text}" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" fill="none"`;
|
|
242
|
+
return [
|
|
243
|
+
// Window + tab strip.
|
|
244
|
+
`<rect x="0" y="0" width="${VIEW_W}" height="${h}" rx="12" fill="${p.chromeBg}"/>`,
|
|
245
|
+
`<circle cx="22" cy="23" r="5" fill="#ff5f57"/>`,
|
|
246
|
+
`<circle cx="38" cy="23" r="5" fill="#febc2e"/>`,
|
|
247
|
+
`<circle cx="54" cy="23" r="5" fill="#28c840"/>`,
|
|
248
|
+
`<rect x="72" y="8" width="200" height="30" rx="8" fill="${p.toolbarBg}"/>`,
|
|
249
|
+
`<circle cx="92" cy="23" r="6" fill="${p.stroke}"/>`,
|
|
250
|
+
`<rect x="106" y="20" width="118" height="6" rx="3" fill="${p.stroke}"/>`,
|
|
251
|
+
`<path d="M 246 20 l 6 6 M 252 20 l -6 6" stroke="${p.stroke}" stroke-width="1.6" stroke-linecap="round" fill="none"/>`,
|
|
252
|
+
`<path d="M 290 17 v 12 M 284 23 h 12" stroke="${p.text}" stroke-width="1.8" stroke-linecap="round" fill="none"/>`,
|
|
253
|
+
// Toolbar band + page.
|
|
254
|
+
`<rect x="0" y="${TOOLBAR_Y}" width="${VIEW_W}" height="${TOOLBAR_H}" fill="${p.toolbarBg}"/>`,
|
|
255
|
+
`<path d="M 0 ${CONTENT_Y} H ${VIEW_W} V ${h - 12} a 12 12 0 0 1 -12 12 H 12 a 12 12 0 0 1 -12 -12 Z" fill="${p.pageBg}"/>`,
|
|
256
|
+
// Back / forward (forward greyed, as it is on a fresh tab) / reload / home.
|
|
257
|
+
`<path d="M 36 60 H 25 M 30 55 L 25 60 L 30 65" ${nav}/>`,
|
|
258
|
+
`<path d="M 52 60 H 63 M 58 55 L 63 60 L 58 65" stroke="${p.stroke}" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" fill="none"/>`,
|
|
259
|
+
`<path d="M 89.9 55.4 A 6 6 0 1 1 84 54.4" ${nav}/>`,
|
|
260
|
+
`<path d="M 81.5 51.4 L 87 55 L 81.8 57.6 Z" fill="${p.text}"/>`,
|
|
261
|
+
`<path d="M 106.5 60.5 L 114 54 L 121.5 60.5 M 109 58.5 V 66.5 H 119 V 58.5" ${nav}/>`,
|
|
262
|
+
// Omnibox: lock, url text, bookmark star (which lives inside it).
|
|
263
|
+
`<rect x="132" y="48" width="358" height="24" rx="12" fill="${p.urlBg}"/>`,
|
|
264
|
+
`<rect x="144" y="58" width="9" height="7" rx="1.5" fill="${p.text}"/>`,
|
|
265
|
+
`<path d="M 146 58 v -2 a 2.5 2.5 0 0 1 5 0 v 2" stroke="${p.text}" stroke-width="1.4" fill="none"/>`,
|
|
266
|
+
`<rect x="163" y="57" width="186" height="6" rx="3" fill="${p.stroke}"/>`,
|
|
267
|
+
`<path d="M 476 53.5 L 477.65 57.74 L 482.18 57.99 L 478.66 60.87 L 479.82 65.26 L 476 62.8 L 472.18 65.26 L 473.34 60.87 L 469.82 57.99 L 474.35 57.74 Z" stroke="${p.stroke}" stroke-width="1.4" stroke-linejoin="round" fill="none"/>`,
|
|
268
|
+
// Profile avatar + the browser's own menu.
|
|
269
|
+
`<circle cx="574" cy="${ICON_CY}" r="9" fill="${p.stroke}"/>`,
|
|
270
|
+
appMenu(ui.appMenu, p),
|
|
271
|
+
].join('');
|
|
272
|
+
}
|
|
273
|
+
/** The extensions button glyph. Its callout, when it has one, is drawn by the step. */
|
|
274
|
+
function menuButton(p) {
|
|
275
|
+
return glyph(GLYPH_24.puzzle, MENU_BTN.x + 6, MENU_BTN.y + 4, 16, p.text);
|
|
276
|
+
}
|
|
277
|
+
/** A grey rounded bar — the stand-in for text we do not spell out in the mock. */
|
|
278
|
+
function bar(b, p) {
|
|
279
|
+
return `<rect x="${num(b.x)}" y="${num(b.y)}" width="${num(b.w)}" height="${num(b.h)}" rx="${num(b.h / 2)}" fill="${p.stroke}"/>`;
|
|
280
|
+
}
|
|
281
|
+
/** One list row: filled when it is ours, outlined when it is filler. */
|
|
282
|
+
function row(r, fill, p) {
|
|
283
|
+
const paint = fill ? `fill="${fill}"` : `fill="none" stroke="${p.stroke}"`;
|
|
284
|
+
return `<rect x="${num(r.x)}" y="${num(r.y)}" width="${num(r.w)}" height="${num(r.h)}" rx="${num(r.rx)}" ${paint}/>`;
|
|
285
|
+
}
|
|
286
|
+
/** The extension's name, drawn into a row. */
|
|
287
|
+
function rowText(anchor, name, p) {
|
|
288
|
+
return `<text x="${num(anchor.x)}" y="${num(anchor.y)}" font-family="system-ui, sans-serif" font-size="${num(anchor.size)}" fill="${p.text}">${esc(name)}</text>`;
|
|
289
|
+
}
|
|
290
|
+
/** Placeholder tile drawn only when the author has no icon yet. */
|
|
291
|
+
function iconPlaceholder(x, y, size, p) {
|
|
292
|
+
return `<rect x="${num(x)}" y="${num(y)}" width="${num(size)}" height="${num(size)}" rx="${num(size / 3.5)}" fill="${p.stroke}"/>`;
|
|
293
|
+
}
|
|
294
|
+
function svgDoc(body, h) {
|
|
295
|
+
return `<svg viewBox="0 0 ${VIEW_W} ${h}" xmlns="http://www.w3.org/2000/svg" role="img">${body}</svg>`;
|
|
296
|
+
}
|
|
297
|
+
/** Convert a pixel box in the mock's viewBox into overlay percentages. */
|
|
298
|
+
function overlay(url, xPx, yPx, sizePx, h) {
|
|
299
|
+
return {
|
|
300
|
+
url,
|
|
301
|
+
x: ((xPx + sizePx / 2) / VIEW_W) * 100,
|
|
302
|
+
y: ((yPx + sizePx / 2) / h) * 100,
|
|
303
|
+
size: (sizePx / VIEW_W) * 100,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* A numbered marker, positioned in percent of the frame.
|
|
308
|
+
*
|
|
309
|
+
* Takes a callout's badge anchor rather than loose coordinates, so a marker
|
|
310
|
+
* cannot be placed anywhere the ring and leader are not already pointing.
|
|
311
|
+
*/
|
|
312
|
+
function marker(badge, n, h) {
|
|
313
|
+
return { x: (badge[0] / VIEW_W) * 100, y: (badge[1] / h) * 100, kind: 'number', n, label: null };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Build the four-step pin sequence.
|
|
317
|
+
*
|
|
318
|
+
* Step 3 (the pin toggle) is the one users actually miss, so it gets its own
|
|
319
|
+
* frame rather than being folded into step 2 — the whole point of the guide is
|
|
320
|
+
* that clicking the row is not the same as pinning it — and that frame is a
|
|
321
|
+
* zoom of the row, because at toolbar scale the control is 18px wide and the
|
|
322
|
+
* numbered badge that points at it is larger than the thing it points at.
|
|
323
|
+
*
|
|
324
|
+
* Badges are deliberately placed OFF the target with a short accent leader
|
|
325
|
+
* running back to the ring. The badge is a fixed-pixel HTML overlay while the
|
|
326
|
+
* illustration scales with the column, so a badge centred on its target covers
|
|
327
|
+
* it outright at every width the preview is ever rendered at.
|
|
328
|
+
*/
|
|
329
|
+
export function buildPinGuideBlocks(input) {
|
|
330
|
+
const theme = input.theme ?? 'light';
|
|
331
|
+
const p = palette(theme);
|
|
332
|
+
// Validated here, not just at the call sites: this function is exported and
|
|
333
|
+
// the value lands unquoted inside SVG attributes, so a caller passing
|
|
334
|
+
// `#fff" onload="…` would be writing markup rather than a colour. The
|
|
335
|
+
// scrubber would strip the handler afterwards, but the illustration would
|
|
336
|
+
// still be corrupt — and `buildWelcomeHtml` already guards its own accent the
|
|
337
|
+
// same way, so leaving this path unguarded was simply inconsistent.
|
|
338
|
+
const accent = /^#[0-9a-fA-F]{3,8}$/.test(input.accentColor) ? input.accentColor : PIN_GUIDE_DEFAULT_ACCENT;
|
|
339
|
+
const ui = BROWSER_UI[input.browser];
|
|
340
|
+
const name = clip(input.extensionName || 'Your extension');
|
|
341
|
+
const browserLabel = PIN_GUIDE_BROWSER_LABELS[input.browser];
|
|
342
|
+
const toggleGlyph = GLYPH_24[ui.toggle];
|
|
343
|
+
const t = PIN_GUIDE_STRINGS[pinGuideLocale(input.locale)];
|
|
344
|
+
const fill = (template) => pinGuideText(template, { name, browser: browserLabel });
|
|
345
|
+
// ── Step 1: locate the extensions button ────────────────────────────────
|
|
346
|
+
const call1 = callout(MENU_BTN, 'down', 5);
|
|
347
|
+
const step1 = svgDoc(`${browserFrame(p, ui, H_TOOLBAR)}${menuButton(p)}${drawCallout(call1, accent)}`, H_TOOLBAR);
|
|
348
|
+
// ── Step 2: the open panel, with our row highlighted ────────────────────
|
|
349
|
+
const panel = [
|
|
350
|
+
`<rect x="${PANEL.x}" y="${PANEL.y}" width="${PANEL.w}" height="${PANEL.h}" rx="12" fill="${p.panelBg}" stroke="${p.stroke}"/>`,
|
|
351
|
+
bar(PANEL_HEADER, p),
|
|
352
|
+
row(ROW, p.rowBg, p),
|
|
353
|
+
rowText(ROW_TEXT_ANCHOR, name, p),
|
|
354
|
+
glyph(toggleGlyph, TOGGLE.x, TOGGLE.y, TOGGLE.size, p.text),
|
|
355
|
+
// A second, greyed row so the panel reads as a list rather than one card.
|
|
356
|
+
row(ROW_2, null, p),
|
|
357
|
+
iconPlaceholder(ICON_IN_ROW_2.x, ICON_IN_ROW_2.y, ICON_IN_ROW_2.size, p),
|
|
358
|
+
bar(ROW_2_TEXT, p),
|
|
359
|
+
glyph(toggleGlyph, TOGGLE_2.x, TOGGLE_2.y, TOGGLE_2.size, p.stroke),
|
|
360
|
+
bar(PANEL_FOOTER, p),
|
|
361
|
+
].join('');
|
|
362
|
+
const rowIconPlaceholder = input.iconUrl
|
|
363
|
+
? ''
|
|
364
|
+
: iconPlaceholder(ICON_IN_ROW.x, ICON_IN_ROW.y, ICON_IN_ROW.size, p);
|
|
365
|
+
const call2 = callout(ROW, 'left', 5);
|
|
366
|
+
const step2 = svgDoc(`${browserFrame(p, ui, H_MENU)}${menuButton(p)}${panel}${rowIconPlaceholder}${drawCallout(call2, accent)}`, H_MENU);
|
|
367
|
+
// ── Step 3: a close-up of the row, so the toggle is a real target ───────
|
|
368
|
+
const zoomIconPlaceholder = input.iconUrl
|
|
369
|
+
? ''
|
|
370
|
+
: iconPlaceholder(ZOOM_ICON.x, ZOOM_ICON.y, ZOOM_ICON.size, p);
|
|
371
|
+
// The zoom is drawn at ~1.7x the toolbar frame, so the shared leader length
|
|
372
|
+
// reads as a stub here; 22 keeps it proportional to the ring it leaves.
|
|
373
|
+
const call3 = callout(square(ZOOM_TOGGLE), 'right', 10, 22);
|
|
374
|
+
const step3 = svgDoc([
|
|
375
|
+
`<rect x="0" y="0" width="${VIEW_W}" height="${H_MENU}" rx="12" fill="${p.pageBg}"/>`,
|
|
376
|
+
`<rect x="${ZOOM_PANEL.x}" y="${ZOOM_PANEL.y}" width="${ZOOM_PANEL.w}" height="${ZOOM_PANEL.h}" rx="16" fill="${p.panelBg}" stroke="${p.stroke}"/>`,
|
|
377
|
+
bar(ZOOM_HEADER, p),
|
|
378
|
+
row(ZOOM_ROW, p.rowBg, p),
|
|
379
|
+
zoomIconPlaceholder,
|
|
380
|
+
rowText(ZOOM_TEXT_ANCHOR, name, p),
|
|
381
|
+
glyph(toggleGlyph, ZOOM_TOGGLE.x, ZOOM_TOGGLE.y, ZOOM_TOGGLE.size, p.text),
|
|
382
|
+
row(ZOOM_ROW_2, null, p),
|
|
383
|
+
iconPlaceholder(ZOOM_ICON_2.x, ZOOM_ICON_2.y, ZOOM_ICON_2.size, p),
|
|
384
|
+
bar(ZOOM_ROW_2_TEXT, p),
|
|
385
|
+
glyph(toggleGlyph, ZOOM_TOGGLE_2.x, ZOOM_TOGGLE_2.y, ZOOM_TOGGLE_2.size, p.stroke),
|
|
386
|
+
drawCallout(call3, accent),
|
|
387
|
+
].join(''), H_MENU);
|
|
388
|
+
// ── Step 4: pinned in the toolbar ───────────────────────────────────────
|
|
389
|
+
const pinnedPlaceholder = input.iconUrl ? '' : iconPlaceholder(PINNED.x, PINNED.y, PINNED.size, p);
|
|
390
|
+
const call4 = callout(square(PINNED), 'down', 6);
|
|
391
|
+
const step4 = svgDoc(`${browserFrame(p, ui, H_TOOLBAR)}${menuButton(p)}${pinnedPlaceholder}${drawCallout(call4, accent)}`, H_TOOLBAR);
|
|
392
|
+
const icon = (xPx, yPx, sizePx, h) => input.iconUrl ? overlay(input.iconUrl, xPx, yPx, sizePx, h) : null;
|
|
393
|
+
return [
|
|
394
|
+
{
|
|
395
|
+
kind: 'step',
|
|
396
|
+
id: 'pin-1',
|
|
397
|
+
title: fill(t.step1Title),
|
|
398
|
+
body: fill(t.step1Body),
|
|
399
|
+
media: {
|
|
400
|
+
source: 'svg',
|
|
401
|
+
svg: step1,
|
|
402
|
+
alt: fill(t.step1Alt),
|
|
403
|
+
annotations: [marker(call1.badge, 1, H_TOOLBAR)],
|
|
404
|
+
icon: null,
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
kind: 'step',
|
|
409
|
+
id: 'pin-2',
|
|
410
|
+
title: fill(t.step2Title),
|
|
411
|
+
body: null,
|
|
412
|
+
media: {
|
|
413
|
+
source: 'svg',
|
|
414
|
+
svg: step2,
|
|
415
|
+
alt: fill(t.step2Alt),
|
|
416
|
+
annotations: [marker(call2.badge, 2, H_MENU)],
|
|
417
|
+
icon: icon(ICON_IN_ROW.x, ICON_IN_ROW.y, ICON_IN_ROW.size, H_MENU),
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
kind: 'step',
|
|
422
|
+
id: 'pin-3',
|
|
423
|
+
title: fill(t.step3Title[input.browser]),
|
|
424
|
+
body: fill(t.step3Body[input.browser]),
|
|
425
|
+
media: {
|
|
426
|
+
source: 'svg',
|
|
427
|
+
svg: step3,
|
|
428
|
+
alt: fill(t.step3Alt[input.browser]),
|
|
429
|
+
annotations: [marker(call3.badge, 3, H_MENU)],
|
|
430
|
+
icon: icon(ZOOM_ICON.x, ZOOM_ICON.y, ZOOM_ICON.size, H_MENU),
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
kind: 'step',
|
|
435
|
+
id: 'pin-4',
|
|
436
|
+
title: fill(t.step4Title),
|
|
437
|
+
body: fill(t.step4Body),
|
|
438
|
+
media: {
|
|
439
|
+
source: 'svg',
|
|
440
|
+
svg: step4,
|
|
441
|
+
alt: fill(t.step4Alt),
|
|
442
|
+
annotations: [marker(call4.badge, 4, H_TOOLBAR)],
|
|
443
|
+
icon: icon(PINNED.x, PINNED.y, PINNED.size, H_TOOLBAR),
|
|
444
|
+
},
|
|
445
|
+
},
|
|
446
|
+
];
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=pin-guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pin-guide.js","sourceRoot":"","sources":["../src/pin-guide.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
* list_my_projects, get_project_state, get_project_scaffold,
|
|
27
27
|
* list/get/publish/update privacy policy (hosted; Pro)
|
|
28
28
|
* 'docs' → get_development_guide, search_docs, list_extension_templates, generate_icon_workflow,
|
|
29
|
-
* generate_welcome_page_workflow, generate_landing_page,
|
|
29
|
+
* generate_welcome_page_workflow, generate_pin_guide, generate_landing_page,
|
|
30
|
+
* localize_workflow (free; no key)
|
|
30
31
|
* 'scan' → scan_extension (local artifact; stdio only)
|
|
31
32
|
* 'publish' → publish_extension (local creds; stdio only)
|
|
32
33
|
*
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AASH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,kBAAkB,EAA6C,MAAM,SAAS,CAAA;AAG1G,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAkEnC,eAAO,MAAM,QAAQ,sCAAsC,CAAA;AAC3D,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAC9D,eAAO,MAAM,iBAAiB,+EAA+E,CAAA;AAO7G,eAAO,MAAM,mBAAmB,QAWS,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAEiE,CAAA;AAE/F;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,WAAW,aAAa,CAAA;AAErC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAYiD,CAAA;AAqCjF,oFAAoF;AACpF,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,EACrC,IAAI,GAAE,OAAmB,GACvB,MAAM,CAaR;AAID,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,kEAAkE;IAClE,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,+BAA+B;IAC/B,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC;;;;;OAKG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,CAAA;IACrC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAA;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAA;IACxD;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAiFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE,MAA2B,GAAG,OAAO,CAGxF;AA2uBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA86DnE"}
|