@atlaskit/navigation-system 11.0.0 → 11.1.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 (83) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/entry-points/layout/chat-panel.js +12 -0
  3. package/dist/cjs/entry-points/layout/layout-sizing.js +44 -0
  4. package/dist/cjs/ui/page-layout/calculate-layout-area-states.js +179 -0
  5. package/dist/cjs/ui/page-layout/chat-panel.compiled.css +27 -0
  6. package/dist/cjs/ui/page-layout/chat-panel.js +216 -0
  7. package/dist/cjs/ui/page-layout/constants.js +6 -1
  8. package/dist/cjs/ui/page-layout/layout-area-sizing-context.js +13 -0
  9. package/dist/cjs/ui/page-layout/layout-area-sizing-provider.js +304 -0
  10. package/dist/cjs/ui/page-layout/layout-area-state-contexts.js +13 -0
  11. package/dist/cjs/ui/page-layout/main/main.js +11 -2
  12. package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +73 -7
  13. package/dist/cjs/ui/page-layout/panel-splitter/provider.js +7 -1
  14. package/dist/cjs/ui/page-layout/resolve-layout-width.js +13 -0
  15. package/dist/cjs/ui/page-layout/ribbon.js +1 -0
  16. package/dist/cjs/ui/page-layout/root.compiled.css +4 -2
  17. package/dist/cjs/ui/page-layout/root.js +10 -4
  18. package/dist/cjs/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
  19. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +152 -14
  20. package/dist/cjs/ui/page-layout/use-layout-area-sizing.js +73 -0
  21. package/dist/cjs/ui/page-layout/use-layout-main-sizing.js +15 -0
  22. package/dist/cjs/ui/page-layout/use-occupied-layout-width.js +111 -0
  23. package/dist/es2019/entry-points/layout/chat-panel.js +1 -0
  24. package/dist/es2019/entry-points/layout/layout-sizing.js +3 -0
  25. package/dist/es2019/ui/page-layout/calculate-layout-area-states.js +128 -0
  26. package/dist/es2019/ui/page-layout/chat-panel.compiled.css +27 -0
  27. package/dist/es2019/ui/page-layout/chat-panel.js +199 -0
  28. package/dist/es2019/ui/page-layout/constants.js +5 -0
  29. package/dist/es2019/ui/page-layout/layout-area-sizing-context.js +8 -0
  30. package/dist/es2019/ui/page-layout/layout-area-sizing-provider.js +279 -0
  31. package/dist/es2019/ui/page-layout/layout-area-state-contexts.js +7 -0
  32. package/dist/es2019/ui/page-layout/main/main.js +10 -2
  33. package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +68 -8
  34. package/dist/es2019/ui/page-layout/panel-splitter/provider.js +7 -1
  35. package/dist/es2019/ui/page-layout/resolve-layout-width.js +7 -0
  36. package/dist/es2019/ui/page-layout/ribbon.js +1 -0
  37. package/dist/es2019/ui/page-layout/root.compiled.css +4 -2
  38. package/dist/es2019/ui/page-layout/root.js +10 -4
  39. package/dist/es2019/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
  40. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +142 -14
  41. package/dist/es2019/ui/page-layout/use-layout-area-sizing.js +58 -0
  42. package/dist/es2019/ui/page-layout/use-layout-main-sizing.js +7 -0
  43. package/dist/es2019/ui/page-layout/use-occupied-layout-width.js +67 -0
  44. package/dist/esm/entry-points/layout/chat-panel.js +1 -0
  45. package/dist/esm/entry-points/layout/layout-sizing.js +3 -0
  46. package/dist/esm/ui/page-layout/calculate-layout-area-states.js +173 -0
  47. package/dist/esm/ui/page-layout/chat-panel.compiled.css +27 -0
  48. package/dist/esm/ui/page-layout/chat-panel.js +207 -0
  49. package/dist/esm/ui/page-layout/constants.js +5 -0
  50. package/dist/esm/ui/page-layout/layout-area-sizing-context.js +8 -0
  51. package/dist/esm/ui/page-layout/layout-area-sizing-provider.js +295 -0
  52. package/dist/esm/ui/page-layout/layout-area-state-contexts.js +7 -0
  53. package/dist/esm/ui/page-layout/main/main.js +11 -2
  54. package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +74 -8
  55. package/dist/esm/ui/page-layout/panel-splitter/provider.js +7 -1
  56. package/dist/esm/ui/page-layout/resolve-layout-width.js +7 -0
  57. package/dist/esm/ui/page-layout/ribbon.js +1 -0
  58. package/dist/esm/ui/page-layout/root.compiled.css +4 -2
  59. package/dist/esm/ui/page-layout/root.js +10 -4
  60. package/dist/esm/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
  61. package/dist/esm/ui/page-layout/side-nav/side-nav.js +153 -15
  62. package/dist/esm/ui/page-layout/use-layout-area-sizing.js +67 -0
  63. package/dist/esm/ui/page-layout/use-layout-main-sizing.js +9 -0
  64. package/dist/esm/ui/page-layout/use-occupied-layout-width.js +105 -0
  65. package/dist/types/entry-points/layout/chat-panel.d.ts +1 -0
  66. package/dist/types/entry-points/layout/layout-sizing.d.ts +4 -0
  67. package/dist/types/ui/page-layout/calculate-layout-area-states.d.ts +20 -0
  68. package/dist/types/ui/page-layout/chat-panel.d.ts +48 -0
  69. package/dist/types/ui/page-layout/constants.d.ts +4 -0
  70. package/dist/types/ui/page-layout/layout-area-sizing-context.d.ts +55 -0
  71. package/dist/types/ui/page-layout/layout-area-sizing-provider.d.ts +5 -0
  72. package/dist/types/ui/page-layout/layout-area-state-contexts.d.ts +3 -0
  73. package/dist/types/ui/page-layout/main/main.d.ts +5 -1
  74. package/dist/types/ui/page-layout/panel-splitter/panel-splitter-context.d.ts +15 -1
  75. package/dist/types/ui/page-layout/panel-splitter/provider.d.ts +1 -1
  76. package/dist/types/ui/page-layout/resolve-layout-width.d.ts +2 -0
  77. package/dist/types/ui/page-layout/side-nav/side-nav.d.ts +11 -2
  78. package/dist/types/ui/page-layout/use-layout-area-sizing.d.ts +12 -0
  79. package/dist/types/ui/page-layout/use-layout-main-sizing.d.ts +2 -0
  80. package/dist/types/ui/page-layout/use-occupied-layout-width.d.ts +8 -0
  81. package/layout/chat-panel/package.json +10 -0
  82. package/layout/layout-sizing/package.json +10 -0
  83. package/package.json +11 -3
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.LayoutAreaSizingProvider = LayoutAreaSizingProvider;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _bindEventListener = require("bind-event-listener");
13
+ var _calculateLayoutAreaStates = require("./calculate-layout-area-states");
14
+ var _layoutAreaSizingContext = require("./layout-area-sizing-context");
15
+ var _layoutAreaStateContexts = require("./layout-area-state-contexts");
16
+ var _useOccupiedLayoutWidth = require("./use-occupied-layout-width");
17
+ 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); }
18
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
23
+ var defaultMainMinWidth = 320;
24
+ function useStableAreaState(state) {
25
+ var _ref = state !== null && state !== void 0 ? state : {},
26
+ mode = _ref.mode,
27
+ width = _ref.width,
28
+ minWidth = _ref.minWidth;
29
+ return (0, _react.useMemo)(function () {
30
+ return mode !== undefined && width !== undefined && minWidth !== undefined ? {
31
+ mode: mode,
32
+ width: width,
33
+ minWidth: minWidth
34
+ } : undefined;
35
+ }, [mode, width, minWidth]);
36
+ }
37
+ function LayoutAreaSizingProvider(_ref2) {
38
+ var children = _ref2.children,
39
+ layoutRef = _ref2.layoutRef;
40
+ var occupiedWidth = (0, _useOccupiedLayoutWidth.useOccupiedLayoutWidth)(layoutRef);
41
+ var _useState = (0, _react.useState)(null),
42
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
43
+ dimensions = _useState2[0],
44
+ setDimensions = _useState2[1];
45
+ var _useState3 = (0, _react.useState)(defaultMainMinWidth),
46
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
47
+ mainMinWidth = _useState4[0],
48
+ setMainMinWidth = _useState4[1];
49
+ var _useState5 = (0, _react.useState)({}),
50
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
51
+ areas = _useState6[0],
52
+ setAreas = _useState6[1];
53
+ var _useState7 = (0, _react.useState)(null),
54
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
55
+ resizeSession = _useState8[0],
56
+ setResizeSession = _useState8[1];
57
+ var areaStatesRef = _react.default.useRef({});
58
+ var configsRef = _react.default.useRef({});
59
+ var openSequence = _react.default.useRef(0);
60
+ (0, _react.useEffect)(function () {
61
+ setResizeSession(null);
62
+ }, [mainMinWidth, occupiedWidth]);
63
+ (0, _react.useEffect)(function () {
64
+ var root = layoutRef === null || layoutRef === void 0 ? void 0 : layoutRef.current;
65
+ var previous = null;
66
+ // Match the actual rem-based grid breakpoint, including browser font settings.
67
+ var inlineChatQuery = window.matchMedia('(min-width: 40rem)');
68
+ var inlineSideNavQuery = window.matchMedia('(min-width: 64rem)');
69
+ var updateDimensions = function updateDimensions(contentWidth) {
70
+ var _style$paddingLeft, _style$paddingRight, _previous;
71
+ var style = root && contentWidth === undefined ? getComputedStyle(root) : null;
72
+ var layoutWidth = contentWidth !== null && contentWidth !== void 0 ? contentWidth : root ? Math.max(0, root.clientWidth - (parseFloat((_style$paddingLeft = style === null || style === void 0 ? void 0 : style.paddingLeft) !== null && _style$paddingLeft !== void 0 ? _style$paddingLeft : '') || 0) - (parseFloat((_style$paddingRight = style === null || style === void 0 ? void 0 : style.paddingRight) !== null && _style$paddingRight !== void 0 ? _style$paddingRight : '') || 0)) : window.innerWidth;
73
+ var next = {
74
+ viewportWidth: window.innerWidth,
75
+ layoutWidth: layoutWidth,
76
+ isChatPanelOverlay: !inlineChatQuery.matches,
77
+ isSideNavOverlay: !inlineSideNavQuery.matches
78
+ };
79
+ if (((_previous = previous) === null || _previous === void 0 ? void 0 : _previous.viewportWidth) === next.viewportWidth && previous.layoutWidth === next.layoutWidth && previous.isChatPanelOverlay === next.isChatPanelOverlay && previous.isSideNavOverlay === next.isSideNavOverlay) {
80
+ return;
81
+ }
82
+ previous = next;
83
+ setDimensions(next);
84
+ setResizeSession(null);
85
+ };
86
+ updateDimensions();
87
+ var observer = new ResizeObserver(function (entries) {
88
+ var entry = entries.find(function (entry) {
89
+ return entry.target === root;
90
+ });
91
+ if (entry) {
92
+ updateDimensions(entry.contentRect.width);
93
+ }
94
+ });
95
+ if (root) {
96
+ observer.observe(root);
97
+ }
98
+ var unbindResize = (0, _bindEventListener.bind)(window, {
99
+ type: 'resize',
100
+ listener: function listener() {
101
+ return updateDimensions();
102
+ }
103
+ });
104
+ var unbindQuery = (0, _bindEventListener.bind)(inlineChatQuery, {
105
+ type: 'change',
106
+ listener: function listener() {
107
+ return updateDimensions();
108
+ }
109
+ });
110
+ var unbindSideNavQuery = (0, _bindEventListener.bind)(inlineSideNavQuery, {
111
+ type: 'change',
112
+ listener: function listener() {
113
+ return updateDimensions();
114
+ }
115
+ });
116
+ return function () {
117
+ observer.disconnect();
118
+ unbindResize();
119
+ unbindQuery();
120
+ unbindSideNavQuery();
121
+ };
122
+ }, [layoutRef]);
123
+ var registerArea = (0, _react.useCallback)(function (area, config) {
124
+ var previous = configsRef.current[area];
125
+ configsRef.current[area] = config;
126
+ setResizeSession(function (current) {
127
+ // A changed layout/configuration needs a fresh allocation. A controlled
128
+ // acknowledgement for the resized area keeps its siblings fixed.
129
+ return (previous === null || previous === void 0 ? void 0 : previous.isOpen) === config.isOpen && previous.minWidth === config.minWidth && previous.maxWidth === config.maxWidth && previous.defaultWidth === config.defaultWidth && previous.compactDefaultWidth === config.compactDefaultWidth && (previous.requestedWidth === config.requestedWidth || (current === null || current === void 0 ? void 0 : current.area) === area) ? current : null;
130
+ });
131
+ // Allocate once per registration, outside the updater React may replay. Gaps are
132
+ // harmless: only relative ordering of closed-to-open transitions is significant.
133
+ var openedAt = ++openSequence.current;
134
+ setAreas(function (current) {
135
+ var existing = current[area];
136
+ return _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, area, _objectSpread(_objectSpread(_objectSpread({}, existing), config), {}, {
137
+ liveResize: config.isOpen ? existing === null || existing === void 0 ? void 0 : existing.liveResize : undefined,
138
+ openedAt: config.isOpen && !(existing !== null && existing !== void 0 && existing.isOpen) ? openedAt : existing === null || existing === void 0 ? void 0 : existing.openedAt
139
+ })));
140
+ });
141
+ }, []);
142
+ var unregisterArea = (0, _react.useCallback)(function (area) {
143
+ delete configsRef.current[area];
144
+ setResizeSession(null);
145
+ setAreas(function (current) {
146
+ if (!current[area]) {
147
+ return current;
148
+ }
149
+ // Closing uses isOpen: false and retains preferences. Unregistering means
150
+ // the owning component unmounted; a replacement must start with its own defaults.
151
+ var next = _objectSpread({}, current);
152
+ delete next[area];
153
+ return next;
154
+ });
155
+ }, []);
156
+ var freezeSiblingWidths = (0, _react.useCallback)(function (area) {
157
+ var baselineWidths = {};
158
+ var _iterator = _createForOfIteratorHelper(['side-nav', 'panel', 'chat-panel']),
159
+ _step;
160
+ try {
161
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
162
+ var areaName = _step.value;
163
+ var state = areaStatesRef.current[areaName];
164
+ if ((state === null || state === void 0 ? void 0 : state.mode) === 'inline') {
165
+ baselineWidths[areaName] = state.width;
166
+ }
167
+ }
168
+ // Keep the same siblings fixed after completion, including while a controlled
169
+ // consumer rejects or asynchronously accepts the requested width.
170
+ } catch (err) {
171
+ _iterator.e(err);
172
+ } finally {
173
+ _iterator.f();
174
+ }
175
+ setResizeSession({
176
+ area: area,
177
+ baselineWidths: baselineWidths
178
+ });
179
+ }, []);
180
+ var startResize = (0, _react.useCallback)(function (area, mode) {
181
+ if (mode !== 'inline') {
182
+ return;
183
+ }
184
+ freezeSiblingWidths(area);
185
+
186
+ // Start from the effective width, which may already be compressed below the preferred width.
187
+ // Reapplying the preferred width here would move the splitter away from the pointer.
188
+ var renderedState = areaStatesRef.current[area];
189
+ if ((renderedState === null || renderedState === void 0 ? void 0 : renderedState.mode) === 'inline') {
190
+ setAreas(function (current) {
191
+ var existing = current[area];
192
+ return existing ? _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, area, _objectSpread(_objectSpread({}, existing), {}, {
193
+ liveResize: {
194
+ mode: mode,
195
+ width: renderedState.width
196
+ }
197
+ }))) : current;
198
+ });
199
+ }
200
+ }, [freezeSiblingWidths]);
201
+ var resize = (0, _react.useCallback)(function (area, mode, width) {
202
+ setAreas(function (current) {
203
+ var _existing$liveResize;
204
+ var existing = current[area];
205
+ if ((existing === null || existing === void 0 || (_existing$liveResize = existing.liveResize) === null || _existing$liveResize === void 0 ? void 0 : _existing$liveResize.mode) === mode && existing.liveResize.width === width) {
206
+ return current;
207
+ }
208
+ return existing ? _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, area, _objectSpread(_objectSpread({}, existing), {}, {
209
+ liveResize: {
210
+ mode: mode,
211
+ width: width
212
+ }
213
+ }))) : current;
214
+ });
215
+ }, []);
216
+ var completeResize = (0, _react.useCallback)(function (area, mode, width) {
217
+ if (mode === 'inline') {
218
+ // Keyboard resizing completes without a preceding pointer-drag session.
219
+ freezeSiblingWidths(area);
220
+ }
221
+ setAreas(function (current) {
222
+ var existing = current[area];
223
+ if (!existing) {
224
+ return current;
225
+ }
226
+ if (mode === 'overlay') {
227
+ return _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, area, _objectSpread(_objectSpread({}, existing), {}, {
228
+ liveResize: undefined,
229
+ preferredOverlayWidth: width
230
+ })));
231
+ }
232
+ return _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, area, _objectSpread(_objectSpread({}, existing), {}, {
233
+ liveResize: undefined,
234
+ preferredInlineWidth: width
235
+ })));
236
+ });
237
+ }, [freezeSiblingWidths]);
238
+ var areaStates = (0, _react.useMemo)(function () {
239
+ return dimensions === null ? {} : (0, _calculateLayoutAreaStates.calculateLayoutAreaStates)(_objectSpread(_objectSpread({}, dimensions), {}, {
240
+ occupiedWidth: occupiedWidth,
241
+ mainMinWidth: mainMinWidth,
242
+ areas: areas,
243
+ resizeSession: resizeSession
244
+ }));
245
+ }, [areas, mainMinWidth, resizeSession, dimensions, occupiedWidth]);
246
+ (0, _react.useEffect)(function () {
247
+ areaStatesRef.current = areaStates;
248
+ }, [areaStates]);
249
+ (0, _react.useEffect)(function () {
250
+ var _areaStates$sideNav, _areaStates$chatPane, _sideNav$openedAt, _chatPanel$openedAt;
251
+ if (((_areaStates$sideNav = areaStates['side-nav']) === null || _areaStates$sideNav === void 0 ? void 0 : _areaStates$sideNav.mode) !== 'overlay' || ((_areaStates$chatPane = areaStates['chat-panel']) === null || _areaStates$chatPane === void 0 ? void 0 : _areaStates$chatPane.mode) !== 'overlay') {
252
+ return;
253
+ }
254
+ var sideNav = areas['side-nav'];
255
+ var chatPanel = areas['chat-panel'];
256
+ if (!(sideNav !== null && sideNav !== void 0 && sideNav.isOpen) || !(chatPanel !== null && chatPanel !== void 0 && chatPanel.isOpen)) {
257
+ return;
258
+ }
259
+ if (((_sideNav$openedAt = sideNav.openedAt) !== null && _sideNav$openedAt !== void 0 ? _sideNav$openedAt : 0) > ((_chatPanel$openedAt = chatPanel.openedAt) !== null && _chatPanel$openedAt !== void 0 ? _chatPanel$openedAt : 0)) {
260
+ var _chatPanel$onRequestC;
261
+ (_chatPanel$onRequestC = chatPanel.onRequestClose) === null || _chatPanel$onRequestC === void 0 || _chatPanel$onRequestC.call(chatPanel);
262
+ } else {
263
+ var _sideNav$onRequestClo;
264
+ (_sideNav$onRequestClo = sideNav.onRequestClose) === null || _sideNav$onRequestClo === void 0 || _sideNav$onRequestClo.call(sideNav);
265
+ }
266
+ }, [areas, areaStates]);
267
+
268
+ // Read bounds lazily: changing a sibling's capacity must not publish new render
269
+ // state or recreate drag listeners for a region whose own width did not change.
270
+ var getResizeBounds = (0, _react.useCallback)(function (area) {
271
+ var _areaStatesRef$curren;
272
+ var bounds = (_areaStatesRef$curren = areaStatesRef.current[area]) === null || _areaStatesRef$curren === void 0 ? void 0 : _areaStatesRef$curren.resizeBounds;
273
+ return bounds ? {
274
+ min: "".concat(bounds.min, "px"),
275
+ max: "".concat(bounds.max, "px")
276
+ } : undefined;
277
+ }, []);
278
+ var value = (0, _react.useMemo)(function () {
279
+ return {
280
+ getResizeBounds: getResizeBounds,
281
+ registerArea: registerArea,
282
+ unregisterArea: unregisterArea,
283
+ startResize: startResize,
284
+ resize: resize,
285
+ completeResize: completeResize,
286
+ setMainMinWidth: setMainMinWidth
287
+ };
288
+ }, [completeResize, getResizeBounds, registerArea, resize, startResize, unregisterArea]);
289
+ var sideNavState = useStableAreaState(areaStates['side-nav']);
290
+ var panelState = useStableAreaState(areaStates.panel);
291
+ var chatPanelState = useStableAreaState(areaStates['chat-panel']);
292
+ var SideNavStateProvider = _layoutAreaStateContexts.layoutAreaStateContexts['side-nav'].Provider;
293
+ var PanelStateProvider = _layoutAreaStateContexts.layoutAreaStateContexts.panel.Provider;
294
+ var ChatPanelStateProvider = _layoutAreaStateContexts.layoutAreaStateContexts['chat-panel'].Provider;
295
+ return /*#__PURE__*/_react.default.createElement(_layoutAreaSizingContext.LayoutAreaSizingContext.Provider, {
296
+ value: value
297
+ }, /*#__PURE__*/_react.default.createElement(SideNavStateProvider, {
298
+ value: sideNavState
299
+ }, /*#__PURE__*/_react.default.createElement(PanelStateProvider, {
300
+ value: panelState
301
+ }, /*#__PURE__*/_react.default.createElement(ChatPanelStateProvider, {
302
+ value: chatPanelState
303
+ }, children))));
304
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.layoutAreaStateContexts = void 0;
7
+ var _react = require("react");
8
+ // Width changes should notify only the affected region, not every sizing consumer.
9
+ var layoutAreaStateContexts = exports.layoutAreaStateContexts = {
10
+ 'side-nav': /*#__PURE__*/(0, _react.createContext)(undefined),
11
+ panel: /*#__PURE__*/(0, _react.createContext)(undefined),
12
+ 'chat-panel': /*#__PURE__*/(0, _react.createContext)(undefined)
13
+ };
@@ -12,7 +12,10 @@ var React = _react;
12
12
  var _runtime = require("@compiled/react/runtime");
