@atlaskit/navigation-system 5.35.0 → 5.37.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 (33) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/entry-points/experimental/ribbon.js +12 -0
  3. package/dist/cjs/ui/page-layout/constants.js +5 -2
  4. package/dist/cjs/ui/page-layout/ribbon.compiled.css +10 -0
  5. package/dist/cjs/ui/page-layout/ribbon.js +57 -0
  6. package/dist/cjs/ui/page-layout/root.compiled.css +2 -2
  7. package/dist/cjs/ui/page-layout/root.js +3 -2
  8. package/dist/cjs/ui/page-layout/top-nav/top-nav-start.compiled.css +1 -1
  9. package/dist/cjs/ui/page-layout/top-nav/top-nav-start.js +3 -2
  10. package/dist/es2019/entry-points/experimental/ribbon.js +1 -0
  11. package/dist/es2019/ui/page-layout/constants.js +4 -1
  12. package/dist/es2019/ui/page-layout/ribbon.compiled.css +10 -0
  13. package/dist/es2019/ui/page-layout/ribbon.js +49 -0
  14. package/dist/es2019/ui/page-layout/root.compiled.css +2 -2
  15. package/dist/es2019/ui/page-layout/root.js +3 -2
  16. package/dist/es2019/ui/page-layout/top-nav/top-nav-start.compiled.css +1 -1
  17. package/dist/es2019/ui/page-layout/top-nav/top-nav-start.js +3 -2
  18. package/dist/esm/entry-points/experimental/ribbon.js +1 -0
  19. package/dist/esm/ui/page-layout/constants.js +4 -1
  20. package/dist/esm/ui/page-layout/ribbon.compiled.css +10 -0
  21. package/dist/esm/ui/page-layout/ribbon.js +49 -0
  22. package/dist/esm/ui/page-layout/root.compiled.css +2 -2
  23. package/dist/esm/ui/page-layout/root.js +3 -2
  24. package/dist/esm/ui/page-layout/top-nav/top-nav-start.compiled.css +1 -1
  25. package/dist/esm/ui/page-layout/top-nav/top-nav-start.js +3 -2
  26. package/dist/types/entry-points/experimental/ribbon.d.ts +1 -0
  27. package/dist/types/ui/page-layout/constants.d.ts +4 -1
  28. package/dist/types/ui/page-layout/ribbon.d.ts +11 -0
  29. package/dist/types-ts4.5/entry-points/experimental/ribbon.d.ts +1 -0
  30. package/dist/types-ts4.5/ui/page-layout/constants.d.ts +4 -1
  31. package/dist/types-ts4.5/ui/page-layout/ribbon.d.ts +11 -0
  32. package/experimental/ribbon/package.json +17 -0
  33. package/package.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 5.37.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`accbbfe68dc49`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/accbbfe68dc49) -
