@atlaskit/react-ufo 3.1.4 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +11 -0
  3. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +52 -25
  4. package/dist/cjs/create-payload/index.js +290 -231
  5. package/dist/cjs/interaction-metrics/index.js +61 -23
  6. package/dist/cjs/interaction-metrics/post-interaction-log.js +63 -34
  7. package/dist/cjs/interaction-metrics-init/index.js +26 -7
  8. package/dist/cjs/segment/schedule-on-paint.js +35 -0
  9. package/dist/cjs/segment/segment.js +10 -1
  10. package/dist/cjs/vc/index.js +105 -1
  11. package/dist/cjs/vc/types.js +5 -0
  12. package/dist/cjs/vc/vc-observer/index.js +198 -208
  13. package/dist/cjs/vc/vc-observer-new/entries-timeline/index.js +56 -0
  14. package/dist/cjs/vc/vc-observer-new/get-element-name.js +68 -0
  15. package/dist/cjs/vc/vc-observer-new/index.js +132 -0
  16. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +75 -0
  17. package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +60 -0
  18. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +274 -0
  19. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +151 -0
  20. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +367 -0
  21. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +397 -0
  22. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +5 -0
  23. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +61 -0
  24. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +151 -0
  25. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +107 -0
  26. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +5 -0
  27. package/dist/cjs/vc/vc-observer-new/metric-calculator/types.js +5 -0
  28. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +16 -0
  29. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +16 -0
  30. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +16 -0
  31. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/task-yield.js +45 -0
  32. package/dist/cjs/vc/vc-observer-new/types.js +5 -0
  33. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +195 -0
  34. package/dist/cjs/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +71 -0
  35. package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +65 -0
  36. package/dist/cjs/vc/vc-observer-new/viewport-observer/performance-observer/index.js +58 -0
  37. package/dist/cjs/vc/vc-observer-new/viewport-observer/types.js +1 -0
  38. package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +54 -0
  39. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -2
  40. package/dist/es2019/create-payload/index.js +8 -7
  41. package/dist/es2019/interaction-metrics/index.js +3 -3
  42. package/dist/es2019/interaction-metrics/post-interaction-log.js +5 -5
  43. package/dist/es2019/interaction-metrics-init/index.js +26 -7
  44. package/dist/es2019/segment/schedule-on-paint.js +29 -0
  45. package/dist/es2019/segment/segment.js +9 -1
  46. package/dist/es2019/vc/index.js +56 -1
  47. package/dist/es2019/vc/types.js +1 -0
  48. package/dist/es2019/vc/vc-observer/index.js +1 -4
  49. package/dist/es2019/vc/vc-observer-new/entries-timeline/index.js +34 -0
  50. package/dist/es2019/vc/vc-observer-new/get-element-name.js +62 -0
  51. package/dist/es2019/vc/vc-observer-new/index.js +98 -0
  52. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +38 -0
  53. package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +39 -0
  54. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +194 -0
  55. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +69 -0
  56. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +248 -0
  57. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +261 -0
  58. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
  59. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +19 -0
  60. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +98 -0
  61. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +58 -0
  62. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
  63. package/dist/es2019/vc/vc-observer-new/metric-calculator/types.js +1 -0
  64. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +9 -0
  65. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +9 -0
  66. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
  67. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/task-yield.js +17 -0
  68. package/dist/es2019/vc/vc-observer-new/types.js +1 -0
  69. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +168 -0
  70. package/dist/es2019/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
  71. package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +48 -0
  72. package/dist/es2019/vc/vc-observer-new/viewport-observer/performance-observer/index.js +41 -0
  73. package/dist/es2019/vc/vc-observer-new/viewport-observer/types.js +0 -0
  74. package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +36 -0
  75. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +52 -25
  76. package/dist/esm/create-payload/index.js +290 -231
  77. package/dist/esm/interaction-metrics/index.js +61 -23
  78. package/dist/esm/interaction-metrics/post-interaction-log.js +63 -34
  79. package/dist/esm/interaction-metrics-init/index.js +26 -7
  80. package/dist/esm/segment/schedule-on-paint.js +29 -0
  81. package/dist/esm/segment/segment.js +10 -1
  82. package/dist/esm/vc/index.js +104 -1
  83. package/dist/esm/vc/types.js +1 -0
  84. package/dist/esm/vc/vc-observer/index.js +198 -208
  85. package/dist/esm/vc/vc-observer-new/entries-timeline/index.js +50 -0
  86. package/dist/esm/vc/vc-observer-new/get-element-name.js +62 -0
  87. package/dist/esm/vc/vc-observer-new/index.js +126 -0
  88. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +69 -0
  89. package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +54 -0
  90. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +268 -0
  91. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +143 -0
  92. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +361 -0
  93. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +390 -0
  94. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
  95. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +54 -0
  96. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +144 -0
  97. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +100 -0
  98. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
  99. package/dist/esm/vc/vc-observer-new/metric-calculator/types.js +1 -0
  100. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +10 -0
  101. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +10 -0
  102. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
  103. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/task-yield.js +38 -0
  104. package/dist/esm/vc/vc-observer-new/types.js +1 -0
  105. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +189 -0
  106. package/dist/esm/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
  107. package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +59 -0
  108. package/dist/esm/vc/vc-observer-new/viewport-observer/performance-observer/index.js +51 -0
  109. package/dist/esm/vc/vc-observer-new/viewport-observer/types.js +0 -0
  110. package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +48 -0
  111. package/dist/types/common/index.d.ts +1 -0
  112. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
  113. package/dist/types/create-payload/index.d.ts +4 -4
  114. package/dist/types/interaction-metrics/post-interaction-log.d.ts +3 -2
  115. package/dist/types/segment/schedule-on-paint.d.ts +2 -0
  116. package/dist/types/vc/index.d.ts +3 -3
  117. package/dist/types/vc/types.d.ts +34 -0
  118. package/dist/types/vc/vc-observer/index.d.ts +5 -21
  119. package/dist/types/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
  120. package/dist/types/vc/vc-observer-new/get-element-name.d.ts +8 -0
  121. package/dist/types/vc/vc-observer-new/index.d.ts +18 -0
  122. package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
  123. package/dist/types/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
  124. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
  125. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
  126. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
  127. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
  128. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
  129. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
  130. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
  131. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
  132. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
  133. package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
  134. package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
  135. package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
  136. package/dist/types/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
  137. package/dist/types/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
  138. package/dist/types/vc/vc-observer-new/types.d.ts +21 -0
  139. package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
  140. package/dist/types/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
  141. package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
  142. package/dist/types/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
  143. package/dist/types/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
  144. package/dist/types/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
  145. package/dist/types-ts4.5/common/index.d.ts +1 -0
  146. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
  147. package/dist/types-ts4.5/create-payload/index.d.ts +4 -4
  148. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +3 -2
  149. package/dist/types-ts4.5/segment/schedule-on-paint.d.ts +2 -0
  150. package/dist/types-ts4.5/vc/index.d.ts +3 -3
  151. package/dist/types-ts4.5/vc/types.d.ts +34 -0
  152. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +5 -21
  153. package/dist/types-ts4.5/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
  154. package/dist/types-ts4.5/vc/vc-observer-new/get-element-name.d.ts +8 -0
  155. package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +18 -0
  156. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
  157. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
  158. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
  159. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
  160. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
  161. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
  162. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
  163. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
  164. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
  165. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
  166. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
  167. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
  168. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
  169. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
  170. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
  171. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
  172. package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +21 -0
  173. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
  174. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
  175. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
  176. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
  177. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
  178. package/dist/types-ts4.5/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
  179. package/package.json +13 -1
