@atlaskit/navigation-system 2.12.0 → 2.14.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 (32) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +57 -29
  3. package/dist/cjs/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +6 -2
  4. package/dist/cjs/ui/page-layout/side-nav/side-nav.compiled.css +1 -2
  5. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +3 -6
  6. package/dist/cjs/ui/page-layout/side-nav/toggle-button.js +14 -2
  7. package/dist/cjs/ui/top-nav-items/themed/button.js +29 -25
  8. package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +33 -4
  9. package/dist/es2019/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +6 -2
  10. package/dist/es2019/ui/page-layout/side-nav/side-nav.compiled.css +1 -2
  11. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +3 -6
  12. package/dist/es2019/ui/page-layout/side-nav/toggle-button.js +13 -3
  13. package/dist/es2019/ui/top-nav-items/themed/button.js +29 -25
  14. package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +57 -29
  15. package/dist/esm/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +6 -2
  16. package/dist/esm/ui/page-layout/side-nav/side-nav.compiled.css +1 -2
  17. package/dist/esm/ui/page-layout/side-nav/side-nav.js +3 -6
  18. package/dist/esm/ui/page-layout/side-nav/toggle-button.js +15 -3
  19. package/dist/esm/ui/top-nav-items/themed/button.js +29 -25
  20. package/dist/types/ui/menu-item/link-menu-item.d.ts +1 -17
  21. package/dist/types/ui/menu-item/menu-item.d.ts +19 -14
  22. package/dist/types/ui/menu-item/menu-list-item.d.ts +6 -5
  23. package/dist/types/ui/page-layout/panel-splitter/panel-splitter.d.ts +15 -1
  24. package/dist/types/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
  25. package/dist/types/ui/page-layout/side-nav/toggle-button.d.ts +7 -1
  26. package/dist/types-ts4.5/ui/menu-item/link-menu-item.d.ts +1 -17
  27. package/dist/types-ts4.5/ui/menu-item/menu-item.d.ts +19 -14
  28. package/dist/types-ts4.5/ui/menu-item/menu-list-item.d.ts +6 -5
  29. package/dist/types-ts4.5/ui/page-layout/panel-splitter/panel-splitter.d.ts +15 -1
  30. package/dist/types-ts4.5/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
  31. package/dist/types-ts4.5/ui/page-layout/side-nav/toggle-button.d.ts +7 -1
  32. package/package.json +9 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 2.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`3ea3fab89f015`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/3ea3fab89f015) -
8
+ `SideNavToggleButton` now supports displaying keyboard shortcuts in its tooltip through the
9
+ `shortcut` prop.
10
+
11
+ `PanelSplitter` can now display a tooltip with an optional keyboard shortcut on hover or focus. A
12
+ tooltip will be rendered when either the `tooltipContent` or `shortcut` prop is set.
13
+
14
+ These new props are currently behind the `platform-dst-tooltip-shortcuts` feature flag.
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies
19
+
20
+ ## 2.13.0
21
+
22
+ ### Minor Changes
23
+
24
+ - [`9d65ef412f30c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9d65ef412f30c) -
25
+ Cleans up the `platform_design_system_nav4_sidenav_border` feature gate. The side nav border is
26
+ now only applied when it does not have a shadow.
27
+
28
+ ### Patch Changes
29
+
30
+ - [`437668dfbdec9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/437668dfbdec9) -
31
+ Add explicit types to a number of DST components
32
+ - Updated dependencies
33
+
3
34
  ## 2.12.0
4
35
 
5
36
  ### Minor Changes
@@ -26,6 +26,7 @@ var _adapter = require("@atlaskit/pragmatic-drag-and-drop/element/adapter");
26
26
  var _blockDraggingToIframes = require("@atlaskit/pragmatic-drag-and-drop/element/block-dragging-to-iframes");
27
27
  var _disableNativeDragPreview = require("@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview");
28
28
  var _preventUnhandled = require("@atlaskit/pragmatic-drag-and-drop/prevent-unhandled");
29
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
29
30
  var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
30
31
  var _context = require("./context");
31
32
  var _convertResizeBoundToPixels = require("./convert-resize-bound-to-pixels");
@@ -51,6 +52,24 @@ var panelSplitterDragDataSymbol = Symbol('panel-splitter-drag-data');
51
52
  function signPanelSplitterDragData(data) {
52
53
  return _objectSpread(_objectSpread({}, data), {}, (0, _defineProperty2.default)({}, panelSplitterDragDataSymbol, true));
53
54
  }
