@atlaskit/react-ufo 3.14.5 → 3.14.7
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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/vc/index.js +39 -6
- package/dist/cjs/vc/vc-observer/index.js +10 -2
- package/dist/cjs/vc/vc-observer/observers/index.js +12 -7
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +76 -40
- package/dist/cjs/vc/vc-observer-new/index.js +84 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +227 -69
- package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +103 -44
- package/dist/cjs/vc/vc-observer-new/viewport-observer/utils/is-in-vc-ignore-if-no-layout-shift-marker.js +17 -0
- package/dist/es2019/vc/index.js +37 -5
- package/dist/es2019/vc/vc-observer/index.js +8 -2
- package/dist/es2019/vc/vc-observer/observers/index.js +11 -5
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +57 -26
- package/dist/es2019/vc/vc-observer-new/index.js +67 -1
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +105 -25
- package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +44 -8
- package/dist/es2019/vc/vc-observer-new/viewport-observer/utils/is-in-vc-ignore-if-no-layout-shift-marker.js +11 -0
- package/dist/esm/vc/index.js +39 -6
- package/dist/esm/vc/vc-observer/index.js +10 -2
- package/dist/esm/vc/vc-observer/observers/index.js +12 -7
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +76 -40
- package/dist/esm/vc/vc-observer-new/index.js +84 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +227 -69
- package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +103 -44
- package/dist/esm/vc/vc-observer-new/viewport-observer/utils/is-in-vc-ignore-if-no-layout-shift-marker.js +11 -0
- package/dist/types/vc/index.d.ts +2 -0
- package/dist/types/vc/types.d.ts +2 -0
- package/dist/types/vc/vc-observer/index.d.ts +1 -0
- package/dist/types/vc/vc-observer/observers/index.d.ts +2 -0
- package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +6 -0
- package/dist/types/vc/vc-observer-new/index.d.ts +30 -0
- package/dist/types/vc/vc-observer-new/types.d.ts +1 -1
- package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +5 -1
- package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/utils/is-in-vc-ignore-if-no-layout-shift-marker.d.ts +6 -0
- package/dist/types-ts4.5/vc/index.d.ts +2 -0
- package/dist/types-ts4.5/vc/types.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/index.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +6 -0
- package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +30 -0
- package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +5 -1
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/utils/is-in-vc-ignore-if-no-layout-shift-marker.d.ts +6 -0
- package/package.json +8 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 3.14.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#179438](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/179438)
|
|
8
|
+
[`b0d336b1f78b3`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b0d336b1f78b3) -
|
|
9
|
+
AFO-4081 support ssr-placeholder for ttvc v3
|
|
10
|
+
|
|
11
|
+
## 3.14.6
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#179156](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/179156)
|
|
16
|
+
[`81f5605b925fc`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/81f5605b925fc) -
|
|
17
|
+
AFO-4081 ufo vc ignore if no layout shift marker
|
|
18
|
+
|
|
3
19
|
## 3.14.5
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/cjs/vc/index.js
CHANGED
|
@@ -9,8 +9,8 @@ exports.getVCObserver = getVCObserver;
|
|
|
9
9
|
exports.isEnvironmentSupported = isEnvironmentSupported;
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
11
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
15
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
16
16
|
var _config = require("../config");
|
|
@@ -18,22 +18,45 @@ var _noOpVcObserver = require("./no-op-vc-observer");
|
|
|
18
18
|
var _vcObserver = require("./vc-observer");
|
|
19
19
|
var _vcObserverNew = _interopRequireDefault(require("./vc-observer-new"));
|
|
20
20
|
var _rllPlaceholders = require("./vc-observer/observers/rll-placeholders");
|
|
21
|
+
var _ssrPlaceholders = require("./vc-observer/observers/ssr-placeholders");
|
|
21
22
|
var _process;
|
|
22
23
|
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; }
|
|
23
24
|
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; }
|
|
24
25
|
var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
25
26
|
function VCObserverWrapper() {
|
|
27
|
+
var _opts$ssrEnablePageLa, _opts$disableSizeAndP;
|
|
26
28
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
27
29
|
(0, _classCallCheck2.default)(this, VCObserverWrapper);
|
|
28
30
|
this.newVCObserver = null;
|
|
29
31
|
this.oldVCObserver = null;
|
|
32
|
+
|
|
33
|
+
// Initialize SSR placeholder handler once
|
|
34
|
+
this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers({
|
|
35
|
+
enablePageLayoutPlaceholder: (_opts$ssrEnablePageLa = opts.ssrEnablePageLayoutPlaceholder) !== null && _opts$ssrEnablePageLa !== void 0 ? _opts$ssrEnablePageLa : false,
|
|
36
|
+
disableSizeAndPositionCheck: (_opts$disableSizeAndP = opts.disableSizeAndPositionCheck) !== null && _opts$disableSizeAndP !== void 0 ? _opts$disableSizeAndP : {
|
|
37
|
+
v: false,
|
|
38
|
+
h: false
|
|
39
|
+
}
|
|
40
|
+
});
|
|
30
41
|
if ((0, _config.isVCRevisionEnabled)('fy25.03')) {
|
|
42
|
+
var _opts$ssrEnablePageLa2, _opts$disableSizeAndP2;
|
|
31
43
|
this.newVCObserver = new _vcObserverNew.default({
|
|
32
|
-
selectorConfig: opts.selectorConfig
|
|
44
|
+
selectorConfig: opts.selectorConfig,
|
|
45
|
+
isPostInteraction: opts.isPostInteraction,
|
|
46
|
+
SSRConfig: {
|
|
47
|
+
enablePageLayoutPlaceholder: (_opts$ssrEnablePageLa2 = opts.ssrEnablePageLayoutPlaceholder) !== null && _opts$ssrEnablePageLa2 !== void 0 ? _opts$ssrEnablePageLa2 : false,
|
|
48
|
+
disableSizeAndPositionCheck: (_opts$disableSizeAndP2 = opts.disableSizeAndPositionCheck) !== null && _opts$disableSizeAndP2 !== void 0 ? _opts$disableSizeAndP2 : {
|
|
49
|
+
v: false,
|
|
50
|
+
h: false
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
ssrPlaceholderHandler: this.ssrPlaceholderHandler
|
|
33
54
|
});
|
|
34
55
|
}
|
|
35
56
|
if ((0, _config.isVCRevisionEnabled)('fy25.01') || (0, _config.isVCRevisionEnabled)('fy25.02')) {
|
|
36
|
-
this.oldVCObserver = new _vcObserver.VCObserver(opts)
|
|
57
|
+
this.oldVCObserver = new _vcObserver.VCObserver(_objectSpread(_objectSpread({}, opts), {}, {
|
|
58
|
+
ssrPlaceholderHandler: this.ssrPlaceholderHandler
|
|
59
|
+
}));
|
|
37
60
|
}
|
|
38
61
|
}
|
|
39
62
|
|
|
@@ -92,6 +115,8 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
92
115
|
(_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 || _this$newVCObserver2.stop();
|
|
93
116
|
}
|
|
94
117
|
_rllPlaceholders.RLLPlaceholderHandlers.getInstance().reset();
|
|
118
|
+
// Clear shared SSR placeholder handler
|
|
119
|
+
this.ssrPlaceholderHandler.clear();
|
|
95
120
|
}
|
|
96
121
|
}, {
|
|
97
122
|
key: "getVCRawData",
|
|
@@ -165,20 +190,28 @@ var VCObserverWrapper = exports.VCObserverWrapper = /*#__PURE__*/function () {
|
|
|
165
190
|
}, {
|
|
166
191
|
key: "setSSRElement",
|
|
167
192
|
value: function setSSRElement(element) {
|
|
168
|
-
var _this$oldVCObserver5;
|
|
193
|
+
var _this$oldVCObserver5, _this$newVCObserver4;
|
|
169
194
|
(_this$oldVCObserver5 = this.oldVCObserver) === null || _this$oldVCObserver5 === void 0 || _this$oldVCObserver5.setSSRElement(element);
|
|
195
|
+
(_this$newVCObserver4 = this.newVCObserver) === null || _this$newVCObserver4 === void 0 || _this$newVCObserver4.setReactRootElement(element);
|
|
170
196
|
}
|
|
171
197
|
}, {
|
|
172
198
|
key: "setReactRootRenderStart",
|
|
173
199
|
value: function setReactRootRenderStart(startTime) {
|
|
174
|
-
var _this$oldVCObserver6;
|
|
200
|
+
var _this$oldVCObserver6, _this$newVCObserver5;
|
|
175
201
|
(_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 || _this$oldVCObserver6.setReactRootRenderStart(startTime || performance.now());
|
|
202
|
+
(_this$newVCObserver5 = this.newVCObserver) === null || _this$newVCObserver5 === void 0 || _this$newVCObserver5.setReactRootRenderStart(startTime || performance.now());
|
|
176
203
|
}
|
|
177
204
|
}, {
|
|
178
205
|
key: "setReactRootRenderStop",
|
|
179
206
|
value: function setReactRootRenderStop(stopTime) {
|
|
180
|
-
var _this$oldVCObserver7;
|
|
207
|
+
var _this$oldVCObserver7, _this$newVCObserver6;
|
|
181
208
|
(_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 || _this$oldVCObserver7.setReactRootRenderStop(stopTime || performance.now());
|
|
209
|
+
(_this$newVCObserver6 = this.newVCObserver) === null || _this$newVCObserver6 === void 0 || _this$newVCObserver6.setReactRootRenderStop(stopTime || performance.now());
|
|
210
|
+
}
|
|
211
|
+
}, {
|
|
212
|
+
key: "collectSSRPlaceholders",
|
|
213
|
+
value: function collectSSRPlaceholders() {
|
|
214
|
+
this.ssrPlaceholderHandler.collectExistingPlaceholders();
|
|
182
215
|
}
|
|
183
216
|
}]);
|
|
184
217
|
}(); // Some products set this variable to indicate it is running in SSR
|
|
@@ -455,7 +455,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
455
455
|
this.devToolsEnabled = options.devToolsEnabled || false;
|
|
456
456
|
this.oldDomUpdatesEnabled = options.oldDomUpdates || false;
|
|
457
457
|
var ssrEnablePageLayoutPlaceholder = options.ssrEnablePageLayoutPlaceholder,
|
|
458
|
-
disableSizeAndPositionCheck = options.disableSizeAndPositionCheck
|
|
458
|
+
disableSizeAndPositionCheck = options.disableSizeAndPositionCheck,
|
|
459
|
+
ssrPlaceholderHandler = options.ssrPlaceholderHandler;
|
|
459
460
|
this.observers = new _observers.Observers({
|
|
460
461
|
selectorConfig: options.selectorConfig || {
|
|
461
462
|
id: false,
|
|
@@ -467,7 +468,8 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
467
468
|
SSRConfig: {
|
|
468
469
|
enablePageLayoutPlaceholder: ssrEnablePageLayoutPlaceholder || false,
|
|
469
470
|
disableSizeAndPositionCheck: disableSizeAndPositionCheck
|
|
470
|
-
}
|
|
471
|
+
},
|
|
472
|
+
ssrPlaceholderHandler: ssrPlaceholderHandler
|
|
471
473
|
});
|
|
472
474
|
this.heatmap = !(0, _config.isVCRevisionEnabled)('fy25.01') ? [] : this.getCleanHeatmap();
|
|
473
475
|
this.heatmapNext = this.getCleanHeatmap();
|
|
@@ -527,6 +529,12 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
|
|
|
527
529
|
var stopTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : performance.now();
|
|
528
530
|
this.observers.setReactRootRenderStop(stopTime);
|
|
529
531
|
}
|
|
532
|
+
}, {
|
|
533
|
+
key: "collectSSRPlaceholders",
|
|
534
|
+
value: function collectSSRPlaceholders() {
|
|
535
|
+
// This is handled by the shared SSRPlaceholderHandlers in VCObserverWrapper
|
|
536
|
+
// Individual observers don't need to implement this
|
|
537
|
+
}
|
|
530
538
|
}, {
|
|
531
539
|
key: "setAbortReason",
|
|
532
540
|
value: function setAbortReason(abort, timestamp) {
|
|
@@ -32,9 +32,7 @@ function isElementVisible(target) {
|
|
|
32
32
|
}
|
|
33
33
|
var Observers = exports.Observers = /*#__PURE__*/function () {
|
|
34
34
|
function Observers(opts) {
|
|
35
|
-
var _this = this
|
|
36
|
-
_opts$SSRConfig,
|
|
37
|
-
_opts$SSRConfig2;
|
|
35
|
+
var _this = this;
|
|
38
36
|
(0, _classCallCheck2.default)(this, Observers);
|
|
39
37
|
(0, _defineProperty2.default)(this, "observedMutations", new WeakMap());
|
|
40
38
|
(0, _defineProperty2.default)(this, "elementsInView", new Set());
|
|
@@ -74,10 +72,17 @@ var Observers = exports.Observers = /*#__PURE__*/function () {
|
|
|
74
72
|
this.selectorConfig = _objectSpread(_objectSpread({}, this.selectorConfig), opts.selectorConfig);
|
|
75
73
|
this.intersectionObserver = this.getIntersectionObserver();
|
|
76
74
|
this.mutationObserver = this.getMutationObserver();
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
|
|
76
|
+
// Use shared SSR placeholder handler if provided, otherwise create new one
|
|
77
|
+
if (opts.ssrPlaceholderHandler) {
|
|
78
|
+
this.ssrPlaceholderHandler = opts.ssrPlaceholderHandler;
|
|
79
|
+
} else {
|
|
80
|
+
var _opts$SSRConfig, _opts$SSRConfig2;
|
|
81
|
+
this.ssrPlaceholderHandler = new _ssrPlaceholders.SSRPlaceholderHandlers({
|
|
82
|
+
enablePageLayoutPlaceholder: (_opts$SSRConfig = opts.SSRConfig) === null || _opts$SSRConfig === void 0 ? void 0 : _opts$SSRConfig.enablePageLayoutPlaceholder,
|
|
83
|
+
disableSizeAndPositionCheck: (_opts$SSRConfig2 = opts.SSRConfig) === null || _opts$SSRConfig2 === void 0 ? void 0 : _opts$SSRConfig2.disableSizeAndPositionCheck
|
|
84
|
+
});
|
|
85
|
+
}
|
|
81
86
|
}
|
|
82
87
|
return (0, _createClass2.default)(Observers, [{
|
|
83
88
|
key: "isBrowserSupported",
|
|
@@ -111,32 +111,8 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
111
111
|
this.disableSizeAndPositionCheck = disableSizeAndPositionCheck;
|
|
112
112
|
if (window.document) {
|
|
113
113
|
try {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
existingElements.forEach(function (el) {
|
|
117
|
-
var placeholderId = el instanceof HTMLElement && _this.getPlaceholderId(el);
|
|
118
|
-
if (placeholderId) {
|
|
119
|
-
var _window$__SSR_PLACEHO, _this$intersectionObs2;
|
|
120
|
-
var width = -1;
|
|
121
|
-
var height = -1;
|
|
122
|
-
var x = -1;
|
|
123
|
-
var y = -1;
|
|
124
|
-
var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[placeholderId];
|
|
125
|
-
if (boundingClientRect) {
|
|
126
|
-
width = boundingClientRect.width;
|
|
127
|
-
height = boundingClientRect.height;
|
|
128
|
-
x = boundingClientRect.x;
|
|
129
|
-
y = boundingClientRect.y;
|
|
130
|
-
}
|
|
131
|
-
_this.staticPlaceholders.set(placeholderId, {
|
|
132
|
-
width: width,
|
|
133
|
-
height: height,
|
|
134
|
-
x: x,
|
|
135
|
-
y: y
|
|
136
|
-
});
|
|
137
|
-
(_this$intersectionObs2 = _this.intersectionObserver) === null || _this$intersectionObs2 === void 0 || _this$intersectionObs2.observe(el);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
114
|
+
// Collect initial placeholders using SSR dimensions
|
|
115
|
+
this.collectPlaceholdersInternal();
|
|
140
116
|
} catch (e) {} finally {
|
|
141
117
|
delete window.__SSR_PLACEHOLDERS_DIMENSIONS__;
|
|
142
118
|
}
|
|
@@ -150,6 +126,66 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
150
126
|
this.getSizeCallbacks = new Map();
|
|
151
127
|
this.reactValidateCallbacks = new Map();
|
|
152
128
|
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "collectPlaceholdersInternal",
|
|
131
|
+
value: function collectPlaceholdersInternal() {
|
|
132
|
+
var _this2 = this;
|
|
133
|
+
var selector = this.enablePageLayoutPlaceholder ? '[data-ssr-placeholder],[data-testid="page-layout.root"]' : '[data-ssr-placeholder]';
|
|
134
|
+
var existingElements = document.querySelectorAll(selector);
|
|
135
|
+
existingElements.forEach(function (el) {
|
|
136
|
+
var placeholderId = el instanceof HTMLElement && _this2.getPlaceholderId(el);
|
|
137
|
+
if (placeholderId && !_this2.staticPlaceholders.has(placeholderId)) {
|
|
138
|
+
var _window$__SSR_PLACEHO, _this2$intersectionOb;
|
|
139
|
+
var width = -1;
|
|
140
|
+
var height = -1;
|
|
141
|
+
var x = -1;
|
|
142
|
+
var y = -1;
|
|
143
|
+
|
|
144
|
+
// Use SSR dimensions from window global if available
|
|
145
|
+
var boundingClientRect = (_window$__SSR_PLACEHO = window.__SSR_PLACEHOLDERS_DIMENSIONS__) === null || _window$__SSR_PLACEHO === void 0 ? void 0 : _window$__SSR_PLACEHO[placeholderId];
|
|
146
|
+
if (boundingClientRect) {
|
|
147
|
+
width = boundingClientRect.width;
|
|
148
|
+
height = boundingClientRect.height;
|
|
149
|
+
x = boundingClientRect.x;
|
|
150
|
+
y = boundingClientRect.y;
|
|
151
|
+
} else {
|
|
152
|
+
// Fallback to current bounding rect if SSR dimensions not available
|
|
153
|
+
var rect = el.getBoundingClientRect();
|
|
154
|
+
width = rect.width;
|
|
155
|
+
height = rect.height;
|
|
156
|
+
x = rect.x;
|
|
157
|
+
y = rect.y;
|
|
158
|
+
}
|
|
159
|
+
_this2.staticPlaceholders.set(placeholderId, {
|
|
160
|
+
width: width,
|
|
161
|
+
height: height,
|
|
162
|
+
x: x,
|
|
163
|
+
y: y
|
|
164
|
+
});
|
|
165
|
+
(_this2$intersectionOb = _this2.intersectionObserver) === null || _this2$intersectionOb === void 0 || _this2$intersectionOb.observe(el);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Added this method to be utilised for testing purposes.
|
|
172
|
+
* In production it collection placeholder should only happens on constructor
|
|
173
|
+
*/
|
|
174
|
+
}, {
|
|
175
|
+
key: "collectExistingPlaceholders",
|
|
176
|
+
value: function collectExistingPlaceholders() {
|
|
177
|
+
if (!window.document) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
// Collect placeholders using SSR dimensions or fallback to live dimensions
|
|
182
|
+
this.collectPlaceholdersInternal();
|
|
183
|
+
} catch (e) {
|
|
184
|
+
// Silently fail if there are any issues
|
|
185
|
+
} finally {
|
|
186
|
+
delete window.__SSR_PLACEHOLDERS_DIMENSIONS__;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
153
189
|
}, {
|
|
154
190
|
key: "isPlaceholder",
|
|
155
191
|
value: function isPlaceholder(element) {
|
|
@@ -186,44 +222,44 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
186
222
|
}, {
|
|
187
223
|
key: "checkIfExistedAndSizeMatching",
|
|
188
224
|
value: function checkIfExistedAndSizeMatching(el) {
|
|
189
|
-
var
|
|
225
|
+
var _this3 = this;
|
|
190
226
|
el = this.findNearestPlaceholderContainerIfIgnored(el);
|
|
191
227
|
var id = this.getPlaceholderId(el);
|
|
192
228
|
return new Promise(function (resolve) {
|
|
193
|
-
if (!
|
|
229
|
+
if (!_this3.staticPlaceholders.has(id)) {
|
|
194
230
|
resolve(false);
|
|
195
231
|
return;
|
|
196
232
|
} else {
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
(
|
|
233
|
+
var _this3$intersectionOb;
|
|
234
|
+
_this3.callbacks.set(id, resolve);
|
|
235
|
+
(_this3$intersectionOb = _this3.intersectionObserver) === null || _this3$intersectionOb === void 0 || _this3$intersectionOb.observe(el);
|
|
200
236
|
}
|
|
201
237
|
});
|
|
202
238
|
}
|
|
203
239
|
}, {
|
|
204
240
|
key: "getSize",
|
|
205
241
|
value: function getSize(el) {
|
|
206
|
-
var
|
|
242
|
+
var _this4 = this;
|
|
207
243
|
return new Promise(function (resolve) {
|
|
208
|
-
var
|
|
209
|
-
|
|
210
|
-
(
|
|
244
|
+
var _this4$intersectionOb;
|
|
245
|
+
_this4.getSizeCallbacks.set(_this4.getPlaceholderId(el), resolve);
|
|
246
|
+
(_this4$intersectionOb = _this4.intersectionObserver) === null || _this4$intersectionOb === void 0 || _this4$intersectionOb.observe(el);
|
|
211
247
|
});
|
|
212
248
|
}
|
|
213
249
|
}, {
|
|
214
250
|
key: "validateReactComponentMatchToPlaceholder",
|
|
215
251
|
value: function validateReactComponentMatchToPlaceholder(el) {
|
|
216
|
-
var
|
|
252
|
+
var _this5 = this;
|
|
217
253
|
el = this.findNearestPlaceholderContainerIfIgnored(el);
|
|
218
254
|
var id = this.getPlaceholderReplacementId(el);
|
|
219
255
|
return new Promise(function (resolve) {
|
|
220
|
-
if (!
|
|
256
|
+
if (!_this5.staticPlaceholders.has(id)) {
|
|
221
257
|
resolve(false);
|
|
222
258
|
return;
|
|
223
259
|
} else {
|
|
224
|
-
var
|
|
225
|
-
|
|
226
|
-
(
|
|
260
|
+
var _this5$intersectionOb;
|
|
261
|
+
_this5.reactValidateCallbacks.set(id, resolve);
|
|
262
|
+
(_this5$intersectionOb = _this5.intersectionObserver) === null || _this5$intersectionOb === void 0 || _this5$intersectionOb.observe(el);
|
|
227
263
|
}
|
|
228
264
|
});
|
|
229
265
|
}
|
|
@@ -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",
|