13
13
  var _fg = require("@atlaskit/platform-feature-flags/fg");
14
14
  var _useSkipLink = require("../../../context/skip-links/use-skip-link");
15
+ var _constants = require("../constants");
16
+ var _root = require("../root");
15
17
  var _useLayoutId = require("../use-layout-id");
18
+ var _useLayoutMainSizing = require("../use-layout-main-sizing");
16
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); }
17
20
  var contentInsetBlockStartStatic = "calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0px))";
18
21
  var contentHeightWhenFixedStatic = "calc(100vh - var(--n_bnrM, 0px) - var(--n_tNvM, 0px))";
@@ -29,12 +32,18 @@ function Main(_ref) {
29
32
  _ref$skipLinkLabel = _ref.skipLinkLabel,
30
33
  skipLinkLabel = _ref$skipLinkLabel === void 0 ? (0, _fg.fg)('platform_dst_nav4_skip_link_a11y_1') ? 'Main content' : 'Main Content' : _ref$skipLinkLabel,
31
34
  testId = _ref.testId,
32
- providedId = _ref.id;
35
+ providedId = _ref.id,
36
+ _ref$minWidth = _ref.minWidth,
37
+ minWidth = _ref$minWidth === void 0 ? 320 : _ref$minWidth;
33
38
  var id = (0, _useLayoutId.useLayoutId)({
34
39
  providedId: providedId
35
40
  });
41
+ (0, _useLayoutMainSizing.useLayoutMainSizing)(minWidth);
36
42
  (0, _useSkipLink.useSkipLink)(id, skipLinkLabel);
37
- return /*#__PURE__*/React.createElement(_react.Fragment, null, /*#__PURE__*/React.createElement("div", {
43
+ return /*#__PURE__*/React.createElement(_react.Fragment, null, (0, _fg.fg)('platform-dst-chat-panel-layout') &&
44
+ /*#__PURE__*/
45
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-global-styles
46
+ React.createElement("style", null, "#".concat(_root.gridRootId, " { ").concat(_constants.mainMinimumWidthVar, ": ").concat(minWidth, "px; }")), /*#__PURE__*/React.createElement("div", {
38
47
  id: id,
39
48
  "data-layout-slot": true,
40
49
  className: (0, _runtime.ax)([mainElementStyles.root, xcss]),
@@ -146,10 +146,13 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
146
146
  panelId = _ref3.panelId,
147
147
  panelWidth = _ref3.panelWidth,
148
148
  onCompleteResize = _ref3.onCompleteResize,
149
+ onResizeStartInternal = _ref3.onResizeStartInternal,
150
+ onResizeInternal = _ref3.onResizeInternal,
149
151
  getResizeBounds = _ref3.getResizeBounds,
150
152
  panel = _ref3.panel,
151
153
  portal = _ref3.portal,
152
154
  resizingCssVar = _ref3.resizingCssVar,
155
+ resizingElementRef = _ref3.resizingElementRef,
153
156
  position = _ref3.position,
154
157
  tooltipContent = _ref3.tooltipContent,
155
158
  shortcut = _ref3.shortcut;
@@ -187,9 +190,13 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
187
190
  // Storing the initial `clientX` on `mousedown` events, to workaround a bug caused by some browser extensions
188
191
  // where the `dragstart` event incorrectly returns `0` for the `clientX` location.
189
192
  var initialClientXRef = (0, _react.useRef)(null);
193
+ // Live allocation changes panelWidth on every frame. Only the legacy path should
194
+ // rebind the drag listeners when this value changes.
195
+ var legacyPanelWidth = (0, _fg.fg)('platform-dst-chat-panel-layout') ? undefined : panelWidth;
190
196
  (0, _react.useEffect)(function () {
191
197
  var splitter = splitterRef.current;
192
198
  (0, _tinyInvariant.default)(splitter, 'Splitter ref must be set');
199
+ var lastManagedResizeWidth;
193
200
  return (0, _combine.combine)((0, _blockDraggingToIframes.blockDraggingToIFrames)({
194
201
  element: splitter
195
202
  }),
@@ -248,9 +255,18 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
248
255
  * because some browser extensions can cause the event properties to incorrectly return 0.
249
256
  */
250
257
  (0, _tinyInvariant.default)((0, _isPanelSplitterDragData.isPanelSplitterDragData)(source.data));
251
- onResizeStart === null || onResizeStart === void 0 || onResizeStart({
258
+ var resizeStartData = {
252
259
  initialWidth: source.data.initialWidth
253
- });
260
+ };
261
+ // The layout allocation system needs to know which area is actively being
262
+ // resized before the first drag update. Committing this synchronously keeps
263
+ // the actively dragged area protected from automatic compression.
264
+ if (onResizeStartInternal) {
265
+ (0, _reactDom.flushSync)(function () {
266
+ return onResizeStartInternal(resizeStartData);
267
+ });
268
+ }
269
+ onResizeStart === null || onResizeStart === void 0 || onResizeStart(resizeStartData);
254
270
 
255
271
  // Close any open layers when the user starts resizing
256
272
  openLayerObserver === null || openLayerObserver === void 0 || openLayerObserver.closeLayers();
@@ -283,23 +299,54 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
283
299
  position: position
284
300
  });
285
301
  var resizingWidth = "clamp(".concat(resizeBounds.min, ", ").concat(targetWidth, "px, ").concat(resizeBounds.max, ")");
286
- panel.style.setProperty(resizingCssVar, resizingWidth);
302
+ if ((0, _fg.fg)('platform-dst-chat-panel-layout') && onResizeInternal) {
303
+ // Let the sizing provider constrain the width against Main's available space.
304
+ var width = Math.max((0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min), Math.min(targetWidth, (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)));
305
+ if (width !== lastManagedResizeWidth) {
306
+ lastManagedResizeWidth = width;
307
+ onResizeInternal(width);
308
+ }
309
+ } else {
310
+ var _resizingElementRef$c;
311
+ panel.style.setProperty(resizingCssVar, resizingWidth);
312
+ resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c = resizingElementRef.current) === null || _resizingElementRef$c === void 0 || _resizingElementRef$c.style.setProperty(resizingCssVar, resizingWidth);
313
+ }
287
314
  source.data.resizingWidth = resizingWidth;
288
315
  },
289
316
  onDrop: function onDrop(_ref7) {
317
+ var _resizingElementRef$c2;
290
318
  var source = _ref7.source;
291
319
  (0, _tinyInvariant.default)((0, _isPanelSplitterDragData.isPanelSplitterDragData)(source.data));
292
320
  _preventUnhandled.preventUnhandled.stop();
321
+
322
+ // PDD may deliver its final throttled drag update immediately before drop.
323
+ // Commit that update once before measuring; do not persist a previous frame.
324
+ if (onResizeInternal && lastManagedResizeWidth !== undefined) {
325
+ var width = lastManagedResizeWidth;
326
+ (0, _reactDom.flushSync)(function () {
327
+ return onResizeInternal(width);
328
+ });
329
+ lastManagedResizeWidth = undefined;
330
+ }
293
331
  var finalWidth = (0, _getPixelWidth.getPixelWidth)(panel);
294
- onCompleteResize(finalWidth);
332
+ // Persist the final preferred width before removing the imperative drag
333
+ // variable, so the rendered width is continuous across pointer release.
334
+ if ((0, _fg.fg)('platform-dst-chat-panel-layout')) {
335
+ (0, _reactDom.flushSync)(function () {
336
+ return onCompleteResize(finalWidth);
337
+ });
338
+ } else {
339
+ onCompleteResize(finalWidth);
340
+ }
295
341
  onResizeEnd === null || onResizeEnd === void 0 || onResizeEnd({
296
342
  initialWidth: source.data.initialWidth,
297
343
  finalWidth: finalWidth
298
344
  });
299
345
  panel.style.removeProperty(resizingCssVar);
346
+ resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c2 = resizingElementRef.current) === null || _resizingElementRef$c2 === void 0 || _resizingElementRef$c2.style.removeProperty(resizingCssVar);
300
347
  }
301
348
  }));
302
- }, [onCompleteResize, onResizeStart, onResizeEnd, panel, resizingCssVar, panelWidth, position, openLayerObserver, panelId, getResizeBounds]);
349
+ }, [onCompleteResize, onResizeStartInternal, onResizeInternal, onResizeStart, onResizeEnd, panel, resizingCssVar, resizingElementRef, legacyPanelWidth, position, openLayerObserver, panelId, getResizeBounds]);
303
350
  var onResizeStartStableRef = (0, _useStableRef.default)(onResizeStart);