55
+ /**
56
+ * A wrapper component that renders a tooltip if the tooltipContent or shortcut is provided.
57
+ */
58
+ var MaybeTooltip = function MaybeTooltip(_ref) {
59
+ var tooltipContent = _ref.tooltipContent,
60
+ shortcut = _ref.shortcut,
61
+ children = _ref.children;
62
+ if ((tooltipContent || shortcut) && (0, _platformFeatureFlags.fg)('platform-dst-tooltip-shortcuts')) {
63
+ return /*#__PURE__*/React.createElement(_tooltip.default, {
64
+ content: tooltipContent,
65
+ shortcut: shortcut,
66
+ position: "mouse",
67
+ mousePosition: "right",
68
+ isScreenReaderAnnouncementDisabled: true
69
+ }, children);
70
+ }
71
+ return children;
72
+ };
54
73
  function isPanelSplitterDragData(data) {
55
74
  return data[panelSplitterDragDataSymbol] === true;
56
75
  }
@@ -59,19 +78,21 @@ function getTextDirection(element) {
59
78
  direction = _window$getComputedSt.direction;
60
79
  return direction === 'rtl' ? 'rtl' : 'ltr';
61
80
  }
62
- var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
63
- var label = _ref.label,
64
- onResizeStart = _ref.onResizeStart,
65
- onResizeEnd = _ref.onResizeEnd,
66
- testId = _ref.testId,
67
- panelId = _ref.panelId,
68
- panelWidth = _ref.panelWidth,
69
- onCompleteResize = _ref.onCompleteResize,
70
- getResizeBounds = _ref.getResizeBounds,
71
- panel = _ref.panel,
72
- portal = _ref.portal,
73
- resizingCssVar = _ref.resizingCssVar,
74
- position = _ref.position;
81
+ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref2) {
82
+ var label = _ref2.label,
83
+ onResizeStart = _ref2.onResizeStart,
84
+ onResizeEnd = _ref2.onResizeEnd,
85
+ testId = _ref2.testId,
86
+ panelId = _ref2.panelId,
87
+ panelWidth = _ref2.panelWidth,
88
+ onCompleteResize = _ref2.onCompleteResize,
89
+ getResizeBounds = _ref2.getResizeBounds,
90
+ panel = _ref2.panel,
91
+ portal = _ref2.portal,
92
+ resizingCssVar = _ref2.resizingCssVar,
93
+ position = _ref2.position,
94
+ tooltipContent = _ref2.tooltipContent,
95
+ shortcut = _ref2.shortcut;
75
96
  var splitterRef = (0, _react.useRef)(null);
76
97
  var labelId = (0, _useId.useId)();
77
98
  // Separate state used for the input range width to remove the UI's dependency on the "persisted" layout state value being updated
@@ -108,8 +129,8 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
108
129
  element: splitter
109
130
  }), (0, _adapter.draggable)({
110
131
  element: splitter,
111
- onGenerateDragPreview: function onGenerateDragPreview(_ref2) {
112
- var nativeSetDragImage = _ref2.nativeSetDragImage;
132
+ onGenerateDragPreview: function onGenerateDragPreview(_ref3) {
133
+ var nativeSetDragImage = _ref3.nativeSetDragImage;
113
134
  // We will be moving the line to indicate a drag. We can disable the native drag preview
114
135
  (0, _disableNativeDragPreview.disableNativeDragPreview)({
115
136
  nativeSetDragImage: nativeSetDragImage
@@ -136,8 +157,8 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
136
157
  direction: getTextDirection(panel)
137
158
  });
138
159
  },
139
- onDragStart: function onDragStart(_ref3) {
140
- var source = _ref3.source;
160
+ onDragStart: function onDragStart(_ref4) {
161
+ var source = _ref4.source;
141
162
  (0, _tinyInvariant.default)(isPanelSplitterDragData(source.data));
142
163
  onResizeStart === null || onResizeStart === void 0 || onResizeStart({
143
164
  initialWidth: source.data.initialWidth
@@ -146,9 +167,9 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
146
167
  // Close any open layers when the user starts resizing
147
168
  openLayerObserver === null || openLayerObserver === void 0 || openLayerObserver.closeLayers();
148
169
  },
149
- onDrag: function onDrag(_ref4) {
150
- var location = _ref4.location,
151
- source = _ref4.source;
170
+ onDrag: function onDrag(_ref5) {
171
+ var location = _ref5.location,
172
+ source = _ref5.source;
152
173
  (0, _tinyInvariant.default)(isPanelSplitterDragData(source.data));
153
174
  var _source$data = source.data,
154
175
  initialWidth = _source$data.initialWidth,
@@ -169,8 +190,8 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
169
190
  panel.style.setProperty(resizingCssVar, resizingWidth);
170
191
  source.data.resizingWidth = resizingWidth;
171
192
  },
172
- onDrop: function onDrop(_ref5) {
173
- var source = _ref5.source;
193
+ onDrop: function onDrop(_ref6) {
194
+ var source = _ref6.source;
174
195
  (0, _tinyInvariant.default)(isPanelSplitterDragData(source.data));
175
196
  _preventUnhandled.preventUnhandled.stop();
176
197
  var finalWidth = (0, _getWidth.getPixelWidth)(panel);
@@ -281,6 +302,9 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
281
302
  return /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/React.createElement("div", {
282
303
  "data-testid": testId ? "".concat(testId, "-container") : undefined,
283
304
  className: (0, _runtime.ax)([containerStyles.root, position === 'start' && containerStyles.positionStart, position === 'end' && containerStyles.positionEnd])
305
+ }, /*#__PURE__*/React.createElement(MaybeTooltip, {
306
+ tooltipContent: tooltipContent,
307
+ shortcut: shortcut
284
308
  }, /*#__PURE__*/React.createElement("div", {
285
309
  ref: splitterRef,
286
310
  "data-testid": testId,
@@ -301,7 +325,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
301
325
  id: labelId
302
326
  }, label)), /*#__PURE__*/React.createElement("span", {
303
327
  className: (0, _runtime.ax)([lineStyles.root])
304
- }))), portal);
328
+ })))), portal);
305
329
  };
