@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 11.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`204d513238b0e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/204d513238b0e) -
8
+ Implement new Chat Panel layout slot and responsive/resizing behaviour behind
9
+ `platform-dst-chat-panel-layout` feature gate.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 11.0.0
4
16
 
5
17
  ### Major Changes
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ChatPanel", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _chatPanel.ChatPanel;
10
+ }
11
+ });
12
+ var _chatPanel = require("../../ui/page-layout/chat-panel");
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "UNSAFE_resolveLayoutWidth", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _resolveLayoutWidth.resolveLayoutWidth;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "UNSAFE_useLayoutAreaSizing", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _useLayoutAreaSizing.useLayoutAreaSizing;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "contentHeightWhenFixed", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _constants.contentHeightWhenFixed;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "contentInsetBlockStart", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _constants.contentInsetBlockStart;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "mainMinimumWidthVar", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _constants.mainMinimumWidthVar;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "sideNavLiveWidthVar", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _constants.sideNavLiveWidthVar;
40
+ }
41
+ });
42
+ var _constants = require("../../ui/page-layout/constants");
43
+ var _useLayoutAreaSizing = require("../../ui/page-layout/use-layout-area-sizing");
44
+ var _resolveLayoutWidth = require("../../ui/page-layout/resolve-layout-width");
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.calculateLayoutAreaStates = calculateLayoutAreaStates;
7
+ var _resolveLayoutWidth = require("./resolve-layout-width");
8
+ 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; } } }; }
9
+ 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; } }
10
+ 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; }
11
+ function clampTargetWidth(_ref) {
12
+ var target = _ref.target,
13
+ min = _ref.min,
14
+ max = _ref.max;
15
+ return Math.max(min, Math.min(target, max));
16
+ }
17
+ function getTargetWidth(area, isSideNavOverlay) {
18
+ var _area$compactDefaultW, _area$liveResize, _ref2, _area$requestedWidth;
19
+ var defaultWidth = isSideNavOverlay ? (_area$compactDefaultW = area.compactDefaultWidth) !== null && _area$compactDefaultW !== void 0 ? _area$compactDefaultW : area.defaultWidth : area.defaultWidth;
20
+ return ((_area$liveResize = area.liveResize) === null || _area$liveResize === void 0 ? void 0 : _area$liveResize.mode) === 'inline' ? area.liveResize.width : (_ref2 = (_area$requestedWidth = area.requestedWidth) !== null && _area$requestedWidth !== void 0 ? _area$requestedWidth : area.preferredInlineWidth) !== null && _ref2 !== void 0 ? _ref2 : defaultWidth;
21
+ }
22
+ function getOverlayTargetWidth(area, isSideNavOverlay) {
23
+ var _area$compactDefaultW2, _area$liveResize2, _ref3, _area$requestedWidth2;
24
+ var defaultWidth = isSideNavOverlay ? (_area$compactDefaultW2 = area.compactDefaultWidth) !== null && _area$compactDefaultW2 !== void 0 ? _area$compactDefaultW2 : area.defaultWidth : area.defaultWidth;
25
+ return ((_area$liveResize2 = area.liveResize) === null || _area$liveResize2 === void 0 ? void 0 : _area$liveResize2.mode) === 'overlay' ? area.liveResize.width : (_ref3 = (_area$requestedWidth2 = area.requestedWidth) !== null && _area$requestedWidth2 !== void 0 ? _area$requestedWidth2 : area.preferredOverlayWidth) !== null && _ref3 !== void 0 ? _ref3 : defaultWidth;
26
+ }
27
+ function calculateLayoutAreaStates(_ref4) {
28
+ var _states$sideNav$widt, _states$sideNav, _states$chatPanel$wi, _states$chatPanel;
29
+ var viewportWidth = _ref4.viewportWidth,
30
+ _ref4$layoutWidth = _ref4.layoutWidth,
31
+ layoutWidth = _ref4$layoutWidth === void 0 ? viewportWidth : _ref4$layoutWidth,
32
+ isChatPanelOverlay = _ref4.isChatPanelOverlay,
33
+ isSideNavOverlay = _ref4.isSideNavOverlay,
34
+ _ref4$occupiedWidth = _ref4.occupiedWidth,
35
+ occupiedWidth = _ref4$occupiedWidth === void 0 ? 0 : _ref4$occupiedWidth,
36
+ mainMinWidthBound = _ref4.mainMinWidth,
37
+ areas = _ref4.areas,
38
+ resizeSession = _ref4.resizeSession;
39
+ var mainMinWidth = (0, _resolveLayoutWidth.resolveLayoutWidth)(mainMinWidthBound, viewportWidth);
40
+ var availableWidth = Math.max(0, layoutWidth - occupiedWidth);
41
+ var sideNav = areas['side-nav'];
42
+ var panel = areas.panel;
43
+ var chatPanel = areas['chat-panel'];
44
+ var sideNavMinWidth = sideNav ? (0, _resolveLayoutWidth.resolveLayoutWidth)(sideNav.minWidth, viewportWidth) : 0;
45
+ var panelMinWidth = panel ? (0, _resolveLayoutWidth.resolveLayoutWidth)(panel.minWidth, viewportWidth) : 0;
46
+ var chatPanelMinWidth = chatPanel ? (0, _resolveLayoutWidth.resolveLayoutWidth)(chatPanel.minWidth, viewportWidth) : 0;
47
+ var isSideNavOpenInline = Boolean((sideNav === null || sideNav === void 0 ? void 0 : sideNav.isOpen) && !isSideNavOverlay && availableWidth >= mainMinWidth + sideNavMinWidth);
48
+ var isChatPanelOpenInline = Boolean((chatPanel === null || chatPanel === void 0 ? void 0 : chatPanel.isOpen) && !isChatPanelOverlay && availableWidth >= mainMinWidth + chatPanelMinWidth + (isSideNavOpenInline ? sideNavMinWidth : 0));
49
+ var isPanelInline = Boolean((panel === null || panel === void 0 ? void 0 : panel.isOpen) && availableWidth >= mainMinWidth + panelMinWidth + (isChatPanelOpenInline ? chatPanelMinWidth : 0) + (isSideNavOpenInline ? sideNavMinWidth : 0));
50
+ var inlineAreas = [isSideNavOpenInline && 'side-nav', isPanelInline && 'panel', isChatPanelOpenInline && 'chat-panel'].filter(function (area) {
51
+ return Boolean(area);
52
+ });
53
+ var widths = new Map();
54
+ var minimums = new Map();
55
+ var _iterator = _createForOfIteratorHelper(inlineAreas),
56
+ _step;
57
+ try {
58
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
59
+ var areaName = _step.value;
60
+ var area = areas[areaName];
61
+ if (!area) {
62
+ continue;
63
+ }
64
+ var min = (0, _resolveLayoutWidth.resolveLayoutWidth)(area.minWidth, viewportWidth);
65
+ var max = area.maxWidth ? (0, _resolveLayoutWidth.resolveLayoutWidth)(area.maxWidth, viewportWidth) : Number.POSITIVE_INFINITY;
66
+ var baselineWidth = resizeSession === null || resizeSession === void 0 ? void 0 : resizeSession.baselineWidths[areaName];
67
+ var requestedTarget = resizeSession && areaName !== resizeSession.area && baselineWidth !== undefined ? baselineWidth : getTargetWidth(area, isSideNavOverlay);
68
+ var target = clampTargetWidth({
69
+ target: requestedTarget,
70
+ min: min,
71
+ max: max
72
+ });
73
+ minimums.set(areaName, min);
74
+ widths.set(areaName, target);
75
+ }
76
+ } catch (err) {
77
+ _iterator.e(err);
78
+ } finally {
79
+ _iterator.f();
80
+ }
81
+ var overflow = Math.max(0, Array.from(widths.values()).reduce(function (total, width) {
82
+ return total + width;
83
+ }, 0) - (availableWidth - mainMinWidth));
84
+ var compressionOrder = ['panel', 'chat-panel', 'side-nav'];
85
+ // User resizing consumes only Main's spare width. Viewport changes clear the
86
+ // snapshot and retain the normal automatic compression order.
87
+ var shrinkOrder = resizeSession ? [resizeSession.area] : compressionOrder;
88
+ var _iterator2 = _createForOfIteratorHelper(shrinkOrder),
89
+ _step2;
90
+ try {
91
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
92
+ var _widths$get, _minimums$get;
93
+ var _areaName = _step2.value;
94
+ if (overflow <= 0) {
95
+ break;
96
+ }
97
+ var width = (_widths$get = widths.get(_areaName)) !== null && _widths$get !== void 0 ? _widths$get : 0;
98
+ var _min = (_minimums$get = minimums.get(_areaName)) !== null && _minimums$get !== void 0 ? _minimums$get : 0;
99
+ var reduction = Math.min(overflow, Math.max(0, width - _min));
100
+ widths.set(_areaName, width - reduction);
101
+ overflow -= reduction;
102
+ }
103
+ } catch (err) {
104
+ _iterator2.e(err);
105
+ } finally {
106
+ _iterator2.f();
107
+ }
108
+ var totalInlineWidth = Array.from(widths.values()).reduce(function (total, width) {
109
+ return total + width;
110
+ }, 0);
111
+ var states = {};
112
+ var _iterator3 = _createForOfIteratorHelper(inlineAreas),
113
+ _step3;
114
+ try {
115
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
116
+ var _widths$get2, _minimums$get2, _areas$_areaName;
117
+ var _areaName2 = _step3.value;
118
+ var _width = (_widths$get2 = widths.get(_areaName2)) !== null && _widths$get2 !== void 0 ? _widths$get2 : 0;
119
+ var _min2 = (_minimums$get2 = minimums.get(_areaName2)) !== null && _minimums$get2 !== void 0 ? _minimums$get2 : 0;
120
+ var maxWidth = (_areas$_areaName = areas[_areaName2]) === null || _areas$_areaName === void 0 ? void 0 : _areas$_areaName.maxWidth;
121
+ var configuredMax = maxWidth !== undefined ? (0, _resolveLayoutWidth.resolveLayoutWidth)(maxWidth, viewportWidth) : Number.POSITIVE_INFINITY;
122
+ states[_areaName2] = {
123
+ mode: 'inline',
124
+ width: _width,
125
+ minWidth: _min2,
126
+ resizeBounds: {
127
+ min: _min2,
128
+ max: Math.max(_min2, Math.min(configuredMax, availableWidth - mainMinWidth - totalInlineWidth + _width))
129
+ }
130
+ };
131
+ }
132
+ } catch (err) {
133
+ _iterator3.e(err);
134
+ } finally {
135
+ _iterator3.f();
136
+ }
137
+ var inlineSideNavWidth = (_states$sideNav$widt = (_states$sideNav = states['side-nav']) === null || _states$sideNav === void 0 ? void 0 : _states$sideNav.width) !== null && _states$sideNav$widt !== void 0 ? _states$sideNav$widt : 0;
138
+ var inlineChatPanelWidth = (_states$chatPanel$wi = (_states$chatPanel = states['chat-panel']) === null || _states$chatPanel === void 0 ? void 0 : _states$chatPanel.width) !== null && _states$chatPanel$wi !== void 0 ? _states$chatPanel$wi : 0;
139
+ var mainAreaWidth = Math.max(0, availableWidth - inlineSideNavWidth - inlineChatPanelWidth);
140
+ var _iterator4 = _createForOfIteratorHelper(['side-nav', 'panel', 'chat-panel']),
141
+ _step4;
142
+ try {
143
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
144
+ var _states$_areaName;
145
+ var _areaName3 = _step4.value;
146
+ var _area = areas[_areaName3];
147
+ if (!(_area !== null && _area !== void 0 && _area.isOpen) || ((_states$_areaName = states[_areaName3]) === null || _states$_areaName === void 0 ? void 0 : _states$_areaName.mode) === 'inline') {
148
+ continue;
149
+ }
150
+ var _min3 = (0, _resolveLayoutWidth.resolveLayoutWidth)(_area.minWidth, viewportWidth);
151
+ var _configuredMax = _area.maxWidth ? (0, _resolveLayoutWidth.resolveLayoutWidth)(_area.maxWidth, viewportWidth) : Number.POSITIVE_INFINITY;
152
+ // Chat covers Root; SideNav and the local panel overlay Main's grid track.
153
+ // Occupied tracks and inline chat are not part of that covered region.
154
+ var layoutMax = (_areaName3 === 'chat-panel' ? layoutWidth : mainAreaWidth) * 0.9;
155
+ var _max = Math.max(0, Math.min(_configuredMax, layoutMax));
156
+ var effectiveMin = Math.min(_min3, _max);
157
+ var _target = getOverlayTargetWidth(_area, isSideNavOverlay);
158
+ var _width2 = clampTargetWidth({
159
+ target: _target,
160
+ min: effectiveMin,
161
+ max: _max
162
+ });
163
+ states[_areaName3] = {
164
+ mode: 'overlay',
165
+ width: _width2,
166
+ minWidth: effectiveMin,
167
+ resizeBounds: {
168
+ min: effectiveMin,
169
+ max: _max
170
+ }
171
+ };
172
+ }
173
+ } catch (err) {
174
+ _iterator4.e(err);
175
+ } finally {
176
+ _iterator4.f();
177
+ }
178
+ return states;
179
+ }
@@ -0,0 +1,27 @@
1
+ ._12xt1ym0._12xt1ym0{grid-area:chat-panel}
2
+ ._12xtquub._12xtquub{grid-area:2/1/-1/-1}
3
+ ._nd5lquub{grid-area:2/1/-1/-1}
4
+ ._191wglyw{border-inline-start:none}
5
+ ._i8luglyw._i8luglyw{border-inline-start:none}
6
+ ._i8luia51._i8luia51{border-inline-start:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._10fph9n0{justify-self:end}
7
+ ._152t1nws{inset-block-start:var(--n_bnrM,0)}
8
+ ._16hg1bhr._16hg1bhr{background-color:var(--ds-surface-overlay,#fff)}
9
+ ._16hgvuon._16hgvuon{background-color:var(--ds-surface,#fff)}
10
+ ._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
11
+ ._18m91wug{overflow-y:auto}
12
+ ._1bsb1ky5{width:var(--n_cPnlRsz,var(--n_cPnlOverlayW))}
13
+ ._1pbyqfx8{z-index:5}
14
+ ._1reo1wug{overflow-x:auto}
15
+ ._4t3i1osq{height:100%}
16
+ ._4t3i56xv{height:calc(100vh - var(--n_bnrM, 0px))}
17
+ ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
18
+ ._kqsw1if8{position:sticky}
19
+ ._p12f1osq{max-width:100%}
20
+ ._qo371wug._qo371wug{z-index:auto}
21
+ ._qo37qfx8._qo37qfx8{z-index:5}
22
+ ._so1e130s._so1e130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
23
+ ._so1eglyw._so1eglyw{box-shadow:none}
24
+ ._vchhusvi{box-sizing:border-box}
25
+ ._w1ap1ky5._w1ap1ky5{width:var(--n_cPnlRsz,var(--n_cPnlOverlayW))}
26
+ ._w1ap8rg1._w1ap8rg1{width:var(--n_cPnlRsz,var(--n_cPnlW))}
27
+ @media (min-width:40rem){._19dmia51{border-inline-start:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}._1ao7glyw{box-shadow:none}._qhdr1ym0{grid-area:chat-panel}._m5h51wug{z-index:auto}._1ttbvuon{background-color:var(--ds-surface,#fff)}._1mxh8rg1{width:var(--n_cPnlRsz,var(--n_cPnlW))}}
@@ -0,0 +1,216 @@
1
+ /* chat-panel.tsx generated by @compiled/babel-plugin v3.0.2 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.ChatPanel = ChatPanel;
10
+ require("./chat-panel.compiled.css");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var React = _react;
13
+ var _runtime = require("@compiled/react/runtime");
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
+ var _bindEventListener = require("bind-event-listener");
17
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
18
+ var _useSkipLinkInternal = require("../../context/skip-links/use-skip-link-internal");
19
+ var _constants = require("./constants");
20
+ var _convertResizeBoundToPixels = require("./panel-splitter/convert-resize-bound-to-pixels");
21
+ var _provider = require("./panel-splitter/provider");
22
+ var _resolveLayoutWidth = require("./resolve-layout-width");
23
+ var _root = require("./root");
24
+ var _useLayoutAreaSizing2 = require("./use-layout-area-sizing");
25
+ var _useLayoutId = require("./use-layout-id");
26
+ var _useResizingWidthCssVarOnRootElement = require("./use-resizing-width-css-var-on-root-element");
27
+ var _useSafeDefaultWidth = require("./use-safe-default-width");
28
+ 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); }
29
+ var chatPanelPanelSplitterId = Symbol('ChatPanel PanelSplitter');
30
+ var panelSplitterResizingVar = '--n_cPnlRsz';
31
+ var chatPanelOverlayWidthVar = '--n_cPnlOverlayW';
32
+ var fallbackDefaultWidth = 400;
33
+ var fallbackCompactDefaultWidth = 320;
34
+ var fallbackMinWidth = '320px';
35
+ var inlineMediaQuery = '(min-width: 40rem)';
36
+ function getPixelCustomProperty(element, propertyName, fallback) {
37
+ var raw = getComputedStyle(element).getPropertyValue(propertyName).trim();
38
+ var value = Number.parseFloat(raw);
39
+ return Number.isFinite(value) ? (0, _resolveLayoutWidth.resolveLayoutWidth)(raw.endsWith('vw') ? "".concat(value, "vw") : value, window.innerWidth) : fallback;
40
+ }
41
+ var styles = {
42
+ root: "_nd5lquub _10fph9n0 _vchhusvi _p12f1osq _1pbyqfx8 _4t3i56xv _kqsw1if8 _152t1nws _bfhk1bhr _1bsb1ky5 _qhdr1ym0 _m5h51wug _1ttbvuon _1mxh8rg1",
43
+ managedInline: "_12xt1ym0 _qo371wug _16hgvuon _w1ap8rg1",
44
+ managedOverlay: "_12xtquub _qo37qfx8 _16hg1bhr _w1ap1ky5",
45
+ scrollContainer: "_1reo1wug _18m91wug _4t3i1osq",
46
+ border: "_191wglyw _16qs130s _19dmia51 _1ao7glyw",
47
+ managedInlineBorder: "_i8luia51 _so1eglyw",
48
+ managedOverlayBorder: "_i8luglyw _so1e130s"
49
+ };
50
+
51
+ /**
52
+ * The ChatPanel layout area is rendered below the banner and to the right (inline end) of the app.
53
+ *
54
+ * Below 40rem it overlays the app. At 40rem and above it is rendered as the final
55
+ * full-height column in the page layout grid.
56
+ *
57
+ * You can optionally render a `PanelSplitter` as a child to make the chat panel resizable.
58
+ */
59
+ function ChatPanel(_ref) {
60
+ var _managedSizing$mode, _managedSizing$width;
61
+ var children = _ref.children,
62
+ defaultWidthProp = _ref.defaultWidth,
63
+ _ref$minWidth = _ref.minWidth,
64
+ minWidth = _ref$minWidth === void 0 ? fallbackMinWidth : _ref$minWidth,
65
+ maxWidth = _ref.maxWidth,
66
+ _ref$label = _ref.label,
67
+ label = _ref$label === void 0 ? 'Chat panel' : _ref$label,
68
+ _ref$skipLinkLabel = _ref.skipLinkLabel,
69
+ skipLinkLabel = _ref$skipLinkLabel === void 0 ? label : _ref$skipLinkLabel,
70
+ testId = _ref.testId,
71
+ providedId = _ref.id,
72
+ xcss = _ref.xcss,
73
+ _ref$hasBorder = _ref.hasBorder,
74
+ hasBorder = _ref$hasBorder === void 0 ? true : _ref$hasBorder,
75
+ onClose = _ref.onClose;
76
+ var id = (0, _useLayoutId.useLayoutId)({
77
+ providedId: providedId
78
+ });
79
+ var defaultWidth = (0, _useSafeDefaultWidth.useSafeDefaultWidth)({
80
+ defaultWidthProp: defaultWidthProp !== null && defaultWidthProp !== void 0 ? defaultWidthProp : fallbackDefaultWidth,
81
+ fallbackDefaultWidth: fallbackDefaultWidth,
82
+ slotName: 'ChatPanel'
83
+ });
84
+ var compactDefaultWidth = defaultWidthProp === undefined ? fallbackCompactDefaultWidth : defaultWidth;
85
+ (0, _useSkipLinkInternal.useSkipLinkInternal)({
86
+ id: id,
87
+ label: skipLinkLabel,
88
+ isHidden: defaultWidth === 0 || (0, _fg.fg)('platform_dst_nav4_skip_link_a11y_1')
89
+ });
90
+ var ref = (0, _react.useRef)(null);
91
+ var _useState = (0, _react.useState)(defaultWidth),
92
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
93
+ inlineWidth = _useState2[0],
94
+ setInlineWidth = _useState2[1];
95
+ var _useState3 = (0, _react.useState)(compactDefaultWidth),
96
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
97
+ overlayWidth = _useState4[0],
98
+ setOverlayWidth = _useState4[1];
99
+ var _useState5 = (0, _react.useState)(false),
100
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
101
+ isInline = _useState6[0],
102
+ setIsInline = _useState6[1];
103
+ var _useLayoutAreaSizing = (0, _useLayoutAreaSizing2.useLayoutAreaSizing)({
104
+ area: 'chat-panel',
105
+ config: {
106
+ defaultWidth: defaultWidth,
107
+ compactDefaultWidth: compactDefaultWidth,
108
+ minWidth: minWidth,
109
+ maxWidth: maxWidth,
110
+ isOpen: true,
111
+ onRequestClose: onClose
112
+ }
113
+ }),
114
+ managedSizing = _useLayoutAreaSizing.state,
115
+ getManagedResizeBounds = _useLayoutAreaSizing.getResizeBounds,
116
+ startResize = _useLayoutAreaSizing.startResize,
117
+ resize = _useLayoutAreaSizing.resize,
118
+ completeResize = _useLayoutAreaSizing.completeResize;
119
+ (0, _react.useEffect)(function () {
120
+ var mediaQuery = window.matchMedia(inlineMediaQuery);
121
+ setIsInline(mediaQuery.matches);
122
+ var onChange = function onChange(event) {
123
+ setIsInline(event.matches);
124
+ };
125
+ return (0, _bindEventListener.bind)(mediaQuery, {
126
+ type: 'change',
127
+ listener: onChange
128
+ });
129
+ }, []);
130
+ var mode = (_managedSizing$mode = managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.mode) !== null && _managedSizing$mode !== void 0 ? _managedSizing$mode : isInline ? 'inline' : 'overlay';
131
+ var renderedWidth = (_managedSizing$width = managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.width) !== null && _managedSizing$width !== void 0 ? _managedSizing$width : mode === 'inline' ? inlineWidth : overlayWidth;
132
+ (0, _useResizingWidthCssVarOnRootElement.useResizingWidthCssVarOnRootElement)({
133
+ isEnabled: !managedSizing,
134
+ cssVar: panelSplitterResizingVar,
135
+ panelId: chatPanelPanelSplitterId
136
+ });
137
+ var getResizeBounds = (0, _react.useCallback)(function () {
138
+ var managedBounds = getManagedResizeBounds();
139
+ if (managedBounds) {
140
+ return managedBounds;
141
+ }
142
+ var chatPanel = ref.current;
143
+ var layoutRoot = chatPanel === null || chatPanel === void 0 ? void 0 : chatPanel.parentElement;
144
+ var main = layoutRoot === null || layoutRoot === void 0 ? void 0 : layoutRoot.querySelector(':scope > [data-layout-slot][role="main"]');
145
+ if (!chatPanel || !main || getComputedStyle(chatPanel).gridArea !== 'chat-panel') {
146
+ return {
147
+ min: minWidth,
148
+ max: maxWidth !== null && maxWidth !== void 0 ? maxWidth : '90vw'
149
+ };
150
+ }
151
+ var chatPanelWidth = chatPanel.getBoundingClientRect().width;
152
+ var mainWidth = main.getBoundingClientRect().width;
153
+ if (chatPanelWidth === 0 || mainWidth === 0) {
154
+ return {
155
+ min: minWidth,
156
+ max: maxWidth !== null && maxWidth !== void 0 ? maxWidth : '90vw'
157
+ };
158
+ }
159
+ var localPanel = main.querySelector('[data-layout-with-panel-slot]');
160
+ var isLocalPanelInline = localPanel && getComputedStyle(localPanel).gridArea === 'panel';
161
+ var localPanelWidth = isLocalPanelInline ? localPanel.getBoundingClientRect().width : 0;
162
+ var mainMinimumWidth = getPixelCustomProperty(main, _constants.mainMinimumWidthVar, 320);
163
+ var mainContentWidth = mainWidth - localPanelWidth;
164
+ var availableWidth = Math.max(0, mainContentWidth - mainMinimumWidth);
165
+ var availableInlineWidth = Math.floor(chatPanelWidth + availableWidth);
166
+ var constrainedMaxWidth = maxWidth ? Math.min((0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(maxWidth), availableInlineWidth) : availableInlineWidth;
167
+ return {
168
+ min: minWidth,
169
+ max: "".concat(Math.max((0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(minWidth), constrainedMaxWidth), "px")
170
+ };
171
+ }, [getManagedResizeBounds, maxWidth, minWidth]);
172
+ var configuredMaxWidth = maxWidth !== null && maxWidth !== void 0 ? maxWidth : '100vw';
173
+ var chatPanelVariableWidth = managedSizing ? "".concat(renderedWidth, "px") : "clamp(".concat(minWidth, ", ").concat(inlineWidth, "px, ").concat(configuredMaxWidth, ")");
174
+ var chatPanelOverlayVariableWidth = managedSizing ? "".concat(renderedWidth, "px") : "clamp(".concat(minWidth, ", ").concat(overlayWidth, "px, min(90vw, ").concat(configuredMaxWidth, "))");
175
+ var onCompleteResize = (0, _react.useCallback)(function (finalWidth) {
176
+ if (mode === 'inline') {
177
+ setInlineWidth(finalWidth);
178
+ } else {
179
+ setOverlayWidth(finalWidth);
180
+ }
181
+ completeResize(mode, finalWidth);
182
+ }, [completeResize, mode]);
183
+ var onResizeStartInternal = (0, _react.useCallback)(function () {
184
+ startResize(mode);
185
+ }, [mode, startResize]);
186
+ var onResizeInternal = (0, _react.useCallback)(function (width) {
187
+ return resize(mode, width);
188
+ }, [mode, resize]);
189
+ return /*#__PURE__*/React.createElement("section", {
190
+ id: id,
191
+ "data-layout-slot": true,
192
+ "aria-label": label,
193
+ className: (0, _runtime.ax)([styles.root, hasBorder && styles.border, (managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.mode) === 'inline' && styles.managedInline, (managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.mode) === 'overlay' && styles.managedOverlay, hasBorder && (managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.mode) === 'inline' && styles.managedInlineBorder, hasBorder && (managedSizing === null || managedSizing === void 0 ? void 0 : managedSizing.mode) === 'overlay' && styles.managedOverlayBorder, xcss]),
194
+ style: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants.chatPanelVar, chatPanelVariableWidth), chatPanelOverlayWidthVar, chatPanelOverlayVariableWidth),
195
+ "data-testid": testId,
196
+ "data-layout-chat-panel": "",
197
+ ref: ref
198
+ },
199
+ /*#__PURE__*/
200
+ // Hoist the committed or actively resizing inline width so SideNav can yield
201
+ // space to ChatPanel without allowing the page layout to overflow.
202
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-global-styles
203
+ React.createElement("style", null, "\n#".concat(_root.gridRootId, " { ").concat(_constants.chatPanelLiveWidthVar, ": var(").concat(panelSplitterResizingVar, ", ").concat(chatPanelVariableWidth, "); }\n")), /*#__PURE__*/React.createElement(_provider.PanelSplitterProvider, {
204
+ panelId: chatPanelPanelSplitterId,
205
+ panelRef: ref,
206
+ panelWidth: renderedWidth,
207
+ onCompleteResize: onCompleteResize,
208
+ onResizeStartInternal: managedSizing ? onResizeStartInternal : undefined,
209
+ onResizeInternal: managedSizing ? onResizeInternal : undefined,
210
+ getResizeBounds: getResizeBounds,
211
+ resizingCssVar: panelSplitterResizingVar,
212
+ position: "start"
213
+ }, /*#__PURE__*/React.createElement("div", {
214
+ className: (0, _runtime.ax)([styles.scrollContainer])
215
+ }, children)));
216
+ }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.ribbonVar = exports.panelVar = exports.panelPanelSplitterId = exports.openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavEndNamespace = exports.openLayerObserverSideNavNamespace = exports.localSlotLayers = exports.contentInsetBlockStart = exports.contentHeightWhenFixed = exports.bannerMountedVar = exports.asideVar = exports.asidePanelSplitterId = exports.UNSAFE_topNavVar = exports.UNSAFE_sideNavLayoutVar = exports.UNSAFE_ribbonVar = exports.UNSAFE_panelLayoutVar = exports.UNSAFE_bannerVar = exports.UNSAFE_asideLayoutVar = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = void 0;
6
+ exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.ribbonVar = exports.panelVar = exports.panelPanelSplitterId = exports.openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavEndNamespace = exports.openLayerObserverSideNavNamespace = exports.mainMinimumWidthVar = exports.localSlotLayers = exports.contentInsetBlockStart = exports.contentHeightWhenFixed = exports.chatPanelVar = exports.chatPanelLiveWidthVar = exports.bannerMountedVar = exports.asideVar = exports.asidePanelSplitterId = exports.UNSAFE_topNavVar = exports.UNSAFE_sideNavLayoutVar = exports.UNSAFE_ribbonVar = exports.UNSAFE_panelLayoutVar = exports.UNSAFE_bannerVar = exports.UNSAFE_asideLayoutVar = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = void 0;
7
7
  /**
8
8
  * These variables are shared across the different page layout slots.
9
9
  * This violates the [UI styling standard](https://atlassian.design/components/eslint-plugin-ui-styling-standard/no-imported-style-values/usage).
@@ -14,6 +14,9 @@ exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId =
14
14
  var sideNavVar = exports.sideNavVar = '--n_sNvw';
15
15
  var asideVar = exports.asideVar = '--n_asDw';
16
16
  var panelVar = exports.panelVar = '--n_pnlW';
17
+ var chatPanelVar = exports.chatPanelVar = '--n_cPnlW';
18
+ var chatPanelLiveWidthVar = exports.chatPanelLiveWidthVar = '--n_cPnlLw';
19
+ var mainMinimumWidthVar = exports.mainMinimumWidthVar = '--n_mainMinW';
17
20
  var bannerMountedVar = exports.bannerMountedVar = '--n_bnrM';
18
21
  var topNavMountedVar = exports.topNavMountedVar = '--n_tNvM';
19
22
  var ribbonVar = exports.ribbonVar = '--n_rbnW';
@@ -59,6 +62,8 @@ var UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_EN
59
62
  */
60
63
  // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
61
64
  var localSlotLayers = exports.localSlotLayers = {
65
+ // Chat overlays the app, including TopNav and SideNav, below the banner.
66
+ chatPanelOverlay: 5,
62
67
  ribbon: 4,
63
68
  // The side nav panel splitter is layered above the top nav when FHS is enabled.
64
69
  // It has the same z-index value, but is rendered after the top nav in the DOM so is stacked above.
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LayoutAreaSizingContext = void 0;
7
+ var _react = require("react");
8
+ /**
9
+ * Effective sibling widths held fixed during and after a user resize, until the
10
+ * layout dimensions or configuration change. This is not a resize history.
11
+ */
12
+
13
+ var LayoutAreaSizingContext = exports.LayoutAreaSizingContext = /*#__PURE__*/(0, _react.createContext)(null);