@atlaskit/page-layout 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +3 -3
  3. package/__perf__/utils/perf-example.tsx +24 -17
  4. package/__perf__/utils/product-integration/NotificationsPopup.tsx +6 -5
  5. package/__perf__/utils/product-integration/SampleFooter.tsx +13 -13
  6. package/dist/cjs/common/hooks/index.js +23 -0
  7. package/dist/cjs/common/hooks/use-is-sidebar-collapsing.js +46 -0
  8. package/dist/cjs/common/hooks/use-is-sidebar-dragging.js +46 -0
  9. package/dist/cjs/components/resize-control/grab-area.js +42 -4
  10. package/dist/cjs/components/resize-control/index.js +22 -20
  11. package/dist/cjs/components/resize-control/resize-button.js +59 -4
  12. package/dist/cjs/components/resize-control/shadow.js +48 -0
  13. package/dist/cjs/components/skip-links/skip-link-components.js +49 -5
  14. package/dist/cjs/components/slots/banner.js +27 -11
  15. package/dist/cjs/components/slots/content.js +9 -2
  16. package/dist/cjs/components/slots/internal/left-sidebar-inner.js +65 -0
  17. package/dist/cjs/components/slots/internal/left-sidebar-outer.js +100 -0
  18. package/dist/cjs/components/slots/internal/resizable-children-wrapper.js +63 -0
  19. package/dist/cjs/components/slots/internal/slot-focus-ring.js +61 -0
  20. package/dist/cjs/components/slots/left-panel.js +26 -11
  21. package/dist/cjs/components/slots/left-sidebar-without-resize.js +10 -10
  22. package/dist/cjs/components/slots/left-sidebar.js +21 -16
  23. package/dist/cjs/components/slots/main.js +53 -6
  24. package/dist/cjs/components/slots/page-layout.js +10 -3
  25. package/dist/cjs/components/slots/right-panel.js +26 -11
  26. package/dist/cjs/components/slots/right-sidebar.js +57 -13
  27. package/dist/cjs/components/slots/top-navigation.js +27 -11
  28. package/dist/cjs/controllers/sidebar-resize-context.js +2 -1
  29. package/dist/cjs/controllers/sidebar-resize-controller.js +10 -5
  30. package/dist/cjs/version.json +1 -1
  31. package/dist/es2019/common/hooks/index.js +2 -0
  32. package/dist/es2019/common/hooks/use-is-sidebar-collapsing.js +29 -0
  33. package/dist/es2019/common/hooks/use-is-sidebar-dragging.js +29 -0
  34. package/dist/es2019/components/resize-control/grab-area.js +46 -4
  35. package/dist/es2019/components/resize-control/index.js +12 -9
  36. package/dist/es2019/components/resize-control/resize-button.js +61 -4
  37. package/dist/es2019/components/resize-control/shadow.js +43 -0
  38. package/dist/es2019/components/skip-links/skip-link-components.js +47 -5
  39. package/dist/es2019/components/slots/banner.js +21 -7
  40. package/dist/es2019/components/slots/content.js +8 -2
  41. package/dist/es2019/components/slots/internal/left-sidebar-inner.js +52 -0
  42. package/dist/es2019/components/slots/internal/left-sidebar-outer.js +79 -0
  43. package/dist/es2019/components/slots/internal/resizable-children-wrapper.js +49 -0
  44. package/dist/es2019/components/slots/internal/slot-focus-ring.js +50 -0
  45. package/dist/es2019/components/slots/left-panel.js +20 -7
  46. package/dist/es2019/components/slots/left-sidebar-without-resize.js +10 -11
  47. package/dist/es2019/components/slots/left-sidebar.js +20 -17
  48. package/dist/es2019/components/slots/main.js +46 -6
  49. package/dist/es2019/components/slots/page-layout.js +15 -3
  50. package/dist/es2019/components/slots/right-panel.js +20 -7
  51. package/dist/es2019/components/slots/right-sidebar.js +50 -8
  52. package/dist/es2019/components/slots/top-navigation.js +21 -7
  53. package/dist/es2019/controllers/sidebar-resize-context.js +2 -1
  54. package/dist/es2019/controllers/sidebar-resize-controller.js +10 -5
  55. package/dist/es2019/version.json +1 -1
  56. package/dist/esm/common/hooks/index.js +2 -0
  57. package/dist/esm/common/hooks/use-is-sidebar-collapsing.js +34 -0
  58. package/dist/esm/common/hooks/use-is-sidebar-dragging.js +34 -0
  59. package/dist/esm/components/resize-control/grab-area.js +42 -4
  60. package/dist/esm/components/resize-control/index.js +23 -20
  61. package/dist/esm/components/resize-control/resize-button.js +57 -4
  62. package/dist/esm/components/resize-control/shadow.js +37 -0
  63. package/dist/esm/components/skip-links/skip-link-components.js +47 -5
  64. package/dist/esm/components/slots/banner.js +27 -12
  65. package/dist/esm/components/slots/content.js +8 -2
  66. package/dist/esm/components/slots/internal/left-sidebar-inner.js +53 -0
  67. package/dist/esm/components/slots/internal/left-sidebar-outer.js +82 -0
  68. package/dist/esm/components/slots/internal/resizable-children-wrapper.js +51 -0
  69. package/dist/esm/components/slots/internal/slot-focus-ring.js +51 -0
  70. package/dist/esm/components/slots/left-panel.js +26 -12
  71. package/dist/esm/components/slots/left-sidebar-without-resize.js +10 -10
  72. package/dist/esm/components/slots/left-sidebar.js +20 -16
  73. package/dist/esm/components/slots/main.js +49 -8
  74. package/dist/esm/components/slots/page-layout.js +12 -3
  75. package/dist/esm/components/slots/right-panel.js +26 -12
  76. package/dist/esm/components/slots/right-sidebar.js +57 -14
  77. package/dist/esm/components/slots/top-navigation.js +27 -12
  78. package/dist/esm/controllers/sidebar-resize-context.js +2 -1
  79. package/dist/esm/controllers/sidebar-resize-controller.js +10 -5
  80. package/dist/esm/version.json +1 -1
  81. package/dist/types/common/hooks/index.d.ts +2 -0
  82. package/dist/types/common/hooks/use-is-sidebar-collapsing.d.ts +2 -0
  83. package/dist/types/common/hooks/use-is-sidebar-dragging.d.ts +2 -0
  84. package/dist/types/components/resize-control/shadow.d.ts +6 -0
  85. package/dist/types/components/slots/internal/left-sidebar-inner.d.ts +9 -0
  86. package/dist/types/components/slots/internal/left-sidebar-outer.d.ts +13 -0
  87. package/dist/types/components/slots/internal/resizable-children-wrapper.d.ts +10 -0
  88. package/dist/types/components/slots/internal/slot-focus-ring.d.ts +19 -0
  89. package/dist/types/controllers/sidebar-resize-context.d.ts +1 -0
  90. package/package.json +8 -5
  91. package/dist/cjs/components/resize-control/styles.js +0 -158
  92. package/dist/cjs/components/skip-links/styles.js +0 -58
  93. package/dist/cjs/components/slots/left-sidebar-styles.js +0 -116
  94. package/dist/cjs/components/slots/styles.js +0 -154
  95. package/dist/es2019/components/resize-control/styles.js +0 -139
  96. package/dist/es2019/components/skip-links/styles.js +0 -41
  97. package/dist/es2019/components/slots/left-sidebar-styles.js +0 -96
  98. package/dist/es2019/components/slots/styles.js +0 -130
  99. package/dist/esm/components/resize-control/styles.js +0 -133
  100. package/dist/esm/components/skip-links/styles.js +0 -45
  101. package/dist/esm/components/slots/left-sidebar-styles.js +0 -94
  102. package/dist/esm/components/slots/styles.js +0 -117
  103. package/dist/types/components/resize-control/styles.d.ts +0 -41
  104. package/dist/types/components/skip-links/styles.d.ts +0 -2
  105. package/dist/types/components/slots/left-sidebar-styles.d.ts +0 -5
  106. package/dist/types/components/slots/styles.d.ts +0 -23