@@ -0,0 +1,13 @@
1
+ import type { VCObserverEntry } from '../types';
2
+ export default class EntriesTimeline {
3
+ private unorderedEntries;
4
+ private sortedEntriesCache;
5
+ constructor();
6
+ push(entry: VCObserverEntry): void;
7
+ private getCacheKey;
8
+ getOrderedEntries({ start, stop, }: {
9
+ start?: DOMHighResTimeStamp | null;
10
+ stop?: DOMHighResTimeStamp | null;
11
+ }): ReadonlyArray<VCObserverEntry>;
12
+ clear(): void;
13
+ }
@@ -0,0 +1,8 @@
1
+ export type SelectorConfig = {
2
+ id: boolean;
3
+ testId: boolean;
4
+ role: boolean;
5
+ className: boolean;
6
+ dataVC?: boolean;
7
+ };
8
+ export default function getElementName(selectorConfig: SelectorConfig, element: Element): string;
@@ -0,0 +1,18 @@
1
+ import { type SelectorConfig } from './get-element-name';
2
+ import type { RevisionPayloadEntry } from './metric-calculator/types';
3
+ import type { VCObserverGetVCResultParam } from './types';
4
+ export type VCObserverNewConfig = {
5
+ selectorConfig?: SelectorConfig;
6
+ };
7
+ export default class VCObserverNew {
8
+ startTime: number;
9
+ private selectorConfig;
10
+ private viewportObserver;
11
+ private windowEventObserver;
12
+ private entriesTimeline;
13
+ constructor(config: VCObserverNewConfig);
14
+ start(): void;
15
+ stop(): void;
16
+ getVCResult(param: VCObserverGetVCResultParam): Promise<RevisionPayloadEntry[]>;
17
+ private getElementName;
18
+ }
@@ -0,0 +1,9 @@
1
+ import type { VCObserverEntry } from '../types';
2
+ import type { RevisionPayloadEntry, VCCalculator, VCCalculatorParam } from './types';
3
+ export default abstract class AbstractVCCalculatorBase implements VCCalculator {
4
+ private revisionNo;
5
+ constructor(revisionNo: string);
6
+ protected abstract isEntryIncluded(entry: VCObserverEntry): boolean;
7
+ protected abstract isVCClean(filteredEntries: ReadonlyArray<VCObserverEntry>): boolean;
8
+ calculate({ orderedEntries, }: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
9
+ }
@@ -0,0 +1,7 @@
1
+ import type { VCObserverEntry } from '../../types';
2
+ import AbstractVCCalculatorBase from '../abstract-base-vc-calculator';
3
+ export default class VCCalculator_FY25_03 extends AbstractVCCalculatorBase {
4
+ constructor();
5
+ protected isEntryIncluded(entry: VCObserverEntry): boolean;
6
+ protected isVCClean(filteredEntries: readonly VCObserverEntry[]): boolean;
7
+ }
@@ -0,0 +1,91 @@
1
+ type RGBColor = `rgb(${number}, ${number}, ${number})`;
2
+ type Viewport = {
3
+ width: number;
4
+ height: number;
5
+ };
6
+ /**
7
+ * Class responsible for managing a scaled canvas and tracking pixel drawing operations.
8
+ * It uses an OffscreenCanvas for better performance and maintains a mapping between
9
+ * colors and timestamps for pixel counting purposes.
10
+ */
11
+ export declare class ViewportCanvas {
12
+ /** The underlying OffscreenCanvas instance */
13
+ private readonly canvas;
14
+ /** The 2D rendering context of the canvas */
15
+ private readonly ctx;
16
+ /** Scale factor applied to the canvas (affects final pixel counts) */
17
+ private readonly scaleFactor;
18
+ /** Maps unique colors to their corresponding timestamps */
19
+ private readonly colorTimeMap;
20
+ /** Counter used to generate unique colors */
21
+ private colorCounter;
22
+ private scaledWidth;
23
+ private scaledHeight;
24
+ private scaleX;
25
+ private scaleY;
26
+ /**
27
+ * Creates a new ViewportCanvas instance.
28
+ * @param viewport - The dimensions of the viewport
29
+ * @param scaleFactor - Scale factor to apply to the canvas (default: 0.5)
30
+ * @throws {Error} If canvas context cannot be obtained
31
+ */
32
+ constructor(viewport: Viewport, scaleFactor?: number);
33
+ getScaledDimensions(): {
34
+ width: number;
35
+ height: number;
36
+ };
37
+ /**
38
+ * Clears the entire canvas by removing all drawn content.
39
+ * @private
40
+ */
41
+ private clear;
42
+ /**
43
+ * Generates a unique RGB color from an incrementing counter.
44
+ * Uses a 24-bit color space (16,777,216 possible colors).
45
+ *
46
+ * @private
47
+ * @returns A unique RGB color string
48
+ *
49
+ * @example
50
+ * // Example bit operations for color 0x00FF8040:
51
+ * // Red: (0x00FF8040 >> 16) & 0xFF = 0xFF = 255
52
+ * // Green: (0x00FF8040 >> 8) & 0xFF = 0x80 = 128
53
+ * // Blue: 0x00FF8040 & 0xFF = 0x40 = 64
54
+ */
55
+ private generateColor;
56
+ /**
57
+ * Draws a rectangle on the canvas with a unique color and associates it with a timestamp.
58
+ * Each drawn rectangle gets a unique color which is mapped to the provided timestamp.
59
+ *
60
+ * @param rect - The rectangle dimensions to draw
61
+ * @param timestamp - The timestamp to associate with this drawing operation
62
+ */
63
+ drawRect(rect: DOMRect, timestamp: DOMHighResTimeStamp): void;
64
+ /**
65
+ * Calculates the number of pixels drawn for each timestamp.
66
+ * This method:
67
+ * 1. Reads the pixel data from the canvas
68
+ * 2. Counts pixels of each unique color
69
+ * 3. Maps colors back to their timestamps
70
+ * 4. Adjusts counts based on the scale factor
71
+ *
72
+ * @returns A Map containing timestamp to pixel count mappings
73
+ */
74
+ getPixelCounts(): Promise<Map<DOMHighResTimeStamp, number>>;
75
+ }
76
+ /**
77
+ * Converts a number into RGB components in such a way that they can be recombined
78
+ * to form the original number using bitwise operations.
79
+ * @param number - The input number to be split into RGB components.
80
+ * @returns The RGB color string in the format "rgb(r, g, b)".
81
+ */
82
+ export declare function getRGBComponents(n: number): RGBColor;
83
+ /**
84
+ * Calculates the number of pixels drawn for each color in the image data.
85
+ * @param imageData - The image data to analyze.
86
+ * @param scaleFactor - The scale factor applied to the canvas.
87
+ * @param arraySize - The amount of timestamps that were drawn in the viewport
88
+ * @returns A Map containing color to pixel count mappings.
89
+ */
90
+ export declare function calculateDrawnPixelsRaw(imageData: ImageData, scaleFactor: number, arraySize: number): Promise<Uint32Array>;
91
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { RevisionPayloadVCDetails } from '../../types';
2
+ import type { CalcTTVCPercentilesArg } from '../types';
3
+ export default function calculateTTVCPercentiles({ viewport, orderedEntries, percentiles, }: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails>;
4
+ export declare function calculatePercentiles(timePixelCounts: Map<DOMHighResTimeStamp, number>, elementMap: ReadonlyMap<DOMHighResTimeStamp, Set<string>>, unorderedPercentiles: number[], totalPixels: number): RevisionPayloadVCDetails;
@@ -0,0 +1,39 @@
1
+ import type { VCObserverEntry } from '../../../types';
2
+ import { HeatmapCheckpointMetrics, HeatmapEntry, HeatmapOptions } from './types';
3
+ export default class Heatmap {
4
+ private viewport;
5
+ /**
6
+ * Heatmap Width
7
+ */
8
+ private width;
9
+ /**
10
+ * Heatmap Height
11
+ */
12
+ private height;
13
+ /**
14
+ * Heatmap Area (width * height)
15
+ */
16
+ private heatmapAreaSize;
17
+ private scaleX;
18
+ private scaleY;
19
+ private map;
20
+ constructor({ viewport, heatmapSize }: HeatmapOptions);
21
+ getHeatmap(): HeatmapEntry[][];
22
+ private getCell;
23
+ /**
24
+ * Map Dom Rect to Heatmap Rect, rounded up to occupy full cell.
25
+ * @param rect DOM Rect
26
+ * @returns
27
+ */
28
+ private mapDOMRectToHeatmap;
29
+ /**
30
+ * Calculate the ratio of a HeatmapRect compared to the full heatmap
31
+ *
32
+ * This function determines what fraction of the heatmap is covered by the given heatmap rectangle.
33
+ *
34
+ * @param rect
35
+ */
36
+ private getRatio;
37
+ applyEntriesToHeatmap(entries: ReadonlyArray<VCObserverEntry>): Promise<void>;
38
+ getVCPercentMetrics(vcPercentCheckpoint: number[]): Promise<HeatmapCheckpointMetrics>;
39
+ }
@@ -0,0 +1,8 @@
1
+ import type { VCObserverEntry } from '../../../types';
2
+ import type { RevisionPayloadVCDetails } from '../../types';
3
+ import type { Viewport } from './types';
4
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
5
+ orderedEntries: ReadonlyArray<VCObserverEntry>;
6
+ viewport: Viewport;
7
+ percentiles: number[];
8
+ }): Promise<RevisionPayloadVCDetails>;
@@ -0,0 +1,43 @@
1
+ import type { VCObserverEntryType } from '../../../types';
2
+ /**
3
+ * Represents a rectangular area in the heatmap.
4
+ */
5
+ export type HeatmapRect = {
6
+ left: number;
7
+ top: number;
8
+ right: number;
9
+ bottom: number;
10
+ };
11
+ export type HeatmapSource = VCObserverEntryType | 'mutation:parent-mounted' | 'mutation:node-replacement';
12
+ export type HeatmapEntryData = {
13
+ time: DOMHighResTimeStamp;
14
+ elementName: string | null;
15
+ rect: HeatmapRect | null;
16
+ source: HeatmapSource | null;
17
+ ratio: number | null;
18
+ };
19
+ export type HeatmapEntry = {
20
+ head: HeatmapEntryData | null;
21
+ previousEntries: Array<HeatmapEntryData>;
22
+ };
23
+ export type Viewport = {
24
+ width: number;
25
+ height: number;
26
+ };
27
+ export type HeatmapOptions = {
28
+ viewport: Viewport;
29
+ heatmapSize: number;
30
+ };
31
+ export type DOMSelector = string;
32
+ export type HeatmapCheckpointMetrics = {
33
+ [checkpoint: string]: {
34
+ /**
35
+ * Time when this checkpoint reached
36
+ */
37
+ t: DOMHighResTimeStamp;
38
+ /**
39
+ * A collection of DOM Selector that are part of the checkpoint
40
+ */
41
+ e: DOMSelector[];
42
+ };
43
+ };
@@ -0,0 +1,3 @@
1
+ import type { RevisionPayloadVCDetails } from '../types';
2
+ import type { CalcTTVCPercentilesArg } from './types';
3
+ export default function calculateTTVCPercentiles(arg: CalcTTVCPercentilesArg): Promise<RevisionPayloadVCDetails | null>;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Calculate the union areas of all rectangles using Sweep Line Algorithm
3
+ *
4
+ * Reference:
5
+ * https://en.wikipedia.org/wiki/Sweep_line_algorithm
6
+ * https://www.hackerearth.com/practice/math/geometry/line-sweep-technique/tutorial/#:~:text=A%20sweep%20line%20is%20an,order%20to%20discretize%20the%20sweep.
7
+ *
8
+ * @param rectangles
9
+ * @returns
10
+ */
11
+ export default function calculateUnionArea(rectangles: DOMRect[]): number;
@@ -0,0 +1,23 @@
1
+ import type { VCObserverEntry } from '../../../types';
2
+ export type DOMSelector = string;
3
+ export type Viewport = {
4
+ width: number;
5
+ height: number;
6
+ };
7
+ export type CheckpointMetrics = {
8
+ [checkpoint: string]: {
9
+ /**
10
+ * Time when this checkpoint reached
11
+ */
12
+ t: DOMHighResTimeStamp;
13
+ /**
14
+ * A collection of DOM Selector that are part of the checkpoint
15
+ */
16
+ e: DOMSelector[];
17
+ };
18
+ };
19
+ export default function calculateTTVCPercentiles({ orderedEntries, viewport, percentiles, }: {
20
+ orderedEntries: ReadonlyArray<VCObserverEntry>;
21
+ viewport: Viewport;
22
+ percentiles: number[];
23
+ }): Promise<CheckpointMetrics>;
@@ -0,0 +1,9 @@
1
+ import type { VCObserverEntry } from '../../types';
2
+ export type CalcTTVCPercentilesArg = {
3
+ viewport: {
4
+ width: number;
5
+ height: number;
6
+ };
7
+ orderedEntries: ReadonlyArray<VCObserverEntry>;
8
+ percentiles: number[];
9
+ };
@@ -0,0 +1,20 @@
1
+ import type { VCObserverEntry } from '../types';
2
+ export type RevisionPayloadVCDetails = {
3
+ [key: string]: {
4
+ t: number;
5
+ e: string[];
6
+ };
7
+ };
8
+ export type RevisionPayloadEntry = {
9
+ 'metric:vc90': number | null;
10
+ revision: string;
11
+ clean: boolean;
12
+ vcDetails?: RevisionPayloadVCDetails;
13
+ };
14
+ export type RevisionPayload = RevisionPayloadEntry[];
15
+ export type VCCalculatorParam = {
16
+ orderedEntries: ReadonlyArray<VCObserverEntry>;
17
+ };
18
+ export interface VCCalculator {
19
+ calculate(param: VCCalculatorParam): Promise<RevisionPayloadEntry | undefined>;
20
+ }
@@ -0,0 +1 @@
1
+ export default function getViewportHeight(document?: Document): number;
@@ -0,0 +1 @@
1
+ export default function getViewportWidth(document?: Document): number;
@@ -0,0 +1,2 @@
1
+ import type { ViewportEntryData } from '../../types';
2
+ export default function isViewportEntryData(data: any): data is ViewportEntryData;
@@ -0,0 +1 @@
1
+ export default function taskYield(): Promise<void>;
@@ -0,0 +1,21 @@
1
+ import type { ObservedWindowEvent } from './window-event-observer';
2
+ export type VCObserverEntryType = 'mutation:child-element' | 'mutation:remount' | 'mutation:element' | 'mutation:element-replacement' | 'mutation:attribute:no-layout-shift' | 'mutation:attribute' | 'mutation:media' | 'layout-shift' | 'window:event' | 'unknown';
3
+ export type ViewportEntryData = {
4
+ readonly elementName: string;
5
+ readonly rect: DOMRect;
6
+ readonly previousRect?: DOMRect | undefined;
7
+ readonly visible: boolean;
8
+ readonly attributeName?: string | null | undefined;
9
+ };
10
+ export type WindowEventEntryData = {
11
+ readonly eventType: ObservedWindowEvent;
12
+ };
13
+ export type VCObserverEntry = {
14
+ readonly time: DOMHighResTimeStamp;
15
+ readonly type: VCObserverEntryType;
16
+ readonly data: ViewportEntryData | WindowEventEntryData;
17
+ };
18
+ export type VCObserverGetVCResultParam = {
19
+ start: number;
20
+ stop: number;
21
+ };
@@ -0,0 +1,22 @@
1
+ import { type VCObserverEntryType } from '../types';
2
+ import { type MutationData } from './types';
3
+ export type ViewPortObserverConstructorArgs = {
4
+ onChange(onChangeArgs: {
5
+ readonly time: DOMHighResTimeStamp;
6
+ readonly type: VCObserverEntryType;
7
+ readonly elementRef: WeakRef<HTMLElement>;
8
+ readonly visible: boolean;
9
+ readonly rect: DOMRectReadOnly;
10
+ readonly previousRect: DOMRectReadOnly | undefined;
11
+ readonly mutationData?: MutationData | undefined | null;
12
+ }): void;
13
+ };
14
+ export default class ViewportObserver {
15
+ private intersectionObserver;
16
+ private mutationObserver;
17
+ private performanceObserver;
18
+ private mapVisibleNodeRects;
19
+ constructor({ onChange }: ViewPortObserverConstructorArgs);
20
+ start(): void;
21
+ stop(): void;
22
+ }
@@ -0,0 +1,30 @@
1
+ import type { VCObserverEntryType } from '../../types';
2
+ import type { MutationData } from '../types';
3
+ type TagCallback = (props: {
4
+ target: HTMLElement;
5
+ rect: DOMRectReadOnly;
6
+ }) => VCObserverEntryType | undefined | null | {
7
+ type: VCObserverEntryType;
8
+ mutationData: MutationData;
9
+ };
10
+ type ObserveArg_TagOrCallback = VCObserverEntryType | TagCallback;
11
+ export interface VCIntersectionObserver {
12
+ disconnect(): void;
13
+ unobserve(target: Element): void;
14
+ watchAndTag: (target: Element, tagOrCallback: ObserveArg_TagOrCallback) => void;
15
+ }
16
+ export type IntersectionObserverArgs = {
17
+ onEntry: (entry: {
18
+ time: DOMHighResTimeStamp;
19
+ type: VCObserverEntryType;
20
+ target: HTMLElement;
21
+ rect: DOMRectReadOnly;
22
+ mutationData: MutationData | null | undefined;
23
+ }) => void;
24
+ onObserved?: (props: {
25
+ time: DOMHighResTimeStamp;
26
+ elements: ReadonlyArray<WeakRef<HTMLElement>>;
27
+ }) => void;
28
+ };
29
+ export declare function createIntersectionObserver(args: IntersectionObserverArgs): VCIntersectionObserver | null;
30
+ export {};
@@ -0,0 +1,14 @@
1
+ export type CreateMutationObserverProps = {
2
+ onAttributeMutation: (props: {
3
+ target: HTMLElement;
4
+ attributeName: string;
5
+ }) => void;
6
+ onMutationFinished?: (props: {
7
+ targets: Array<HTMLElement>;
8
+ }) => void;
9
+ onChildListMutation: (props: {
10
+ addedNodes: ReadonlyArray<HTMLElement>;
11
+ removedNodes: ReadonlyArray<HTMLElement>;
12
+ }) => void;
13
+ };
14
+ export default function createMutationObserver({ onAttributeMutation, onChildListMutation, onMutationFinished, }: CreateMutationObserverProps): MutationObserver | null;
@@ -0,0 +1,14 @@
1
+ export declare function convertPhysicalToLogicalResolution(rect: DOMRect): DOMRect;
2
+ type ChangedRect = Array<{
3
+ node: HTMLElement;
4
+ rect: DOMRectReadOnly;
5
+ previousRect: DOMRectReadOnly;
6
+ }>;
7
+ export type CreatePerformanceObserverArgs = {
8
+ onLayoutShift: (args: {
9
+ time: DOMHighResTimeStamp;
10
+ changedRects: ChangedRect;
11
+ }) => void;
12
+ };
13
+ export default function createPerformanceObserver(args: CreatePerformanceObserverArgs): PerformanceObserver | null;
14
+ export {};
@@ -0,0 +1,10 @@
1
+ export type MutationRecordWithTimestamp = MutationRecord & {
2
+ timestamp?: number;
3
+ };
4
+ export type AttributeMutationData = {
5
+ attributeName: string;
6
+ };
7
+ /**
8
+ * Add here when there are more type of mutation data
9
+ */
10
+ export type MutationData = AttributeMutationData;
@@ -0,0 +1,17 @@
1
+ export type ObservedWindowEvent = 'wheel' | 'scroll' | 'keydown' | 'resize';
2
+ export type OnEventCallback = (args: {
3
+ time: DOMHighResTimeStamp;
4
+ type: ObservedWindowEvent;
5
+ event: Event;
6
+ }) => void;
7
+ export type WindowEventObserverOptions = {
8
+ onEvent: OnEventCallback;
9
+ };
10
+ export default class WindowEventObserver {
11
+ private unbindFns;
12
+ private onEvent;
13
+ constructor(opts: WindowEventObserverOptions);
14
+ private bindEvent;
15
+ start(): void;
16
+ stop(): void;
17
+ }
@@ -1,5 +1,6 @@
1
1
  export type { AssetResourceEntry, AssetsClassification, AssetsData, AssetsReporter, } from './assets/types';