8
+ Decreases the padding to the right of the toggle button when the full height sidebar is enabled,
9
+ so that it aligns with the other `elemAfter` items in the side navigation. This change is behind
10
+ the `platform_dst_nav4_fhs_feedback_1` feature gate.
11
+
12
+ ## 5.36.0
13
+
14
+ ### Minor Changes
15
+
16
+ - [`621d85336693f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/621d85336693f) -
17
+ Adds a ribbon grid area to the page layout, and introduces an experimental Ribbon slot component
18
+ through the `/experimental/ribbon` entrypoint. This change is behind the
19
+ `platform_dst_nav4_ribbon_slot` feature gate.
20
+
3
21
  ## 5.35.0
4
22
 
5
23
  ### Minor Changes
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "UNSAFE_Ribbon", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _ribbon.UNSAFE_Ribbon;
10
+ }
11
+ });
12
+ var _ribbon = require("../../ui/page-layout/ribbon");
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.sideNavContentScrollTimelineVar = exports.panelVar = exports.panelPanelSplitterId = exports.openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavEndNamespace = exports.openLayerObserverSideNavNamespace = exports.localSlotLayers = exports.contentInsetBlockStart = exports.contentHeightWhenFixed = exports.bannerMountedVar = exports.asideVar = exports.asidePanelSplitterId = exports.UNSAFE_topNavVar = exports.UNSAFE_sideNavLayoutVar = exports.UNSAFE_panelLayoutVar = exports.UNSAFE_bannerVar = exports.UNSAFE_asideLayoutVar = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = void 0;
6
+ exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.sideNavContentScrollTimelineVar = exports.ribbonVar = exports.panelVar = exports.panelPanelSplitterId = exports.openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavEndNamespace = exports.openLayerObserverSideNavNamespace = exports.localSlotLayers = exports.contentInsetBlockStart = exports.contentHeightWhenFixed = exports.bannerMountedVar = exports.asideVar = exports.asidePanelSplitterId = exports.UNSAFE_topNavVar = exports.UNSAFE_sideNavLayoutVar = exports.UNSAFE_ribbonVar = exports.UNSAFE_panelLayoutVar = exports.UNSAFE_bannerVar = exports.UNSAFE_asideLayoutVar = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = void 0;
7
7
  /**
8
8
  * These variables are shared across the different page layout slots.
9
9
  * This violates the [UI styling standard](https://atlassian.design/components/eslint-plugin-ui-styling-standard/no-imported-style-values/usage).
@@ -16,6 +16,7 @@ var asideVar = exports.asideVar = '--n_asDw';
16
16
  var panelVar = exports.panelVar = '--n_pnlW';
17
17
  var bannerMountedVar = exports.bannerMountedVar = '--n_bnrM';
18
18
  var topNavMountedVar = exports.topNavMountedVar = '--n_tNvM';
19
+ var ribbonVar = exports.ribbonVar = '--n_rbnW';
19
20
 
20
21
  /**
21
22
  * Captures the current width of the side navigation, at all times, including during resizing.
@@ -39,13 +40,14 @@ var contentInsetBlockStart = exports.contentInsetBlockStart = "calc(var(--n_bnrM
39
40
  var UNSAFE_topNavVar = exports.UNSAFE_topNavVar = '--topNavigationHeight';
40
41
  var UNSAFE_bannerVar = exports.UNSAFE_bannerVar = '--bannerHeight';
41
42
  var UNSAFE_sideNavLayoutVar = exports.UNSAFE_sideNavLayoutVar = '--leftSidebarWidth';
43
+ var UNSAFE_ribbonVar = exports.UNSAFE_ribbonVar = '--leftPanelWidth';
42
44
  var UNSAFE_asideLayoutVar = exports.UNSAFE_asideLayoutVar = '--rightSidebarWidth';
43
45
  var UNSAFE_panelLayoutVar = exports.UNSAFE_panelLayoutVar = '--rightPanelWidth';
44
46
 
45
47
  // The following UNSAFE variables are used to absolutely position elements that aren't a child of page layout.
46
48
  // Known use cases: Legacy pages rendered inside Confluence and Jira.
47
49
  var UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_bannerVar, ", 0px) + var(").concat(UNSAFE_topNavVar, ", 0px))");
48
- var UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "var(".concat(UNSAFE_sideNavLayoutVar, ", 0px)");
50
+ var UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_ribbonVar, ", 0px) + var(").concat(UNSAFE_sideNavLayoutVar, ", 0px))");
49
51
  var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_asideLayoutVar, ", 0px) + var(").concat(UNSAFE_panelLayoutVar, ", 0px))");
50
52
 
51
53
  /**
@@ -54,6 +56,7 @@ var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_EN
54
56
  * rely on accessing them through global means.
55
57
  */
56
58
  var localSlotLayers = exports.localSlotLayers = {
59
+ ribbon: 4,
57
60
  // The side nav panel splitter is layered above the top nav when FHS and 'platform-dst-side-nav-layering-fixes' is enabled.
58
61
  // It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
59
62
  sideNavPanelSplitterFHS: 4,
@@ -0,0 +1,10 @@
1
+
2
+ ._nd5l1c99{grid-area:ribbon}._152tidpf{inset-block-start:0}
3
+ ._18m915vq{overflow-y:hidden}
4
+ ._1e0cglyw{display:none}
5
+ ._1pbyegat{z-index:4}
6
+ ._1reo15vq{overflow-x:hidden}
7
+ ._4t3i1osq{height:100%}
8
+ ._kqsw1if8{position:sticky}
9
+ ._vchhusvi{box-sizing:border-box}
10
+ @media (min-width:64rem){._dm2518uv{display:initial}}
@@ -0,0 +1,57 @@
1
+ /* ribbon.tsx generated by @compiled/babel-plugin v0.38.1 */
2
+ "use strict";
3
+
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.UNSAFE_Ribbon = UNSAFE_Ribbon;
9
+ require("./ribbon.compiled.css");
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var React = _react;
12
+ var _runtime = require("@compiled/react/runtime");
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
+ var _responsive = require("@atlaskit/primitives/responsive");
15
+ var _constants = require("./constants");
16
+ var _hoistSlotSizesContext = require("./hoist-slot-sizes-context");
17
+ var _hoistUtils = require("./hoist-utils");
18
+ var _idUtils = require("./id-utils");
19
+ 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); }
20
+ var styles = {
21
+ root: "_nd5l1c99 _1reo15vq _18m915vq _4t3i1osq _152tidpf _kqsw1if8 _vchhusvi _1pbyegat _1e0cglyw _dm2518uv"
22
+ };
23
+ function UNSAFE_Ribbon(_ref) {
24
+ var children = _ref.children,
25
+ testId = _ref.testId,
26
+ providedId = _ref.id,
27
+ _ref$width = _ref.width,
28
+ width = _ref$width === void 0 ? '0px' : _ref$width;
29
+ var id = (0, _idUtils.useLayoutId)({
30
+ providedId: providedId
31
+ });
32
+ var dangerouslyHoistSlotSizes = (0, _react.useContext)(_hoistSlotSizesContext.DangerouslyHoistSlotSizes);
33
+ if (!(0, _platformFeatureFlags.fg)('platform_dst_nav4_ribbon_slot')) {
34
+ return null;
35
+ }
36
+ return /*#__PURE__*/React.createElement("div", {
37
+ id: id,
38
+ "data-layout-slot": true,
39
+ style: {
40
+ width: width
41
+ },
42
+ "data-testid": testId,
43
+ className: (0, _runtime.ax)([styles.root])
44
+ }, dangerouslyHoistSlotSizes &&
45
+ /*#__PURE__*/
46
+ // ------ START UNSAFE STYLES ------
47
+ // These styles are needed for the UNSAFE legacy use case for Jira + Confluence.
48
+ // But also for the panel resizing constraint to work correctly.
49
+ React.createElement(_hoistUtils.DangerouslyHoistCssVarToDocumentRoot, {
50
+ variableName: _constants.UNSAFE_ribbonVar,
51
+ mediaQuery: _responsive.media.above.md,
52
+ value: "0px",
53
+ responsiveValue: width
54
+ })
55
+ // ------ END UNSAFE STYLES ------
56
+ , children);
57
+ }
@@ -5,5 +5,5 @@
5
5
  ._1tke1kxc{min-height:100vh}
6
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
7
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
8
- @media (min-width:64rem){._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
- @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}}
8
+ @media (min-width:64rem){._12fk1aio{grid-template-areas:"banner banner banner banner" "ribbon top-bar top-bar top-bar" "ribbon side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqteala{grid-template-columns:auto auto minmax(0,1fr) auto}._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
+ @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}._xkmgks3h{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar" "ribbon side-nav main aside panel"}._tyve1nco{grid-template-columns:auto auto minmax(0,1fr) auto auto}}
@@ -26,7 +26,8 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
26
26
  var gridRootId = exports.gridRootId = 'unsafe-design-system-page-layout-root';
27
27
  var styles = {
28
28
  root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fkuz0r _12qzrxre _1rqt70if _xkmgbaui _jbc7rxre _tyve1jg8",
29
- sideNavScrollTimeline: "_10iwgc9s"
29
+ sideNavScrollTimeline: "_10iwgc9s",
30
+ ribbon: "_12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
30
31
  };
31
32
 
32
33
  /**
@@ -70,7 +71,7 @@ function Root(_ref) {
70
71
  testId: testId
71
72
  }, /*#__PURE__*/_react.default.createElement("div", {
72
73
  ref: ref,
73
- className: (0, _runtime.ax)([styles.root, isFhsEnabled && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && !(0, _platformFeatureFlags.fg)('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, xcss]),
74
+ className: (0, _runtime.ax)([styles.root, isFhsEnabled && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && !(0, _platformFeatureFlags.fg)('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, (0, _platformFeatureFlags.fg)('platform_dst_nav4_ribbon_slot') && styles.ribbon, xcss]),
74
75
  id: gridRootId,
75
76
  "data-testid": testId
76
77
  }, children)))))))));
@@ -13,6 +13,6 @@
13
13
  ._vchhusvi{box-sizing:border-box}
14
14
  [dir=rtl] ._65m41mrw{--animation-direction:-1}
15
15
  @media (prefers-reduced-motion:no-preference){._10t81e03{transition-property:transform}._10t81rjc{transition-property:transform,opacity}._1xq51ytf{transition-timing-function:ease-in-out}._1xq55ucs{transition-timing-function:ease}._mjvc1efy{transform:translateX(calc(100%*var(--animation-direction)))}._bgpzidpf{opacity:0}._mjvc1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}._mjvco0k7{transform:translateX(calc((-2rem + var(--ds-space-050, 4px)*-1)*var(--animation-direction)))}._mjvcyrjp{transform:translateX(calc((2rem + var(--ds-space-050, 4px))*var(--animation-direction)))}._mjvcz12g{transform:translateX(0)}._xrrpfnf5{transition-duration:.2s}._bgpzkb7n{opacity:1}}
16
- @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
16
+ @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._exxmutpp{padding-inline-end:var(--ds-space-150,9pt)}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
17
17
  @media (prefers-reduced-motion:no-preference) and (min-width:64rem){._n8qabrmi:after{transition-property:opacity}._wc72fnf5:after{transition-duration:.2s}._j3mr1v42:after{transition-timing-function:ease-in}}
18
18
  @supports (scroll-timeline-axis:block){@keyframes khj1qz3{0%{box-shadow:inset 0 -1px 0 0 transparent}0.1%{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}to{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}}html:not(:has([data-private-side-nav-header])) ._5gdsgc9s{animation-timeline:--sNcst}html:not(:has([data-private-side-nav-header])) ._53fr1ybg{animation-name:khj1qz3}html:not(:has([data-private-side-nav-header])) ._bt1c1hrf{animation-fill-mode:both}}
@@ -63,7 +63,8 @@ var wrapperStyles = {
63
63
  fullHeightSidebarWithLayeringFixes: "_13wnh2mm _1l3vb3bt _juxdstnw _1vinidpf _1719idpf _e6znidpf _1kyhe4h9 _4cwynqa1 _435s1l7x _m7c3idpf",
64
64
  fullHeightSidebarExpandedWithLayeringFixes: "_4ap3vuon _m7c3kb7n",
65
65
  fullHeightSidebarExpandedWithLayeringFixesScrollTimeline: "_5gdsgc9s _53fr1ybg _bt1c1hrf",
66
- fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42"
66
+ fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42",
67
+ fullHeightSidebarExpandedWithFeedback: "_exxmutpp"
67
68
  };
68
69
 
69
70
  /**
@@ -149,7 +150,7 @@ var TopNavStartInnerFHS = /*#__PURE__*/(0, _react.forwardRef)(function TopNavSta
149
150
  }
150
151
  }, [sideNavState]);
151
152
  return /*#__PURE__*/_react.default.createElement("div", {
152
- className: (0, _runtime.ax)([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && !(0, _platformFeatureFlags.fg)('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
153
+ className: (0, _runtime.ax)([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithFeedback, (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && !(0, _platformFeatureFlags.fg)('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
153
154
  }, /*#__PURE__*/_react.default.createElement("div", {
154
155
  ref: ref,
155
156
  "data-testid": testId,
@@ -0,0 +1 @@
1
+ export { UNSAFE_Ribbon } from '../../ui/page-layout/ribbon';
@@ -10,6 +10,7 @@ export const asideVar = '--n_asDw';
10
10
  export const panelVar = '--n_pnlW';
11
11
  export const bannerMountedVar = '--n_bnrM';
12
12
  export const topNavMountedVar = '--n_tNvM';
13
+ export const ribbonVar = '--n_rbnW';
13
14
 
14
15
  /**
15
16
  * Captures the current width of the side navigation, at all times, including during resizing.
@@ -33,13 +34,14 @@ export const contentInsetBlockStart = `calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0
33
34
  export const UNSAFE_topNavVar = '--topNavigationHeight';
34
35
  export const UNSAFE_bannerVar = '--bannerHeight';
35
36
  export const UNSAFE_sideNavLayoutVar = '--leftSidebarWidth';
37
+ export const UNSAFE_ribbonVar = '--leftPanelWidth';
36
38
  export const UNSAFE_asideLayoutVar = '--rightSidebarWidth';
37
39
  export const UNSAFE_panelLayoutVar = '--rightPanelWidth';
38
40
 
39
41
  // The following UNSAFE variables are used to absolutely position elements that aren't a child of page layout.
40
42
  // Known use cases: Legacy pages rendered inside Confluence and Jira.
41
43
  export const UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = `calc(var(${UNSAFE_bannerVar}, 0px) + var(${UNSAFE_topNavVar}, 0px))`;
42
- export const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = `var(${UNSAFE_sideNavLayoutVar}, 0px)`;
44
+ export const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = `calc(var(${UNSAFE_ribbonVar}, 0px) + var(${UNSAFE_sideNavLayoutVar}, 0px))`;
43
45
  export const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = `calc(var(${UNSAFE_asideLayoutVar}, 0px) + var(${UNSAFE_panelLayoutVar}, 0px))`;
44
46
 
45
47
  /**
@@ -48,6 +50,7 @@ export const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = `calc(var(${UNSAFE_a
48
50
  * rely on accessing them through global means.
49
51
  */
50
52
  export const localSlotLayers = {
53
+ ribbon: 4,
51
54
  // The side nav panel splitter is layered above the top nav when FHS and 'platform-dst-side-nav-layering-fixes' is enabled.
52
55
  // It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
53
56
  sideNavPanelSplitterFHS: 4,
@@ -0,0 +1,10 @@
1
+
2
+ ._nd5l1c99{grid-area:ribbon}._152tidpf{inset-block-start:0}
3
+ ._18m915vq{overflow-y:hidden}
4
+ ._1e0cglyw{display:none}
5
+ ._1pbyegat{z-index:4}
6
+ ._1reo15vq{overflow-x:hidden}
7
+ ._4t3i1osq{height:100%}
8
+ ._kqsw1if8{position:sticky}
9
+ ._vchhusvi{box-sizing:border-box}
10
+ @media (min-width:64rem){._dm2518uv{display:initial}}
@@ -0,0 +1,49 @@
1
+ /* ribbon.tsx generated by @compiled/babel-plugin v0.38.1 */
2
+ import "./ribbon.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import { useContext } from 'react';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { media } from '@atlaskit/primitives/responsive';
8
+ import { localSlotLayers, UNSAFE_ribbonVar } from './constants';
9
+ import { DangerouslyHoistSlotSizes } from './hoist-slot-sizes-context';
10
+ import { DangerouslyHoistCssVarToDocumentRoot } from './hoist-utils';
11
+ import { useLayoutId } from './id-utils';
12
+ const styles = {
13
+ root: "_nd5l1c99 _1reo15vq _18m915vq _4t3i1osq _152tidpf _kqsw1if8 _vchhusvi _1pbyegat _1e0cglyw _dm2518uv"
14
+ };
15
+ export function UNSAFE_Ribbon({
16
+ children,
17
+ testId,
18
+ id: providedId,
19
+ width = '0px'
20
+ }) {
21
+ const id = useLayoutId({
22
+ providedId
23
+ });
24
+ const dangerouslyHoistSlotSizes = useContext(DangerouslyHoistSlotSizes);
25
+ if (!fg('platform_dst_nav4_ribbon_slot')) {
26
+ return null;
27
+ }
28
+ return /*#__PURE__*/React.createElement("div", {
29
+ id: id,
30
+ "data-layout-slot": true,
31
+ style: {
32
+ width
33
+ },
34
+ "data-testid": testId,
35
+ className: ax([styles.root])
36
+ }, dangerouslyHoistSlotSizes &&
37
+ /*#__PURE__*/
38
+ // ------ START UNSAFE STYLES ------
39
+ // These styles are needed for the UNSAFE legacy use case for Jira + Confluence.
40
+ // But also for the panel resizing constraint to work correctly.
41
+ React.createElement(DangerouslyHoistCssVarToDocumentRoot, {
42
+ variableName: UNSAFE_ribbonVar,
43
+ mediaQuery: media.above.md,
44
+ value: "0px",
45
+ responsiveValue: width
46
+ })
47
+ // ------ END UNSAFE STYLES ------
48
+ , children);
49
+ }
@@ -5,5 +5,5 @@
5
5
  ._1tke1kxc{min-height:100vh}
6
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
7
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
8
- @media (min-width:64rem){._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
- @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}}
8
+ @media (min-width:64rem){._12fk1aio{grid-template-areas:"banner banner banner banner" "ribbon top-bar top-bar top-bar" "ribbon side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqteala{grid-template-columns:auto auto minmax(0,1fr) auto}._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
+ @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}._xkmgks3h{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar" "ribbon side-nav main aside panel"}._tyve1nco{grid-template-columns:auto auto minmax(0,1fr) auto auto}}
@@ -18,7 +18,8 @@ import { SideNavVisibilityProvider } from './side-nav/visibility-provider';
18
18
  export const gridRootId = 'unsafe-design-system-page-layout-root';
19
19
  const styles = {
20
20
  root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fkuz0r _12qzrxre _1rqt70if _xkmgbaui _jbc7rxre _tyve1jg8",
21
- sideNavScrollTimeline: "_10iwgc9s"
21
+ sideNavScrollTimeline: "_10iwgc9s",
22
+ ribbon: "_12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
22
23
  };
23
24
 
24
25
  /**
@@ -69,7 +70,7 @@ This message will not be displayed in production.
69
70
  testId: testId
70
71
  }, /*#__PURE__*/React.createElement("div", {
71
72
  ref: ref,
72
- className: ax([styles.root, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, xcss]),
73
+ className: ax([styles.root, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, fg('platform_dst_nav4_ribbon_slot') && styles.ribbon, xcss]),
73
74
  id: gridRootId,
74
75
  "data-testid": testId
75
76
  }, children)))))))));