@@ -21,11 +21,23 @@ var _utils = require("../../common/utils");
21
21
 
22
22
  var _controllers = require("../../controllers");
23
23
 
24
- var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
24
+ var _slotFocusRing = _interopRequireDefault(require("./internal/slot-focus-ring"));
25
25
 
26
- var _styles = require("./styles");
26
+ var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
27
27
 
28
28
  /** @jsx jsx */
29
+ var bannerStyles = (0, _core.css)({
30
+ height: _constants.BANNER_HEIGHT,
31
+ gridArea: _constants.BANNER
32
+ });
33
+ var bannerFixedStyles = (0, _core.css)({
34
+ position: 'fixed',
35
+ zIndex: 2,
36
+ top: 0,
37
+ right: _constants.RIGHT_PANEL_WIDTH,
38
+ left: _constants.LEFT_PANEL_WIDTH
39
+ });
40
+
29
41
  var Banner = function Banner(props) {
30
42
  var children = props.children,
31
43
  _props$height = props.height,
@@ -41,17 +53,21 @@ var Banner = function Banner(props) {
41
53
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_BANNER_HEIGHT, bannerHeight));
42
54
  return function () {
43
55
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_BANNER_HEIGHT, 0));
44
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ };
45
57
  }, [bannerHeight]);
46
58
  (0, _controllers.useSkipLink)(id, skipLinkTitle);