2
2
  export type { LifecycleMarkType, MarkType, SpanType, InteractionType, AbortReasonType, CustomTiming, HoldInfo, LoadProfilerEventInfo, ReactProfilerTiming, Span, Mark, InteractionError, RequestInfo, ApdexType, SegmentInfo, CustomData, HoldActive, Redirect, InteractionMetrics, EnhancedUFOInteractionContextType, BM3Event, PostInteractionLogOutput, LastInteractionFinishInfo, } from './common/types';
3
+ export type { MultiHeatmapPayload } from './vc/types';
3
4
  /**
4
5
  * @deprecated Prefer import from @atlaskit/react-ufo/interaction-context
5
6
  */
@@ -1,5 +1,6 @@
1
1
  import type { InteractionMetrics } from '../common';
2
- import { VCObserver, type VCObserverOptions } from '../vc/vc-observer';
2
+ import type { VCObserverOptions } from '../vc/types';
3
+ import { VCObserver } from '../vc/vc-observer';
3
4
  type InteractionMetricsHandler = (interactionId: string, interaction: InteractionMetrics) => void | Promise<void>;
4
5
  export declare function installInteractionSink(handler: InteractionMetricsHandler): void;
5
6
  export declare function sinkExperimentalHandler(sinkFn: (interactionId: string, interaction: InteractionMetrics) => void | Promise<void>): void;
