@atlaskit/navigation-system 9.4.1 → 9.4.3

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 (39) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/constellation/layout/code.mdx +2 -13
  3. package/constellation/layout/examples.mdx +12 -49
  4. package/constellation/layout/images/layout-anatomy-dark.png +0 -0
  5. package/constellation/layout/images/layout-anatomy-light.png +0 -0
  6. package/constellation/layout/images/layout-do-dark.png +0 -0
  7. package/constellation/layout/images/layout-do-light.png +0 -0
  8. package/constellation/layout/images/layout-dont-dark.png +0 -0
  9. package/constellation/layout/images/layout-dont-light.png +0 -0
  10. package/constellation/layout/images/layout-example-dark.png +0 -0
  11. package/constellation/layout/images/layout-example-light.png +0 -0
  12. package/constellation/layout/usage.mdx +11 -22
  13. package/dist/cjs/components/skip-links/skip-link.js +0 -1
  14. package/dist/cjs/ui/page-layout/aside.js +1 -1
  15. package/dist/cjs/ui/page-layout/constants.js +3 -0
  16. package/dist/cjs/ui/page-layout/root.compiled.css +1 -0
  17. package/dist/cjs/ui/page-layout/root.js +8 -3
  18. package/dist/cjs/ui/top-nav-items/nav-logo/custom-logo.js +0 -1
  19. package/dist/cjs/ui/top-nav-items/themed/color-utils/index.js +4 -0
  20. package/dist/cjs/ui/top-nav-items/themed/has-custom-theme-context.js +1 -0
  21. package/dist/es2019/components/skip-links/skip-link.js +0 -1
  22. package/dist/es2019/ui/page-layout/aside.js +1 -1
  23. package/dist/es2019/ui/page-layout/constants.js +3 -0
  24. package/dist/es2019/ui/page-layout/root.compiled.css +1 -0
  25. package/dist/es2019/ui/page-layout/root.js +8 -3
  26. package/dist/es2019/ui/top-nav-items/nav-logo/custom-logo.js +0 -1
  27. package/dist/es2019/ui/top-nav-items/themed/color-utils/index.js +4 -0
  28. package/dist/es2019/ui/top-nav-items/themed/has-custom-theme-context.js +1 -0
  29. package/dist/esm/components/skip-links/skip-link.js +0 -1
  30. package/dist/esm/ui/page-layout/aside.js +1 -1
  31. package/dist/esm/ui/page-layout/constants.js +3 -0
  32. package/dist/esm/ui/page-layout/root.compiled.css +1 -0
  33. package/dist/esm/ui/page-layout/root.js +8 -3
  34. package/dist/esm/ui/top-nav-items/nav-logo/custom-logo.js +0 -1
  35. package/dist/esm/ui/top-nav-items/themed/color-utils/index.js +4 -0
  36. package/dist/esm/ui/top-nav-items/themed/has-custom-theme-context.js +1 -0
  37. package/dist/types/ui/page-layout/aside.d.ts +1 -1
  38. package/dist/types-ts4.5/ui/page-layout/aside.d.ts +1 -1
  39. package/package.json +18 -29
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 9.4.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`f9eceea16e433`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f9eceea16e433) -
8
+ Fix `Root` safety-rail selector hiding native top-layer elements (`<dialog>` and elements with the
9
+ `popover` attribute) rendered as direct children of `Root`. These elements are now excluded from
10
+ the `display: none !important` rule so the browser can promote them into the top layer when
11
+ opened. Adds VR coverage for both cases.
12
+
13
+ ## 9.4.2
14
+
15
+ ### Patch Changes
16
+
17
+ - [`8f6296fa87d19`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8f6296fa87d19) -
18
+ Deprecate the Aside export.
19
+ - [`cc4a66306965d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cc4a66306965d) -
20
+ Cleanup feature gate `platform_dst_nav4_flyout_menu_slots_close_button`. Flyout menu slot
21
+ subcomponents (header, body, footer) and close button are now permanently enabled.
22
+ - Updated dependencies
23
+
3
24
  ## 9.4.1
4
25
 
5
26
  ### Patch Changes
@@ -17,7 +17,6 @@ props:
17
17
  - SideNavFooter
18
18
  - Main
19
19
  - MainStickyHeader
20
- - Aside
21
20
  - Panel
22
21
  - PanelSplitter
23
22
  - SideNavToggleButton
@@ -103,20 +102,10 @@ The sticky header of the main layout area.
103
102
 
104
103
  <TSMorphProps exportName="MainStickyHeader" packageName="@atlaskit/navigation-system" />
105
104
 
106
- ### Aside
107
-
108
- <SectionMessage appearance="warning" title="Caution">
109
- We are planning on deprecating the Aside component. Please use Panel instead.
110
- </SectionMessage>
111
-
112
- The Aside layout area is rendered to the right (inline end) of the Main area.
113
-
114
- <TSMorphProps exportName="Aside" packageName="@atlaskit/navigation-system" />
115
-
116
105
  ### Panel
117
106
 
118
- The Panel layout area is rendered to the right (inline end) of the Main area, or the Aside area if
119
- it is present. On small viewports, the Panel slot will become an overlay.
107
+ The Panel layout area is rendered to the right (inline end) of the Main area. On small viewports,
108
+ the Panel slot will become an overlay.
120
109
 
121
110
  <TSMorphProps exportName="Panel" packageName="@atlaskit/navigation-system" />
122
111
 
@@ -97,7 +97,7 @@ See the [custom theming](/components/navigation-system/layout/custom-theming) ta
97
97
  - Use the [side nav slots](#side-nav-slots) to position content within the side nav.
98
98
  - The side nav is [collapsable and expandable](#side-nav-collapseexpand),
99
99
  [resizable](#side-nav-resizing), [responsive](#side-nav-responsive), and offers
100
- [flyout](#side-nav-flyout) behaviour.
100
+ [flyout](#side-nav-flyout) behavior.
101
101
 
102
102
  [View interactive example](https://go.atlassian.com/nav4-interactive-example)
103
103
 
@@ -216,43 +216,9 @@ expand to fill available space.
216
216
 
217
217
  [View interactive example](https://go.atlassian.com/nav4-interactive-example)
218
218
 
219
- ### Aside
220
-
221
- <SectionMessage appearance="warning" title="Caution">
222
- We plan to deprecate aside. Use panel instead.
223
- </SectionMessage>
224
-
225
- The aside area is rendered to the right of the main area.
226
-
227
- - The default width of the aside is 330px, and it is
228
- [resizable](/components/navigation-system/layout/examples#aside-resizing) and
229
- [responsive](/components/navigation-system/layout/examples#aside-responsive).
230
- - On large viewports the aside can be fixed, meaning it will have its own scroll container and not
231
- use the body scroll.
232
- - On small viewports, the element will always use body scroll, to make it easier to scroll the page
233
- when the content is tall.
234
-
235
- [View interactive example](https://go.atlassian.com/nav4-interactive-example)
236
-
237
- #### Aside resizing
238
-
239
- You can optionally render a [panel splitter](#resizable-areas) as a child to make the aside
240
- resizable.
241
-
242
- - The aside is resized using the drag handle. When you hover over the drag handle, the mouse pointer
243
- changes to a resize cursor.
244
- - The aside can be resized to a minimum width of 120px and a maximum width equal to 50% of the
245
- viewport width.
246
- - Persist the chosen width across page refreshes by providing it to the `defaultWidth` prop.
247
-
248
- #### Aside responsive
249
-
250
- At `s`, `xs`, and `xxs` breakpoints (i.e. viewports smaller than 1024px), the aside moves below the
251
- main area, and conforms to main width and behaviour.
252
-
253
219
  ### Panel
254
220
 
255
- The panel area is rendered to the right of the main and aside areas.
221
+ The panel area is rendered to the right of the main area.
256
222
 
257
223
  - The default width of the panel is 365px, which can be modified using the `defaultWidth` prop.
258
224
  - The panel is
@@ -280,8 +246,7 @@ resizable.
280
246
 
281
247
  #### Panel responsive
282
248
 
283
- At `m` breakpoints (between 1024-1440px), the panel will overlay the aside area. At `s` breakpoints
284
- and below (less than 1024px) it will start to overlay the main area.
249
+ At `s` breakpoints and below (less than 1024px) the panel will start to overlay the main area.
285
250
 
286
251
  ## Resizable areas
287
252
 
@@ -290,7 +255,6 @@ Render a `PanelSplitter` in a layout area to make it resizable.
290
255
  Resizing is supported for the following areas:
291
256
 
292
257
  - [Side nav](/components/navigation-system/layout/examples#side-nav): Use `SideNavPanelSplitter`
293
- - [Aside](/components/navigation-system/layout/examples#aside): Use `PanelSplitter`
294
258
  - [Panel](/components/navigation-system/layout/examples#panel): Use `PanelSplitter`
295
259
 
296
260
  [View interactive example](https://go.atlassian.com/nav4-interactive-example)
@@ -298,22 +262,21 @@ Resizing is supported for the following areas:
298
262
  | Area | Default width | Min width | Max width |
299
263
  | --------- | ------------------ | --------------------- | ------------------------------------------------------ |
300
264
  | `SideNav` | 320px | 240px | 50% of viewport width |
301
- | `Aside` | 330px (modifiable) | 120px | 50% of viewport width |
302
265
  | `Panel` | 365px (modifiable) | Same as default width | 50% of content area (viewport minus the side nav area) |
303
266
 
304
267
  ## Responsive
305
268
 
306
- Layout areas respond to the viewport size. See default behaviour below, or the
269
+ Layout areas respond to the viewport size. See default behavior below, or the
307
270
  [interactive example](https://go.atlassian.com/nav4-interactive-example).
308
271
 
309
- | Breakpoint | Viewport | Side nav | Aside | Panel |
310
- | ---------- | ------------- | --------------------------- | ------------ | -------------------------------------------------------------------- |
311
- | `xxs` | 320 - 479px | Collapsed; opens as overlay | Below main | Collapsed; opens as overlay (over the main area) |
312
- | `xs` | 480 - 767px | Collapsed; opens as overlay | Below main | Collapsed; opens as overlay (over the main area) |
313
- | `s` | 768 - 1023px | Collapsed; opens as overlay | Below main | Collapsed; opens as overlay (over the main area) |
314
- | `m` | 1024 - 1439px | Expanded (inline) | Next to main | Collapsed; opens inline (or as overlay if the aside area is present) |
315
- | `l` | 1440 - 1767px | Expanded (inline) | Next to main | Collapsed; Opens inline |
316
- | `xl` | 1768+px | Expanded (inline) | Next to main | Collapsed; Opens inline |
272
+ | Breakpoint | Viewport | Side nav | Panel |
273
+ | ---------- | ------------- | --------------------------- | ---------------- |
274
+ | `xxs` | 320 - 479px | Collapsed; opens as overlay | Opens as overlay |
275
+ | `xs` | 480 - 767px | Collapsed; opens as overlay | Opens as overlay |
276
+ | `s` | 768 - 1023px | Collapsed; opens as overlay | Opens as overlay |
277
+ | `m` | 1024 - 1439px | Expanded (inline) | Opens inline |
278
+ | `l` | 1440 - 1767px | Expanded (inline) | Opens inline |
279
+ | `xl` | 1768+px | Expanded (inline) | Opens inline |
317
280
 
318
281
  ## Custom skip links
319
282
 
@@ -71,29 +71,20 @@ When applying components to the navigational areas,
71
71
  <li>
72
72
  <strong>Main:</strong> Use for the page content. Expands to fill available space.
73
73
  </li>
74
- <li>
75
- <strong>Aside:</strong> Optional. Use to display supporting or supplementary content. Is
76
- resizable. <em>We plan to deprecate aside, please use panel instead.</em>
77
- </li>
78
74
  <li>
79
75
  <strong>Panel:</strong> Optional. Use to display supporting or supplementary content. Is
80
76
  resizable and collapsible.
81
77
  </li>
82
78
  </ol>
83
79
 
84
- ### The difference between aside, panel and modal dialog
85
-
86
- <SectionMessage appearance="warning" title="Caution">
87
- We plan to deprecate aside. Use panel instead.
88
- </SectionMessage>
80
+ ### The difference between panel and modal dialog
89
81
 
90
- The main difference between aside, panel and modal dialog is their behaviours:
82
+ The main difference between panel and modal dialog is their behaviors:
91
83
 
92
- - **Aside** is not collapsible, while **panel** can be collapsible.
93
- - **Panel** and **aside** present content alongside the **main** area, while a **modal dialog**
94
- appears in a layer above the page.
95
- - On small viewports (1024px and below), the **panel** becomes an overlay, while the **aside** moves
96
- below the **main** area.
84
+ - **Panel** presents content alongside the **main** area, while a **modal dialog** appears in a
85
+ layer above the page.
86
+ - **Panel** can be collapsed and resized. On small viewports (1024px and below), the **panel**
87
+ becomes an overlay.
97
88
 
98
89
  #### Usage guidance
99
90
 
@@ -102,15 +93,13 @@ The main difference between aside, panel and modal dialog is their behaviours:
102
93
  connected to their primary task.
103
94
  - Use a **modal dialog** when you need the user to focus on a specific task, such as making a
104
95
  decision or completing an action, before they can return to their primary task.
105
- - Don’t use aside for new experiences. It is planned for deprecation.
106
96
 
107
97
  ## Accessibility
108
98
 
109
99
  - Always place slots in this order as direct children of the root: banner, top nav, side nav, main,
110
- aside, panel. This determines the keyboard tab order, screen reader reading order, and skip link
111
- order.
112
- - Provide a unique, meaningful `label` for side nav, aside, panel, and top nav end. The label is
113
- exposed as the landmark's accessible name. Don't repeat the landmark's role in the label.
100
+ panel. This determines the keyboard tab order, screen reader reading order, and skip link order.
101
+ - Provide a unique, meaningful `label` for side nav, panel, and top nav end. The label is exposed as
102
+ the landmark's accessible name. Don't repeat the landmark's role in the label.
114
103
  - Slots provide landmark roles automatically. Don't add or duplicate landmark roles inside them.
115
104
  - Use custom skip links sparingly. Too many skip links makes the skip links menu noisy. Consider the
116
105
  utility of each one before adding it.
@@ -137,11 +126,11 @@ The main difference between aside, panel and modal dialog is their behaviours:
137
126
  image={{
138
127
  url: layoutDontLight,
139
128
  urlDarkMode: layoutDontDark,
140
- alt: 'A layout with a grid overlay on the Main area, but also on the Side nav, Aside and Panel areas.',
129
+ alt: 'A layout with a grid overlay on the Main area, but also on the Side nav and Panel areas.',
141
130
  }}
142
131
  isFullWidth
143
132
  >
144
- Don't include side nav, aside or panel areas as part of your grid.
133
+ Don't include side nav or panel areas as part of your grid.
145
134
  </DoDont>
146
135
  </DoDontGrid>
147
136
 
@@ -13,7 +13,6 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
13
  var _compiled = require("@atlaskit/primitives/compiled");
14
14
  var _focusElement = require("./focus-element");
15
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
17
16
  var styles = {
18
17
  skipLinkListItem: "_1pfhze3t",
19
18
  skipLinkListItemNew: "_1rjcu2gc"
@@ -63,7 +63,7 @@ var fallbackDefaultWidth = 330;
63
63
  *
64
64
  * You can optionally render a `PanelSplitter` as a child to make the aside area resizable.
65
65
  *
66
- * Note: We plan to deprecate the Aside component. Please use Panel instead.
66
+ * @deprecated Use `Panel` instead.
67
67
  */
68
68
  function Aside(_ref) {
69
69
  var children = _ref.children,
@@ -25,7 +25,9 @@ var ribbonVar = exports.ribbonVar = '--n_rbnW';
25
25
  */
26
26
  var sideNavLiveWidthVar = exports.sideNavLiveWidthVar = '--n_sNvlw';
27
27
  var sideNavPanelSplitterId = exports.sideNavPanelSplitterId = Symbol('SideNav PanelSplitter');
28
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
28
29
  var asidePanelSplitterId = exports.asidePanelSplitterId = Symbol('Aside PanelSplitter');
30
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
29
31
  var panelPanelSplitterId = exports.panelPanelSplitterId = Symbol('Panel PanelSplitter');
30
32
 
31
33
  // We aren't using template literals here because Compiled can't compiled them in platform ATM.
@@ -55,6 +57,7 @@ var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_EN
55
57
  * For globally defined values such as flag, modal, etc, we can continue to
56
58
  * rely on accessing them through global means.
57
59
  */
60
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
58
61
  var localSlotLayers = exports.localSlotLayers = {
59
62
  ribbon: 4,
60
63
  // The side nav panel splitter is layered above the top nav when FHS is enabled.
@@ -2,6 +2,7 @@
2
2
  ._1e0c11p5{display:grid}
3
3
  ._1lmcq9em{grid-template-areas:"banner" "top-bar" "main" "aside"}
4
4
  ._1tke1kxc{min-height:100vh}
5
+ ._1tvnagmp >:not([data-layout-slot]):not(dialog):not([popover]){display:none!important}
5
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
6
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
7
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}}
@@ -23,7 +23,9 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
23
23
  // ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
24
24
  var gridRootId = exports.gridRootId = 'unsafe-design-system-page-layout-root';
25
25
  var styles = {
26
- root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
26
+ root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
27
+ safetyRail: "_1ciragmp",
28
+ safetyRailWithTopLayer: "_1tvnagmp"
27
29
  };
28
30
 
29
31
  /**
@@ -47,9 +49,12 @@ function Root(_ref) {
47
49
  (0, _react.useEffect)(function () {
48
50
  if (process.env.NODE_ENV !== 'production') {
49
51
  var IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
52
+ var topLayerGateOn = (0, _platformFeatureFlags.fg)('platform-dst-top-layer');
50
53
  if (ref.current) {
51
54
  Array.from(ref.current.children).forEach(function (child) {
52
- if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot')) {
55
+ // Top-layer elements are allowed as direct children when the gate is on.
56
+ var isTopLayerElement = topLayerGateOn && (child.tagName.toLowerCase() === 'dialog' || child.hasAttribute('popover'));
57
+ if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot') && !isTopLayerElement) {
53
58
  // eslint-disable-next-line no-console
54
59
  console.error("Page Layout Error\n\nThis element has been forcibly hidden:\n\n", child, "\n\nAn element was rendered as a child of the page layout root that isn't a page layout component! Resolve this error by moving it into a page layout component.\n\nThis message will not be displayed in production.\n");
55
60
  }
@@ -69,7 +74,7 @@ function Root(_ref) {
69
74
  testId: testId
70
75
  }, /*#__PURE__*/_react.default.createElement("div", {
71
76
  ref: ref,
72
- className: (0, _runtime.ax)([styles.root, xcss]),
77
+ className: (0, _runtime.ax)([styles.root, (0, _platformFeatureFlags.fg)('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
73
78
  id: gridRootId,
74
79
  "data-testid": testId
75
80
  }, children)))))))));
@@ -16,7 +16,6 @@ var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
16
16
  var _hasCustomThemeContext = require("../themed/has-custom-theme-context");
17
17
  var _logoRenderer = require("./logo-renderer");
18
18
  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); }
19
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
20
19
  var anchorStyles = {
21
20
  root: "_2rkofajl _1e0c1txw _4cvr1h6o _4t3izwfg",
22
21
  customLogoBorderRadius: "_2rkofajl",
@@ -69,6 +69,7 @@ var flipLuminance = 0.179129;
69
69
  function isLight(color) {
70
70
  return relativeLuminanceW3C(color) >= flipLuminance;
71
71
  }
72
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
72
73
  function getColorMode(backgroundColor) {
73
74
  if (relativeLuminanceW3C(backgroundColor) >= flipLuminance) {
74
75
  return 'light';
@@ -93,6 +94,8 @@ var textColor = {
93
94
  }
94
95
  }
95
96
  };
97
+
98
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
96
99
  function getTextColor(backgroundColor) {
97
100
  var colorMode = getColorMode(backgroundColor);
98
101
  return textColor[colorMode];
@@ -107,6 +110,7 @@ function getTextColor(backgroundColor) {
107
110
  *
108
111
  * This has been simplified to assume the background has no transparency.
109
112
  */
113
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
110
114
  function simpleAlphaComposite(_ref2) {
111
115
  var background = _ref2.background,
112
116
  foreground = _ref2.foreground;
@@ -14,6 +14,7 @@ var HasCustomThemeContext = exports.HasCustomThemeContext = /*#__PURE__*/(0, _re
14
14
  /**
15
15
  * Returns whether a custom theme is being applied.
16
16
  */
17
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
17
18
  function useHasCustomTheme() {
18
19
  return (0, _react.useContext)(HasCustomThemeContext);
19
20
  }
@@ -3,7 +3,6 @@ import "./skip-link.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useCallback } from 'react';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
6
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
7
6
  import { Anchor } from '@atlaskit/primitives/compiled';
8
7
  import { focusElement } from './focus-element';
9
8
  const styles = {
@@ -52,7 +52,7 @@ const fallbackDefaultWidth = 330;
52
52
  *
53
53
  * You can optionally render a `PanelSplitter` as a child to make the aside area resizable.
54
54
  *
55
- * Note: We plan to deprecate the Aside component. Please use Panel instead.
55
+ * @deprecated Use `Panel` instead.
56
56
  */
57
57
  export function Aside({
58
58
  children,
@@ -19,7 +19,9 @@ export const ribbonVar = '--n_rbnW';
19
19
  */
20
20
  export const sideNavLiveWidthVar = '--n_sNvlw';
21
21
  export const sideNavPanelSplitterId = Symbol('SideNav PanelSplitter');
22
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
22
23
  export const asidePanelSplitterId = Symbol('Aside PanelSplitter');
24
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
23
25
  export const panelPanelSplitterId = Symbol('Panel PanelSplitter');
24
26
 
25
27
  // We aren't using template literals here because Compiled can't compiled them in platform ATM.
@@ -49,6 +51,7 @@ export const UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = `calc(var(${UNSAFE_a
49
51
  * For globally defined values such as flag, modal, etc, we can continue to
50
52
  * rely on accessing them through global means.
51
53
  */
54
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
52
55
  export const localSlotLayers = {
53
56
  ribbon: 4,
54
57
  // The side nav panel splitter is layered above the top nav when FHS is enabled.
@@ -2,6 +2,7 @@
2
2
  ._1e0c11p5{display:grid}
3
3
  ._1lmcq9em{grid-template-areas:"banner" "top-bar" "main" "aside"}
4
4
  ._1tke1kxc{min-height:100vh}
5
+ ._1tvnagmp >:not([data-layout-slot]):not(dialog):not([popover]){display:none!important}
5
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
6
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
7
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}}
@@ -15,7 +15,9 @@ import { SideNavVisibilityProvider } from './side-nav/visibility-provider';
15
15
  // ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
16
16
  export const gridRootId = 'unsafe-design-system-page-layout-root';
17
17
  const styles = {
18
- root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
18
+ root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
19
+ safetyRail: "_1ciragmp",
20
+ safetyRailWithTopLayer: "_1tvnagmp"
19
21
  };
20
22
 
21
23
  /**
@@ -36,9 +38,12 @@ export function Root({
36
38
  useEffect(() => {
37
39
  if (process.env.NODE_ENV !== 'production') {
38
40
  const IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
41
+ const topLayerGateOn = fg('platform-dst-top-layer');
39
42
  if (ref.current) {
40
43
  Array.from(ref.current.children).forEach(child => {
41
- if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot')) {
44
+ // Top-layer elements are allowed as direct children when the gate is on.
45
+ const isTopLayerElement = topLayerGateOn && (child.tagName.toLowerCase() === 'dialog' || child.hasAttribute('popover'));
46
+ if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot') && !isTopLayerElement) {
42
47
  // eslint-disable-next-line no-console
43
48
  console.error(`Page Layout Error
44
49
 
@@ -67,7 +72,7 @@ This message will not be displayed in production.
67
72
  testId: testId
68
73
  }, /*#__PURE__*/React.createElement("div", {
69
74
  ref: ref,
70
- className: ax([styles.root, xcss]),
75
+ className: ax([styles.root, fg('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
71
76
  id: gridRootId,
72
77
  "data-testid": testId
73
78
  }, children)))))))));