47
- return (0, _core.jsx)("div", (0, _extends2.default)({
48
- css: (0, _styles.bannerStyles)(isFixed),
49
- "data-testid": testId,
50
- id: id
51
- }, (0, _utils.getPageLayoutSlotSelector)('banner')), (0, _core.jsx)(_slotDimensions.default, {
52
- variableName: _constants.VAR_BANNER_HEIGHT,
53
- value: bannerHeight
54
- }), children);
59
+ return (0, _core.jsx)(_slotFocusRing.default, null, function (_ref) {
60
+ var className = _ref.className;
61
+ return (0, _core.jsx)("div", (0, _extends2.default)({
62
+ css: [bannerStyles, isFixed && bannerFixedStyles],
63
+ className: className,
64
+ "data-testid": testId,
65
+ id: id
66
+ }, (0, _utils.getPageLayoutSlotSelector)('banner')), (0, _core.jsx)(_slotDimensions.default, {
67
+ variableName: _constants.VAR_BANNER_HEIGHT,
68
+ value: bannerHeight
69
+ }), children);
70
+ });
55
71
  };
56
72
 
57
73
  var _default = Banner;
@@ -7,15 +7,22 @@ exports.default = void 0;
7
7
 
8
8
  var _core = require("@emotion/core");
9
9
 
10
- var _styles = require("./styles");
10
+ var _constants = require("../../common/constants");
11
11
 
12
12
  /** @jsx jsx */
13
+ var contentStyles = (0, _core.css)({
14
+ display: 'flex',
15
+ height: '100%',
16
+ position: 'relative',
17
+ gridArea: _constants.CONTENT
18
+ });
19
+
13
20
  var Content = function Content(props) {
14
21
  var children = props.children,
15
22
  testId = props.testId;
16
23
  return (0, _core.jsx)("div", {
17
24
  "data-testid": testId,
18
- css: _styles.contentStyles
25
+ css: contentStyles
19
26
  }, children);
20
27
  };