@@ -12,5 +13,5 @@ export declare class ExperimentalVCMetrics {
12
13
  }): void;
13
14
  }
14
15
  export declare const experimentalVC: ExperimentalVCMetrics;
15
- export declare const getExperimentalVCMetrics: (interaction: InteractionMetrics) => import("../common/vc/types").VCResult | null;
16
+ export declare const getExperimentalVCMetrics: (interaction: InteractionMetrics) => Promise<import("../common/vc/types").VCResult | null>;
16
17
  export {};
@@ -1,7 +1,7 @@
1
1
  import type { InteractionMetrics, InteractionType } from '../common';
2
2
  import * as ssr from '../ssr';
3
3
  import type { OptimizedLabelStack } from './common/types';
4
- export declare function createPayloads(interactionId: string, interaction: InteractionMetrics): {
4
+ export declare function createPayloads(interactionId: string, interaction: InteractionMetrics): Promise<{
5
5
  actionSubject: string;
6
6
  action: string;
7
7
  eventType: string;
@@ -11594,8 +11594,8 @@ export declare function createPayloads(interactionId: string, interaction: Inter
11594
11594
  'experience:name': string;
11595
11595
  };
11596
11596
  };
11597
- }[];
11598
- export declare function createExperimentalMetricsPayload(interactionId: string, interaction: InteractionMetrics): {
11597
+ }[]>;
11598
+ export declare function createExperimentalMetricsPayload(interactionId: string, interaction: InteractionMetrics): Promise<{
11599
11599
  actionSubject: string;
11600
11600
  action: string;
11601
11601
  eventType: string;
@@ -23188,4 +23188,4 @@ export declare function createExperimentalMetricsPayload(interactionId: string,
23188
23188
  'experience:name': string;
23189
23189
  };
23190
23190
  };