@@ -13,6 +13,6 @@
13
13
  ._vchhusvi{box-sizing:border-box}
14
14
  [dir=rtl] ._65m41mrw{--animation-direction:-1}
15
15
  @media (prefers-reduced-motion:no-preference){._10t81e03{transition-property:transform}._10t81rjc{transition-property:transform,opacity}._1xq51ytf{transition-timing-function:ease-in-out}._1xq55ucs{transition-timing-function:ease}._mjvc1efy{transform:translateX(calc(100%*var(--animation-direction)))}._bgpzidpf{opacity:0}._mjvc1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}._mjvco0k7{transform:translateX(calc((-2rem + var(--ds-space-050, 4px)*-1)*var(--animation-direction)))}._mjvcyrjp{transform:translateX(calc((2rem + var(--ds-space-050, 4px))*var(--animation-direction)))}._mjvcz12g{transform:translateX(0)}._xrrpfnf5{transition-duration:.2s}._bgpzkb7n{opacity:1}}
16
- @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
16
+ @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._exxmutpp{padding-inline-end:var(--ds-space-150,9pt)}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
17
17
  @media (prefers-reduced-motion:no-preference) and (min-width:64rem){._n8qabrmi:after{transition-property:opacity}._wc72fnf5:after{transition-duration:.2s}._j3mr1v42:after{transition-timing-function:ease-in}}