21
28
 
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _core = require("@emotion/core");
9
+
10
+ var _motion = require("@atlaskit/motion");
11
+
12
+ var _constants = require("../../../common/constants");
13
+
14
+ var _hooks = require("../../../common/hooks");
15
+
16
+ /** @jsx jsx */
17
+ // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
18
+ var prefersReducedMotionStyles = (0, _core.css)((0, _motion.prefersReducedMotion)());
19
+ /**
20
+ * This inner wrapper is required to allow the sidebar to be `position: fixed`.
21
+ *
22
+ * If we were to apply `position: fixed` to the outer wrapper, it will be popped
23
+ * out of its flex container and Main would stretch to occupy all the space.
24
+ */
25
+
26
+ var fixedInnerStyles = (0, _core.css)({
27
+ width: "".concat(_constants.LEFT_SIDEBAR_WIDTH),
28
+ position: 'fixed',
29
+ top: "calc(".concat(_constants.BANNER_HEIGHT, " + ").concat(_constants.TOP_NAVIGATION_HEIGHT, ")"),
30
+ bottom: 0,
31
+ left: "".concat(_constants.LEFT_PANEL_WIDTH),
32
+ transition: "width ".concat(_constants.TRANSITION_DURATION, "ms ").concat(_motion.easeOut, " 0s")
33
+ });
34
+ var fixedInnerFlyoutStyles = (0, _core.css)({
35
+ width: _constants.LEFT_SIDEBAR_FLYOUT_WIDTH
36
+ });
37
+ /**
38
+ * Static in the sense of `position: static`.
39
+ *
40
+ * It will expand the page height to fit its content.
41
+ */
42
+
43
+ var staticInnerStyles = (0, _core.css)({
44
+ height: '100%'
45
+ });
46
+ var draggingStyles = (0, _core.css)({
47
+ cursor: 'ew-resize',
48
+ // Make sure drag to resize does not animate as the user drags
49
+ transition: 'none'
50
+ });
51
+
52
+ var LeftSidebarInner = function LeftSidebarInner(_ref) {
53
+ var children = _ref.children,
54
+ _ref$isFixed = _ref.isFixed,
55
+ isFixed = _ref$isFixed === void 0 ? false : _ref$isFixed,
56
+ _ref$isFlyoutOpen = _ref.isFlyoutOpen,
57
+ isFlyoutOpen = _ref$isFlyoutOpen === void 0 ? false : _ref$isFlyoutOpen;
58
+ var isDragging = (0, _hooks.useIsSidebarDragging)();
59
+ return (0, _core.jsx)("div", {
60
+ css: [!isFixed && staticInnerStyles, isFixed && fixedInnerStyles, isFixed && isFlyoutOpen && fixedInnerFlyoutStyles, isDragging && draggingStyles, prefersReducedMotionStyles]
61
+ }, children);
62
+ };
63
+
64
+ var _default = LeftSidebarInner;
65
+ exports.default = _default;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _react = require("react");
13
+
14
+ var _core = require("@emotion/core");
15
+
16
+ var _motion = require("@atlaskit/motion");
17
+
18
+ var _constants = require("../../../common/constants");
19
+
20
+ var _hooks = require("../../../common/hooks");
21
+
22
+ var _utils = require("../../../common/utils");
23
+
24
+ var _slotFocusRing = _interopRequireDefault(require("./slot-focus-ring"));
25
+
26
+ /** @jsx jsx */
27
+ // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
28
+ var prefersReducedMotionStyles = (0, _core.css)((0, _motion.prefersReducedMotion)());
29
+ var outerStyles = (0, _core.css)({
30
+ width: _constants.LEFT_SIDEBAR_WIDTH,
31
+ marginLeft: 0,
32
+ position: 'relative',
33
+ zIndex: 1,
34
+ transition: "width ".concat(_constants.TRANSITION_DURATION, "ms ").concat(_motion.easeOut, " 0s"),
35
+ ':hover': {
36
+ '--ds--resize-button--opacity': 1
37
+ }
38
+ });
39
+ var draggingStyles = (0, _core.css)({
40
+ cursor: 'ew-resize',
41
+ // Make sure drag to resize does not animate as the user drags
42
+ transition: 'none'
43
+ });
44
+ /**
45
+ * In fixed mode this element's child is taken out of the document flow.
46
+ * It doesn't take up the width as expected,
47
+ * so the pseudo element forces it to take up the necessary width.
48
+ */
49
+
50
+ var fixedStyles = (0, _core.css)({
51
+ '::after': {
52
+ display: 'inline-block',
53
+ width: "".concat(_constants.LEFT_SIDEBAR_WIDTH),
54
+ content: "''"
55
+ }
56
+ });
57
+ var flyoutStyles = (0, _core.css)({
58
+ width: _constants.LEFT_SIDEBAR_FLYOUT_WIDTH
59
+ });
60
+ var flyoutFixedStyles = (0, _core.css)({
61
+ width: _constants.COLLAPSED_LEFT_SIDEBAR_WIDTH
62
+ });
63
+ var selector = (0, _utils.getPageLayoutSlotSelector)('left-sidebar');
64
+
65
+ var LeftSidebarOuter = function LeftSidebarOuter(_ref, ref) {
66
+ var children = _ref.children,
67
+ _ref$isFixed = _ref.isFixed,
68
+ isFixed = _ref$isFixed === void 0 ? false : _ref$isFixed,
69
+ _ref$isFlyoutOpen = _ref.isFlyoutOpen,
70
+ isFlyoutOpen = _ref$isFlyoutOpen === void 0 ? false : _ref$isFlyoutOpen,
71
+ testId = _ref.testId,
72
+ onMouseLeave = _ref.onMouseLeave,
73
+ onMouseOver = _ref.onMouseOver,
74
+ id = _ref.id;
75
+ var isDragging = (0, _hooks.useIsSidebarDragging)();
76
+ return (0, _core.jsx)(_slotFocusRing.default, {
77
+ isSidebar: true
78
+ }, function (_ref2) {
79
+ var className = _ref2.className;
80
+ return (
81
+ /**
82
+ * The mouse handlers control flyout behavior, a mouse-only experience.
83
+ */
84
+ // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events
85
+ (0, _core.jsx)("div", (0, _extends2.default)({
86
+ css: [outerStyles, isFixed && fixedStyles, isFlyoutOpen && flyoutStyles, isFlyoutOpen && isFixed && flyoutFixedStyles, isDragging && draggingStyles, prefersReducedMotionStyles],
87
+ className: className,
88
+ "data-testid": testId,
89
+ id: id,
90
+ onMouseOver: onMouseOver,
91
+ onMouseLeave: onMouseLeave,
92
+ ref: ref
93
+ }, selector), children)
94
+ );
95
+ });
96
+ };
97
+
98
+ var _default = /*#__PURE__*/(0, _react.forwardRef)(LeftSidebarOuter);
99
+
100
+ exports.default = _default;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _core = require("@emotion/core");
9
+
10
+ var _motion = require("@atlaskit/motion");
11
+
12
+ var _constants = require("../../../common/constants");
13
+
14
+ var _hooks = require("../../../common/hooks");
15
+
16
+ /** @jsx jsx */
17
+ // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
18
+ var prefersReducedMotionStyles = (0, _core.css)((0, _motion.prefersReducedMotion)());
19
+ /**
20
+ * The transition duration is intentionally set to 0ms.
21
+ *
22
+ * A transition is being used here to delay the setting of
23
+ * opacity and visibility so that it syncs collapsing sidebar.
24
+ */
25
+
26
+ var hideLeftSidebarContentsStyles = (0, _core.css)({
27
+ opacity: 0,
28
+ transition: "opacity 0ms linear, visibility 0ms linear",
29
+ transitionDelay: "".concat(_constants.TRANSITION_DURATION - 100, "ms"),
30
+ visibility: 'hidden'
31
+ });
32
+ var resizableChildrenWrapperStyles = (0, _core.css)({
33
+ height: '100%',
34
+ opacity: 1,
35
+ overflow: 'hidden auto',
36
+ transition: 'none',
37
+ visibility: 'visible'
38
+ });
39
+ var fixedChildrenWrapperStyles = (0, _core.css)({
40
+ minWidth: 240,
41
+ height: '100%'
42
+ });
43
+
44
+ var ResizableChildrenWrapper = function ResizableChildrenWrapper(_ref) {
45
+ var children = _ref.children,
46
+ _ref$isLeftSidebarCol = _ref.isLeftSidebarCollapsed,
47
+ isLeftSidebarCollapsed = _ref$isLeftSidebarCol === void 0 ? false : _ref$isLeftSidebarCol,
48
+ _ref$hasCollapsedStat = _ref.hasCollapsedState,
49
+ hasCollapsedState = _ref$hasCollapsedStat === void 0 ? false : _ref$hasCollapsedStat,
50
+ _ref$isFlyoutOpen = _ref.isFlyoutOpen,
51
+ isFlyoutOpen = _ref$isFlyoutOpen === void 0 ? false : _ref$isFlyoutOpen;
52
+ var isCollapsing = (0, _hooks.useIsSidebarCollapsing)();
53
+ var isCollapsed = isLeftSidebarCollapsed || hasCollapsedState;
54
+ var isHidden = isCollapsing || isCollapsed && !isFlyoutOpen;
55
+ return (0, _core.jsx)("div", {
56
+ css: [resizableChildrenWrapperStyles, isHidden && hideLeftSidebarContentsStyles, prefersReducedMotionStyles]
57
+ }, (0, _core.jsx)("div", {
58
+ css: fixedChildrenWrapperStyles
59
+ }, children));
60
+ };
61
+
62
+ var _default = ResizableChildrenWrapper;
63
+ exports.default = _default;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _core = require("@emotion/core");
9
+
10
+ var _colors = require("@atlaskit/theme/colors");
11
+
12
+ /** @jsx jsx */
13
+ var focusStyles = (0, _core.css)({
14
+ ':focus': {
15
+ outline: 'none',
16
+ // eslint-disable-next-line @repo/internal/styles/no-nested-styles
17
+ '> div': {
18
+ boxShadow: "0px 0px 0px 2px inset ".concat("var(--ds-border-focused, ".concat(_colors.B100, ")")),
19
+ outline: 'none'
20
+ }
21
+ }
22
+ });
23
+ /**
24
+ * Sidebars have an outer and inner component,
25
+ * so the nested selector needs to target an extra level deeper.
26
+ */
27
+
28
+ var sidebarFocusStyles = (0, _core.css)({
29
+ ':focus': {
30
+ outline: 'none',
31
+ // eslint-disable-next-line @repo/internal/styles/no-nested-styles
32
+ '> div > div': {
33
+ boxShadow: "0px 0px 0px 2px inset ".concat("var(--ds-border-focused, ".concat(_colors.B100, ")")),
34
+ outline: 'none'
35
+ }
36
+ }
37
+ });
38
+ /**
39
+ * We don't use `@atlaskit/focus-ring` here,
40
+ * because we need inset focus styles and:
41
+ *
42
+ * 1. If we set them directly to the layout element,
43
+ * then any child element's background will cover the shadow.
44
+ * 2. We cannot wrap `children` in `FocusRing`,
45
+ * because there's no guarantee the passed child takes `className`.
46
+ */
47
+
48
+ var SlotFocusRing = function SlotFocusRing(_ref) {
49
+ var children = _ref.children,
50
+ _ref$isSidebar = _ref.isSidebar,
51
+ isSidebar = _ref$isSidebar === void 0 ? false : _ref$isSidebar;
52
+ return (0, _core.jsx)(_core.ClassNames, null, function (_ref2) {
53
+ var css = _ref2.css;
54
+ return children({
55
+ className: isSidebar ? css(sidebarFocusStyles) : css(focusStyles)
56
+ });
57
+ });
58
+ };
59
+
60
+ var _default = SlotFocusRing;
61
+ exports.default = _default;
@@ -21,11 +21,22 @@ var _utils = require("../../common/utils");
21
21
 
