@atlaskit/react-ufo 4.15.11 → 4.15.13

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/ufo-interaction-ignore
2
2
 
3
+ ## 4.15.13
4
+
5
+ ### Patch Changes
6
+
7
+ - [`b7caf41846c8c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b7caf41846c8c) -
8
+ Prevent keypresses from aborting press interactions in react ufo
9
+
10
+ ## 4.15.12
11
+
12
+ ### Patch Changes
13
+
14
+ - [`19af60b5294cd`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/19af60b5294cd) -
15
+ Reduces eagerness of ssr placeholder checking
16
+
3
17
  ## 4.15.11
4
18
 
5
19
  ### Patch Changes
@@ -13,6 +13,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
14
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
17
  var _config = require("../../config");
17
18
  var _interactionMetrics = require("../../interaction-metrics");
18
19
  var _attachAbortListeners = require("./attachAbortListeners");
@@ -393,6 +394,14 @@ var VCObserver = exports.VCObserver = /*#__PURE__*/function () {
393
394
  _this.setAbortReason(abortReason.scroll, time);
394
395
  break;
395
396
  case 'keydown':
397
+ // Don't abort press interactions on keydown events, as keydown is expected
398
+ // when users press Enter/Space to activate buttons or other interactive elements
399
+ if ((0, _platformFeatureFlags.fg)('platform_ufo_keypress_interaction_abort')) {
400
+ var interaction = (0, _interactionMetrics.getActiveInteraction)();
401
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
402
+ break;
403
+ }
404
+ }
396
405
  _this.setAbortReason(abortReason.keypress, time);
397
406
  break;
398
407
  case 'resize':
@@ -245,12 +245,13 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
245
245
  }, {
246
246
  key: "findNearestPlaceholderOrContainer",
247
247
  value: function findNearestPlaceholderOrContainer(element) {
248
+ var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ANCESTOR_LOOKUP_LIMIT;
248
249
  var ancestor = element;
249
250
  if (this.isPlaceholderIgnored(element) && element.parentElement) {
250
251
  ancestor = element.parentElement;
251
252
  }
252
253
  var i = 0;
253
- while (ancestor && i < ANCESTOR_LOOKUP_LIMIT) {
254
+ while (ancestor && i < limit) {
254
255
  if (this.isPlaceholder(ancestor) || this.isPlaceholderReplacement(ancestor)) {
255
256
  return ancestor;
256
257
  }
@@ -325,7 +326,8 @@ var SSRPlaceholderHandlers = exports.SSRPlaceholderHandlers = /*#__PURE__*/funct
325
326
  }, {
326
327
  key: "validateReactComponentMatchToPlaceholderV4",
327
328
  value: function validateReactComponentMatchToPlaceholderV4(el) {
328
- el = (0, _platformFeatureFlags.fg)('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el) : this.findNearestPlaceholderContainerIfIgnored(el);
329
+ el = (0, _platformFeatureFlags.fg)('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el, 2) // We are using 2 due to over-eagerness of the default, only check itself and 1 ancestor
330
+ : this.findNearestPlaceholderContainerIfIgnored(el);
329
331
  var id = this.getPlaceholderReplacementId(el);
330
332
  return this.staticPlaceholders.has(id);
331
333
  }
@@ -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 _interactionMetrics = require("../../interaction-metrics");
16
17
  var _ssrPlaceholders = require("../vc-observer/observers/ssr-placeholders");
17
18
  var _entriesTimeline = _interopRequireDefault(require("./entries-timeline"));
18
19
  var _getElementName2 = _interopRequireDefault(require("./get-element-name"));
@@ -113,6 +114,14 @@ var VCObserverNew = exports.default = /*#__PURE__*/function () {
113
114
  onEvent: function onEvent(_ref) {
114
115
  var time = _ref.time,
115
116
  type = _ref.type;
117
+ // Don't abort press interactions on keydown events, as keydown is expected
118
+ // when users press Enter/Space to activate buttons or other interactive elements
119
+ if (type === 'keydown' && (0, _platformFeatureFlags.fg)('platform_ufo_keypress_interaction_abort')) {
120
+ var interaction = (0, _interactionMetrics.getActiveInteraction)();
121
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
122
+ return;
123
+ }
124
+ }
116
125
  _this.entriesTimeline.push({
117
126
  time: time,
118
127
  data: {
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { isVCRevisionEnabled } from '../../config';
3
4
  import { getActiveInteraction } from '../../interaction-metrics';
4
5
  import { attachAbortListeners } from './attachAbortListeners';
@@ -432,6 +433,14 @@ export class VCObserver {
432
433
  this.setAbortReason(abortReason.scroll, time);
433
434
  break;
434
435
  case 'keydown':
436
+ // Don't abort press interactions on keydown events, as keydown is expected
437
+ // when users press Enter/Space to activate buttons or other interactive elements
438
+ if (fg('platform_ufo_keypress_interaction_abort')) {
439
+ const interaction = getActiveInteraction();
440
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
441
+ break;
442
+ }
443
+ }
435
444
  this.setAbortReason(abortReason.keypress, time);
436
445
  break;
437
446
  case 'resize':
@@ -209,13 +209,13 @@ export class SSRPlaceholderHandlers {
209
209
  }
210
210
  return element;
211
211
  }
212
- findNearestPlaceholderOrContainer(element) {
212
+ findNearestPlaceholderOrContainer(element, limit = ANCESTOR_LOOKUP_LIMIT) {
213
213
  let ancestor = element;
214
214
  if (this.isPlaceholderIgnored(element) && element.parentElement) {
215
215
  ancestor = element.parentElement;
216
216
  }
217
217
  let i = 0;
218
- while (ancestor && i < ANCESTOR_LOOKUP_LIMIT) {
218
+ while (ancestor && i < limit) {
219
219
  if (this.isPlaceholder(ancestor) || this.isPlaceholderReplacement(ancestor)) {
220
220
  return ancestor;
221
221
  }
@@ -277,7 +277,8 @@ export class SSRPlaceholderHandlers {
277
277
  });
278
278
  }
279
279
  validateReactComponentMatchToPlaceholderV4(el) {
280
- el = fg('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el) : this.findNearestPlaceholderContainerIfIgnored(el);
280
+ el = fg('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el, 2) // We are using 2 due to over-eagerness of the default, only check itself and 1 ancestor
281
+ : this.findNearestPlaceholderContainerIfIgnored(el);
281
282
  const id = this.getPlaceholderReplacementId(el);
282
283
  return this.staticPlaceholders.has(id);
283
284
  }
@@ -1,5 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { getActiveInteraction } from '../../interaction-metrics';
3
4
  import { SSRPlaceholderHandlers } from '../vc-observer/observers/ssr-placeholders';
4
5
  import EntriesTimeline from './entries-timeline';
5
6
  import getElementName from './get-element-name';
@@ -96,6 +97,14 @@ export default class VCObserverNew {
96
97
  time,
97
98
  type
98
99
  }) => {
100
+ // Don't abort press interactions on keydown events, as keydown is expected
101
+ // when users press Enter/Space to activate buttons or other interactive elements
102
+ if (type === 'keydown' && fg('platform_ufo_keypress_interaction_abort')) {
103
+ const interaction = getActiveInteraction();
104
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
105
+ return;
106
+ }
107
+ }
99
108
  this.entriesTimeline.push({
100
109
  time,
101
110
  data: {
@@ -9,6 +9,7 @@ var _excluded = ["__debug__element"];
9
9
  import _regeneratorRuntime from "@babel/runtime/regenerator";
10
10
  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; }
11
11
  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) { _defineProperty(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; }
12
+ import { fg } from '@atlaskit/platform-feature-flags';
12
13
  import { isVCRevisionEnabled } from '../../config';
13
14
  import { getActiveInteraction } from '../../interaction-metrics';
14
15
  import { attachAbortListeners } from './attachAbortListeners';
@@ -386,6 +387,14 @@ export var VCObserver = /*#__PURE__*/function () {
386
387
  _this.setAbortReason(abortReason.scroll, time);
387
388
  break;
388
389
  case 'keydown':
390
+ // Don't abort press interactions on keydown events, as keydown is expected
391
+ // when users press Enter/Space to activate buttons or other interactive elements
392
+ if (fg('platform_ufo_keypress_interaction_abort')) {
393
+ var interaction = getActiveInteraction();
394
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
395
+ break;
396
+ }
397
+ }
389
398
  _this.setAbortReason(abortReason.keypress, time);
390
399
  break;
391
400
  case 'resize':
@@ -238,12 +238,13 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
238
238
  }, {
239
239
  key: "findNearestPlaceholderOrContainer",
240
240
  value: function findNearestPlaceholderOrContainer(element) {
241
+ var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ANCESTOR_LOOKUP_LIMIT;
241
242
  var ancestor = element;
242
243
  if (this.isPlaceholderIgnored(element) && element.parentElement) {
243
244
  ancestor = element.parentElement;
244
245
  }
245
246
  var i = 0;
246
- while (ancestor && i < ANCESTOR_LOOKUP_LIMIT) {
247
+ while (ancestor && i < limit) {
247
248
  if (this.isPlaceholder(ancestor) || this.isPlaceholderReplacement(ancestor)) {
248
249
  return ancestor;
249
250
  }
@@ -318,7 +319,8 @@ export var SSRPlaceholderHandlers = /*#__PURE__*/function () {
318
319
  }, {
319
320
  key: "validateReactComponentMatchToPlaceholderV4",
320
321
  value: function validateReactComponentMatchToPlaceholderV4(el) {
321
- el = fg('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el) : this.findNearestPlaceholderContainerIfIgnored(el);
322
+ el = fg('platform_ufo_v4_fix_nested_ssr_placeholder') ? this.findNearestPlaceholderOrContainer(el, 2) // We are using 2 due to over-eagerness of the default, only check itself and 1 ancestor
323
+ : this.findNearestPlaceholderContainerIfIgnored(el);
322
324
  var id = this.getPlaceholderReplacementId(el);
323
325
  return this.staticPlaceholders.has(id);
324
326
  }
@@ -6,6 +6,7 @@ import _createClass from "@babel/runtime/helpers/createClass";
6
6
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
8
  import { fg } from '@atlaskit/platform-feature-flags';
9
+ import { getActiveInteraction } from '../../interaction-metrics';
9
10
  import { SSRPlaceholderHandlers } from '../vc-observer/observers/ssr-placeholders';
10
11
  import EntriesTimeline from './entries-timeline';
11
12
  import _getElementName from './get-element-name';
@@ -106,6 +107,14 @@ var VCObserverNew = /*#__PURE__*/function () {
106
107
  onEvent: function onEvent(_ref) {
107
108
  var time = _ref.time,
108
109
  type = _ref.type;
110
+ // Don't abort press interactions on keydown events, as keydown is expected
111
+ // when users press Enter/Space to activate buttons or other interactive elements
112
+ if (type === 'keydown' && fg('platform_ufo_keypress_interaction_abort')) {
113
+ var interaction = getActiveInteraction();
114
+ if ((interaction === null || interaction === void 0 ? void 0 : interaction.type) === 'press') {
115
+ return;
116
+ }
117
+ }
109
118
  _this.entriesTimeline.push({
110
119
  time: time,
111
120
  data: {
@@ -31,7 +31,7 @@ export declare class SSRPlaceholderHandlers {
31
31
  isPlaceholderV4(element: HTMLElement): boolean;
32
32
  isPlaceholderReplacementV4(element: HTMLElement): boolean;
33
33
  findNearestPlaceholderContainerIfIgnored(element: HTMLElement): HTMLElement;
34
- findNearestPlaceholderOrContainer(element: HTMLElement): HTMLElement;
34
+ findNearestPlaceholderOrContainer(element: HTMLElement, limit?: number): HTMLElement;
35
35
  checkIfExistedAndSizeMatching(el: HTMLElement): Promise<boolean>;
36
36
  checkIfExistedAndSizeMatchingV3(el: HTMLElement): boolean;
37
37
  getSize(el: HTMLElement): Promise<Rect>;
@@ -31,7 +31,7 @@ export declare class SSRPlaceholderHandlers {
31
31
  isPlaceholderV4(element: HTMLElement): boolean;
32
32
  isPlaceholderReplacementV4(element: HTMLElement): boolean;
33
33
  findNearestPlaceholderContainerIfIgnored(element: HTMLElement): HTMLElement;
34
- findNearestPlaceholderOrContainer(element: HTMLElement): HTMLElement;
34
+ findNearestPlaceholderOrContainer(element: HTMLElement, limit?: number): HTMLElement;
35
35
  checkIfExistedAndSizeMatching(el: HTMLElement): Promise<boolean>;
36
36
  checkIfExistedAndSizeMatchingV3(el: HTMLElement): boolean;
37
37
  getSize(el: HTMLElement): Promise<Rect>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/react-ufo",
3
- "version": "4.15.11",
3
+ "version": "4.15.13",
4
4
  "description": "Parts of React UFO that are publicly available",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -196,6 +196,9 @@
196
196
  },
197
197
  "platform_mark_ufo_segment_first_load": {
198
198
  "type": "boolean"
199
+ },
200
+ "platform_ufo_keypress_interaction_abort": {
201
+ "type": "boolean"
199
202
  }
200
203
  }
201
204
  }