@atlaskit/navigation-system 11.3.0 → 11.3.2

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 (50) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/ui/page-layout/calculate-layout-area-states.js +76 -37
  3. package/dist/cjs/ui/page-layout/chat-panel.js +6 -3
  4. package/dist/cjs/ui/page-layout/layout-area-sizing-context.js +2 -2
  5. package/dist/cjs/ui/page-layout/layout-area-sizing-provider.js +243 -247
  6. package/dist/cjs/ui/page-layout/layout-area-sizing-runtime.js +468 -0
  7. package/dist/cjs/ui/page-layout/main/main.js +1 -1
  8. package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +239 -99
  9. package/dist/cjs/ui/page-layout/panel-splitter/provider.js +3 -1
  10. package/dist/cjs/ui/page-layout/root.compiled.css +14 -3
  11. package/dist/cjs/ui/page-layout/root.js +43 -17
  12. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +14 -3
  13. package/dist/cjs/ui/page-layout/use-css-layout-area-states.js +117 -0
  14. package/dist/cjs/ui/page-layout/use-layout-area-sizing.js +3 -1
  15. package/dist/es2019/ui/page-layout/calculate-layout-area-states.js +51 -17
  16. package/dist/es2019/ui/page-layout/chat-panel.js +29 -5
  17. package/dist/es2019/ui/page-layout/layout-area-sizing-context.js +2 -2
  18. package/dist/es2019/ui/page-layout/layout-area-sizing-provider.js +171 -241
  19. package/dist/es2019/ui/page-layout/layout-area-sizing-runtime.js +419 -0
  20. package/dist/es2019/ui/page-layout/main/main.js +2 -2
  21. package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +60 -10
  22. package/dist/es2019/ui/page-layout/panel-splitter/provider.js +3 -1
  23. package/dist/es2019/ui/page-layout/root.compiled.css +14 -3
  24. package/dist/es2019/ui/page-layout/root.js +30 -3
  25. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +23 -3
  26. package/dist/es2019/ui/page-layout/use-css-layout-area-states.js +73 -0
  27. package/dist/es2019/ui/page-layout/use-layout-area-sizing.js +3 -1
  28. package/dist/esm/ui/page-layout/calculate-layout-area-states.js +75 -37
  29. package/dist/esm/ui/page-layout/chat-panel.js +7 -4
  30. package/dist/esm/ui/page-layout/layout-area-sizing-context.js +2 -2
  31. package/dist/esm/ui/page-layout/layout-area-sizing-provider.js +243 -248
  32. package/dist/esm/ui/page-layout/layout-area-sizing-runtime.js +459 -0
  33. package/dist/esm/ui/page-layout/main/main.js +2 -2
  34. package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +238 -98
  35. package/dist/esm/ui/page-layout/panel-splitter/provider.js +3 -1
  36. package/dist/esm/ui/page-layout/root.compiled.css +14 -3
  37. package/dist/esm/ui/page-layout/root.js +42 -16
  38. package/dist/esm/ui/page-layout/side-nav/side-nav.js +14 -3
  39. package/dist/esm/ui/page-layout/use-css-layout-area-states.js +110 -0
  40. package/dist/esm/ui/page-layout/use-layout-area-sizing.js +3 -1
  41. package/dist/types/ui/page-layout/calculate-layout-area-states.d.ts +7 -2
  42. package/dist/types/ui/page-layout/layout-area-sizing-context.d.ts +10 -3
  43. package/dist/types/ui/page-layout/layout-area-sizing-provider.d.ts +6 -0
  44. package/dist/types/ui/page-layout/layout-area-sizing-runtime.d.ts +8 -0
  45. package/dist/types/ui/page-layout/panel-splitter/panel-splitter-context.d.ts +4 -0
  46. package/dist/types/ui/page-layout/panel-splitter/provider.d.ts +1 -1
  47. package/dist/types/ui/page-layout/root.d.ts +2 -0
  48. package/dist/types/ui/page-layout/use-css-layout-area-states.d.ts +8 -0
  49. package/dist/types/ui/page-layout/use-layout-area-sizing.d.ts +2 -0
  50. package/package.json +12 -6
@@ -11,6 +11,8 @@ require("./panel-splitter.compiled.css");
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var React = _react;
13
13
  var _runtime = require("@compiled/react/runtime");
14
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
16
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
17
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
18
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -41,7 +43,7 @@ var _onDoubleClickContext = require("./on-double-click-context");
41
43
  var _panelSplitterContext = require("./panel-splitter-context");
42
44
  var _panelSplitterDragSymbol = require("./panel-splitter-drag-symbol");
43
45
  var _excluded = ["children", "className"];
