@atlaskit/react-ufo 3.14.6 → 3.14.8

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 (55) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +14 -12
  3. package/dist/cjs/create-payload/utils/get-vc-metrics.js +17 -13
  4. package/dist/cjs/interaction-metrics/index.js +35 -15
  5. package/dist/cjs/interaction-metrics-init/index.js +5 -3
  6. package/dist/cjs/vc/index.js +46 -6
  7. package/dist/cjs/vc/vc-observer/index.js +10 -2
  8. package/dist/cjs/vc/vc-observer/observers/index.js +12 -7
  9. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +76 -40
  10. package/dist/cjs/vc/vc-observer-new/index.js +84 -0
  11. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +214 -71
  12. package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +97 -59
  13. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +4 -2
  14. package/dist/es2019/create-payload/utils/get-vc-metrics.js +10 -4
  15. package/dist/es2019/interaction-metrics/index.js +36 -16
  16. package/dist/es2019/interaction-metrics-init/index.js +5 -3
  17. package/dist/es2019/vc/index.js +42 -5
  18. package/dist/es2019/vc/vc-observer/index.js +8 -2
  19. package/dist/es2019/vc/vc-observer/observers/index.js +11 -5
  20. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +57 -26
  21. package/dist/es2019/vc/vc-observer-new/index.js +67 -1
  22. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +87 -22
  23. package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +50 -34
  24. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +14 -12
  25. package/dist/esm/create-payload/utils/get-vc-metrics.js +17 -13
  26. package/dist/esm/interaction-metrics/index.js +36 -16
  27. package/dist/esm/interaction-metrics-init/index.js +5 -3
  28. package/dist/esm/vc/index.js +45 -6
  29. package/dist/esm/vc/vc-observer/index.js +10 -2
  30. package/dist/esm/vc/vc-observer/observers/index.js +12 -7
  31. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +76 -40
  32. package/dist/esm/vc/vc-observer-new/index.js +84 -0
  33. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +214 -71
  34. package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +97 -59
  35. package/dist/types/common/common/types.d.ts +4 -1
  36. package/dist/types/vc/index.d.ts +3 -0
  37. package/dist/types/vc/types.d.ts +2 -0
  38. package/dist/types/vc/vc-observer/index.d.ts +1 -0
  39. package/dist/types/vc/vc-observer/observers/index.d.ts +2 -0
  40. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +6 -0
  41. package/dist/types/vc/vc-observer-new/index.d.ts +30 -0
  42. package/dist/types/vc/vc-observer-new/types.d.ts +1 -1
  43. package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +5 -1
  44. package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
  45. package/dist/types-ts4.5/common/common/types.d.ts +4 -1
  46. package/dist/types-ts4.5/vc/index.d.ts +3 -0
  47. package/dist/types-ts4.5/vc/types.d.ts +2 -0
  48. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -0
  49. package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +2 -0
  50. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +6 -0
  51. package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +30 -0
  52. package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +1 -1
  53. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +5 -1
  54. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
  55. package/package.json +11 -6
@@ -13,6 +13,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
13
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
+ var _ssrPlaceholders = require("../vc-observer/observers/ssr-placeholders");
16
17
  var _entriesTimeline = _interopRequireDefault(require("./entries-timeline"));
17
18
  var _getElementName2 = _interopRequireDefault(require("./get-element-name"));
18
19
  var _fy25_ = _interopRequireDefault(require("./metric-calculator/fy25_03"));
