@atlaskit/navigation-system 2.1.2 → 2.2.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/constellation/layout/diagram.tsx +2 -2
  3. package/dist/cjs/components/skip-links/skip-links-container.compiled.css +1 -1
  4. package/dist/cjs/components/skip-links/skip-links-container.js +1 -1
  5. package/dist/cjs/ui/menu-item/drag-and-drop/drag-preview.compiled.css +1 -1
  6. package/dist/cjs/ui/menu-item/drag-and-drop/drag-preview.js +1 -1
  7. package/dist/cjs/ui/menu-item/menu-item.compiled.css +1 -1
  8. package/dist/cjs/ui/menu-item/menu-item.js +3 -3
  9. package/dist/cjs/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +3 -1
  10. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +48 -24
  11. package/dist/cjs/ui/page-layout/side-nav/toggle-button.js +3 -1
  12. package/dist/cjs/ui/page-layout/side-nav/use-expand-side-nav.js +8 -3
  13. package/dist/cjs/ui/page-layout/side-nav/use-side-nav-visibility-callbacks.js +53 -19
  14. package/dist/cjs/ui/page-layout/side-nav/use-toggle-side-nav.js +9 -4
  15. package/dist/es2019/components/skip-links/skip-links-container.compiled.css +1 -1
  16. package/dist/es2019/components/skip-links/skip-links-container.js +1 -1
  17. package/dist/es2019/ui/menu-item/drag-and-drop/drag-preview.compiled.css +1 -1
  18. package/dist/es2019/ui/menu-item/drag-and-drop/drag-preview.js +1 -1
  19. package/dist/es2019/ui/menu-item/menu-item.compiled.css +1 -1
  20. package/dist/es2019/ui/menu-item/menu-item.js +3 -3
  21. package/dist/es2019/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +3 -1
  22. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +44 -20
  23. package/dist/es2019/ui/page-layout/side-nav/toggle-button.js +3 -1
  24. package/dist/es2019/ui/page-layout/side-nav/use-expand-side-nav.js +8 -4
  25. package/dist/es2019/ui/page-layout/side-nav/use-side-nav-visibility-callbacks.js +53 -19
  26. package/dist/es2019/ui/page-layout/side-nav/use-toggle-side-nav.js +9 -5
  27. package/dist/esm/components/skip-links/skip-links-container.compiled.css +1 -1
  28. package/dist/esm/components/skip-links/skip-links-container.js +1 -1
  29. package/dist/esm/ui/menu-item/drag-and-drop/drag-preview.compiled.css +1 -1
  30. package/dist/esm/ui/menu-item/drag-and-drop/drag-preview.js +1 -1
  31. package/dist/esm/ui/menu-item/menu-item.compiled.css +1 -1
  32. package/dist/esm/ui/menu-item/menu-item.js +3 -3
  33. package/dist/esm/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +3 -1
  34. package/dist/esm/ui/page-layout/side-nav/side-nav.js +48 -24
  35. package/dist/esm/ui/page-layout/side-nav/toggle-button.js +3 -1
  36. package/dist/esm/ui/page-layout/side-nav/use-expand-side-nav.js +8 -3
  37. package/dist/esm/ui/page-layout/side-nav/use-side-nav-visibility-callbacks.js +53 -19
  38. package/dist/esm/ui/page-layout/side-nav/use-toggle-side-nav.js +9 -4
  39. package/dist/types/ui/page-layout/side-nav/types.d.ts +19 -0
  40. package/dist/types/ui/page-layout/side-nav/use-expand-side-nav.d.ts +5 -1
  41. package/dist/types/ui/page-layout/side-nav/use-side-nav-visibility-callbacks.d.ts +4 -1
  42. package/dist/types/ui/page-layout/side-nav/use-toggle-side-nav.d.ts +6 -2
  43. package/dist/types-ts4.5/ui/page-layout/side-nav/types.d.ts +19 -0
  44. package/dist/types-ts4.5/ui/page-layout/side-nav/use-expand-side-nav.d.ts +5 -1
  45. package/dist/types-ts4.5/ui/page-layout/side-nav/use-side-nav-visibility-callbacks.d.ts +4 -1
  46. package/dist/types-ts4.5/ui/page-layout/side-nav/use-toggle-side-nav.d.ts +6 -2
  47. package/package.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`cf5e597de761c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cf5e597de761c) -
8
+ Adds a trigger value to the side nav's `onExpand` and `onCollapse` callbacks, allowing consumers
9
+ to identify the method used to expand or collapse the side nav. Also adds the ability to define
10
+ the trigger value when using the `useToggleSideNav` and `useExpandSideNav` hooks. This change is
11
+ behind the `navx-full-height-sidebar` feature gate.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+
17
+ ## 2.1.3
18
+
19
+ ### Patch Changes
20
+
21
+ - [`255837cfba315`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/255837cfba315) -
22
+ Internal changes to how border radius is applied.
23
+ - Updated dependencies
24
+
3
25
  ## 2.1.2
4
26
 
5
27
  ### Patch Changes
@@ -25,7 +25,7 @@ const styles = cssMap({
25
25
  borderWidth: token('border.width'),
26
26
  borderStyle: 'solid',
27
27
  borderColor: token('color.border'),
28
- borderRadius: token('border.radius'),
28
+ borderRadius: token('radius.small'),
29
29
  backgroundColor: `linear-gradient(
30
30
  45deg,
31
31
  ${token('elevation.surface.sunken')} 25%,
@@ -61,7 +61,7 @@ const styles = cssMap({
61
61
  borderWidth: token('border.width'),
62
62
  borderStyle: 'solid',
63
63
  borderColor: token('color.border'),
64
- borderRadius: token('border.radius'),
64
+ borderRadius: token('radius.small'),
65
65
  paddingTop: token('space.100'),
66
66
  paddingRight: token('space.100'),
67
67
  paddingBottom: token('space.100'),
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}
2
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
3
3
  ._zulp1b66{gap:var(--ds-space-050,4px)}
4
4
  ._18zrutpp{padding-inline:var(--ds-space-150,9pt)}
5
5
  ._1rjcutpp{padding-block:var(--ds-space-150,9pt)}._152tv47k{inset-block-start:var(--ds-space-250,20px)}
@@ -14,7 +14,7 @@ var _skipLinksDataContext = require("../../context/skip-links/skip-links-data-co
14
14
  var _skipLink = require("./skip-link");
15
15
  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); }
16
16
  var styles = {
17
- root: "_zulp1b66 _2rkoglpi _1rjcutpp _18zrutpp _1e0c1txw _2lx21bp4 _kqsw1n9t _1e02v47k _152tv47k _bfhk1bhr _16qs1cd0 _1pby1mrw _tzy4idpf _lcxvglyw _1digjh3g _1mygkb7n _18eu1wug",
17
+ root: "_zulp1b66 _2rko12b0 _1rjcutpp _18zrutpp _1e0c1txw _2lx21bp4 _kqsw1n9t _1e02v47k _152tv47k _bfhk1bhr _16qs1cd0 _1pby1mrw _tzy4idpf _lcxvglyw _1digjh3g _1mygkb7n _18eu1wug",
18
18
  skipLinkList: "_zulp1b66 _1e0c1txw _2lx21bp4 _1x8w11lx _2mzuglyw _1pfhze3t _bozgze3t"
19
19
  };
20
20
 
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}._189ee4h9{border-width:var(--ds-border-width,1px)}
2
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}._189ee4h9{border-width:var(--ds-border-width,1px)}
3
3
  ._1dqonqa1{border-style:solid}
