@atlaskit/react-ufo 2.14.3 → 2.16.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 (73) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/assets/index.js +96 -0
  3. package/dist/cjs/assets/utils.js +32 -0
  4. package/dist/cjs/common/assets/types.js +5 -0
  5. package/dist/cjs/create-payload/index.js +42 -5
  6. package/dist/cjs/experience-trace-id-context/index.js +5 -1
  7. package/dist/cjs/segment/segment.js +7 -1
  8. package/dist/cjs/vc/vc-observer/heatmap/heatmap.js +264 -0
  9. package/dist/cjs/vc/vc-observer/index.js +119 -26
  10. package/dist/cjs/vc/vc-observer/revisions/ViewportUpdateClassifier.js +60 -0
  11. package/dist/cjs/vc/vc-observer/revisions/fy24_01.js +71 -0
  12. package/dist/cjs/vc/vc-observer/revisions/fy25_01.js +39 -0
  13. package/dist/cjs/vc/vc-observer/revisions/revisions.js +23 -0
  14. package/dist/cjs/vc/vc-observer/revisions/types.js +5 -0
  15. package/dist/es2019/assets/index.js +82 -0
  16. package/dist/es2019/assets/utils.js +26 -0
  17. package/dist/es2019/common/assets/types.js +1 -0
  18. package/dist/es2019/create-payload/index.js +43 -3
  19. package/dist/es2019/experience-trace-id-context/index.js +4 -0
  20. package/dist/es2019/segment/segment.js +11 -3
  21. package/dist/es2019/vc/vc-observer/heatmap/heatmap.js +230 -0
  22. package/dist/es2019/vc/vc-observer/index.js +97 -3
  23. package/dist/es2019/vc/vc-observer/revisions/ViewportUpdateClassifier.js +41 -0
  24. package/dist/es2019/vc/vc-observer/revisions/fy24_01.js +50 -0
  25. package/dist/es2019/vc/vc-observer/revisions/fy25_01.js +21 -0
  26. package/dist/es2019/vc/vc-observer/revisions/revisions.js +19 -0
  27. package/dist/es2019/vc/vc-observer/revisions/types.js +1 -0
  28. package/dist/esm/assets/index.js +89 -0
  29. package/dist/esm/assets/utils.js +26 -0
  30. package/dist/esm/common/assets/types.js +1 -0
  31. package/dist/esm/create-payload/index.js +42 -5
  32. package/dist/esm/experience-trace-id-context/index.js +4 -0
  33. package/dist/esm/segment/segment.js +7 -1
  34. package/dist/esm/vc/vc-observer/heatmap/heatmap.js +257 -0
  35. package/dist/esm/vc/vc-observer/index.js +119 -26
  36. package/dist/esm/vc/vc-observer/revisions/ViewportUpdateClassifier.js +53 -0
  37. package/dist/esm/vc/vc-observer/revisions/fy24_01.js +64 -0
  38. package/dist/esm/vc/vc-observer/revisions/fy25_01.js +32 -0
  39. package/dist/esm/vc/vc-observer/revisions/revisions.js +17 -0
  40. package/dist/esm/vc/vc-observer/revisions/types.js +1 -0
  41. package/dist/types/assets/index.d.ts +25 -0
  42. package/dist/types/assets/utils.d.ts +6 -0
  43. package/dist/types/common/assets/types.d.ts +18 -0
  44. package/dist/types/common/index.d.ts +1 -0
  45. package/dist/types/common/vc/types.d.ts +27 -8
  46. package/dist/types/config/index.d.ts +2 -1
  47. package/dist/types/create-payload/index.d.ts +11616 -0
  48. package/dist/types/experience-trace-id-context/index.d.ts +1 -0
  49. package/dist/types/resource-timing/index.d.ts +1 -1
  50. package/dist/types/vc/vc-observer/heatmap/heatmap.d.ts +72 -0
  51. package/dist/types/vc/vc-observer/index.d.ts +5 -1
  52. package/dist/types/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +30 -0
  53. package/dist/types/vc/vc-observer/revisions/fy24_01.d.ts +13 -0
  54. package/dist/types/vc/vc-observer/revisions/fy25_01.d.ts +13 -0
  55. package/dist/types/vc/vc-observer/revisions/revisions.d.ts +2 -0
  56. package/dist/types/vc/vc-observer/revisions/types.d.ts +23 -0
  57. package/dist/types-ts4.5/assets/index.d.ts +25 -0
  58. package/dist/types-ts4.5/assets/utils.d.ts +6 -0
  59. package/dist/types-ts4.5/common/assets/types.d.ts +18 -0
  60. package/dist/types-ts4.5/common/index.d.ts +1 -0
  61. package/dist/types-ts4.5/common/vc/types.d.ts +27 -8
  62. package/dist/types-ts4.5/config/index.d.ts +2 -1
  63. package/dist/types-ts4.5/create-payload/index.d.ts +11616 -0
  64. package/dist/types-ts4.5/experience-trace-id-context/index.d.ts +1 -0
  65. package/dist/types-ts4.5/resource-timing/index.d.ts +1 -1
  66. package/dist/types-ts4.5/vc/vc-observer/heatmap/heatmap.d.ts +72 -0
  67. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +15 -1
  68. package/dist/types-ts4.5/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +30 -0
  69. package/dist/types-ts4.5/vc/vc-observer/revisions/fy24_01.d.ts +13 -0
  70. package/dist/types-ts4.5/vc/vc-observer/revisions/fy25_01.d.ts +13 -0
  71. package/dist/types-ts4.5/vc/vc-observer/revisions/revisions.d.ts +2 -0
  72. package/dist/types-ts4.5/vc/vc-observer/revisions/types.d.ts +23 -0
  73. package/package.json +11 -2