44
- 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); }
46
+ 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 _t6 in e) "default" !== _t6 && {}.hasOwnProperty.call(e, _t6) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t6)) && (i.get || i.set) ? o(f, _t6, i) : f[_t6] = e[_t6]); return f; })(e, t); }
45
47
  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; }
46
48
  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; }
47
49
  function signPanelSplitterDragData(data) {
@@ -145,6 +147,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
145
147
  onCompleteResize = _ref3.onCompleteResize,
146
148
  onResizeStartInternal = _ref3.onResizeStartInternal,
147
149
  onResizeInternal = _ref3.onResizeInternal,
150
+ prepareResize = _ref3.prepareResize,
148
151
  getResizeBounds = _ref3.getResizeBounds,
149
152
  panel = _ref3.panel,
150
153
  portal = _ref3.portal,
@@ -296,8 +299,9 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
296
299
  });
297
300
  var resizingWidth = "clamp(".concat(resizeBounds.min, ", ").concat(targetWidth, "px, ").concat(resizeBounds.max, ")");
298
301
  if ((0, _fg.fg)('platform-dst-chat-panel-layout') && onResizeInternal) {
299
- // Let the sizing provider constrain the width against Main's available space.
300
- var width = Math.max((0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min), Math.min(targetWidth, (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)));
302
+ // The allocator needs below-minimum requests for the local-to-chat cascade.
303
+ var currentBounds = getResizeBounds();
304
+ var width = Math.max(0, Math.min(targetWidth, prepareResize ? window.innerWidth : (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(currentBounds.max)));
301
305
  if (width !== lastManagedResizeWidth) {
302
306
  lastManagedResizeWidth = width;
303
307
  onResizeInternal(width);
@@ -310,39 +314,68 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
310
314
  source.data.resizingWidth = resizingWidth;
311
315
  },
312
316
  onDrop: function onDrop(_ref7) {
313
- var _resizingElementRef$c2;
314
- var source = _ref7.source;
315
- (0, _tinyInvariant.default)((0, _isPanelSplitterDragData.isPanelSplitterDragData)(source.data));
316
- _preventUnhandled.preventUnhandled.stop();
317
-
318
- // PDD may deliver its final throttled drag update immediately before drop.
319
- // Commit that update once before measuring; do not persist a previous frame.
320
- if (onResizeInternal && lastManagedResizeWidth !== undefined) {
321
- var width = lastManagedResizeWidth;
322
- (0, _reactDom.flushSync)(function () {
323
- return onResizeInternal(width);
324
- });
325
- lastManagedResizeWidth = undefined;
326
- }
327
- var finalWidth = (0, _getPixelWidth.getPixelWidth)(panel);
328
- // Persist the final preferred width before removing the imperative drag
329
- // variable, so the rendered width is continuous across pointer release.
330
- if ((0, _fg.fg)('platform-dst-chat-panel-layout')) {
331
- (0, _reactDom.flushSync)(function () {
332
- return onCompleteResize(finalWidth);
333
- });
334
- } else {
335
- onCompleteResize(finalWidth);
336
- }
337
- onResizeEnd === null || onResizeEnd === void 0 || onResizeEnd({
338
- initialWidth: source.data.initialWidth,
339
- finalWidth: finalWidth
340
- });
341
- panel.style.removeProperty(resizingCssVar);
342
- resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c2 = resizingElementRef.current) === null || _resizingElementRef$c2 === void 0 || _resizingElementRef$c2.style.removeProperty(resizingCssVar);
317
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
318
+ var _resizingElementRef$c2;
319
+ var source, width, finalWidth, _t;
320
+ return _regenerator.default.wrap(function (_context) {
321
+ while (1) switch (_context.prev = _context.next) {
322
+ case 0:
323
+ source = _ref7.source;
324
+ (0, _tinyInvariant.default)((0, _isPanelSplitterDragData.isPanelSplitterDragData)(source.data));
325
+ _preventUnhandled.preventUnhandled.stop();
326
+ if (!prepareResize) {
327
+ _context.next = 3;
328
+ break;
329
+ }
330
+ _context.next = 1;
331
+ return prepareResize();
332
+ case 1:
333
+ _t = !_context.sent;
334
+ if (_t) {
335
+ _context.next = 2;
336
+ break;
337
+ }
338
+ _t = !panel.isConnected;
339
+ case 2:
340
+ if (!_t) {
341
+ _context.next = 3;
342
+ break;
343
+ }
344
+ return _context.abrupt("return");
345
+ case 3:
346
+ // PDD may deliver its final throttled drag update immediately before drop.
347
+ // Commit that update once before measuring; do not persist a previous frame.
348
+ if (onResizeInternal && lastManagedResizeWidth !== undefined) {
349
+ width = lastManagedResizeWidth;
350
+ (0, _reactDom.flushSync)(function () {
351
+ return onResizeInternal(width);
352
+ });
353
+ lastManagedResizeWidth = undefined;
354
+ }
355
+ finalWidth = (0, _getPixelWidth.getPixelWidth)(panel); // Persist the final preferred width before removing the imperative drag
356
+ // variable, so the rendered width is continuous across pointer release.
357
+ if ((0, _fg.fg)('platform-dst-chat-panel-layout')) {
358
+ (0, _reactDom.flushSync)(function () {
359
+ return onCompleteResize(finalWidth);
360
+ });
361
+ } else {
362
+ onCompleteResize(finalWidth);
363
+ }
364
+ onResizeEnd === null || onResizeEnd === void 0 || onResizeEnd({
365
+ initialWidth: source.data.initialWidth,
366
+ finalWidth: finalWidth
367
+ });
368
+ panel.style.removeProperty(resizingCssVar);
369
+ resizingElementRef === null || resizingElementRef === void 0 || (_resizingElementRef$c2 = resizingElementRef.current) === null || _resizingElementRef$c2 === void 0 || _resizingElementRef$c2.style.removeProperty(resizingCssVar);
370
+ case 4:
371
+ case "end":
372
+ return _context.stop();
373
+ }
374
+ }, _callee);
375
+ }))();
343
376
  }