@@ -20,6 +21,11 @@ var _getViewportHeight = _interopRequireDefault(require("./metric-calculator/uti
20
21
  var _getViewportWidth = _interopRequireDefault(require("./metric-calculator/utils/get-viewport-width"));
21
22
  var _viewportObserver = _interopRequireDefault(require("./viewport-observer"));
22
23
  var _windowEventObserver = _interopRequireDefault(require("./window-event-observer"));
24
+ var SSRState = {
25
+ normal: 1,
26
+ waitingForFirstRender: 2,
27
+ ignoring: 3
28
+ };
23
29
  var DEFAULT_SELECTOR_CONFIG = {
24
30
  id: false,
25
31
  testId: true,
@@ -35,9 +41,31 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
35
41
  (0, _classCallCheck2.default)(this, VCObserverNew);
36
42
  (0, _defineProperty2.default)(this, "viewportObserver", null);
37
43
  (0, _defineProperty2.default)(this, "windowEventObserver", null);
44
+ // SSR related properties
45
+ (0, _defineProperty2.default)(this, "ssrPlaceholderHandler", null);
46
+ (0, _defineProperty2.default)(this, "ssr", {
47
+ state: SSRState.normal,
48
+ reactRootElement: null,
49
+ renderStart: -1,
50
+ renderStop: -1
51
+ });
38
52
  this.entriesTimeline = new _entriesTimeline.default();
39
53
  this.isPostInteraction = (_config$isPostInterac = config.isPostInteraction) !== null && _config$isPostInterac !== void 0 ? _config$isPostInterac : false;
40
54
  this.selectorConfig = (_config$selectorConfi = config.selectorConfig) !== null && _config$selectorConfi !== void 0 ? _config$selectorConfi : DEFAULT_SELECTOR_CONFIG;
55
+
56
+ // Use shared SSR placeholder handler if provided, otherwise create new one if feature flag is enabled
57
+ if (config.ssrPlaceholderHandler) {
58
+ this.ssrPlaceholderHandler = config.ssrPlaceholderHandler;
59
+ } else {
60
+ var _config$SSRConfig$ena, _config$SSRConfig, _config$SSRConfig$dis, _config$SSRConfig2;
61
+ this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers({
62
+ enablePageLayoutPlaceholder: (_config$SSRConfig$ena = (_config$SSRConfig = config.SSRConfig) === null || _config$SSRConfig === void 0 ? void 0 : _config$SSRConfig.enablePageLayoutPlaceholder) !== null && _config$SSRConfig$ena !== void 0 ? _config$SSRConfig$ena : false,
63
+ disableSizeAndPositionCheck: (_config$SSRConfig$dis = (_config$SSRConfig2 = config.SSRConfig) === null || _config$SSRConfig2 === void 0 ? void 0 : _config$SSRConfig2.disableSizeAndPositionCheck) !== null && _config$SSRConfig$dis !== void 0 ? _config$SSRConfig$dis : {
64
+ v: false,
65
+ h: false
66
+ }
67
+ });
68
+ }
41
69
  this.viewportObserver = new _viewportObserver.default({
42
70
  onChange: function onChange(onChangeArg) {
43
71
  var time = onChangeArg.time,
@@ -65,6 +93,13 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
65
93
  newValue: mutationData === null || mutationData === void 0 ? void 0 : mutationData.newValue
66
94
  }
67
95
  });
96
+ },
97
+ // Pass SSR context to ViewportObserver
98
+ getSSRState: function getSSRState() {
99
+ return _this.getSSRState();
100
+ },
101
+ getSSRPlaceholderHandler: function getSSRPlaceholderHandler() {
102
+ return _this.getSSRPlaceholderHandler();
68
103
  }
69
104
  });