4
4
  ._1h6dmuej{border-color:var(--ds-border,#091e4224)}
5
5
  ._1ul9uuw1{min-width:200px}
@@ -26,7 +26,7 @@ function isSafari() {
26
26
  return userAgent.includes('AppleWebKit') && !userAgent.includes('Chrome');
27
27
  }
28
28
  var dragPreviewStyles = {
29
- root: "_2rkoglpi _189ee4h9 _1h6dmuej _1dqonqa1 _bfhkvuon _y4ti1b66 _p12fgx0z",
29
+ root: "_2rko12b0 _189ee4h9 _1h6dmuej _1dqonqa1 _bfhkvuon _y4ti1b66 _p12fgx0z",
30
30
  safariFix: "_1ul9uuw1"
31
31
  };
32
32
 
@@ -1,6 +1,6 @@
1
1
  ._11c8dcr7{font:var(--ds-font-body-UNSAFE_small,normal 400 9pt/1pc ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
2
2
  ._1r04ze3t{inset:var(--ds-space-0,0)}
3
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}
3
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
4
4
  ._nd5l16dh{grid-area:elem-after}
5
5
  ._nd5l17zh{grid-area:elem-before}
6
6
  ._nd5l19l3{grid-area:interactive}
@@ -37,7 +37,7 @@ var LazyDragHandle = /*#__PURE__*/(0, _react.lazy)(function () {
37
37
  });
38
38
  });
39
39
  var tooltipStyles = {
40
- root: "_2rkoglpi _11c8dcr7 _1e0c1txw _2lx21bp4 _1bah1h6o _1tkezwfg _p12f1pna _vchhusvi _1q51v77o _y4ti12x7 _85i5v77o _bozg12x7 _bfhkcdhy _syaz15cr _152tze3t _1e02ze3t _1i4q1hna _slp31hna"
40
+ root: "_2rko12b0 _11c8dcr7 _1e0c1txw _2lx21bp4 _1bah1h6o _1tkezwfg _p12f1pna _vchhusvi _1q51v77o _y4ti12x7 _85i5v77o _bozg12x7 _bfhkcdhy _syaz15cr _152tze3t _1e02ze3t _1i4q1hna _slp31hna"
41
41
  };
42
42
  var MenuItemTooltip = /*#__PURE__*/(0, _react.forwardRef)(function MenuItemTooltip(_ref, ref) {
43
43
  var children = _ref.children,
@@ -151,7 +151,7 @@ var onTopOfButtonOrAnchorStyles = {
151
151
  */
152
152
  var nestedOpenPopupCSSSelector = exports.nestedOpenPopupCSSSelector = '&:has([aria-expanded="true"][aria-haspopup="true"])';
153
153
  var containerStyles = {
154
- root: "_2rkoglpi _vchhusvi _1e0c11p5 _yv0e7dup _2z05hkll _1lmcu4vt _1ul9t9kd _4t3iviql _4cvr1h6o _uiztglyw _syaz1gjq _1yyu1j28 _91ju1txw _1swv108i _irr3108i",
154
+ root: "_2rko12b0 _vchhusvi _1e0c11p5 _yv0e7dup _2z05hkll _1lmcu4vt _1ul9t9kd _4t3iviql _4cvr1h6o _uiztglyw _syaz1gjq _1yyu1j28 _91ju1txw _1swv108i _irr3108i",
155
155
  actionsOnHoverFocusFixEnabled: "_uomdidpf _pmxpidpf _db80idpf _qxq9kb7n _1rbv1wug _kwq51b66 _t7p8kb7n _g4kikb7n _91nl1wug _ynyi1wug _iy5o1b66 _v4o21b66",
156
156
  actionsOnHoverFocusFixDisabled: "_ek6gglyw _1ojv1txw _1brr1txw _109x1txw",
157
157
  removeElemAfter: "_91juglyw",
@@ -164,7 +164,7 @@ var containerStyles = {
164
164
  dragging: "_tzy41ou4"
165
165
  };
166
166
  var buttonOrAnchorStyles = {
167
- root: "_2rkoglpi _yyhyjvu9 _1ii7kb7n _1e0c11p5 _yv0enbh3 _2z05nbh3 _y4ti1b66 _bozg1b66 _1q511b66 _85i51b66 _bfhk1j28 _syaz1gjq _4cvr1h6o _y3gnv2br _14iu1ji5",
167
+ root: "_2rko12b0 _yyhyjvu9 _1ii7kb7n _1e0c11p5 _yv0enbh3 _2z05nbh3 _y4ti1b66 _bozg1b66 _1q511b66 _85i51b66 _bfhk1j28 _syaz1gjq _4cvr1h6o _y3gnv2br _14iu1ji5",
168
168
  selected: "_syazaqb7 _14iu19ru",
169
169
  hasDragIndicator: "_1ifmglyw _1cykglyw _x0kw1txw _11om6b4r _7psyru3m _1uy01amc _bir2q7pw"
170
170
  };
@@ -35,7 +35,9 @@ var SideNavPanelSplitter = exports.SideNavPanelSplitter = function SideNavPanelS
35
35
  shouldCollapseOnDoubleClick = _ref$shouldCollapseOn === void 0 ? true : _ref$shouldCollapseOn;
36
36
  var context = (0, _react.useContext)(_context.PanelSplitterContext);
37
37
  (0, _tinyInvariant.default)((context === null || context === void 0 ? void 0 : context.panelId) === _constants.sideNavPanelSplitterId, 'SideNavPanelSplitter must be rendered as a child of <SideNav />.');
38
- var toggleSideNav = (0, _useToggleSideNav.useToggleSideNav)();
38
+ var toggleSideNav = (0, _useToggleSideNav.useToggleSideNav)({
39
+ trigger: 'double-click'
40
+ });
39
41
  return /*#__PURE__*/_react.default.createElement(_context.OnDoubleClickContext.Provider, {
40
42
  value: shouldCollapseOnDoubleClick ? toggleSideNav : undefined
41
43
  }, /*#__PURE__*/_react.default.createElement(_panelSplitter.PanelSplitter, {
@@ -39,6 +39,8 @@ var _useSideNavVisibilityCallbacks = require("./use-side-nav-visibility-callback
39
39
  var _useToggleSideNav = require("./use-toggle-side-nav");
40
40
  var _visibilityContext = require("./visibility-context");
41
41
  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); }
42
+ 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; }
43
+ 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; }
42
44
  var panelSplitterResizingVar = '--n_snvRsz';
43
45
  var widthResizeBounds = {
44
46
  min: '240px',
@@ -67,6 +69,7 @@ var fallbackDefaultWidth = 320;
67
69
  * context value.
68
70
  */
69
71
  function SideNavInternal(_ref) {
72
+ var _sideNavState$lastTri;
70
73
  var children = _ref.children,
71
74
  defaultCollapsed = _ref.defaultCollapsed,
72
75
  _ref$defaultWidth = _ref.defaultWidth,
@@ -82,7 +85,9 @@ function SideNavInternal(_ref) {
82
85
  var id = (0, _idUtils.useLayoutId)({
83
86
  providedId: providedId
84
87
  });
85
- var expandSideNav = (0, _useExpandSideNav.useExpandSideNav)();
88
+ var expandSideNav = (0, _useExpandSideNav.useExpandSideNav)({
89
+ trigger: 'skip-link'
90
+ });
86
91
  /**
87
92
  * Called after clicking on the side nav skip link, and ensures the side nav is expanded so that it is focusable.
88
93
  *
@@ -155,11 +160,9 @@ function SideNavInternal(_ref) {
155
160
  };
156
161
  setSideNavState(function (currentState) {
157
162
  if ((currentState === null || currentState === void 0 ? void 0 : currentState.desktop) === 'collapsed' && (currentState === null || currentState === void 0 ? void 0 : currentState.flyout) !== 'open') {
158
- return {
159
- desktop: currentState.desktop,
160
- mobile: currentState.mobile,
163
+ return _objectSpread(_objectSpread({}, currentState), {}, {
161
164
  flyout: 'open'
162
- };
165
+ });
163
166
  }
164
167
  return currentState;
165
168
  });
@@ -171,11 +174,9 @@ function SideNavInternal(_ref) {
171
174
  };
172
175
  setSideNavState(function (currentState) {
173
176
  if ((currentState === null || currentState === void 0 ? void 0 : currentState.desktop) === 'collapsed' && (currentState === null || currentState === void 0 ? void 0 : currentState.flyout) === 'open') {
174
- return {
175
- desktop: currentState.desktop,
176
- mobile: currentState.mobile,
177
+ return _objectSpread(_objectSpread({}, currentState), {}, {
177
178
  flyout: 'triggered-animate-close'
178
- };
179
+ });
179
180
  }
180
181
  return currentState;
181
182
  });
@@ -238,31 +239,53 @@ function SideNavInternal(_ref) {
238
239
  }
239
240
  };
240
241
  }, [openLayerObserver, setSideNavState]);
241
- var toggleVisibility = (0, _useToggleSideNav.useToggleSideNav)();
242
+ var toggleVisibilityByScreenResize = (0, _useToggleSideNav.useToggleSideNav)({
243
+ trigger: 'screen-resize'
244
+ });
245
+ var toggleVisibilityByClickOutsideOnMobile = (0, _useToggleSideNav.useToggleSideNav)({
246
+ trigger: 'click-outside-on-mobile'
247
+ });
242
248
  (0, _react.useEffect)(function () {
243
249
  // Sync the visibility in context (provided in `<Root>`) with the local `defaultCollapsed` prop provided to `SideNav`
244
250
  // after SSR hydration. This should only run once, after the initial render on the client.
245
251
  setSideNavState({
246
252
  desktop: initialDefaultCollapsed ? 'collapsed' : 'expanded',
247
253
  mobile: 'collapsed',
248
- flyout: 'closed'
254
+ flyout: 'closed',
255
+ lastTrigger: null
249
256
  });
250
257
  }, [initialDefaultCollapsed, setSideNavState]);
251
258
  var handleExpand = (0, _react.useCallback)(function (_ref2) {
252
- var screen = _ref2.screen;
253
- onExpand === null || onExpand === void 0 || onExpand({
254
- screen: screen
255
- });
259
+ var screen = _ref2.screen,
260
+ trigger = _ref2.trigger;
261
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
262
+ onExpand === null || onExpand === void 0 || onExpand({
263
+ screen: screen,
264
+ trigger: trigger
265
+ });
266
+ } else {
267
+ onExpand === null || onExpand === void 0 || onExpand({
268
+ screen: screen
269
+ });
270
+ }
256
271
 
257
272
  // When the side nav gets expanded, we close the flyout to reset it.
258
273
  // This prevents the flyout from staying open and ensures we are respecting the user's intent to expand.
259
274
  updateFlyoutState('force-close');
260
275
  }, [onExpand, updateFlyoutState]);
261
276
  var handleCollapse = (0, _react.useCallback)(function (_ref3) {
262
- var screen = _ref3.screen;
263
- onCollapse === null || onCollapse === void 0 || onCollapse({
264
- screen: screen
265
- });
277
+ var screen = _ref3.screen,
278
+ trigger = _ref3.trigger;
279
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
280
+ onCollapse === null || onCollapse === void 0 || onCollapse({
281
+ screen: screen,
282
+ trigger: trigger
283
+ });
284
+ } else {
285
+ onCollapse === null || onCollapse === void 0 || onCollapse({
286
+ screen: screen
287
+ });
288
+ }
266
289
 
267
290
  // When the side nav gets collapsed, we close the flyout to reset it.
268
291
  // This prevents the flyout from staying open and ensures we are respecting the user's intent to collapse.
@@ -272,7 +295,8 @@ function SideNavInternal(_ref) {
272
295
  onExpand: handleExpand,
273
296
  onCollapse: handleCollapse,
274
297
  isExpandedOnDesktop: isExpandedOnDesktop,
275
- isExpandedOnMobile: isExpandedOnMobile
298
+ isExpandedOnMobile: isExpandedOnMobile,
299
+ lastTrigger: (_sideNavState$lastTri = sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.lastTrigger) !== null && _sideNavState$lastTri !== void 0 ? _sideNavState$lastTri : null
276
300
  });
277
301
  (0, _react.useEffect)(function () {
278
302
  var mediaQueryList = window.matchMedia('(min-width: 64rem)');
@@ -283,12 +307,12 @@ function SideNavInternal(_ref) {
283
307
  // We're transitioning from tablet to desktop viewport size.
284
308
  // We forcibly show the side nav if it was shown on mobile.
285
309
  if (isExpandedOnMobile && !isExpandedOnDesktop) {
286
- toggleVisibility();
310
+ toggleVisibilityByScreenResize();
287
311
  }
288
312
  }
289
313
  }
290
314
  });
291
- }, [toggleVisibility, isExpandedOnDesktop, isExpandedOnMobile]);
315
+ }, [toggleVisibilityByScreenResize, isExpandedOnDesktop, isExpandedOnMobile]);
292
316
 
293
317
  /**
294
318
  * Close the mobile side nav if there is a click outside.
@@ -345,10 +369,10 @@ function SideNavInternal(_ref) {
345
369
  // In either case keeping the SideNav expanded makes sense.
346
370
  return;
347
371
  }
348
- toggleVisibility();
372
+ toggleVisibilityByClickOutsideOnMobile();
349
373
  }
350
374
  });
351
- }, [id, isExpandedOnMobile, toggleButtonElement, toggleVisibility]);
375
+ }, [id, isExpandedOnMobile, toggleButtonElement, toggleVisibilityByClickOutsideOnMobile]);
352
376
  (0, _react.useEffect)(function () {
353
377
  if (!toggleButtonElement) {
354
378
  return;
@@ -73,7 +73,9 @@ var SideNavToggleButton = exports.SideNavToggleButton = function SideNavToggleBu
73
73
  }
74
74
  });
75
75
  }, [isSideNavExpandedOnDesktop, isSideNavExpandedOnMobile]);
76
- var toggleVisibility = (0, _useToggleSideNav.useToggleSideNav)();
76
+ var toggleVisibility = (0, _useToggleSideNav.useToggleSideNav)({
77
+ trigger: 'toggle-button'
78
+ });
77
79
  var handleClick = (0, _react.useCallback)(function (event, analyticsEvent) {
78
80
  onClick === null || onClick === void 0 || onClick(event, analyticsEvent, {
79
81
  isSideNavVisible: isSideNavExpanded
@@ -16,6 +16,9 @@ var _visibilityContext = require("./visibility-context");
16
16
  * If you need a function to toggle the side nav, use `useToggleSideNav` instead.
17
17
  */
18
18
  function useExpandSideNav() {
19
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
20
+ _ref$trigger = _ref.trigger,
21
+ trigger = _ref$trigger === void 0 ? 'programmatic' : _ref$trigger;
19
22
  var setSideNavState = (0, _react.useContext)(_visibilityContext.SetSideNavVisibilityState);
20
23
  var expandSideNav = (0, _react.useCallback)(function () {
21
24
  var _window$matchMedia = window.matchMedia('(min-width: 64rem)'),
@@ -35,7 +38,8 @@ function useExpandSideNav() {
35
38
  return {
36
39
  mobile: currentState.mobile,
37
40
  desktop: 'expanded',
38
- flyout: 'closed'
41
+ flyout: 'closed',
42
+ lastTrigger: trigger
39
43
  };
40
44
  });
41
45
  } else {
@@ -53,10 +57,11 @@ function useExpandSideNav() {
53
57
  return {
54
58
  desktop: currentState.desktop,
55
59
  mobile: 'expanded',
56
- flyout: 'closed'
60
+ flyout: 'closed',
61
+ lastTrigger: trigger
57
62
  };
58
63
  });
59
64
  }
60
- }, [setSideNavState]);
65
+ }, [setSideNavState, trigger]);
61
66
  return expandSideNav;
62
67
  }
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useSideNavVisibilityCallbacks = useSideNavVisibilityCallbacks;
8
8
  var _react = require("react");
9
9
  var _usePreviousValue = _interopRequireDefault(require("@atlaskit/ds-lib/use-previous-value"));
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
11
  /**
11
12
  * Calls the `onExpand` and `onCollapse` callbacks as required.
12
13
  * This is used for both user-provided callbacks, as well as internal callbacks to respond to visibility state changes.
@@ -15,7 +16,8 @@ function useSideNavVisibilityCallbacks(_ref) {
15
16
  var onExpand = _ref.onExpand,
16
17
  onCollapse = _ref.onCollapse,
17
18
  isExpandedOnDesktop = _ref.isExpandedOnDesktop,
18
- isExpandedOnMobile = _ref.isExpandedOnMobile;
19
+ isExpandedOnMobile = _ref.isExpandedOnMobile,
20
+ lastTrigger = _ref.lastTrigger;
19
21
  // Wrapping in refs so we can call them in `useEffect` without changes to them triggering the `useEffect`
20
22
  var onExpandRef = (0, _react.useRef)(onExpand);
21
23
  var onCollapseRef = (0, _react.useRef)(onCollapse);
@@ -36,17 +38,33 @@ function useSideNavVisibilityCallbacks(_ref) {
36
38
  return;
37
39
  }
38
40
  if (isExpandedOnDesktop) {
39
- var _onExpandRef$current;
40
- (_onExpandRef$current = onExpandRef.current) === null || _onExpandRef$current === void 0 || _onExpandRef$current.call(onExpandRef, {
41
- screen: 'desktop'
42
- });
41
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
42
+ var _onExpandRef$current;
43
+ (_onExpandRef$current = onExpandRef.current) === null || _onExpandRef$current === void 0 || _onExpandRef$current.call(onExpandRef, {
44
+ screen: 'desktop',
45
+ trigger: lastTrigger
46
+ });
47
+ } else {
48
+ var _onExpandRef$current2;
49
+ (_onExpandRef$current2 = onExpandRef.current) === null || _onExpandRef$current2 === void 0 || _onExpandRef$current2.call(onExpandRef, {
50
+ screen: 'desktop'
51
+ });
52
+ }
43
53
  } else {
44
- var _onCollapseRef$curren;
45
- (_onCollapseRef$curren = onCollapseRef.current) === null || _onCollapseRef$curren === void 0 || _onCollapseRef$curren.call(onCollapseRef, {
46
- screen: 'desktop'
47
- });
54
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
55
+ var _onCollapseRef$curren;
56
+ (_onCollapseRef$curren = onCollapseRef.current) === null || _onCollapseRef$curren === void 0 || _onCollapseRef$curren.call(onCollapseRef, {
57
+ screen: 'desktop',
58
+ trigger: lastTrigger
59
+ });
60
+ } else {
61
+ var _onCollapseRef$curren2;
62
+ (_onCollapseRef$curren2 = onCollapseRef.current) === null || _onCollapseRef$curren2 === void 0 || _onCollapseRef$curren2.call(onCollapseRef, {
63
+ screen: 'desktop'
64
+ });
65
+ }
48
66
  }
49
- }, [previousIsExpandedOnDesktop, isExpandedOnDesktop]);
67
+ }, [previousIsExpandedOnDesktop, isExpandedOnDesktop, lastTrigger]);
50
68
  var previousIsExpandedOnMobile = (0, _usePreviousValue.default)(isExpandedOnMobile);
51
69
  (0, _react.useEffect)(function () {
52
70
  if (previousIsExpandedOnMobile === undefined || previousIsExpandedOnMobile === isExpandedOnMobile) {
@@ -60,15 +78,31 @@ function useSideNavVisibilityCallbacks(_ref) {
60
78
  return;
61
79
  }
62
80
  if (isExpandedOnMobile) {
63
- var _onExpandRef$current2;
64
- (_onExpandRef$current2 = onExpandRef.current) === null || _onExpandRef$current2 === void 0 || _onExpandRef$current2.call(onExpandRef, {
65
- screen: 'mobile'
66
- });
81
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
82
+ var _onExpandRef$current3;
83
+ (_onExpandRef$current3 = onExpandRef.current) === null || _onExpandRef$current3 === void 0 || _onExpandRef$current3.call(onExpandRef, {
84
+ screen: 'mobile',
85
+ trigger: lastTrigger
86
+ });
87
+ } else {
88
+ var _onExpandRef$current4;
89
+ (_onExpandRef$current4 = onExpandRef.current) === null || _onExpandRef$current4 === void 0 || _onExpandRef$current4.call(onExpandRef, {
90
+ screen: 'mobile'
91
+ });
92
+ }
67
93
  } else {
68
- var _onCollapseRef$curren2;
69
- (_onCollapseRef$curren2 = onCollapseRef.current) === null || _onCollapseRef$curren2 === void 0 || _onCollapseRef$curren2.call(onCollapseRef, {
70
- screen: 'mobile'
71
- });
94
+ if ((0, _platformFeatureFlags.fg)('navx-full-height-sidebar')) {
95
+ var _onCollapseRef$curren3;
96
+ (_onCollapseRef$curren3 = onCollapseRef.current) === null || _onCollapseRef$curren3 === void 0 || _onCollapseRef$curren3.call(onCollapseRef, {
97
+ screen: 'mobile',
98
+ trigger: lastTrigger
99
+ });
100
+ } else {
101
+ var _onCollapseRef$curren4;
102
+ (_onCollapseRef$curren4 = onCollapseRef.current) === null || _onCollapseRef$curren4 === void 0 || _onCollapseRef$curren4.call(onCollapseRef, {
103
+ screen: 'mobile'
104
+ });
105
+ }
72
106
  }
73
- }, [previousIsExpandedOnMobile, isExpandedOnMobile]);
107
+ }, [previousIsExpandedOnMobile, isExpandedOnMobile, lastTrigger]);
74
108
  }
@@ -13,9 +13,12 @@ var _visibilityContext = require("./visibility-context");
13
13
  *
14
14
  * It will toggle the appropriate internal desktop or mobile side nav visibility state based on the current screen size.
15
15
  *
16
- * If you need a function to make the side nav visible, use `useShowSideNav` instead.
16
+ * If you need a function to make the side nav visible, use `useExpandSideNav` instead.
17
17
  */
18
18
  function useToggleSideNav() {
19
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
20
+ _ref$trigger = _ref.trigger,
21
+ trigger = _ref$trigger === void 0 ? 'programmatic' : _ref$trigger;
19
22
  var setSideNavState = (0, _react.useContext)(_visibilityContext.SetSideNavVisibilityState);
20
23
  var toggleSideNav = (0, _react.useCallback)(function () {
21
24
  var _window$matchMedia = window.matchMedia('(min-width: 64rem)'),
@@ -30,7 +33,8 @@ function useToggleSideNav() {
30
33
  return {
31
34
  mobile: currentState.mobile,
32
35
  desktop: currentState.desktop === 'expanded' ? 'collapsed' : 'expanded',
33
- flyout: 'closed'
36
+ flyout: 'closed',
37
+ lastTrigger: trigger
34
38
  };
35
39
  });
36
40
  } else {
@@ -43,10 +47,11 @@ function useToggleSideNav() {
43
47
  return {
44
48
  desktop: currentState.desktop,
45
49
  mobile: currentState.mobile === 'expanded' ? 'collapsed' : 'expanded',
46
- flyout: 'closed'
50
+ flyout: 'closed',
51
+ lastTrigger: trigger
47
52
  };
48
53
  });
49
54
  }
50
- }, [setSideNavState]);
55
+ }, [setSideNavState, trigger]);
51
56
  return toggleSideNav;
