@atlaskit/react-ufo 3.12.5 → 3.13.1

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 (74) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/config/index.js +15 -20
  3. package/dist/cjs/create-payload/utils/get-vc-metrics.js +5 -44
  4. package/dist/cjs/vc/index.js +49 -101
  5. package/dist/cjs/vc/vc-observer/getVCRevisionsData.js +13 -67
  6. package/dist/cjs/vc/vc-observer/index.js +31 -107
  7. package/dist/cjs/vc/vc-observer/observers/index.js +3 -2
  8. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +38 -12
  9. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -0
  10. package/dist/es2019/config/index.js +18 -23
  11. package/dist/es2019/create-payload/utils/get-vc-metrics.js +12 -41
  12. package/dist/es2019/vc/index.js +44 -88
  13. package/dist/es2019/vc/vc-observer/getVCRevisionsData.js +15 -71
  14. package/dist/es2019/vc/vc-observer/index.js +11 -87
  15. package/dist/es2019/vc/vc-observer/observers/index.js +2 -1
  16. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +38 -13
  17. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -1
  18. package/dist/esm/config/index.js +15 -20
  19. package/dist/esm/create-payload/utils/get-vc-metrics.js +6 -45
  20. package/dist/esm/vc/index.js +49 -101
  21. package/dist/esm/vc/vc-observer/getVCRevisionsData.js +13 -67
  22. package/dist/esm/vc/vc-observer/index.js +31 -107
  23. package/dist/esm/vc/vc-observer/observers/index.js +3 -2
  24. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +38 -12
  25. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +9 -0
  26. package/dist/types/common/vc/types.d.ts +0 -2
  27. package/dist/types/config/index.d.ts +1 -0
  28. package/dist/types/create-post-interaction-log-payload/index.d.ts +1 -1
  29. package/dist/types/vc/types.d.ts +1 -0
  30. package/dist/types/vc/vc-observer/getVCRevisionsData.d.ts +2 -17
  31. package/dist/types/vc/vc-observer/index.d.ts +0 -4
  32. package/dist/types/vc/vc-observer/observers/index.d.ts +3 -0
  33. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +4 -1
  34. package/dist/types/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.d.ts +1 -1
  35. package/dist/types-ts4.5/common/vc/types.d.ts +0 -2
  36. package/dist/types-ts4.5/config/index.d.ts +1 -0
  37. package/dist/types-ts4.5/create-post-interaction-log-payload/index.d.ts +1 -1
  38. package/dist/types-ts4.5/vc/types.d.ts +1 -0
  39. package/dist/types-ts4.5/vc/vc-observer/getVCRevisionsData.d.ts +2 -17
  40. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +0 -4
  41. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +3 -0
  42. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +4 -1
  43. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.d.ts +1 -1
  44. package/package.json +1 -4
  45. package/dist/cjs/vc/vc-observer/heatmap/heatmap.js +0 -281
  46. package/dist/cjs/vc/vc-observer/revisions/ViewportUpdateClassifier.js +0 -68
  47. package/dist/cjs/vc/vc-observer/revisions/fy25_01.js +0 -76
  48. package/dist/cjs/vc/vc-observer/revisions/fy25_02.js +0 -59
  49. package/dist/cjs/vc/vc-observer/revisions/revisions.js +0 -24
  50. package/dist/cjs/vc/vc-observer/revisions/types.js +0 -5
  51. package/dist/es2019/vc/vc-observer/heatmap/heatmap.js +0 -247
  52. package/dist/es2019/vc/vc-observer/revisions/ViewportUpdateClassifier.js +0 -48
  53. package/dist/es2019/vc/vc-observer/revisions/fy25_01.js +0 -55
  54. package/dist/es2019/vc/vc-observer/revisions/fy25_02.js +0 -35
  55. package/dist/es2019/vc/vc-observer/revisions/revisions.js +0 -18
  56. package/dist/es2019/vc/vc-observer/revisions/types.js +0 -1
  57. package/dist/esm/vc/vc-observer/heatmap/heatmap.js +0 -274
  58. package/dist/esm/vc/vc-observer/revisions/ViewportUpdateClassifier.js +0 -61
  59. package/dist/esm/vc/vc-observer/revisions/fy25_01.js +0 -69
  60. package/dist/esm/vc/vc-observer/revisions/fy25_02.js +0 -52
  61. package/dist/esm/vc/vc-observer/revisions/revisions.js +0 -18
  62. package/dist/esm/vc/vc-observer/revisions/types.js +0 -1
  63. package/dist/types/vc/vc-observer/heatmap/heatmap.d.ts +0 -79
  64. package/dist/types/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +0 -31
  65. package/dist/types/vc/vc-observer/revisions/fy25_01.d.ts +0 -13
  66. package/dist/types/vc/vc-observer/revisions/fy25_02.d.ts +0 -16
  67. package/dist/types/vc/vc-observer/revisions/revisions.d.ts +0 -2
  68. package/dist/types/vc/vc-observer/revisions/types.d.ts +0 -28
  69. package/dist/types-ts4.5/vc/vc-observer/heatmap/heatmap.d.ts +0 -79
  70. package/dist/types-ts4.5/vc/vc-observer/revisions/ViewportUpdateClassifier.d.ts +0 -31
  71. package/dist/types-ts4.5/vc/vc-observer/revisions/fy25_01.d.ts +0 -13
  72. package/dist/types-ts4.5/vc/vc-observer/revisions/fy25_02.d.ts +0 -16
  73. package/dist/types-ts4.5/vc/vc-observer/revisions/revisions.d.ts +0 -2
  74. package/dist/types-ts4.5/vc/vc-observer/revisions/types.d.ts +0 -28
