@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/entry-points/layout/chat-panel.js +12 -0
- package/dist/cjs/entry-points/layout/layout-sizing.js +44 -0
- package/dist/cjs/ui/page-layout/calculate-layout-area-states.js +179 -0
- package/dist/cjs/ui/page-layout/chat-panel.compiled.css +27 -0
- package/dist/cjs/ui/page-layout/chat-panel.js +216 -0
- package/dist/cjs/ui/page-layout/constants.js +6 -1
- package/dist/cjs/ui/page-layout/layout-area-sizing-context.js +13 -0
- package/dist/cjs/ui/page-layout/layout-area-sizing-provider.js +304 -0
- package/dist/cjs/ui/page-layout/layout-area-state-contexts.js +13 -0
- package/dist/cjs/ui/page-layout/main/main.js +11 -2
- package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +73 -7
- package/dist/cjs/ui/page-layout/panel-splitter/provider.js +7 -1
- package/dist/cjs/ui/page-layout/resolve-layout-width.js +13 -0
- package/dist/cjs/ui/page-layout/ribbon.js +1 -0
- package/dist/cjs/ui/page-layout/root.compiled.css +4 -2
- package/dist/cjs/ui/page-layout/root.js +10 -4
- package/dist/cjs/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
- package/dist/cjs/ui/page-layout/side-nav/side-nav.js +152 -14
- package/dist/cjs/ui/page-layout/use-layout-area-sizing.js +73 -0
- package/dist/cjs/ui/page-layout/use-layout-main-sizing.js +15 -0
- package/dist/cjs/ui/page-layout/use-occupied-layout-width.js +111 -0
- package/dist/es2019/entry-points/layout/chat-panel.js +1 -0
- package/dist/es2019/entry-points/layout/layout-sizing.js +3 -0
- package/dist/es2019/ui/page-layout/calculate-layout-area-states.js +128 -0
- package/dist/es2019/ui/page-layout/chat-panel.compiled.css +27 -0
- package/dist/es2019/ui/page-layout/chat-panel.js +199 -0
- package/dist/es2019/ui/page-layout/constants.js +5 -0
- package/dist/es2019/ui/page-layout/layout-area-sizing-context.js +8 -0
- package/dist/es2019/ui/page-layout/layout-area-sizing-provider.js +279 -0
- package/dist/es2019/ui/page-layout/layout-area-state-contexts.js +7 -0
- package/dist/es2019/ui/page-layout/main/main.js +10 -2
- package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +68 -8
- package/dist/es2019/ui/page-layout/panel-splitter/provider.js +7 -1
- package/dist/es2019/ui/page-layout/resolve-layout-width.js +7 -0
- package/dist/es2019/ui/page-layout/ribbon.js +1 -0
- package/dist/es2019/ui/page-layout/root.compiled.css +4 -2
- package/dist/es2019/ui/page-layout/root.js +10 -4
- package/dist/es2019/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
- package/dist/es2019/ui/page-layout/side-nav/side-nav.js +142 -14
- package/dist/es2019/ui/page-layout/use-layout-area-sizing.js +58 -0
- package/dist/es2019/ui/page-layout/use-layout-main-sizing.js +7 -0
- package/dist/es2019/ui/page-layout/use-occupied-layout-width.js +67 -0
- package/dist/esm/entry-points/layout/chat-panel.js +1 -0
- package/dist/esm/entry-points/layout/layout-sizing.js +3 -0
- package/dist/esm/ui/page-layout/calculate-layout-area-states.js +173 -0
- package/dist/esm/ui/page-layout/chat-panel.compiled.css +27 -0
- package/dist/esm/ui/page-layout/chat-panel.js +207 -0
- package/dist/esm/ui/page-layout/constants.js +5 -0
- package/dist/esm/ui/page-layout/layout-area-sizing-context.js +8 -0
- package/dist/esm/ui/page-layout/layout-area-sizing-provider.js +295 -0
- package/dist/esm/ui/page-layout/layout-area-state-contexts.js +7 -0
- package/dist/esm/ui/page-layout/main/main.js +11 -2
- package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +74 -8
- package/dist/esm/ui/page-layout/panel-splitter/provider.js +7 -1
- package/dist/esm/ui/page-layout/resolve-layout-width.js +7 -0
- package/dist/esm/ui/page-layout/ribbon.js +1 -0
- package/dist/esm/ui/page-layout/root.compiled.css +4 -2
- package/dist/esm/ui/page-layout/root.js +10 -4
- package/dist/esm/ui/page-layout/side-nav/side-nav.compiled.css +2 -1
- package/dist/esm/ui/page-layout/side-nav/side-nav.js +153 -15
- package/dist/esm/ui/page-layout/use-layout-area-sizing.js +67 -0
- package/dist/esm/ui/page-layout/use-layout-main-sizing.js +9 -0
- package/dist/esm/ui/page-layout/use-occupied-layout-width.js +105 -0
- package/dist/types/entry-points/layout/chat-panel.d.ts +1 -0
- package/dist/types/entry-points/layout/layout-sizing.d.ts +4 -0
- package/dist/types/ui/page-layout/calculate-layout-area-states.d.ts +20 -0
- package/dist/types/ui/page-layout/chat-panel.d.ts +48 -0
- package/dist/types/ui/page-layout/constants.d.ts +4 -0
- package/dist/types/ui/page-layout/layout-area-sizing-context.d.ts +55 -0
- package/dist/types/ui/page-layout/layout-area-sizing-provider.d.ts +5 -0
- package/dist/types/ui/page-layout/layout-area-state-contexts.d.ts +3 -0
- package/dist/types/ui/page-layout/main/main.d.ts +5 -1
- package/dist/types/ui/page-layout/panel-splitter/panel-splitter-context.d.ts +15 -1
- package/dist/types/ui/page-layout/panel-splitter/provider.d.ts +1 -1
- package/dist/types/ui/page-layout/resolve-layout-width.d.ts +2 -0
- package/dist/types/ui/page-layout/side-nav/side-nav.d.ts +11 -2
- package/dist/types/ui/page-layout/use-layout-area-sizing.d.ts +12 -0
- package/dist/types/ui/page-layout/use-layout-main-sizing.d.ts +2 -0
- package/dist/types/ui/page-layout/use-occupied-layout-width.d.ts +8 -0
- package/layout/chat-panel/package.json +10 -0
- package/layout/layout-sizing/package.json +10 -0
- package/package.json +11 -3
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
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; } } }; }
|
|
4
|
+
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; } }
|
|
5
|
+
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; }
|
|
6
|
+
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; }
|
|
7
|
+
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) { _defineProperty(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; }
|
|
8
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
9
|
+
import { bind } from 'bind-event-listener';
|
|
10
|
+
import { calculateLayoutAreaStates } from './calculate-layout-area-states';
|
|
11
|
+
import { LayoutAreaSizingContext } from './layout-area-sizing-context';
|
|
12
|
+
import { layoutAreaStateContexts } from './layout-area-state-contexts';
|
|
13
|
+
import { useOccupiedLayoutWidth } from './use-occupied-layout-width';
|
|
14
|
+
var defaultMainMinWidth = 320;
|
|
15
|
+
function useStableAreaState(state) {
|
|
16
|
+
var _ref = state !== null && state !== void 0 ? state : {},
|
|
17
|
+
mode = _ref.mode,
|
|
18
|
+
width = _ref.width,
|
|
19
|
+
minWidth = _ref.minWidth;
|
|
20
|
+
return useMemo(function () {
|
|
21
|
+
return mode !== undefined && width !== undefined && minWidth !== undefined ? {
|
|
22
|
+
mode: mode,
|
|
23
|
+
width: width,
|
|
24
|
+
minWidth: minWidth
|
|
25
|
+
} : undefined;
|
|
26
|
+
}, [mode, width, minWidth]);
|
|
27
|
+
}
|
|
28
|
+
export function LayoutAreaSizingProvider(_ref2) {
|
|
29
|
+
var children = _ref2.children,
|
|
30
|
+
layoutRef = _ref2.layoutRef;
|
|
31
|
+
var occupiedWidth = useOccupiedLayoutWidth(layoutRef);
|
|
32
|
+
var _useState = useState(null),
|
|
33
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
34
|
+
dimensions = _useState2[0],
|
|
35
|
+
setDimensions = _useState2[1];
|
|
36
|
+
var _useState3 = useState(defaultMainMinWidth),
|
|
37
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
38
|
+
mainMinWidth = _useState4[0],
|
|
39
|
+
setMainMinWidth = _useState4[1];
|
|
40
|
+
var _useState5 = useState({}),
|
|
41
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
42
|
+
areas = _useState6[0],
|
|
43
|
+
setAreas = _useState6[1];
|
|
44
|
+
var _useState7 = useState(null),
|
|
45
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
46
|
+
resizeSession = _useState8[0],
|
|
47
|
+
setResizeSession = _useState8[1];
|
|
48
|
+
var areaStatesRef = React.useRef({});
|
|
49
|
+
var configsRef = React.useRef({});
|
|
50
|
+
var openSequence = React.useRef(0);
|
|
51
|
+
useEffect(function () {
|
|
52
|
+
setResizeSession(null);
|
|
53
|
+
}, [mainMinWidth, occupiedWidth]);
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
var root = layoutRef === null || layoutRef === void 0 ? void 0 : layoutRef.current;
|
|
56
|
+
var previous = null;
|
|
57
|
+
// Match the actual rem-based grid breakpoint, including browser font settings.
|
|
58
|
+
var inlineChatQuery = window.matchMedia('(min-width: 40rem)');
|
|
59
|
+
var inlineSideNavQuery = window.matchMedia('(min-width: 64rem)');
|
|
60
|
+
var updateDimensions = function updateDimensions(contentWidth) {
|
|
61
|
+
var _style$paddingLeft, _style$paddingRight, _previous;
|
|
62
|
+
var style = root && contentWidth === undefined ? getComputedStyle(root) : null;
|
|
63
|
+
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;
|
|
64
|
+
var next = {
|
|
65
|
+
viewportWidth: window.innerWidth,
|
|
66
|
+
layoutWidth: layoutWidth,
|
|
67
|
+
isChatPanelOverlay: !inlineChatQuery.matches,
|
|
68
|
+
isSideNavOverlay: !inlineSideNavQuery.matches
|
|
69
|
+
};
|
|
70
|
+
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) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
previous = next;
|
|
74
|
+
setDimensions(next);
|
|
75
|
+
setResizeSession(null);
|
|
76
|
+
};
|
|
77
|
+
updateDimensions();
|
|
78
|
+
var observer = new ResizeObserver(function (entries) {
|
|
79
|
+
var entry = entries.find(function (entry) {
|
|
80
|
+
return entry.target === root;
|
|
81
|
+
});
|
|
82
|
+
if (entry) {
|
|
83
|
+
updateDimensions(entry.contentRect.width);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
if (root) {
|
|
87
|
+
observer.observe(root);
|
|
88
|
+
}
|
|
89
|
+
var unbindResize = bind(window, {
|
|
90
|
+
type: 'resize',
|
|
91
|
+
listener: function listener() {
|
|
92
|
+
return updateDimensions();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
var unbindQuery = bind(inlineChatQuery, {
|
|
96
|
+
type: 'change',
|
|
97
|
+
listener: function listener() {
|
|
98
|
+
return updateDimensions();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
var unbindSideNavQuery = bind(inlineSideNavQuery, {
|
|
102
|
+
type: 'change',
|
|
103
|
+
listener: function listener() {
|
|
104
|
+
return updateDimensions();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
return function () {
|
|
108
|
+
observer.disconnect();
|
|
109
|
+
unbindResize();
|
|
110
|
+
unbindQuery();
|
|
111
|
+
unbindSideNavQuery();
|
|
112
|
+
};
|
|
113
|
+
}, [layoutRef]);
|
|
114
|
+
var registerArea = useCallback(function (area, config) {
|
|
115
|
+
var previous = configsRef.current[area];
|
|
116
|
+
configsRef.current[area] = config;
|
|
117
|
+
setResizeSession(function (current) {
|
|
118
|
+
// A changed layout/configuration needs a fresh allocation. A controlled
|
|
119
|
+
// acknowledgement for the resized area keeps its siblings fixed.
|
|
120
|
+
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;
|
|
121
|
+
});
|
|
122
|
+
// Allocate once per registration, outside the updater React may replay. Gaps are
|
|
123
|
+
// harmless: only relative ordering of closed-to-open transitions is significant.
|
|
124
|
+
var openedAt = ++openSequence.current;
|
|
125
|
+
setAreas(function (current) {
|
|
126
|
+
var existing = current[area];
|
|
127
|
+
return _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, area, _objectSpread(_objectSpread(_objectSpread({}, existing), config), {}, {
|
|
128
|
+
liveResize: config.isOpen ? existing === null || existing === void 0 ? void 0 : existing.liveResize : undefined,
|
|
129
|
+
openedAt: config.isOpen && !(existing !== null && existing !== void 0 && existing.isOpen) ? openedAt : existing === null || existing === void 0 ? void 0 : existing.openedAt
|
|
130
|
+
})));
|
|
131
|
+
});
|
|
132
|
+
}, []);
|
|
133
|
+
var unregisterArea = useCallback(function (area) {
|
|
134
|
+
delete configsRef.current[area];
|
|
135
|
+
setResizeSession(null);
|
|
136
|
+
setAreas(function (current) {
|
|
137
|
+
if (!current[area]) {
|
|
138
|
+
return current;
|
|
139
|
+
}
|
|
140
|
+
// Closing uses isOpen: false and retains preferences. Unregistering means
|
|
141
|
+
// the owning component unmounted; a replacement must start with its own defaults.
|
|
142
|
+
var next = _objectSpread({}, current);
|
|
143
|
+
delete next[area];
|
|
144
|
+
return next;
|
|
145
|
+
});
|
|
146
|
+
}, []);
|
|
147
|
+
var freezeSiblingWidths = useCallback(function (area) {
|
|
148
|
+
var baselineWidths = {};
|
|
149
|
+
var _iterator = _createForOfIteratorHelper(['side-nav', 'panel', 'chat-panel']),
|
|
150
|
+
_step;
|
|
151
|
+
try {
|
|
152
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
153
|
+
var areaName = _step.value;
|
|
154
|
+
var state = areaStatesRef.current[areaName];
|
|
155
|
+
if ((state === null || state === void 0 ? void 0 : state.mode) === 'inline') {
|
|
156
|
+
baselineWidths[areaName] = state.width;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Keep the same siblings fixed after completion, including while a controlled
|
|
160
|
+
// consumer rejects or asynchronously accepts the requested width.
|
|
161
|
+
} catch (err) {
|
|
162
|
+
_iterator.e(err);
|
|
163
|
+
} finally {
|
|
164
|
+
_iterator.f();
|
|
165
|
+
}
|
|
166
|
+
setResizeSession({
|
|
167
|
+
area: area,
|
|
168
|
+
baselineWidths: baselineWidths
|
|
169
|
+
});
|
|
170
|
+
}, []);
|
|
171
|
+
var startResize = useCallback(function (area, mode) {
|
|
172
|
+
if (mode !== 'inline') {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
freezeSiblingWidths(area);
|
|
176
|
+
|
|
177
|
+
// Start from the effective width, which may already be compressed below the preferred width.
|
|
178
|
+
// Reapplying the preferred width here would move the splitter away from the pointer.
|
|
179
|
+
var renderedState = areaStatesRef.current[area];
|
|
180
|
+
if ((renderedState === null || renderedState === void 0 ? void 0 : renderedState.mode) === 'inline') {
|
|
181
|
+
setAreas(function (current) {
|
|
182
|
+
var existing = current[area];
|
|
183
|
+
return existing ? _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, area, _objectSpread(_objectSpread({}, existing), {}, {
|
|
184
|
+
liveResize: {
|
|
185
|
+
mode: mode,
|
|
186
|
+
width: renderedState.width
|
|
187
|
+
}
|
|
188
|
+
}))) : current;
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}, [freezeSiblingWidths]);
|
|
192
|
+
var resize = useCallback(function (area, mode, width) {
|
|
193
|
+
setAreas(function (current) {
|
|
194
|
+
var _existing$liveResize;
|
|
195
|
+
var existing = current[area];
|
|
196
|
+
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) {
|
|
197
|
+
return current;
|
|
198
|
+
}
|
|
199
|
+
return existing ? _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, area, _objectSpread(_objectSpread({}, existing), {}, {
|
|
200
|
+
liveResize: {
|
|
201
|
+
mode: mode,
|
|
202
|
+
width: width
|
|
203
|
+
}
|
|
204
|
+
}))) : current;
|
|
205
|
+
});
|
|
206
|
+
}, []);
|
|
207
|
+
var completeResize = useCallback(function (area, mode, width) {
|
|
208
|
+
if (mode === 'inline') {
|
|
209
|
+
// Keyboard resizing completes without a preceding pointer-drag session.
|
|
210
|
+
freezeSiblingWidths(area);
|
|
211
|
+
}
|
|
212
|
+
setAreas(function (current) {
|
|
213
|
+
var existing = current[area];
|
|
214
|
+
if (!existing) {
|
|
215
|
+
return current;
|
|
216
|
+
}
|
|
217
|
+
if (mode === 'overlay') {
|
|
218
|
+
return _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, area, _objectSpread(_objectSpread({}, existing), {}, {
|
|
219
|
+
liveResize: undefined,
|
|
220
|
+
preferredOverlayWidth: width
|
|
221
|
+
})));
|
|
222
|
+
}
|
|
223
|
+
return _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, area, _objectSpread(_objectSpread({}, existing), {}, {
|
|
224
|
+
liveResize: undefined,
|
|
225
|
+
preferredInlineWidth: width
|
|
226
|
+
})));
|
|
227
|
+
});
|
|
228
|
+
}, [freezeSiblingWidths]);
|
|
229
|
+
var areaStates = useMemo(function () {
|
|
230
|
+
return dimensions === null ? {} : calculateLayoutAreaStates(_objectSpread(_objectSpread({}, dimensions), {}, {
|
|
231
|
+
occupiedWidth: occupiedWidth,
|
|
232
|
+
mainMinWidth: mainMinWidth,
|
|
233
|
+
areas: areas,
|
|
234
|
+
resizeSession: resizeSession
|
|
235
|
+
}));
|
|
236
|
+
}, [areas, mainMinWidth, resizeSession, dimensions, occupiedWidth]);
|
|
237
|
+
useEffect(function () {
|
|
238
|
+
areaStatesRef.current = areaStates;
|
|
239
|
+
}, [areaStates]);
|
|
240
|
+
useEffect(function () {
|
|
241
|
+
var _areaStates$sideNav, _areaStates$chatPane, _sideNav$openedAt, _chatPanel$openedAt;
|
|
242
|
+
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') {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
var sideNav = areas['side-nav'];
|
|
246
|
+
var chatPanel = areas['chat-panel'];
|
|
247
|
+
if (!(sideNav !== null && sideNav !== void 0 && sideNav.isOpen) || !(chatPanel !== null && chatPanel !== void 0 && chatPanel.isOpen)) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
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)) {
|
|
251
|
+
var _chatPanel$onRequestC;
|
|
252
|
+
(_chatPanel$onRequestC = chatPanel.onRequestClose) === null || _chatPanel$onRequestC === void 0 || _chatPanel$onRequestC.call(chatPanel);
|
|
253
|
+
} else {
|
|
254
|
+
var _sideNav$onRequestClo;
|
|
255
|
+
(_sideNav$onRequestClo = sideNav.onRequestClose) === null || _sideNav$onRequestClo === void 0 || _sideNav$onRequestClo.call(sideNav);
|
|
256
|
+
}
|
|
257
|
+
}, [areas, areaStates]);
|
|
258
|
+
|
|
259
|
+
// Read bounds lazily: changing a sibling's capacity must not publish new render
|
|
260
|
+
// state or recreate drag listeners for a region whose own width did not change.
|
|
261
|
+
var getResizeBounds = useCallback(function (area) {
|
|
262
|
+
var _areaStatesRef$curren;
|
|
263
|
+
var bounds = (_areaStatesRef$curren = areaStatesRef.current[area]) === null || _areaStatesRef$curren === void 0 ? void 0 : _areaStatesRef$curren.resizeBounds;
|
|
264
|
+
return bounds ? {
|
|
265
|
+
min: "".concat(bounds.min, "px"),
|
|
266
|
+
max: "".concat(bounds.max, "px")
|
|
267
|
+
} : undefined;
|
|
268
|
+
}, []);
|
|
269
|
+
var value = useMemo(function () {
|
|
270
|
+
return {
|
|
271
|
+
getResizeBounds: getResizeBounds,
|
|
272
|
+
registerArea: registerArea,
|
|
273
|
+
unregisterArea: unregisterArea,
|
|
274
|
+
startResize: startResize,
|
|
275
|
+
resize: resize,
|
|
276
|
+
completeResize: completeResize,
|
|
277
|
+
setMainMinWidth: setMainMinWidth
|
|
278
|
+
};
|
|
279
|
+
}, [completeResize, getResizeBounds, registerArea, resize, startResize, unregisterArea]);
|
|
280
|
+
var sideNavState = useStableAreaState(areaStates['side-nav']);
|
|
281
|
+
var panelState = useStableAreaState(areaStates.panel);
|
|
282
|
+
var chatPanelState = useStableAreaState(areaStates['chat-panel']);
|
|
283
|
+
var SideNavStateProvider = layoutAreaStateContexts['side-nav'].Provider;
|
|
284
|
+
var PanelStateProvider = layoutAreaStateContexts.panel.Provider;
|
|
285
|
+
var ChatPanelStateProvider = layoutAreaStateContexts['chat-panel'].Provider;
|
|
286
|
+
return /*#__PURE__*/React.createElement(LayoutAreaSizingContext.Provider, {
|
|
287
|
+
value: value
|
|
288
|
+
}, /*#__PURE__*/React.createElement(SideNavStateProvider, {
|
|
289
|
+
value: sideNavState
|
|
290
|
+
}, /*#__PURE__*/React.createElement(PanelStateProvider, {
|
|
291
|
+
value: panelState
|
|
292
|
+
}, /*#__PURE__*/React.createElement(ChatPanelStateProvider, {
|
|
293
|
+
value: chatPanelState
|
|
294
|
+
}, children))));
|
|
295
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
// Width changes should notify only the affected region, not every sizing consumer.
|
|
3
|
+
export var layoutAreaStateContexts = {
|
|
4
|
+
'side-nav': /*#__PURE__*/createContext(undefined),
|
|
5
|
+
panel: /*#__PURE__*/createContext(undefined),
|
|
6
|
+
'chat-panel': /*#__PURE__*/createContext(undefined)
|
|
7
|
+
};
|
|
@@ -5,7 +5,10 @@ import { ax, ix } from "@compiled/react/runtime";
|
|
|
5
5
|
import { Fragment } from 'react';
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
7
7
|
import { useSkipLink } from '../../../context/skip-links/use-skip-link';
|
|
8
|
+
import { mainMinimumWidthVar } from '../constants';
|
|
9
|
+
import { gridRootId } from '../root';
|
|
8
10
|
import { useLayoutId } from '../use-layout-id';
|
|
11
|
+
import { useLayoutMainSizing } from '../use-layout-main-sizing';
|
|
9
12
|
var contentInsetBlockStartStatic = "calc(var(--n_bnrM, 0px) + var(--n_tNvM, 0px))";
|
|
10
13
|
var contentHeightWhenFixedStatic = "calc(100vh - var(--n_bnrM, 0px) - var(--n_tNvM, 0px))";
|
|
11
14
|
var mainElementStyles = {
|
|
@@ -21,12 +24,18 @@ export function Main(_ref) {
|
|
|
21
24
|
_ref$skipLinkLabel = _ref.skipLinkLabel,
|
|
22
25
|
skipLinkLabel = _ref$skipLinkLabel === void 0 ? fg('platform_dst_nav4_skip_link_a11y_1') ? 'Main content' : 'Main Content' : _ref$skipLinkLabel,
|
|
23
26
|
testId = _ref.testId,
|
|
24
|
-
providedId = _ref.id
|
|
27
|
+
providedId = _ref.id,
|
|
28
|
+
_ref$minWidth = _ref.minWidth,
|
|
29
|
+
minWidth = _ref$minWidth === void 0 ? 320 : _ref$minWidth;
|
|
25
30
|
var id = useLayoutId({
|
|
26
31
|
providedId: providedId
|
|
27
32
|
});
|
|
33
|
+
useLayoutMainSizing(minWidth);
|
|
28
34
|
useSkipLink(id, skipLinkLabel);
|
|
29
|
-
return /*#__PURE__*/React.createElement(Fragment, null,
|
|
35
|
+
return /*#__PURE__*/React.createElement(Fragment, null, fg('platform-dst-chat-panel-layout') &&
|
|
36
|
+
/*#__PURE__*/
|
|
37
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-global-styles
|
|
38
|
+
React.createElement("style", null, "#".concat(gridRootId, " { ").concat(mainMinimumWidthVar, ": ").concat(minWidth, "px; }")), /*#__PURE__*/React.createElement("div", {
|
|
30
39
|
id: id,
|
|
31
40
|
"data-layout-slot": true,
|
|
32
41
|
className: ax([mainElementStyles.root, xcss]),
|
|
@@ -10,7 +10,7 @@ import { ax, ix } from "@compiled/react/runtime";
|
|
|
10
10
|
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; }
|
|
11
11
|
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) { _defineProperty(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; }
|
|
12
12
|
import { forwardRef, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
13
|
-
import { createPortal } from 'react-dom';
|
|
13
|
+
import { createPortal, flushSync } from 'react-dom';
|
|
14
14
|
import { bind } from 'bind-event-listener';
|
|
15
15
|
import invariant from 'tiny-invariant';
|
|
16
16
|
import { useId } from '@atlaskit/ds-lib/use-id';
|
|
@@ -137,10 +137,13 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
137
137
|
panelId = _ref3.panelId,
|
|
138
138
|
panelWidth = _ref3.panelWidth,
|
|
139
139
|
onCompleteResize = _ref3.onCompleteResize,
|
|
140
|
+
onResizeStartInternal = _ref3.onResizeStartInternal,
|
|
141
|
+
onResizeInternal = _ref3.onResizeInternal,
|
|
140
142
|
getResizeBounds = _ref3.getResizeBounds,
|
|
141
143
|
panel = _ref3.panel,
|
|
142
144
|
portal = _ref3.portal,
|
|
143
145
|
resizingCssVar = _ref3.resizingCssVar,
|
|
146
|
+
resizingElementRef = _ref3.resizingElementRef,
|
|
144
147
|
position = _ref3.position,
|
|
145
148
|
tooltipContent = _ref3.tooltipContent,
|
|
146
149
|
shortcut = _ref3.shortcut;
|
|
@@ -178,9 +181,13 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
178
181
|
// Storing the initial `clientX` on `mousedown` events, to workaround a bug caused by some browser extensions
|
|
179
182
|
// where the `dragstart` event incorrectly returns `0` for the `clientX` location.
|
|
180
183
|
var initialClientXRef = useRef(null);
|
|
184
|
+
// Live allocation changes panelWidth on every frame. Only the legacy path should
|
|
185
|
+
// rebind the drag listeners when this value changes.
|
|
186
|
+
var legacyPanelWidth = fg('platform-dst-chat-panel-layout') ? undefined : panelWidth;
|
|
181
187
|
useEffect(function () {
|
|
182
188
|
var splitter = splitterRef.current;
|
|
183
189
|
invariant(splitter, 'Splitter ref must be set');
|
|
190
|
+
var lastManagedResizeWidth;
|
|
184
191
|
return combine(blockDraggingToIFrames({
|
|
185
192
|
element: splitter
|
|
186
193
|
}),
|
|
@@ -239,9 +246,18 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
239
246
|
* because some browser extensions can cause the event properties to incorrectly return 0.
|
|
240
247
|
*/
|
|
241
248
|
invariant(isPanelSplitterDragData(source.data));
|
|
242
|
-
|
|
249
|
+
var resizeStartData = {
|
|
243
250
|
initialWidth: source.data.initialWidth
|
|
244
|
-
}
|
|
251
|
+
};
|
|
252
|
+
// The layout allocation system needs to know which area is actively being
|
|
253
|
+
// resized before the first drag update. Committing this synchronously keeps
|
|
254
|
+
// the actively dragged area protected from automatic compression.
|
|
255
|
+
if (onResizeStartInternal) {
|
|
256
|
+
flushSync(function () {
|
|
257
|
+
return onResizeStartInternal(resizeStartData);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
onResizeStart === null || onResizeStart === void 0 || onResizeStart(resizeStartData);
|
|
245
261
|
|
|
246
262
|
// Close any open layers when the user starts resizing
|
|
247
263
|
openLayerObserver === null || openLayerObserver === void 0 || openLayerObserver.closeLayers();
|
|
@@ -274,23 +290,54 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
274
290
|
position: position
|
|
275
291
|
});
|
|
276
292
|
var resizingWidth = "clamp(".concat(resizeBounds.min, ", ").concat(targetWidth, "px, ").concat(resizeBounds.max, ")");
|
|
277
|
-
panel
|
|
293
|
+
if (fg('platform-dst-chat-panel-layout') && onResizeInternal) {
|
|
294
|
+
// Let the sizing provider constrain the width against Main's available space.
|
|
295
|
+
var width = Math.max(convertResizeBoundToPixels(resizeBounds.min), Math.min(targetWidth, convertResizeBoundToPixels(resizeBounds.max)));
|
|
296
|
+
if (width !== lastManagedResizeWidth) {
|
|
297
|
+
lastManagedResizeWidth = width;
|
|
298
|
+
onResizeInternal(width);
|
|
299
|
+
}
|
|
300
|
+
} else {
|
|
301
|
+
var _resizingElementRef$c;
|
|
302
|
+
panel.style.setProperty(resizingCssVar, resizingWidth);
|
|
303
|
+
resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c = resizingElementRef.current) === null || _resizingElementRef$c === void 0 || _resizingElementRef$c.style.setProperty(resizingCssVar, resizingWidth);
|
|
304
|
+
}
|
|
278
305
|
source.data.resizingWidth = resizingWidth;
|
|
279
306
|
},
|
|
280
307
|
onDrop: function onDrop(_ref7) {
|
|
308
|
+
var _resizingElementRef$c2;
|
|
281
309
|
var source = _ref7.source;
|
|
282
310
|
invariant(isPanelSplitterDragData(source.data));
|
|
283
311
|
preventUnhandled.stop();
|
|
312
|
+
|
|
313
|
+
// PDD may deliver its final throttled drag update immediately before drop.
|
|
314
|
+
// Commit that update once before measuring; do not persist a previous frame.
|
|
315
|
+
if (onResizeInternal && lastManagedResizeWidth !== undefined) {
|
|
316
|
+
var width = lastManagedResizeWidth;
|
|
317
|
+
flushSync(function () {
|
|
318
|
+
return onResizeInternal(width);
|
|
319
|
+
});
|
|
320
|
+
lastManagedResizeWidth = undefined;
|
|
321
|
+
}
|
|
284
322
|
var finalWidth = getPixelWidth(panel);
|
|
285
|
-
|
|
323
|
+
// Persist the final preferred width before removing the imperative drag
|
|
324
|
+
// variable, so the rendered width is continuous across pointer release.
|
|
325
|
+
if (fg('platform-dst-chat-panel-layout')) {
|
|
326
|
+
flushSync(function () {
|
|
327
|
+
return onCompleteResize(finalWidth);
|
|
328
|
+
});
|
|
329
|
+
} else {
|
|
330
|
+
onCompleteResize(finalWidth);
|
|
331
|
+
}
|
|
286
332
|
onResizeEnd === null || onResizeEnd === void 0 || onResizeEnd({
|
|
287
333
|
initialWidth: source.data.initialWidth,
|
|
288
334
|
finalWidth: finalWidth
|
|
289
335
|
});
|
|
290
336
|
panel.style.removeProperty(resizingCssVar);
|
|
337
|
+
resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c2 = resizingElementRef.current) === null || _resizingElementRef$c2 === void 0 || _resizingElementRef$c2.style.removeProperty(resizingCssVar);
|
|
291
338
|
}
|
|
292
339
|
}));
|
|
293
|
-
}, [onCompleteResize, onResizeStart, onResizeEnd, panel, resizingCssVar,
|
|
340
|
+
}, [onCompleteResize, onResizeStartInternal, onResizeInternal, onResizeStart, onResizeEnd, panel, resizingCssVar, resizingElementRef, legacyPanelWidth, position, openLayerObserver, panelId, getResizeBounds]);
|
|
294
341
|
var onResizeStartStableRef = useStableRef(onResizeStart);
|
|
295
342
|
var onResizeEndStableRef = useStableRef(onResizeEnd);
|
|
296
343
|
var _useState5 = useState(function () {
|
|
@@ -316,7 +363,20 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
316
363
|
_useState6 = _slicedToArray(_useState5, 1),
|
|
317
364
|
keyboardResizeManager = _useState6[0];
|
|
318
365
|
var handleSliderInputChange = useCallback(function (event) {
|
|
319
|
-
var
|
|
366
|
+
var isManagedResize = fg('platform-dst-chat-panel-layout') && onResizeInternal;
|
|
367
|
+
var value = isManagedResize ? parseFloat(event.target.value) : parseInt(event.target.value);
|
|
368
|
+
if (isManagedResize) {
|
|
369
|
+
// The available region may have changed since focus, including without a
|
|
370
|
+
// window resize. Use the allocator's current bounds for the public payload.
|
|
371
|
+
var bounds = getResizeBounds();
|
|
372
|
+
var min = convertResizeBoundToPixels(bounds.min);
|
|
373
|
+
var max = convertResizeBoundToPixels(bounds.max);
|
|
374
|
+
value = Math.max(min, Math.min(value, max));
|
|
375
|
+
setRangeInputBounds({
|
|
376
|
+
min: min,
|
|
377
|
+
max: max
|
|
378
|
+
});
|
|
379
|
+
}
|
|
320
380
|
setRangeInputValue(value);
|
|
321
381
|
|
|
322
382
|
/**
|
|
@@ -328,7 +388,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
|
|
|
328
388
|
initialWidth: panelWidth,
|
|
329
389
|
finalWidth: value
|
|
330
390
|
});
|
|
331
|
-
}, [onCompleteResize, panelWidth, keyboardResizeManager]);
|
|
391
|
+
}, [getResizeBounds, onCompleteResize, onResizeInternal, panelWidth, keyboardResizeManager]);
|
|
332
392
|
var resizeEventListenerCleanupFn = useRef(null);
|
|
333
393
|
var handleSliderFocus = useCallback(function () {
|
|
334
394
|
var _resizeEventListenerC;
|
|
@@ -453,8 +513,11 @@ export var PanelSplitter = function PanelSplitter(_ref8) {
|
|
|
453
513
|
panelId = context.panelId,
|
|
454
514
|
panelWidth = context.panelWidth,
|
|
455
515
|
onCompleteResize = context.onCompleteResize,
|
|
516
|
+
onResizeStartInternal = context.onResizeStartInternal,
|
|
517
|
+
onResizeInternal = context.onResizeInternal,
|
|
456
518
|
getResizeBounds = context.getResizeBounds,
|
|
457
519
|
resizingCssVar = context.resizingCssVar,
|
|
520
|
+
resizingElementRef = context.resizingElementRef,
|
|
458
521
|
position = context.position,
|
|
459
522
|
shortcut = context.shortcut;
|
|
460
523
|
|
|
@@ -549,8 +612,11 @@ export var PanelSplitter = function PanelSplitter(_ref8) {
|
|
|
549
612
|
portal: portal,
|
|
550
613
|
panelWidth: panelWidth,
|
|
551
614
|
onCompleteResize: onCompleteResize,
|
|
615
|
+
onResizeStartInternal: onResizeStartInternal,
|
|
616
|
+
onResizeInternal: onResizeInternal,
|
|
552
617
|
getResizeBounds: getResizeBounds,
|
|
553
618
|
resizingCssVar: resizingCssVar,
|
|
619
|
+
resizingElementRef: resizingElementRef,
|
|
554
620
|
position: position,
|
|
555
621
|
tooltipContent: tooltipContent,
|
|
556
622
|
shortcut: shortcut
|
|
@@ -9,9 +9,12 @@ export var PanelSplitterProvider = function PanelSplitterProvider(_ref) {
|
|
|
9
9
|
var panelId = _ref.panelId,
|
|
10
10
|
panelWidth = _ref.panelWidth,
|
|
11
11
|
onCompleteResize = _ref.onCompleteResize,
|
|
12
|
+
onResizeStartInternal = _ref.onResizeStartInternal,
|
|
13
|
+
onResizeInternal = _ref.onResizeInternal,
|
|
12
14
|
getResizeBounds = _ref.getResizeBounds,
|
|
13
15
|
resizingCssVar = _ref.resizingCssVar,
|
|
14
16
|
panelRef = _ref.panelRef,
|
|
17
|
+
resizingElementRef = _ref.resizingElementRef,
|
|
15
18
|
providedPortalRef = _ref.portalRef,
|
|
16
19
|
_ref$position = _ref.position,
|
|
17
20
|
position = _ref$position === void 0 ? 'end' : _ref$position,
|
|
@@ -25,15 +28,18 @@ export var PanelSplitterProvider = function PanelSplitterProvider(_ref) {
|
|
|
25
28
|
panelId: panelId,
|
|
26
29
|
panelWidth: panelWidth,
|
|
27
30
|
onCompleteResize: onCompleteResize,
|
|
31
|
+
onResizeStartInternal: onResizeStartInternal,
|
|
32
|
+
onResizeInternal: onResizeInternal,
|
|
28
33
|
getResizeBounds: getResizeBounds,
|
|
29
34
|
resizingCssVar: resizingCssVar,
|
|
30
35
|
position: position,
|
|
31
36
|
panelRef: panelRef,
|
|
37
|
+
resizingElementRef: resizingElementRef,
|
|
32
38
|
isEnabled: isEnabled,
|
|
33
39
|
portalRef: typeof providedPortalRef !== 'undefined' ? providedPortalRef : portalRef,
|
|
34
40
|
shortcut: shortcut
|
|
35
41
|
};
|
|
36
|
-
}, [panelId, panelWidth, onCompleteResize, getResizeBounds, resizingCssVar, position, panelRef, isEnabled, providedPortalRef, shortcut]);
|
|
42
|
+
}, [panelId, panelWidth, onCompleteResize, onResizeStartInternal, onResizeInternal, getResizeBounds, resizingCssVar, position, panelRef, resizingElementRef, isEnabled, providedPortalRef, shortcut]);
|
|
37
43
|
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(PanelSplitterContext.Provider, {
|
|
38
44
|
value: context
|
|
39
45
|
}, children), typeof providedPortalRef !== 'undefined' ? null : /*#__PURE__*/React.createElement("div", {
|
|
@@ -8,6 +8,7 @@ import { DangerouslyHoistCssVarToDocumentRoot } from './dangerously-hoist-css-va
|
|
|
8
8
|
import { DangerouslyHoistSlotSizes } from './hoist-slot-sizes-context';
|
|
9
9
|
import { useLayoutId } from './use-layout-id';
|
|
10
10
|
var localSlotLayersStatic = {
|
|
11
|
+
chatPanelOverlay: 5,
|
|
11
12
|
ribbon: 4,
|
|
12
13
|
// The side nav panel splitter is layered above the top nav when FHS is enabled.
|
|
13
14
|
// 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:
|
|
11
|
-
@media (min-width:
|
|
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}}
|
|
@@ -7,6 +7,7 @@ import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
|
7
7
|
import { SkipLinksProvider } from '../../context/skip-links/skip-links-provider';
|
|
8
8
|
import { TopNavStartProvider } from '../../context/top-nav-start/top-nav-start-context-provider';
|
|
9
9
|
import { DangerouslyHoistSlotSizes } from './hoist-slot-sizes-context';
|
|
10
|
+
import { LayoutAreaSizingProvider } from './layout-area-sizing-provider';
|
|
10
11
|
import { IsSideNavShortcutEnabledProvider } from './side-nav/is-side-nav-shortcut-enabled-provider';
|
|
11
12
|
import { SideNavElementProvider } from './side-nav/side-nav-element-provider';
|
|
12
13
|
import { SideNavToggleButtonProvider } from './side-nav/toggle-button-provider';
|
|
@@ -15,7 +16,8 @@ import { SideNavVisibilityProvider } from './side-nav/visibility-provider';
|
|
|
15
16
|
// ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
|
|
16
17
|
export var gridRootId = 'unsafe-design-system-page-layout-root';
|
|
17
18
|
var styles = {
|
|
18
|
-
|
|
19
|
+
legacyRoot: "_1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12fk1aio _12qzrxre _1rqteala _xkmgks3h _jbc7rxre _tyve1nco",
|
|
20
|
+
root: "_1cwmtye8 _1e0c11p5 _1tke1kxc _1lmcq9em _yv0ei47z _2z0516ab _12ag50j2 _71dlqwpl _12fkqmyk _12qzrxre _1rqt8mqp _xkmggc7l _tyve1i18",
|
|
19
21
|
safetyRail: "_1ciragmp",
|
|
20
22
|
safetyRailWithTopLayer: "_1tvnagmp",
|
|
21
23
|
panelUplift: "_1reozryt _18m9zryt"
|
|
@@ -39,6 +41,8 @@ export function Root(_ref) {
|
|
|
39
41
|
_ref$isSideNavShortcu = _ref.isSideNavShortcutEnabled,
|
|
40
42
|
isSideNavShortcutEnabled = _ref$isSideNavShortcu === void 0 ? false : _ref$isSideNavShortcu;
|
|
41
43
|
var ref = useRef(null);
|
|
44
|
+
var isChatPanelLayoutEnabled = fg('platform-dst-chat-panel-layout');
|
|
45
|
+
var LayoutProvider = isChatPanelLayoutEnabled ? LayoutAreaSizingProvider : React.Fragment;
|
|
42
46
|
useEffect(function () {
|
|
43
47
|
if (process.env.NODE_ENV !== 'production') {
|
|
44
48
|
var IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
|
|
@@ -59,7 +63,9 @@ export function Root(_ref) {
|
|
|
59
63
|
defaultCollapsed: defaultSideNavCollapsed
|
|
60
64
|
}, /*#__PURE__*/React.createElement(SideNavToggleButtonProvider, null, /*#__PURE__*/React.createElement(SideNavElementProvider, null, /*#__PURE__*/React.createElement(IsSideNavShortcutEnabledProvider, {
|
|
61
65
|
isSideNavShortcutEnabled: isSideNavShortcutEnabled
|
|
62
|
-
}, /*#__PURE__*/React.createElement(TopNavStartProvider, null, /*#__PURE__*/React.createElement(
|
|
66
|
+
}, /*#__PURE__*/React.createElement(TopNavStartProvider, null, /*#__PURE__*/React.createElement(LayoutProvider, isChatPanelLayoutEnabled ? {
|
|
67
|
+
layoutRef: ref
|
|
68
|
+
} : {}, /*#__PURE__*/React.createElement(OpenLayerObserver, null, /*#__PURE__*/React.createElement(DangerouslyHoistSlotSizes.Provider, {
|
|
63
69
|
value: UNSAFE_dangerouslyHoistSlotSizes
|
|
64
70
|
}, /*#__PURE__*/React.createElement(SkipLinksProvider, {
|
|
65
71
|
label: skipLinksLabel,
|
|
@@ -67,8 +73,8 @@ export function Root(_ref) {
|
|
|
67
73
|
testId: testId
|
|
68
74
|
}, /*#__PURE__*/React.createElement("div", {
|
|
69
75
|
ref: ref,
|
|
70
|
-
className: ax([styles.root, fg('platform-dst-motion-uplift-panel') && styles.panelUplift, fg('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
|
|
76
|
+
className: ax([isChatPanelLayoutEnabled ? styles.root : styles.legacyRoot, fg('platform-dst-motion-uplift-panel') && styles.panelUplift, fg('platform-dst-top-layer') ? styles.safetyRailWithTopLayer : styles.safetyRail, xcss]),
|
|
71
77
|
id: gridRootId,
|
|
72
78
|
"data-testid": testId
|
|
73
|
-
}, children)))))))));
|
|
79
|
+
}, children))))))))));
|
|
74
80
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
|
|
5
5
|
._1bah1yb4{justify-content:space-between}
|
|
6
6
|
._1bsb1ego{width:min(90%,20pc)}
|
|
7
|
+
._1bsbhc79{width:var(--n_snvRsz,var(--n_sNvw))}
|
|
7
8
|
._1e0c1txw{display:flex}
|
|
8
9
|
._1e0cglyw{display:none}
|
|
9
10
|
._1p2s1vfh{--exit-animation:var(--ds-sidenav-exit-left,200ms cubic-bezier(0,0.4,0,1) SlideOut100PercentLeft)}
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
[dir=rtl] ._65m41mrw{--animation-direction:-1}
|
|
25
26
|
@media (prefers-reduced-motion:no-preference){._10t81t0s{transition-property:display}._1vrh1a5r{transition-behavior:allow-discrete}._xrrpi9qs{transition-duration:var(--ds-duration-medium,.2s)}._10t88iot{transition-property:transform,display}._xrrpfnf5{transition-duration:.2s}._1lh81gzg{grid-area:main}._1xq51mm8{transition-timing-function:cubic-bezier(0,.4,0,1)}._k1affm5y{animation:var(--exit-animation)}@starting-style{._1nu51p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}._1xq51ku9{transition-timing-function:cubic-bezier(.6,0,0,1)}._k1af10ed{animation:var(--enter-animation)}}
|
|
26
27
|
@media (min-width:48rem){._14b5hc79{width:var(--n_snvRsz,var(--n_sNvw))}}
|
|
27
|
-
@media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._p0az1elq{transform:translateX(calc(var(--n_snvRsz, var(--n_snvW, 0px)) - var(--ds-border-width, 1px)))}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}._qilnk0mc{grid-area:side-nav}._p5clia51{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
|
|
28
|
+
@media (min-width:64rem){._165t56xv{height:calc(100vh - var(--n_bnrM, 0px))}._p0az1elq{transform:translateX(calc(var(--n_snvRsz, var(--n_snvW, 0px)) - var(--ds-border-width, 1px)))}._cpcf1gzg._cpcf1gzg{grid-area:main}._6kttglyw._6kttglyw{border-inline-end:none}._w8v11bhr._w8v11bhr{background-color:var(--ds-surface-overlay,#fff)}._1jug130s._1jug130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}._dm2518uv{display:initial}._dm25glyw{display:none}._qiln1gzg{grid-area:main}._p5clglyw{border-inline-end:none}._4ap31bhr{background-color:var(--ds-surface-overlay,#fff)}._scbp130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}._qilnk0mc{grid-area:side-nav}._p5clia51{border-inline-end:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._4ap3vuon{background-color:var(--ds-surface,#fff)}._scbpglyw{box-shadow:none}}
|
|
28
29
|
@media (prefers-reduced-motion:no-preference) and (min-width:64rem){._17ly8iot{transition-property:transform,display}._177m1a5r{transition-behavior:allow-discrete}._1sg81gzg{grid-area:main}._n2infm5y{animation:var(--exit-animation)}._17ly1wzp{transition-property:grid-area,display}._hjoi1wsm{transition-duration:var(--ds-duration-instant,0ms),var(--ds-duration-medium,.2s)}._1wxo1cio{transition-delay:19ms,var(--ds-duration-instant,0ms)}._vgub1mm8{transition-timing-function:cubic-bezier(0,.4,0,1)}._hh1u1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}@starting-style{._1xpz1gzg{grid-area:main}}._1sg8k0mc{grid-area:side-nav}._n2in10ed{animation:var(--enter-animation)}._17ly1q8v{transition-property:grid-area}._hjoi147i{transition-duration:var(--ds-duration-instant,0ms)}._1wxo4so3{transition-delay:24ms}@starting-style{._s2eg1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}._vgub1ku9{transition-timing-function:cubic-bezier(.6,0,0,1)}._hjoifnf5{transition-duration:.2s}._hjoi1mzy{transition-duration:var(--ds-duration-long,.25s)}._hjoii9qs{transition-duration:var(--ds-duration-medium,.2s)}}
|
|
29
30
|
@media (prefers-reduced-motion:no-preference) and (not (min-width:64rem)){._aadi1p9u{transform:translateX(calc(-100%*var(--animation-direction)))}}
|
|
30
31
|
@media not (min-width:64rem){._89fi1b6c{grid-area:main/aside/aside/aside}}
|