@highlight-run/rrweb 2.0.1 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/console-record.js +408 -609
- package/dist/plugins/console-record.min.js +12 -15
- package/dist/plugins/console-record.min.js.map +1 -1
- package/dist/plugins/console-replay.js +142 -271
- package/dist/plugins/console-replay.min.js +4 -15
- package/dist/plugins/console-replay.min.js.map +1 -1
- package/dist/plugins/sequential-id-record.js +23 -26
- package/dist/plugins/sequential-id-record.min.js +1 -1
- package/dist/plugins/sequential-id-record.min.js.map +1 -1
- package/dist/plugins/sequential-id-replay.js +26 -30
- package/dist/plugins/sequential-id-replay.min.js +1 -1
- package/dist/plugins/sequential-id-replay.min.js.map +1 -1
- package/dist/record/rrweb-record-pack.js +63 -146
- package/dist/record/rrweb-record-pack.min.js +3 -15
- package/dist/record/rrweb-record-pack.min.js.map +1 -1
- package/dist/record/rrweb-record.js +3002 -3118
- package/dist/record/rrweb-record.min.js +4 -15
- package/dist/record/rrweb-record.min.js.map +1 -1
- package/dist/replay/rrweb-replay-unpack.js +4354 -4054
- package/dist/replay/rrweb-replay-unpack.min.js +5 -17
- package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
- package/dist/replay/rrweb-replay.js +4286 -3984
- package/dist/replay/rrweb-replay.min.js +5 -17
- package/dist/replay/rrweb-replay.min.js.map +1 -1
- package/dist/rrweb-all.js +7634 -7453
- package/dist/rrweb-all.min.js +16 -17
- package/dist/rrweb-all.min.js.map +1 -1
- package/dist/rrweb.js +7339 -7075
- package/dist/rrweb.min.js +6 -17
- package/dist/rrweb.min.js.map +1 -1
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +12 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +7 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +31 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
- package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +18 -0
- package/es/rrweb/_virtual/image-bitmap-data-url-worker.js +6 -0
- package/es/rrweb/ext/mitt/dist/mitt.es.js +1 -1
- package/es/rrweb/ext/tslib/tslib.es6.js +38 -0
- package/es/rrweb/packages/rrdom/es/virtual-dom.js +1099 -0
- package/es/rrweb/packages/rrweb/src/index.js +6 -4
- package/es/rrweb/packages/rrweb/src/packer/base.js +1 -1
- package/es/rrweb/packages/rrweb/src/packer/pack.js +4 -5
- package/es/rrweb/packages/rrweb/src/packer/unpack.js +24 -24
- package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +175 -176
- package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +109 -128
- package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +125 -138
- package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +88 -105
- package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +19 -20
- package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +25 -25
- package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +29 -30
- package/es/rrweb/packages/rrweb/src/record/index.js +348 -373
- package/es/rrweb/packages/rrweb/src/record/mutation.js +487 -528
- package/es/rrweb/packages/rrweb/src/record/observer.js +584 -659
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +44 -73
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +166 -87
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +21 -26
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +119 -112
- package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +53 -72
- package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +38 -40
- package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +31 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +27 -23
- package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +67 -0
- package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +37 -29
- package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +58 -120
- package/es/rrweb/packages/rrweb/src/replay/index.js +1545 -1854
- package/es/rrweb/packages/rrweb/src/replay/machine.js +275 -315
- package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +216 -218
- package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +7 -7
- package/es/rrweb/packages/rrweb/src/replay/timer.js +87 -91
- package/es/rrweb/packages/rrweb/src/types.js +72 -72
- package/es/rrweb/packages/rrweb/src/utils.js +312 -506
- package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +195 -71
- package/lib/plugins/console-record.js +469 -627
- package/lib/plugins/console-replay.js +198 -268
- package/lib/plugins/sequential-id-record.js +19 -20
- package/lib/plugins/sequential-id-replay.js +25 -25
- package/lib/record/rrweb-record-pack.js +184 -139
- package/lib/record/rrweb-record.js +2473 -2425
- package/lib/replay/rrweb-replay-unpack.js +3797 -3343
- package/lib/replay/rrweb-replay.js +3742 -3288
- package/lib/rrweb-all.js +6725 -6247
- package/lib/rrweb.js +6157 -5632
- package/package.json +14 -13
- package/typings/packer/base.d.ts +1 -1
- package/typings/plugins/console/record/index.d.ts +1 -1
- package/typings/plugins/console/record/stringify.d.ts +1 -1
- package/typings/plugins/sequential-id/record/index.d.ts +1 -1
- package/typings/plugins/sequential-id/replay/index.d.ts +1 -1
- package/typings/record/iframe-manager.d.ts +3 -3
- package/typings/record/index.d.ts +1 -1
- package/typings/record/mutation.d.ts +2 -1
- package/typings/record/observers/canvas/2d.d.ts +2 -1
- package/typings/record/observers/canvas/canvas-manager.d.ts +5 -2
- package/typings/record/observers/canvas/canvas.d.ts +1 -1
- package/typings/record/observers/canvas/serialize-args.d.ts +5 -5
- package/typings/record/observers/canvas/webgl.d.ts +2 -1
- package/typings/record/shadow-dom-manager.d.ts +2 -1
- package/typings/record/stylesheet-manager.d.ts +12 -0
- package/typings/record/workers/image-bitmap-data-url-worker.d.ts +5 -0
- package/typings/replay/canvas/2d.d.ts +3 -3
- package/typings/replay/canvas/deserialize-args.d.ts +7 -0
- package/typings/replay/canvas/index.d.ts +4 -3
- package/typings/replay/canvas/webgl.d.ts +3 -5
- package/typings/replay/index.d.ts +7 -10
- package/typings/types.d.ts +45 -17
- package/typings/utils.d.ts +17 -44
- package/dist/replay/rrweb-replay-unpack.min.css +0 -2
- package/dist/replay/rrweb-replay-unpack.min.css.map +0 -1
- package/dist/replay/rrweb-replay.min.css +0 -2
- package/dist/replay/rrweb-replay.min.css.map +0 -1
- package/dist/rrweb-all.min.css +0 -2
- package/dist/rrweb-all.min.css.map +0 -1
- package/dist/rrweb.min.css +0 -2
- package/dist/rrweb.min.css.map +0 -1
- package/es/rrweb/packages/rrweb/ext/tslib/tslib.es6.js +0 -78
- package/es/rrweb/packages/rrweb/src/replay/virtual-styles.js +0 -121
- package/typings/replay/virtual-styles.d.ts +0 -43
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@highlight-run/rrweb",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "record and replay the web",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepare": "npm run prepack",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"bundle": "rollup --config",
|
|
15
15
|
"typings": "tsc -d --declarationDir typings",
|
|
16
16
|
"check-types": "tsc -noEmit",
|
|
17
|
-
"prepublish": "npm run typings && npm run bundle"
|
|
17
|
+
"prepublish": "npm run typings && npm run bundle",
|
|
18
|
+
"lint": "yarn eslint src"
|
|
18
19
|
},
|
|
19
20
|
"repository": {
|
|
20
21
|
"type": "git",
|
|
@@ -41,17 +42,17 @@
|
|
|
41
42
|
},
|
|
42
43
|
"homepage": "https://github.com/rrweb-io/rrweb#readme",
|
|
43
44
|
"devDependencies": {
|
|
44
|
-
"@rollup/plugin-node-resolve": "^
|
|
45
|
-
"@rollup/plugin-typescript": "^8.3.1",
|
|
45
|
+
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
46
46
|
"@types/chai": "^4.1.6",
|
|
47
47
|
"@types/inquirer": "0.0.43",
|
|
48
48
|
"@types/jest": "^27.4.1",
|
|
49
49
|
"@types/jest-image-snapshot": "^4.3.1",
|
|
50
|
-
"@types/jsdom": "^16.2.14",
|
|
51
50
|
"@types/node": "^17.0.21",
|
|
51
|
+
"@types/offscreencanvas": "^2019.6.4",
|
|
52
52
|
"@types/prettier": "^2.3.2",
|
|
53
53
|
"@types/puppeteer": "^5.4.4",
|
|
54
54
|
"cross-env": "^5.2.0",
|
|
55
|
+
"esbuild": "^0.14.38",
|
|
55
56
|
"fast-mhtml": "^1.1.9",
|
|
56
57
|
"identity-obj-proxy": "^3.0.0",
|
|
57
58
|
"ignore-styles": "^5.0.1",
|
|
@@ -59,27 +60,27 @@
|
|
|
59
60
|
"jest": "^27.5.1",
|
|
60
61
|
"jest-image-snapshot": "^4.5.1",
|
|
61
62
|
"jest-snapshot": "^23.6.0",
|
|
62
|
-
"jsdom": "^17.0.0",
|
|
63
|
-
"jsdom-global": "^3.0.2",
|
|
64
63
|
"prettier": "2.2.1",
|
|
65
64
|
"puppeteer": "^9.1.1",
|
|
66
|
-
"rollup": "^2.
|
|
65
|
+
"rollup": "^2.68.0",
|
|
66
|
+
"rollup-plugin-esbuild": "^4.9.1",
|
|
67
67
|
"rollup-plugin-postcss": "^3.1.1",
|
|
68
|
-
"rollup-plugin-rename-node-modules": "^1.1
|
|
69
|
-
"rollup-plugin-
|
|
68
|
+
"rollup-plugin-rename-node-modules": "^1.3.1",
|
|
69
|
+
"rollup-plugin-typescript2": "^0.31.2",
|
|
70
|
+
"rollup-plugin-web-worker-loader": "^1.6.1",
|
|
70
71
|
"ts-jest": "^27.1.3",
|
|
71
72
|
"ts-node": "^10.7.0",
|
|
72
73
|
"tslib": "^2.3.1",
|
|
73
|
-
"tslint": "^6.1.3",
|
|
74
74
|
"typescript": "^4.6.2"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@highlight-run/
|
|
77
|
+
"@highlight-run/rrdom": "^0.1.3",
|
|
78
|
+
"@highlight-run/rrweb-snapshot": "^1.1.16",
|
|
78
79
|
"@types/css-font-loading-module": "0.0.7",
|
|
79
80
|
"@xstate/fsm": "^1.4.0",
|
|
80
81
|
"base64-arraybuffer": "^1.0.1",
|
|
81
82
|
"fflate": "^0.4.4",
|
|
82
83
|
"mitt": "^1.1.3"
|
|
83
84
|
},
|
|
84
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "313812f5e01a2a5140b99a138dc13467c26b5f3a"
|
|
85
86
|
}
|
package/typings/packer/base.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { eventWithTime } from '../types';
|
|
1
|
+
import type { eventWithTime } from '../types';
|
|
2
2
|
export declare type PackFn = (event: eventWithTime) => string;
|
|
3
3
|
export declare type UnpackFn = (raw: string) => eventWithTime;
|
|
4
4
|
export declare type eventWithTimeAndPacker = eventWithTime & {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { StringifyOptions } from './index';
|
|
1
|
+
import type { StringifyOptions } from './index';
|
|
2
2
|
export declare function stringify(obj: any, stringifyOptions?: StringifyOptions): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { mutationCallBack } from '../types';
|
|
1
|
+
import type { Mirror, serializedNodeWithId } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import type { mutationCallBack } from '../types';
|
|
3
3
|
export declare class IframeManager {
|
|
4
4
|
private iframes;
|
|
5
5
|
private mutationCb;
|
|
@@ -9,5 +9,5 @@ export declare class IframeManager {
|
|
|
9
9
|
});
|
|
10
10
|
addIframe(iframeEl: HTMLIFrameElement): void;
|
|
11
11
|
addLoadListener(cb: (iframeEl: HTMLIFrameElement) => unknown): void;
|
|
12
|
-
attachIframe(iframeEl:
|
|
12
|
+
attachIframe(iframeEl: HTMLIFrameElement, childSn: serializedNodeWithId, mirror: Mirror): void;
|
|
13
13
|
}
|
|
@@ -4,6 +4,6 @@ declare namespace record {
|
|
|
4
4
|
var addCustomEvent: <T>(tag: string, payload: T) => void;
|
|
5
5
|
var freezePage: () => void;
|
|
6
6
|
var takeFullSnapshot: (isCheckout?: boolean | undefined) => void;
|
|
7
|
-
var mirror: import("
|
|
7
|
+
var mirror: import("@highlight-run/rrweb-snapshot").Mirror;
|
|
8
8
|
}
|
|
9
9
|
export default record;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mutationRecord, MutationBufferParam } from '../types';
|
|
1
|
+
import type { mutationRecord, MutationBufferParam } from '../types';
|
|
2
2
|
export default class MutationBuffer {
|
|
3
3
|
private frozen;
|
|
4
4
|
private locked;
|
|
@@ -25,6 +25,7 @@ export default class MutationBuffer {
|
|
|
25
25
|
private doc;
|
|
26
26
|
private mirror;
|
|
27
27
|
private iframeManager;
|
|
28
|
+
private stylesheetManager;
|
|
28
29
|
private shadowDomManager;
|
|
29
30
|
private canvasManager;
|
|
30
31
|
private enableStrictPrivacy;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Mirror } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import { blockClass, canvasManagerMutationCallback, IWindow, listenerHandler } from '../../../types';
|
|
2
3
|
export default function initCanvas2DMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Mirror } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import type { blockClass, canvasMutationCallback, IWindow } from '../../../types';
|
|
2
3
|
export declare type RafStamps = {
|
|
3
4
|
latestId: number;
|
|
4
5
|
invokeId: number | null;
|
|
@@ -17,13 +18,15 @@ export declare class CanvasManager {
|
|
|
17
18
|
lock(): void;
|
|
18
19
|
unlock(): void;
|
|
19
20
|
constructor(options: {
|
|
20
|
-
recordCanvas: boolean
|
|
21
|
+
recordCanvas: boolean;
|
|
21
22
|
mutationCb: canvasMutationCallback;
|
|
22
23
|
win: IWindow;
|
|
23
24
|
blockClass: blockClass;
|
|
24
25
|
mirror: Mirror;
|
|
26
|
+
sampling?: 'all' | number;
|
|
25
27
|
});
|
|
26
28
|
private processMutation;
|
|
29
|
+
private initCanvasFPSObserver;
|
|
27
30
|
private initCanvasMutationObserver;
|
|
28
31
|
private startPendingCanvasMutationFlusher;
|
|
29
32
|
private startRAFTimestamping;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { blockClass, IWindow, listenerHandler } from '../../../types';
|
|
1
|
+
import type { blockClass, IWindow, listenerHandler } from '../../../types';
|
|
2
2
|
export default function initCanvasContextObserver(win: IWindow, blockClass: blockClass): listenerHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IWindow,
|
|
2
|
-
export declare function variableListFor(ctx:
|
|
3
|
-
export declare const saveWebGLVar: (value: any, win: IWindow, ctx:
|
|
4
|
-
export declare function serializeArg(value: any, win: IWindow, ctx:
|
|
5
|
-
export declare const serializeArgs: (args: Array<any>, win: IWindow, ctx:
|
|
1
|
+
import type { IWindow, CanvasArg } from '../../../types';
|
|
2
|
+
export declare function variableListFor(ctx: RenderingContext, ctor: string): any[];
|
|
3
|
+
export declare const saveWebGLVar: (value: any, win: IWindow, ctx: RenderingContext) => number | void;
|
|
4
|
+
export declare function serializeArg(value: any, win: IWindow, ctx: RenderingContext): CanvasArg;
|
|
5
|
+
export declare const serializeArgs: (args: Array<any>, win: IWindow, ctx: RenderingContext) => CanvasArg[];
|
|
6
6
|
export declare const isInstanceOfWebGLObject: (value: any, win: IWindow) => value is WebGLTexture | WebGLShader | WebGLBuffer | WebGLVertexArrayObject | WebGLProgram | WebGLActiveInfo | WebGLUniformLocation | WebGLFramebuffer | WebGLRenderbuffer | WebGLShaderPrecisionFormat;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Mirror } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import { blockClass, canvasManagerMutationCallback, IWindow, listenerHandler } from '../../../types';
|
|
2
3
|
export default function initCanvasWebGLMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { mutationCallBack,
|
|
1
|
+
import type { mutationCallBack, scrollCallback, MutationBufferParam, SamplingStrategy } from '../types';
|
|
2
|
+
import type { Mirror } from '@highlight-run/rrweb-snapshot';
|
|
2
3
|
declare type BypassOptions = Omit<MutationBufferParam, 'doc' | 'mutationCb' | 'mirror' | 'shadowDomManager'> & {
|
|
3
4
|
sampling: SamplingStrategy;
|
|
4
5
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Mirror, serializedNodeWithId } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import type { mutationCallBack } from '../types';
|
|
3
|
+
export declare class StylesheetManager {
|
|
4
|
+
private trackedStylesheets;
|
|
5
|
+
private mutationCb;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
mutationCb: mutationCallBack;
|
|
8
|
+
});
|
|
9
|
+
addStylesheet(linkEl: HTMLLinkElement): void;
|
|
10
|
+
private trackStylesheet;
|
|
11
|
+
attachStylesheet(linkEl: HTMLLinkElement, childSn: serializedNodeWithId, mirror: Mirror): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ImageBitmapDataURLWorkerParams, ImageBitmapDataURLWorkerResponse } from '../../types';
|
|
2
|
+
export interface ImageBitmapDataURLRequestWorker {
|
|
3
|
+
postMessage: (message: ImageBitmapDataURLWorkerParams, transfer?: [ImageBitmap]) => void;
|
|
4
|
+
onmessage: (message: MessageEvent<ImageBitmapDataURLWorkerResponse>) => void;
|
|
5
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Replayer } from '../';
|
|
2
|
-
import { canvasMutationCommand } from '../../types';
|
|
1
|
+
import type { Replayer } from '../';
|
|
2
|
+
import type { canvasMutationCommand } from '../../types';
|
|
3
3
|
export default function canvasMutation({ event, mutation, target, imageMap, errorHandler, }: {
|
|
4
4
|
event: Parameters<Replayer['applyIncremental']>[0];
|
|
5
5
|
mutation: canvasMutationCommand;
|
|
6
6
|
target: HTMLCanvasElement;
|
|
7
7
|
imageMap: Replayer['imageMap'];
|
|
8
8
|
errorHandler: Replayer['warnCanvasMutationFailed'];
|
|
9
|
-
}): void
|
|
9
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Replayer } from '../';
|
|
2
|
+
import type { CanvasArg, SerializedCanvasArg } from '../../types';
|
|
3
|
+
export declare function variableListFor(ctx: CanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext, ctor: string): any[];
|
|
4
|
+
export declare function isSerializedArg(arg: unknown): arg is SerializedCanvasArg;
|
|
5
|
+
export declare function deserializeArg(imageMap: Replayer['imageMap'], ctx: CanvasRenderingContext2D | WebGLRenderingContext | WebGL2RenderingContext | null, preload?: {
|
|
6
|
+
isUnchanged: boolean;
|
|
7
|
+
}): (arg: CanvasArg) => Promise<any>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Replayer } from '..';
|
|
1
|
+
import type { Replayer } from '..';
|
|
2
2
|
import { canvasMutationData } from '../../types';
|
|
3
|
-
export default function canvasMutation({ event, mutation, target, imageMap, errorHandler, }: {
|
|
3
|
+
export default function canvasMutation({ event, mutation, target, imageMap, canvasEventMap, errorHandler, }: {
|
|
4
4
|
event: Parameters<Replayer['applyIncremental']>[0];
|
|
5
5
|
mutation: canvasMutationData;
|
|
6
6
|
target: HTMLCanvasElement;
|
|
7
7
|
imageMap: Replayer['imageMap'];
|
|
8
|
+
canvasEventMap: Replayer['canvasEventMap'];
|
|
8
9
|
errorHandler: Replayer['warnCanvasMutationFailed'];
|
|
9
|
-
}): void
|
|
10
|
+
}): Promise<void>;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { Replayer } from '../';
|
|
2
|
-
import { CanvasContext, canvasMutationCommand
|
|
3
|
-
export declare function variableListFor(ctx: WebGLRenderingContext | WebGL2RenderingContext, ctor: string): any[];
|
|
4
|
-
export declare function deserializeArg(imageMap: Replayer['imageMap'], ctx: WebGLRenderingContext | WebGL2RenderingContext): (arg: SerializedWebGlArg) => any;
|
|
1
|
+
import type { Replayer } from '../';
|
|
2
|
+
import { CanvasContext, canvasMutationCommand } from '../../types';
|
|
5
3
|
export default function webglMutation({ mutation, target, type, imageMap, errorHandler, }: {
|
|
6
4
|
mutation: canvasMutationCommand;
|
|
7
5
|
target: HTMLCanvasElement;
|
|
8
6
|
type: CanvasContext;
|
|
9
7
|
imageMap: Replayer['imageMap'];
|
|
10
8
|
errorHandler: Replayer['warnCanvasMutationFailed'];
|
|
11
|
-
}): void
|
|
9
|
+
}): Promise<void>;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { Mirror } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import { RRDocument } from '@highlight-run/rrdom/es/virtual-dom';
|
|
1
3
|
import { Timer } from './timer';
|
|
2
4
|
import { createPlayerService, createSpeedService } from './machine';
|
|
3
|
-
import { eventWithTime, playerConfig, playerMetaData, Handler,
|
|
5
|
+
import { eventWithTime, playerConfig, playerMetaData, Handler, SessionInterval } from '../types';
|
|
4
6
|
import './styles/style.css';
|
|
5
7
|
export declare class Replayer {
|
|
6
8
|
wrapper: HTMLDivElement;
|
|
@@ -9,6 +11,8 @@ export declare class Replayer {
|
|
|
9
11
|
speedService: ReturnType<typeof createSpeedService>;
|
|
10
12
|
get timer(): Timer;
|
|
11
13
|
config: playerConfig;
|
|
14
|
+
usingVirtualDom: boolean;
|
|
15
|
+
virtualDom: RRDocument;
|
|
12
16
|
private mouse;
|
|
13
17
|
private mouseTail;
|
|
14
18
|
private tailPositions;
|
|
@@ -17,12 +21,9 @@ export declare class Replayer {
|
|
|
17
21
|
private activityIntervals;
|
|
18
22
|
private inactiveEndTimestamp;
|
|
19
23
|
private legacy_missingNodeRetryMap;
|
|
20
|
-
private treeIndex;
|
|
21
|
-
private fragmentParentMap;
|
|
22
|
-
private elementStateMap;
|
|
23
|
-
private virtualStyleRulesMap;
|
|
24
24
|
private cache;
|
|
25
25
|
private imageMap;
|
|
26
|
+
private canvasEventMap;
|
|
26
27
|
private mirror;
|
|
27
28
|
private firstFullSnapshot;
|
|
28
29
|
private newDocumentQueue;
|
|
@@ -60,21 +61,17 @@ export declare class Replayer {
|
|
|
60
61
|
private getImageArgs;
|
|
61
62
|
private preloadAllImages;
|
|
62
63
|
private preloadImages;
|
|
64
|
+
private deserializeAndPreloadCanvasEvents;
|
|
63
65
|
private applyIncremental;
|
|
64
66
|
private applyMutation;
|
|
65
67
|
private applyScroll;
|
|
66
68
|
private applyInput;
|
|
67
|
-
private applyText;
|
|
68
69
|
private legacy_resolveMissingNode;
|
|
69
70
|
private moveAndHover;
|
|
70
71
|
private drawMouseTail;
|
|
71
72
|
private hoverElements;
|
|
72
73
|
private isUserInteraction;
|
|
73
74
|
private backToNormal;
|
|
74
|
-
private restoreRealParent;
|
|
75
|
-
private storeState;
|
|
76
|
-
private restoreState;
|
|
77
|
-
private restoreNodeSheet;
|
|
78
75
|
private warnNodeNotFound;
|
|
79
76
|
private warnCanvasMutationFailed;
|
|
80
77
|
private debugNodeNotFound;
|
package/typings/types.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { serializedNodeWithId,
|
|
2
|
-
import { PackFn, UnpackFn } from './packer/base';
|
|
3
|
-
import { IframeManager } from './record/iframe-manager';
|
|
4
|
-
import { ShadowDomManager } from './record/shadow-dom-manager';
|
|
1
|
+
import type { serializedNodeWithId, Mirror, INode, MaskInputOptions, SlimDOMOptions, MaskInputFn, MaskTextFn } from '@highlight-run/rrweb-snapshot';
|
|
2
|
+
import type { PackFn, UnpackFn } from './packer/base';
|
|
3
|
+
import type { IframeManager } from './record/iframe-manager';
|
|
4
|
+
import type { ShadowDomManager } from './record/shadow-dom-manager';
|
|
5
5
|
import type { Replayer } from './replay';
|
|
6
|
-
import {
|
|
6
|
+
import type { RRNode } from '@highlight-run/rrdom/es/virtual-dom';
|
|
7
|
+
import type { CanvasManager } from './record/observers/canvas/canvas-manager';
|
|
8
|
+
import type { StylesheetManager } from './record/stylesheet-manager';
|
|
7
9
|
export declare enum EventType {
|
|
8
10
|
DomContentLoaded = 0,
|
|
9
11
|
Load = 1,
|
|
@@ -121,6 +123,10 @@ export declare type eventWithTime = event & {
|
|
|
121
123
|
timestamp: number;
|
|
122
124
|
delay?: number;
|
|
123
125
|
};
|
|
126
|
+
export declare type canvasEventWithTime = eventWithTime & {
|
|
127
|
+
type: EventType.IncrementalSnapshot;
|
|
128
|
+
data: canvasMutationData;
|
|
129
|
+
};
|
|
124
130
|
export declare type blockClass = string | RegExp;
|
|
125
131
|
export declare type maskTextClass = string | RegExp;
|
|
126
132
|
export declare type SamplingStrategy = Partial<{
|
|
@@ -130,6 +136,7 @@ export declare type SamplingStrategy = Partial<{
|
|
|
130
136
|
scroll: number;
|
|
131
137
|
media: number;
|
|
132
138
|
input: 'all' | 'last';
|
|
139
|
+
canvas: 'all' | number;
|
|
133
140
|
}>;
|
|
134
141
|
export declare type RecordPlugin<TOptions = unknown> = {
|
|
135
142
|
name: string;
|
|
@@ -194,6 +201,7 @@ export declare type observerParam = {
|
|
|
194
201
|
doc: Document;
|
|
195
202
|
mirror: Mirror;
|
|
196
203
|
iframeManager: IframeManager;
|
|
204
|
+
stylesheetManager: StylesheetManager;
|
|
197
205
|
shadowDomManager: ShadowDomManager;
|
|
198
206
|
canvasManager: CanvasManager;
|
|
199
207
|
enableStrictPrivacy: boolean;
|
|
@@ -203,7 +211,7 @@ export declare type observerParam = {
|
|
|
203
211
|
options: unknown;
|
|
204
212
|
}>;
|
|
205
213
|
};
|
|
206
|
-
export declare type MutationBufferParam = Pick<observerParam, 'mutationCb' | 'blockClass' | 'blockSelector' | 'maskTextClass' | 'maskTextSelector' | 'inlineStylesheet' | 'maskInputOptions' | 'maskTextFn' | 'maskInputFn' | 'recordCanvas' | 'inlineImages' | 'slimDOMOptions' | 'doc' | 'mirror' | 'iframeManager' | 'shadowDomManager' | 'canvasManager' | 'enableStrictPrivacy'>;
|
|
214
|
+
export declare type MutationBufferParam = Pick<observerParam, 'mutationCb' | 'blockClass' | 'blockSelector' | 'maskTextClass' | 'maskTextSelector' | 'inlineStylesheet' | 'maskInputOptions' | 'maskTextFn' | 'maskInputFn' | 'recordCanvas' | 'inlineImages' | 'slimDOMOptions' | 'doc' | 'mirror' | 'iframeManager' | 'stylesheetManager' | 'shadowDomManager' | 'canvasManager' | 'enableStrictPrivacy'>;
|
|
207
215
|
export declare type hooksParam = {
|
|
208
216
|
mutation?: mutationCallBack;
|
|
209
217
|
mousemove?: mousemoveCallBack;
|
|
@@ -299,19 +307,24 @@ export declare enum CanvasContext {
|
|
|
299
307
|
WebGL = 1,
|
|
300
308
|
WebGL2 = 2
|
|
301
309
|
}
|
|
302
|
-
export declare type
|
|
310
|
+
export declare type SerializedCanvasArg = {
|
|
303
311
|
rr_type: 'ArrayBuffer';
|
|
304
312
|
base64: string;
|
|
313
|
+
} | {
|
|
314
|
+
rr_type: 'Blob';
|
|
315
|
+
data: Array<CanvasArg>;
|
|
316
|
+
type?: string;
|
|
305
317
|
} | {
|
|
306
318
|
rr_type: string;
|
|
307
319
|
src: string;
|
|
308
320
|
} | {
|
|
309
321
|
rr_type: string;
|
|
310
|
-
args:
|
|
322
|
+
args: Array<CanvasArg>;
|
|
311
323
|
} | {
|
|
312
324
|
rr_type: string;
|
|
313
325
|
index: number;
|
|
314
|
-
}
|
|
326
|
+
};
|
|
327
|
+
export declare type CanvasArg = SerializedCanvasArg | string | number | boolean | null | CanvasArg[];
|
|
315
328
|
declare type mouseInteractionParam = {
|
|
316
329
|
type: MouseInteractions;
|
|
317
330
|
id: number;
|
|
@@ -369,6 +382,21 @@ export declare type canvasMutationWithType = {
|
|
|
369
382
|
} & canvasMutationCommand;
|
|
370
383
|
export declare type canvasMutationCallback = (p: canvasMutationParam) => void;
|
|
371
384
|
export declare type canvasManagerMutationCallback = (target: HTMLCanvasElement, p: canvasMutationWithType) => void;
|
|
385
|
+
export declare type ImageBitmapDataURLWorkerParams = {
|
|
386
|
+
id: number;
|
|
387
|
+
bitmap: ImageBitmap;
|
|
388
|
+
width: number;
|
|
389
|
+
height: number;
|
|
390
|
+
};
|
|
391
|
+
export declare type ImageBitmapDataURLWorkerResponse = {
|
|
392
|
+
id: number;
|
|
393
|
+
} | {
|
|
394
|
+
id: number;
|
|
395
|
+
type: string;
|
|
396
|
+
base64: string;
|
|
397
|
+
width: number;
|
|
398
|
+
height: number;
|
|
399
|
+
};
|
|
372
400
|
export declare type fontParam = {
|
|
373
401
|
family: string;
|
|
374
402
|
fontSource: string;
|
|
@@ -409,11 +437,13 @@ export declare type DocumentDimension = {
|
|
|
409
437
|
relativeScale: number;
|
|
410
438
|
absoluteScale: number;
|
|
411
439
|
};
|
|
412
|
-
export declare type
|
|
413
|
-
map:
|
|
414
|
-
|
|
440
|
+
export declare type DeprecatedMirror = {
|
|
441
|
+
map: {
|
|
442
|
+
[key: number]: INode;
|
|
443
|
+
};
|
|
444
|
+
getId: (n: Node) => number;
|
|
415
445
|
getNode: (id: number) => INode | null;
|
|
416
|
-
removeNodeFromMap: (n:
|
|
446
|
+
removeNodeFromMap: (n: Node) => void;
|
|
417
447
|
has: (id: number) => boolean;
|
|
418
448
|
reset: () => void;
|
|
419
449
|
};
|
|
@@ -449,6 +479,7 @@ export declare type playerConfig = {
|
|
|
449
479
|
strokeStyle?: string;
|
|
450
480
|
};
|
|
451
481
|
unpackFn?: UnpackFn;
|
|
482
|
+
useVirtualDom: boolean;
|
|
452
483
|
plugins?: ReplayPlugin[];
|
|
453
484
|
inactiveThreshold: number;
|
|
454
485
|
inactiveSkipTime: number;
|
|
@@ -459,7 +490,7 @@ export declare type playerMetaData = {
|
|
|
459
490
|
totalTime: number;
|
|
460
491
|
};
|
|
461
492
|
export declare type missingNode = {
|
|
462
|
-
node: Node;
|
|
493
|
+
node: Node | RRNode;
|
|
463
494
|
mutation: addedNodeMutation;
|
|
464
495
|
};
|
|
465
496
|
export declare type missingNodeMap = {
|
|
@@ -494,9 +525,6 @@ export declare enum ReplayerEvents {
|
|
|
494
525
|
StateChange = "state-change",
|
|
495
526
|
PlayBack = "play-back"
|
|
496
527
|
}
|
|
497
|
-
export declare type ElementState = {
|
|
498
|
-
scroll?: [number, number];
|
|
499
|
-
};
|
|
500
528
|
export declare type KeepIframeSrcFn = (src: string) => boolean;
|
|
501
529
|
declare global {
|
|
502
530
|
interface Window {
|
package/typings/utils.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { throttleOptions, listenerHandler, hookResetter, blockClass, addedNodeMutation, DocumentDimension, IWindow, DeprecatedMirror, textMutation } from './types';
|
|
2
|
+
import type { IMirror, Mirror } from '@highlight-run/rrweb-snapshot';
|
|
3
|
+
import type { RRNode, RRIFrameElement } from '@highlight-run/rrdom/es/virtual-dom';
|
|
3
4
|
export declare function on(type: string, fn: EventListenerOrEventListenerObject, target?: Document | IWindow): listenerHandler;
|
|
4
|
-
export declare
|
|
5
|
-
export declare let _mirror: Mirror;
|
|
5
|
+
export declare let _mirror: DeprecatedMirror;
|
|
6
6
|
export declare function throttle<T>(func: (arg: T) => void, wait: number, options?: throttleOptions): (arg: T) => void;
|
|
7
7
|
export declare function hookSetter<T>(target: T, key: string | number | symbol, d: PropertyDescriptor, isRevoked?: boolean, win?: Window & typeof globalThis): hookResetter;
|
|
8
8
|
export declare function patch(source: {
|
|
@@ -12,42 +12,11 @@ export declare function getWindowHeight(): number;
|
|
|
12
12
|
export declare function getWindowWidth(): number;
|
|
13
13
|
export declare const isCanvasNode: (node: Node | null) => boolean;
|
|
14
14
|
export declare function isBlocked(node: Node | null, blockClass: blockClass): boolean;
|
|
15
|
-
export declare function
|
|
16
|
-
export declare function
|
|
15
|
+
export declare function isSerialized(n: Node, mirror: Mirror): boolean;
|
|
16
|
+
export declare function isIgnored(n: Node, mirror: Mirror): boolean;
|
|
17
|
+
export declare function isAncestorRemoved(target: Node, mirror: Mirror): boolean;
|
|
17
18
|
export declare function isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent;
|
|
18
19
|
export declare function polyfill(win?: Window & typeof globalThis): void;
|
|
19
|
-
export declare type TreeNode = {
|
|
20
|
-
id: number;
|
|
21
|
-
mutation: addedNodeMutation;
|
|
22
|
-
parent?: TreeNode;
|
|
23
|
-
children: Record<number, TreeNode>;
|
|
24
|
-
texts: textMutation[];
|
|
25
|
-
attributes: attributeMutation[];
|
|
26
|
-
};
|
|
27
|
-
export declare class TreeIndex {
|
|
28
|
-
tree: Record<number, TreeNode>;
|
|
29
|
-
private removeNodeMutations;
|
|
30
|
-
private textMutations;
|
|
31
|
-
private attributeMutations;
|
|
32
|
-
private indexes;
|
|
33
|
-
private removeIdSet;
|
|
34
|
-
private scrollMap;
|
|
35
|
-
private inputMap;
|
|
36
|
-
constructor();
|
|
37
|
-
add(mutation: addedNodeMutation): void;
|
|
38
|
-
remove(mutation: removedNodeMutation, mirror: Mirror): void;
|
|
39
|
-
text(mutation: textMutation): void;
|
|
40
|
-
attribute(mutation: attributeMutation): void;
|
|
41
|
-
scroll(d: scrollData): void;
|
|
42
|
-
input(d: inputData): void;
|
|
43
|
-
flush(): {
|
|
44
|
-
mutationData: mutationData;
|
|
45
|
-
scrollMap: TreeIndex['scrollMap'];
|
|
46
|
-
inputMap: TreeIndex['inputMap'];
|
|
47
|
-
};
|
|
48
|
-
private reset;
|
|
49
|
-
idRemoved(id: number): boolean;
|
|
50
|
-
}
|
|
51
20
|
declare type ResolveTree = {
|
|
52
21
|
value: addedNodeMutation;
|
|
53
22
|
children: ResolveTree[];
|
|
@@ -55,16 +24,20 @@ declare type ResolveTree = {
|
|
|
55
24
|
};
|
|
56
25
|
export declare function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[];
|
|
57
26
|
export declare function iterateResolveTree(tree: ResolveTree, cb: (mutation: addedNodeMutation) => unknown): void;
|
|
58
|
-
declare type HTMLIFrameINode = HTMLIFrameElement & {
|
|
59
|
-
__sn: serializedNodeWithId;
|
|
60
|
-
};
|
|
61
27
|
export declare type AppendedIframe = {
|
|
62
28
|
mutationInQueue: addedNodeMutation;
|
|
63
|
-
builtNode:
|
|
29
|
+
builtNode: HTMLIFrameElement | RRIFrameElement;
|
|
64
30
|
};
|
|
65
|
-
export declare function
|
|
31
|
+
export declare function isSerializedIframe<TNode extends Node | RRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
|
|
32
|
+
export declare function isSerializedStylesheet<TNode extends Node | RRNode>(n: TNode, mirror: IMirror<TNode>): boolean;
|
|
66
33
|
export declare function getBaseDimension(node: Node, rootIframe: Node): DocumentDimension;
|
|
67
|
-
export declare function hasShadowRoot<T extends Node>(n: T): n is T & {
|
|
34
|
+
export declare function hasShadowRoot<T extends Node | RRNode>(n: T): n is T & {
|
|
68
35
|
shadowRoot: ShadowRoot;
|
|
69
36
|
};
|
|
37
|
+
export declare function getNestedRule(rules: CSSRuleList, position: number[]): CSSGroupingRule;
|
|
38
|
+
export declare function getPositionsAndIndex(nestedIndex: number[]): {
|
|
39
|
+
positions: number[];
|
|
40
|
+
index: number | undefined;
|
|
41
|
+
};
|
|
42
|
+
export declare function uniqueTextMutations(mutations: textMutation[]): textMutation[];
|
|
70
43
|
export {};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjcgNSAxOCAxOCIgaGVpZ2h0PSIzMDAiIHdpZHRoPSIzMDAiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04LjIgMjAuOXYtMTZsMTEuNiAxMS42SDEzbC0uNC4xeiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xNy4zIDIxLjZsLTMuNiAxLjVMOSAxMmwzLjctMS41eiIvPjxwYXRoIGQ9Ik0xMS4wMyAxNC4yOTNsMS44NDUtLjc3NCAzLjA5NiA3LjM3Ni0xLjg0NC43NzV6Ii8+PHBhdGggZD0iTTkuMiA3LjN2MTEuMmwzLTIuOS40LS4xaDQuOHoiLz48L3N2Zz4=");border-color:transparent}.replayer-mouse:after{background:transparent}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-radius:100%;margin-left:-37px;margin-top:-37px;border:4px solid rgba(73,80,246,0);transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px;background:transparent}75%{width:24px;height:24px;opacity:.8;background:#dc2626}to{background:transparent}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}
|
|
2
|
-
/*# sourceMappingURL=rrweb-replay-unpack.min.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,kBACE,iBACF,CACA,gBACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,2CAA+C,CAC/C,uBAAwB,CACxB,uBAAkC,CAClC,2BAA4B,CAC5B,0cAAuzB,CACvzB,wBACF,CAEA,sBACE,sBACF,CAEA,6BACE,iCACF,CACA,6BACE,qBAAsB,CACtB,UAAW,CACX,WAAY,CAGZ,kBAAmB,CACnB,iBAAkB,CAClB,gBAAiB,CACjB,kCAAkC,CAClC,oEACF,CACA,0CACE,oBAAkC,CAClC,wEACF,CACA,mCACE,SACF,CACA,0CACE,uCACF,CACA,qBACE,iBAAkB,CAClB,mBACF,CAEA,iBACE,GACE,UAAY,CACZ,UAAW,CACX,WAAY,CACZ,sBACF,CACA,IACE,UAAW,CACX,WAAY,CACZ,UAAY,CACZ,kBACF,CACA,GACE,sBACF,CACF,CAEA,uBACE,GACE,SAAU,CACV,UAAW,CACX,WACF,CACA,IACE,UAAY,CACZ,UAAW,CACX,WACF,CACF","file":"rrweb-replay-unpack.min.css","sourcesContent":[".replayer-wrapper {\n position: relative;\n}\n.replayer-mouse {\n position: absolute;\n width: 20px;\n height: 20px;\n transition: left 0.05s linear, top 0.05s linear;\n background-size: contain;\n background-position: center center;\n background-repeat: no-repeat;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iNyA1IDE4IDE4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyOCAyOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgaGVpZ2h0PSIzMDBweCIgd2lkdGg9IjMwMHB4Ij4NCjxwb2x5Z29uIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iOC4yLDIwLjkgOC4yLDQuOSAxOS44LDE2LjUgMTMsMTYuNSAxMi42LDE2LjYgIi8+DQo8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjE3LjMsMjEuNiAxMy43LDIzLjEgOSwxMiAxMi43LDEwLjUgIi8+DQo8cmVjdCB4PSIxMi41IiB5PSIxMy42IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjkyMjEgLTAuMzg3MSAwLjM4NzEgMC45MjIxIC01Ljc2MDUgNi41OTA5KSIgd2lkdGg9IjIiIGhlaWdodD0iOCIvPg0KPHBvbHlnb24gcG9pbnRzPSI5LjIsNy4zIDkuMiwxOC41IDEyLjIsMTUuNiAxMi42LDE1LjUgMTcuNCwxNS41ICIvPg0KPC9zdmc+DQo=');\n border-color: transparent; /* otherwise we transition from black when .touch-device class is added */\n}\n\n.replayer-mouse::after {\n background: transparent;\n}\n\n.replayer-mouse.active::after {\n animation: click 0.2s ease-in-out 1;\n}\n.replayer-mouse.touch-device {\n background-image: none; /* there's no passive cursor on touch-only screens */\n width: 70px;\n height: 70px;\n border-width: 4px;\n border-style: solid;\n border-radius: 100%;\n margin-left: -37px;\n margin-top: -37px;\n border-color: rgba(73, 80, 246, 0);\n transition: left 0s linear, top 0s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device.touch-active {\n border-color: rgba(73, 80, 246, 1);\n transition: left 0.25s linear, top 0.25s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device::after {\n opacity: 0; /* there's no passive cursor on touch-only screens */\n}\n.replayer-mouse.touch-device.active::after {\n animation: touch-click 0.2s ease-in-out 1;\n}\n.replayer-mouse-tail {\n position: absolute;\n pointer-events: none;\n}\n\n@keyframes click {\n 0% {\n opacity: 0.3;\n width: 20px;\n height: 20px;\n background: transparent;\n }\n 75% {\n width: 24px;\n height: 24px;\n opacity: 0.8;\n background: #dc2626;\n }\n 100% {\n background: transparent;\n }\n}\n\n@keyframes touch-click {\n 0% {\n opacity: 0;\n width: 20px;\n height: 20px;\n }\n 50% {\n opacity: 0.5;\n width: 10px;\n height: 10px;\n }\n}\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjcgNSAxOCAxOCIgaGVpZ2h0PSIzMDAiIHdpZHRoPSIzMDAiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04LjIgMjAuOXYtMTZsMTEuNiAxMS42SDEzbC0uNC4xeiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xNy4zIDIxLjZsLTMuNiAxLjVMOSAxMmwzLjctMS41eiIvPjxwYXRoIGQ9Ik0xMS4wMyAxNC4yOTNsMS44NDUtLjc3NCAzLjA5NiA3LjM3Ni0xLjg0NC43NzV6Ii8+PHBhdGggZD0iTTkuMiA3LjN2MTEuMmwzLTIuOS40LS4xaDQuOHoiLz48L3N2Zz4=");border-color:transparent}.replayer-mouse:after{background:transparent}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-radius:100%;margin-left:-37px;margin-top:-37px;border:4px solid rgba(73,80,246,0);transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px;background:transparent}75%{width:24px;height:24px;opacity:.8;background:#dc2626}to{background:transparent}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}
|
|
2
|
-
/*# sourceMappingURL=rrweb-replay.min.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,kBACE,iBACF,CACA,gBACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,2CAA+C,CAC/C,uBAAwB,CACxB,uBAAkC,CAClC,2BAA4B,CAC5B,0cAAuzB,CACvzB,wBACF,CAEA,sBACE,sBACF,CAEA,6BACE,iCACF,CACA,6BACE,qBAAsB,CACtB,UAAW,CACX,WAAY,CAGZ,kBAAmB,CACnB,iBAAkB,CAClB,gBAAiB,CACjB,kCAAkC,CAClC,oEACF,CACA,0CACE,oBAAkC,CAClC,wEACF,CACA,mCACE,SACF,CACA,0CACE,uCACF,CACA,qBACE,iBAAkB,CAClB,mBACF,CAEA,iBACE,GACE,UAAY,CACZ,UAAW,CACX,WAAY,CACZ,sBACF,CACA,IACE,UAAW,CACX,WAAY,CACZ,UAAY,CACZ,kBACF,CACA,GACE,sBACF,CACF,CAEA,uBACE,GACE,SAAU,CACV,UAAW,CACX,WACF,CACA,IACE,UAAY,CACZ,UAAW,CACX,WACF,CACF","file":"rrweb-replay.min.css","sourcesContent":[".replayer-wrapper {\n position: relative;\n}\n.replayer-mouse {\n position: absolute;\n width: 20px;\n height: 20px;\n transition: left 0.05s linear, top 0.05s linear;\n background-size: contain;\n background-position: center center;\n background-repeat: no-repeat;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iNyA1IDE4IDE4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyOCAyOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgaGVpZ2h0PSIzMDBweCIgd2lkdGg9IjMwMHB4Ij4NCjxwb2x5Z29uIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iOC4yLDIwLjkgOC4yLDQuOSAxOS44LDE2LjUgMTMsMTYuNSAxMi42LDE2LjYgIi8+DQo8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjE3LjMsMjEuNiAxMy43LDIzLjEgOSwxMiAxMi43LDEwLjUgIi8+DQo8cmVjdCB4PSIxMi41IiB5PSIxMy42IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjkyMjEgLTAuMzg3MSAwLjM4NzEgMC45MjIxIC01Ljc2MDUgNi41OTA5KSIgd2lkdGg9IjIiIGhlaWdodD0iOCIvPg0KPHBvbHlnb24gcG9pbnRzPSI5LjIsNy4zIDkuMiwxOC41IDEyLjIsMTUuNiAxMi42LDE1LjUgMTcuNCwxNS41ICIvPg0KPC9zdmc+DQo=');\n border-color: transparent; /* otherwise we transition from black when .touch-device class is added */\n}\n\n.replayer-mouse::after {\n background: transparent;\n}\n\n.replayer-mouse.active::after {\n animation: click 0.2s ease-in-out 1;\n}\n.replayer-mouse.touch-device {\n background-image: none; /* there's no passive cursor on touch-only screens */\n width: 70px;\n height: 70px;\n border-width: 4px;\n border-style: solid;\n border-radius: 100%;\n margin-left: -37px;\n margin-top: -37px;\n border-color: rgba(73, 80, 246, 0);\n transition: left 0s linear, top 0s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device.touch-active {\n border-color: rgba(73, 80, 246, 1);\n transition: left 0.25s linear, top 0.25s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device::after {\n opacity: 0; /* there's no passive cursor on touch-only screens */\n}\n.replayer-mouse.touch-device.active::after {\n animation: touch-click 0.2s ease-in-out 1;\n}\n.replayer-mouse-tail {\n position: absolute;\n pointer-events: none;\n}\n\n@keyframes click {\n 0% {\n opacity: 0.3;\n width: 20px;\n height: 20px;\n background: transparent;\n }\n 75% {\n width: 24px;\n height: 24px;\n opacity: 0.8;\n background: #dc2626;\n }\n 100% {\n background: transparent;\n }\n}\n\n@keyframes touch-click {\n 0% {\n opacity: 0;\n width: 20px;\n height: 20px;\n }\n 50% {\n opacity: 0.5;\n width: 10px;\n height: 10px;\n }\n}\n"]}
|
package/dist/rrweb-all.min.css
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjcgNSAxOCAxOCIgaGVpZ2h0PSIzMDAiIHdpZHRoPSIzMDAiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04LjIgMjAuOXYtMTZsMTEuNiAxMS42SDEzbC0uNC4xeiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xNy4zIDIxLjZsLTMuNiAxLjVMOSAxMmwzLjctMS41eiIvPjxwYXRoIGQ9Ik0xMS4wMyAxNC4yOTNsMS44NDUtLjc3NCAzLjA5NiA3LjM3Ni0xLjg0NC43NzV6Ii8+PHBhdGggZD0iTTkuMiA3LjN2MTEuMmwzLTIuOS40LS4xaDQuOHoiLz48L3N2Zz4=");border-color:transparent}.replayer-mouse:after{background:transparent}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-radius:100%;margin-left:-37px;margin-top:-37px;border:4px solid rgba(73,80,246,0);transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px;background:transparent}75%{width:24px;height:24px;opacity:.8;background:#dc2626}to{background:transparent}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}
|
|
2
|
-
/*# sourceMappingURL=rrweb-all.min.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA,kBACE,iBACF,CACA,gBACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,2CAA+C,CAC/C,uBAAwB,CACxB,uBAAkC,CAClC,2BAA4B,CAC5B,0cAAuzB,CACvzB,wBACF,CAEA,sBACE,sBACF,CAEA,6BACE,iCACF,CACA,6BACE,qBAAsB,CACtB,UAAW,CACX,WAAY,CAGZ,kBAAmB,CACnB,iBAAkB,CAClB,gBAAiB,CACjB,kCAAkC,CAClC,oEACF,CACA,0CACE,oBAAkC,CAClC,wEACF,CACA,mCACE,SACF,CACA,0CACE,uCACF,CACA,qBACE,iBAAkB,CAClB,mBACF,CAEA,iBACE,GACE,UAAY,CACZ,UAAW,CACX,WAAY,CACZ,sBACF,CACA,IACE,UAAW,CACX,WAAY,CACZ,UAAY,CACZ,kBACF,CACA,GACE,sBACF,CACF,CAEA,uBACE,GACE,SAAU,CACV,UAAW,CACX,WACF,CACA,IACE,UAAY,CACZ,UAAW,CACX,WACF,CACF","file":"rrweb-all.min.css","sourcesContent":[".replayer-wrapper {\n position: relative;\n}\n.replayer-mouse {\n position: absolute;\n width: 20px;\n height: 20px;\n transition: left 0.05s linear, top 0.05s linear;\n background-size: contain;\n background-position: center center;\n background-repeat: no-repeat;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iNyA1IDE4IDE4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyOCAyOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgaGVpZ2h0PSIzMDBweCIgd2lkdGg9IjMwMHB4Ij4NCjxwb2x5Z29uIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iOC4yLDIwLjkgOC4yLDQuOSAxOS44LDE2LjUgMTMsMTYuNSAxMi42LDE2LjYgIi8+DQo8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjE3LjMsMjEuNiAxMy43LDIzLjEgOSwxMiAxMi43LDEwLjUgIi8+DQo8cmVjdCB4PSIxMi41IiB5PSIxMy42IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjkyMjEgLTAuMzg3MSAwLjM4NzEgMC45MjIxIC01Ljc2MDUgNi41OTA5KSIgd2lkdGg9IjIiIGhlaWdodD0iOCIvPg0KPHBvbHlnb24gcG9pbnRzPSI5LjIsNy4zIDkuMiwxOC41IDEyLjIsMTUuNiAxMi42LDE1LjUgMTcuNCwxNS41ICIvPg0KPC9zdmc+DQo=');\n border-color: transparent; /* otherwise we transition from black when .touch-device class is added */\n}\n\n.replayer-mouse::after {\n background: transparent;\n}\n\n.replayer-mouse.active::after {\n animation: click 0.2s ease-in-out 1;\n}\n.replayer-mouse.touch-device {\n background-image: none; /* there's no passive cursor on touch-only screens */\n width: 70px;\n height: 70px;\n border-width: 4px;\n border-style: solid;\n border-radius: 100%;\n margin-left: -37px;\n margin-top: -37px;\n border-color: rgba(73, 80, 246, 0);\n transition: left 0s linear, top 0s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device.touch-active {\n border-color: rgba(73, 80, 246, 1);\n transition: left 0.25s linear, top 0.25s linear, border-color 0.2s ease-in-out;\n}\n.replayer-mouse.touch-device::after {\n opacity: 0; /* there's no passive cursor on touch-only screens */\n}\n.replayer-mouse.touch-device.active::after {\n animation: touch-click 0.2s ease-in-out 1;\n}\n.replayer-mouse-tail {\n position: absolute;\n pointer-events: none;\n}\n\n@keyframes click {\n 0% {\n opacity: 0.3;\n width: 20px;\n height: 20px;\n background: transparent;\n }\n 75% {\n width: 24px;\n height: 24px;\n opacity: 0.8;\n background: #dc2626;\n }\n 100% {\n background: transparent;\n }\n}\n\n@keyframes touch-click {\n 0% {\n opacity: 0;\n width: 20px;\n height: 20px;\n }\n 50% {\n opacity: 0.5;\n width: 10px;\n height: 10px;\n }\n}\n"]}
|
package/dist/rrweb.min.css
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
.replayer-wrapper{position:relative}.replayer-mouse{position:absolute;width:20px;height:20px;transition:left .05s linear,top .05s linear;background-size:contain;background-position:50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjcgNSAxOCAxOCIgaGVpZ2h0PSIzMDAiIHdpZHRoPSIzMDAiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04LjIgMjAuOXYtMTZsMTEuNiAxMS42SDEzbC0uNC4xeiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xNy4zIDIxLjZsLTMuNiAxLjVMOSAxMmwzLjctMS41eiIvPjxwYXRoIGQ9Ik0xMS4wMyAxNC4yOTNsMS44NDUtLjc3NCAzLjA5NiA3LjM3Ni0xLjg0NC43NzV6Ii8+PHBhdGggZD0iTTkuMiA3LjN2MTEuMmwzLTIuOS40LS4xaDQuOHoiLz48L3N2Zz4=");border-color:transparent}.replayer-mouse:after{background:transparent}.replayer-mouse.active:after{animation:click .2s ease-in-out 1}.replayer-mouse.touch-device{background-image:none;width:70px;height:70px;border-radius:100%;margin-left:-37px;margin-top:-37px;border:4px solid rgba(73,80,246,0);transition:left 0s linear,top 0s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device.touch-active{border-color:#4950f6;transition:left .25s linear,top .25s linear,border-color .2s ease-in-out}.replayer-mouse.touch-device:after{opacity:0}.replayer-mouse.touch-device.active:after{animation:touch-click .2s ease-in-out 1}.replayer-mouse-tail{position:absolute;pointer-events:none}@keyframes click{0%{opacity:.3;width:20px;height:20px;background:transparent}75%{width:24px;height:24px;opacity:.8;background:#dc2626}to{background:transparent}}@keyframes touch-click{0%{opacity:0;width:20px;height:20px}50%{opacity:.5;width:10px;height:10px}}
|
|
2
|
-
/*# sourceMappingURL=rrweb.min.css.map */
|