306
330
 
307
331
  /**
@@ -319,11 +343,13 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref) {
319
343
  * </SideNav>
320
344
  * ```
321
345
  */
322
- var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref6) {
323
- var label = _ref6.label,
324
- onResizeStart = _ref6.onResizeStart,
325
- onResizeEnd = _ref6.onResizeEnd,
326
- testId = _ref6.testId;
346
+ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref7) {
347
+ var label = _ref7.label,
348
+ onResizeStart = _ref7.onResizeStart,
349
+ onResizeEnd = _ref7.onResizeEnd,
350
+ testId = _ref7.testId,
351
+ tooltipContent = _ref7.tooltipContent,
352
+ shortcut = _ref7.shortcut;
327
353
  var _useState7 = (0, _react.useState)(null),
328
354
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
329
355
  panel = _useState8[0],
@@ -437,6 +463,8 @@ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref6) {
437
463
  onCompleteResize: onCompleteResize,
438
464
  getResizeBounds: getResizeBounds,
439
465
  resizingCssVar: resizingCssVar,
440
- position: position
466
+ position: position,
467
+ tooltipContent: tooltipContent,
468
+ shortcut: shortcut
441
469
  });
442
470
  };
@@ -32,7 +32,9 @@ var SideNavPanelSplitter = exports.SideNavPanelSplitter = function SideNavPanelS
32
32
  onResizeEnd = _ref.onResizeEnd,
33
33
  testId = _ref.testId,
34
34
  _ref$shouldCollapseOn = _ref.shouldCollapseOnDoubleClick,
35
- shouldCollapseOnDoubleClick = _ref$shouldCollapseOn === void 0 ? true : _ref$shouldCollapseOn;
35
+ shouldCollapseOnDoubleClick = _ref$shouldCollapseOn === void 0 ? true : _ref$shouldCollapseOn,
36
+ tooltipContent = _ref.tooltipContent,
37
+ shortcut = _ref.shortcut;
36
38
  var context = (0, _react.useContext)(_context.PanelSplitterContext);
37
39
  (0, _tinyInvariant.default)((context === null || context === void 0 ? void 0 : context.panelId) === _constants.sideNavPanelSplitterId, 'SideNavPanelSplitter must be rendered as a child of <SideNav />.');
38
40
  var toggleSideNav = (0, _useToggleSideNav.useToggleSideNav)({
@@ -44,6 +46,8 @@ var SideNavPanelSplitter = exports.SideNavPanelSplitter = function SideNavPanelS
44
46
  label: label,
45
47
  onResizeStart: onResizeStart,
46
48
  onResizeEnd: onResizeEnd,
47
- testId: testId
49
+ testId: testId,
50
+ tooltipContent: tooltipContent,
51
+ shortcut: shortcut
48
52
  }));
49
53
  };
@@ -1,7 +1,6 @@
1
1
 
2
2
  ._nd5l1b6c{grid-area:main/aside/aside/aside}
3
3
  ._191wglyw{border-inline-start:none}
4
- ._t51z7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}
5
4
  ._t51zglyw{border-inline-end:none}._152timx3{inset-block-start:calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0px))}
6
5
  ._16qs1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}
7
6
  ._1bah1yb4{justify-content:space-between}
@@ -16,5 +15,5 @@
16
15
  ._kqsw1if8{position:sticky}