18
18
  @supports (scroll-timeline-axis:block){@keyframes k1rswljm{0%{box-shadow:inset 0 -1px 0 0 transparent}0.1%{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}to{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}}html:not(:has([data-private-side-nav-header])) ._5gdsgc9s{animation-timeline:--sNcst}html:not(:has([data-private-side-nav-header])) ._53frsjnm{animation-name:k1rswljm}html:not(:has([data-private-side-nav-header])) ._bt1c1hrf{animation-fill-mode:both}}
@@ -54,7 +54,8 @@ const wrapperStyles = {
54
54
  fullHeightSidebarWithLayeringFixes: "_13wnh2mm _1l3vb3bt _juxdstnw _1vinidpf _1719idpf _e6znidpf _1kyhe4h9 _4cwynqa1 _435s1l7x _m7c3idpf",
55
55
  fullHeightSidebarExpandedWithLayeringFixes: "_4ap3vuon _m7c3kb7n",
56
56
  fullHeightSidebarExpandedWithLayeringFixesScrollTimeline: "_5gdsgc9s _53frsjnm _bt1c1hrf",
57
- fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42"
57
+ fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42",
58
+ fullHeightSidebarExpandedWithFeedback: "_exxmutpp"
58
59
  };
59
60
 
60
61
  /**
@@ -143,7 +144,7 @@ const TopNavStartInnerFHS = /*#__PURE__*/forwardRef(function TopNavStartInnerFHS
143
144
  }