@@ -4,7 +4,6 @@ import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useEffect, useRef } from 'react';
5
5
  import { cx } from '@compiled/react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
8
7
  import { Anchor } from '@atlaskit/primitives/compiled';
9
8
  import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
10
9
  import { useHasCustomTheme } from '../themed/has-custom-theme-context';
@@ -61,6 +61,7 @@ const flipLuminance = 0.179129;
61
61
  export function isLight(color) {
62
62
  return relativeLuminanceW3C(color) >= flipLuminance;
63
63
  }
64
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
64
65
  export function getColorMode(backgroundColor) {
65
66
  if (relativeLuminanceW3C(backgroundColor) >= flipLuminance) {
66
67
  return 'light';
@@ -85,6 +86,8 @@ const textColor = {
85
86
  }
86
87
  }
87
88
  };
89
+
90
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
88
91
  export function getTextColor(backgroundColor) {
89
92
  const colorMode = getColorMode(backgroundColor);
90
93
  return textColor[colorMode];
@@ -99,6 +102,7 @@ export function getTextColor(backgroundColor) {
99
102
  *
100
103
  * This has been simplified to assume the background has no transparency.
101
104
  */
105
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
102
106
  export function simpleAlphaComposite({
103
107
  background,
104
108
  foreground
@@ -8,6 +8,7 @@ export const HasCustomThemeContext = /*#__PURE__*/createContext(false);
8
8
  /**
9
9
  * Returns whether a custom theme is being applied.
10
10
  */
11
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
11
12
  export function useHasCustomTheme() {
12
13
  return useContext(HasCustomThemeContext);
13
14
  }
@@ -3,7 +3,6 @@ import "./skip-link.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useCallback } from 'react';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
6
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
7
6
  import { Anchor } from '@atlaskit/primitives/compiled';
8
7
  import { focusElement } from './focus-element';
9
8
  var styles = {
@@ -54,7 +54,7 @@ var fallbackDefaultWidth = 330;
54
54
  *
55
55
  * You can optionally render a `PanelSplitter` as a child to make the aside area resizable.
56
56
  *
57
- * Note: We plan to deprecate the Aside component. Please use Panel instead.
57
+ * @deprecated Use `Panel` instead.
58
58
  */
59
59
  export function Aside(_ref) {
60
60
  var children = _ref.children,
@@ -19,7 +19,9 @@ export var ribbonVar = '--n_rbnW';
19
19
  */
20
20
  export var sideNavLiveWidthVar = '--n_sNvlw';
21
21
  export var sideNavPanelSplitterId = Symbol('SideNav PanelSplitter');
22
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
22
23
  export var asidePanelSplitterId = Symbol('Aside PanelSplitter');
24
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
23
25
  export var panelPanelSplitterId = Symbol('Panel PanelSplitter');
24
26
 
25
27
  // We aren't using template literals here because Compiled can't compiled them in platform ATM.
@@ -49,6 +51,7 @@ export var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = "calc(var(".concat(UNS
49
51
  * For globally defined values such as flag, modal, etc, we can continue to
50
52
  * rely on accessing them through global means.
51
53
  */
54
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
52
55
  export var localSlotLayers = {
53
56
  ribbon: 4,
54
57
  // The side nav panel splitter is layered above the top nav when FHS is enabled.
@@ -2,6 +2,7 @@
2
2
  ._1e0c11p5{display:grid}
3
3
  ._1lmcq9em{grid-template-areas:"banner" "top-bar" "main" "aside"}
4
4
  ._1tke1kxc{min-height:100vh}
5
+ ._1tvnagmp >:not([data-layout-slot]):not(dialog):not([popover]){display:none!important}
5
6
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
6
7
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
7
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}}
@@ -15,7 +15,9 @@ import { SideNavVisibilityProvider } from './side-nav/visibility-provider';
15
15
  // ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
16
16
  export var gridRootId = 'unsafe-design-system-page-layout-root';
17
17
  var styles = {
18
- root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _1ciragmp _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco"
18
+ root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
19
+ safetyRail: "_1ciragmp",
20
+ safetyRailWithTopLayer: "_1tvnagmp"
19
21
  };
20
22
 
21
23
  /**
@@ -39,9 +41,12 @@ export function Root(_ref) {
39
41
  useEffect(function () {
40
42
  if (process.env.NODE_ENV !== 'production') {
41
43
  var IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
44
+ var topLayerGateOn = fg('platform-dst-top-layer');
42
45
  if (ref.current) {
43
46
  Array.from(ref.current.children).forEach(function (child) {
44
- if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot')) {
47
+ // Top-layer elements are allowed as direct children when the gate is on.
48
+ var isTopLayerElement = topLayerGateOn && (child.tagName.toLowerCase() === 'dialog' || child.hasAttribute('popover'));
49
+ if (!IGNORED_ELEMENTS.includes(child.tagName) && !child.hasAttribute('data-layout-slot') && !isTopLayerElement) {
45
50
  // eslint-disable-next-line no-console
46
51
  console.error("Page Layout Error\n\nThis element has been forcibly hidden:\n\n", child, "\n\nAn element was rendered as a child of the page layout root that isn't a page layout component! Resolve this error by moving it into a page layout component.\n\nThis message will not be displayed in production.\n");
47
52
  }
@@ -61,7 +66,7 @@ export function Root(_ref) {
61
66
  testId: testId
62
67
  }, /*#__PURE__*/React.createElement("div", {
63
68
  ref: ref,
64
- className: ax([styles.root, xcss]),
69
+ className: ax([styles.root, fg('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
65
70
  id: gridRootId,
66
71
  "data-testid": testId
67
72
  }, children)))))))));
@@ -4,7 +4,6 @@ import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useEffect, useRef } from 'react';
5
5
  import { cx } from '@compiled/react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