344
377
  }));
345
- }, [onCompleteResize, onResizeStartInternal, onResizeInternal, onResizeStart, onResizeEnd, panel, resizingCssVar, resizingElementRef, legacyPanelWidth, position, openLayerObserver, panelId, getResizeBounds]);
378
+ }, [onCompleteResize, onResizeStartInternal, onResizeInternal, prepareResize, onResizeStart, onResizeEnd, panel, resizingCssVar, resizingElementRef, legacyPanelWidth, position, openLayerObserver, panelId, getResizeBounds]);
346
379
  var onResizeStartStableRef = (0, _useStableRef.default)(onResizeStart);
347
380
  var onResizeEndStableRef = (0, _useStableRef.default)(onResizeEnd);
348
381
  var _useState5 = (0, _react.useState)(function () {
@@ -367,74 +400,177 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
367
400
  }),
368
401
  _useState6 = (0, _slicedToArray2.default)(_useState5, 1),
369
402
  keyboardResizeManager = _useState6[0];
370
- var handleSliderInputChange = (0, _react.useCallback)(function (event) {
371
- var isManagedResize = (0, _fg.fg)('platform-dst-chat-panel-layout') && onResizeInternal;
372
- var value = isManagedResize ? parseFloat(event.target.value) : parseInt(event.target.value);
373
- if (isManagedResize) {
374
- // The available region may have changed since focus, including without a
375
- // window resize. Use the allocator's current bounds for the public payload.
376
- var bounds = getResizeBounds();
377
- var min = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.min);
378
- var max = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.max);
379
- value = Math.max(min, Math.min(value, max));
380
- setRangeInputBounds({
381
- min: min,
382
- max: max
383
- });
384
- }
385
- setRangeInputValue(value);
403
+ var focusSequence = (0, _react.useRef)(0);
404
+ var keyboardBoundsReady = (0, _react.useRef)(false);
405
+ var pendingKeyboardWidth = (0, _react.useRef)(null);
406
+ var handleSliderInputChange = (0, _react.useCallback)( /*#__PURE__*/function () {
407
+ var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event, pendingKey) {
408
+ var isManagedResize, sequence, value, bounds, min, max, _pendingKeyboardWidth, current, isRtl, increase, step, _t2, _t3;
409
+ return _regenerator.default.wrap(function (_context2) {
410
+ while (1) switch (_context2.prev = _context2.next) {
411
+ case 0:
412
+ isManagedResize = (0, _fg.fg)('platform-dst-chat-panel-layout') && onResizeInternal;
413
+ sequence = focusSequence.current;
414
+ value = isManagedResize ? parseFloat(event.currentTarget.value) : parseInt(event.currentTarget.value);
415
+ if (!prepareResize) {
416
+ _context2.next = 4;
417
+ break;
418
+ }
419
+ _context2.next = 1;
420
+ return prepareResize();
421
+ case 1:
422
+ _t3 = !_context2.sent;
423
+ if (_t3) {
424
+ _context2.next = 2;
425
+ break;
426
+ }
427
+ _t3 = !panel.isConnected;
428
+ case 2:
429
+ _t2 = _t3;
430
+ if (_t2) {
431
+ _context2.next = 3;
432
+ break;
433
+ }
434
+ _t2 = sequence !== focusSequence.current;
435
+ case 3:
436
+ if (!_t2) {
437
+ _context2.next = 4;
438
+ break;
439
+ }
440
+ return _context2.abrupt("return");
441
+ case 4:
442
+ if (isManagedResize) {
443
+ // The available region may have changed since focus, including without a
444
+ // window resize. Use the allocator's current bounds for the public payload.
445
+ bounds = getResizeBounds();
446
+ min = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.min);
447
+ max = (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(bounds.max);
448
+ if (pendingKey) {
449
+ // Native range inputs would apply these keys to the placeholder bounds.
450
+ // Preserve the intent until the chunk provides the real bounds instead.
451
+ current = (_pendingKeyboardWidth = pendingKeyboardWidth.current) !== null && _pendingKeyboardWidth !== void 0 ? _pendingKeyboardWidth : (0, _getPixelWidth.getPixelWidth)(panel);
452
+ isRtl = getTextDirection(panel) === 'rtl';
453
+ increase = pendingKey === 'ArrowUp' || pendingKey === (isRtl ? 'ArrowLeft' : 'ArrowRight') || pendingKey === 'PageUp';
454
+ step = pendingKey.startsWith('Page') ? Math.max(20, (max - min) / 10) : 20;
455
+ value = pendingKey === 'End' ? max : pendingKey === 'Home' ? min : current + (increase ? step : -step);
456
+ }
457
+ value = Math.max(min, Math.min(value, max));
458
+ setRangeInputBounds({
459
+ min: min,
460
+ max: max
461
+ });
462
+ }
463
+ pendingKeyboardWidth.current = value;
464
+ setRangeInputValue(value);
386
465
 
387
- /**
388
- * We are intentionally _not_ debouncing `onCompleteResize` as we want it to be called anytime the user changes the range input value.
389
- * It is an internal-only callback - it's provided by `PanelSplitterProvider`, and used by layout slots to update their layout width state.
390
- */
391
- onCompleteResize(value);
392
- keyboardResizeManager.onResize({
393
- initialWidth: panelWidth,
394
- finalWidth: value
395
- });
396
- }, [getResizeBounds, onCompleteResize, onResizeInternal, panelWidth, keyboardResizeManager]);
466
+ /**
467
+ * We are intentionally _not_ debouncing `onCompleteResize` as we want it to be called anytime the user changes the range input value.
468
+ * It is an internal-only callback - it's provided by `PanelSplitterProvider`, and used by layout slots to update their layout width state.
469
+ */
470
+ onCompleteResize(value);
471
+ keyboardResizeManager.onResize({
472
+ initialWidth: panelWidth,
473
+ finalWidth: value
474
+ });
475
+ case 5:
476
+ case "end":
477
+ return _context2.stop();
478
+ }
479
+ }, _callee2);
480
+ }));
481
+ return function (_x, _x2) {
482
+ return _ref8.apply(this, arguments);
483
+ };
484
+ }(), [getResizeBounds, onCompleteResize, onResizeInternal, panelWidth, keyboardResizeManager, panel, prepareResize]);
485
+ var handleSliderKeyDown = (0, _react.useCallback)(function (event) {
486
+ if (prepareResize && !keyboardBoundsReady.current && ['Home', 'End', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'PageUp', 'PageDown'].includes(event.key)) {
487
+ event.preventDefault();
488
+ void handleSliderInputChange(event, event.key);
489
+ }
490
+ }, [handleSliderInputChange, prepareResize]);
397
491
  var resizeEventListenerCleanupFn = (0, _react.useRef)(null);
