@atlaskit/navigation-system 5.0.2 → 5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 5.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`fef4ccb6af01f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/fef4ccb6af01f) -
8
+ Cleans up the `platform_dst_nav4_side_nav_default_collapsed_api` feature gate. Default side nav
9
+ collapsed state can now be passed into the `Root` component via the `defaultSideNavCollapsed`
10
+ prop. This is the preferred API, and the legacy API will be removed at some point in the future.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+
16
+ ## 5.1.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [`03b6f055c6340`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/03b6f055c6340) -
21
+ The `SideNavPanelSplitter` component is now exported from
22
+ `@atlaskit/navigation-system/layout/side-nav`. It should be used within the `SideNav` layout area.
23
+
24
+ It supports double clicking to collapse the side nav. You can conditionally disable this through
25
+ the `shouldCollapseOnDoubleClick` prop. It is enabled by default.
26
+
27
+ It also supports displaying a tooltip when hovered, through the `tooltipContent` prop. This should
28
+ be used to explain the double click to collapse interaction. The recommended tooltip content is
29
+ "Double click to collapse".
30
+
31
+ A tooltip will only be displayed if the `shouldCollapseOnDoubleClick` prop is `true`, or not
32
+ provided (as it defaults to `true`), and if the `tooltipContent` prop is provided.
33
+
34
+ If the `isSideNavShortcutEnabled` prop is enabled on `<Root />`, the built-in keyboard shortcut
35
+ will be displayed with the tooltip.
36
+
37
+ Example usage:
38
+
39
+ ```tsx
40
+ import { SideNav, SideNavPanelSplitter } from '@atlaskit/navigation-system/layout/side-nav';
41
+
42
+ // In component:
43
+ <SideNav>
44
+ <SideNavPanelSplitter label="Double click to collapse" />
45
+ </SideNav>;
46
+ ```
47
+
3
48
  ## 5.0.2
4
49
 
5
50
  ### Patch Changes
@@ -125,13 +125,14 @@ See the [interactive example (Atlassians only)](https://go.atlassian.com/nav4-in
125
125
 
126
126
  #### Side nav resizing
127
127
 
128
- - You can optionally render a [panel splitter](#resizable-areas) as a child to make the side nav
129
- resizable. It is resized using the drag handle. When hovering on the drag handle the mouse pointer
130
- changes to a resize pointer.
128
+ - You can optionally render a [side nav panel splitter](#resizable-areas) as a child to make the
129
+ side nav resizable. It is resized using the drag handle. When hovering on the drag handle the
130
+ mouse pointer changes to a resize pointer.
131
131
  - The side nav can be resized to a minimum width of 240px, and a maximum width equal to 50% of the
132
132
  total viewport width. It retains this resized width even after collapsing, reopening, or
133
133
  refreshing the page. When resizing, any open layer components (e.g. popups, dropdowns, selects,
134
134
  tooltips) will be closed.
135
+ - The side nav panel splitter can be also double clicked to collapse the side nav.
135
136
 
136
137
  See the [interactive example (Atlassians only)](https://go.atlassian.com/nav4-interactive-example).
137
138
 
@@ -230,13 +231,13 @@ See the [interactive example (Atlassians only)](https://go.atlassian.com/nav4-in
230
231
 
231
232
  ## Resizable areas
232
233
 
233
- Render `PanelSplitter` in a layout area to make it resizable.
234
+ Render a `PanelSplitter` in a layout area to make it resizable.
234
235
 
235
236
  Resizing is supported for the following areas:
236
237
 
237
- - [SideNav](/components/navigation-system/layout/examples#side-nav)
238
- - [Aside](/components/navigation-system/layout/examples#aside)
239
- - [Panel](/components/navigation-system/layout/examples#panel)
238
+ - [SideNav](/components/navigation-system/layout/examples#side-nav) - use `SideNavPanelSplitter`
239
+ - [Aside](/components/navigation-system/layout/examples#aside) - use `PanelSplitter`
240
+ - [Panel](/components/navigation-system/layout/examples#panel) - use `PanelSplitter`
240
241
 
241
242
  See the [interactive example (Atlassians only)](https://go.atlassian.com/nav4-interactive-example).
242
243
 
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "SideNavHeader", {
27
27
  return _sideNavHeader.SideNavHeader;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "SideNavPanelSplitter", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _sideNavPanelSplitter.SideNavPanelSplitter;
34
+ }
35
+ });
30
36
  Object.defineProperty(exports, "SideNavToggleButton", {
31
37
  enumerable: true,
32
38
  get: function get() {
@@ -51,4 +57,5 @@ var _sideNavContent = require("../../ui/page-layout/side-nav/side-nav-content");
51
57
  var _sideNavFooter = require("../../ui/page-layout/side-nav/side-nav-footer");
52
58
  var _toggleButton = require("../../ui/page-layout/side-nav/toggle-button");
53
59
  var _useToggleSideNav = require("../../ui/page-layout/side-nav/use-toggle-side-nav");
54
- var _useExpandSideNav = require("../../ui/page-layout/side-nav/use-expand-side-nav");
60
+ var _useExpandSideNav = require("../../ui/page-layout/side-nav/use-expand-side-nav");
61
+ var _sideNavPanelSplitter = require("../../ui/page-layout/panel-splitter/side-nav-panel-splitter");
@@ -332,10 +332,11 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref2) {
332
332
  * _PanelSplitter_
333
333
  *
334
334
  * A component that allows the user to resize a layout area.
335
- * It can be used within layout areas like `SideNav`, `Panel`, and `Aside`. The layout area component should
336
- * provide the context for it using `<PanelSplitterProvider>`.
335
+ * It can be used within layout areas like `Panel`, and `Aside`.
336
+ * For the `SideNav`, use the `SideNavPanelSplitter` component instead, as it provides additional functionality
337
+ * such as double clicking to collapse the side nav.
337
338
  *
338
- * Example usage in products:
339
+ * Example usage:
339
340
  * ```tsx
