@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.
Files changed (22) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/create-payload/utils/get-browser-metadata.js +9 -0
  3. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +53 -3
  4. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +54 -4
  5. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +247 -89
  6. package/dist/es2019/create-payload/utils/get-browser-metadata.js +9 -0
  7. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/index.js +51 -3
  8. package/dist/es2019/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +55 -4
  9. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +175 -80
  10. package/dist/esm/create-payload/utils/get-browser-metadata.js +9 -0
  11. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +53 -3
  12. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/ssr-scripts/collectSSRPlaceholderDimensions.js +55 -4
  13. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +247 -89
  14. package/dist/types/common/react-ufo-payload-schema.d.ts +1 -0
  15. package/dist/types/create-payload/utils/get-browser-metadata.d.ts +1 -0
  16. package/dist/types/resource-timing/index.d.ts +1 -1
  17. package/dist/types/vc/vc-observer/observers/ssr-placeholders/index.d.ts +5 -0
  18. package/dist/types-ts4.5/common/react-ufo-payload-schema.d.ts +1 -0
  19. package/dist/types-ts4.5/create-payload/utils/get-browser-metadata.d.ts +1 -0
  20. package/dist/types-ts4.5/resource-timing/index.d.ts +1 -1
  21. package/dist/types-ts4.5/vc/vc-observer/observers/ssr-placeholders/index.d.ts +5 -0
  22. 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 = target.getBoundingClientRect();
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 = target.getBoundingClientRect();
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, el.getBoundingClientRect());
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
- window.__SSR_PLACEHOLDERS_DIMENSIONS__[placeholderId] = boundingClient;
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
- window.__SSR_PLACEHOLDERS_DIMENSIONS__['page-layout.root'] = boundingClient;
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
  }