@@ -8,3 +8,4 @@ export declare const getActiveTraceHttpRequestHeaders: (_url: string) => {
8
8
  'X-B3-TraceId': string;
9
9
  'X-B3-SpanId': string;
10
10
  } | null;
11
+ export declare const getActiveTraceAsQueryParams: (_url: string) => string | null;
@@ -1,4 +1,4 @@
1
- export type { ResourceTimings } from './common/types';
1
+ export type { ResourceTiming, ResourceTimings } from './common/types';
2
2
  export { configure } from './common/utils/config';
3
3
  export { getResourceTimings } from './main';
4
4
  export { startResourceTimingBuffer } from './utils';
@@ -0,0 +1,72 @@
1
+ import type { ComponentsLogType, MultiHeatmapPayload, VCEntryType, VCIgnoreReason, VCRatioType } from '../../../common/vc/types';
2
+ import type { ObservedMutationType } from '../observers/types';
3
+ import type { RevisionEntry, VCCalculationMethodType } from '../revisions/types';
4
+ type Viewport = {
5
+ w: number;
6
+ h: number;
7
+ };
8
+ type ArraySize = {
9
+ w: number;
10
+ h: number;
11
+ };
12
+ type HeatmapAttrs = {
13
+ viewport: Viewport;
14
+ revisions: RevisionEntry[];
15
+ arraySize?: ArraySize;
16
+ devToolsEnabled?: boolean;
17
+ };
18
+ type Heatmap = Uint32Array;
19
+ type ProcessDataArgs = {
20
+ VCParts: number[];
21
+ VCCalculationMethods: VCCalculationMethodType[];
22
+ clean: boolean;
23
+ ssr?: number;
24
+ };
25
+ type PerRevision<T> = T[];
26
+ export type ApplyChangesError = {
27
+ error: string;
28
+ time: number;
29
+ };
30
+ export type HandleUpdateArgs = {
31
+ time: number;
32
+ type: ObservedMutationType;
33
+ classification: boolean[];
34
+ intersectionRect: DOMRectReadOnly;
35
+ element: HTMLElement;
36
+ targetName: string;
37
+ ignoreReason?: VCIgnoreReason;
38
+ onError: (error: ApplyChangesError) => void;
39
+ };
40
+ export declare class MultiRevisionHeatmap {
41
+ viewport: Viewport;
42
+ arraySize: ArraySize;
43
+ revisions: RevisionEntry[];
44
+ heatmaps: Heatmap[];
45
+ devToolsEnabled: boolean;
46
+ vcRatios: PerRevision<VCRatioType>;
47
+ componentsLogs: PerRevision<ComponentsLogType>;
48
+ constructor({ viewport, revisions, arraySize, devToolsEnabled }: HeatmapAttrs);
49
+ handleUpdate({ time, type, classification, intersectionRect, element, targetName, ignoreReason, onError, }: HandleUpdateArgs): void;
50
+ getData(): {
51
+ heatmaps: Uint32Array[];
52
+ };
53
+ getPayloadShapedData(args: ProcessDataArgs): MultiHeatmapPayload;
54
+ processData({ VCParts, VCCalculationMethods, ssr }: ProcessDataArgs): {
55
+ VC: import("../revisions/types").VCType;
56
+ VCBox: import("../revisions/types").VCBoxType;
57
+ VCEntries: {
58
+ abs: number[][];
59
+ rel: VCEntryType[];
60
+ };
61
+ totalPainted: number;
62
+ }[];
63
+ private mapPixelsToHeatmap;
64
+ private getElementRatio;
65
+ private applyChangesToHeatMap;
66
+ private getIndex;
67
+ private getCleanHeatmap;
68
+ static makeVCReturnObj<T>(VCParts: number[]): {
69
+ [key: string]: T | null;
70
+ };
71
+ }
72
+ export {};
@@ -1,5 +1,6 @@
1
1
  import { type UnbindFn } from 'bind-event-listener';