340
341
  * <Aside>
341
342
  * <!-- other side nav content -->
@@ -304,29 +304,10 @@ function SideNavInternal(_ref) {
304
304
  var toggleVisibilityByClickOutsideOnMobile = (0, _useToggleSideNav.useToggleSideNav)({
305
305
  trigger: 'click-outside-on-mobile'
306
306
  });
307
- (0, _react.useEffect)(function () {
308
- if ((0, _platformFeatureFlags.fg)('platform_dst_nav4_side_nav_default_collapsed_api')) {
309
- // This is the old version of the hook, so we skip it when the flag is enabled
310
- return;
311
- }
312
-
313
- // Sync the visibility in context (provided in `<Root>`) with the local `defaultCollapsed` prop provided to `SideNav`
314
- // after SSR hydration. This should only run once, after the initial render on the client.
315
- setSideNavState({
316
- desktop: initialDefaultCollapsed ? 'collapsed' : 'expanded',
317
- mobile: 'collapsed',
318
- flyout: 'closed',
319
- lastTrigger: null
320
- });
321
- }, [initialDefaultCollapsed, setSideNavState]);
322
307
 
323
308
  // Moving to `useLayoutEffect` so that there's no visual shift in non-SSR environments when using legacy API
324
309
  // For SSR the new API is still necessary
325
310
  (0, _react.useLayoutEffect)(function () {
326
- if (!(0, _platformFeatureFlags.fg)('platform_dst_nav4_side_nav_default_collapsed_api')) {
327
- // This is the new version of the hook, so we skip it when the flag is disabled
328
- return;
329
- }
330
311
  if (sideNavState !== null) {
331
312
  // Only need to do an initial sync if it hasn't been initialized from Root
332
313
  return;
@@ -57,7 +57,7 @@ var SideNavToggleButton = exports.SideNavToggleButton = function SideNavToggleBu
57
57
 
58
58
  // When default state is provided to `Root` the state in context will already be
59
59
  // initialized in SSR
60
- var _useState = (0, _react.useState)(sideNavState === null || !(0, _platformFeatureFlags.fg)('platform_dst_nav4_side_nav_default_collapsed_api') ? !defaultCollapsed : isSideNavExpandedOnDesktop),
60
+ var _useState = (0, _react.useState)(sideNavState === null ? !defaultCollapsed : isSideNavExpandedOnDesktop),
61
61
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
62
62
  isSideNavExpanded = _useState2[0],
63
63
  setIsSideNavExpanded = _useState2[1];
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.SideNavVisibilityProvider = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
11
  var _visibilityContext = require("./visibility-context");
13
12
  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); }
14
13
  /**
@@ -17,7 +16,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
17
16
  var SideNavVisibilityProvider = exports.SideNavVisibilityProvider = function SideNavVisibilityProvider(_ref) {
18
17
  var children = _ref.children,
19
18
  defaultCollapsed = _ref.defaultCollapsed;
20
- var initialState = typeof defaultCollapsed === 'boolean' && (0, _platformFeatureFlags.fg)('platform_dst_nav4_side_nav_default_collapsed_api') ? {
19
+ var initialState = typeof defaultCollapsed === 'boolean' ? {
21
20
  desktop: defaultCollapsed ? 'collapsed' : 'expanded',
22
21
  mobile: 'collapsed',
23
22
  flyout: 'closed',
@@ -4,4 +4,5 @@ export { SideNavContent } from '../../ui/page-layout/side-nav/side-nav-content';
4
4
  export { SideNavFooter } from '../../ui/page-layout/side-nav/side-nav-footer';
5
5
  export { SideNavToggleButton } from '../../ui/page-layout/side-nav/toggle-button';
6
6
  export { useToggleSideNav } from '../../ui/page-layout/side-nav/use-toggle-side-nav';
7
- export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
7
+ export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
8
+ export { SideNavPanelSplitter } from '../../ui/page-layout/panel-splitter/side-nav-panel-splitter';
@@ -311,10 +311,11 @@ const PortaledPanelSplitter = ({
311
311
  * _PanelSplitter_
312
312
  *
313
313
  * A component that allows the user to resize a layout area.
314
- * It can be used within layout areas like `SideNav`, `Panel`, and `Aside`. The layout area component should
315
- * provide the context for it using `<PanelSplitterProvider>`.
314
+ * It can be used within layout areas like `Panel`, and `Aside`.
315
+ * For the `SideNav`, use the `SideNavPanelSplitter` component instead, as it provides additional functionality
316
+ * such as double clicking to collapse the side nav.
316
317
  *
317
- * Example usage in products:
318
+ * Example usage:
318
319
  * ```tsx
319
320
  * <Aside>
320
321
  * <!-- other side nav content -->
@@ -286,29 +286,10 @@ function SideNavInternal({
286
286
  const toggleVisibilityByClickOutsideOnMobile = useToggleSideNav({
287
287
  trigger: 'click-outside-on-mobile'
288
288
  });
289
- useEffect(() => {
290
- if (fg('platform_dst_nav4_side_nav_default_collapsed_api')) {
291
- // This is the old version of the hook, so we skip it when the flag is enabled
292
- return;
293
- }
294
-
295
- // Sync the visibility in context (provided in `<Root>`) with the local `defaultCollapsed` prop provided to `SideNav`
296
- // after SSR hydration. This should only run once, after the initial render on the client.
297
- setSideNavState({
298
- desktop: initialDefaultCollapsed ? 'collapsed' : 'expanded',
299
- mobile: 'collapsed',
300
- flyout: 'closed',
301
- lastTrigger: null
302
- });
303
- }, [initialDefaultCollapsed, setSideNavState]);
304
289
 
305
290
  // Moving to `useLayoutEffect` so that there's no visual shift in non-SSR environments when using legacy API
306
291
  // For SSR the new API is still necessary
307
292
  useLayoutEffect(() => {
308
- if (!fg('platform_dst_nav4_side_nav_default_collapsed_api')) {
309
- // This is the new version of the hook, so we skip it when the flag is disabled
310
- return;
311
- }
312
293
  if (sideNavState !== null) {
313
294
  // Only need to do an initial sync if it hasn't been initialized from Root
314
295
  return;
@@ -45,7 +45,7 @@ export const SideNavToggleButton = ({
45
45
 
46
46
  // When default state is provided to `Root` the state in context will already be
47
47
  // initialized in SSR
48
- const [isSideNavExpanded, setIsSideNavExpanded] = useState(sideNavState === null || !fg('platform_dst_nav4_side_nav_default_collapsed_api') ? !defaultCollapsed : isSideNavExpandedOnDesktop);
48
+ const [isSideNavExpanded, setIsSideNavExpanded] = useState(sideNavState === null ? !defaultCollapsed : isSideNavExpandedOnDesktop);
49
49
  const ref = useContext(SideNavToggleButtonAttachRef);
50
50
  const elementRef = useRef(null);
51
51
 
@@ -1,5 +1,4 @@
1
1
  import React, { useState } from 'react';
2
- import { fg } from '@atlaskit/platform-feature-flags';
3
2
  import { SetSideNavVisibilityState, SideNavVisibilityState } from './visibility-context';
4
3
 
5
4
  /**
@@ -9,7 +8,7 @@ export const SideNavVisibilityProvider = ({
9
8
  children,
10
9
  defaultCollapsed
11
10
  }) => {
12
- const initialState = typeof defaultCollapsed === 'boolean' && fg('platform_dst_nav4_side_nav_default_collapsed_api') ? {
11
+ const initialState = typeof defaultCollapsed === 'boolean' ? {
13
12
  desktop: defaultCollapsed ? 'collapsed' : 'expanded',
14
13
  mobile: 'collapsed',
15
14
  flyout: 'closed',
@@ -4,4 +4,5 @@ export { SideNavContent } from '../../ui/page-layout/side-nav/side-nav-content';
4
4
  export { SideNavFooter } from '../../ui/page-layout/side-nav/side-nav-footer';
5
5
  export { SideNavToggleButton } from '../../ui/page-layout/side-nav/toggle-button';
6
6
  export { useToggleSideNav } from '../../ui/page-layout/side-nav/use-toggle-side-nav';
7
- export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
7
+ export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
8
+ export { SideNavPanelSplitter } from '../../ui/page-layout/panel-splitter/side-nav-panel-splitter';
@@ -322,10 +322,11 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref2) {
322
322
  * _PanelSplitter_
323
323
  *
324
324
  * A component that allows the user to resize a layout area.
325
- * It can be used within layout areas like `SideNav`, `Panel`, and `Aside`. The layout area component should
326
- * provide the context for it using `<PanelSplitterProvider>`.
325
+ * It can be used within layout areas like `Panel`, and `Aside`.
326
+ * For the `SideNav`, use the `SideNavPanelSplitter` component instead, as it provides additional functionality
327
+ * such as double clicking to collapse the side nav.
327
328
  *
328
- * Example usage in products:
329
+ * Example usage:
329
330
  * ```tsx
330
331
  * <Aside>
331
332
  * <!-- other side nav content -->
@@ -294,29 +294,10 @@ function SideNavInternal(_ref) {
294
294
  var toggleVisibilityByClickOutsideOnMobile = useToggleSideNav({
295
295
  trigger: 'click-outside-on-mobile'
296
296
  });
297
- useEffect(function () {
298
- if (fg('platform_dst_nav4_side_nav_default_collapsed_api')) {
299
- // This is the old version of the hook, so we skip it when the flag is enabled
300
- return;
301
- }
302
-
303
- // Sync the visibility in context (provided in `<Root>`) with the local `defaultCollapsed` prop provided to `SideNav`
304
- // after SSR hydration. This should only run once, after the initial render on the client.
305
- setSideNavState({
306
- desktop: initialDefaultCollapsed ? 'collapsed' : 'expanded',
307
- mobile: 'collapsed',
308
- flyout: 'closed',
309
- lastTrigger: null
310
- });
311
- }, [initialDefaultCollapsed, setSideNavState]);
312
297
 
313
298
  // Moving to `useLayoutEffect` so that there's no visual shift in non-SSR environments when using legacy API
314
299
  // For SSR the new API is still necessary
315
300
  useLayoutEffect(function () {
316
- if (!fg('platform_dst_nav4_side_nav_default_collapsed_api')) {
317
- // This is the new version of the hook, so we skip it when the flag is disabled
318
- return;
319
- }
320
301
  if (sideNavState !== null) {
321
302
  // Only need to do an initial sync if it hasn't been initialized from Root
322
303
  return;
@@ -48,7 +48,7 @@ export var SideNavToggleButton = function SideNavToggleButton(_ref) {
48
48
 
49
49
  // When default state is provided to `Root` the state in context will already be
50
50
  // initialized in SSR
51
- var _useState = useState(sideNavState === null || !fg('platform_dst_nav4_side_nav_default_collapsed_api') ? !defaultCollapsed : isSideNavExpandedOnDesktop),
51
+ var _useState = useState(sideNavState === null ? !defaultCollapsed : isSideNavExpandedOnDesktop),
52
52
  _useState2 = _slicedToArray(_useState, 2),
53
53
  isSideNavExpanded = _useState2[0],
54
54
  setIsSideNavExpanded = _useState2[1];
@@ -1,6 +1,5 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import React, { useState } from 'react';
3
- import { fg } from '@atlaskit/platform-feature-flags';
4
3
  import { SetSideNavVisibilityState, SideNavVisibilityState } from './visibility-context';
5
4
 
6
5
  /**
@@ -9,7 +8,7 @@ import { SetSideNavVisibilityState, SideNavVisibilityState } from './visibility-
9
8
  export var SideNavVisibilityProvider = function SideNavVisibilityProvider(_ref) {
10
9
  var children = _ref.children,
11
10
  defaultCollapsed = _ref.defaultCollapsed;
12
- var initialState = typeof defaultCollapsed === 'boolean' && fg('platform_dst_nav4_side_nav_default_collapsed_api') ? {
11
+ var initialState = typeof defaultCollapsed === 'boolean' ? {
13
12
  desktop: defaultCollapsed ? 'collapsed' : 'expanded',
14
13
  mobile: 'collapsed',
15
14
  flyout: 'closed',
@@ -5,3 +5,4 @@ export { SideNavFooter } from '../../ui/page-layout/side-nav/side-nav-footer';
5
5
  export { SideNavToggleButton } from '../../ui/page-layout/side-nav/toggle-button';
6
6
  export { useToggleSideNav } from '../../ui/page-layout/side-nav/use-toggle-side-nav';
7
7
  export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
8
+ export { SideNavPanelSplitter } from '../../ui/page-layout/panel-splitter/side-nav-panel-splitter';
@@ -45,10 +45,11 @@ export declare function isPanelSplitterDragData(data: Record<string | symbol, un
45
45
  * _PanelSplitter_
46
46
  *
47
47
  * A component that allows the user to resize a layout area.
48
- * It can be used within layout areas like `SideNav`, `Panel`, and `Aside`. The layout area component should
49
- * provide the context for it using `<PanelSplitterProvider>`.
48
+ * It can be used within layout areas like `Panel`, and `Aside`.
49
+ * For the `SideNav`, use the `SideNavPanelSplitter` component instead, as it provides additional functionality
50
+ * such as double clicking to collapse the side nav.
50
51
  *
51
- * Example usage in products:
52
+ * Example usage:
52
53
  * ```tsx
53
54
  * <Aside>
54
55
  * <!-- other side nav content -->
@@ -5,3 +5,4 @@ export { SideNavFooter } from '../../ui/page-layout/side-nav/side-nav-footer';
5
5
  export { SideNavToggleButton } from '../../ui/page-layout/side-nav/toggle-button';
6
6
  export { useToggleSideNav } from '../../ui/page-layout/side-nav/use-toggle-side-nav';
7
7
  export { useExpandSideNav } from '../../ui/page-layout/side-nav/use-expand-side-nav';
8
+ export { SideNavPanelSplitter } from '../../ui/page-layout/panel-splitter/side-nav-panel-splitter';
@@ -45,10 +45,11 @@ export declare function isPanelSplitterDragData(data: Record<string | symbol, un
45
45
  * _PanelSplitter_
46
46
  *
47
47
  * A component that allows the user to resize a layout area.
48
- * It can be used within layout areas like `SideNav`, `Panel`, and `Aside`. The layout area component should
49
- * provide the context for it using `<PanelSplitterProvider>`.
48
+ * It can be used within layout areas like `Panel`, and `Aside`.
49
+ * For the `SideNav`, use the `SideNavPanelSplitter` component instead, as it provides additional functionality
50
+ * such as double clicking to collapse the side nav.
50
51
  *
51
- * Example usage in products:
52
+ * Example usage:
52
53
  * ```tsx
53
54
  * <Aside>
54
55
  * <!-- other side nav content -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/navigation-system",
3
- "version": "5.0.2",
3
+ "version": "5.2.0",
4
4
  "description": "The latest navigation system for Atlassian apps.",
5
5
  "repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
6
6
  "author": "Atlassian Pty Ltd",
@@ -70,7 +70,7 @@
70
70
  "@atlaskit/avatar": "^25.5.0",
71
71
  "@atlaskit/button": "^23.5.0",
72
72
  "@atlaskit/css": "^0.15.0",
73
- "@atlaskit/ds-lib": "^5.1.0",
73
+ "@atlaskit/ds-lib": "^5.2.0",
74
74
  "@atlaskit/icon": "^28.5.0",
75
75
  "@atlaskit/layering": "^3.2.0",
76
76
  "@atlaskit/logo": "^19.9.0",
@@ -147,9 +147,6 @@
147
147
  }
148
148
  },
149
149
  "platform-feature-flags": {
150
- "platform_dst_nav4_side_nav_default_collapsed_api": {
151
- "type": "boolean"
152
- },
153
150
  "platform_dst_nav4_side_nav_toggle_ref_fix": {
154
151
  "type": "boolean"
155
152
  },