@walkrstudio/core 0.2.0 → 0.3.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 +186 -100
- package/dist/__tests__/composers.test.d.ts +2 -0
- package/dist/__tests__/composers.test.d.ts.map +1 -0
- package/dist/__tests__/composers.test.js +46 -0
- package/dist/__tests__/composers.test.js.map +1 -0
- package/dist/__tests__/steps.test.d.ts +2 -0
- package/dist/__tests__/steps.test.d.ts.map +1 -0
- package/dist/__tests__/steps.test.js +289 -0
- package/dist/__tests__/steps.test.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/steps.d.ts +12 -2
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +59 -3
- package/dist/steps.js.map +1 -1
- package/dist/types.d.ts +48 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,132 +1,227 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @walkrstudio/core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TypeScript API for scripting cursor-driven product walkthroughs.
|
|
4
4
|
|
|
5
|
-
`@
|
|
5
|
+
`@walkrstudio/core` is a zero-dependency library that lets you describe a walkthrough as a sequence of steps: cursor movements, clicks, typing, highlights, scrolls, and camera controls. The output is a plain `Walkthrough` object consumed by the engine, CLI, or recorder packages.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
10
|
+
npm install @walkrstudio/core
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
## Quick
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
Create a file called `demo.ts`:
|
|
14
16
|
|
|
15
17
|
```ts
|
|
16
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
walkr,
|
|
20
|
+
moveTo,
|
|
21
|
+
click,
|
|
22
|
+
type,
|
|
23
|
+
highlight,
|
|
24
|
+
wait,
|
|
25
|
+
sequence,
|
|
26
|
+
} from "@walkrstudio/core";
|
|
17
27
|
|
|
18
28
|
export default walkr({
|
|
19
|
-
url: "https://
|
|
29
|
+
url: "https://your-app.com",
|
|
20
30
|
title: "Sign up flow",
|
|
21
31
|
steps: [
|
|
22
|
-
moveTo(
|
|
23
|
-
click(
|
|
24
|
-
type("hello@example.com", { selector: "input
|
|
32
|
+
moveTo("#email-input", { duration: 600 }),
|
|
33
|
+
click("#email-input"),
|
|
34
|
+
type("hello@example.com", { selector: "#email-input", delay: 35 }),
|
|
35
|
+
|
|
36
|
+
moveTo(".submit-btn", { duration: 400 }),
|
|
25
37
|
highlight(".submit-btn", { spotlight: true, color: "#22d3ee", duration: 1200 }),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
),
|
|
38
|
+
click(".submit-btn"),
|
|
39
|
+
|
|
40
|
+
wait(500),
|
|
30
41
|
],
|
|
31
42
|
});
|
|
32
43
|
```
|
|
33
44
|
|
|
34
|
-
|
|
45
|
+
Preview it with the CLI:
|
|
35
46
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| Option | Type | Default | Notes |
|
|
47
|
+
```bash
|
|
48
|
+
npx walkr dev demo.ts
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Step reference
|
|
52
|
+
|
|
53
|
+
### Cursor movement
|
|
54
|
+
|
|
55
|
+
| Function | Signature | Description |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| `moveTo` | `moveTo(selector, options?)` | Move cursor to the center of a DOM element. |
|
|
58
|
+
| `moveToCoords` | `moveToCoords(x, y, options?)` | Move cursor to absolute screen coordinates. |
|
|
59
|
+
|
|
60
|
+
**Options** (`MoveToOptions`):
|
|
61
|
+
|
|
62
|
+
| Option | Type | Default | Description |
|
|
54
63
|
| --- | --- | --- | --- |
|
|
55
|
-
| `duration` | `number` | `0` |
|
|
56
|
-
| `easing` | `string` |
|
|
57
|
-
| `follow` | `boolean` |
|
|
58
|
-
| `cursor` | `Partial<CursorConfig>` |
|
|
64
|
+
| `duration` | `number` | `0` | Animation duration in ms. |
|
|
65
|
+
| `easing` | `string` | — | CSS easing string (e.g. `"ease-in-out"`). |
|
|
66
|
+
| `follow` | `boolean` | — | Keep following a moving target when supported by the runtime. |
|
|
67
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
68
|
+
|
|
69
|
+
### Click
|
|
70
|
+
|
|
71
|
+
| Function | Signature | Description |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| `click` | `click(selector, options?)` | Click on a DOM element. |
|
|
74
|
+
| `clickCoords` | `clickCoords(x, y, options?)` | Click at absolute screen coordinates. |
|
|
59
75
|
|
|
60
|
-
|
|
76
|
+
**Options** (`ClickOptions`):
|
|
61
77
|
|
|
62
|
-
| Option | Type | Default |
|
|
78
|
+
| Option | Type | Default | Description |
|
|
63
79
|
| --- | --- | --- | --- |
|
|
64
80
|
| `button` | `"left" \| "right" \| "middle"` | `"left"` | Mouse button. |
|
|
65
|
-
| `double` | `boolean` | `false` | Double-click
|
|
66
|
-
| `cursor` | `Partial<CursorConfig>` |
|
|
81
|
+
| `double` | `boolean` | `false` | Double-click. |
|
|
82
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
67
83
|
|
|
68
|
-
###
|
|
84
|
+
### Drag
|
|
69
85
|
|
|
70
|
-
|
|
86
|
+
```ts
|
|
87
|
+
drag({ selector: "#item" }, { selector: "#dropzone" })
|
|
88
|
+
drag({ x: 100, y: 200 }, { x: 500, y: 300 })
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
| Function | Signature | Description |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| `drag` | `drag(from, to, options?)` | Click-drag from one location to another. |
|
|
94
|
+
|
|
95
|
+
Each endpoint is either `{ selector: string }` (resolved to element center) or `{ x: number; y: number }` (absolute coordinates).
|
|
96
|
+
|
|
97
|
+
| Option | Type | Default | Description |
|
|
71
98
|
| --- | --- | --- | --- |
|
|
72
|
-
| `
|
|
73
|
-
|
|
74
|
-
|
|
99
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
100
|
+
|
|
101
|
+
Default duration: 1000 ms. Dispatches pointer and mouse events (not HTML5 Drag and Drop).
|
|
75
102
|
|
|
76
|
-
###
|
|
103
|
+
### Type
|
|
77
104
|
|
|
78
|
-
|
|
105
|
+
```ts
|
|
106
|
+
type("hello@example.com", { selector: "#email-input", delay: 35 })
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
| Option | Type | Default | Description |
|
|
79
110
|
| --- | --- | --- | --- |
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
111
|
+
| `delay` | `number` | — | Per-character delay in ms. |
|
|
112
|
+
| `selector` | `string` | — | Target element to focus before typing. |
|
|
113
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
82
114
|
|
|
83
|
-
|
|
115
|
+
Duration is calculated as `text.length * (delay ?? 0)`.
|
|
84
116
|
|
|
85
|
-
|
|
117
|
+
### Scroll
|
|
86
118
|
|
|
87
|
-
|
|
119
|
+
```ts
|
|
120
|
+
scroll(0, 700, { smooth: true })
|
|
121
|
+
```
|
|
88
122
|
|
|
89
|
-
| Option | Type | Default |
|
|
123
|
+
| Option | Type | Default | Description |
|
|
90
124
|
| --- | --- | --- | --- |
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
| `borderRadius` | `number` | `undefined` | Radius of highlight frame. |
|
|
96
|
-
| `padding` | `number` | `undefined` | Padding around target. |
|
|
97
|
-
| `cursor` | `Partial<CursorConfig>` | `undefined` | Per-step cursor override. |
|
|
125
|
+
| `smooth` | `boolean` | — | Smooth scrolling hint for the runtime. |
|
|
126
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
127
|
+
|
|
128
|
+
### Wait
|
|
98
129
|
|
|
99
|
-
|
|
130
|
+
```ts
|
|
131
|
+
wait(500) // pause for 500ms
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
No options — accepts a single `ms` value.
|
|
100
135
|
|
|
101
|
-
|
|
136
|
+
### Highlight
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
highlight(".submit-btn", {
|
|
140
|
+
spotlight: true,
|
|
141
|
+
color: "#22d3ee",
|
|
142
|
+
duration: 1200,
|
|
143
|
+
backdropOpacity: 0.35,
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
| Option | Type | Default | Description |
|
|
102
148
|
| --- | --- | --- | --- |
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
149
|
+
| `color` | `string` | — | Highlight border/glow color. |
|
|
150
|
+
| `duration` | `number` | — | How long the highlight stays visible (ms). |
|
|
151
|
+
| `spotlight` | `boolean` | — | Dim the rest of the page behind the target. |
|
|
152
|
+
| `backdropOpacity` | `number` | — | Dim amount (0–1). |
|
|
153
|
+
| `borderRadius` | `number` | — | Highlight frame radius in px. |
|
|
154
|
+
| `padding` | `number` | — | Extra padding around the target in px. |
|
|
155
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
156
|
+
|
|
157
|
+
### Zoom
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
zoom(1.5, { x: 960, y: 540 })
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
| Option | Type | Default | Description |
|
|
164
|
+
| --- | --- | --- | --- |
|
|
165
|
+
| `x` | `number` | — | Zoom anchor X coordinate. |
|
|
166
|
+
| `y` | `number` | — | Zoom anchor Y coordinate. |
|
|
105
167
|
| `easing` | `string` | `"cubic-bezier(0.42, 0, 0.58, 1)"` | Transition easing. |
|
|
106
|
-
| `follow` | `boolean` |
|
|
107
|
-
| `cursor` | `Partial<CursorConfig>` |
|
|
168
|
+
| `follow` | `boolean` | — | Follow target during zoom. |
|
|
169
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
170
|
+
|
|
171
|
+
Default duration: 360 ms.
|
|
108
172
|
|
|
109
|
-
###
|
|
173
|
+
### Pan
|
|
110
174
|
|
|
111
|
-
|
|
175
|
+
```ts
|
|
176
|
+
pan(960, 460, { duration: 500 })
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
| Option | Type | Default | Description |
|
|
112
180
|
| --- | --- | --- | --- |
|
|
113
181
|
| `duration` | `number` | `360` | Pan duration in ms. |
|
|
114
182
|
| `easing` | `string` | `"cubic-bezier(0.42, 0, 0.58, 1)"` | Transition easing. |
|
|
115
|
-
| `cursor` | `Partial<CursorConfig>` |
|
|
183
|
+
| `cursor` | `Partial<CursorConfig>` | — | Per-step cursor override. |
|
|
116
184
|
|
|
117
|
-
###
|
|
185
|
+
### Clear cache
|
|
118
186
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
187
|
+
```ts
|
|
188
|
+
clearCache()
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Clears browser state (cookies, cache) so the walkthrough starts from a clean slate. No options.
|
|
192
|
+
|
|
193
|
+
### Composition
|
|
194
|
+
|
|
195
|
+
| Function | Signature | Description |
|
|
196
|
+
| --- | --- | --- |
|
|
197
|
+
| `sequence` | `sequence(...steps)` | Run steps one after another. Duration = sum of children. |
|
|
198
|
+
| `parallel` | `parallel(...steps)` | Run steps at the same time. Duration = max of children. |
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
parallel(
|
|
202
|
+
highlight(".btn", { spotlight: true, color: "#22d3ee", duration: 1200 }),
|
|
203
|
+
sequence(
|
|
204
|
+
wait(200),
|
|
205
|
+
moveTo(".btn", { duration: 500 }),
|
|
206
|
+
),
|
|
207
|
+
)
|
|
208
|
+
```
|
|
122
209
|
|
|
123
|
-
|
|
210
|
+
## Walkthrough options
|
|
124
211
|
|
|
125
|
-
|
|
212
|
+
`walkr(options)` accepts:
|
|
213
|
+
|
|
214
|
+
| Option | Type | Required | Description |
|
|
126
215
|
| --- | --- | --- | --- |
|
|
127
|
-
| `
|
|
216
|
+
| `url` | `string` | yes | Target URL to load in the iframe/browser. |
|
|
217
|
+
| `steps` | `Step[]` | yes | Timeline steps. |
|
|
218
|
+
| `title` | `string` | no | Human-readable demo title. |
|
|
219
|
+
| `description` | `string` | no | Description of the walkthrough. |
|
|
220
|
+
| `viewport` | `Viewport` | no | Fixed viewport size (`{ width, height }`). |
|
|
221
|
+
| `cursor` | `CursorConfig` | no | Global cursor config. |
|
|
222
|
+
| `zoom` | `ZoomDefaults` | no | Default zoom level and easing. |
|
|
128
223
|
|
|
129
|
-
##
|
|
224
|
+
## Cursor config
|
|
130
225
|
|
|
131
226
|
```ts
|
|
132
227
|
interface CursorConfig {
|
|
@@ -136,6 +231,7 @@ interface CursorConfig {
|
|
|
136
231
|
shadow?: boolean;
|
|
137
232
|
clickColor?: string;
|
|
138
233
|
svgContent?: string;
|
|
234
|
+
offset?: { x: number; y: number };
|
|
139
235
|
}
|
|
140
236
|
```
|
|
141
237
|
|
|
@@ -143,27 +239,17 @@ interface CursorConfig {
|
|
|
143
239
|
| --- | --- | --- |
|
|
144
240
|
| `shape` | `"circle" \| "arrow" \| "dot" \| "svg"` | Cursor style. |
|
|
145
241
|
| `color` | `string` | Base cursor color. |
|
|
146
|
-
| `size` | `number` | Cursor
|
|
147
|
-
| `shadow` | `boolean` |
|
|
148
|
-
| `clickColor` | `string` |
|
|
149
|
-
| `svgContent` | `string` | Raw SVG markup when `shape
|
|
150
|
-
|
|
151
|
-
## Walkthrough Options
|
|
152
|
-
|
|
153
|
-
`walkr(options)` accepts:
|
|
154
|
-
|
|
155
|
-
| Option | Type | Required | Description |
|
|
156
|
-
| --- | --- | --- | --- |
|
|
157
|
-
| `url` | `string` | yes | Target URL to load. |
|
|
158
|
-
| `steps` | `Step[]` | yes | Timeline step list. |
|
|
159
|
-
| `title` | `string` | no | Human-readable demo title. |
|
|
160
|
-
| `description` | `string` | no | Optional demo description. |
|
|
161
|
-
| `zoom` | `ZoomDefaults` | no | Global zoom defaults. |
|
|
162
|
-
| `cursor` | `CursorConfig` | no | Global cursor config. |
|
|
242
|
+
| `size` | `number` | Cursor diameter in px. |
|
|
243
|
+
| `shadow` | `boolean` | Enable drop shadow. |
|
|
244
|
+
| `clickColor` | `string` | Flash color on click. |
|
|
245
|
+
| `svgContent` | `string` | Raw SVG markup when `shape` is `"svg"`. |
|
|
246
|
+
| `offset` | `{ x: number; y: number }` | Hotspot offset as a fraction of cursor size (0–1). Default: `{ x: 0.5, y: 0.5 }`. |
|
|
163
247
|
|
|
164
|
-
|
|
248
|
+
## Zoom defaults
|
|
165
249
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
250
|
+
```ts
|
|
251
|
+
interface ZoomDefaults {
|
|
252
|
+
defaultLevel?: number;
|
|
253
|
+
easing?: string;
|
|
254
|
+
}
|
|
255
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/composers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { parallel, sequence } from "../composers.js";
|
|
3
|
+
import { clickCoords, moveToCoords, wait } from "../steps.js";
|
|
4
|
+
describe("sequence", () => {
|
|
5
|
+
it("sums the durations of all child steps", () => {
|
|
6
|
+
const step = sequence(wait(100), wait(200), wait(300));
|
|
7
|
+
expect(step.type).toBe("sequence");
|
|
8
|
+
expect(step.duration).toBe(600);
|
|
9
|
+
});
|
|
10
|
+
it("stores child steps in order", () => {
|
|
11
|
+
const a = wait(10);
|
|
12
|
+
const b = wait(20);
|
|
13
|
+
const step = sequence(a, b);
|
|
14
|
+
expect(step.options.steps).toHaveLength(2);
|
|
15
|
+
expect(step.options.steps[0].id).toBe(a.id);
|
|
16
|
+
expect(step.options.steps[1].id).toBe(b.id);
|
|
17
|
+
});
|
|
18
|
+
it("handles an empty sequence with 0 duration", () => {
|
|
19
|
+
const step = sequence();
|
|
20
|
+
expect(step.duration).toBe(0);
|
|
21
|
+
expect(step.options.steps).toHaveLength(0);
|
|
22
|
+
});
|
|
23
|
+
it("handles mixed step types", () => {
|
|
24
|
+
const step = sequence(moveToCoords(0, 0, { duration: 200 }), wait(500), clickCoords(100, 100));
|
|
25
|
+
// moveToCoords(200) + wait(500) + clickCoords(50) = 750
|
|
26
|
+
expect(step.duration).toBe(750);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("parallel", () => {
|
|
30
|
+
it("uses the maximum duration of child steps", () => {
|
|
31
|
+
const step = parallel(wait(100), wait(300), wait(200));
|
|
32
|
+
expect(step.type).toBe("parallel");
|
|
33
|
+
expect(step.duration).toBe(300);
|
|
34
|
+
});
|
|
35
|
+
it("handles an empty parallel with 0 duration", () => {
|
|
36
|
+
const step = parallel();
|
|
37
|
+
expect(step.duration).toBe(0);
|
|
38
|
+
expect(step.options.steps).toHaveLength(0);
|
|
39
|
+
});
|
|
40
|
+
it("handles uniform-duration steps", () => {
|
|
41
|
+
// clickCoords has DEFAULT_CLICK_DURATION = 50
|
|
42
|
+
const step = parallel(clickCoords(0, 0), clickCoords(10, 10));
|
|
43
|
+
expect(step.duration).toBe(50);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=composers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composers.test.js","sourceRoot":"","sources":["../../src/__tests__/composers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/steps.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { click, clickCoords, highlight, moveTo, moveToCoords, narrate, pan, scroll, tooltip, type, wait, waitForNavigation, waitForSelector, zoom, } from "../steps.js";
|
|
3
|
+
describe("moveTo (selector)", () => {
|
|
4
|
+
it("creates a moveTo step with a selector", () => {
|
|
5
|
+
const step = moveTo("#button");
|
|
6
|
+
expect(step.type).toBe("moveTo");
|
|
7
|
+
expect(step.options.selector).toBe("#button");
|
|
8
|
+
expect(step.duration).toBe(0);
|
|
9
|
+
});
|
|
10
|
+
it("accepts a custom duration", () => {
|
|
11
|
+
const step = moveTo("#el", { duration: 500 });
|
|
12
|
+
expect(step.duration).toBe(500);
|
|
13
|
+
});
|
|
14
|
+
it("generates unique IDs for each step", () => {
|
|
15
|
+
const a = moveTo("#a");
|
|
16
|
+
const b = moveTo("#b");
|
|
17
|
+
expect(a.id).not.toBe(b.id);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe("moveToCoords", () => {
|
|
21
|
+
it("creates a moveToCoords step with coordinates", () => {
|
|
22
|
+
const step = moveToCoords(100, 200);
|
|
23
|
+
expect(step.type).toBe("moveToCoords");
|
|
24
|
+
expect(step.options.x).toBe(100);
|
|
25
|
+
expect(step.options.y).toBe(200);
|
|
26
|
+
expect(step.duration).toBe(0);
|
|
27
|
+
});
|
|
28
|
+
it("accepts a custom duration", () => {
|
|
29
|
+
const step = moveToCoords(50, 75, { duration: 500 });
|
|
30
|
+
expect(step.duration).toBe(500);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("click (selector)", () => {
|
|
34
|
+
it("creates a click step with default options", () => {
|
|
35
|
+
const step = click("#btn");
|
|
36
|
+
expect(step.type).toBe("click");
|
|
37
|
+
expect(step.options.selector).toBe("#btn");
|
|
38
|
+
expect(step.options.button).toBe("left");
|
|
39
|
+
expect(step.options.double).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it("supports right-click and double-click", () => {
|
|
42
|
+
const step = click("#btn", { button: "right", double: true });
|
|
43
|
+
expect(step.options.button).toBe("right");
|
|
44
|
+
expect(step.options.double).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe("clickCoords", () => {
|
|
48
|
+
it("creates a clickCoords step", () => {
|
|
49
|
+
const step = clickCoords(50, 100);
|
|
50
|
+
expect(step.type).toBe("clickCoords");
|
|
51
|
+
expect(step.options.x).toBe(50);
|
|
52
|
+
expect(step.options.y).toBe(100);
|
|
53
|
+
expect(step.options.button).toBe("left");
|
|
54
|
+
expect(step.options.double).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("type", () => {
|
|
58
|
+
it("creates a type step with text", () => {
|
|
59
|
+
const step = type("hello");
|
|
60
|
+
expect(step.type).toBe("type");
|
|
61
|
+
expect(step.options.text).toBe("hello");
|
|
62
|
+
});
|
|
63
|
+
it("computes duration from text length and delay", () => {
|
|
64
|
+
const step = type("hello", { delay: 50 });
|
|
65
|
+
// "hello" = 5 chars × 50ms = 250ms
|
|
66
|
+
expect(step.duration).toBe(250);
|
|
67
|
+
});
|
|
68
|
+
it("defaults to 0 duration with no delay", () => {
|
|
69
|
+
const step = type("world");
|
|
70
|
+
expect(step.duration).toBe(0);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("wait", () => {
|
|
74
|
+
it("creates a wait step with the given duration", () => {
|
|
75
|
+
const step = wait(1000);
|
|
76
|
+
expect(step.type).toBe("wait");
|
|
77
|
+
expect(step.options.ms).toBe(1000);
|
|
78
|
+
expect(step.duration).toBe(1000);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("highlight", () => {
|
|
82
|
+
it("creates a highlight step with selector", () => {
|
|
83
|
+
const step = highlight(".btn-primary");
|
|
84
|
+
expect(step.type).toBe("highlight");
|
|
85
|
+
expect(step.options.selector).toBe(".btn-primary");
|
|
86
|
+
expect(step.duration).toBe(0);
|
|
87
|
+
});
|
|
88
|
+
it("accepts custom duration and color", () => {
|
|
89
|
+
const step = highlight("#nav", { duration: 500, color: "#ff0000" });
|
|
90
|
+
expect(step.options.color).toBe("#ff0000");
|
|
91
|
+
expect(step.options.duration).toBe(500);
|
|
92
|
+
expect(step.duration).toBe(500);
|
|
93
|
+
});
|
|
94
|
+
it("passes spotlight and padding options through", () => {
|
|
95
|
+
const step = highlight(".card", {
|
|
96
|
+
spotlight: true,
|
|
97
|
+
backdropOpacity: 0.8,
|
|
98
|
+
padding: 16,
|
|
99
|
+
borderRadius: 12,
|
|
100
|
+
});
|
|
101
|
+
expect(step.options.spotlight).toBe(true);
|
|
102
|
+
expect(step.options.backdropOpacity).toBe(0.8);
|
|
103
|
+
expect(step.options.padding).toBe(16);
|
|
104
|
+
expect(step.options.borderRadius).toBe(12);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("tooltip", () => {
|
|
108
|
+
it("creates a tooltip step with selector and text", () => {
|
|
109
|
+
const step = tooltip(".btn-primary", "Click this button");
|
|
110
|
+
expect(step.type).toBe("tooltip");
|
|
111
|
+
expect(step.options.selector).toBe(".btn-primary");
|
|
112
|
+
expect(step.options.text).toBe("Click this button");
|
|
113
|
+
expect(step.options.position).toBe("top");
|
|
114
|
+
expect(step.duration).toBe(3000);
|
|
115
|
+
});
|
|
116
|
+
it("uses default duration of 3000ms", () => {
|
|
117
|
+
const step = tooltip("#el", "Some text");
|
|
118
|
+
expect(step.options.duration).toBe(3000);
|
|
119
|
+
expect(step.duration).toBe(3000);
|
|
120
|
+
});
|
|
121
|
+
it("accepts a custom duration", () => {
|
|
122
|
+
const step = tooltip("#el", "Some text", { duration: 5000 });
|
|
123
|
+
expect(step.options.duration).toBe(5000);
|
|
124
|
+
expect(step.duration).toBe(5000);
|
|
125
|
+
});
|
|
126
|
+
it("accepts a custom position", () => {
|
|
127
|
+
const step = tooltip("#el", "Some text", { position: "bottom" });
|
|
128
|
+
expect(step.options.position).toBe("bottom");
|
|
129
|
+
});
|
|
130
|
+
it("accepts left and right positions", () => {
|
|
131
|
+
const left = tooltip("#el", "Left tip", { position: "left" });
|
|
132
|
+
const right = tooltip("#el", "Right tip", { position: "right" });
|
|
133
|
+
expect(left.options.position).toBe("left");
|
|
134
|
+
expect(right.options.position).toBe("right");
|
|
135
|
+
});
|
|
136
|
+
it("accepts a title option", () => {
|
|
137
|
+
const step = tooltip("#el", "Body text", { title: "Heading" });
|
|
138
|
+
expect(step.options.title).toBe("Heading");
|
|
139
|
+
});
|
|
140
|
+
it("leaves title undefined when not provided", () => {
|
|
141
|
+
const step = tooltip("#el", "Body text");
|
|
142
|
+
expect(step.options.title).toBeUndefined();
|
|
143
|
+
});
|
|
144
|
+
it("generates unique IDs for each step", () => {
|
|
145
|
+
const a = tooltip("#a", "text a");
|
|
146
|
+
const b = tooltip("#b", "text b");
|
|
147
|
+
expect(a.id).not.toBe(b.id);
|
|
148
|
+
});
|
|
149
|
+
it("passes cursor override through", () => {
|
|
150
|
+
const step = tooltip("#el", "text", { cursor: { color: "#ff0000" } });
|
|
151
|
+
expect(step.options.cursor).toEqual({ color: "#ff0000" });
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe("zoom", () => {
|
|
155
|
+
it("creates a zoom step with level and default duration", () => {
|
|
156
|
+
const step = zoom(2);
|
|
157
|
+
expect(step.type).toBe("zoom");
|
|
158
|
+
expect(step.options.level).toBe(2);
|
|
159
|
+
// Default zoom duration is 360
|
|
160
|
+
expect(step.duration).toBe(360);
|
|
161
|
+
});
|
|
162
|
+
it("applies default easing", () => {
|
|
163
|
+
const step = zoom(1.5);
|
|
164
|
+
expect(step.options.easing).toBe("cubic-bezier(0.42, 0, 0.58, 1)");
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe("pan", () => {
|
|
168
|
+
it("creates a pan step with coordinates", () => {
|
|
169
|
+
const step = pan(100, -50);
|
|
170
|
+
expect(step.type).toBe("pan");
|
|
171
|
+
expect(step.options.x).toBe(100);
|
|
172
|
+
expect(step.options.y).toBe(-50);
|
|
173
|
+
});
|
|
174
|
+
it("uses the default pan duration of 360", () => {
|
|
175
|
+
const step = pan(0, 0);
|
|
176
|
+
expect(step.duration).toBe(360);
|
|
177
|
+
});
|
|
178
|
+
it("allows custom duration override", () => {
|
|
179
|
+
const step = pan(0, 0, { duration: 1000 });
|
|
180
|
+
expect(step.options.duration).toBe(1000);
|
|
181
|
+
expect(step.duration).toBe(1000);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe("scroll", () => {
|
|
185
|
+
it("creates a scroll step", () => {
|
|
186
|
+
const step = scroll(0, 500);
|
|
187
|
+
expect(step.type).toBe("scroll");
|
|
188
|
+
expect(step.options.x).toBe(0);
|
|
189
|
+
expect(step.options.y).toBe(500);
|
|
190
|
+
expect(step.duration).toBe(0);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
describe("waitForSelector", () => {
|
|
194
|
+
it("creates a waitForSelector step with a selector and defaults", () => {
|
|
195
|
+
const step = waitForSelector("#loading-spinner");
|
|
196
|
+
expect(step.type).toBe("waitForSelector");
|
|
197
|
+
expect(step.options.selector).toBe("#loading-spinner");
|
|
198
|
+
expect(step.options.timeout).toBe(5000);
|
|
199
|
+
expect(step.options.visible).toBeUndefined();
|
|
200
|
+
expect(step.duration).toBe(5000);
|
|
201
|
+
});
|
|
202
|
+
it("accepts a custom timeout", () => {
|
|
203
|
+
const step = waitForSelector(".modal", { timeout: 10000 });
|
|
204
|
+
expect(step.options.timeout).toBe(10000);
|
|
205
|
+
expect(step.duration).toBe(10000);
|
|
206
|
+
});
|
|
207
|
+
it("accepts visible option", () => {
|
|
208
|
+
const step = waitForSelector("[data-ready]", { visible: true });
|
|
209
|
+
expect(step.options.visible).toBe(true);
|
|
210
|
+
});
|
|
211
|
+
it("generates unique IDs", () => {
|
|
212
|
+
const a = waitForSelector("#a");
|
|
213
|
+
const b = waitForSelector("#b");
|
|
214
|
+
expect(a.id).not.toBe(b.id);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe("waitForNavigation", () => {
|
|
218
|
+
it("creates a waitForNavigation step with defaults", () => {
|
|
219
|
+
const step = waitForNavigation();
|
|
220
|
+
expect(step.type).toBe("waitForNavigation");
|
|
221
|
+
expect(step.options.timeout).toBe(5000);
|
|
222
|
+
expect(step.options.waitUntil).toBe("load");
|
|
223
|
+
expect(step.duration).toBe(5000);
|
|
224
|
+
});
|
|
225
|
+
it("accepts a custom timeout", () => {
|
|
226
|
+
const step = waitForNavigation({ timeout: 15000 });
|
|
227
|
+
expect(step.options.timeout).toBe(15000);
|
|
228
|
+
expect(step.duration).toBe(15000);
|
|
229
|
+
});
|
|
230
|
+
it("accepts waitUntil option", () => {
|
|
231
|
+
const step = waitForNavigation({ waitUntil: "domcontentloaded" });
|
|
232
|
+
expect(step.options.waitUntil).toBe("domcontentloaded");
|
|
233
|
+
});
|
|
234
|
+
it("accepts networkidle waitUntil", () => {
|
|
235
|
+
const step = waitForNavigation({ waitUntil: "networkidle" });
|
|
236
|
+
expect(step.options.waitUntil).toBe("networkidle");
|
|
237
|
+
});
|
|
238
|
+
it("generates unique IDs", () => {
|
|
239
|
+
const a = waitForNavigation();
|
|
240
|
+
const b = waitForNavigation();
|
|
241
|
+
expect(a.id).not.toBe(b.id);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe("narrate", () => {
|
|
245
|
+
it("creates a narrate step with src and defaults", () => {
|
|
246
|
+
const step = narrate("/audio/intro.mp3");
|
|
247
|
+
expect(step.type).toBe("narrate");
|
|
248
|
+
expect(step.options.src).toBe("/audio/intro.mp3");
|
|
249
|
+
expect(step.options.volume).toBe(1);
|
|
250
|
+
expect(step.options.loop).toBe(false);
|
|
251
|
+
expect(step.options.duration).toBeUndefined();
|
|
252
|
+
expect(step.duration).toBe(0);
|
|
253
|
+
});
|
|
254
|
+
it("accepts a custom duration", () => {
|
|
255
|
+
const step = narrate("/audio/intro.mp3", { duration: 5000 });
|
|
256
|
+
expect(step.options.duration).toBe(5000);
|
|
257
|
+
expect(step.duration).toBe(5000);
|
|
258
|
+
});
|
|
259
|
+
it("accepts a custom volume", () => {
|
|
260
|
+
const step = narrate("/audio/intro.mp3", { volume: 0.5 });
|
|
261
|
+
expect(step.options.volume).toBe(0.5);
|
|
262
|
+
});
|
|
263
|
+
it("accepts loop option", () => {
|
|
264
|
+
const step = narrate("/audio/bg-music.mp3", { loop: true });
|
|
265
|
+
expect(step.options.loop).toBe(true);
|
|
266
|
+
});
|
|
267
|
+
it("accepts all options together", () => {
|
|
268
|
+
const step = narrate("https://cdn.example.com/narration.ogg", {
|
|
269
|
+
duration: 10000,
|
|
270
|
+
volume: 0.8,
|
|
271
|
+
loop: true,
|
|
272
|
+
});
|
|
273
|
+
expect(step.options.src).toBe("https://cdn.example.com/narration.ogg");
|
|
274
|
+
expect(step.options.duration).toBe(10000);
|
|
275
|
+
expect(step.options.volume).toBe(0.8);
|
|
276
|
+
expect(step.options.loop).toBe(true);
|
|
277
|
+
expect(step.duration).toBe(10000);
|
|
278
|
+
});
|
|
279
|
+
it("generates unique IDs for each step", () => {
|
|
280
|
+
const a = narrate("/audio/a.mp3");
|
|
281
|
+
const b = narrate("/audio/b.mp3");
|
|
282
|
+
expect(a.id).not.toBe(b.id);
|
|
283
|
+
});
|
|
284
|
+
it("uses 0 as step duration when no duration option is set", () => {
|
|
285
|
+
const step = narrate("/audio/file.mp3");
|
|
286
|
+
expect(step.duration).toBe(0);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
//# sourceMappingURL=steps.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"steps.test.js","sourceRoot":"","sources":["../../src/__tests__/steps.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,MAAM,EACN,YAAY,EACZ,OAAO,EACP,GAAG,EACH,MAAM,EACN,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,iBAAiB,EACjB,eAAe,EACf,IAAI,GACL,MAAM,aAAa,CAAC;AAErB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,mCAAmC;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE;YAC9B,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,GAAG;YACpB,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,uCAAuC,EAAE;YAC5D,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAElE,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,wBAAgB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAY9D;AAED,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,KAAK,CAAC,OAA2B;IAC/C,iBAAiB,EAAE,CAAC;IACpB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC3E,OAAO;QACL,GAAG;QACH,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;QACjB,KAAK;QACL,WAAW;QACX,IAAI;QACJ,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAE3B,cAAc,YAAY,CAAC"}
|
package/dist/steps.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import type { ClearCacheStep, ClickCoordsStep, ClickOptions, ClickStep, HighlightOptions, HighlightStep, MoveToCoordsStep, MoveToOptions, MoveToStep, PanOptions, PanStep, PanStepOptions, ScrollOptions, ScrollStep, Step, StepType, TypeOptions, TypeStep, WaitStep, ZoomOptions, ZoomStep, ZoomStepOptions } from "./types.js";
|
|
1
|
+
import type { ClearCacheStep, ClickCoordsStep, ClickOptions, ClickStep, DragEndpoint, DragStep, HighlightOptions, HighlightStep, MoveToCoordsStep, MoveToOptions, MoveToStep, NarrateOptions, NarrateStep, PanOptions, PanStep, PanStepOptions, ScrollOptions, ScrollStep, Step, StepCursorOverride, StepType, TooltipOptions, TooltipStep, TypeOptions, TypeStep, WaitForNavigationOptions, WaitForNavigationStep, WaitForSelectorOptions, WaitForSelectorStep, WaitStep, ZoomOptions, ZoomStep, ZoomStepOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reset per-type step counters. Called automatically by `walkr()` so that
|
|
4
|
+
* the same walkthrough definition always produces identical step IDs.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resetStepCounters(): void;
|
|
2
7
|
export declare function createStep<TType extends StepType, TOptions extends {}>(type: TType, options: TOptions, duration?: number): Step<TType, TOptions>;
|
|
3
8
|
export declare function moveTo(selector: string, options?: MoveToOptions): MoveToStep;
|
|
4
9
|
export declare function moveToCoords(x: number, y: number, options?: MoveToOptions): MoveToCoordsStep;
|
|
@@ -7,9 +12,14 @@ export declare function clickCoords(x: number, y: number, options?: ClickOptions
|
|
|
7
12
|
export declare function type(text: string, options?: TypeOptions): TypeStep;
|
|
8
13
|
export declare function scroll(x: number, y: number, options?: ScrollOptions): ScrollStep;
|
|
9
14
|
export declare function wait(ms: number): WaitStep;
|
|
15
|
+
export declare function waitForSelector(selector: string, options?: Omit<WaitForSelectorOptions, "selector">): WaitForSelectorStep;
|
|
16
|
+
export declare function waitForNavigation(options?: WaitForNavigationOptions): WaitForNavigationStep;
|
|
10
17
|
export declare function highlight(selector: string, options?: HighlightOptions): HighlightStep;
|
|
18
|
+
export declare function tooltip(selector: string, text: string, options?: TooltipOptions): TooltipStep;
|
|
19
|
+
export declare function narrate(src: string, options?: NarrateOptions): NarrateStep;
|
|
11
20
|
export declare function zoom(level: number, options?: ZoomOptions): ZoomStep;
|
|
12
21
|
export declare function pan(x: number, y: number, options?: PanOptions): PanStep;
|
|
13
22
|
export declare function clearCache(): ClearCacheStep;
|
|
14
|
-
export
|
|
23
|
+
export declare function drag(from: DragEndpoint, to: DragEndpoint, options?: StepCursorOverride): DragStep;
|
|
24
|
+
export type { DragEndpoint, PanStepOptions, ZoomStepOptions };
|
|
15
25
|
//# sourceMappingURL=steps.d.ts.map
|
package/dist/steps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,eAAe,EAEf,YAAY,EACZ,SAAS,EAET,gBAAgB,EAChB,aAAa,EAEb,gBAAgB,EAEhB,aAAa,EACb,UAAU,EAEV,UAAU,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,UAAU,EAEV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,QAAQ,EAER,QAAQ,EAER,WAAW,EACX,QAAQ,EACR,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,eAAe,EAEf,YAAY,EACZ,SAAS,EAET,YAAY,EACZ,QAAQ,EAER,gBAAgB,EAChB,aAAa,EAEb,gBAAgB,EAEhB,aAAa,EACb,UAAU,EAEV,cAAc,EACd,WAAW,EAEX,UAAU,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,UAAU,EAEV,IAAI,EACJ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,WAAW,EAEX,WAAW,EACX,QAAQ,EAER,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EAER,WAAW,EACX,QAAQ,EACR,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAYD,wBAAgB,UAAU,CACxB,KAAK,SAAS,QAAQ,EAEtB,QAAQ,SAAS,EAAE,EACnB,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,SAAI,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CASrE;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,UAAU,CAGhF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,gBAAgB,CAGhG;AAED,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS,CAO7E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CAQ7F;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,QAAQ,CAItE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,UAAU,CAGpF;AAED,wBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAGzC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAM,GACrD,mBAAmB,CASrB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,qBAAqB,CAQ/F;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAYzF;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAWjG;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CAQ9E;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,QAAQ,CAOvE;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAS3E;AAED,wBAAgB,UAAU,IAAI,cAAc,CAG3C;AAED,wBAAgB,IAAI,CAClB,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,YAAY,EAChB,OAAO,GAAE,kBAAuB,GAC/B,QAAQ,CAGV;AAED,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/steps.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
const typeCounters = new Map();
|
|
2
|
+
/**
|
|
3
|
+
* Reset per-type step counters. Called automatically by `walkr()` so that
|
|
4
|
+
* the same walkthrough definition always produces identical step IDs.
|
|
5
|
+
*/
|
|
6
|
+
export function resetStepCounters() {
|
|
7
|
+
typeCounters.clear();
|
|
8
|
+
}
|
|
2
9
|
const DEFAULT_CLICK_DURATION = 50;
|
|
3
10
|
const DEFAULT_ZOOM_DURATION = 360;
|
|
4
11
|
const DEFAULT_PAN_DURATION = 360;
|
|
5
12
|
const DEFAULT_CLEAR_CACHE_DURATION = 50;
|
|
13
|
+
const DEFAULT_DRAG_DURATION = 1000;
|
|
14
|
+
const DEFAULT_TOOLTIP_DURATION = 3000;
|
|
15
|
+
const DEFAULT_WAIT_FOR_SELECTOR_TIMEOUT = 5000;
|
|
16
|
+
const DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = 5000;
|
|
6
17
|
const DEFAULT_EASING = "cubic-bezier(0.42, 0, 0.58, 1)";
|
|
7
18
|
export function createStep(type, options, duration = 0) {
|
|
8
|
-
|
|
19
|
+
const count = typeCounters.get(type) ?? 0;
|
|
20
|
+
typeCounters.set(type, count + 1);
|
|
9
21
|
return {
|
|
10
|
-
id: `${type}_${
|
|
22
|
+
id: `${type}_${count}`,
|
|
11
23
|
type,
|
|
12
24
|
options,
|
|
13
25
|
duration,
|
|
@@ -51,6 +63,25 @@ export function wait(ms) {
|
|
|
51
63
|
const stepOptions = { ms };
|
|
52
64
|
return createStep("wait", stepOptions, ms);
|
|
53
65
|
}
|
|
66
|
+
export function waitForSelector(selector, options = {}) {
|
|
67
|
+
const timeout = options.timeout ?? DEFAULT_WAIT_FOR_SELECTOR_TIMEOUT;
|
|
68
|
+
const stepOptions = {
|
|
69
|
+
selector,
|
|
70
|
+
timeout,
|
|
71
|
+
visible: options.visible,
|
|
72
|
+
cursor: options.cursor,
|
|
73
|
+
};
|
|
74
|
+
return createStep("waitForSelector", stepOptions, timeout);
|
|
75
|
+
}
|
|
76
|
+
export function waitForNavigation(options = {}) {
|
|
77
|
+
const timeout = options.timeout ?? DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT;
|
|
78
|
+
const stepOptions = {
|
|
79
|
+
timeout,
|
|
80
|
+
waitUntil: options.waitUntil ?? "load",
|
|
81
|
+
cursor: options.cursor,
|
|
82
|
+
};
|
|
83
|
+
return createStep("waitForNavigation", stepOptions, timeout);
|
|
84
|
+
}
|
|
54
85
|
export function highlight(selector, options = {}) {
|
|
55
86
|
const stepOptions = {
|
|
56
87
|
selector,
|
|
@@ -64,6 +95,27 @@ export function highlight(selector, options = {}) {
|
|
|
64
95
|
};
|
|
65
96
|
return createStep("highlight", stepOptions, options.duration ?? 0);
|
|
66
97
|
}
|
|
98
|
+
export function tooltip(selector, text, options = {}) {
|
|
99
|
+
const duration = options.duration ?? DEFAULT_TOOLTIP_DURATION;
|
|
100
|
+
const stepOptions = {
|
|
101
|
+
selector,
|
|
102
|
+
text,
|
|
103
|
+
duration,
|
|
104
|
+
position: options.position ?? "top",
|
|
105
|
+
title: options.title,
|
|
106
|
+
cursor: options.cursor,
|
|
107
|
+
};
|
|
108
|
+
return createStep("tooltip", stepOptions, duration);
|
|
109
|
+
}
|
|
110
|
+
export function narrate(src, options = {}) {
|
|
111
|
+
const stepOptions = {
|
|
112
|
+
src,
|
|
113
|
+
duration: options.duration,
|
|
114
|
+
volume: options.volume ?? 1,
|
|
115
|
+
loop: options.loop ?? false,
|
|
116
|
+
};
|
|
117
|
+
return createStep("narrate", stepOptions, options.duration ?? 0);
|
|
118
|
+
}
|
|
67
119
|
export function zoom(level, options = {}) {
|
|
68
120
|
const stepOptions = {
|
|
69
121
|
level,
|
|
@@ -86,4 +138,8 @@ export function clearCache() {
|
|
|
86
138
|
const stepOptions = {};
|
|
87
139
|
return createStep("clearCache", stepOptions, DEFAULT_CLEAR_CACHE_DURATION);
|
|
88
140
|
}
|
|
141
|
+
export function drag(from, to, options = {}) {
|
|
142
|
+
const stepOptions = { from, to, cursor: options.cursor };
|
|
143
|
+
return createStep("drag", stepOptions, DEFAULT_DRAG_DURATION);
|
|
144
|
+
}
|
|
89
145
|
//# sourceMappingURL=steps.js.map
|
package/dist/steps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export interface Viewport {
|
|
|
3
3
|
height: number;
|
|
4
4
|
}
|
|
5
5
|
export type MouseButton = "left" | "right" | "middle";
|
|
6
|
-
export type StepType = "moveTo" | "moveToCoords" | "click" | "clickCoords" | "type" | "scroll" | "wait" | "highlight" | "zoom" | "pan" | "sequence" | "parallel" | "clearCache";
|
|
6
|
+
export type StepType = "moveTo" | "moveToCoords" | "click" | "clickCoords" | "type" | "scroll" | "wait" | "waitForSelector" | "waitForNavigation" | "highlight" | "tooltip" | "narrate" | "zoom" | "pan" | "sequence" | "parallel" | "clearCache" | "drag";
|
|
7
7
|
export interface CursorConfig {
|
|
8
8
|
shape?: "circle" | "arrow" | "dot" | "svg";
|
|
9
9
|
color?: string;
|
|
@@ -64,6 +64,16 @@ export interface ScrollStepOptions extends ScrollOptions {
|
|
|
64
64
|
export interface WaitStepOptions extends StepCursorOverride {
|
|
65
65
|
ms: number;
|
|
66
66
|
}
|
|
67
|
+
export interface WaitForSelectorOptions extends StepCursorOverride {
|
|
68
|
+
selector: string;
|
|
69
|
+
timeout?: number;
|
|
70
|
+
visible?: boolean;
|
|
71
|
+
}
|
|
72
|
+
export type WaitUntil = "load" | "domcontentloaded" | "networkidle";
|
|
73
|
+
export interface WaitForNavigationOptions extends StepCursorOverride {
|
|
74
|
+
timeout?: number;
|
|
75
|
+
waitUntil?: WaitUntil;
|
|
76
|
+
}
|
|
67
77
|
export interface HighlightOptions extends StepCursorOverride {
|
|
68
78
|
color?: string;
|
|
69
79
|
duration?: number;
|
|
@@ -75,6 +85,28 @@ export interface HighlightOptions extends StepCursorOverride {
|
|
|
75
85
|
export interface HighlightStepOptions extends HighlightOptions {
|
|
76
86
|
selector: string;
|
|
77
87
|
}
|
|
88
|
+
export type TooltipPosition = "top" | "bottom" | "left" | "right";
|
|
89
|
+
export interface TooltipOptions extends StepCursorOverride {
|
|
90
|
+
duration?: number;
|
|
91
|
+
position?: TooltipPosition;
|
|
92
|
+
title?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface TooltipStepOptions extends TooltipOptions {
|
|
95
|
+
selector: string;
|
|
96
|
+
text: string;
|
|
97
|
+
}
|
|
98
|
+
export interface NarrateOptions {
|
|
99
|
+
/** Duration in ms. If not set, derived from audio length at runtime. */
|
|
100
|
+
duration?: number;
|
|
101
|
+
/** Volume level from 0 to 1. Default: 1. */
|
|
102
|
+
volume?: number;
|
|
103
|
+
/** Whether to loop the audio. Default: false. */
|
|
104
|
+
loop?: boolean;
|
|
105
|
+
}
|
|
106
|
+
export interface NarrateStepOptions extends NarrateOptions {
|
|
107
|
+
/** URL or path to the audio file. */
|
|
108
|
+
src: string;
|
|
109
|
+
}
|
|
78
110
|
export interface ZoomOptions extends StepCursorOverride {
|
|
79
111
|
x?: number;
|
|
80
112
|
y?: number;
|
|
@@ -99,6 +131,16 @@ export interface ParallelStepOptions extends StepCursorOverride {
|
|
|
99
131
|
steps: Step[];
|
|
100
132
|
}
|
|
101
133
|
export type ClearCacheStepOptions = {};
|
|
134
|
+
export type DragEndpoint = {
|
|
135
|
+
selector: string;
|
|
136
|
+
} | {
|
|
137
|
+
x: number;
|
|
138
|
+
y: number;
|
|
139
|
+
};
|
|
140
|
+
export interface DragStepOptions extends StepCursorOverride {
|
|
141
|
+
from: DragEndpoint;
|
|
142
|
+
to: DragEndpoint;
|
|
143
|
+
}
|
|
102
144
|
export interface Step<TType extends StepType = StepType, TOptions extends {} = {}> {
|
|
103
145
|
id: string;
|
|
104
146
|
type: TType;
|
|
@@ -112,12 +154,17 @@ export type ClickCoordsStep = Step<"clickCoords", ClickCoordsStepOptions>;
|
|
|
112
154
|
export type TypeStep = Step<"type", TypeStepOptions>;
|
|
113
155
|
export type ScrollStep = Step<"scroll", ScrollStepOptions>;
|
|
114
156
|
export type WaitStep = Step<"wait", WaitStepOptions>;
|
|
157
|
+
export type WaitForSelectorStep = Step<"waitForSelector", WaitForSelectorOptions>;
|
|
158
|
+
export type WaitForNavigationStep = Step<"waitForNavigation", WaitForNavigationOptions>;
|
|
115
159
|
export type HighlightStep = Step<"highlight", HighlightStepOptions>;
|
|
160
|
+
export type TooltipStep = Step<"tooltip", TooltipStepOptions>;
|
|
161
|
+
export type NarrateStep = Step<"narrate", NarrateStepOptions>;
|
|
116
162
|
export type ZoomStep = Step<"zoom", ZoomStepOptions>;
|
|
117
163
|
export type PanStep = Step<"pan", PanStepOptions>;
|
|
118
164
|
export type SequenceStep = Step<"sequence", SequenceStepOptions>;
|
|
119
165
|
export type ParallelStep = Step<"parallel", ParallelStepOptions>;
|
|
120
166
|
export type ClearCacheStep = Step<"clearCache", ClearCacheStepOptions>;
|
|
167
|
+
export type DragStep = Step<"drag", DragStepOptions>;
|
|
121
168
|
export interface Walkthrough {
|
|
122
169
|
url: string;
|
|
123
170
|
steps: Step[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,cAAc,GACd,OAAO,GACP,aAAa,GACb,MAAM,GACN,QAAQ,GACR,MAAM,GACN,WAAW,GACX,MAAM,GACN,KAAK,GACL,UAAU,GACV,UAAU,GACV,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|