- // eslint-disable-next-line @atlaskit/design-system/no-emotion-primitives -- to be migrated to @atlaskit/primitives/compiled – go/akcss
8
7
  import { Anchor } from '@atlaskit/primitives/compiled';
9
8
  import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
10
9
  import { useHasCustomTheme } from '../themed/has-custom-theme-context';
@@ -60,6 +60,7 @@ var flipLuminance = 0.179129;
60
60
  export function isLight(color) {
61
61
  return relativeLuminanceW3C(color) >= flipLuminance;
62
62
  }
63
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
63
64
  export function getColorMode(backgroundColor) {
64
65
  if (relativeLuminanceW3C(backgroundColor) >= flipLuminance) {
65
66
  return 'light';
@@ -84,6 +85,8 @@ var textColor = {
84
85
  }
85
86
  }
86
87
  };
88
+
89
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
87
90
  export function getTextColor(backgroundColor) {
88
91
  var colorMode = getColorMode(backgroundColor);
89
92
  return textColor[colorMode];
@@ -98,6 +101,7 @@ export function getTextColor(backgroundColor) {
98
101
  *
99
102
  * This has been simplified to assume the background has no transparency.
100
103
  */
104
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
101
105
  export function simpleAlphaComposite(_ref2) {
102
106
  var background = _ref2.background,
103
107
  foreground = _ref2.foreground;
@@ -8,6 +8,7 @@ export var HasCustomThemeContext = /*#__PURE__*/createContext(false);
8
8
  /**
9
9
  * Returns whether a custom theme is being applied.
10
10
  */
11
+ // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
11
12
  export function useHasCustomTheme() {
12
13
  return useContext(HasCustomThemeContext);
13
14
  }
@@ -5,7 +5,7 @@ import type { CommonSlotProps } from './types';
5
5
  *
6
6
  * You can optionally render a `PanelSplitter` as a child to make the aside area resizable.
7
7
  *
8
- * Note: We plan to deprecate the Aside component. Please use Panel instead.
8
+ * @deprecated Use `Panel` instead.
9
9
  */
10
10
  export declare function Aside({ children, xcss, defaultWidth: defaultWidthProp, label, skipLinkLabel, testId, id: providedId, }: CommonSlotProps & {
11
11
  /**
@@ -5,7 +5,7 @@ import type { CommonSlotProps } from './types';
5
5
  *
6
6
  * You can optionally render a `PanelSplitter` as a child to make the aside area resizable.
7
7
  *
8
- * Note: We plan to deprecate the Aside component. Please use Panel instead.
8
+ * @deprecated Use `Panel` instead.
9
9
  */
10
10
  export declare function Aside({ children, xcss, defaultWidth: defaultWidthProp, label, skipLinkLabel, testId, id: providedId, }: CommonSlotProps & {
11
11
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/navigation-system",
3
- "version": "9.4.1",
3
+ "version": "9.4.3",
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",
@@ -35,16 +35,10 @@
35
35
  "website": {
36
36
  "name": "Navigation system",
37
37
  "category": "Navigation",
38
- "status": {
39
- "type": "beta"
40
- },
41
38
  "subPages": [
42
39
  {
43
40
  "title": "Layout",
44
41
  "id": "layout",
45
- "status": {
46
- "type": "beta"
47
- },
48
42
  "sortKey": 1
49
43
  },
50
44
  {
@@ -55,9 +49,6 @@
55
49
  {
56
50
  "title": "Top nav items",
57
51
  "id": "top-nav-items",
58
- "status": {
59
- "type": "beta"
60
- },
61
52
  "sortKey": 3
62
53
  }
63
54
  ]
@@ -70,23 +61,23 @@
70
61
  }
71
62
  },
72
63
  "dependencies": {
73
- "@atlaskit/analytics-next": "^11.2.0",
64
+ "@atlaskit/analytics-next": "^11.3.0",
74
65
  "@atlaskit/app-provider": "^4.3.0",
75
- "@atlaskit/avatar": "^25.14.0",
66
+ "@atlaskit/avatar": "^25.15.0",
76
67
  "@atlaskit/button": "^23.11.0",
77
68
  "@atlaskit/css": "^0.19.0",
78
69
  "@atlaskit/ds-lib": "^7.0.0",
79
- "@atlaskit/icon": "^35.0.0",
80
- "@atlaskit/layering": "^3.7.0",
81
- "@atlaskit/logo": "^20.1.0",
70
+ "@atlaskit/icon": "^35.4.0",
71
+ "@atlaskit/layering": "^3.8.0",
72
+ "@atlaskit/logo": "^20.2.0",
82
73
  "@atlaskit/platform-feature-flags": "^1.1.0",
83
74
  "@atlaskit/platform-feature-flags-react": "^0.5.0",
84
- "@atlaskit/popup": "^4.19.0",
75
+ "@atlaskit/popup": "^4.24.0",
85
76
  "@atlaskit/pragmatic-drag-and-drop": "^1.8.0",
86
77
  "@atlaskit/primitives": "^19.0.0",
87
- "@atlaskit/side-nav-items": "^1.13.0",
88
- "@atlaskit/tokens": "^13.0.0",
89
- "@atlaskit/tooltip": "^22.2.0",
78
+ "@atlaskit/side-nav-items": "^1.14.0",
79
+ "@atlaskit/tokens": "^13.3.0",
80
+ "@atlaskit/tooltip": "^22.6.0",
90
81
  "@atlaskit/visually-hidden": "^3.1.0",
91
82
  "@babel/runtime": "^7.0.0",
92
83
  "@compiled/react": "^0.20.0",
@@ -102,18 +93,18 @@
102
93
  "@af/accessibility-testing": "workspace:^",
103
94
  "@af/integration-testing": "workspace:^",
104
95
  "@af/visual-regression": "workspace:^",
105
- "@atlaskit/badge": "^18.6.0",
96
+ "@atlaskit/badge": "^18.7.0",
106
97
  "@atlaskit/banner": "^14.1.0",
107
98
  "@atlaskit/breadcrumbs": "^16.1.0",
108
- "@atlaskit/dropdown-menu": "^16.8.0",
109
- "@atlaskit/flag": "^17.11.0",
99
+ "@atlaskit/dropdown-menu": "^16.10.0",
100
+ "@atlaskit/flag": "^17.13.0",
110
101
  "@atlaskit/form": "^15.5.0",
111
102
  "@atlaskit/heading": "^5.4.0",
112
103
  "@atlaskit/inline-dialog": "^18.1.0",
113
104
  "@atlaskit/link": "^3.4.0",
114
105
  "@atlaskit/lozenge": "^13.8.0",
115
106
  "@atlaskit/menu": "^8.5.0",
116
- "@atlaskit/modal-dialog": "^15.0.0",
107
+ "@atlaskit/modal-dialog": "^15.2.0",
117
108
  "@atlaskit/onboarding": "^14.6.0",
118
109
  "@atlaskit/page-header": "^12.2.0",
119
110
  "@atlaskit/page-layout": "^4.3.0",
@@ -121,11 +112,11 @@
121
112
  "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.0",
122
113
  "@atlaskit/select": "^21.12.0",
123
114
  "@atlaskit/skeleton": "^2.1.0",
124
- "@atlaskit/spotlight": "^0.14.0",
115
+ "@atlaskit/spotlight": "^0.15.0",
125
116
  "@atlaskit/textfield": "^8.3.0",
126
- "@atlaskit/top-layer": "^0.6.0",
117
+ "@atlaskit/top-layer": "^0.16.0",
127
118
  "@atlassian/feature-flags-test-utils": "^1.1.0",
128
- "@atlassian/gemini": "^1.45.0",
119
+ "@atlassian/gemini": "^1.46.0",
129
120
  "@atlassian/react-compiler-gating": "workspace:^",
130
121
  "@atlassian/search-dialog": "^10.3.0",
131
122
  "@atlassian/ssr-tests": "workspace:^",
@@ -135,6 +126,7 @@
135
126
  "@testing-library/react": "^16.3.0",
136
127
  "@testing-library/user-event": "^14.4.3",
137
128
  "raf-stub": "^2.0.1",
129
+ "react": "^18.2.0",
138
130
  "react-dom": "^18.2.0"
139
131
  },
140
132
  "techstack": {
@@ -174,9 +166,6 @@
174
166
  "platform-dst-shape-theme-default": {
175
167
  "type": "boolean"
176
168
  },
177
- "platform_dst_nav4_flyout_menu_slots_close_button": {
178
- "type": "boolean"
179
- },
180
169
  "platform_dst_nav4_custom_theming_fhs_1": {
181
170
  "type": "boolean"
182
171
  },