@@ -20,9 +20,7 @@ var _attachAbortListeners = require("./attachAbortListeners");
20
20
  var _getVCRevisionDebugDetails = require("./getVCRevisionDebugDetails");
21
21
  var _getVCRevisionsData = require("./getVCRevisionsData");
22
22
  var _getViewport = require("./getViewport");
23
- var _heatmap = require("./heatmap/heatmap");
24
23
  var _observers = require("./observers");
25
- var _revisions = require("./revisions/revisions");
26
24
  var _excluded = ["__debug__element"];
27
25
  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; }
28
26
  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) { (0, _defineProperty2.default)(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; }
@@ -63,7 +61,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
63
61
  });
64
62
  /* heatmap */
65
63
  (0, _defineProperty2.default)(this, "arraySize", 0);
66
- (0, _defineProperty2.default)(this, "multiHeatmap", null);
67
64
  (0, _defineProperty2.default)(this, "componentsLog", {});
68
65
  (0, _defineProperty2.default)(this, "vcRatios", {});
69
66
  (0, _defineProperty2.default)(this, "active", false);
@@ -95,7 +92,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
95
92
  abortReason: _objectSpread({}, _this.abortReason),
96
93
  heatmap: _this.heatmap,
97
94
  heatmapNext: _this.heatmapNext,
98
- multiHeatmap: _this.multiHeatmap,
99
95
  outOfBoundaryInfo: _this.outOfBoundaryInfo,
100
96
  totalTime: Math.round(_this.totalTime + _this.observers.getTotalTime()),
101
97
  componentsLog: _objectSpread({}, _this.componentsLog),
@@ -107,7 +103,7 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
107
103
  });
108
104
  (0, _defineProperty2.default)(this, "getVCResult", /*#__PURE__*/function () {
109
105
  var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref3) {
110
- var start, stop, tti, prefix, ssr, vc, isEventAborted, experienceKey, interactionId, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, multiHeatmap, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, _ufo_devtool_onVCRev2, _ref10, _ufo_devtool_onVCRev, _ref9, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
106
+ var start, stop, tti, prefix, ssr, vc, isEventAborted, experienceKey, interactionId, startTime, fullPrefix, rawData, abortReason, abortReasonInfo, heatmap, heatmapNext, outOfBoundaryInfo, totalTime, componentsLog, viewport, devToolsEnabled, ratios, isTTVCv1Disabled, vcAbortedResultWithRevisions, ttvcV1Result, VC, VCBox, VCEntries, totalPainted, _componentsLog, vcNext, outOfBoundary, stopTime, ttvcV1DevToolInfo, ttvcV2DevToolInfo, _ufo_devtool_onVCRev2, _ref10, _ufo_devtool_onVCRev, _ref9, isVCClean, revisionsData, speedIndex, isTTVCv3Enabled;
111
107
  return _regenerator.default.wrap(function _callee$(_context) {
112
108
  while (1) switch (_context.prev = _context.next) {
113
109
  case 0:
@@ -121,8 +117,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
121
117
  }
122
118
  return _context.abrupt("return", {});
123
119
  case 6:
124
- abortReason = rawData.abortReason, abortReasonInfo = rawData.abortReasonInfo, heatmap = rawData.heatmap, heatmapNext = rawData.heatmapNext, outOfBoundaryInfo = rawData.outOfBoundaryInfo, totalTime = rawData.totalTime, componentsLog = rawData.componentsLog, viewport = rawData.viewport, devToolsEnabled = rawData.devToolsEnabled, ratios = rawData.ratios, multiHeatmap = rawData.multiHeatmap;
125
- isTTVCv1Disabled = (0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience') ? !(0, _config.isVCRevisionEnabled)('fy25.01', experienceKey) : !(0, _config.isVCRevisionEnabled)('fy25.01'); // NOTE: as part of platform_ufo_add_vc_abort_reason_by_revisions feature,
120
+ abortReason = rawData.abortReason, abortReasonInfo = rawData.abortReasonInfo, heatmap = rawData.heatmap, heatmapNext = rawData.heatmapNext, outOfBoundaryInfo = rawData.outOfBoundaryInfo, totalTime = rawData.totalTime, componentsLog = rawData.componentsLog, viewport = rawData.viewport, devToolsEnabled = rawData.devToolsEnabled, ratios = rawData.ratios;
121
+ isTTVCv1Disabled = !(0, _config.isVCRevisionEnabled)('fy25.01', experienceKey); // NOTE: as part of platform_ufo_add_vc_abort_reason_by_revisions feature,
126
122
  // we want to report abort by scroll events the same way as other abort reasons
127
123
  // i.e. not have the concept of `abortReason.blocking` anymore
128
124
  if (!(abortReasonInfo !== null && (0, _platformFeatureFlags.fg)('platform_ufo_add_vc_abort_reason_by_revisions'))) {
@@ -325,8 +321,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
325
321
  end: stop
326
322
  },
327
323
  isVCClean: isVCClean,
328
- multiHeatmap: multiHeatmap,
329
- ssr: ssr,
330
324
  calculatedVC: {
331
325
  VC: VC,
332
326
  VCBox: VCBox
@@ -345,7 +339,7 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
345
339
  }
346
340
  return _context.abrupt("return", _objectSpread(_objectSpread(_objectSpread((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:size"), viewport), "".concat(fullPrefix, "vc:time"), Math.round(totalTime + (stopTime - startTime))), "".concat(fullPrefix, "vc:ratios"), ratios), outOfBoundary), {}, (0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:ignored"), _this.getIgnoredElements(componentsLog)), revisionsData), speedIndex));
347
341
  case 32:
348
- isTTVCv3Enabled = (0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience') ? (0, _config.isVCRevisionEnabled)('fy25.03', experienceKey) : (0, _config.isVCRevisionEnabled)('fy25.03');
342
+ isTTVCv3Enabled = (0, _config.isVCRevisionEnabled)('fy25.03', experienceKey);
349
343
  return _context.abrupt("return", _objectSpread(_objectSpread(_objectSpread((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({
350
344
  'metrics:vc': VC
351
345
  }, "".concat(fullPrefix, "vc:state"), true), "".concat(fullPrefix, "vc:clean"), isVCClean), "".concat(fullPrefix, "vc:dom"), VCBox), "".concat(fullPrefix, "vc:updates"), isTTVCv3Enabled ? undefined : VCEntries.rel.slice(0, 50)), "".concat(fullPrefix, "vc:size"), viewport), "".concat(fullPrefix, "vc:time"), Math.round(totalTime + (stopTime - startTime))), "".concat(fullPrefix, "vc:total"), totalPainted), "".concat(fullPrefix, "vc:ratios"), ratios), outOfBoundary), {}, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(fullPrefix, "vc:next"), vcNext.VC), "".concat(fullPrefix, "vc:next:updates"), isTTVCv3Enabled ? undefined : vcNext.VCEntries.rel.slice(0, 50)), "".concat(fullPrefix, "vc:next:dom"), vcNext.VCBox), "".concat(fullPrefix, "vc:ignored"), _this.getIgnoredElements(componentsLog)), revisionsData), speedIndex));