22
22
  var _controllers = require("../../controllers");
23
23
 
24
- var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
24
+ var _slotFocusRing = _interopRequireDefault(require("./internal/slot-focus-ring"));
25
25
 
26
- var _styles = require("./styles");
26
+ var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
27
27
 
28
28
  /** @jsx jsx */
29
+ var leftPanelStyles = (0, _core.css)({
30
+ gridArea: _constants.LEFT_PANEL
31
+ });
32
+ var leftPanelFixedStyles = (0, _core.css)({
33
+ width: _constants.LEFT_PANEL_WIDTH,
34
+ position: 'fixed',
35
+ top: 0,
36
+ bottom: 0,
37
+ left: 0
38
+ });
39
+
29
40
  var LeftPanel = function LeftPanel(props) {
30
41
  var children = props.children,
31
42
  isFixed = props.isFixed,
@@ -40,17 +51,21 @@ var LeftPanel = function LeftPanel(props) {
40
51
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_LEFT_PANEL_WIDTH, leftPanelWidth));
41
52
  return function () {
42
53
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_LEFT_PANEL_WIDTH, 0));
43
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ };
44
55
  }, [leftPanelWidth]);
45
56
  (0, _controllers.useSkipLink)(id, skipLinkTitle);
46
- return (0, _core.jsx)("div", (0, _extends2.default)({
47
- css: (0, _styles.leftPanelStyles)(isFixed),
48
- "data-testid": testId,
49
- id: id
50
- }, (0, _utils.getPageLayoutSlotSelector)('left-panel')), (0, _core.jsx)(_slotDimensions.default, {
51
- variableName: _constants.VAR_LEFT_PANEL_WIDTH,
52
- value: leftPanelWidth
53
- }), children);
57
+ return (0, _core.jsx)(_slotFocusRing.default, null, function (_ref) {
58
+ var className = _ref.className;
59
+ return (0, _core.jsx)("div", (0, _extends2.default)({
60
+ css: [leftPanelStyles, isFixed && leftPanelFixedStyles],
61
+ className: className,
62
+ "data-testid": testId,
63
+ id: id
64
+ }, (0, _utils.getPageLayoutSlotSelector)('left-panel')), (0, _core.jsx)(_slotDimensions.default, {
65
+ variableName: _constants.VAR_LEFT_PANEL_WIDTH,
66
+ value: leftPanelWidth
67
+ }), children);
68
+ });
54
69
  };