17
16
  ._vchhusvi{box-sizing:border-box}
18
17
  @media (min-width:48rem){._14b5hc79{width:var(--n_snvRsz,var(--n_sNvw))}}
19
- @media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._dm2518uv{display:initial}._dm25glyw{display:none}._p5cl7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}._p5clglyw{border-inline-end:none}._qiln1gzg{grid-area:main}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}._qilnk0mc{grid-area:side-nav}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
18
+ @media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}._qilnk0mc{grid-area:side-nav}._p5cl7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
20
19
  @supports not (-moz-appearance:none){@media (prefers-reduced-motion:no-preference){._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}._1uwsjq3t{transform:translateX(-100%)}}@media (prefers-reduced-motion:no-preference){@starting-style{._oyeijq3t{transform:translateX(-100%)}}._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}}}
@@ -51,11 +51,8 @@ function getResizeBounds() {
51
51
  }
52
52
  var openLayerObserverSideNavNamespace = 'side-nav';
53
53
  var styles = {
54
- root: "_nd5l1b6c _bfhk1bhr _16qs1cd0 _vchhusvi _4t3ieqxy _152timx3 _kqsw1if8 _1bsb1ego _1pbycs5v _14b5hc79 _qilnk0mc _4ap3vuon _scbpglyw",
55
- oldBorder: "_t51z7r9e",
56
- newBorder: "_191wglyw _t51zglyw _p5cl7r9e",
57
- newBorderFlyoutOpen: "_p5clglyw",
58
- flyoutOpen: "_qiln1gzg _4ap31bhr _scbp1cd0 _139f8iot _1tpvfnf5 _sylc1a5r _oyeijq3t",
54
+ root: "_nd5l1b6c _191wglyw _t51zglyw _bfhk1bhr _16qs1cd0 _vchhusvi _4t3ieqxy _152timx3 _kqsw1if8 _1bsb1ego _1pbycs5v _14b5hc79 _qilnk0mc _p5cl7r9e _4ap3vuon _scbpglyw",
55
+ flyoutOpen: "_qiln1gzg _p5clglyw _4ap31bhr _scbp1cd0 _139f8iot _1tpvfnf5 _sylc1a5r _oyeijq3t",
59
56
  flyoutAnimateClosed: "_1e0cglyw _qiln1gzg _139f8iot _1tpvfnf5 _sylc1a5r _1uwsjq3t",
60
57
  flexContainer: "_4t3i1osq _1e0c1txw _2lx21bp4 _1bah1yb4",
61
58
  hiddenMobileAndDesktop: "_1e0cglyw",
@@ -583,7 +580,7 @@ function SideNavInternal(_ref) {
583
580
  style: (0, _defineProperty2.default)({}, _constants.sideNavVar, clampedWidth),
584
581
  ref: mergedRef,
585
582
  "data-testid": testId,
586
- className: (0, _runtime.ax)([styles.root, (0, _platformFeatureFlags.fg)('platform_design_system_nav4_sidenav_border') ? styles.newBorder : styles.oldBorder, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && (0, _platformFeatureFlags.fg)('platform_design_system_nav4_sidenav_border') && styles.newBorderFlyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && styles.flyoutAnimateClosed, isFlyoutClosed && (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && styles.fullHeightSidebar])
583
+ className: (0, _runtime.ax)([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && styles.flyoutAnimateClosed, isFlyoutClosed && (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && styles.fullHeightSidebar])
587
584
  }), /*#__PURE__*/React.createElement(_hoistUtils.DangerouslyHoistCssVarToDocumentRoot, {
588
585
  variableName: _constants.sideNavLiveWidthVar,
589
586
  value: "0px",
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", {
9
9
  exports.SideNavToggleButton = void 0;
10
10
  require("./toggle-button.compiled.css");
11
11
  var _runtime = require("@compiled/react/runtime");
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
14
  var _react = _interopRequireWildcard(require("react"));
14
15
  var _bindEventListener = require("bind-event-listener");
@@ -20,6 +21,8 @@ var _toggleButtonContext = require("./toggle-button-context");
20
21
  var _useSideNavVisibility2 = require("./use-side-nav-visibility");
21
22
  var _useToggleSideNav = require("./use-toggle-side-nav");
22
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); }
24
+ 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; }
25
+ 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; }
23
26
  var toggleButtonTooltipOptions = {
24
27
  // We're disabling pointer events on the tooltip to prevent it from blocking mouse events, so that the side nav flyout stays open
25
28
  // when moving the mouse from the top bar to the side nav.
@@ -47,7 +50,8 @@ var SideNavToggleButton = exports.SideNavToggleButton = function SideNavToggleBu
47
50
  collapseLabel = _ref.collapseLabel,
48
51
  testId = _ref.testId,
49
52
  interactionName = _ref.interactionName,
50
- onClick = _ref.onClick;
53
+ onClick = _ref.onClick,
54
+ shortcut = _ref.shortcut;
51
55
  var _useSideNavVisibility = (0, _useSideNavVisibility2.useSideNavVisibility)({
52
56
  defaultCollapsed: defaultCollapsed
53
57
  }),
@@ -111,6 +115,14 @@ var SideNavToggleButton = exports.SideNavToggleButton = function SideNavToggleBu
111
115
  className: (0, _runtime.ax)(["_1e0c1bgi _lcxvglyw"])
112
116
  }, isSideNavExpanded ? /*#__PURE__*/_react.default.createElement(_sidebarCollapse.default, props) : /*#__PURE__*/_react.default.createElement(_sidebarExpand.default, props));