23191
- } | null;
23191
+ }> | null;
@@ -1,7 +1,8 @@
1
1
  import { type LastInteractionFinishInfo, type PostInteractionLogOutput, type ReactProfilerTiming } from '../common/common/types';
2
2
  import type { VCResult } from '../common/vc/types';
3
3
  import type { LabelStack } from '../interaction-context';
4
- import { VCObserver, type VCObserverOptions } from '../vc/vc-observer';
4
+ import type { VCObserverOptions } from '../vc/types';
5
+ import { VCObserver } from '../vc/vc-observer';
5
6
  export default class PostInteractionLog {
6
7
  /**
7
8
  * Basic info about interaction that has just finished
@@ -55,7 +56,7 @@ export default class PostInteractionLog {
55
56
  /**
56
57
  * Send the log if there is data
57
58
  */
58
- sendPostInteractionLog(): void;
59
+ sendPostInteractionLog(): Promise<void>;
59
60
  /**
60
61
  * This fn should be invoked when an interaction has finished
61
62
  * Basic details about the finished interaction will be recorded
@@ -0,0 +1,2 @@
1
+ export type OnPaintCallback = () => any;
2
+ export default function scheduleOnPaint(callback: OnPaintCallback): void;
@@ -1,5 +1,5 @@
1
- import { VCObserver, type VCObserverOptions } from './vc-observer';
1
+ import type { VCObserverInterface, VCObserverOptions } from './types';
2
2
  declare global {
3
- var __vcObserver: VCObserver;
3
+ var __vcObserver: VCObserverInterface;
4
4
  }
5
- export declare const getVCObserver: (opts?: VCObserverOptions) => VCObserver;
5
+ export declare const getVCObserver: (opts?: VCObserverOptions) => VCObserverInterface;
@@ -0,0 +1,34 @@
1
+ import type { VCRawDataType, VCResult } from '../common/vc/types';
2
+ export type GetVCResultType = {
3
+ start: number;
4
+ stop: number;
5
+ tti: number;
6
+ prefix?: string;
7
+ ssr?: number;
8
+ vc?: VCRawDataType | null;
9
+ };
10
+ export type SelectorConfig = {
11
+ id: boolean;
12
+ testId: boolean;
13
+ role: boolean;
14
+ className: boolean;
15
+ dataVC?: boolean;
16
+ };
17
+ export type VCObserverOptions = {
18
+ heatmapSize?: number | undefined;
19
+ oldDomUpdates?: boolean | undefined;
20
+ devToolsEnabled?: boolean | undefined;
21
+ selectorConfig?: SelectorConfig | undefined;
22
+ isPostInteraction?: boolean;
23
+ };
24
+ export interface VCObserverInterface {
25
+ start(startArg: {
26
+ startTime: number;
27
+ }): void;
28
+ stop(): void;
29
+ getVCRawData(): VCRawDataType | null;
30
+ getVCResult(param: GetVCResultType): Promise<VCResult>;
31
+ setSSRElement(element: HTMLElement): void;
32
+ setReactRootRenderStart(startTime?: number): void;
33
+ setReactRootRenderStop(stopTime?: number): void;
34
+ }
@@ -1,23 +1,9 @@
1
1
  import { type UnbindFn } from 'bind-event-listener';
2
- import type { ComponentsLogType, VCAbortReason, VCAbortReasonType, VCEntryType, VCIgnoreReason, VCRatioType, VCRawDataType, VCResult } from '../../common/vc/types';
2
+ import type { ComponentsLogType, VCAbortReasonType, VCEntryType, VCIgnoreReason, VCRatioType, VCRawDataType, VCResult } from '../../common/vc/types';
3
+ import type { GetVCResultType, VCObserverInterface, VCObserverOptions } from '../types';
3
4
  import { MultiRevisionHeatmap } from './heatmap/heatmap';
4
- import { Observers, type SelectorConfig } from './observers';
5
- type GetVCResultType = {
6
- start: number;
7
- stop: number;
8
- tti: number;
9
- prefix?: string;
10
- ssr?: number;
11
- vc?: VCRawDataType | null;
12
- };
13
- export type VCObserverOptions = {
14
- heatmapSize?: number | undefined;
15
- oldDomUpdates?: boolean | undefined;
16
- devToolsEnabled?: boolean | undefined;
17
- selectorConfig?: SelectorConfig | undefined;
18
- isPostInteraction?: boolean;
19
- };
20
- export declare class VCObserver {
5
+ import { Observers } from './observers';
6
+ export declare class VCObserver implements VCObserverInterface {
21
7
  abortReason: VCAbortReasonType;
22
8
  outOfBoundaryInfo: string;
23
9
  /** config * */
@@ -65,7 +51,7 @@ export declare class VCObserver {
65
51
  targetName: string;
66
52
  ignoreReason: VCIgnoreReason | undefined;
67
53
  }[];
68
- getVCResult: ({ start, stop, tti, prefix, ssr, vc }: GetVCResultType) => VCResult;
54
+ getVCResult: ({ start, stop, tti, prefix, ssr, vc, }: GetVCResultType) => Promise<VCResult>;
69
55
  static calculateVC({ heatmap, ssr, componentsLog, viewport, }: {
70
56
  heatmap: number[][];
71
57
  ssr?: number;
@@ -94,7 +80,6 @@ export declare class VCObserver {
94
80
  private handleUpdate;
95
81
  private legacyHandleUpdate;
96
82
  private onViewportChangeDetected;
97
- abortObservation(abortReason?: VCAbortReason): void;
98
83
  private setAbortReason;
99
84
  private resetState;
100
85
  private getCleanHeatmap;
@@ -111,4 +96,3 @@ export declare class VCObserver {
111
96
  private measureStart;
112
97
  private measureStop;
113
98
  }
114
- export {};