55
70
 
56
71
  var _default = LeftPanel;
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
11
 
14
12
  var _react = require("react");
@@ -21,7 +19,9 @@ var _utils = require("../../common/utils");
21
19
 
22
20
  var _controllers = require("../../controllers");
23
21
 
24
- var _leftSidebarStyles = require("./left-sidebar-styles");
22
+ var _leftSidebarInner = _interopRequireDefault(require("./internal/left-sidebar-inner"));
23
+
24
+ var _leftSidebarOuter = _interopRequireDefault(require("./internal/left-sidebar-outer"));
25
25
 
26
26
  var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
27
27
 
@@ -39,18 +39,18 @@ var LeftSidebarWithoutResize = function LeftSidebarWithoutResize(props) {
39
39
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_LEFT_SIDEBAR_WIDTH, leftSidebarWidth));
40
40
  return function () {
41
41
  (0, _controllers.publishGridState)((0, _defineProperty2.default)({}, _constants.VAR_LEFT_SIDEBAR_WIDTH, 0));
42
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ };
43
43
  }, [leftSidebarWidth]);
44
44
  (0, _controllers.useSkipLink)(id, skipLinkTitle);
45
- return (0, _core.jsx)("div", (0, _extends2.default)({
45
+ return (0, _core.jsx)(_leftSidebarOuter.default, {
46
46
  id: id,
47
- "data-testid": testId,
48
- css: (0, _leftSidebarStyles.leftSidebarStyles)(isFixed)
49
- }, (0, _utils.getPageLayoutSlotSelector)('left-sidebar')), (0, _core.jsx)(_slotDimensions.default, {
47
+ testId: testId,
48
+ isFixed: isFixed
49
+ }, (0, _core.jsx)(_slotDimensions.default, {
50
50
  variableName: _constants.VAR_LEFT_SIDEBAR_WIDTH,
51
51
  value: leftSidebarWidth
52
- }), (0, _core.jsx)("div", {
53
- css: (0, _leftSidebarStyles.fixedLeftSidebarInnerStyles)(isFixed)
52
+ }), (0, _core.jsx)(_leftSidebarInner.default, {
53
+ isFixed: isFixed
54
54
  }, children));
55
55
  };
56
56
 
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
11
 
14
12
  var _react = require("react");
@@ -23,7 +21,11 @@ var _controllers = require("../../controllers");
23
21
 
24
22
  var _resizeControl = _interopRequireDefault(require("../resize-control"));
25
23
 
26
- var _leftSidebarStyles = require("./left-sidebar-styles");
24
+ var _leftSidebarInner = _interopRequireDefault(require("./internal/left-sidebar-inner"));
25
+
26
+ var _leftSidebarOuter = _interopRequireDefault(require("./internal/left-sidebar-outer"));
27
+
28
+ var _resizableChildrenWrapper = _interopRequireDefault(require("./internal/resizable-children-wrapper"));
27
29
 
28
30
  var _slotDimensions = _interopRequireDefault(require("./slot-dimensions"));
29
31
 
@@ -131,7 +133,8 @@ var LeftSidebar = function LeftSidebar(props) {
131
133
  isLeftSidebarCollapsed: cachedCollapsedState,
132
134
  leftSidebarWidth: leftSidebarWidth,
133
135
  lastLeftSidebarWidth: lastLeftSidebarWidth,
134
- flyoutLockCount: 0
136
+ flyoutLockCount: 0,
137
+ isFixed: isFixed
135
138
  }); // eslint-disable-next-line react-hooks/exhaustive-deps
136
139
  }, []); // Every time other than mount,