113
117
  };
118
+ var tooltipProps = (0, _react.useMemo)(function () {
119
+ if ((0, _platformFeatureFlags.fg)('platform-dst-tooltip-shortcuts')) {
120
+ return _objectSpread(_objectSpread({}, toggleButtonTooltipOptions), {}, {
121
+ shortcut: shortcut
122
+ });
123
+ }
124
+ return toggleButtonTooltipOptions;
125
+ }, [shortcut]);
114
126
  var iconButton = /*#__PURE__*/_react.default.createElement(_migration.IconButton, {
115
127
  appearance: "subtle",
116
128
  label: isSideNavExpanded ? collapseLabel : expandLabel,
@@ -120,7 +132,7 @@ var SideNavToggleButton = exports.SideNavToggleButton = function SideNavToggleBu
120
132
  isTooltipDisabled: false,
121
133
  interactionName: interactionName,
122
134
  ref: (0, _platformFeatureFlags.fg)('platform_fix_component_state_update_for_suspense') ? elementRef : ref,
123
- tooltip: toggleButtonTooltipOptions
135
+ tooltip: tooltipProps
124
136
  });
125
137
  var isInsideSlot = (0, _react.useContext)(_toggleButtonContext.SideNavToggleButtonSlotContext);
126
138
 
@@ -132,16 +132,7 @@ var ThemedPressable = /*#__PURE__*/(0, _react.forwardRef)(function ThemedPressab
132
132
  isDisabled: isDisabled
133
133
  }));
134
134
  });
135
- /**
136
- * Intentionally an almost-duplicate of `ThemedPressable` - make sure to update both.
137
- *
138
- * More 'clever' solutions were tried but I couldn't get them working in an acceptable state.
139
- *
140
- * Polymorphism had many typing issues and required sacrificing type safety.
141
- *
142
- * Render props had problems passing down styles through `xcss` to the `children` function.
143
- */
144
- var ThemedAnchor = (0, _forwardRefWithGeneric.default)(function ThemedAnchor(_ref3, ref) {
135
+ function ThemedAnchorFn(_ref3, ref) {
145
136
  var _ref3$appearance = _ref3.appearance,
146
137
  appearance = _ref3$appearance === void 0 ? 'default' : _ref3$appearance,
147
138
  _ref3$shape = _ref3.shape,
@@ -161,7 +152,17 @@ var ThemedAnchor = (0, _forwardRefWithGeneric.default)(function ThemedAnchor(_re
161
152
  ,
162
153
  xcss: (0, _react2.cx)(styles.root, shapeStyles[shape], hasBorder && styles.border, appearanceStyles[appearance], isSelected && styles.selected, isDisabled && styles.disabled)
163
154
  }));
164
- });
155
+ }
156
+ /**
157
+ * Intentionally an almost-duplicate of `ThemedPressable` - make sure to update both.
158
+ *
159
+ * More 'clever' solutions were tried but I couldn't get them working in an acceptable state.
160
+ *
161
+ * Polymorphism had many typing issues and required sacrificing type safety.
162
+ *
163
+ * Render props had problems passing down styles through `xcss` to the `children` function.
164
+ */
165
+ var ThemedAnchor = (0, _forwardRefWithGeneric.default)(ThemedAnchorFn);
165
166
  var textButtonStyles = {
166
167
  iconBefore: "_vwz4idpf",
167
168
  text: "_k48p1wq8"
@@ -191,12 +192,7 @@ var ThemedButton = exports.ThemedButton = /*#__PURE__*/(0, _react.forwardRef)(fu
191
192
  className: (0, _runtime.ax)([textButtonStyles.text])
192
193
  }, children));
193
194
  });