2
2
  import type { ComponentsLogType, VCAbortReason, VCAbortReasonType, VCEntryType, VCIgnoreReason, VCRatioType, VCRawDataType, VCResult } from '../../common/vc/types';
3
+ import { MultiRevisionHeatmap } from './heatmap/heatmap';
3
4
  import { Observers, type SelectorConfig } from './observers';
4
5
  type GetVCResultType = {
5
6
  start: number;
@@ -20,7 +21,7 @@ export declare class VCObserver {
20
21
  abortReason: VCAbortReasonType;
21
22
  outOfBoundaryInfo: string;
22
23
  /** config * */
23
- static VCParts: string[];
24
+ static VCParts: readonly ["25", "50", "75", "80", "85", "90", "95", "98", "99"];
24
25
  viewport: {
25
26
  w: number;
26
27
  h: number;
@@ -28,6 +29,7 @@ export declare class VCObserver {
28
29
  arraySize: number;
29
30
  heatmap: number[][];
30
31
  heatmapNext: number[][];
32
+ multiHeatmap: MultiRevisionHeatmap | null;
31
33
  componentsLog: ComponentsLogType;
32
34
  vcRatios: VCRatioType;
33
35
  active: boolean;
@@ -80,6 +82,8 @@ export declare class VCObserver {
80
82
  setReactRootRenderStart(startTime?: number): void;
81
83
  setReactRootRenderStop(stopTime?: number): void;
82
84
  private handleUpdate;
85
+ private legacyHandleUpdate;
86
+ private onViewportChangeDetected;
83
87
  abortObservation(abortReason?: VCAbortReason): void;
84
88
  private setAbortReason;
85
89
  private resetState;
@@ -0,0 +1,30 @@
1
+ import type { VCCalculationMethodArgs } from './types';
2
+ export type FilterArgs = {
3
+ type: string;
4
+ tags?: string[];
5
+ ignoreReason?: string;
6
+ };
7
+ type Filter = {
8
+ name: string;
9
+ filter: (args: FilterArgs) => boolean;
10
+ };
11
+ type ClassifyUpdateArgs = {
12
+ element: HTMLElement;
13
+ type: string;
14
+ tags?: string[];
15
+ ignoreReason?: string;
16
+ };
17
+ export declare class ViewportUpdateClassifier {
18
+ types: string[];
19
+ filters: Filter[];
20
+ removedFilters: string[];
21
+ VCCalculationMethod(_: VCCalculationMethodArgs): {
22
+ VC: {};
23
+ VCBox: {};
24
+ };
25
+ protected __combinedTypes: string[];
26
+ protected __combinedFilters: Filter[];
27
+ mergeConfig(): void;
28
+ classifyUpdate({ element, type, tags, ignoreReason }: ClassifyUpdateArgs): boolean;
29
+ }
30
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { VCCalculationMethodArgs, VCCalculationMethodReturn } from './types';
2
+ import { type FilterArgs, ViewportUpdateClassifier } from './ViewportUpdateClassifier';
3
+ export declare class FY24_01Classifier extends ViewportUpdateClassifier {
4
+ revision: string;
5
+ types: string[];
6
+ filters: {
7
+ name: string;
8
+ filter: ({ type, ignoreReason }: FilterArgs) => boolean;
9
+ }[];
10
+ VCCalculationMethod({ VCParts, entries, totalPainted, componentsLog, }: VCCalculationMethodArgs): VCCalculationMethodReturn;
11
+ constructor();
12
+ }
13
+ export declare const revFY24_01Classifier: FY24_01Classifier;
@@ -0,0 +1,13 @@
1
+ import { FY24_01Classifier } from './fy24_01';
2
+ import { type FilterArgs } from './ViewportUpdateClassifier';
3
+ export declare class FY25_01Classifier extends FY24_01Classifier {
4
+ revision: string;
5
+ types: string[];
6
+ filters: {
7
+ name: string;
8
+ filter: ({ type, ignoreReason }: FilterArgs) => boolean;
9
+ }[];
10
+ removedFilters: never[];
11
+ constructor();
12
+ }
13
+ export declare const revFY25_01Classifier: FY25_01Classifier;
@@ -0,0 +1,2 @@
1
+ import { type RevisionEntry } from './types';
2
+ export declare const getRevisions: () => RevisionEntry[];
@@ -0,0 +1,23 @@
1
+ import type { ComponentsLogType } from '../../../common/vc/types';
2
+ import { ViewportUpdateClassifier } from './ViewportUpdateClassifier';
3
+ export type RevisionEntry = {
4
+ name: string;
5
+ classifier: ViewportUpdateClassifier;
6
+ };
7
+ export type VCType = {
8
+ [key: string]: number | null;
9
+ };
10
+ export type VCBoxType = {
11
+ [key: string]: null | Set<string>;
12
+ };
13
+ export type VCCalculationMethodArgs = {
14
+ VCParts: number[];
15
+ entries: number[][];
16
+ totalPainted: number;
17
+ componentsLog: ComponentsLogType;
18
+ };
19
+ export type VCCalculationMethodReturn = {
20
+ VC: VCType;
21
+ VCBox: VCBoxType;
22
+ };
23
+ export type VCCalculationMethodType = (args: VCCalculationMethodArgs) => VCCalculationMethodReturn;
@@ -0,0 +1,25 @@
1
+ import type { AssetsClassification, AssetsData, AssetsReporter } from '../common';
2
+ import type { ResourceTiming, ResourceTimings } from '../resource-timing';
3
+ export declare class CHRSummary {
4
+ bundles: {
5
+ mem: number;
6
+ disk: number;
7
+ net: number;
8
+ };
9
+ bundlesCount: number;
10
+ size: {
11
+ mem: number;
12
+ disk: number;
13
+ net: number;
14
+ };
15
+ sizeTotal: number;
16
+ add(asset: ResourceTiming): void;
17
+ static makePayload(summary: CHRSummary): AssetsReporter;
18
+ }
19
+ export declare class CHRReporter {
20
+ all: CHRSummary;
21
+ allAtlassian: CHRSummary;
22
+ preloaded: CHRSummary;
23
+ constructor();
24
+ get(resourceTimings: ResourceTimings, assetsClassification: AssetsClassification): AssetsData | null;
25
+ }
@@ -0,0 +1,6 @@
1
+ export declare const cacheableTypes: string[];
2
+ export declare const MEMORY_KEY = "mem";
3
+ export declare const DISK_KEY = "disk";
4
+ export declare const NETWORK_KEY = "net";
5
+ export declare const calculateTransferType: (type: string, duration: number, size: number | undefined) => "disk" | "mem" | "net" | null;
6
+ export declare const round: (n: number) => number;
@@ -0,0 +1,18 @@
1
+ import type { ResourceTiming } from '../../resource-timing';
2
+ export type AssetResourceEntry = {
3
+ label: string;
4
+ entry: ResourceTiming;
5
+ };
6
+ export type AssetsClassification = {
7
+ all: boolean;
8
+ allAtlassian: (entry: AssetResourceEntry) => boolean;
9
+ preloaded: (entry: AssetResourceEntry) => boolean;
10
+ };
11
+ export type AssetsReporter = {
12
+ size: number | null;
13
+ chr: number | null;
14
+ count: number;
15
+ };
16
+ export interface AssetsData {
17
+ [key: string]: AssetsReporter;
18
+ }
@@ -1,3 +1,4 @@
1
+ export type { AssetResourceEntry, AssetsClassification, AssetsData, AssetsReporter, } from './assets/types';
1
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';
2
3
  /**
3
4
  * @deprecated Prefer import from @atlaskit/react-ufo/interaction-context
@@ -1,4 +1,5 @@
1
1
  import type { UnbindFn } from 'bind-event-listener';
2
+ import { MultiRevisionHeatmap } from '../../vc/vc-observer/heatmap/heatmap';
2
3
  export declare const AbortEvent: {
3
4
  readonly wheel: "wheel";
4
5
  readonly keydown: "keydown";
@@ -29,6 +30,7 @@ export type VCRawDataType = {
29
30
  oldDomUpdatesEnabled: boolean;
30
31
  devToolsEnabled: boolean;
31
32
  ratios: VCRatioType;
33
+ multiHeatmap: MultiRevisionHeatmap | null;
32
34
  };
33
35
  export type VCEntryType = {
34
36
  time: number;
@@ -49,7 +51,7 @@ export type VCResult = {
49
51
  h: number;
50
52
  } | {
51
53
  [key: string]: boolean | number | string[] | null | VCEntryType[];
52
- };
54
+ } | MultiHeatmapPayload;
53
55
  };
54
56
  export type MetricsDevToolsTypes = {
55
57
  '75': number | null;
@@ -68,15 +70,19 @@ export type ExperimentalVCDevToolsOptions = {
68
70
  export type ComponentsLogType = {
69
71
  [timestamp: number]: ComponentsLogEntry[];
70
72
  };
73
+ interface VCDebugInfo {
74
+ entries: VCEntryType[];
75
+ log: ComponentsLogType;
76
+ metrics: MetricsDevToolsTypes;
77
+ heatmap: number[][];
78
+ ratios: VCRatioType;
79
+ start: number;
80
+ stop: number;
81
+ }
71
82
  declare global {
72
83
  interface Window {
73
- __vc?: {
74
- entries: VCEntryType[];
75
- log: ComponentsLogType;
76
- metrics: MetricsDevToolsTypes;
77
- heatmap: number[][];
78
- ratios: VCRatioType;
79
- };
84
+ __vc?: VCDebugInfo;
85
+ __vcNext?: VCDebugInfo;
80
86
  __vcNotAvailableReason?: string;
81
87
  __SSR_PLACEHOLDERS_DIMENSIONS__?: {
82
88
  [key: string]: DOMRectReadOnly;
@@ -89,3 +95,16 @@ declare global {
89
95
  };
90
96
  }
91
97
  }
98
+ type MultiHeatmapRevisionPayload = {
99
+ 'metric:vc90': number | null;
100
+ revision: string;
101
+ clean: boolean;
102
+ vcDetails?: {
103
+ [key: string]: {
104
+ t: number;
105
+ e: string[];
106
+ };
107
+ };
108
+ };
109
+ export type MultiHeatmapPayload = MultiHeatmapRevisionPayload[];
110
+ export {};
@@ -1,4 +1,4 @@
1
- import type { InteractionMetrics, InteractionType } from '../common';
1
+ import type { AssetsClassification, InteractionMetrics, InteractionType } from '../common';
2
2
  export interface AdditionalData {
3
3
  [key: string]: null | string | number | boolean | undefined | AdditionalData | Record<string, AdditionalData> | Array<AdditionalData>;
4
4
  }
@@ -57,6 +57,7 @@ export type Config = {
57
57
  readonly getSSRTimings?: () => SSRTiming[];
58
58
  readonly getSSRDoneTime?: () => number | undefined;
59
59
  };
60
+ readonly assetsClassification?: AssetsClassification;
60
61
  readonly enableBetterPageVisibilityApi?: boolean;
61
62
  readonly vc?: {
62
63
  readonly enabled?: boolean;