144
145
  }, [sideNavState]);
145
146
  return /*#__PURE__*/React.createElement("div", {
146
- className: ax([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
147
+ className: ax([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, isExpandedOnDesktop && fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithFeedback, fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
147
148
  }, /*#__PURE__*/React.createElement("div", {
148
149
  ref: ref,
149
150
  "data-testid": testId,
@@ -0,0 +1 @@
1
+ export { UNSAFE_Ribbon } from '../../ui/page-layout/ribbon';
@@ -10,6 +10,7 @@ export var asideVar = '--n_asDw';
10
10
  export var panelVar = '--n_pnlW';
11
11
  export var bannerMountedVar = '--n_bnrM';
12
12
  export var topNavMountedVar = '--n_tNvM';
13
+ export var ribbonVar = '--n_rbnW';
13
14
 
14
15
  /**
15
16
  * Captures the current width of the side navigation, at all times, including during resizing.
@@ -33,13 +34,14 @@ export var contentInsetBlockStart = "calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0px
33
34
  export var UNSAFE_topNavVar = '--topNavigationHeight';
34
35
  export var UNSAFE_bannerVar = '--bannerHeight';
35
36
  export var UNSAFE_sideNavLayoutVar = '--leftSidebarWidth';
37
+ export var UNSAFE_ribbonVar = '--leftPanelWidth';
36
38
  export var UNSAFE_asideLayoutVar = '--rightSidebarWidth';
37
39
  export var UNSAFE_panelLayoutVar = '--rightPanelWidth';
38
40
 
39
41
  // The following UNSAFE variables are used to absolutely position elements that aren't a child of page layout.
40
42
  // Known use cases: Legacy pages rendered inside Confluence and Jira.
41
43
  export var UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_bannerVar, ", 0px) + var(").concat(UNSAFE_topNavVar, ", 0px))");
42
- export var UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "var(".concat(UNSAFE_sideNavLayoutVar, ", 0px)");
44
+ export var UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_ribbonVar, ", 0px) + var(").concat(UNSAFE_sideNavLayoutVar, ", 0px))");
43
45
  export var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNSAFE_asideLayoutVar, ", 0px) + var(").concat(UNSAFE_panelLayoutVar, ", 0px))");
44
46
 
45
47
  /**
@@ -48,6 +50,7 @@ export var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNS
48
50
  * rely on accessing them through global means.
49
51
  */
50
52
  export var localSlotLayers = {
53
+ ribbon: 4,
51
54
  // The side nav panel splitter is layered above the top nav when FHS and 'platform-dst-side-nav-layering-fixes' is enabled.
52
55
  // It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
53
56
  sideNavPanelSplitterFHS: 4,
@@ -0,0 +1,10 @@
1
+
2
+ ._nd5l1c99{grid-area:ribbon}._152tidpf{inset-block-start:0}
3
+ ._18m915vq{overflow-y:hidden}
4
+ ._1e0cglyw{display:none}
5
+ ._1pbyegat{z-index:4}
6
+ ._1reo15vq{overflow-x:hidden}
7
+ ._4t3i1osq{height:100%}
8
+ ._kqsw1if8{position:sticky}
9
+ ._vchhusvi{box-sizing:border-box}
10
+ @media (min-width:64rem){._dm2518uv{display:initial}}
@@ -0,0 +1,49 @@
1
+ /* ribbon.tsx generated by @compiled/babel-plugin v0.38.1 */
2
+ import "./ribbon.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import { useContext } from 'react';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { media } from '@atlaskit/primitives/responsive';
8
+ import { localSlotLayers, UNSAFE_ribbonVar } from './constants';
9
+ import { DangerouslyHoistSlotSizes } from './hoist-slot-sizes-context';
10
+ import { DangerouslyHoistCssVarToDocumentRoot } from './hoist-utils';
11
+ import { useLayoutId } from './id-utils';
12
+ var styles = {
13
+ root: "_nd5l1c99 _1reo15vq _18m915vq _4t3i1osq _152tidpf _kqsw1if8 _vchhusvi _1pbyegat _1e0cglyw _dm2518uv"
14
+ };
15
+ export function UNSAFE_Ribbon(_ref) {
16
+ var children = _ref.children,
17
+ testId = _ref.testId,
18
+ providedId = _ref.id,
19
+ _ref$width = _ref.width,
20
+ width = _ref$width === void 0 ? '0px' : _ref$width;
21
+ var id = useLayoutId({
22
+ providedId: providedId
23
+ });
24
+ var dangerouslyHoistSlotSizes = useContext(DangerouslyHoistSlotSizes);
25
+ if (!fg('platform_dst_nav4_ribbon_slot')) {
26
+ return null;
27
+ }
28
+ return /*#__PURE__*/React.createElement("div", {
29
+ id: id,
30
+ "data-layout-slot": true,
31
+ style: {
32
+ width: width
33
+ },
34
+ "data-testid": testId,
35
+ className: ax([styles.root])
36
+ }, dangerouslyHoistSlotSizes &&
37
+ /*#__PURE__*/
38
+ // ------ START UNSAFE STYLES ------
39
+ // These styles are needed for the UNSAFE legacy use case for Jira + Confluence.
40
+ // But also for the panel resizing constraint to work correctly.
41
+ React.createElement(DangerouslyHoistCssVarToDocumentRoot, {
42
+ variableName: UNSAFE_ribbonVar,
43
+ mediaQuery: media.above.md,
44
+ value: "0px",
45
+ responsiveValue: width
46
+ })
47
+ // ------ END UNSAFE STYLES ------
48
+ , children);
49
+ }
@@ -5,5 +5,5 @@
5
5
  ._1tke1kxc{min-height:100vh}
6
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
7
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
8
- @media (min-width:64rem){._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
- @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}}
8
+ @media (min-width:64rem){._12fk1aio{grid-template-areas:"banner banner banner banner" "ribbon top-bar top-bar top-bar" "ribbon side-nav main aside"}._12qzrxre{grid-template-rows:auto auto 3fr}._1rqteala{grid-template-columns:auto auto minmax(0,1fr) auto}._12fkuz0r{grid-template-areas:"banner banner banner" "top-bar top-bar top-bar" "side-nav main aside"}._1rqt70if{grid-template-columns:auto minmax(0,1fr) auto}}
9
+ @media (min-width:90rem){._xkmgbaui{grid-template-areas:"banner banner banner banner" "top-bar top-bar top-bar top-bar" "side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1jg8{grid-template-columns:auto minmax(0,1fr) auto auto}._xkmgks3h{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar" "ribbon side-nav main aside panel"}._tyve1nco{grid-template-columns:auto auto minmax(0,1fr) auto auto}}
@@ -18,7 +18,8 @@ import { SideNavVisibilityProvider } from './side-nav/visibility-provider';
18
18
  export var gridRootId = 'unsafe-design-system-page-layout-root';
19
19
  var styles = {
20
20
  root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fkuz0r _12qzrxre _1rqt70if _xkmgbaui _jbc7rxre _tyve1jg8",
21
- sideNavScrollTimeline: "_10iwgc9s"
21
+ sideNavScrollTimeline: "_10iwgc9s",
22
+ ribbon: "_12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
22
23
  };
23
24
 
24
25
  /**
@@ -62,7 +63,7 @@ export function Root(_ref) {
62
63
  testId: testId
63
64
  }, /*#__PURE__*/React.createElement("div", {
64
65
  ref: ref,
65
- className: ax([styles.root, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, xcss]),
66
+ className: ax([styles.root, isFhsEnabled && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && styles.sideNavScrollTimeline, fg('platform_dst_nav4_ribbon_slot') && styles.ribbon, xcss]),
66
67
  id: gridRootId,
67
68
  "data-testid": testId
68
69
  }, children)))))))));