194
- /**
195
- * __Themed link button__
196
- *
197
- * A themed link button for the top bar.
198
- */
199
- var ThemedLinkButton = exports.ThemedLinkButton = (0, _forwardRefWithGeneric.default)(function ThemedLinkButton(_ref5, ref) {
195
+ function ThemedLinkButtonFn(_ref5, ref) {
200
196
  var IconBefore = _ref5.iconBefore,
201
197
  children = _ref5.children,
202
198
  props = (0, _objectWithoutProperties2.default)(_ref5, _excluded5);
@@ -210,7 +206,13 @@ var ThemedLinkButton = exports.ThemedLinkButton = (0, _forwardRefWithGeneric.def
210
206
  })), /*#__PURE__*/_react.default.createElement("span", {
211
207
  className: (0, _runtime.ax)([textButtonStyles.text])
212
208
  }, children));
213
- });
209
+ }
210
+ /**
211
+ * __Themed link button__
212
+ *
213
+ * A themed link button for the top bar.
214
+ */
215
+ var ThemedLinkButton = exports.ThemedLinkButton = (0, _forwardRefWithGeneric.default)(ThemedLinkButtonFn);
214
216
 
215
217
  /**
216
218
  * Props shared by `ThemedIconButtonProps` and `ThemedLinkIconButton`
@@ -283,12 +285,7 @@ var ThemedIconButton = exports.ThemedIconButton = /*#__PURE__*/(0, _react.forwar
283
285
  );
284
286
  });
285
287
  });
286
- /**
287
- * __Themed link icon button__
288
- *
289
- * A themed link icon button for the top bar.
290
- */
291
- var ThemedLinkIconButton = exports.ThemedLinkIconButton = (0, _forwardRefWithGeneric.default)(function ThemedLinkIconButton(_ref7, ref) {
288
+ function ThemedLinkIconButtonFn(_ref7, ref) {
292
289
  var _tooltip$content2;
293
290
  var Icon = _ref7.icon,
294
291
  label = _ref7.label,
@@ -349,4 +346,11 @@ var ThemedLinkIconButton = exports.ThemedLinkIconButton = (0, _forwardRefWithGen
349
346
  }), /*#__PURE__*/_react.default.createElement(_visuallyHidden.default, null, label))
350
347
  );
351
348
  });
352
- });
349
+ }
350
+
351
+ /**
352
+ * __Themed link icon button__
353
+ *
354
+ * A themed link icon button for the top bar.
355
+ */
356
+ var ThemedLinkIconButton = exports.ThemedLinkIconButton = (0, _forwardRefWithGeneric.default)(ThemedLinkIconButtonFn);
@@ -15,6 +15,7 @@ import { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
15
15
  import { blockDraggingToIFrames } from '@atlaskit/pragmatic-drag-and-drop/element/block-dragging-to-iframes';
16
16
  import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';
17
17
  import { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';
18
+ import Tooltip from '@atlaskit/tooltip';
18
19
  import VisuallyHidden from '@atlaskit/visually-hidden';
19
20
  import { OnDoubleClickContext, PanelSplitterContext } from './context';
20
21
  import { convertResizeBoundToPixels } from './convert-resize-bound-to-pixels';
@@ -40,6 +41,25 @@ function signPanelSplitterDragData(data) {
40
41
  [panelSplitterDragDataSymbol]: true
41
42
  };
42
43
  }
44
+ /**
45
+ * A wrapper component that renders a tooltip if the tooltipContent or shortcut is provided.
46
+ */
47
+ const MaybeTooltip = ({
48
+ tooltipContent,
49
+ shortcut,
50
+ children
51
+ }) => {
52
+ if ((tooltipContent || shortcut) && fg('platform-dst-tooltip-shortcuts')) {
53
+ return /*#__PURE__*/React.createElement(Tooltip, {
54
+ content: tooltipContent,
55
+ shortcut: shortcut,
56
+ position: "mouse",
57
+ mousePosition: "right",
58
+ isScreenReaderAnnouncementDisabled: true
59
+ }, children);
60
+ }
61
+ return children;
62
+ };
43
63
  export function isPanelSplitterDragData(data) {
44
64
  return data[panelSplitterDragDataSymbol] === true;
45
65
  }
@@ -61,7 +81,9 @@ const PortaledPanelSplitter = ({
61
81
  panel,
62
82
  portal,
63
83
  resizingCssVar,
64
- position
84
+ position,
85
+ tooltipContent,
86
+ shortcut
65
87
  }) => {
66
88
  const splitterRef = useRef(null);
67
89
  const labelId = useId();
@@ -259,6 +281,9 @@ const PortaledPanelSplitter = ({
259
281
  return /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement("div", {
260
282
  "data-testid": testId ? `${testId}-container` : undefined,
261
283
  className: ax([containerStyles.root, position === 'start' && containerStyles.positionStart, position === 'end' && containerStyles.positionEnd])
284
+ }, /*#__PURE__*/React.createElement(MaybeTooltip, {
285
+ tooltipContent: tooltipContent,
286
+ shortcut: shortcut
262
287
  }, /*#__PURE__*/React.createElement("div", {
263
288
  ref: splitterRef,
264
289
  "data-testid": testId,
@@ -279,7 +304,7 @@ const PortaledPanelSplitter = ({
279
304
  id: labelId
280
305
  }, label)), /*#__PURE__*/React.createElement("span", {
281
306
  className: ax([lineStyles.root])
282
- }))), portal);
307
+ })))), portal);
283
308
  };