52
57
  }
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}
2
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
3
3
  ._zulp1b66{gap:var(--ds-space-050,4px)}
4
4
  ._18zrutpp{padding-inline:var(--ds-space-150,9pt)}
5
5
  ._1rjcutpp{padding-block:var(--ds-space-150,9pt)}._152tv47k{inset-block-start:var(--ds-space-250,20px)}
@@ -6,7 +6,7 @@ import { Text } from '@atlaskit/primitives/compiled';
6
6
  import { useSortedSkipLinks } from '../../context/skip-links/skip-links-data-context';
7
7
  import { SkipLink } from './skip-link';
8
8
  const styles = {
9
- root: "_zulp1b66 _2rkoglpi _1rjcutpp _18zrutpp _1e0c1txw _2lx21bp4 _kqsw1n9t _1e02v47k _152tv47k _bfhk1bhr _16qs1cd0 _1pby1mrw _tzy4idpf _lcxvglyw _1digjh3g _1mygkb7n _18eu1wug",
9
+ root: "_zulp1b66 _2rko12b0 _1rjcutpp _18zrutpp _1e0c1txw _2lx21bp4 _kqsw1n9t _1e02v47k _152tv47k _bfhk1bhr _16qs1cd0 _1pby1mrw _tzy4idpf _lcxvglyw _1digjh3g _1mygkb7n _18eu1wug",
10
10
  skipLinkList: "_zulp1b66 _1e0c1txw _2lx21bp4 _1x8w11lx _2mzuglyw _1pfhze3t _bozgze3t"
11
11
  };