137
140
  // update the local storage and css variables.
@@ -226,23 +229,25 @@ var LeftSidebar = function LeftSidebar(props) {
226
229
  };
227
230
 
228
231
  return (// eslint-disable-next-line jsx-a11y/mouse-events-have-key-events
229
- (0, _core.jsx)("div", (0, _extends2.default)({
232
+ (0, _core.jsx)(_leftSidebarOuter.default, {
230
233
  ref: leftSideBarRef,
231
- css: (0, _leftSidebarStyles.leftSidebarStyles)(isFixed, isFlyoutOpen),
232
- "data-testid": testId,
234
+ testId: testId,
233
235
  onMouseOver: onMouseOver,
234
236
  onMouseLeave: onMouseLeave,
235
- id: id
236
- }, (0, _utils.getPageLayoutSlotSelector)('left-sidebar')), (0, _core.jsx)(_slotDimensions.default, {
237
+ id: id,
238
+ isFixed: isFixed,
239
+ isFlyoutOpen: isFlyoutOpen
240
+ }, (0, _core.jsx)(_slotDimensions.default, {
237
241
  variableName: _constants.VAR_LEFT_SIDEBAR_WIDTH,
238
242
  value: notFirstRun.current ? leftSidebarWidth : leftSidebarWidthOnMount
239
- }), (0, _core.jsx)("div", {
240
- css: (0, _leftSidebarStyles.fixedLeftSidebarInnerStyles)(isFixed, isFlyoutOpen)
241
- }, (0, _core.jsx)("div", {
242
- css: (0, _leftSidebarStyles.resizeableChildrenWrapperStyle)(isFlyoutOpen, isLeftSidebarCollapsed, !notFirstRun.current && collapsedState === 'collapsed')
243
- }, (0, _core.jsx)("div", {
244
- css: _leftSidebarStyles.fixedChildrenWrapperStyle
245
- }, children)), (0, _core.jsx)(_resizeControl.default, {
243
+ }), (0, _core.jsx)(_leftSidebarInner.default, {
244
+ isFixed: isFixed,
245
+ isFlyoutOpen: isFlyoutOpen
246
+ }, (0, _core.jsx)(_resizableChildrenWrapper.default, {
247
+ isFlyoutOpen: isFlyoutOpen,
248
+ isLeftSidebarCollapsed: isLeftSidebarCollapsed,
249
+ hasCollapsedState: !notFirstRun.current && collapsedState === 'collapsed'
250
+ }, children), (0, _core.jsx)(_resizeControl.default, {
246
251
  testId: testId,
247
252
  resizeGrabAreaLabel: resizeGrabAreaLabel,
248
253
  resizeButtonLabel: resizeButtonLabel,
@@ -9,26 +9,73 @@ exports.default = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
12
+ var _react = require("react");
13
+
12
14
  var _core = require("@emotion/core");
13
15
 
16
+ var _accessibility = require("@atlaskit/motion/accessibility");
17
+
18
+ var _curves = require("@atlaskit/motion/curves");
19
+
20
+ var _constants = require("../../common/constants");
21
+
22
+ var _hooks = require("../../common/hooks");
23
+
14
24
  var _utils = require("../../common/utils");
15
25
 
16
26
  var _controllers = require("../../controllers");
17
27
 
18
- var _styles = require("./styles");
28
+ var _slotFocusRing = _interopRequireDefault(require("./internal/slot-focus-ring"));
19
29
 
20
30
  /** @jsx jsx */
31
+ // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
32
+ var prefersReducedMotionStyles = (0, _core.css)((0, _accessibility.prefersReducedMotion)());
33
+ var mainStyles = (0, _core.css)({
34
+ minWidth: 0,
35
+ marginLeft: 0,
36
+ // Prevent flex container from blowing up when there's super wide content.
37
+ flexGrow: 1,
38
+ // Transition negative margin on main in sync with the increase in width of leftSidebar.
39
+ transition: "margin-left ".concat(_constants.TRANSITION_DURATION, "ms ").concat(_curves.easeOut, " 0s")
40
+ });
41
+ var draggingStyles = (0, _core.css)({
42
+ cursor: 'ew-resize',
43
+ // Make sure drag to resize remains snappy.
44
+ transition: 'none'
45
+ });
46
+ /**
47
+ * Adds a negative left margin to main,
48
+ * which transitions at the same speed as the left sidebar's width increase.
49
+ * This give an illusion that the flyout is appearing on top of the main content,
50
+ * while main remains in place.
51
+ */
52
+
53
+ var flyoutStyles = (0, _core.css)({
54
+ marginLeft: "calc(-1 * var(--".concat(_constants.VAR_LEFT_SIDEBAR_FLYOUT, ", ").concat(_constants.DEFAULT_LEFT_SIDEBAR_FLYOUT_WIDTH, "px) + ").concat(_constants.COLLAPSED_LEFT_SIDEBAR_WIDTH, "px)")
55
+ });
56
+
21
57
  var Main = function Main(props) {
22
58
  var children = props.children,
23
59
  testId = props.testId,
24
60
  id = props.id,
25
61
  skipLinkTitle = props.skipLinkTitle;
26
62
  (0, _controllers.useSkipLink)(id, skipLinkTitle);
27
- return (0, _core.jsx)("div", (0, _extends2.default)({
28
- "data-testid": testId,
29
- css: _styles.mainStyles,
30
- id: id
31
- }, (0, _utils.getPageLayoutSlotSelector)('main')), children);
63
+ var isDragging = (0, _hooks.useIsSidebarDragging)();
64
+
65
+ var _useContext = (0, _react.useContext)(_controllers.SidebarResizeContext),
66
+ _useContext$leftSideb = _useContext.leftSidebarState,
67
+ isFlyoutOpen = _useContext$leftSideb.isFlyoutOpen,
68
+ isFixed = _useContext$leftSideb.isFixed;
69
+
70
+ return (0, _core.jsx)(_slotFocusRing.default, null, function (_ref) {
71
+ var className = _ref.className;
72
+ return (0, _core.jsx)("div", (0, _extends2.default)({
73
+ "data-testid": testId,
74
+ css: [mainStyles, isDragging && draggingStyles, isFlyoutOpen && !isFixed && flyoutStyles, prefersReducedMotionStyles],
75
+ className: className,
76
+ id: id
77
+ }, (0, _utils.getPageLayoutSlotSelector)('main')), children);
78
+ });
32
79
  };
33
80
 
34
81
  var _default = Main;
@@ -21,10 +21,17 @@ var _controllers = require("../../controllers");
21
21
 
22
22
  var _skipLinks = require("../skip-links");
23
23
 
24
- var _styles = require("./styles");
25
-
26
24
  /** @jsx jsx */
27
25
  var pageLayoutSelector = (0, _defineProperty2.default)({}, _constants.PAGE_LAYOUT_CONTAINER_SELECTOR, true);
26
+ var gridTemplateAreas = "\n \"".concat(_constants.LEFT_PANEL, " ").concat(_constants.BANNER, " ").concat(_constants.RIGHT_PANEL, "\"\n \"").concat(_constants.LEFT_PANEL, " ").concat(_constants.TOP_NAVIGATION, " ").concat(_constants.RIGHT_PANEL, "\"\n \"").concat(_constants.LEFT_PANEL, " ").concat(_constants.CONTENT, " ").concat(_constants.RIGHT_PANEL, "\"\n ");
27
+ var gridStyles = (0, _core.css)({
28
+ display: 'grid',
29
+ height: '100%',
30
+ gridTemplateAreas: gridTemplateAreas,
31
+ gridTemplateColumns: "".concat(_constants.LEFT_PANEL_WIDTH, " minmax(0, 1fr) ").concat(_constants.RIGHT_PANEL_WIDTH),
32
+ gridTemplateRows: "".concat(_constants.BANNER_HEIGHT, " ").concat(_constants.TOP_NAVIGATION_HEIGHT, " auto"),
33
+ outline: 'none'
34
+ });
28
35
 
29
36
  var PageLayout = function PageLayout(_ref) {
30
37
  var _ref$skipLinksLabel = _ref.skipLinksLabel,
@@ -37,7 +44,7 @@ var PageLayout = function PageLayout(_ref) {
37
44
  skipLinksLabel: skipLinksLabel
38
45
  }), (0, _core.jsx)("div", (0, _extends2.default)({}, pageLayoutSelector, {
39
46
  "data-testid": testId,
40
- css: _styles.gridStyles,
47
+ css: gridStyles,
41
48
  tabIndex: -1
42
49
  }), (0, _core.jsx)(_controllers.SidebarResizeController, {
43
50
  onLeftSidebarCollapse: onLeftSidebarCollapse,