@@ -360,29 +354,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
360
354
  };
361
355
  }());
362
356
  (0, _defineProperty2.default)(this, "handleUpdate", function (rawTime, intersectionRect, targetName, element, type, ignoreReason, attributeName, oldValue, newValue) {
363
- _this.measureStart();
364
- _this.legacyHandleUpdate(rawTime, intersectionRect, targetName, element, type, ignoreReason, attributeName, oldValue, newValue);
365
- var isTTVCv3Disabled = !(0, _config.isVCRevisionEnabled)('fy25.03');
366
- if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
367
- var interaction = (0, _interactionMetrics.getActiveInteraction)();
368
- isTTVCv3Disabled = !(0, _config.isVCRevisionEnabled)('fy25.03', interaction === null || interaction === void 0 ? void 0 : interaction.ufoName);
369
- }
370
- if (isTTVCv3Disabled) {
371
- _this.onViewportChangeDetected({
372
- timestamp: rawTime,
373
- intersectionRect: intersectionRect,
374
- targetName: targetName,
375
- element: element,
376
- type: type,
377
- ignoreReason: ignoreReason,
378
- attributeName: attributeName,
379
- oldValue: oldValue,
380
- newValue: newValue
381
- });
382
- }
383
- _this.measureStop();
384
- });
385
- (0, _defineProperty2.default)(this, "legacyHandleUpdate", function (rawTime, intersectionRect, targetName, element, type, ignoreReason, attributeName, oldValue, newValue) {
386
357
  if (_this.abortReason.reason === null || _this.abortReason.blocking === false) {
387
358
  var time = Math.round(rawTime - _this.startTime);
388
359
  var mappedValues = _this.mapPixelsToHeatmap(intersectionRect.left, intersectionRect.top, intersectionRect.width, intersectionRect.height);
@@ -390,11 +361,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
390
361
  if (!ignoreReason) {
391
362
  _this.applyChangesToHeatMap(mappedValues, time, _this.heatmapNext);
392
363
  }
393
- var isTTVCv1Disabled = !(0, _config.isVCRevisionEnabled)('fy25.01');
394
- if ((0, _platformFeatureFlags.fg)('platform_ufo_vc_enable_revisions_by_experience')) {
395
- var interaction = (0, _interactionMetrics.getActiveInteraction)();
396
- isTTVCv1Disabled = !(0, _config.isVCRevisionEnabled)('fy25.01', interaction === null || interaction === void 0 ? void 0 : interaction.ufoName);
397
- }
364
+ var interaction = (0, _interactionMetrics.getActiveInteraction)();
365
+ var isTTVCv1Disabled = !(0, _config.isVCRevisionEnabled)('fy25.01', interaction === null || interaction === void 0 ? void 0 : interaction.ufoName);
398
366
  if (!isTTVCv1Disabled && (!ignoreReason || ignoreReason === 'not-visible') && type !== 'attr') {
399
367
  _this.applyChangesToHeatMap(mappedValues, time, _this.heatmap);
400
368
  }
@@ -413,44 +381,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
413
381
  });
414
382
  }
