screenci 0.0.21 → 0.0.23

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.
Files changed (52) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +145 -81
  4. package/dist/cli.js.map +1 -1
  5. package/dist/e2e/instrument.e2e.js +98 -68
  6. package/dist/e2e/instrument.e2e.js.map +1 -1
  7. package/dist/src/autoZoom.d.ts +34 -15
  8. package/dist/src/autoZoom.d.ts.map +1 -1
  9. package/dist/src/autoZoom.js +100 -69
  10. package/dist/src/autoZoom.js.map +1 -1
  11. package/dist/src/changeFocus.d.ts +129 -0
  12. package/dist/src/changeFocus.d.ts.map +1 -0
  13. package/dist/src/changeFocus.js +885 -0
  14. package/dist/src/changeFocus.js.map +1 -0
  15. package/dist/src/defaults.d.ts +2 -17
  16. package/dist/src/defaults.d.ts.map +1 -1
  17. package/dist/src/defaults.js +8 -16
  18. package/dist/src/defaults.js.map +1 -1
  19. package/dist/src/easing.d.ts +6 -0
  20. package/dist/src/easing.d.ts.map +1 -0
  21. package/dist/src/easing.js +30 -0
  22. package/dist/src/easing.js.map +1 -0
  23. package/dist/src/errors.d.ts +10 -0
  24. package/dist/src/errors.d.ts.map +1 -0
  25. package/dist/src/errors.js +26 -0
  26. package/dist/src/errors.js.map +1 -0
  27. package/dist/src/events.d.ts +34 -12
  28. package/dist/src/events.d.ts.map +1 -1
  29. package/dist/src/events.js +111 -30
  30. package/dist/src/events.js.map +1 -1
  31. package/dist/src/instrument.d.ts +0 -6
  32. package/dist/src/instrument.d.ts.map +1 -1
  33. package/dist/src/instrument.js +385 -812
  34. package/dist/src/instrument.js.map +1 -1
  35. package/dist/src/mouse.d.ts +128 -0
  36. package/dist/src/mouse.d.ts.map +1 -0
  37. package/dist/src/mouse.js +268 -0
  38. package/dist/src/mouse.js.map +1 -0
  39. package/dist/src/recordingData.d.ts +29 -4
  40. package/dist/src/recordingData.d.ts.map +1 -1
  41. package/dist/src/types.d.ts +4 -7
  42. package/dist/src/types.d.ts.map +1 -1
  43. package/dist/src/zoom.d.ts +69 -0
  44. package/dist/src/zoom.d.ts.map +1 -0
  45. package/dist/src/zoom.js +90 -0
  46. package/dist/src/zoom.js.map +1 -0
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +1 -1
  49. package/dist/src/scroll.d.ts +0 -36
  50. package/dist/src/scroll.d.ts.map +0 -1
  51. package/dist/src/scroll.js +0 -274
  52. package/dist/src/scroll.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"autoZoom.d.ts","sourceRoot":"","sources":["../../src/autoZoom.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEzD,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAA;CAC5B,CAAA;AAYD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,IAAI,CAEN;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,GAAG,IAAI,CAEnD;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,mBAAmB,IAAI,YAAY,GAAG,IAAI,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAElE;AAaD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"autoZoom.d.ts","sourceRoot":"","sources":["../../src/autoZoom.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,YAAY,CAAA;AAezD,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,GAAG,EAAE;QACH,OAAO,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QACjC,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAC5C,CAAA;IACD,aAAa,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD,CAAA;AASD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAC9B,IAAI,CAEN;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAChD,CAAA;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GACnC,IAAI,CAKN;AAeD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAgFf"}
@@ -1,50 +1,49 @@
1
- import { DEFAULT_ZOOM_DURATION, DEFAULT_ZOOM_EASING, DEFAULT_POST_ZOOM_IN_OUT_DELAY, } from './defaults.js';
1
+ import { DEFAULT_ZOOM_OPTIONS } from './defaults.js';
2
+ import { invalidOptionError, ScreenciError } from './errors.js';
3
+ function assertAutoZoomUnitIntervalOption(value, name) {
4
+ if (!Number.isFinite(value) || value < 0 || value > 1) {
5
+ throw invalidOptionError({
6
+ api: 'autoZoom',
7
+ option: name,
8
+ expectation: 'must be between 0 and 1',
9
+ value,
10
+ });
11
+ }
12
+ }
2
13
  let activeRecorder = null;
3
- let insideAutoZoom = false;
4
- let currentZoomDuration = null;
5
- let currentZoomEasing = null;
6
- let currentZoomAmount = null;
7
- let currentZoomCentering = null;
8
- let currentAllowZoomingOut = null;
9
- let currentPostZoomInOutDelay = null;
10
- let lastZoomLocation = null;
14
+ let currentAutoZoomState = {
15
+ insideAutoZoom: false,
16
+ options: {},
17
+ currentZoomViewport: null,
18
+ };
11
19
  export function setActiveAutoZoomRecorder(recorder) {
12
20
  activeRecorder = recorder;
13
21
  }
14
- export function isInsideAutoZoom() {
15
- return insideAutoZoom;
16
- }
17
- export function getZoomDuration() {
18
- return currentZoomDuration;
19
- }
20
- export function getZoomEasing() {
21
- return currentZoomEasing;
22
- }
23
- export function getZoomAmount() {
24
- return currentZoomAmount;
25
- }
26
- export function getZoomCentering() {
27
- return currentZoomCentering;
22
+ export function getCurrentZoomViewport() {
23
+ return currentAutoZoomState.currentZoomViewport;
28
24
  }
29
- export function getAllowZoomingOut() {
30
- return currentAllowZoomingOut;
25
+ export function getAutoZoomState() {
26
+ return currentAutoZoomState;
31
27
  }
32
- export function getPostZoomInOutDelay() {
33
- return currentPostZoomInOutDelay;
28
+ export function setAutoZoomState(state) {
29
+ currentAutoZoomState = state;
34
30
  }
35
- export function getLastZoomLocation() {
36
- return lastZoomLocation;
37
- }
38
- export function setLastZoomLocation(loc) {
39
- lastZoomLocation = loc;
31
+ export function setCurrentZoomViewport(viewport) {
32
+ setAutoZoomState({
33
+ ...currentAutoZoomState,
34
+ currentZoomViewport: viewport,
35
+ });
40
36
  }
41
37
  function sleep(ms) {
42
38
  return new Promise((resolve) => setTimeout(resolve, ms));
43
39
  }
44
- function resolveCenteringValue(centering) {
45
- if (centering === undefined)
46
- return undefined;
47
- return centering;
40
+ function resetAutoZoomState() {
41
+ setAutoZoomState({
42
+ ...currentAutoZoomState,
43
+ insideAutoZoom: false,
44
+ options: {},
45
+ currentZoomViewport: null,
46
+ });
48
47
  }
49
48
  /**
50
49
  * Zooms the camera in on interactions inside `fn`, panning to follow each
@@ -71,47 +70,79 @@ function resolveCenteringValue(centering) {
71
70
  * ```
72
71
  */
73
72
  export async function autoZoom(fn, options) {
74
- if (insideAutoZoom) {
75
- throw new Error('Cannot nest autoZoom() calls');
73
+ if (currentAutoZoomState.insideAutoZoom) {
74
+ throw new ScreenciError('Cannot nest autoZoom() calls');
76
75
  }
77
76
  if (activeRecorder !== null) {
78
77
  activeRecorder.addAutoZoomStart(options);
79
78
  }
80
- const zoomStartTime = Date.now();
81
- insideAutoZoom = true;
82
- currentZoomDuration = options?.duration ?? DEFAULT_ZOOM_DURATION;
83
- currentZoomEasing = (options?.easing ?? DEFAULT_ZOOM_EASING);
84
- currentZoomAmount = options?.amount ?? null;
85
- currentZoomCentering = resolveCenteringValue(options?.centering) ?? null;
86
- currentAllowZoomingOut = options?.allowZoomingOut ?? null;
87
- currentPostZoomInOutDelay =
88
- options?.postZoomInOutDelay ?? DEFAULT_POST_ZOOM_IN_OUT_DELAY;
79
+ const resolvedOptions = {
80
+ ...DEFAULT_ZOOM_OPTIONS,
81
+ ...(options ?? {}),
82
+ };
83
+ assertAutoZoomUnitIntervalOption(resolvedOptions.amount, 'amount');
84
+ assertAutoZoomUnitIntervalOption(resolvedOptions.centering, 'centering');
85
+ setAutoZoomState({
86
+ ...currentAutoZoomState,
87
+ insideAutoZoom: true,
88
+ options: {
89
+ duration: resolvedOptions.duration,
90
+ easing: resolvedOptions.easing,
91
+ amount: resolvedOptions.amount,
92
+ ...(options?.centering !== undefined
93
+ ? { centering: options.centering }
94
+ : {}),
95
+ preZoomDelay: resolvedOptions.preZoomDelay,
96
+ postZoomDelay: resolvedOptions.postZoomDelay,
97
+ },
98
+ });
89
99
  try {
90
100
  await fn();
101
+ if (activeRecorder !== null) {
102
+ activeRecorder.addAutoZoomEnd(options);
103
+ if (currentAutoZoomState.currentZoomViewport !== null) {
104
+ const zoomOutStartMs = Date.now();
105
+ activeRecorder.addInput('focusChange', undefined, [
106
+ {
107
+ type: 'focusChange',
108
+ startMs: zoomOutStartMs,
109
+ endMs: zoomOutStartMs +
110
+ (currentAutoZoomState.options.duration ??
111
+ DEFAULT_ZOOM_OPTIONS.duration),
112
+ x: currentAutoZoomState.currentZoomViewport.focusPoint.x,
113
+ y: currentAutoZoomState.currentZoomViewport.focusPoint.y,
114
+ ...(currentAutoZoomState.currentZoomViewport.elementRect !==
115
+ undefined
116
+ ? {
117
+ elementRect: currentAutoZoomState.currentZoomViewport.elementRect,
118
+ }
119
+ : {}),
120
+ zoom: {
121
+ startMs: zoomOutStartMs,
122
+ endMs: zoomOutStartMs +
123
+ (currentAutoZoomState.options.duration ??
124
+ DEFAULT_ZOOM_OPTIONS.duration),
125
+ easing: currentAutoZoomState.options.easing ??
126
+ DEFAULT_ZOOM_OPTIONS.easing,
127
+ end: {
128
+ pointPx: { x: 0, y: 0 },
129
+ size: {
130
+ widthPx: currentAutoZoomState.currentZoomViewport.viewportSize.width,
131
+ heightPx: currentAutoZoomState.currentZoomViewport.viewportSize
132
+ .height,
133
+ },
134
+ },
135
+ },
136
+ },
137
+ ]);
138
+ }
139
+ }
140
+ if ((currentAutoZoomState.options.postZoomDelay ?? 0) > 0) {
141
+ await sleep(currentAutoZoomState.options.postZoomDelay ?? 0);
142
+ }
91
143
  }
92
144
  finally {
93
- insideAutoZoom = false;
94
- lastZoomLocation = null;
95
- currentZoomDuration = null;
96
- currentZoomEasing = null;
97
- currentZoomAmount = null;
98
- currentZoomCentering = null;
99
- currentAllowZoomingOut = null;
100
- currentPostZoomInOutDelay = null;
101
- }
102
- const duration = options?.duration ?? DEFAULT_ZOOM_DURATION;
103
- const postZoomInOutDelay = options?.postZoomInOutDelay ?? DEFAULT_POST_ZOOM_IN_OUT_DELAY;
104
- const elapsed = Date.now() - zoomStartTime;
105
- const remaining = duration + postZoomInOutDelay - elapsed;
106
- if (remaining > 0) {
107
- await sleep(remaining);
108
- }
109
- if (activeRecorder !== null) {
110
- activeRecorder.addAutoZoomEnd(options);
111
- }
112
- const postEndDelay = duration + postZoomInOutDelay;
113
- if (postEndDelay > 0) {
114
- await sleep(postEndDelay);
145
+ resetAutoZoomState();
115
146
  }
116
147
  }
117
148
  //# sourceMappingURL=autoZoom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autoZoom.js","sourceRoot":"","sources":["../../src/autoZoom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autoZoom.js","sourceRoot":"","sources":["../../src/autoZoom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import type { Locator } from '@playwright/test';
2
+ import type { ElementRect, FocusChangeEvent } from './events.js';
3
+ import type { AutoZoomOptions, Easing } from './types.js';
4
+ type ScrollRectLike = {
5
+ top: number;
6
+ left: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export type MouseMoveRequest = {
11
+ targetPosInElement?: {
12
+ x: number;
13
+ y: number;
14
+ } | undefined;
15
+ duration?: number;
16
+ speed?: number;
17
+ easing: Easing;
18
+ };
19
+ type ViewportSize = {
20
+ width: number;
21
+ height: number;
22
+ };
23
+ type Point = {
24
+ x: number;
25
+ y: number;
26
+ };
27
+ type FocusSnapshot = {
28
+ locatorRect: ElementRect;
29
+ viewportSize: ViewportSize;
30
+ page: {
31
+ scrollY: number;
32
+ scrollX: number;
33
+ scrollHeight: number;
34
+ scrollWidth: number;
35
+ };
36
+ ancestors: Array<{
37
+ clientHeight: number;
38
+ clientWidth: number;
39
+ scrollHeight: number;
40
+ scrollWidth: number;
41
+ scrollTop: number;
42
+ scrollLeft: number;
43
+ rect: ScrollRectLike;
44
+ }>;
45
+ };
46
+ type ScrollPlan = {
47
+ startTop: number;
48
+ startLeft: number;
49
+ targetTop: number;
50
+ targetLeft: number;
51
+ };
52
+ type PageScrollPlan = {
53
+ startY: number;
54
+ startX: number;
55
+ targetY: number;
56
+ targetX: number;
57
+ };
58
+ type AxisRange = {
59
+ min: number;
60
+ max: number;
61
+ };
62
+ type UnifiedFocusPlan = {
63
+ finalLocatorRect: ElementRect;
64
+ ancestorScrollPlans: ScrollPlan[];
65
+ pageScrollPlan: PageScrollPlan;
66
+ scrollNeeded: boolean;
67
+ zoomNeeded: boolean;
68
+ finalFocusPoint: Point;
69
+ optimalOffset: Point;
70
+ };
71
+ type ScrollAndZoomTimingPlan = {
72
+ startDelay: number;
73
+ duration: number;
74
+ };
75
+ export declare function resolveFixedFocusViewportSize(viewport: ViewportSize, amount: number): ViewportSize;
76
+ export declare function resolveIdealFocusOriginForAxis(params: {
77
+ rectStart: number;
78
+ rectSize: number;
79
+ focusSize: number;
80
+ centering: number;
81
+ }): number;
82
+ export declare function resolveIdealFocusOrigin(rect: ElementRect, focusViewport: ViewportSize, centering: number): Point;
83
+ export declare function resolveOptimalOffset(ideal: Point, actual: Point): Point;
84
+ export declare function resolveScrollAndZoomTimingPlan(params: {
85
+ viewportSize: ViewportSize;
86
+ target: Point;
87
+ startViewportPos: Point;
88
+ duration: number;
89
+ easing: Easing;
90
+ cursorTriggerEdgeThreshold: number;
91
+ cursorTriggerMaxProgress: number;
92
+ }): ScrollAndZoomTimingPlan;
93
+ export declare function resolveTargetRectPosition(params: {
94
+ containerSize: ViewportSize;
95
+ rect: ElementRect;
96
+ amount: number;
97
+ centering: number;
98
+ }): Point;
99
+ export declare function buildAncestorScrollPlans(params: {
100
+ snapshot: FocusSnapshot;
101
+ projectedRectRangeX: AxisRange;
102
+ projectedRectRangeY: AxisRange;
103
+ }): {
104
+ plans: ScrollPlan[];
105
+ accumulatedDelta: Point;
106
+ projectedRect: ElementRect;
107
+ };
108
+ export declare function buildPageScrollPlan(snapshot: FocusSnapshot, ancestorProjection: {
109
+ accumulatedDelta: Point;
110
+ projectedRect: ElementRect;
111
+ }, options: {
112
+ targetRectPositionInViewport: Point;
113
+ residualOnly?: {
114
+ x: number;
115
+ y: number;
116
+ };
117
+ }): {
118
+ plan: PageScrollPlan;
119
+ finalLocatorRect: ElementRect;
120
+ };
121
+ export declare function combineFocusPlan(params: {
122
+ snapshot: FocusSnapshot;
123
+ amount: number;
124
+ centering: number;
125
+ currentZoomEnd: NonNullable<FocusChangeEvent['zoom']>['end'];
126
+ }): UnifiedFocusPlan;
127
+ export declare function changeFocus(locator: Locator, options?: AutoZoomOptions, mouseMove?: MouseMoveRequest): Promise<FocusChangeEvent>;
128
+ export {};
129
+ //# sourceMappingURL=changeFocus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeFocus.d.ts","sourceRoot":"","sources":["../../src/changeFocus.ts"],"names":[],"mappings":"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"}