@@ -13,6 +13,6 @@
13
13
  ._vchhusvi{box-sizing:border-box}
14
14
  [dir=rtl] ._65m41mrw{--animation-direction:-1}
15
15
  @media (prefers-reduced-motion:no-preference){._10t81e03{transition-property:transform}._10t81rjc{transition-property:transform,opacity}._1xq51ytf{transition-timing-function:ease-in-out}._1xq55ucs{transition-timing-function:ease}._mjvc1efy{transform:translateX(calc(100%*var(--animation-direction)))}._bgpzidpf{opacity:0}._mjvc1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}._mjvco0k7{transform:translateX(calc((-2rem + var(--ds-space-050, 4px)*-1)*var(--animation-direction)))}._mjvcyrjp{transform:translateX(calc((2rem + var(--ds-space-050, 4px))*var(--animation-direction)))}._mjvcz12g{transform:translateX(0)}._xrrpfnf5{transition-duration:.2s}._bgpzkb7n{opacity:1}}
16
- @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
16
+ @media (min-width:64rem){._13wnh2mm{position:relative}._1l3vb3bt:after{content:""}._juxdstnw:after{position:absolute}._1vinidpf:after{inset-block-start:0}._1719idpf:after{inset-block-end:0}._e6znidpf:after{inset-inline-end:0}._1kyhe4h9:after{border-inline-end-width:var(--ds-border-width,1px)}._4cwynqa1:after{border-inline-end-style:solid}._435s1l7x:after{border-inline-end-color:var(--ds-border,#0b120e24)}._m7c3idpf:after{opacity:0}._15rin7od{min-width:unset}._glte1osq{width:100%}._4ap3vuon{background-color:var(--ds-surface,#fff)}._m7c3kb7n:after{opacity:1}._exxmutpp{padding-inline-end:var(--ds-space-150,9pt)}._glte1ris{width:max-content}._15rip2n4{min-width:330px}._1gs5usvi{box-sizing:border-box}._glte93mn{width:var(--n_sNvlw,100%)}._exxmpxbi{padding-inline-end:var(--ds-space-200,1pc)}}
17
17
  @media (prefers-reduced-motion:no-preference) and (min-width:64rem){._n8qabrmi:after{transition-property:opacity}._wc72fnf5:after{transition-duration:.2s}._j3mr1v42:after{transition-timing-function:ease-in}}
18
18
  @supports (scroll-timeline-axis:block){@keyframes khj1qz3{0%{box-shadow:inset 0 -1px 0 0 transparent}0.1%{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}to{box-shadow:inset 0 -1px 0 0 var(--ds-border,#0b120e24)}}html:not(:has([data-private-side-nav-header])) ._5gdsgc9s{animation-timeline:--sNcst}html:not(:has([data-private-side-nav-header])) ._53fr1ybg{animation-name:khj1qz3}html:not(:has([data-private-side-nav-header])) ._bt1c1hrf{animation-fill-mode:both}}
@@ -55,7 +55,8 @@ var wrapperStyles = {
55
55
  fullHeightSidebarWithLayeringFixes: "_13wnh2mm _1l3vb3bt _juxdstnw _1vinidpf _1719idpf _e6znidpf _1kyhe4h9 _4cwynqa1 _435s1l7x _m7c3idpf",
56
56
  fullHeightSidebarExpandedWithLayeringFixes: "_4ap3vuon _m7c3kb7n",
57
57
  fullHeightSidebarExpandedWithLayeringFixesScrollTimeline: "_5gdsgc9s _53fr1ybg _bt1c1hrf",
58
- fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42"
58
+ fullHeightSidebarBorderTransition: "_n8qabrmi _wc72fnf5 _j3mr1v42",
59
+ fullHeightSidebarExpandedWithFeedback: "_exxmutpp"
59
60
  };
60
61
 
61
62
  /**
@@ -141,7 +142,7 @@ var TopNavStartInnerFHS = /*#__PURE__*/forwardRef(function TopNavStartInnerFHS(_
141
142
  }
142
143
  }, [sideNavState]);
143
144
  return /*#__PURE__*/React.createElement("div", {
144
- className: ax([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
145
+ className: ax([wrapperStyles.root, isExpandedOnDesktop && wrapperStyles.fullHeightSidebarExpanded, isExpandedOnDesktop && fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithFeedback, fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarWithLayeringFixes, !isFirstRenderRef.current && isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarBorderTransition, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixes, isExpandedOnDesktop && fg('platform-dst-side-nav-layering-fixes') && !fg('platform_dst_nav4_fhs_feedback_1') && wrapperStyles.fullHeightSidebarExpandedWithLayeringFixesScrollTimeline])
145
146
  }, /*#__PURE__*/React.createElement("div", {
146
147
  ref: ref,
147
148
  "data-testid": testId,
@@ -0,0 +1 @@
1
+ export { UNSAFE_Ribbon } from '../../ui/page-layout/ribbon';
@@ -8,6 +8,7 @@ export declare const asideVar = "--n_asDw";
8
8
  export declare const panelVar = "--n_pnlW";
9
9
  export declare const bannerMountedVar = "--n_bnrM";
10
10
  export declare const topNavMountedVar = "--n_tNvM";
11
+ export declare const ribbonVar = "--n_rbnW";
11
12
  /**
12
13
  * Captures the current width of the side navigation, at all times, including during resizing.
13
14
  *
@@ -22,10 +23,11 @@ export declare const contentInsetBlockStart = "calc(var(--n_bnrM, 0px) + var(--n
22
23
  export declare const UNSAFE_topNavVar = "--topNavigationHeight";
23
24
  export declare const UNSAFE_bannerVar = "--bannerHeight";
24
25
  export declare const UNSAFE_sideNavLayoutVar = "--leftSidebarWidth";
26
+ export declare const UNSAFE_ribbonVar = "--leftPanelWidth";
25
27
  export declare const UNSAFE_asideLayoutVar = "--rightSidebarWidth";
26
28
  export declare const UNSAFE_panelLayoutVar = "--rightPanelWidth";
27
29
  export declare const UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = "calc(var(--bannerHeight, 0px) + var(--topNavigationHeight, 0px))";
28
- export declare const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "var(--leftSidebarWidth, 0px)";
30
+ export declare const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "calc(var(--leftPanelWidth, 0px) + var(--leftSidebarWidth, 0px))";
29
31
  export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--rightSidebarWidth, 0px) + var(--rightPanelWidth, 0px))";
30
32
  /**
31
33
  * We define the z-indexes here so each page slot can be locally layered against each other.
@@ -33,6 +35,7 @@ export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--
33
35
  * rely on accessing them through global means.
34
36
  */
35
37
  export declare const localSlotLayers: {
38
+ ribbon: number;
36
39
  sideNavPanelSplitterFHS: number;
37
40
  topBar: number;
38
41
  banner: number;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import type { CommonSlotProps } from './types';
6
+ type RibbonProps = CommonSlotProps & {
7
+ width: string | number;
8
+ children: React.ReactNode;
9
+ };
10
+ export declare function UNSAFE_Ribbon({ children, testId, id: providedId, width }: RibbonProps): JSX.Element | null;
11
+ export {};
@@ -0,0 +1 @@
1
+ export { UNSAFE_Ribbon } from '../../ui/page-layout/ribbon';
@@ -8,6 +8,7 @@ export declare const asideVar = "--n_asDw";
8
8
  export declare const panelVar = "--n_pnlW";
9
9
  export declare const bannerMountedVar = "--n_bnrM";
10
10
  export declare const topNavMountedVar = "--n_tNvM";
11
+ export declare const ribbonVar = "--n_rbnW";
11
12
  /**
12
13
  * Captures the current width of the side navigation, at all times, including during resizing.
13
14
  *
@@ -22,10 +23,11 @@ export declare const contentInsetBlockStart = "calc(var(--n_bnrM, 0px) + var(--n
22
23
  export declare const UNSAFE_topNavVar = "--topNavigationHeight";
23
24
  export declare const UNSAFE_bannerVar = "--bannerHeight";
24
25
  export declare const UNSAFE_sideNavLayoutVar = "--leftSidebarWidth";
26
+ export declare const UNSAFE_ribbonVar = "--leftPanelWidth";
25
27
  export declare const UNSAFE_asideLayoutVar = "--rightSidebarWidth";
26
28
  export declare const UNSAFE_panelLayoutVar = "--rightPanelWidth";
27
29
  export declare const UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = "calc(var(--bannerHeight, 0px) + var(--topNavigationHeight, 0px))";
28
- export declare const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "var(--leftSidebarWidth, 0px)";
30
+ export declare const UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = "calc(var(--leftPanelWidth, 0px) + var(--leftSidebarWidth, 0px))";
29
31
  export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--rightSidebarWidth, 0px) + var(--rightPanelWidth, 0px))";
30
32
  /**
31
33
  * We define the z-indexes here so each page slot can be locally layered against each other.
@@ -33,6 +35,7 @@ export declare const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(--
33
35
  * rely on accessing them through global means.
34
36
  */
35
37
  export declare const localSlotLayers: {
38
+ ribbon: number;
36
39
  sideNavPanelSplitterFHS: number;
37
40
  topBar: number;
38
41
  banner: number;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import type { CommonSlotProps } from './types';
6
+ type RibbonProps = CommonSlotProps & {
7
+ width: string | number;
8
+ children: React.ReactNode;
9
+ };
10
+ export declare function UNSAFE_Ribbon({ children, testId, id: providedId, width }: RibbonProps): JSX.Element | null;
11
+ export {};
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "@atlaskit/navigation-system/experimental/ribbon",
3
+ "main": "../../dist/cjs/entry-points/experimental/ribbon.js",
4
+ "module": "../../dist/esm/entry-points/experimental/ribbon.js",
5
+ "module:es2019": "../../dist/es2019/entry-points/experimental/ribbon.js",
6
+ "sideEffects": [
7
+ "*.compiled.css"
8
+ ],
9
+ "types": "../../dist/types/entry-points/experimental/ribbon.d.ts",
10
+ "typesVersions": {
11
+ ">=4.5 <5.9": {
12
+ "*": [
13
+ "../../dist/types-ts4.5/entry-points/experimental/ribbon.d.ts"
14
+ ]
15
+ }
16
+ }
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/navigation-system",
3
- "version": "5.35.0",
3
+ "version": "5.37.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",
@@ -147,6 +147,9 @@
147
147
  }
148
148
  },
149
149
  "platform-feature-flags": {
150
+ "platform_dst_nav4_ribbon_slot": {
151
+ "type": "boolean"
152
+ },
150
153
  "platform_dst_nav4_fhs_feedback_1": {
151
154
  "type": "boolean"
152
155
  },