12
12
 
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}._189ee4h9{border-width:var(--ds-border-width,1px)}
2
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}._189ee4h9{border-width:var(--ds-border-width,1px)}
3
3
  ._1dqonqa1{border-style:solid}
4
4
  ._1h6dmuej{border-color:var(--ds-border,#091e4224)}
5
5
  ._1ul9uuw1{min-width:200px}
@@ -20,7 +20,7 @@ function isSafari() {
20
20
  return userAgent.includes('AppleWebKit') && !userAgent.includes('Chrome');
21
21
  }
22
22
  const dragPreviewStyles = {
23
- root: "_2rkoglpi _189ee4h9 _1h6dmuej _1dqonqa1 _bfhkvuon _y4ti1b66 _p12fgx0z",
23
+ root: "_2rko12b0 _189ee4h9 _1h6dmuej _1dqonqa1 _bfhkvuon _y4ti1b66 _p12fgx0z",
24
24
  safariFix: "_1ul9uuw1"
25
25
  };
26
26
 
@@ -1,6 +1,6 @@
1
1
  ._11c8dcr7{font:var(--ds-font-body-UNSAFE_small,normal 400 9pt/1pc ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
2
2
  ._1r04ze3t{inset:var(--ds-space-0,0)}
3
- ._2rkoglpi{border-radius:var(--ds-border-radius,4px)}
3
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
4
4
  ._nd5l16dh{grid-area:elem-after}
5
5
  ._nd5l17zh{grid-area:elem-before}
6
6
  ._nd5l19l3{grid-area:interactive}
@@ -19,7 +19,7 @@ import { COLLAPSE_ELEM_BEFORE } from './menu-item-signals';
19
19
  const LazyDragHandle = /*#__PURE__*/lazy(() => import( /* webpackChunkName: "@atlaskit-internal_nav4-menu-item-drag-handle" */
20
20
  './drag-handle'));
21
21
  const tooltipStyles = {
22
- root: "_2rkoglpi _11c8dcr7 _1e0c1txw _2lx21bp4 _1bah1h6o _1tkezwfg _p12f1pna _vchhusvi _1q51v77o _y4ti12x7 _85i5v77o _bozg12x7 _bfhkcdhy _syaz15cr _152tze3t _1e02ze3t _1i4q1hna _slp31hna"
22
+ root: "_2rko12b0 _11c8dcr7 _1e0c1txw _2lx21bp4 _1bah1h6o _1tkezwfg _p12f1pna _vchhusvi _1q51v77o _y4ti12x7 _85i5v77o _bozg12x7 _bfhkcdhy _syaz15cr _152tze3t _1e02ze3t _1i4q1hna _slp31hna"
23
23
  };
24
24
  const MenuItemTooltip = /*#__PURE__*/forwardRef(function MenuItemTooltip({
25
25
  children,
@@ -134,7 +134,7 @@ const onTopOfButtonOrAnchorStyles = {
134
134
  */
135
135
  export const nestedOpenPopupCSSSelector = '&:has([aria-expanded="true"][aria-haspopup="true"])';
136
136
  const containerStyles = {
137
- root: "_2rkoglpi _vchhusvi _1e0c11p5 _yv0e7dup _2z05hkll _1lmcu4vt _1ul9t9kd _4t3iviql _4cvr1h6o _uiztglyw _syaz1gjq _1yyu1j28 _91ju1txw _1swv108i _irr3108i",
137
+ root: "_2rko12b0 _vchhusvi _1e0c11p5 _yv0e7dup _2z05hkll _1lmcu4vt _1ul9t9kd _4t3iviql _4cvr1h6o _uiztglyw _syaz1gjq _1yyu1j28 _91ju1txw _1swv108i _irr3108i",
138
138
  actionsOnHoverFocusFixEnabled: "_uomdidpf _pmxpidpf _db80idpf _qxq9kb7n _1rbv1wug _kwq51b66 _t7p8kb7n _g4kikb7n _91nl1wug _ynyi1wug _iy5o1b66 _v4o21b66",
139
139
  actionsOnHoverFocusFixDisabled: "_ek6gglyw _1ojv1txw _1brr1txw _109x1txw",
140
140
  removeElemAfter: "_91juglyw",
@@ -147,7 +147,7 @@ const containerStyles = {
147
147
  dragging: "_tzy41ou4"
148
148
  };
149
149
  const buttonOrAnchorStyles = {
150
- root: "_2rkoglpi _yyhyjvu9 _1ii7kb7n _1e0c11p5 _yv0enbh3 _2z05nbh3 _y4ti1b66 _bozg1b66 _1q511b66 _85i51b66 _bfhk1j28 _syaz1gjq _4cvr1h6o _y3gnv2br _14iu1ji5",
150
+ root: "_2rko12b0 _yyhyjvu9 _1ii7kb7n _1e0c11p5 _yv0enbh3 _2z05nbh3 _y4ti1b66 _bozg1b66 _1q511b66 _85i51b66 _bfhk1j28 _syaz1gjq _4cvr1h6o _y3gnv2br _14iu1ji5",
151
151
  selected: "_syazaqb7 _14iu19ru",
152
152
  hasDragIndicator: "_1ifmglyw _1cykglyw _x0kw1txw _11om6b4r _7psyru3m _1uy01amc _bir2q7pw"
153
153
  };
@@ -26,7 +26,9 @@ export const SideNavPanelSplitter = ({
26
26
  }) => {
27
27
  const context = useContext(PanelSplitterContext);
28
28
  invariant((context === null || context === void 0 ? void 0 : context.panelId) === sideNavPanelSplitterId, 'SideNavPanelSplitter must be rendered as a child of <SideNav />.');
29
- const toggleSideNav = useToggleSideNav();
29
+ const toggleSideNav = useToggleSideNav({
30
+ trigger: 'double-click'
31
+ });
30
32
  return /*#__PURE__*/React.createElement(OnDoubleClickContext.Provider, {
31
33
  value: shouldCollapseOnDoubleClick ? toggleSideNav : undefined
32
34
  }, /*#__PURE__*/React.createElement(PanelSplitter, {