284
309
 
285
310
  /**
@@ -301,7 +326,9 @@ export const PanelSplitter = ({
301
326
  label,
302
327
  onResizeStart,
303
328
  onResizeEnd,
304
- testId
329
+ testId,
330
+ tooltipContent,
331
+ shortcut
305
332
  }) => {
306
333
  const [panel, setPanel] = useState(null);
307
334
  const [portal, setPortal] = useState(null);
@@ -412,6 +439,8 @@ export const PanelSplitter = ({
412
439
  onCompleteResize: onCompleteResize,
413
440
  getResizeBounds: getResizeBounds,
414
441
  resizingCssVar: resizingCssVar,
415
- position: position
442
+ position: position,
443
+ tooltipContent: tooltipContent,
444
+ shortcut: shortcut
416
445
  });
417
446
  };
@@ -22,7 +22,9 @@ export const SideNavPanelSplitter = ({
22
22
  onResizeStart,
23
23
  onResizeEnd,
24
24
  testId,
25
- shouldCollapseOnDoubleClick = true
25
+ shouldCollapseOnDoubleClick = true,
26
+ tooltipContent,
27
+ shortcut
26
28
  }) => {
27
29
  const context = useContext(PanelSplitterContext);
28
30
  invariant((context === null || context === void 0 ? void 0 : context.panelId) === sideNavPanelSplitterId, 'SideNavPanelSplitter must be rendered as a child of <SideNav />.');
@@ -35,6 +37,8 @@ export const SideNavPanelSplitter = ({
35
37
  label: label,
36
38
  onResizeStart: onResizeStart,
37
39
  onResizeEnd: onResizeEnd,
38
- testId: testId
40
+ testId: testId,
41
+ tooltipContent: tooltipContent,
42
+ shortcut: shortcut
39
43
  }));
40
44
  };
@@ -1,7 +1,6 @@
1
1
 
2
2
  ._nd5l1b6c{grid-area:main/aside/aside/aside}
3
3
  ._191wglyw{border-inline-start:none}
4
- ._t51z7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}
5
4
  ._t51zglyw{border-inline-end:none}._152timx3{inset-block-start:calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0px))}
6
5
  ._16qs1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}
7
6
  ._1bah1yb4{justify-content:space-between}
@@ -16,5 +15,5 @@
16
15
  ._kqsw1if8{position:sticky}
17
16
  ._vchhusvi{box-sizing:border-box}
18
17
  @media (min-width:48rem){._14b5hc79{width:var(--n_snvRsz,var(--n_sNvw))}}
19
- @media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._dm2518uv{display:initial}._dm25glyw{display:none}._p5cl7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}._p5clglyw{border-inline-end:none}._qiln1gzg{grid-area:main}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}._qilnk0mc{grid-area:side-nav}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
18
+ @media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._180k1wjm{inset-block-start:calc(var(--n_bnrM, 0px))}._26vxoned{padding-block-start:calc(var(--n_tNvM, 0px))}._1mt19dtb{margin-block-start:calc(var(--n_tNvM, 0px)*-1)}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}._qilnk0mc{grid-area:side-nav}._p5cl7r9e{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#091e4224)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
20
19
  @supports not (-moz-appearance:none){@media (prefers-reduced-motion:no-preference){._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}._1uwsjq3t{transform:translateX(-100%)}}@media (prefers-reduced-motion:no-preference){@starting-style{._oyeijq3t{transform:translateX(-100%)}}._139f8iot{transition-property:transform,display}._1tpvfnf5{transition-duration:.2s}._sylc1a5r{transition-behavior:allow-discrete}}}
@@ -38,11 +38,8 @@ function getResizeBounds() {
38
38
  }
39
39
  const openLayerObserverSideNavNamespace = 'side-nav';
40
40
  const styles = {
41
- root: "_nd5l1b6c _bfhk1bhr _16qs1cd0 _vchhusvi _4t3ieqxy _152timx3 _kqsw1if8 _1bsb1ego _1pbycs5v _14b5hc79 _qilnk0mc _4ap3vuon _scbpglyw",
42
- oldBorder: "_t51z7r9e",
43
- newBorder: "_191wglyw _t51zglyw _p5cl7r9e",
44
- newBorderFlyoutOpen: "_p5clglyw",
45
- flyoutOpen: "_qiln1gzg _4ap31bhr _scbp1cd0 _139f8iot _1tpvfnf5 _sylc1a5r _oyeijq3t",
41
+ root: "_nd5l1b6c _191wglyw _t51zglyw _bfhk1bhr _16qs1cd0 _vchhusvi _4t3ieqxy _152timx3 _kqsw1if8 _1bsb1ego _1pbycs5v _14b5hc79 _qilnk0mc _p5cl7r9e _4ap3vuon _scbpglyw",
42
+ flyoutOpen: "_qiln1gzg _p5clglyw _4ap31bhr _scbp1cd0 _139f8iot _1tpvfnf5 _sylc1a5r _oyeijq3t",
46
43
  flyoutAnimateClosed: "_1e0cglyw _qiln1gzg _139f8iot _1tpvfnf5 _sylc1a5r _1uwsjq3t",
47
44
  flexContainer: "_4t3i1osq _1e0c1txw _2lx21bp4 _1bah1yb4",
48
45
  hiddenMobileAndDesktop: "_1e0cglyw",
@@ -575,7 +572,7 @@ function SideNavInternal({
575
572
  },
576
573
  ref: mergedRef,
577
574
  "data-testid": testId,
578
- className: ax([styles.root, fg('platform_design_system_nav4_sidenav_border') ? styles.newBorder : styles.oldBorder, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && fg('platform_design_system_nav4_sidenav_border') && styles.newBorderFlyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && styles.flyoutAnimateClosed, isFlyoutClosed && fg('navx-full-height-sidebar') && styles.fullHeightSidebar])
575
+ className: ax([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && styles.flyoutAnimateClosed, isFlyoutClosed && fg('navx-full-height-sidebar') && styles.fullHeightSidebar])
579
576
  }), /*#__PURE__*/React.createElement(DangerouslyHoistCssVarToDocumentRoot, {
580
577
  variableName: sideNavLiveWidthVar,
581
578
  value: "0px",
@@ -1,7 +1,7 @@
1
1
  /* toggle-button.tsx generated by @compiled/babel-plugin v0.38.1 */
2
2
  import "./toggle-button.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
- import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
4
+ import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
5
5
  import { bind } from 'bind-event-listener';
6
6
  import SidebarCollapseIcon from '@atlaskit/icon/core/sidebar-collapse';
7
7
  import SidebarExpandIcon from '@atlaskit/icon/core/sidebar-expand';
@@ -36,7 +36,8 @@ export const SideNavToggleButton = ({
36
36
  collapseLabel,
37
37
  testId,
38
38
  interactionName,
39
- onClick
39
+ onClick,
40
+ shortcut
40
41
  }) => {
41
42
  const {
42
43
  isExpandedOnDesktop: isSideNavExpandedOnDesktop,
@@ -98,6 +99,15 @@ export const SideNavToggleButton = ({
98
99
  const icon = props => /*#__PURE__*/React.createElement("span", {
99
100
  className: ax(["_1e0c1bgi _lcxvglyw"])
100
101
  }, isSideNavExpanded ? /*#__PURE__*/React.createElement(SidebarCollapseIcon, props) : /*#__PURE__*/React.createElement(SidebarExpandIcon, props));
102
+ const tooltipProps = useMemo(() => {
103
+ if (fg('platform-dst-tooltip-shortcuts')) {
104
+ return {
105
+ ...toggleButtonTooltipOptions,
106
+ shortcut
107
+ };
108
+ }
109
+ return toggleButtonTooltipOptions;
110
+ }, [shortcut]);
101
111
  const iconButton = /*#__PURE__*/React.createElement(IconButton, {
102
112
  appearance: "subtle",
103
113
  label: isSideNavExpanded ? collapseLabel : expandLabel,
@@ -107,7 +117,7 @@ export const SideNavToggleButton = ({
107
117
  isTooltipDisabled: false,
108
118
  interactionName: interactionName,
109
119
  ref: fg('platform_fix_component_state_update_for_suspense') ? elementRef : ref,
110
- tooltip: toggleButtonTooltipOptions
120
+ tooltip: tooltipProps
111
121
  });
112
122
  const isInsideSlot = useContext(SideNavToggleButtonSlotContext);
113
123