304
351
  var onResizeEndStableRef = (0, _useStableRef.default)(onResizeEnd);
305
352
  var _useState5 = (0, _react.useState)(function () {
@@ -325,7 +372,20 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
325
372
  _useState6 = (0, _slicedToArray2.default)(_useState5, 1),
326
373
  keyboardResizeManager = _useState6[0];
327
374
  var handleSliderInputChange = (0, _react.useCallback)(function (event) {
328
- var value = parseInt(event.target.value);
375
+ var isManagedResize = (0, _fg.fg)('platform-dst-chat-panel-layout') && onResizeInternal;
376
+ var value = isManagedResize ? parseFloat(event.target.value) : parseInt(event.target.value);
377
+ if (isManagedResize) {
378
+ // The available region may have changed since focus, including without a
379
+ // window resize. Use the allocator's current bounds for the public payload.
380
+ var bounds = getResizeBounds();
381
+ var min = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.min);
382
+ var max = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.max);
383
+ value = Math.max(min, Math.min(value, max));
384
+ setRangeInputBounds({
385
+ min: min,
386
+ max: max
387
+ });
388
+ }
329
389
  setRangeInputValue(value);
330
390
 
331
391
  /**
@@ -337,7 +397,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
337
397
  initialWidth: panelWidth,
338
398
  finalWidth: value
339
399
  });
340
- }, [onCompleteResize, panelWidth, keyboardResizeManager]);
400
+ }, [getResizeBounds, onCompleteResize, onResizeInternal, panelWidth, keyboardResizeManager]);
341
401
  var resizeEventListenerCleanupFn = (0, _react.useRef)(null);
342
402
  var handleSliderFocus = (0, _react.useCallback)(function () {
343
403
  var _resizeEventListenerC;
@@ -462,8 +522,11 @@ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref8) {
462
522
  panelId = context.panelId,
463
523
  panelWidth = context.panelWidth,
464
524
  onCompleteResize = context.onCompleteResize,
525
+ onResizeStartInternal = context.onResizeStartInternal,
526
+ onResizeInternal = context.onResizeInternal,
465
527
  getResizeBounds = context.getResizeBounds,
466
528
  resizingCssVar = context.resizingCssVar,
529
+ resizingElementRef = context.resizingElementRef,
467
530
  position = context.position,
468
531
  shortcut = context.shortcut;
469
532
 
@@ -558,8 +621,11 @@ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref8) {
558
621
  portal: portal,
559
622
  panelWidth: panelWidth,
560
623
  onCompleteResize: onCompleteResize,
624
+ onResizeStartInternal: onResizeStartInternal,
625
+ onResizeInternal: onResizeInternal,
561
626
  getResizeBounds: getResizeBounds,
562
627
  resizingCssVar: resizingCssVar,
628
+ resizingElementRef: resizingElementRef,
563
629
  position: position,
564
630
  tooltipContent: tooltipContent,
565
631
  shortcut: shortcut
@@ -17,9 +17,12 @@ var PanelSplitterProvider = exports.PanelSplitterProvider = function PanelSplitt
17
17
  var panelId = _ref.panelId,
18
18
  panelWidth = _ref.panelWidth,
19
19
  onCompleteResize = _ref.onCompleteResize,
20
+ onResizeStartInternal = _ref.onResizeStartInternal,
21
+ onResizeInternal = _ref.onResizeInternal,
20
22
  getResizeBounds = _ref.getResizeBounds,
21
23
  resizingCssVar = _ref.resizingCssVar,
22
24
  panelRef = _ref.panelRef,
25
+ resizingElementRef = _ref.resizingElementRef,
23
26
  providedPortalRef = _ref.portalRef,
24
27
  _ref$position = _ref.position,
25
28
  position = _ref$position === void 0 ? 'end' : _ref$position,
@@ -33,15 +36,18 @@ var PanelSplitterProvider = exports.PanelSplitterProvider = function PanelSplitt
33
36
  panelId: panelId,
34
37
  panelWidth: panelWidth,
35
38
  onCompleteResize: onCompleteResize,
39
+ onResizeStartInternal: onResizeStartInternal,
40
+ onResizeInternal: onResizeInternal,
36
41
  getResizeBounds: getResizeBounds,
37
42
  resizingCssVar: resizingCssVar,
38
43
  position: position,
39
44
  panelRef: panelRef,
45
+ resizingElementRef: resizingElementRef,
40
46
  isEnabled: isEnabled,
41
47
  portalRef: typeof providedPortalRef !== 'undefined' ? providedPortalRef : portalRef,
42
48
  shortcut: shortcut
43
49
  };
44
- }, [panelId, panelWidth, onCompleteResize, getResizeBounds, resizingCssVar, position, panelRef, isEnabled, providedPortalRef, shortcut]);
50
+ }, [panelId, panelWidth, onCompleteResize, onResizeStartInternal, onResizeInternal, getResizeBounds, resizingCssVar, position, panelRef, resizingElementRef, isEnabled, providedPortalRef, shortcut]);
45
51
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_panelSplitterContext.PanelSplitterContext.Provider, {
46
52
  value: context
47
53
  }, children), typeof providedPortalRef !== 'undefined' ? null : /*#__PURE__*/_react.default.createElement("div", {
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resolveLayoutWidth = resolveLayoutWidth;
7
+ function resolveLayoutWidth(bound, viewportWidth) {
8
+ if (typeof bound === 'number') {
9
+ return bound;
10
+ }
11
+ var value = Number.parseFloat(bound);
12
+ return bound.endsWith('vw') ? viewportWidth * value / 100 : value;
13
+ }
@@ -16,6 +16,7 @@ var _hoistSlotSizesContext = require("./hoist-slot-sizes-context");
16
16
  var _useLayoutId = require("./use-layout-id");
17
17
  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); }
18
18
  var localSlotLayersStatic = {
19
+ chatPanelOverlay: 5,
19
20
  ribbon: 4,
20
21
  // The side nav panel splitter is layered above the top nav when FHS is enabled.
21
22
  // It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
@@ -1,5 +1,6 @@
1
1
  ._18m9zryt{overflow-y:clip}
2
2
  ._1ciragmp >:not([data-layout-slot]){display:none!important}
3
+ ._1cwmtye8{--n_mainMinW:20rem}
3
4
  ._1e0c11p5{display:grid}
4
5
  ._1lmcq9em{grid-template-areas:"banner" "top-bar" "main" "aside"}
5
6
  ._1reozryt{overflow-x:clip}
@@ -7,5 +8,6 @@
7
8
  ._1tvnagmp >:not([data-layout-slot]):not(dialog):not([popover]){display:none!important}
8
9
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
9
10
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
10
- @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}}
11
- @media (min-width:90rem){._xkmgks3h{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar" "ribbon side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1nco{grid-template-columns:auto auto minmax(0,1fr) auto auto}}
11
+ @media (min-width:40rem){._12ag50j2{grid-template-areas:"banner banner" "top-bar chat-panel" "main chat-panel" "aside chat-panel"}._71dlqwpl{grid-template-columns:minmax(var(--n_mainMinW),1fr) minmax(0,max-content)}}
12
+ @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}._12fkqmyk{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar chat-panel" "ribbon side-nav main aside chat-panel"}._1rqt8mqp{grid-template-columns:auto auto minmax(var(--n_mainMinW),1fr) auto minmax(0,max-content)}}
13
+ @media (min-width:90rem){._xkmggc7l{grid-template-areas:"banner banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar chat-panel" "ribbon side-nav main aside panel chat-panel"}._tyve1i18{grid-template-columns:auto auto minmax(var(--n_mainMinW),1fr) auto auto minmax(0,max-content)}._xkmgks3h{grid-template-areas:"banner banner banner banner banner" "ribbon top-bar top-bar top-bar top-bar" "ribbon side-nav main aside panel"}._jbc7rxre{grid-template-rows:auto auto 3fr}._tyve1nco{grid-template-columns:auto auto minmax(0,1fr) auto auto}}
@@ -15,6 +15,7 @@ var _fg = require("@atlaskit/platform-feature-flags/fg");
15
15
  var _skipLinksProvider = require("../../context/skip-links/skip-links-provider");
16
16
  var _topNavStartContextProvider = require("../../context/top-nav-start/top-nav-start-context-provider");
17
17
  var _hoistSlotSizesContext = require("./hoist-slot-sizes-context");
18
+ var _layoutAreaSizingProvider = require("./layout-area-sizing-provider");
18
19
  var _isSideNavShortcutEnabledProvider = require("./side-nav/is-side-nav-shortcut-enabled-provider");
19
20
  var _sideNavElementProvider = require("./side-nav/side-nav-element-provider");
20
21
  var _toggleButtonProvider = require("./side-nav/toggle-button-provider");
@@ -23,7 +24,8 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
23
24
  // ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
24
25
  var gridRootId = exports.gridRootId = 'unsafe-design-system-page-layout-root';
25
26
  var styles = {
26
- root: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
27
+ legacyRoot: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
28
+ root: "_1cwmtye8 _1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12ag50j2 _71dlqwpl _12fkqmyk _12qzrxre _1rqt8mqp _xkmggc7l _tyve1i18",
27
29
  safetyRail: "_1ciragmp",
28
30
  safetyRailWithTopLayer: "_1tvnagmp",
29
31
  panelUplift: "_1reozryt _18m9zryt"
@@ -47,6 +49,8 @@ function Root(_ref) {
47
49
  _ref$isSideNavShortcu = _ref.isSideNavShortcutEnabled,
48
50
  isSideNavShortcutEnabled = _ref$isSideNavShortcu === void 0 ? false : _ref$isSideNavShortcu;
49
51
  var ref = (0, _react.useRef)(null);
52
+ var isChatPanelLayoutEnabled = (0, _fg.fg)('platform-dst-chat-panel-layout');
53
+ var LayoutProvider = isChatPanelLayoutEnabled ? _layoutAreaSizingProvider.LayoutAreaSizingProvider : _react.default.Fragment;
50
54
  (0, _react.useEffect)(function () {
51
55
  if (process.env.NODE_ENV !== 'production') {
52
56
  var IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
@@ -67,7 +71,9 @@ function Root(_ref) {
67
71
  defaultCollapsed: defaultSideNavCollapsed
68
72
  }, /*#__PURE__*/_react.default.createElement(_toggleButtonProvider.SideNavToggleButtonProvider, null, /*#__PURE__*/_react.default.createElement(_sideNavElementProvider.SideNavElementProvider, null, /*#__PURE__*/_react.default.createElement(_isSideNavShortcutEnabledProvider.IsSideNavShortcutEnabledProvider, {
69
73
  isSideNavShortcutEnabled: isSideNavShortcutEnabled
70
- }, /*#__PURE__*/_react.default.createElement(_topNavStartContextProvider.TopNavStartProvider, null, /*#__PURE__*/_react.default.createElement(_openLayerObserver.OpenLayerObserver, null, /*#__PURE__*/_react.default.createElement(_hoistSlotSizesContext.DangerouslyHoistSlotSizes.Provider, {
74
+ }, /*#__PURE__*/_react.default.createElement(_topNavStartContextProvider.TopNavStartProvider, null, /*#__PURE__*/_react.default.createElement(LayoutProvider, isChatPanelLayoutEnabled ? {
75
+ layoutRef: ref
76
+ } : {}, /*#__PURE__*/_react.default.createElement(_openLayerObserver.OpenLayerObserver, null, /*#__PURE__*/_react.default.createElement(_hoistSlotSizesContext.DangerouslyHoistSlotSizes.Provider, {
71
77
  value: UNSAFE_dangerouslyHoistSlotSizes
72
78
  }, /*#__PURE__*/_react.default.createElement(_skipLinksProvider.SkipLinksProvider, {
73
79
  label: skipLinksLabel,
@@ -75,8 +81,8 @@ function Root(_ref) {
75
81
  testId: testId
76
82
  }, /*#__PURE__*/_react.default.createElement("div", {
77
83
  ref: ref,
78
- className: (0, _runtime.ax)([styles.root, (0, _fg.fg)('platform-dst-motion-uplift-panel') && styles.panelUplift, (0, _fg.fg)('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
84
+ className: (0, _runtime.ax)([isChatPanelLayoutEnabled ? styles.root : styles.legacyRoot, (0, _fg.fg)('platform-dst-motion-uplift-panel') && styles.panelUplift, (0, _fg.fg)('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
79
85
  id: gridRootId,
80
86
  "data-testid": testId
81
- }, children)))))))));
87
+ }, children))))))))));
82
88
  }