398
- var handleSliderFocus = (0, _react.useCallback)(function () {
492
+ var handleSliderFocus = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
399
493
  var _resizeEventListenerC;
400
- /**
401
- * We are only updating the range input's properties when the element is focused, as a performance optimisation.
402
- * It isn't necessary to recalculate these values until the element is going to be used.
403
- */
404
-
405
- // Clean up any left over listeners in case `focus` was triggered again without `blur`.
406
- (_resizeEventListenerC = resizeEventListenerCleanupFn.current) === null || _resizeEventListenerC === void 0 || _resizeEventListenerC.call(resizeEventListenerCleanupFn);
494
+ var sequence, width, resizeBounds, _t4, _t5;
495
+ return _regenerator.default.wrap(function (_context3) {
496
+ while (1) switch (_context3.prev = _context3.next) {
497
+ case 0:
498
+ sequence = ++focusSequence.current;
499
+ keyboardBoundsReady.current = false;
500
+ pendingKeyboardWidth.current = null;
501
+ if (!prepareResize) {
502
+ _context3.next = 4;
503
+ break;
504
+ }
505
+ _context3.next = 1;
506
+ return prepareResize();
507
+ case 1:
508
+ _t5 = !_context3.sent;
509
+ if (_t5) {
510
+ _context3.next = 2;
511
+ break;
512
+ }
513
+ _t5 = !panel.isConnected;
514
+ case 2:
515
+ _t4 = _t5;
516
+ if (_t4) {
517
+ _context3.next = 3;
518
+ break;
519
+ }
520
+ _t4 = sequence !== focusSequence.current;
521
+ case 3:
522
+ if (!_t4) {
523
+ _context3.next = 4;
524
+ break;
525
+ }
526
+ return _context3.abrupt("return");
527
+ case 4:
528
+ /**
529
+ * We are only updating the range input's properties when the element is focused, as a performance optimisation.
530
+ * It isn't necessary to recalculate these values until the element is going to be used.
531
+ */
407
532
 
408
- // Update the range input value to match the current panel width.
409
- setRangeInputValue(panelWidth);
410
- var resizeBounds = getResizeBounds();
533
+ // Clean up any left over listeners in case `focus` was triggered again without `blur`.
534
+ (_resizeEventListenerC = resizeEventListenerCleanupFn.current) === null || _resizeEventListenerC === void 0 || _resizeEventListenerC.call(resizeEventListenerCleanupFn);
411
535
 
412
- // Update the range input bounds to ensure they are accurate (in case the viewport was previously resized)
413
- setRangeInputBounds({
414
- min: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min),
415
- max: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)
416
- });
536
+ // Update the range input value to match the current panel width.
537
+ width = prepareResize ? (0, _getPixelWidth.getPixelWidth)(panel) : panelWidth;
538
+ pendingKeyboardWidth.current = width;
539
+ setRangeInputValue(width);
540
+ resizeBounds = getResizeBounds(); // Update the range input bounds to ensure they are accurate (in case the viewport was previously resized)
541
+ setRangeInputBounds({
542
+ min: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min),
543
+ max: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)
544
+ });
545
+ keyboardBoundsReady.current = true;
417
546
 
418
- /**
419
- * _While the slider element is focused_, add a window resize event listener to update the range input bounds
420
- * when the window is resized. This is needed to ensure the min and max widths accurately reflect the viewport
421
- * size - in case they are provided in vw units.
422
- *
423
- * This listener is cleaned up when the element is blurred.
424
- */
425
- resizeEventListenerCleanupFn.current = (0, _bindEventListener.bind)(window, {
426
- type: 'resize',
427
- listener: function updateState() {
428
- var resizeBounds = getResizeBounds();
429
- setRangeInputBounds({
430
- min: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min),
431
- max: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)
432
- });
547
+ /**
548
+ * _While the slider element is focused_, add a window resize event listener to update the range input bounds
549
+ * when the window is resized. This is needed to ensure the min and max widths accurately reflect the viewport
550
+ * size - in case they are provided in vw units.
551
+ *
552
+ * This listener is cleaned up when the element is blurred.
553
+ */
554
+ resizeEventListenerCleanupFn.current = (0, _bindEventListener.bind)(window, {
555
+ type: 'resize',
556
+ listener: function updateState() {
557
+ var resizeBounds = getResizeBounds();
558
+ setRangeInputBounds({
559
+ min: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.min),
560
+ max: (0, _convertResizeBoundToPixels.convertResizeBoundToPixels)(resizeBounds.max)
561
+ });
562
+ }
563
+ });
564
+ case 5:
565
+ case "end":
566
+ return _context3.stop();
433
567
  }