70
105
  this.windowEventObserver = new _windowEventObserver.default({
@@ -89,6 +124,14 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
89
124
  _this2 = this,
90
125
  _this$windowEventObse;
91
126
  var startTime = _ref2.startTime;
127
+ // Reset SSR state on start (matches old VCObserver behavior)
128
+ this.ssr = {
129
+ state: SSRState.normal,
130
+ reactRootElement: null,
131
+ // Reset to null (matches old VCObserver)
132
+ renderStart: -1,
133
+ renderStop: -1
134
+ };
92
135
  (_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 || _this$viewportObserve.start();
93
136
  if ((_window = window) !== null && _window !== void 0 && _window.__SSR_ABORT_LISTENERS__ && (0, _platformFeatureFlags.fg)('platform_ufo_vc_observer_new_ssr_abort_listener')) {
94
137
  var abortListeners = window.__SSR_ABORT_LISTENERS__;
@@ -119,6 +162,47 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
119
162
  var _this$viewportObserve2, _this$windowEventObse2;
120
163
  (_this$viewportObserve2 = this.viewportObserver) === null || _this$viewportObserve2 === void 0 || _this$viewportObserve2.stop();
121
164
  (_this$windowEventObse2 = this.windowEventObserver) === null || _this$windowEventObse2 === void 0 || _this$windowEventObse2.stop();
165
+
166
+ // Clear SSR state on stop (matches old VCObserver behavior)
167
+ this.ssr.reactRootElement = null;
168
+ }
169
+
170
+ // SSR related methods
171
+ }, {
172
+ key: "setReactRootElement",
173
+ value: function setReactRootElement(element) {
174
+ this.ssr.reactRootElement = element;
175
+ }
176
+ }, {
177
+ key: "setReactRootRenderStart",
178
+ value: function setReactRootRenderStart() {
179
+ var startTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : performance.now();
180
+ this.ssr.renderStart = startTime;
181
+ this.ssr.state = SSRState.waitingForFirstRender;
182
+ }
183
+ }, {
184
+ key: "setReactRootRenderStop",
185
+ value: function setReactRootRenderStop() {
186
+ var stopTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : performance.now();
187
+ this.ssr.renderStop = stopTime;
188
+ }
189
+ }, {
190
+ key: "collectSSRPlaceholders",
191
+ value: function collectSSRPlaceholders() {
192
+ // This is handled by the shared SSRPlaceholderHandlers in VCObserverWrapper
193
+ // Individual observers don't need to implement this
194
+ }
195
+
196
+ // Internal methods for ViewportObserver to access SSR state
197
+ }, {
198
+ key: "getSSRState",
199
+ value: function getSSRState() {
200
+ return this.ssr;
201
+ }
202
+ }, {
203
+ key: "getSSRPlaceholderHandler",
204
+ value: function getSSRPlaceholderHandler() {
205
+ return this.ssrPlaceholderHandler;
122
206
  }
123
207
  }, {
124
208
  key: "addSSR",
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -26,7 +28,7 @@ function isElementVisible(element) {
26
28
  }
27
29
  try {
28
30
  var visible = element.checkVisibility({
29
- // @ts-expect-error
31
+ // @ts-ignore - visibilityProperty may not exist in all TS environments
30
32
  visibilityProperty: true,
31
33
  contentVisibilityAuto: true,
32
34
  opacityProperty: true
@@ -74,9 +76,13 @@ var createElementMutationsWatcher = function createElementMutationsWatcher(remov
74
76
  };
75
77
  };
76
78
  var ViewportObserver = exports.default = /*#__PURE__*/function () {
79
+ // SSR context functions
80
+
77
81
  function ViewportObserver(_ref2) {
78
82
  var _this = this;
79
- var onChange = _ref2.onChange;
83
+ var onChange = _ref2.onChange,
84
+ getSSRState = _ref2.getSSRState,
85
+ getSSRPlaceholderHandler = _ref2.getSSRPlaceholderHandler;
80
86
  (0, _classCallCheck2.default)(this, ViewportObserver);
81
87
  (0, _defineProperty2.default)(this, "handleIntersectionEntry", function (_ref3) {
82
88
  var target = _ref3.target,
@@ -100,65 +106,198 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
100
106
  mutationData: mutationData
101
107
  });
102
108
  });
103
- (0, _defineProperty2.default)(this, "handleChildListMutation", function (_ref4) {
104
- var addedNodes = _ref4.addedNodes,
105
- removedNodes = _ref4.removedNodes;
106
- var removedNodeRects = removedNodes.map(function (ref) {
107
- var n = ref.deref();
108
- if (!n) {
109
- return;
110
- }
111
- return _this.mapVisibleNodeRects.get(n);
112
- });
113
- addedNodes.forEach(function (addedNodeRef) {
114
- var _this$intersectionObs4;
115
- var addedNode = addedNodeRef.deref();
116
- if (!addedNode) {
117
- return;
118
- }
119
- var sameDeletedNode = removedNodes.find(function (ref) {
120
- var n = ref.deref();
121
- if (!n || !addedNode) {
122
- return false;
109
+ (0, _defineProperty2.default)(this, "handleChildListMutation", /*#__PURE__*/function () {
110
+ var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref4) {
111
+ var target, addedNodes, removedNodes, timestamp, removedNodeRects, targetNode, _iterator, _step, _loop, _ret;
112
+ return _regenerator.default.wrap(function _callee$(_context2) {
113
+ while (1) switch (_context2.prev = _context2.next) {
114
+ case 0:
115
+ target = _ref4.target, addedNodes = _ref4.addedNodes, removedNodes = _ref4.removedNodes, timestamp = _ref4.timestamp;
116
+ removedNodeRects = removedNodes.map(function (ref) {
117
+ var n = ref.deref();
118
+ if (!n) {
119
+ return;
120
+ }
121
+ return _this.mapVisibleNodeRects.get(n);
122
+ });
123
+ targetNode = target.deref();
124
+ _iterator = _createForOfIteratorHelper(addedNodes);
125
+ _context2.prev = 4;
126
+ _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
127
+ var _this$intersectionObs8;
128
+ var addedNodeRef, addedNode, ssrState, SSRStateEnum, _this$intersectionObs, _this$intersectionObs2, ssrPlaceholderHandler, result, _this$intersectionObs3, _result, _this$intersectionObs4, sameDeletedNode, isInIgnoreLsMarker, isNoLsMarkerEnabled, _this$intersectionObs5, _this$intersectionObs6, _checkThirdPartySegme, isWithinThirdPartySegment, ignoredReason, _this$intersectionObs7, assignedReason;
129
+ return _regenerator.default.wrap(function _loop$(_context) {
130
+ while (1) switch (_context.prev = _context.next) {
131
+ case 0:
132
+ addedNodeRef = _step.value;
133
+ addedNode = addedNodeRef.deref();
134
+ if (addedNode) {
135
+ _context.next = 4;
136
+ break;
137
+ }
138
+ return _context.abrupt("return", 0);
139
+ case 4:
140
+ if (!(_this.getSSRState && (0, _platformFeatureFlags.fg)('platform_ufo_vc_v3_ssr_placeholder'))) {
141
+ _context.next = 19;
142
+ break;
143
+ }
144
+ ssrState = _this.getSSRState();
145
+ SSRStateEnum = {
146
+ normal: 1,
147
+ waitingForFirstRender: 2,
148
+ ignoring: 3
149
+ };
150
+ if (!(ssrState.state === SSRStateEnum.waitingForFirstRender && timestamp > ssrState.renderStart && targetNode === ssrState.reactRootElement)) {
151
+ _context.next = 12;
152
+ break;
153
+ }
154
+ ssrState.state = SSRStateEnum.ignoring;
155
+ if (ssrState.renderStop === -1) {
156
+ // arbitrary 500ms DOM update window
157
+ ssrState.renderStop = timestamp + 500;
158
+ }
159
+ (_this$intersectionObs = _this.intersectionObserver) === null || _this$intersectionObs === void 0 || _this$intersectionObs.watchAndTag(addedNode, 'ssr-hydration');
160
+ return _context.abrupt("return", 0);
161
+ case 12:
162
+ if (!(ssrState.state === SSRStateEnum.ignoring && timestamp > ssrState.renderStart && targetNode === ssrState.reactRootElement)) {
163
+ _context.next = 19;
164
+ break;
165
+ }
166
+ if (!(timestamp <= ssrState.renderStop)) {
167
+ _context.next = 18;
168
+ break;
169
+ }
170
+ (_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(addedNode, 'ssr-hydration');
171
+ return _context.abrupt("return", 0);
172
+ case 18:
173
+ ssrState.state = SSRStateEnum.normal;
174
+ case 19:
175
+ if (!(_this.getSSRPlaceholderHandler && (0, _platformFeatureFlags.fg)('platform_ufo_vc_v3_ssr_placeholder'))) {
176
+ _context.next = 36;
177
+ break;
178
+ }
179
+ ssrPlaceholderHandler = _this.getSSRPlaceholderHandler();
180
+ if (!ssrPlaceholderHandler) {
181
+ _context.next = 36;
182
+ break;
183
+ }
184
+ if (!(ssrPlaceholderHandler.isPlaceholder(addedNode) || ssrPlaceholderHandler.isPlaceholderIgnored(addedNode))) {
185
+ _context.next = 29;
186
+ break;
187
+ }
188
+ _context.next = 25;
189
+ return ssrPlaceholderHandler.checkIfExistedAndSizeMatching(addedNode);
190
+ case 25:
191
+ result = _context.sent;
192
+ if (!(result !== false)) {
193
+ _context.next = 29;
194
+ break;
195
+ }
196
+ (_this$intersectionObs3 = _this.intersectionObserver) === null || _this$intersectionObs3 === void 0 || _this$intersectionObs3.watchAndTag(addedNode, 'mutation:ssr-placeholder');
197
+ return _context.abrupt("return", 0);
198
+ case 29:
199
+ if (!(ssrPlaceholderHandler.isPlaceholderReplacement(addedNode) || ssrPlaceholderHandler.isPlaceholderIgnored(addedNode))) {
200
+ _context.next = 36;
201
+ break;
202
+ }
203
+ _context.next = 32;
204
+ return ssrPlaceholderHandler.validateReactComponentMatchToPlaceholder(addedNode);
205
+ case 32:
206
+ _result = _context.sent;
207
+ if (!(_result !== false)) {
208
+ _context.next = 36;
209
+ break;
210
+ }
211
+ (_this$intersectionObs4 = _this.intersectionObserver) === null || _this$intersectionObs4 === void 0 || _this$intersectionObs4.watchAndTag(addedNode, 'mutation:ssr-placeholder');
212
+ return _context.abrupt("return", 0);
213
+ case 36:
214
+ sameDeletedNode = removedNodes.find(function (ref) {
215
+ var n = ref.deref();
216
+ if (!n || !addedNode) {
217
+ return false;
218
+ }
219
+ return n.isEqualNode(addedNode);
220
+ });
221
+ isInIgnoreLsMarker = (0, _isInVcIgnoreIfNoLayoutShiftMarker.default)(addedNode);
222
+ isNoLsMarkerEnabled = (0, _platformFeatureFlags.fg)('platform_vc_ignore_no_ls_mutation_marker'); // When fg('platform_vc_ignore_no_ls_mutation_marker') is not enabled,
223
+ // no layout shift mutation is excluded as per existing fy25.03 logic
224
+ if (!(sameDeletedNode && (!isNoLsMarkerEnabled || isInIgnoreLsMarker))) {
225
+ _context.next = 42;
226
+ break;
227
+ }
228
+ (_this$intersectionObs5 = _this.intersectionObserver) === null || _this$intersectionObs5 === void 0 || _this$intersectionObs5.watchAndTag(addedNode, 'mutation:remount');
229
+ return _context.abrupt("return", 0);
230
+ case 42:
231
+ if (!(0, _vcUtils.isContainedWithinMediaWrapper)(addedNode)) {
232
+ _context.next = 45;
233
+ break;
234
+ }
235
+ (_this$intersectionObs6 = _this.intersectionObserver) === null || _this$intersectionObs6 === void 0 || _this$intersectionObs6.watchAndTag(addedNode, 'mutation:media');
236
+ return _context.abrupt("return", 0);
237
+ case 45:
238
+ _checkThirdPartySegme = (0, _getComponentNameAndChildProps.checkThirdPartySegmentWithIgnoreReason)(addedNode), isWithinThirdPartySegment = _checkThirdPartySegme.isWithinThirdPartySegment, ignoredReason = _checkThirdPartySegme.ignoredReason;
239
+ if (!isWithinThirdPartySegment) {
240
+ _context.next = 50;
241
+ break;
242
+ }
243
+ assignedReason = (0, _getComponentNameAndChildProps.createMutationTypeWithIgnoredReason)(ignoredReason || 'third-party-element');
244
+ (_this$intersectionObs7 = _this.intersectionObserver) === null || _this$intersectionObs7 === void 0 || _this$intersectionObs7.watchAndTag(addedNode, assignedReason);
245
+ return _context.abrupt("return", 0);
246
+ case 50:
247
+ (_this$intersectionObs8 = _this.intersectionObserver) === null || _this$intersectionObs8 === void 0 || _this$intersectionObs8.watchAndTag(addedNode, createElementMutationsWatcher(removedNodeRects));
248
+ case 51:
249
+ case "end":
250
+ return _context.stop();
251
+ }
252
+ }, _loop);
253
+ });
254
+ _iterator.s();
255
+ case 7:
256
+ if ((_step = _iterator.n()).done) {
257
+ _context2.next = 14;
258
+ break;
259
+ }
260
+ return _context2.delegateYield(_loop(), "t0", 9);
261
+ case 9:
262
+ _ret = _context2.t0;
263
+ if (!(_ret === 0)) {
264
+ _context2.next = 12;
265
+ break;
266
+ }
267
+ return _context2.abrupt("continue", 12);
268
+ case 12:
269
+ _context2.next = 7;
270
+ break;
271
+ case 14:
272
+ _context2.next = 19;
273
+ break;
274
+ case 16:
275
+ _context2.prev = 16;
276
+ _context2.t1 = _context2["catch"](4);
277
+ _iterator.e(_context2.t1);
278
+ case 19:
279
+ _context2.prev = 19;
280
+ _iterator.f();
281
+ return _context2.finish(19);
282
+ case 22:
283
+ case "end":
284
+ return _context2.stop();
123
285
  }
124
- return n.isEqualNode(addedNode);
125
- });
126
- var isInIgnoreLsMarker = (0, _isInVcIgnoreIfNoLayoutShiftMarker.default)(addedNode);
127
- var isNoLsMarkerEnabled = (0, _platformFeatureFlags.fg)('platform_vc_ignore_no_ls_mutation_marker');
128
-
129
- // When fg('platform_vc_ignore_no_ls_mutation_marker') is not enabled,
130
- // no layout shift mutation is excluded as per existing fy25.03 logic
131
- if (sameDeletedNode && (!isNoLsMarkerEnabled || isInIgnoreLsMarker)) {
132
- var _this$intersectionObs;
133
- (_this$intersectionObs = _this.intersectionObserver) === null || _this$intersectionObs === void 0 || _this$intersectionObs.watchAndTag(addedNode, 'mutation:remount');
134
- return;
135
- }
136
- if ((0, _vcUtils.isContainedWithinMediaWrapper)(addedNode)) {
137
- var _this$intersectionObs2;
138
- (_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.watchAndTag(addedNode, 'mutation:media');
139
- return;
140
- }
141
- var _checkThirdPartySegme = (0, _getComponentNameAndChildProps.checkThirdPartySegmentWithIgnoreReason)(addedNode),
142
- isWithinThirdPartySegment = _checkThirdPartySegme.isWithinThirdPartySegment,
143
- ignoredReason = _checkThirdPartySegme.ignoredReason;
144
- if (isWithinThirdPartySegment) {
145
- var _this$intersectionObs3;
146
- var assignedReason = (0, _getComponentNameAndChildProps.createMutationTypeWithIgnoredReason)(ignoredReason || 'third-party-element');
147
- (_this$intersectionObs3 = _this.intersectionObserver) === null || _this$intersectionObs3 === void 0 || _this$intersectionObs3.watchAndTag(addedNode, assignedReason);
148
- return;
149
- }
150
- (_this$intersectionObs4 = _this.intersectionObserver) === null || _this$intersectionObs4 === void 0 || _this$intersectionObs4.watchAndTag(addedNode, createElementMutationsWatcher(removedNodeRects));
151
- });
152
- });
153
- (0, _defineProperty2.default)(this, "handleAttributeMutation", function (_ref5) {
154
- var _this$intersectionObs5;
155
- var target = _ref5.target,
156
- attributeName = _ref5.attributeName,
157
- oldValue = _ref5.oldValue,
158
- newValue = _ref5.newValue;
159
- (_this$intersectionObs5 = _this.intersectionObserver) === null || _this$intersectionObs5 === void 0 || _this$intersectionObs5.watchAndTag(target, function (_ref6) {
160
- var target = _ref6.target,
161
- rect = _ref6.rect;
286
+ }, _callee, null, [[4, 16, 19, 22]]);
287
+ }));
288
+ return function (_x) {
289
+ return _ref5.apply(this, arguments);
290
+ };
291
+ }());
292
+ (0, _defineProperty2.default)(this, "handleAttributeMutation", function (_ref6) {
293
+ var _this$intersectionObs9;
294
+ var target = _ref6.target,
295
+ attributeName = _ref6.attributeName,
296
+ oldValue = _ref6.oldValue,
297
+ newValue = _ref6.newValue;
298
+ (_this$intersectionObs9 = _this.intersectionObserver) === null || _this$intersectionObs9 === void 0 || _this$intersectionObs9.watchAndTag(target, function (_ref7) {
299
+ var target = _ref7.target,
300
+ rect = _ref7.rect;
162
301
  if ((0, _vcUtils.isContainedWithinMediaWrapper)(target)) {
163
302
  return {
164
303
  type: 'mutation:media',
@@ -229,14 +368,14 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
229
368
  };
230
369
  });
231
370
  });
232
- (0, _defineProperty2.default)(this, "handleLayoutShift", function (_ref7) {
233
- var time = _ref7.time,
234
- changedRects = _ref7.changedRects;
235
- var _iterator = _createForOfIteratorHelper(changedRects),
236
- _step;
371
+ (0, _defineProperty2.default)(this, "handleLayoutShift", function (_ref8) {
372
+ var time = _ref8.time,
373
+ changedRects = _ref8.changedRects;
374
+ var _iterator2 = _createForOfIteratorHelper(changedRects),
375
+ _step2;
237
376
  try {
238
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
239
- var changedRect = _step.value;
377
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
378
+ var changedRect = _step2.value;
240
379
  var target = changedRect.node;
241
380
  if (target) {
242
381
  _this.onChange({
@@ -250,9 +389,9 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
250
389
  }
251
390
  }
252
391
  } catch (err) {
253
- _iterator.e(err);
392
+ _iterator2.e(err);
254
393
  } finally {
255
- _iterator.f();
394
+ _iterator2.f();
256
395
  }
257
396
  });
258
397
  this.mapVisibleNodeRects = new WeakMap();
@@ -261,6 +400,10 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
261
400
  this.intersectionObserver = null;
262
401
  this.mutationObserver = null;
263
402
  this.performanceObserver = null;
403
+
404
+ // Initialize SSR context functions
405
+ this.getSSRState = getSSRState;
406
+ this.getSSRPlaceholderHandler = getSSRPlaceholderHandler;
264
407
  }
265
408
  return (0, _createClass2.default)(ViewportObserver, [{
266
409
  key: "initializeObservers",
@@ -304,12 +447,12 @@ var ViewportObserver = exports.default = /*#__PURE__*/function () {
304
447
  }, {
305
448
  key: "stop",
306
449
  value: function stop() {
307
- var _this$mutationObserve2, _this$intersectionObs6, _this$performanceObse2;
450
+ var _this$mutationObserve2, _this$intersectionObs0, _this$performanceObse2;
308
451
  if (!this.isStarted) {
309
452
  return;
310
453
  }
311
454
  (_this$mutationObserve2 = this.mutationObserver) === null || _this$mutationObserve2 === void 0 || _this$mutationObserve2.disconnect();
312
- (_this$intersectionObs6 = this.intersectionObserver) === null || _this$intersectionObs6 === void 0 || _this$intersectionObs6.disconnect();
455
+ (_this$intersectionObs0 = this.intersectionObserver) === null || _this$intersectionObs0 === void 0 || _this$intersectionObs0.disconnect();
313
456
  (_this$performanceObse2 = this.performanceObserver) === null || _this$performanceObse2 === void 0 || _this$performanceObse2.disconnect();
314
457
  this.isStarted = false;
315
458
  }