@atlaskit/react-ufo 4.12.3 → 4.12.5
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 +14 -0
- package/dist/cjs/create-payload/utils/get-browser-metadata.js +9 -0
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +53 -3
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +54 -4
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +247 -89
- package/dist/es2019/create-payload/utils/get-browser-metadata.js +9 -0
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +51 -3
- package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +55 -4
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +175 -80
- package/dist/esm/create-payload/utils/get-browser-metadata.js +9 -0
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +53 -3
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +55 -4
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +247 -89
- package/dist/types/common/react-ufo-payload-schema.d.ts +1 -0
- package/dist/types/create-payload/utils/get-browser-metadata.d.ts +1 -0
- package/dist/types/resource-timing/index.d.ts +1 -1
- package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +5 -0
- package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +1 -0
- package/dist/types-ts4.5/create-payload/utils/get-browser-metadata.d.ts +1 -0
- package/dist/types-ts4.5/resource-timing/index.d.ts +1 -1
- package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +5 -0
- package/package.json +8 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/ufo-interaction-ignore
|
|
2
2
|
|
|
3
|
+
## 4.12.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`5976942ba053c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5976942ba053c) -
|
|
8
|
+
Additional fixes for display contents children handling in TTVC
|
|
9
|
+
|
|
10
|
+
## 4.12.4
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- [`189df14145d27`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/189df14145d27) -
|
|
15
|
+
Handle elements that are both display: contents and SSR placeholder replacement
|
|
16
|
+
|
|
3
17
|
## 4.12.3
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = getBrowserMetadata;
|
|
8
8
|
exports.getBrowserMetadataToLegacyFormat = getBrowserMetadataToLegacyFormat;
|
|
9
9
|
var _bowserUltralight = _interopRequireDefault(require("bowser-ultralight"));
|
|
10
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
10
11
|
function getBrowserMetadata() {
|
|
11
12
|
var data = {
|
|
12
13
|
time: {
|
|
@@ -48,6 +49,9 @@ function getBrowserMetadata() {
|
|
|
48
49
|
downlink: navigator.connection.downlink
|
|
49
50
|
};
|
|
50
51
|
}
|
|
52
|
+
if (typeof navigator !== 'undefined' && (0, _platformFeatureFlags.fg)('react_ufo_add_webdriver_info')) {
|
|
53
|
+
data.webdriver = Boolean(navigator.webdriver);
|
|
54
|
+
}
|
|
51
55
|
return data;
|
|
52
56
|
}
|
|
53
57
|
|
|
@@ -67,6 +71,11 @@ function getBrowserMetadataToLegacyFormat() {
|
|
|
67
71
|
legacyFormat['event:browser:version'] = metadata.browser.version;
|
|
68
72
|
}
|
|
69
73
|
|
|
74
|
+
// Webdriver data
|
|
75
|
+
if (metadata.webdriver !== undefined) {
|
|
76
|
+
legacyFormat['event:browser:webdriver'] = metadata.webdriver;
|
|
77
|
+
}
|
|
78
|
+
|
|
70
79
|
// Device data
|
|
71
80
|
if (metadata.device) {
|
|
72
81
|
if (metadata.device.cpus !== undefined) {
|
|
@@ -8,6 +8,7 @@ exports.SSRPlaceholderHandlers = void 0;
|
|
|
8
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
12
|
var ANCESTOR_LOOKUP_LIMIT = 10;
|
|
12
13
|
var PAGE_LAYOUT_ID = 'page-layout.root';
|
|
13
14
|
var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/function () {
|
|
@@ -66,7 +67,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
66
67
|
_resolve(hasSameSizePosition);
|
|
67
68
|
} else {
|
|
68
69
|
requestAnimationFrame(function () {
|
|
69
|
-
var targetRect =
|
|
70
|
+
var targetRect = _this.getEffectiveBoundingRect(target);
|
|
70
71
|
var hasSameSizePosition = _this.hasSameSizePosition(rect, targetRect);
|
|
71
72
|
_resolve(hasSameSizePosition);
|
|
72
73
|
});
|
|
@@ -85,7 +86,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
85
86
|
_resolve2(_hasSameSizePosition);
|
|
86
87
|
} else {
|
|
87
88
|
requestAnimationFrame(function () {
|
|
88
|
-
var targetRect =
|
|
89
|
+
var targetRect = _this.getEffectiveBoundingRect(target);
|
|
89
90
|
var hasSameSizePosition = _this.hasSameSizePosition(_rect, targetRect);
|
|
90
91
|
_resolve2(hasSameSizePosition);
|
|
91
92
|
});
|
|
@@ -243,7 +244,7 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
243
244
|
if (!placeholderRects) {
|
|
244
245
|
return false;
|
|
245
246
|
}
|
|
246
|
-
return this.hasSameSizePosition(placeholderRects,
|
|
247
|
+
return this.hasSameSizePosition(placeholderRects, this.getEffectiveBoundingRect(el));
|
|
247
248
|
}
|
|
248
249
|
}, {
|
|
249
250
|
key: "getSize",
|
|
@@ -282,6 +283,55 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
|
|
|
282
283
|
var verticalCheck = Math.abs(rect.y - boundingClientRect.y) < this.EQUALITY_THRESHOLD && Math.abs(rect.height - boundingClientRect.height) < this.EQUALITY_THRESHOLD;
|
|
283
284
|
return horizontalCheck && verticalCheck || false;
|
|
284
285
|
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Gets the effective bounding rectangle for an element, handling display: contents elements
|
|
289
|
+
* by collecting dimensions from their children instead
|
|
290
|
+
*/
|
|
291
|
+
}, {
|
|
292
|
+
key: "getEffectiveBoundingRect",
|
|
293
|
+
value: function getEffectiveBoundingRect(el) {
|
|
294
|
+
var enableDisplayContentsSupport = (0, _platformFeatureFlags.fg)('platform_ufo_ssr_placeholders_for_display_contents');
|
|
295
|
+
|
|
296
|
+
// Only handle display: contents if feature flag is enabled
|
|
297
|
+
if (enableDisplayContentsSupport) {
|
|
298
|
+
var computedStyle = window.getComputedStyle(el);
|
|
299
|
+
|
|
300
|
+
// If element has display: contents, collect bounding rect from children
|
|
301
|
+
if (computedStyle.display === 'contents') {
|
|
302
|
+
var children = Array.from(el.children);
|
|
303
|
+
if (children.length === 0) {
|
|
304
|
+
// No children, return zero rect
|
|
305
|
+
return new DOMRect(0, 0, 0, 0);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Calculate union of all children's bounding rects
|
|
309
|
+
var minX = Infinity;
|
|
310
|
+
var minY = Infinity;
|
|
311
|
+
var maxX = -Infinity;
|
|
312
|
+
var maxY = -Infinity;
|
|
313
|
+
children.forEach(function (child) {
|
|
314
|
+
var childRect = child.getBoundingClientRect();
|
|
315
|
+
// Skip children with zero dimensions (likely also display: contents)
|
|
316
|
+
if (childRect.width > 0 || childRect.height > 0) {
|
|
317
|
+
minX = Math.min(minX, childRect.left);
|
|
318
|
+
minY = Math.min(minY, childRect.top);
|
|
319
|
+
maxX = Math.max(maxX, childRect.right);
|
|
320
|
+
maxY = Math.max(maxY, childRect.bottom);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// If no children with dimensions found, return zero rect
|
|
325
|
+
if (minX === Infinity) {
|
|
326
|
+
return new DOMRect(0, 0, 0, 0);
|
|
327
|
+
}
|
|
328
|
+
return new DOMRect(minX, minY, maxX - minX, maxY - minY);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Normal element or feature flag disabled, return its bounding rect
|
|
333
|
+
return el.getBoundingClientRect();
|
|
334
|
+
}
|
|
285
335
|
}, {
|
|
286
336
|
key: "isDummyRect",
|
|
287
337
|
value: function isDummyRect(rect) {
|
|
@@ -4,26 +4,76 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.collectSSRPlaceholderDimensions = collectSSRPlaceholderDimensions;
|
|
7
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
7
8
|
// lightweight script to scan the SSR response and collect all elements with data-ssr-placeholder attribute
|
|
8
9
|
// and save their size/positions in a map __SSR_PLACEHOLDERS_DIMENSIONS__ on the Window object. Each placeholderId is
|
|
9
10
|
// unique and maps to its corresponding elements bounding client rectangle dimensions.
|
|
10
11
|
function collectSSRPlaceholderDimensions(document, window) {
|
|
11
12
|
var enablePageLayoutPlaceholder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
13
|
+
var enableDisplayContentsSupport = (0, _platformFeatureFlags.fg)('platform_ufo_ssr_placeholders_for_display_contents');
|
|
12
14
|
var ssrPlaceholders = document === null || document === void 0 ? void 0 : document.querySelectorAll('[data-ssr-placeholder]');
|
|
13
15
|
ssrPlaceholders.forEach(function (elem) {
|
|
14
16
|
var placeholderId = elem.getAttribute('data-ssr-placeholder');
|
|
15
|
-
var boundingClient = elem.getBoundingClientRect();
|
|
16
17
|
if (placeholderId) {
|
|
17
18
|
window.__SSR_PLACEHOLDERS_DIMENSIONS__ = window.__SSR_PLACEHOLDERS_DIMENSIONS__ || {};
|
|
18
|
-
|
|
19
|
+
if (enableDisplayContentsSupport) {
|
|
20
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__[placeholderId] = getEffectiveBoundingRect(elem, window);
|
|
21
|
+
} else {
|
|
22
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__[placeholderId] = elem.getBoundingClientRect();
|
|
23
|
+
}
|
|
19
24
|
}
|
|
20
25
|
});
|
|
21
26
|
if (enablePageLayoutPlaceholder) {
|
|
22
27
|
var pageLayoutRoot = document === null || document === void 0 ? void 0 : document.getElementById('unsafe-design-system-page-layout-root');
|
|
23
28
|
if (pageLayoutRoot) {
|
|
24
|
-
var boundingClient = pageLayoutRoot.getBoundingClientRect();
|
|
25
29
|
window.__SSR_PLACEHOLDERS_DIMENSIONS__ = window.__SSR_PLACEHOLDERS_DIMENSIONS__ || {};
|
|
26
|
-
|
|
30
|
+
if (enableDisplayContentsSupport) {
|
|
31
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__['page-layout.root'] = getEffectiveBoundingRect(pageLayoutRoot, window);
|
|
32
|
+
} else {
|
|
33
|
+
window.__SSR_PLACEHOLDERS_DIMENSIONS__['page-layout.root'] = pageLayoutRoot.getBoundingClientRect();
|
|
34
|
+
}
|
|
27
35
|
}
|
|
28
36
|
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Gets the effective bounding rectangle for an element, handling display: contents elements
|
|
41
|
+
* by collecting dimensions from their children instead
|
|
42
|
+
*/
|
|
43
|
+
function getEffectiveBoundingRect(elem, window) {
|
|
44
|
+
var computedStyle = window.getComputedStyle(elem);
|
|
45
|
+
|
|
46
|
+
// If element has display: contents, collect bounding rect from children
|
|
47
|
+
if (computedStyle.display === 'contents') {
|
|
48
|
+
var children = Array.from(elem.children);
|
|
49
|
+
if (children.length === 0) {
|
|
50
|
+
// No children, return zero rect
|
|
51
|
+
return new DOMRect(0, 0, 0, 0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Calculate union of all children's bounding rects
|
|
55
|
+
var minX = Infinity;
|
|
56
|
+
var minY = Infinity;
|
|
57
|
+
var maxX = -Infinity;
|
|
58
|
+
var maxY = -Infinity;
|
|
59
|
+
children.forEach(function (child) {
|
|
60
|
+
var childRect = child.getBoundingClientRect();
|
|
61
|
+
// Skip children with zero dimensions (likely also display: contents)
|
|
62
|
+
if (childRect.width > 0 || childRect.height > 0) {
|
|
63
|
+
minX = Math.min(minX, childRect.left);
|
|
64
|
+
minY = Math.min(minY, childRect.top);
|
|
65
|
+
maxX = Math.max(maxX, childRect.right);
|
|
66
|
+
maxY = Math.max(maxY, childRect.bottom);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// If no children with dimensions found, return zero rect
|
|
71
|
+
if (minX === Infinity) {
|
|
72
|
+
return new DOMRect(0, 0, 0, 0);
|
|
73
|
+
}
|
|
74
|
+
return new DOMRect(minX, minY, maxX - minX, maxY - minY);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Normal element, return its bounding rect
|
|
78
|
+
return elem.getBoundingClientRect();
|
|
29
79
|
}
|