434
- });
435
- }, [panelWidth, getResizeBounds]);
568
+ }, _callee3);
569
+ })), [panelWidth, getResizeBounds, panel, prepareResize]);
436
570
  var handleSliderBlur = (0, _react.useCallback)(function () {
437
571
  var _resizeEventListenerC2;
572
+ focusSequence.current++;
573
+ keyboardBoundsReady.current = false;
438
574
  // Remove the resize event listener when the range input is blurred.
439
575
  (_resizeEventListenerC2 = resizeEventListenerCleanupFn.current) === null || _resizeEventListenerC2 === void 0 || _resizeEventListenerC2.call(resizeEventListenerCleanupFn);
440
576
  }, []);
@@ -461,6 +597,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
461
597
  }, /*#__PURE__*/React.createElement("div", {
462
598
  ref: splitterRef,
463
599
  "data-testid": testId,
600
+ "data-panel-splitter": prepareResize ? '' : undefined,
464
601
  onDoubleClick: onDoubleClick,
465
602
  className: (0, _runtime.ax)([grabAreaStyles.root, (0, _fg.fg)('platform-dst-tokens-finesse') && grabAreaStyles.rootFinesse])
466
603
  }, /*#__PURE__*/React.createElement(_visuallyHidden.default, null, /*#__PURE__*/React.createElement("input", {
@@ -472,6 +609,7 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
472
609
  "aria-valuetext": ariaValueText,
473
610
  "aria-labelledby": labelId,
474
611
  onChange: handleSliderInputChange,
612
+ onKeyDown: prepareResize ? handleSliderKeyDown : undefined,
475
613
  onFocus: handleSliderFocus,
476
614
  onBlur: handleSliderBlur
477
615
  }), /*#__PURE__*/React.createElement("span", {
@@ -496,12 +634,12 @@ var PortaledPanelSplitter = function PortaledPanelSplitter(_ref3) {
496
634
  * </Aside>
497
635
  * ```
498
636
  */
499
- var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref8) {
500
- var label = _ref8.label,
501
- onResizeStart = _ref8.onResizeStart,
502
- onResizeEnd = _ref8.onResizeEnd,
503
- testId = _ref8.testId,
504
- tooltipContent = _ref8.tooltipContent;
637
+ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref0) {
638
+ var label = _ref0.label,
639
+ onResizeStart = _ref0.onResizeStart,
640
+ onResizeEnd = _ref0.onResizeEnd,
641
+ testId = _ref0.testId,
642
+ tooltipContent = _ref0.tooltipContent;
505
643
  var _useState7 = (0, _react.useState)(null),
506
644
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
507
645
  panel = _useState8[0],
@@ -521,6 +659,7 @@ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref8) {
521
659
  onResizeStartInternal = context.onResizeStartInternal,
522
660
  onResizeInternal = context.onResizeInternal,
523
661
  getResizeBounds = context.getResizeBounds,
662
+ prepareResize = context.prepareResize,
524
663
  resizingCssVar = context.resizingCssVar,
525
664
  resizingElementRef = context.resizingElementRef,
526
665
  position = context.position,
@@ -619,6 +758,7 @@ var PanelSplitter = exports.PanelSplitter = function PanelSplitter(_ref8) {
619
758
  onCompleteResize: onCompleteResize,
620
759
  onResizeStartInternal: onResizeStartInternal,
621
760
  onResizeInternal: onResizeInternal,
761
+ prepareResize: prepareResize,
622
762
  getResizeBounds: getResizeBounds,
623
763
  resizingCssVar: resizingCssVar,
624
764
  resizingElementRef: resizingElementRef,
@@ -19,6 +19,7 @@ var PanelSplitterProvider = exports.PanelSplitterProvider = function PanelSplitt
19
19
  onCompleteResize = _ref.onCompleteResize,
20
20
  onResizeStartInternal = _ref.onResizeStartInternal,
21
21
  onResizeInternal = _ref.onResizeInternal,
22
+ prepareResize = _ref.prepareResize,
22
23
  getResizeBounds = _ref.getResizeBounds,
23
24
  resizingCssVar = _ref.resizingCssVar,
24
25
  panelRef = _ref.panelRef,
@@ -38,6 +39,7 @@ var PanelSplitterProvider = exports.PanelSplitterProvider = function PanelSplitt
38
39
  onCompleteResize: onCompleteResize,
39
40
  onResizeStartInternal: onResizeStartInternal,
40
41
  onResizeInternal: onResizeInternal,
42
+ prepareResize: prepareResize,
41
43
  getResizeBounds: getResizeBounds,
42
44
  resizingCssVar: resizingCssVar,
43
45
  position: position,
@@ -47,7 +49,7 @@ var PanelSplitterProvider = exports.PanelSplitterProvider = function PanelSplitt
47
49
  portalRef: typeof providedPortalRef !== 'undefined' ? providedPortalRef : portalRef,
48
50
  shortcut: shortcut
49
51
  };
50
- }, [panelId, panelWidth, onCompleteResize, onResizeStartInternal, onResizeInternal, getResizeBounds, resizingCssVar, position, panelRef, resizingElementRef, isEnabled, providedPortalRef, shortcut]);
52
+ }, [panelId, panelWidth, onCompleteResize, onResizeStartInternal, onResizeInternal, prepareResize, getResizeBounds, resizingCssVar, position, panelRef, resizingElementRef, isEnabled, providedPortalRef, shortcut]);
51
53
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_panelSplitterContext.PanelSplitterContext.Provider, {
52
54
  value: context
53
55
  }, children), typeof providedPortalRef !== 'undefined' ? null : /*#__PURE__*/_react.default.createElement("div", {
@@ -1,13 +1,24 @@
1
1
  ._18m9zryt{overflow-y:clip}
2
+ ._1bsb1osq{width:100%}
3
+ ._1bsb1raa{width:max(0px,calc(var(--n_layoutW) - var(--n_mainMinW) - var(--n_fitAside, 0px) - var(--n_fitRibbon, 0px) - var(--n_fitPanel, 0px)))}
4
+ ._1bsb4nr3{width:var(--n_layoutW)}
5
+ ._1bsbjwgu{width:max(0px,calc(100% - var(--n_fitNav)))}
2
6
  ._1ciragmp >:not([data-layout-slot]){display:none!important}
3
7
  ._1cwmtye8{--n_mainMinW:20rem}
4
8
  ._1e0c11p5{display:grid}
9
+ ._1f381mry{container-name:navigation-chat-space}
10
+ ._1f38hwoh{container-name:navigation-main-space}
11
+ ._1f38hx13{container-name:navigation-layout-width}
5
12
  ._1lmcq9em{grid-template-areas:"banner" "top-bar" "main" "aside"}
6
13
  ._1reozryt{overflow-x:clip}
7
14
  ._1tke1kxc{min-height:100vh}
8
15
  ._1tvnagmp >:not([data-layout-slot]):not(dialog):not([popover]){display:none!important}
9
16
  ._2z0516ab{grid-template-rows:auto auto 1fr auto}
17
+ ._5to3grho{--n_fitNav:0px}
18
+ ._7cca15wb{container-type:inline-size}
19
+ ._82d6okmw{--n_layoutW:100cqw}
20
+ ._vchh1ntv{box-sizing:content-box}
10
21
  ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
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}}
22
+ @media (min-width:40rem){._12ag50j2{grid-template-areas:"banner banner" "top-bar chat-panel" "main chat-panel" "aside chat-panel"}._71dl19sb{grid-template-columns:minmax(var(--n_mainMinW),1fr) var(--n_chatTrack,0)}}
23
+ @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"}._1rqttswr{grid-template-columns:auto auto minmax(var(--n_mainMinW),1fr) auto var(--n_chatTrack,0)}}
24
+ @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"}._tyve87m4{grid-template-columns:auto auto minmax(var(--n_mainMinW),1fr) auto auto var(--n_chatTrack,0)}._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}}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.Root = Root;
9
- exports.gridRootId = void 0;
9
+ exports.gridRootId = exports.gridRootFitId = exports.gridRootChatFitId = void 0;
10
10
  require("./root.compiled.css");
11
11
  var _runtime = require("@compiled/react/runtime");
12
12
  var _react = _interopRequireWildcard(require("react"));
@@ -23,34 +23,60 @@ var _visibilityProvider = require("./side-nav/visibility-provider");
23
23
  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); }
24
24
  // ID of the root element that the banner and top bar slots hoist their sizes to. Only internally exported.
25
25
  var gridRootId = exports.gridRootId = 'unsafe-design-system-page-layout-root';
26
+ var gridRootFitId = exports.gridRootFitId = "".concat(gridRootId, "-fit");
27
+ var gridRootChatFitId = exports.gridRootChatFitId = "".concat(gridRootId, "-chat-fit");
26
28
  var styles = {
29
+ widthContainer: "_7cca15wb _1f38hx13 _1bsb1osq",
30
+ mainSpace: "_82d6okmw _1cwmtye8 _7cca15wb _1f38hwoh _vchh1ntv _1bsb1raa",
31
+ chatSpace: "_5to3grho _7cca15wb _1f381mry _1bsbjwgu",
27
32
  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",
33
+ root: "_1cwmtye8 _1e0c11p5 _1tke1kxc _1bsb4nr3 _1lmcq9em _yv0ei47z _2z0516ab _12ag50j2 _71dl19sb _12fkqmyk _12qzrxre _1rqttswr _xkmggc7l _tyve87m4",
29
34
  safetyRail: "_1ciragmp",
30
35
  safetyRailWithTopLayer: "_1tvnagmp",
31
36
  panelUplift: "_1reozryt _18m9zryt"
32
37
  };
38
+ function LayoutFitContainers(_ref) {
39
+ var children = _ref.children;
40
+ // CSS cannot use custom properties in a size-query condition. Query the
41
+ // remaining capacity instead: these wrappers subtract configured minimums
42
+ // and occupied tracks, while the actual grid keeps its original host width.
43
+ return /*#__PURE__*/_react.default.createElement("div", {
44
+ "data-layout-width-container": "",
45
+ className: (0, _runtime.ax)([styles.widthContainer])
46
+ }, /*#__PURE__*/_react.default.createElement("style", {
47
+ dangerouslySetInnerHTML: {
48
+ __html: "@property --n_layoutW { syntax: '<length>'; inherits: true; initial-value: 0px; }"
49
+ }
50
+ }), /*#__PURE__*/_react.default.createElement("div", {
51
+ id: gridRootFitId,
52
+ className: (0, _runtime.ax)([styles.mainSpace])
53
+ }, /*#__PURE__*/_react.default.createElement("div", {
54
+ id: gridRootChatFitId,
55
+ className: (0, _runtime.ax)([styles.chatSpace])
56
+ }, children)));
57
+ }
33
58
 
34
59
  /**
35
60
  * The root component of the navigation system. It wraps the underlying components with the necessary contexts allowing to use certain data and hooks
36
61
  * @param skipLinksLabel - The very first element of the layout is a skip links container that can be accessed by pressing Tab button and holds the links to the other sections of the layout thus improving accessibility. This parameter defines the header text for this container
37
62
  */
38
- function Root(_ref) {
39
- var children = _ref.children,
40
- xcss = _ref.xcss,
41
- _ref$UNSAFE_dangerous = _ref.UNSAFE_dangerouslyHoistSlotSizes,
42
- UNSAFE_dangerouslyHoistSlotSizes = _ref$UNSAFE_dangerous === void 0 ? false : _ref$UNSAFE_dangerous,
43
- _ref$skipLinksLabel = _ref.skipLinksLabel,
44
- skipLinksLabel = _ref$skipLinksLabel === void 0 ? (0, _fg.fg)('platform_dst_nav4_skip_link_a11y_1') ? 'Skip to' : 'Skip to:' : _ref$skipLinksLabel,
45
- _ref$skipLinksTrigger = _ref.skipLinksTriggerLabel,
46
- skipLinksTriggerLabel = _ref$skipLinksTrigger === void 0 ? 'Skip to' : _ref$skipLinksTrigger,
47
- testId = _ref.testId,
48
- defaultSideNavCollapsed = _ref.defaultSideNavCollapsed,
49
- _ref$isSideNavShortcu = _ref.isSideNavShortcutEnabled,
50
- isSideNavShortcutEnabled = _ref$isSideNavShortcu === void 0 ? false : _ref$isSideNavShortcu;
63
+ function Root(_ref2) {
64
+ var children = _ref2.children,
65
+ xcss = _ref2.xcss,
66
+ _ref2$UNSAFE_dangerou = _ref2.UNSAFE_dangerouslyHoistSlotSizes,
67
+ UNSAFE_dangerouslyHoistSlotSizes = _ref2$UNSAFE_dangerou === void 0 ? false : _ref2$UNSAFE_dangerou,
68
+ _ref2$skipLinksLabel = _ref2.skipLinksLabel,
69
+ skipLinksLabel = _ref2$skipLinksLabel === void 0 ? (0, _fg.fg)('platform_dst_nav4_skip_link_a11y_1') ? 'Skip to' : 'Skip to:' : _ref2$skipLinksLabel,
70
+ _ref2$skipLinksTrigge = _ref2.skipLinksTriggerLabel,
71
+ skipLinksTriggerLabel = _ref2$skipLinksTrigge === void 0 ? 'Skip to' : _ref2$skipLinksTrigge,
72
+ testId = _ref2.testId,
73
+ defaultSideNavCollapsed = _ref2.defaultSideNavCollapsed,
74
+ _ref2$isSideNavShortc = _ref2.isSideNavShortcutEnabled,
75
+ isSideNavShortcutEnabled = _ref2$isSideNavShortc === void 0 ? false : _ref2$isSideNavShortc;
51
76
  var ref = (0, _react.useRef)(null);
52
77
  var isChatPanelLayoutEnabled = (0, _fg.fg)('platform-dst-chat-panel-layout');
53
78
  var LayoutProvider = isChatPanelLayoutEnabled ? _layoutAreaSizingProvider.LayoutAreaSizingProvider : _react.default.Fragment;
79
+ var WidthContainer = isChatPanelLayoutEnabled ? LayoutFitContainers : _react.default.Fragment;
54
80
  (0, _react.useEffect)(function () {
55
81
  if (process.env.NODE_ENV !== 'production') {
56
82
  var IGNORED_ELEMENTS = ['SCRIPT', 'STYLE'];
@@ -79,10 +105,10 @@ function Root(_ref) {
79
105
  label: skipLinksLabel,
80
106
  triggerLabel: skipLinksTriggerLabel,
81
107
  testId: testId
82
- }, /*#__PURE__*/_react.default.createElement("div", {
108
+ }, /*#__PURE__*/_react.default.createElement(WidthContainer, null, /*#__PURE__*/_react.default.createElement("div", {
83
109
  ref: ref,
84
110
  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]),
85
111
  id: gridRootId,
86
112
  "data-testid": testId
87
- }, children))))))))));
113
+ }, children)))))))))));
88
114
  }