415
383
  });
416
- (0, _defineProperty2.default)(this, "onViewportChangeDetected", function (_ref11) {
417
- var element = _ref11.element,
418
- type = _ref11.type,
419
- ignoreReason = _ref11.ignoreReason,
420
- timestamp = _ref11.timestamp,
421
- targetName = _ref11.targetName,
422
- intersectionRect = _ref11.intersectionRect,
423
- attributeName = _ref11.attributeName,
424
- oldValue = _ref11.oldValue,
425
- newValue = _ref11.newValue;
426
- if (_this.multiHeatmap === null) {
427
- return;
428
- }
429
- // @todo add abort reason handling
430
- var time = Math.round(timestamp - _this.startTime);
431
- var revisions = (0, _revisions.getRevisions)();
432
- var revisionsClassification = revisions.map(function (revision) {
433
- return revision.classifier.classifyUpdate({
434
- element: element,
435
- type: type,
436
- ignoreReason: ignoreReason
437
- });
438
- }, []);
439
- _this.multiHeatmap.handleUpdate({
440
- time: time,
441
- targetName: targetName,
442
- intersectionRect: intersectionRect,
443
- type: type,
444
- element: element,
445
- classification: revisionsClassification,
446
- onError: function onError(error) {
447
- _this.setAbortReason(abortReason.error, error.time, error.error);
448
- },
449
- attributeName: attributeName,
450
- oldValue: oldValue,
451
- newValue: newValue
452
- });
453
- });
454
384
  (0, _defineProperty2.default)(this, "mapPixelsToHeatmap", function (left, top, width, height) {
455
385
  var _this$viewport = _this.viewport,
456
386
  w = _this$viewport.w,
@@ -507,10 +437,10 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
507
437
  var unbinds = (0, _attachAbortListeners.attachAbortListeners)(window, _this.viewport, _this.abortReasonCallback);
508
438
  if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__) {
509
439
  var _window2;
510
- Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref12) {
511
- var _ref13 = (0, _slicedToArray2.default)(_ref12, 2),
512
- key = _ref13[0],
513
- time = _ref13[1];
440
+ Object.entries(window.__SSR_ABORT_LISTENERS__.aborts).forEach(function (_ref11) {
441
+ var _ref12 = (0, _slicedToArray2.default)(_ref11, 2),
442
+ key = _ref12[0],
443
+ time = _ref12[1];
514
444
  if (time) {
515
445
  _this.abortReasonCallback(key, time);
516
446
  }
@@ -523,6 +453,7 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
523
453
  this.arraySize = options.heatmapSize || 200;
524
454
  this.devToolsEnabled = options.devToolsEnabled || false;
525
455
  this.oldDomUpdatesEnabled = options.oldDomUpdates || false;
456
+ var ssrEnablePageLayoutPlaceholder = options.ssrEnablePageLayoutPlaceholder;
526
457
  this.observers = new _observers.Observers({
527
458
  selectorConfig: options.selectorConfig || {
528
459
  id: false,
@@ -530,21 +461,19 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
530
461
  role: false,
531
462
  className: true,
532
463
  dataVC: true
464
+ },
465
+ SSRConfig: {
466
+ enablePageLayoutPlaceholder: ssrEnablePageLayoutPlaceholder || false
533
467
  }
534
468
  });
535
469
  this.heatmap = !(0, _config.isVCRevisionEnabled)('fy25.01') ? [] : this.getCleanHeatmap();
536
470
  this.heatmapNext = this.getCleanHeatmap();
537
- this.multiHeatmap = new _heatmap.MultiRevisionHeatmap({
538
- viewport: this.viewport,
539
- revisions: (0, _revisions.getRevisions)(),
540
- devToolsEnabled: this.devToolsEnabled
541
- });
542
471
  this.isPostInteraction = options.isPostInteraction || false;
543
472
  }
544
473
  return (0, _createClass2.default)(VCObserver, [{
545
474
  key: "start",
546
- value: function start(_ref14) {
547
- var startTime = _ref14.startTime;
475
+ value: function start(_ref13) {
476
+ var startTime = _ref13.startTime;
548
477
  this.active = true;
549
478
  if (this.observers.isBrowserSupported()) {
550
479
  this.setViewportSize();
@@ -566,12 +495,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
566
495
  }, {
567
496
  key: "getIgnoredElements",
568
497
  value: function getIgnoredElements(componentsLog) {
569
- return Object.values(componentsLog).flat().filter(function (_ref15) {
570
- var ignoreReason = _ref15.ignoreReason;
498
+ return Object.values(componentsLog).flat().filter(function (_ref14) {
499
+ var ignoreReason = _ref14.ignoreReason;
571
500
  return Boolean(ignoreReason);
572
- }).map(function (_ref16) {
573
- var targetName = _ref16.targetName,
574
- ignoreReason = _ref16.ignoreReason;
501
+ }).map(function (_ref15) {
502
+ var targetName = _ref15.targetName,
503
+ ignoreReason = _ref15.ignoreReason;
575
504
  return {
576
505
  targetName: targetName,
577
506
  ignoreReason: ignoreReason
@@ -621,11 +550,6 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
621
550
  this.detachAbortListeners();
622
551
  this.heatmap = !(0, _config.isVCRevisionEnabled)('fy25.01') ? [] : this.getCleanHeatmap();
623
552
  this.heatmapNext = this.getCleanHeatmap();
624
- this.multiHeatmap = new _heatmap.MultiRevisionHeatmap({
625
- viewport: this.viewport,
626
- revisions: (0, _revisions.getRevisions)(),
627
- devToolsEnabled: this.devToolsEnabled
628
- });
629
553
  this.totalTime = 0;
630
554
  this.componentsLog = {};
631
555
  this.vcRatios = {};
@@ -694,12 +618,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
694
618
  }
695
619
  }], [{
696
620
  key: "calculateVC",
697
- value: function calculateVC(_ref17) {
698
- var heatmap = _ref17.heatmap,
699
- _ref17$ssr = _ref17.ssr,
700
- ssr = _ref17$ssr === void 0 ? UNUSED_SECTOR : _ref17$ssr,
701
- componentsLog = _ref17.componentsLog,
702
- viewport = _ref17.viewport;
621
+ value: function calculateVC(_ref16) {
622
+ var heatmap = _ref16.heatmap,
623
+ _ref16$ssr = _ref16.ssr,
624
+ ssr = _ref16$ssr === void 0 ? UNUSED_SECTOR : _ref16$ssr,
625
+ componentsLog = _ref16.componentsLog,
626
+ viewport = _ref16.viewport;
703
627
  var lastUpdate = {};
704
628
  var totalPainted = 0;
705
629
  if (ssr !== UNUSED_SECTOR) {
@@ -765,11 +689,11 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
765
689
  });
766
690
  return VCRatio;
767
691
  }, 0);
768
- var VCEntries = entries.reduce(function (acc, _ref18, i) {
692
+ var VCEntries = entries.reduce(function (acc, _ref17, i) {
769
693
  var _acc$abs, _componentsLog$timest, _acc$rel$vc, _acc$rel;
770
- var _ref19 = (0, _slicedToArray2.default)(_ref18, 2),
771
- timestamp = _ref19[0],
772
- entryPainted = _ref19[1];
694
+ var _ref18 = (0, _slicedToArray2.default)(_ref17, 2),
695
+ timestamp = _ref18[0],
696
+ entryPainted = _ref18[1];
773
697
  var currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);
774
698
  var currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;
775
699
  var logEntry = (0, _toConsumableArray2.default)(new Set((_componentsLog$timest = componentsLog[timestamp]) === null || _componentsLog$timest === void 0 ? void 0 : _componentsLog$timest.filter(function (v) {
@@ -31,7 +31,8 @@ function isElementVisible(target) {
31
31
  }
32
32
  var Observers = exports.Observers = /*#__PURE__*/function () {
33
33
  function Observers(opts) {
34
- var _this = this;
34
+ var _this = this,
35
+ _opts$SSRConfig;
35
36
  (0, _classCallCheck2.default)(this, Observers);
36
37
  (0, _defineProperty2.default)(this, "observedMutations", new WeakMap());
37
38
  (0, _defineProperty2.default)(this, "elementsInView", new Set());
@@ -71,7 +72,7 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
71
72
  this.selectorConfig = _objectSpread(_objectSpread({}, this.selectorConfig), opts.selectorConfig);
72
73
  this.intersectionObserver = this.getIntersectionObserver();
73
74
  this.mutationObserver = this.getMutationObserver();
74
- this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers();
75
+ this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers((_opts$SSRConfig = opts.SSRConfig) === null || _opts$SSRConfig === void 0 ? void 0 : _opts$SSRConfig.enablePageLayoutPlaceholder);
75
76
  }
76
77
  return (0, _createClass2.default)(Observers, [{
77
78
  key: "isBrowserSupported",
@@ -9,15 +9,39 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var ANCESTOR_LOOKUP_LIMIT = 10;
12
+ var PAGE_LAYOUT_ID = 'page-layout.root';
12
13
  var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/function () {
13
14
  function SSRPlaceholderHandlers() {
14
15
  var _this = this;
16
+ var enablePageLayoutPlaceholder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
15
17
  (0, _classCallCheck2.default)(this, SSRPlaceholderHandlers);
16
18
  (0, _defineProperty2.default)(this, "staticPlaceholders", new Map());
17
19
  (0, _defineProperty2.default)(this, "callbacks", new Map());
18
20
  (0, _defineProperty2.default)(this, "getSizeCallbacks", new Map());
19
21
  (0, _defineProperty2.default)(this, "reactValidateCallbacks", new Map());
20
22
  (0, _defineProperty2.default)(this, "EQUALITY_THRESHOLD", 1);
23
+ (0, _defineProperty2.default)(this, "getPlaceholderId", function (el) {
24
+ var _el$dataset;
25
+ var ssrPlaceholderId = el === null || el === void 0 || (_el$dataset = el.dataset) === null || _el$dataset === void 0 ? void 0 : _el$dataset.ssrPlaceholder;
26
+ if (!!ssrPlaceholderId) {
27
+ return ssrPlaceholderId;
28
+ }
29
+ if (_this.enablePageLayoutPlaceholder && (el === null || el === void 0 ? void 0 : el.dataset.testid) === PAGE_LAYOUT_ID) {
30
+ return PAGE_LAYOUT_ID;
31
+ }
32
+ return '';
33
+ });
34
+ (0, _defineProperty2.default)(this, "getPlaceholderReplacementId", function (el) {
35
+ var _el$dataset2;
36
+ var ssrPlaceholderReplaceId = el === null || el === void 0 || (_el$dataset2 = el.dataset) === null || _el$dataset2 === void 0 ? void 0 : _el$dataset2.ssrPlaceholderReplace;
37
+ if (!!ssrPlaceholderReplaceId) {
38
+ return ssrPlaceholderReplaceId;
39
+ }
40
+ if (_this.enablePageLayoutPlaceholder && (el === null || el === void 0 ? void 0 : el.dataset.testid) === PAGE_LAYOUT_ID) {
41
+ return PAGE_LAYOUT_ID;
42
+ }
43
+ return '';
44
+ });
21
45
  (0, _defineProperty2.default)(this, "intersectionObserverCallback", function (_ref) {
22
46
  var _this$intersectionObs;
23
47
  var target = _ref.target,
@@ -27,7 +51,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
27
51
  // impossible case - keep typescript healthy
28
52
  return;
29
53
  }
30
- var staticKey = target.dataset.ssrPlaceholder || '';
54
+ var staticKey = _this.getPlaceholderId(target);
31
55
  if (staticKey) {
32
56
  if (_this.staticPlaceholders.has(staticKey) && _this.callbacks.has(staticKey)) {
33
57
  // validation
@@ -49,7 +73,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
49
73
  _this.callbacks.delete(staticKey);
50
74
  }
51
75
  } else {
52
- var key = target.dataset.ssrPlaceholderReplace || '';
76
+ var key = _this.getPlaceholderReplacementId(target);
53
77
  var _resolve2 = _this.reactValidateCallbacks.get(key);
54
78
  if (!_resolve2) {
55
79
  return;
@@ -77,25 +101,27 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
77
101
  }).forEach(_this.intersectionObserverCallback);
78
102
  });
79
103
  }
104
+ this.enablePageLayoutPlaceholder = enablePageLayoutPlaceholder;
80
105
  if (window.document) {
81
106
  try {
82
- var existingElements = document.querySelectorAll('[data-ssr-placeholder]');
107
+ var selector = this.enablePageLayoutPlaceholder ? '[data-ssr-placeholder],[data-testid="page-layout.root"]' : '[data-ssr-placeholder]';
108
+ var existingElements = document.querySelectorAll(selector);
83
109
  existingElements.forEach(function (el) {
84
- var _el$dataset;
85
- if (el instanceof HTMLElement && el !== null && el !== void 0 && (_el$dataset = el.dataset) !== null && _el$dataset !== void 0 && _el$dataset.ssrPlaceholder) {
110
+ var placeholderId = el instanceof HTMLElement && _this.getPlaceholderId(el);
111
+ if (placeholderId) {
86
112
  var _window$__SSR_PLACEHO, _this$intersectionObs2;
87
113
  var width = -1;
88
114
  var height = -1;
89
115
  var x = -1;
90
116
  var y = -1;
91
- var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[el.dataset.ssrPlaceholder];
117
+ var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[placeholderId];
92
118
  if (boundingClientRect) {
93
119
  width = boundingClientRect.width;
94
120
  height = boundingClientRect.height;
95
121
  x = boundingClientRect.x;
96
122
  y = boundingClientRect.y;
97
123
  }
98
- _this.staticPlaceholders.set(el.dataset.ssrPlaceholder, {
124
+ _this.staticPlaceholders.set(placeholderId, {
99
125
  width: width,
100
126
  height: height,
101
127
  x: x,
@@ -120,12 +146,12 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
120
146
  }, {
121
147
  key: "isPlaceholder",
122
148
  value: function isPlaceholder(element) {
123
- return Boolean(element.dataset.ssrPlaceholder);
149
+ return Boolean(this.getPlaceholderId(element));
124
150
  }
125
151
  }, {
126
152
  key: "isPlaceholderReplacement",
127
153
  value: function isPlaceholderReplacement(element) {
128
- return Boolean(element.dataset.ssrPlaceholderReplace);
154
+ return Boolean(this.getPlaceholderReplacementId(element));
129
155
  }
130
156
  }, {
131
157
  key: "isPlaceholderIgnored",
@@ -155,7 +181,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
155
181
  value: function checkIfExistedAndSizeMatching(el) {
156
182
  var _this2 = this;
157
183
  el = this.findNearestPlaceholderContainerIfIgnored(el);
158
- var id = el.dataset.ssrPlaceholder || '';
184
+ var id = this.getPlaceholderId(el);
159
185
  return new Promise(function (resolve) {
160
186
  if (!_this2.staticPlaceholders.has(id)) {
161
187
  resolve(false);
@@ -173,7 +199,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
173
199
  var _this3 = this;
174
200
  return new Promise(function (resolve) {
175
201
  var _this3$intersectionOb;
176
- _this3.getSizeCallbacks.set(el.dataset.ssrPlaceholder || '', resolve);
202
+ _this3.getSizeCallbacks.set(_this3.getPlaceholderId(el), resolve);
177
203
  (_this3$intersectionOb = _this3.intersectionObserver) === null || _this3$intersectionOb === void 0 || _this3$intersectionOb.observe(el);
178
204
  });
179
205
  }
@@ -182,7 +208,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
182
208
  value: function validateReactComponentMatchToPlaceholder(el) {
183
209
  var _this4 = this;
184
210
  el = this.findNearestPlaceholderContainerIfIgnored(el);
185
- var id = el.dataset.ssrPlaceholderReplace || '';
211
+ var id = this.getPlaceholderReplacementId(el);
186
212
  return new Promise(function (resolve) {
187
213
  if (!_this4.staticPlaceholders.has(id)) {
188
214
  resolve(false);
@@ -8,6 +8,7 @@ exports.collectSSRPlaceholderDimensions = collectSSRPlaceholderDimensions;
8
8
  // and save their size/positions in a map __SSR_PLACEHOLDERS_DIMENSIONS__ on the Window object. Each placeholderId is
9
9
  // unique and maps to its corresponding elements bounding client rectangle dimensions.
10
10
  function collectSSRPlaceholderDimensions(document, window) {
11
+ var enablePageLayoutPlaceholder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
11
12
  var ssrPlaceholders = document === null || document === void 0 ? void 0 : document.querySelectorAll('[data-ssr-placeholder]');
12
13
  ssrPlaceholders.forEach(function (elem) {
13
14
  var placeholderId = elem.getAttribute('data-ssr-placeholder');
@@ -17,4 +18,12 @@ function collectSSRPlaceholderDimensions(document, window) {
17
18
  window.__SSR_PLACEHOLDERS_DIMENSIONS__[placeholderId] = boundingClient;
18
19
  }
19
20
  });
21
+ if (enablePageLayoutPlaceholder) {
22
+ var pageLayoutRoot = document === null || document === void 0 ? void 0 : document.getElementById('unsafe-design-system-page-layout-root');
23
+ if (pageLayoutRoot) {
24
+ var boundingClient = pageLayoutRoot.getBoundingClientRect();
25
+ window.__SSR_PLACEHOLDERS_DIMENSIONS__ = window.__SSR_PLACEHOLDERS_DIMENSIONS__ || {};
26
+ window.__SSR_PLACEHOLDERS_DIMENSIONS__['page-layout.root'] = boundingClient;
27
+ }
28
+ }
20
29
  }
@@ -1,4 +1,3 @@
1
- import { fg } from '@atlaskit/platform-feature-flags';
2
1
  let config;
3
2
  const DEFAULT_TTVC_REVISION = 'fy25.02';
4
3
 
@@ -6,29 +5,25 @@ const DEFAULT_TTVC_REVISION = 'fy25.02';
6
5
  // and they could delete empty members
7
6
 
8
7
  export function setUFOConfig(newConfig) {
9
- if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
10
- var _newConfig$vc;
11
- // Handle edge cases with `enabledVCRevisions`
12
- const {
13
- enabledVCRevisions
14
- } = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {};
15
- if (typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
16
- config = {
17
- ...newConfig,
18
- vc: {
19
- ...newConfig.vc,
20
- enabledVCRevisions: {
21
- // enforce axiom about `enabledVCRevisions.all` config
22
- all: Array.from(new Set([DEFAULT_TTVC_REVISION, ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), ...Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat()])),
23
- byExperience: {
24
- ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
25
- }
8
+ var _newConfig$vc;
9
+ // Handle edge cases with `enabledVCRevisions`
10
+ const {
11
+ enabledVCRevisions
12
+ } = (_newConfig$vc = newConfig === null || newConfig === void 0 ? void 0 : newConfig.vc) !== null && _newConfig$vc !== void 0 ? _newConfig$vc : {};
13
+ if (typeof (enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience) === 'object') {
14
+ config = {
15
+ ...newConfig,
16
+ vc: {
17
+ ...newConfig.vc,
18
+ enabledVCRevisions: {
19
+ // enforce axiom about `enabledVCRevisions.all` config
20
+ all: Array.from(new Set([DEFAULT_TTVC_REVISION, ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.all), ...Object.values(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience).flat()])),
21
+ byExperience: {
22
+ ...(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : enabledVCRevisions.byExperience)
26
23
  }
27
24
  }
28
- };
29
- } else {
30
- config = newConfig;
31
- }
25
+ }
26
+ };
32
27
  } else {
33
28
  config = newConfig;
34
29
  }
@@ -50,7 +45,7 @@ export function getEnabledVCRevisions(experienceKey = '') {
50
45
  const {
51
46
  enabledVCRevisions
52
47
  } = (_config$vc2 = config.vc) !== null && _config$vc2 !== void 0 ? _config$vc2 : {};
53
- if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : (_enabledVCRevisions$b = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b === void 0 ? void 0 : _enabledVCRevisions$b[experienceKey]) && fg('platform_ufo_vc_enable_revisions_by_experience')) {
48
+ if (isValidConfigArray(enabledVCRevisions === null || enabledVCRevisions === void 0 ? void 0 : (_enabledVCRevisions$b = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b === void 0 ? void 0 : _enabledVCRevisions$b[experienceKey])) {
54
49
  var _enabledVCRevisions$b2;
55
50
  return (_enabledVCRevisions$b2 = enabledVCRevisions.byExperience) === null || _enabledVCRevisions$b2 === void 0 ? void 0 : _enabledVCRevisions$b2[experienceKey];
56
51
  }
@@ -1,12 +1,12 @@
1
1
  import { fg } from '@atlaskit/platform-feature-flags';
2
- import { getConfig, getMostRecentVCRevision, isVCRevisionEnabled } from '../../config';
2
+ import { getConfig, getMostRecentVCRevision } from '../../config';
3
3
  import { postInteractionLog } from '../../interaction-metrics';
4
4
  import { getVCObserver } from '../../vc';
5
5
  import getInteractionStatus from './get-interaction-status';
6
6
  import getPageVisibilityUpToTTAI from './get-page-visibility-up-to-ttai';
7
7
  import getSSRDoneTimeValue from './get-ssr-done-time-value';
8
8
  async function getVCMetrics(interaction) {
9
- var _config$vc, _config$vc$ssrWhiteli, _interaction$apdex, _interaction$apdex$, _config$experimentalI;
9
+ var _config$vc, _config$vc$ssrWhiteli, _interaction$apdex, _interaction$apdex$, _config$experimentalI, _result$ufoVcRev;
10
10
  const config = getConfig();
11
11
  if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
12
12
  return {};
@@ -43,45 +43,16 @@ async function getVCMetrics(interaction) {
43
43
  getVCObserver().stop(interaction.ufoName);
44
44
  }
45
45
  postInteractionLog.setLastInteractionFinishVCResult(result);
46
- if (fg('platform_ufo_vc_enable_revisions_by_experience')) {
47
- var _result$ufoVcRev;
48
- const mostRecentVCRevision = getMostRecentVCRevision(interaction.ufoName);
49
- const mostRecentVCRevisionPayload = result === null || result === void 0 ? void 0 : (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(({
50
- revision
51
- }) => revision === mostRecentVCRevision);
52
- if (!shouldReportVCMetrics || !(mostRecentVCRevisionPayload !== null && mostRecentVCRevisionPayload !== void 0 && mostRecentVCRevisionPayload.clean)) {
53
- return result;
54
- }
55
- return {
56
- ...result,
57
- 'metric:vc90': mostRecentVCRevisionPayload['metric:vc90']
58
- };
59
- } else {
60
- if (!isVCRevisionEnabled('fy25.01')) {
61
- var _result$ufoVcRev2;
62
- const ttvcV2Revision = result === null || result === void 0 ? void 0 : (_result$ufoVcRev2 = result['ufo:vc:rev']) === null || _result$ufoVcRev2 === void 0 ? void 0 : _result$ufoVcRev2.find(({
63
- revision
64
- }) => revision === 'fy25.02');
65
- if (!(ttvcV2Revision !== null && ttvcV2Revision !== void 0 && ttvcV2Revision.clean)) {
66
- return result;
67
- }
68
- return {
69
- ...result,
70
- 'metric:vc90': ttvcV2Revision['metric:vc90']
71
- };
72
- } else {
73
- const VC = result === null || result === void 0 ? void 0 : result['metrics:vc'];
74
- if (!VC || !(result !== null && result !== void 0 && result[`${prefix}:vc:clean`])) {
75
- return result;
76
- }
77
- if (interactionStatus.originalInteractionStatus !== 'SUCCEEDED' || pageVisibilityUpToTTAI !== 'visible') {
78
- return result;
79
- }
80
- return {
81
- ...result,
82
- 'metric:vc90': VC['90']
83
- };
84
- }
46
+ const mostRecentVCRevision = getMostRecentVCRevision(interaction.ufoName);
47
+ const mostRecentVCRevisionPayload = result === null || result === void 0 ? void 0 : (_result$ufoVcRev = result['ufo:vc:rev']) === null || _result$ufoVcRev === void 0 ? void 0 : _result$ufoVcRev.find(({
48
+ revision
49
+ }) => revision === mostRecentVCRevision);
50
+ if (!shouldReportVCMetrics || !(mostRecentVCRevisionPayload !== null && mostRecentVCRevisionPayload !== void 0 && mostRecentVCRevisionPayload.clean)) {
51
+ return result;
85
52
  }
53
+ return {
54
+ ...result,
55
+ 'metric:vc90': mostRecentVCRevisionPayload['metric:vc90']
56
+ };
86
57
  }
87
58
  export default getVCMetrics;