@atlaskit/react-ufo 2.2.0 → 2.2.2
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/CHANGELOG.md +16 -0
- package/dist/cjs/interaction-metrics/index.js +21 -17
- package/dist/cjs/interaction-metrics-init/index.js +3 -0
- package/dist/cjs/vc/vc-observer/observers/editor-lnv/index.js +187 -0
- package/dist/cjs/vc/vc-observer/observers/editor-lnv/test-utils.js +69 -0
- package/dist/cjs/vc/vc-observer/observers/index.js +17 -4
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
- package/dist/es2019/interaction-metrics/index.js +21 -17
- package/dist/es2019/interaction-metrics-init/index.js +3 -0
- package/dist/es2019/vc/vc-observer/observers/editor-lnv/index.js +140 -0
- package/dist/es2019/vc/vc-observer/observers/editor-lnv/test-utils.js +41 -0
- package/dist/es2019/vc/vc-observer/observers/index.js +14 -0
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
- package/dist/esm/interaction-metrics/index.js +21 -17
- package/dist/esm/interaction-metrics-init/index.js +3 -0
- package/dist/esm/vc/vc-observer/observers/editor-lnv/index.js +181 -0
- package/dist/esm/vc/vc-observer/observers/editor-lnv/test-utils.js +59 -0
- package/dist/esm/vc/vc-observer/observers/index.js +17 -4
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
- package/dist/types/common/vc/types.d.ts +1 -1
- package/dist/types/config/index.d.ts +2 -1
- package/dist/types/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
- package/dist/types/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
- package/dist/types/vc/vc-observer/observers/index.d.ts +1 -0
- package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
- package/dist/types-ts4.5/common/vc/types.d.ts +1 -1
- package/dist/types-ts4.5/config/index.d.ts +2 -1
- package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
- package/package.json +6 -1
|
@@ -7,7 +7,9 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
7
7
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
8
8
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
9
9
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
10
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
10
11
|
import { isContainedWithinMediaWrapper } from '../media-wrapper/vc-utils';
|
|
12
|
+
import { EditorLnvHandler } from './editor-lnv';
|
|
11
13
|
import { SSRPlaceholderHandlers } from './ssr-placeholders';
|
|
12
14
|
var state = {
|
|
13
15
|
normal: 1,
|
|
@@ -52,6 +54,7 @@ export var Observers = /*#__PURE__*/function () {
|
|
|
52
54
|
this.intersectionObserver = this.getIntersectionObserver();
|
|
53
55
|
this.mutationObserver = this.getMutationObserver();
|
|
54
56
|
this.ssrPlaceholderHandler = new SSRPlaceholderHandlers();
|
|
57
|
+
this.editorLnvHandler = new EditorLnvHandler();
|
|
55
58
|
}
|
|
56
59
|
_createClass(Observers, [{
|
|
57
60
|
key: "isBrowserSupported",
|
|
@@ -88,6 +91,7 @@ export var Observers = /*#__PURE__*/function () {
|
|
|
88
91
|
this.callbacks = new Set();
|
|
89
92
|
this.ssr.reactRootElement = null;
|
|
90
93
|
this.ssrPlaceholderHandler.clear();
|
|
94
|
+
this.editorLnvHandler.clear();
|
|
91
95
|
}
|
|
92
96
|
}, {
|
|
93
97
|
key: "getTotalTime",
|
|
@@ -161,6 +165,15 @@ export var Observers = /*#__PURE__*/function () {
|
|
|
161
165
|
});
|
|
162
166
|
return;
|
|
163
167
|
}
|
|
168
|
+
if (fg('platform_editor_ed-25557_lnv_add_ssr_placeholder')) {
|
|
169
|
+
if (_this2.editorLnvHandler.shouldHandleAddedNode(node)) {
|
|
170
|
+
_this2.editorLnvHandler.handleAddedNode(node).then(function (_ref) {
|
|
171
|
+
var shouldIgnore = _ref.shouldIgnore;
|
|
172
|
+
_this2.observeElement(node, mutation, 'html', shouldIgnore ? 'editor-lazy-node-view' : ignoreReason);
|
|
173
|
+
});
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
164
177
|
_this2.observeElement(node, mutation, 'html', ignoreReason);
|
|
165
178
|
}
|
|
166
179
|
if (node instanceof Text && node.parentElement != null) {
|
|
@@ -257,10 +270,10 @@ export var Observers = /*#__PURE__*/function () {
|
|
|
257
270
|
var _this3 = this;
|
|
258
271
|
return this.isBrowserSupported() ? new IntersectionObserver(function (entries) {
|
|
259
272
|
_this3.measureStart();
|
|
260
|
-
entries.forEach(function (
|
|
261
|
-
var isIntersecting =
|
|
262
|
-
ir =
|
|
263
|
-
target =
|
|
273
|
+
entries.forEach(function (_ref2) {
|
|
274
|
+
var isIntersecting = _ref2.isIntersecting,
|
|
275
|
+
ir = _ref2.intersectionRect,
|
|
276
|
+
target = _ref2.target;
|
|
264
277
|
var data = _this3.observedMutations.get(target);
|
|
265
278
|
_this3.observedMutations.delete(target);
|
|
266
279
|
if (isIntersecting && ir.width > 0 && ir.height > 0) {
|
|
@@ -33,7 +33,6 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
|
33
33
|
_this.callbacks.delete(staticKey);
|
|
34
34
|
}
|
|
35
35
|
} else {
|
|
36
|
-
// react component check
|
|
37
36
|
var key = target.dataset.ssrPlaceholderReplace || '';
|
|
38
37
|
var _resolve2 = _this.reactValidateCallbacks.get(key);
|
|
39
38
|
if (!_resolve2) {
|
|
@@ -35,7 +35,7 @@ export type VCEntryType = {
|
|
|
35
35
|
vc: number;
|
|
36
36
|
elements: string[];
|
|
37
37
|
};
|
|
38
|
-
export type VCIgnoreReason = 'image' | 'ssr-hydration' | '';
|
|
38
|
+
export type VCIgnoreReason = 'image' | 'ssr-hydration' | 'editor-lazy-node-view' | '';
|
|
39
39
|
export type ComponentsLogEntry = {
|
|
40
40
|
targetName: string;
|
|
41
41
|
__debug__element: WeakRef<Element> | null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InteractionMetrics, InteractionType } from '../common';
|
|
2
2
|
export interface AdditionalData {
|
|
3
|
-
[key: string]: null |
|
|
3
|
+
[key: string]: null | string | number | boolean | undefined | AdditionalData | Record<string, AdditionalData> | Array<AdditionalData>;
|
|
4
4
|
}
|
|
5
5
|
export interface SSRTiming {
|
|
6
6
|
label: string;
|
|
@@ -73,6 +73,7 @@ export type Config = {
|
|
|
73
73
|
readonly kind?: Record<InteractionType, number>;
|
|
74
74
|
};
|
|
75
75
|
readonly enableSegmentHighlighting?: boolean;
|
|
76
|
+
readonly enableAdditionalPerformanceMarks?: boolean;
|
|
76
77
|
readonly shouldCalculateLighthouseMetricsFromTTAI?: boolean;
|
|
77
78
|
readonly timeWindowForLateMutationsInMilliseconds?: number;
|
|
78
79
|
readonly manuallyTrackReactProfilerMounts?: boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
type HandlerResult = {
|
|
2
|
+
shouldIgnore: boolean;
|
|
3
|
+
};
|
|
4
|
+
export declare class EditorLnvHandler {
|
|
5
|
+
private placeholders;
|
|
6
|
+
private intersectionObserver;
|
|
7
|
+
private getSizeCallbacks;
|
|
8
|
+
private isAddedPlaceholderMatchingSizeCallbacks;
|
|
9
|
+
private isAddedReplaceMatchingSizeCallbacks;
|
|
10
|
+
constructor();
|
|
11
|
+
shouldHandleAddedNode(el: HTMLElement): string | undefined;
|
|
12
|
+
handleAddedNode(el: HTMLElement): Promise<HandlerResult>;
|
|
13
|
+
clear(): void;
|
|
14
|
+
private handleAddedPlaceholderNode;
|
|
15
|
+
private handleAddedReplaceNode;
|
|
16
|
+
private isExistingPlaceholder;
|
|
17
|
+
private registerPlaceholder;
|
|
18
|
+
private getSize;
|
|
19
|
+
private isAddedPlaceholderMatchingSize;
|
|
20
|
+
private isAddedReplaceMatchingSize;
|
|
21
|
+
private areRectsSameSize;
|
|
22
|
+
private intersectionObserverCallback;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EditorLnvHandler } from './index';
|
|
2
|
+
type MockIntersectionObserverEntry = {
|
|
3
|
+
target: HTMLElement;
|
|
4
|
+
boundingClientRect: {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type MockIntersectionObserverCallback = (entries: MockIntersectionObserverEntry[]) => void;
|
|
12
|
+
export type MockIntersectionObserverCallbackRef = {
|
|
13
|
+
current: MockIntersectionObserverCallback | null;
|
|
14
|
+
};
|
|
15
|
+
export declare function createPlaceholderElement(id: string): HTMLDivElement;
|
|
16
|
+
export declare function createReplaceElement(id: string): HTMLDivElement;
|
|
17
|
+
export declare function handleElements(elements: {
|
|
18
|
+
element: HTMLElement;
|
|
19
|
+
rect: {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
};
|
|
25
|
+
}[], handler: EditorLnvHandler, observerCallback: MockIntersectionObserverCallback, callback: (result: {
|
|
26
|
+
shouldIgnore: boolean;
|
|
27
|
+
}) => void): void;
|
|
28
|
+
export declare function createMockIntersectionObserver(cbRef: MockIntersectionObserverCallbackRef): {
|
|
29
|
+
new (fn: MockIntersectionObserverCallback): {
|
|
30
|
+
observe(): void;
|
|
31
|
+
unobserve(): void;
|
|
32
|
+
disconnect(): void;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
@@ -19,6 +19,7 @@ export declare class Observers implements BrowserObservers {
|
|
|
19
19
|
private totalTime;
|
|
20
20
|
private _startMeasureTimestamp;
|
|
21
21
|
private ssrPlaceholderHandler;
|
|
22
|
+
private editorLnvHandler;
|
|
22
23
|
private ssr;
|
|
23
24
|
private selectorConfig;
|
|
24
25
|
constructor(opts: ConstructorOptions);
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
type Rect = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
1
7
|
export declare class SSRPlaceholderHandlers {
|
|
2
8
|
private staticPlaceholders;
|
|
3
9
|
private callbacks;
|
|
@@ -11,13 +17,9 @@ export declare class SSRPlaceholderHandlers {
|
|
|
11
17
|
isPlaceholderIgnored(element: HTMLElement): boolean;
|
|
12
18
|
findNearestPlaceholderContainerIfIgnored(element: HTMLElement): HTMLElement;
|
|
13
19
|
checkIfExistedAndSizeMatching(el: HTMLElement): Promise<unknown>;
|
|
14
|
-
getSize(el: HTMLElement): Promise<
|
|
20
|
+
getSize(el: HTMLElement): Promise<Rect>;
|
|
15
21
|
validateReactComponentMatchToPlaceholder(el: HTMLElement): Promise<unknown>;
|
|
16
|
-
hasSameSizePosition(rect:
|
|
17
|
-
x: number;
|
|
18
|
-
y: number;
|
|
19
|
-
width: number;
|
|
20
|
-
height: number;
|
|
21
|
-
} | undefined, boundingClientRect: DOMRectReadOnly): boolean;
|
|
22
|
+
hasSameSizePosition(rect: Rect | undefined, boundingClientRect: DOMRectReadOnly): boolean;
|
|
22
23
|
intersectionObserverCallback: ({ target, boundingClientRect }: IntersectionObserverEntry) => void;
|
|
23
24
|
}
|
|
25
|
+
export {};
|
|
@@ -35,7 +35,7 @@ export type VCEntryType = {
|
|
|
35
35
|
vc: number;
|
|
36
36
|
elements: string[];
|
|
37
37
|
};
|
|
38
|
-
export type VCIgnoreReason = 'image' | 'ssr-hydration' | '';
|
|
38
|
+
export type VCIgnoreReason = 'image' | 'ssr-hydration' | 'editor-lazy-node-view' | '';
|
|
39
39
|
export type ComponentsLogEntry = {
|
|
40
40
|
targetName: string;
|
|
41
41
|
__debug__element: WeakRef<Element> | null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { InteractionMetrics, InteractionType } from '../common';
|
|
2
2
|
export interface AdditionalData {
|
|
3
|
-
[key: string]: null |
|
|
3
|
+
[key: string]: null | string | number | boolean | undefined | AdditionalData | Record<string, AdditionalData> | Array<AdditionalData>;
|
|
4
4
|
}
|
|
5
5
|
export interface SSRTiming {
|
|
6
6
|
label: string;
|
|
@@ -73,6 +73,7 @@ export type Config = {
|
|
|
73
73
|
readonly kind?: Record<InteractionType, number>;
|
|
74
74
|
};
|
|
75
75
|
readonly enableSegmentHighlighting?: boolean;
|
|
76
|
+
readonly enableAdditionalPerformanceMarks?: boolean;
|
|
76
77
|
readonly shouldCalculateLighthouseMetricsFromTTAI?: boolean;
|
|
77
78
|
readonly timeWindowForLateMutationsInMilliseconds?: number;
|
|
78
79
|
readonly manuallyTrackReactProfilerMounts?: boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
type HandlerResult = {
|
|
2
|
+
shouldIgnore: boolean;
|
|
3
|
+
};
|
|
4
|
+
export declare class EditorLnvHandler {
|
|
5
|
+
private placeholders;
|
|
6
|
+
private intersectionObserver;
|
|
7
|
+
private getSizeCallbacks;
|
|
8
|
+
private isAddedPlaceholderMatchingSizeCallbacks;
|
|
9
|
+
private isAddedReplaceMatchingSizeCallbacks;
|
|
10
|
+
constructor();
|
|
11
|
+
shouldHandleAddedNode(el: HTMLElement): string | undefined;
|
|
12
|
+
handleAddedNode(el: HTMLElement): Promise<HandlerResult>;
|
|
13
|
+
clear(): void;
|
|
14
|
+
private handleAddedPlaceholderNode;
|
|
15
|
+
private handleAddedReplaceNode;
|
|
16
|
+
private isExistingPlaceholder;
|
|
17
|
+
private registerPlaceholder;
|
|
18
|
+
private getSize;
|
|
19
|
+
private isAddedPlaceholderMatchingSize;
|
|
20
|
+
private isAddedReplaceMatchingSize;
|
|
21
|
+
private areRectsSameSize;
|
|
22
|
+
private intersectionObserverCallback;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { EditorLnvHandler } from './index';
|
|
2
|
+
type MockIntersectionObserverEntry = {
|
|
3
|
+
target: HTMLElement;
|
|
4
|
+
boundingClientRect: {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type MockIntersectionObserverCallback = (entries: MockIntersectionObserverEntry[]) => void;
|
|
12
|
+
export type MockIntersectionObserverCallbackRef = {
|
|
13
|
+
current: MockIntersectionObserverCallback | null;
|
|
14
|
+
};
|
|
15
|
+
export declare function createPlaceholderElement(id: string): HTMLDivElement;
|
|
16
|
+
export declare function createReplaceElement(id: string): HTMLDivElement;
|
|
17
|
+
export declare function handleElements(elements: {
|
|
18
|
+
element: HTMLElement;
|
|
19
|
+
rect: {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
};
|
|
25
|
+
}[], handler: EditorLnvHandler, observerCallback: MockIntersectionObserverCallback, callback: (result: {
|
|
26
|
+
shouldIgnore: boolean;
|
|
27
|
+
}) => void): void;
|
|
28
|
+
export declare function createMockIntersectionObserver(cbRef: MockIntersectionObserverCallbackRef): {
|
|
29
|
+
new (fn: MockIntersectionObserverCallback): {
|
|
30
|
+
observe(): void;
|
|
31
|
+
unobserve(): void;
|
|
32
|
+
disconnect(): void;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
@@ -19,6 +19,7 @@ export declare class Observers implements BrowserObservers {
|
|
|
19
19
|
private totalTime;
|
|
20
20
|
private _startMeasureTimestamp;
|
|
21
21
|
private ssrPlaceholderHandler;
|
|
22
|
+
private editorLnvHandler;
|
|
22
23
|
private ssr;
|
|
23
24
|
private selectorConfig;
|
|
24
25
|
constructor(opts: ConstructorOptions);
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
type Rect = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
1
7
|
export declare class SSRPlaceholderHandlers {
|
|
2
8
|
private staticPlaceholders;
|
|
3
9
|
private callbacks;
|
|
@@ -11,13 +17,9 @@ export declare class SSRPlaceholderHandlers {
|
|
|
11
17
|
isPlaceholderIgnored(element: HTMLElement): boolean;
|
|
12
18
|
findNearestPlaceholderContainerIfIgnored(element: HTMLElement): HTMLElement;
|
|
13
19
|
checkIfExistedAndSizeMatching(el: HTMLElement): Promise<unknown>;
|
|
14
|
-
getSize(el: HTMLElement): Promise<
|
|
20
|
+
getSize(el: HTMLElement): Promise<Rect>;
|
|
15
21
|
validateReactComponentMatchToPlaceholder(el: HTMLElement): Promise<unknown>;
|
|
16
|
-
hasSameSizePosition(rect:
|
|
17
|
-
x: number;
|
|
18
|
-
y: number;
|
|
19
|
-
width: number;
|
|
20
|
-
height: number;
|
|
21
|
-
} | undefined, boundingClientRect: DOMRectReadOnly): boolean;
|
|
22
|
+
hasSameSizePosition(rect: Rect | undefined, boundingClientRect: DOMRectReadOnly): boolean;
|
|
22
23
|
intersectionObserverCallback: ({ target, boundingClientRect }: IntersectionObserverEntry) => void;
|
|
23
24
|
}
|
|
25
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/react-ufo",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"description": "Parts of React UFO that are publicly available",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -122,5 +122,10 @@
|
|
|
122
122
|
"import-no-extraneous-disable-for-examples-and-docs"
|
|
123
123
|
]
|
|
124
124
|
}
|
|
125
|
+
},
|
|
126
|
+
"platform-feature-flags": {
|
|
127
|
+
"platform_editor_ed-25557_lnv_add_ssr_placeholder": {
|
|
128
|
+
"type": "boolean"
|
|
129
|
+
}
|
|
125
130
|
}
|
|
126
131
|
}
|