@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.
Files changed (32) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/interaction-metrics/index.js +21 -17
  3. package/dist/cjs/interaction-metrics-init/index.js +3 -0
  4. package/dist/cjs/vc/vc-observer/observers/editor-lnv/index.js +187 -0
  5. package/dist/cjs/vc/vc-observer/observers/editor-lnv/test-utils.js +69 -0
  6. package/dist/cjs/vc/vc-observer/observers/index.js +17 -4
  7. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  8. package/dist/es2019/interaction-metrics/index.js +21 -17
  9. package/dist/es2019/interaction-metrics-init/index.js +3 -0
  10. package/dist/es2019/vc/vc-observer/observers/editor-lnv/index.js +140 -0
  11. package/dist/es2019/vc/vc-observer/observers/editor-lnv/test-utils.js +41 -0
  12. package/dist/es2019/vc/vc-observer/observers/index.js +14 -0
  13. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  14. package/dist/esm/interaction-metrics/index.js +21 -17
  15. package/dist/esm/interaction-metrics-init/index.js +3 -0
  16. package/dist/esm/vc/vc-observer/observers/editor-lnv/index.js +181 -0
  17. package/dist/esm/vc/vc-observer/observers/editor-lnv/test-utils.js +59 -0
  18. package/dist/esm/vc/vc-observer/observers/index.js +17 -4
  19. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +0 -1
  20. package/dist/types/common/vc/types.d.ts +1 -1
  21. package/dist/types/config/index.d.ts +2 -1
  22. package/dist/types/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
  23. package/dist/types/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
  24. package/dist/types/vc/vc-observer/observers/index.d.ts +1 -0
  25. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
  26. package/dist/types-ts4.5/common/vc/types.d.ts +1 -1
  27. package/dist/types-ts4.5/config/index.d.ts +2 -1
  28. package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/index.d.ts +24 -0
  29. package/dist/types-ts4.5/vc/vc-observer/observers/editor-lnv/test-utils.d.ts +35 -0
  30. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +1 -0
  31. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +9 -7
  32. 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 (_ref) {
261
- var isIntersecting = _ref.isIntersecting,
262
- ir = _ref.intersectionRect,
263
- target = _ref.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 | undefined | string | number | boolean | undefined | AdditionalData | Record<string, AdditionalData> | Array<AdditionalData>;
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<unknown>;
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 | undefined | string | number | boolean | undefined | AdditionalData | Record<string, AdditionalData> | Array<AdditionalData>;
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<unknown>;
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.0",
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
  }