@atlaskit/popup 4.4.5 → 4.6.0

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,34 @@
1
1
  # @atlaskit/popup
2
2
 
3
+ ## 4.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`bfdf7891c505f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bfdf7891c505f) -
8
+ Fixes a bug with the compositional popup where focus was not being returned to the trigger when
9
+ the popup is closed. This was occurring in React 18 Strict Mode.
10
+
11
+ The regular popup was already using this fix behind the `platform-design-system-popup-ref` feature
12
+ gate.
13
+
14
+ This change to compositional popup is behind the feature gate
15
+ `platform-dst-popup-compositional-trigger-ref`.
16
+
17
+ ## 4.5.0
18
+
19
+ ### Minor Changes
20
+
21
+ - [`0e417a8c4a92e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0e417a8c4a92e) -
22
+ Popup will now stay open when a click starts inside the popup but then moves outside the popup.
23
+ The `onClose` callback will not be called in this case. This aligns it with the behaviour of Modal
24
+ Dialog.
25
+
26
+ This change was previously behind a feature flag, which has now been removed.
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies
31
+
3
32
  ## 4.4.5
4
33
 
5
34
  ### Patch Changes
@@ -13,11 +13,13 @@ var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
13
13
  var _useId = require("@atlaskit/ds-lib/use-id");
14
14
  var _layering = require("@atlaskit/layering");
15
15
  var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
17
  var _popper = require("@atlaskit/popper");
17
18
  var _portal = _interopRequireDefault(require("@atlaskit/portal"));
18
19
  var _popperWrapper = _interopRequireDefault(require("../popper-wrapper"));
19
20
  var _useAppearance = require("../use-appearance");
20
21
  var _useGetMemoizedMergedTriggerRef = require("../use-get-memoized-merged-trigger-ref");
22
+ var _useGetMemoizedMergedTriggerRefNew = require("../use-get-memoized-merged-trigger-ref-new");
21
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
24
  var IsOpenContext = /*#__PURE__*/(0, _react.createContext)(false);
23
25
  var IdContext = /*#__PURE__*/(0, _react.createContext)(undefined);
@@ -87,10 +89,11 @@ var PopupTrigger = exports.PopupTrigger = function PopupTrigger(_ref2) {
87
89
  var id = (0, _react.useContext)(IdContext);
88
90
  var setTriggerRef = (0, _react.useContext)(SetTriggerRefContext);
89
91
  var getMergedTriggerRef = (0, _useGetMemoizedMergedTriggerRef.useGetMemoizedMergedTriggerRef)();
92
+ var getMergedTriggerRefNew = (0, _useGetMemoizedMergedTriggerRefNew.useGetMemoizedMergedTriggerRefNew)();
90
93
  return /*#__PURE__*/_react.default.createElement(_popper.Reference, null, function (_ref3) {
91
94
  var ref = _ref3.ref;
92
95
  return children({
93
- ref: getMergedTriggerRef(ref, setTriggerRef, isOpen),
96
+ ref: (0, _platformFeatureFlags.fg)('platform-dst-popup-compositional-trigger-ref') ? getMergedTriggerRefNew(ref, setTriggerRef) : getMergedTriggerRef(ref, setTriggerRef, isOpen),
94
97
  'aria-controls': id,
95
98
  'aria-expanded': isOpen,
96
99
  'aria-haspopup': true
@@ -90,7 +90,7 @@ var useCloseManager = exports.useCloseManager = function useCloseManager(_ref) {
90
90
  var isClickOnPopup = popupRef && popupRef.contains(target);
91
91
  var isClickOnTrigger = triggerRef && triggerRef.contains(target);
92
92
  var didClickStartInsidePopup = popupRef && mouseDownTarget.current instanceof Node && popupRef.contains(mouseDownTarget.current);
93
- if (!isClickOnPopup && !isClickOnTrigger && ((0, _platformFeatureFlags.fg)('popup-onclose-fix-mouse-down-inside-popup') ? !didClickStartInsidePopup : true)) {
93
+ if (!isClickOnPopup && !isClickOnTrigger && !didClickStartInsidePopup) {
94
94
  closePopup(event);
95
95
  // If there was an outside click on a non-interactive element, the focus should be on the trigger.
96
96
  if (document.activeElement && !(0, _isElementInteractive.isInteractiveElement)(document.activeElement) && (0, _platformFeatureFlags.fg)('platform_dst_popup-disable-focuslock')) {
@@ -10,7 +10,8 @@ var _react = require("react");
10
10
  var _memoizeOne = _interopRequireDefault(require("memoize-one"));
11
11
  /**
12
12
  * Here setting ref is not dependent on isOpen flag which is failing in React 18 strict mode
13
- * Implemented behind ff `platform-design-system-popup-ref`
13
+ * Implemented behind ff `platform-design-system-popup-ref` (for regular popup) and
14
+ * `platform-dst-popup-compositional-trigger-ref` (for compositional popup)
14
15
  * @returns Function to set trigger ref
15
16
  */
16
17
  var useGetMemoizedMergedTriggerRefNew = exports.useGetMemoizedMergedTriggerRefNew = function useGetMemoizedMergedTriggerRefNew() {
@@ -4,11 +4,13 @@ import noop from '@atlaskit/ds-lib/noop';
4
4
  import { useId } from '@atlaskit/ds-lib/use-id';
5
5
  import { Layering } from '@atlaskit/layering';
6
6
  import { useNotifyOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
7
8
  import { Manager, Reference } from '@atlaskit/popper';
8
9
  import Portal from '@atlaskit/portal';
9
10
  import PopperWrapper from '../popper-wrapper';
10
11
  import { usePopupAppearance } from '../use-appearance';
11
12
  import { useGetMemoizedMergedTriggerRef } from '../use-get-memoized-merged-trigger-ref';
13
+ import { useGetMemoizedMergedTriggerRefNew } from '../use-get-memoized-merged-trigger-ref-new';
12
14
  const IsOpenContext = /*#__PURE__*/createContext(false);
13
15
  const IdContext = /*#__PURE__*/createContext(undefined);
14
16
  const TriggerRefContext = /*#__PURE__*/createContext(null);
@@ -75,10 +77,11 @@ export const PopupTrigger = ({
75
77
  const id = useContext(IdContext);
76
78
  const setTriggerRef = useContext(SetTriggerRefContext);
77
79
  const getMergedTriggerRef = useGetMemoizedMergedTriggerRef();
80
+ const getMergedTriggerRefNew = useGetMemoizedMergedTriggerRefNew();
78
81
  return /*#__PURE__*/React.createElement(Reference, null, ({
79
82
  ref
80
83
  }) => children({
81
- ref: getMergedTriggerRef(ref, setTriggerRef, isOpen),
84
+ ref: fg('platform-dst-popup-compositional-trigger-ref') ? getMergedTriggerRefNew(ref, setTriggerRef) : getMergedTriggerRef(ref, setTriggerRef, isOpen),
82
85
  'aria-controls': id,
83
86
  'aria-expanded': isOpen,
84
87
  'aria-haspopup': true
@@ -87,7 +87,7 @@ export const useCloseManager = ({
87
87
  const isClickOnPopup = popupRef && popupRef.contains(target);
88
88
  const isClickOnTrigger = triggerRef && triggerRef.contains(target);
89
89
  const didClickStartInsidePopup = popupRef && mouseDownTarget.current instanceof Node && popupRef.contains(mouseDownTarget.current);
90
- if (!isClickOnPopup && !isClickOnTrigger && (fg('popup-onclose-fix-mouse-down-inside-popup') ? !didClickStartInsidePopup : true)) {
90
+ if (!isClickOnPopup && !isClickOnTrigger && !didClickStartInsidePopup) {
91
91
  closePopup(event);
92
92
  // If there was an outside click on a non-interactive element, the focus should be on the trigger.
93
93
  if (document.activeElement && !isInteractiveElement(document.activeElement) && fg('platform_dst_popup-disable-focuslock')) {
@@ -3,7 +3,8 @@ import memoizeOne from 'memoize-one';
3
3
 
4
4
  /**
5
5
  * Here setting ref is not dependent on isOpen flag which is failing in React 18 strict mode
6
- * Implemented behind ff `platform-design-system-popup-ref`
6
+ * Implemented behind ff `platform-design-system-popup-ref` (for regular popup) and
7
+ * `platform-dst-popup-compositional-trigger-ref` (for compositional popup)
7
8
  * @returns Function to set trigger ref
8
9
  */
9
10
  export const useGetMemoizedMergedTriggerRefNew = () => {
@@ -5,11 +5,13 @@ import noop from '@atlaskit/ds-lib/noop';
5
5
  import { useId } from '@atlaskit/ds-lib/use-id';
6
6
  import { Layering } from '@atlaskit/layering';
7
7
  import { useNotifyOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
8
+ import { fg } from '@atlaskit/platform-feature-flags';
8
9
  import { Manager, Reference } from '@atlaskit/popper';
9
10
  import Portal from '@atlaskit/portal';
10
11
  import PopperWrapper from '../popper-wrapper';
11
12
  import { usePopupAppearance } from '../use-appearance';
12
13
  import { useGetMemoizedMergedTriggerRef } from '../use-get-memoized-merged-trigger-ref';
14
+ import { useGetMemoizedMergedTriggerRefNew } from '../use-get-memoized-merged-trigger-ref-new';
13
15
  var IsOpenContext = /*#__PURE__*/createContext(false);
14
16
  var IdContext = /*#__PURE__*/createContext(undefined);
15
17
  var TriggerRefContext = /*#__PURE__*/createContext(null);
@@ -78,10 +80,11 @@ export var PopupTrigger = function PopupTrigger(_ref2) {
78
80
  var id = useContext(IdContext);
79
81
  var setTriggerRef = useContext(SetTriggerRefContext);
80
82
  var getMergedTriggerRef = useGetMemoizedMergedTriggerRef();
83
+ var getMergedTriggerRefNew = useGetMemoizedMergedTriggerRefNew();
81
84
  return /*#__PURE__*/React.createElement(Reference, null, function (_ref3) {
82
85
  var ref = _ref3.ref;
83
86
  return children({
84
- ref: getMergedTriggerRef(ref, setTriggerRef, isOpen),
87
+ ref: fg('platform-dst-popup-compositional-trigger-ref') ? getMergedTriggerRefNew(ref, setTriggerRef) : getMergedTriggerRef(ref, setTriggerRef, isOpen),
85
88
  'aria-controls': id,
86
89
  'aria-expanded': isOpen,
87
90
  'aria-haspopup': true
@@ -82,7 +82,7 @@ export var useCloseManager = function useCloseManager(_ref) {
82
82
  var isClickOnPopup = popupRef && popupRef.contains(target);
83
83
  var isClickOnTrigger = triggerRef && triggerRef.contains(target);
84
84
  var didClickStartInsidePopup = popupRef && mouseDownTarget.current instanceof Node && popupRef.contains(mouseDownTarget.current);
85
- if (!isClickOnPopup && !isClickOnTrigger && (fg('popup-onclose-fix-mouse-down-inside-popup') ? !didClickStartInsidePopup : true)) {
85
+ if (!isClickOnPopup && !isClickOnTrigger && !didClickStartInsidePopup) {
86
86
  closePopup(event);
87
87
  // If there was an outside click on a non-interactive element, the focus should be on the trigger.
88
88
  if (document.activeElement && !isInteractiveElement(document.activeElement) && fg('platform_dst_popup-disable-focuslock')) {
@@ -4,7 +4,8 @@ import memoizeOne from 'memoize-one';
4
4
 
5
5
  /**
6
6
  * Here setting ref is not dependent on isOpen flag which is failing in React 18 strict mode
7
- * Implemented behind ff `platform-design-system-popup-ref`
7
+ * Implemented behind ff `platform-design-system-popup-ref` (for regular popup) and
8
+ * `platform-dst-popup-compositional-trigger-ref` (for compositional popup)
8
9
  * @returns Function to set trigger ref
9
10
  */
10
11
  export var useGetMemoizedMergedTriggerRefNew = function useGetMemoizedMergedTriggerRefNew() {
@@ -1,7 +1,8 @@
1
1
  import { type Dispatch, type SetStateAction } from 'react';
2
2
  /**
3
3
  * Here setting ref is not dependent on isOpen flag which is failing in React 18 strict mode
4
- * Implemented behind ff `platform-design-system-popup-ref`
4
+ * Implemented behind ff `platform-design-system-popup-ref` (for regular popup) and
5
+ * `platform-dst-popup-compositional-trigger-ref` (for compositional popup)
5
6
  * @returns Function to set trigger ref
6
7
  */
7
8
  export declare const useGetMemoizedMergedTriggerRefNew: () => import("memoize-one").MemoizedFn<(ref: React.RefCallback<HTMLElement> | React.MutableRefObject<HTMLElement> | null, setTriggerRef: Dispatch<SetStateAction<HTMLElement | null>>) => (node: HTMLElement | null) => void>;
@@ -1,7 +1,8 @@
1
1
  import { type Dispatch, type SetStateAction } from 'react';
2
2
  /**
3
3
  * Here setting ref is not dependent on isOpen flag which is failing in React 18 strict mode
4
- * Implemented behind ff `platform-design-system-popup-ref`
4
+ * Implemented behind ff `platform-design-system-popup-ref` (for regular popup) and
5
+ * `platform-dst-popup-compositional-trigger-ref` (for compositional popup)
5
6
  * @returns Function to set trigger ref
6
7
  */
7
8
  export declare const useGetMemoizedMergedTriggerRefNew: () => import("memoize-one").MemoizedFn<(ref: React.RefCallback<HTMLElement> | React.MutableRefObject<HTMLElement> | null, setTriggerRef: Dispatch<SetStateAction<HTMLElement | null>>) => (node: HTMLElement | null) => void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/popup",
3
- "version": "4.4.5",
3
+ "version": "4.6.0",
4
4
  "description": "A popup displays brief content in an overlay.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -34,11 +34,11 @@
34
34
  "dependencies": {
35
35
  "@atlaskit/css": "^0.15.0",
36
36
  "@atlaskit/ds-lib": "^5.1.0",
37
- "@atlaskit/layering": "^3.1.0",
37
+ "@atlaskit/layering": "^3.2.0",
38
38
  "@atlaskit/platform-feature-flags": "^1.1.0",
39
39
  "@atlaskit/popper": "^7.1.0",
40
40
  "@atlaskit/portal": "^5.1.0",
41
- "@atlaskit/primitives": "^16.0.0",
41
+ "@atlaskit/primitives": "^16.1.0",
42
42
  "@atlaskit/tokens": "^7.0.0",
43
43
  "@babel/runtime": "^7.0.0",
44
44
  "@compiled/react": "^0.18.6",
@@ -56,18 +56,18 @@
56
56
  "@af/integration-testing": "workspace:^",
57
57
  "@af/visual-regression": "workspace:^",
58
58
  "@atlaskit/button": "^23.5.0",
59
- "@atlaskit/code": "^17.2.0",
59
+ "@atlaskit/code": "^17.3.0",
60
60
  "@atlaskit/docs": "^11.2.0",
61
61
  "@atlaskit/form": "^14.2.0",
62
62
  "@atlaskit/heading": "^5.2.0",
63
63
  "@atlaskit/icon": "^28.5.0",
64
64
  "@atlaskit/link": "^3.2.0",
65
- "@atlaskit/modal-dialog": "^14.5.0",
66
- "@atlaskit/section-message": "^8.7.0",
65
+ "@atlaskit/modal-dialog": "^14.6.0",
66
+ "@atlaskit/section-message": "^8.8.0",
67
67
  "@atlaskit/ssr": "workspace:^",
68
68
  "@atlaskit/textfield": "^8.0.0",
69
69
  "@atlaskit/toggle": "^15.1.0",
70
- "@atlassian/feature-flags-test-utils": "^0.3.0",
70
+ "@atlassian/feature-flags-test-utils": "^1.0.0",
71
71
  "@atlassian/ssr-tests": "^0.3.0",
72
72
  "@testing-library/react": "^13.4.0",
73
73
  "@testing-library/react-hooks": "^8.0.1",
@@ -118,7 +118,7 @@
118
118
  "popup-onclose-fix": {
119
119
  "type": "boolean"
120
120
  },
121
- "popup-onclose-fix-mouse-down-inside-popup": {
121
+ "platform-dst-popup-compositional-trigger-ref": {
122
122
  "type": "boolean"
123
123
  }
124
124
  },