@opengeoweb/shared 4.4.0 → 4.5.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/index.umd.js CHANGED
@@ -483,39 +483,41 @@
483
483
  };
484
484
  };
485
485
 
486
- var useMakeSureContainerStaysInsideWindow = function useMakeSureContainerStaysInsideWindow(nodeRef, position, setPosition) {
487
- var onResizeWindow = React__default["default"].useCallback(function (event) {
488
- if (!nodeRef.current) return;
489
- var bbox = nodeRef.current.firstChild.getBoundingClientRect();
490
- var windowTarget = event.currentTarget;
491
- if (!windowTarget) return;
492
- var innerHeight = windowTarget.innerHeight,
493
- innerWidth = windowTarget.innerWidth;
494
- var isHorizontallyLarger = bbox.width > innerWidth;
495
- var isVerticallyLarger = bbox.height > innerHeight; // left screen
496
-
497
- if (bbox.x < 0 || isHorizontallyLarger) {
486
+ var adjustPosition = function adjustPosition(bbox, containingView, position, setPosition) {
487
+ var isHorizontallyLarger = bbox.width > containingView.width;
488
+ var isVerticallyLarger = bbox.height > containingView.height; // left screen
489
+
490
+ if (bbox.x < containingView.x || isHorizontallyLarger) {
491
+ var diffX = containingView.x - bbox.x;
492
+ setPosition(__assign(__assign({}, position), {
493
+ x: position.x + diffX
494
+ }));
495
+ } // right screen
496
+ else if (bbox.right >= containingView.right) {
497
+ var diffX = containingView.right - bbox.right;
498
498
  setPosition(__assign(__assign({}, position), {
499
- x: position.x - bbox.x
499
+ x: position.x + diffX
500
500
  }));
501
- } // right screen
502
- else if (bbox.x + bbox.width >= innerWidth) {
503
- var diffX = innerWidth - bbox.x - bbox.width;
501
+ } // top screen
502
+ else if (bbox.y < containingView.y || isVerticallyLarger) {
503
+ var diffY = containingView.y - bbox.y;
504
504
  setPosition(__assign(__assign({}, position), {
505
- x: position.x + diffX
505
+ y: position.y + diffY
506
506
  }));
507
- } // top screen
508
- else if (bbox.y < 0 || isVerticallyLarger) {
507
+ } // bottom screen
508
+ else if (bbox.bottom >= containingView.bottom) {
509
+ var diffY = containingView.bottom - bbox.bottom;
509
510
  setPosition(__assign(__assign({}, position), {
510
- y: position.y - bbox.y
511
+ y: position.y + diffY
511
512
  }));
512
- } // bottom screen
513
- else if (bbox.y + bbox.height >= innerHeight) {
514
- var diffY = innerHeight - bbox.y - bbox.height;
515
- setPosition(__assign(__assign({}, position), {
516
- y: position.y + diffY
517
- }));
518
- }
513
+ }
514
+ };
515
+ var useMakeSureContainerStaysInsideWindow = function useMakeSureContainerStaysInsideWindow(nodeRef, position, setPosition) {
516
+ var onResizeWindow = React__default["default"].useCallback(function () {
517
+ if (!nodeRef.current) return;
518
+ var bbox = nodeRef.current.firstChild.getBoundingClientRect();
519
+ var containingView = nodeRef.current.parentElement.getBoundingClientRect();
520
+ adjustPosition(bbox, containingView, position, setPosition);
519
521
  }, [nodeRef, position, setPosition]);
520
522
  React__default["default"].useEffect(function () {
521
523
  var throttledResize = lodash.throttle(onResizeWindow, 100);
@@ -935,29 +937,26 @@
935
937
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
936
938
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
937
939
  * */
940
+ var isDraggingClassName = 'is-dragging';
938
941
 
939
942
  var ResizeComponent = function ResizeComponent(_a) {
940
- var _b = _a.startPosition,
941
- startPosition = _b === void 0 ? {
942
- left: undefined,
943
- right: undefined,
944
- top: undefined
945
- } : _b,
946
- children = _a.children,
947
- _c = _a.onResizeStart,
948
- onResizeStart = _c === void 0 ? function () {} : _c,
943
+ var children = _a.children,
944
+ _b = _a.onResizeStart,
945
+ onResizeStart = _b === void 0 ? function () {} : _b,
946
+ _c = _a.onResizeStop,
947
+ onResizeStop = _c === void 0 ? function () {} : _c,
949
948
  size = _a.size,
950
949
  setSize = _a.setSize,
951
950
  _d = _a.minHeight,
952
951
  minHeight = _d === void 0 ? 50 : _d,
953
952
  _e = _a.minWidth,
954
953
  minWidth = _e === void 0 ? 50 : _e,
955
- props = __rest(_a, ["startPosition", "children", "onResizeStart", "size", "setSize", "minHeight", "minWidth"]);
954
+ props = __rest(_a, ["children", "onResizeStart", "onResizeStop", "size", "setSize", "minHeight", "minWidth"]);
956
955
 
957
956
  var theme$1 = material.useTheme();
958
- var isRightAligned = startPosition && startPosition.right !== null && startPosition.right !== undefined;
959
957
  var onStartResize = React__default["default"].useCallback(function (event, _direction, node) {
960
958
  event.stopPropagation();
959
+ node.classList.add(isDraggingClassName);
961
960
 
962
961
  var _a = node.getBoundingClientRect(),
963
962
  width = _a.width,
@@ -972,32 +971,42 @@
972
971
  node.style.height = height + "px";
973
972
  onResizeStart();
974
973
  }, [onResizeStart, setSize]);
975
- var onResizeStop = React__default["default"].useCallback(function (_event, _direction, _ref, delta) {
974
+ var onStopResize = React__default["default"].useCallback(function (event, direction, node, delta) {
975
+ node.classList.remove(isDraggingClassName);
976
976
  var width = parseInt(size.width, 10) + delta.width;
977
977
  var height = parseInt(size.height, 10) + delta.height;
978
978
  setSize({
979
979
  width: width,
980
980
  height: height
981
981
  });
982
- }, [setSize, size]);
982
+ onResizeStop(event, direction, node, delta);
983
+ }, [setSize, onResizeStop, size]);
983
984
  return /*#__PURE__*/React__default["default"].createElement(reResizable.Resizable // TODO: implement bounds https://gitlab.com/opengeoweb/opengeoweb/-/issues/1035
984
985
  , __assign({
985
986
  // TODO: implement bounds https://gitlab.com/opengeoweb/opengeoweb/-/issues/1035
986
987
  minHeight: minHeight,
987
988
  minWidth: minWidth,
988
989
  size: size,
989
- onResizeStop: onResizeStop,
990
+ onResizeStop: onStopResize,
990
991
  handleComponent: {
991
992
  bottomRight: /*#__PURE__*/React__default["default"].createElement(theme.Resize, {
992
993
  style: {
993
994
  fill: "" + theme$1.palette.geowebColors.buttons.flat["default"].color
994
- }
995
+ },
996
+ sx: {
997
+ display: 'none'
998
+ },
999
+ className: "resizableHandle"
995
1000
  }),
996
1001
  bottomLeft: /*#__PURE__*/React__default["default"].createElement(theme.Resize, {
997
1002
  isRightAligned: true,
998
1003
  style: {
999
1004
  fill: "" + theme$1.palette.geowebColors.buttons.flat["default"].color
1000
- }
1005
+ },
1006
+ sx: {
1007
+ display: 'none'
1008
+ },
1009
+ className: "resizableHandle"
1001
1010
  })
1002
1011
  },
1003
1012
  enable: {
@@ -1006,8 +1015,8 @@
1006
1015
  bottom: false,
1007
1016
  left: false,
1008
1017
  topRight: false,
1009
- bottomRight: !isRightAligned,
1010
- bottomLeft: isRightAligned,
1018
+ bottomRight: true,
1019
+ bottomLeft: true,
1011
1020
  topLeft: false
1012
1021
  },
1013
1022
  onResizeStart: onStartResize
@@ -1258,6 +1267,55 @@
1258
1267
  });
1259
1268
  };
1260
1269
 
1270
+ /* *
1271
+ * Licensed under the Apache License, Version 2.0 (the "License");
1272
+ * you may not use this file except in compliance with the License.
1273
+ * You may obtain a copy of the License at
1274
+ *
1275
+ * http://www.apache.org/licenses/LICENSE-2.0
1276
+ *
1277
+ * Unless required by applicable law or agreed to in writing, software
1278
+ * distributed under the License is distributed on an "AS IS" BASIS,
1279
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1280
+ * See the License for the specific language governing permissions and
1281
+ * limitations under the License.
1282
+ *
1283
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1284
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
1285
+ * */
1286
+ var defaultDelay = 1000;
1287
+ var useControlledTooltip = function useControlledTooltip() {
1288
+ var _a = __read(React__namespace.useState(false), 2),
1289
+ tooltipOpen = _a[0],
1290
+ setTooltipOpen = _a[1];
1291
+
1292
+ var _b = __read(React__namespace.useState(false), 2),
1293
+ delayedTooltip = _b[0],
1294
+ setDelayedTooltip = _b[1];
1295
+
1296
+ React__namespace.useEffect(function () {
1297
+ if (tooltipOpen === true) {
1298
+ var timer_1 = setTimeout(function () {
1299
+ return setDelayedTooltip(true);
1300
+ }, defaultDelay);
1301
+ return function () {
1302
+ clearTimeout(timer_1);
1303
+ };
1304
+ }
1305
+
1306
+ setDelayedTooltip(false);
1307
+ return function () {};
1308
+ }, [tooltipOpen]);
1309
+ return [delayedTooltip, setTooltipOpen];
1310
+ };
1311
+ var CustomTooltip = function CustomTooltip(props) {
1312
+ return /*#__PURE__*/React__namespace.createElement(material.Tooltip, __assign({}, props, {
1313
+ enterDelay: defaultDelay,
1314
+ enterNextDelay: defaultDelay,
1315
+ disableInteractive: true
1316
+ }));
1317
+ };
1318
+
1261
1319
  /* *
1262
1320
  * Licensed under the Apache License, Version 2.0 (the "License");
1263
1321
  * you may not use this file except in compliance with the License.
@@ -1299,7 +1357,8 @@
1299
1357
  return {
1300
1358
  fontSize: 20,
1301
1359
  fontWeight: 400,
1302
- padding: '8px'
1360
+ padding: '4px 8px',
1361
+ height: 40
1303
1362
  };
1304
1363
  }
1305
1364
 
@@ -1336,31 +1395,37 @@
1336
1395
  isDraggable = _c === void 0 ? false : _c,
1337
1396
  _d = _a.className,
1338
1397
  className = _d === void 0 ? '' : _d,
1339
- _e = _a.leftComponent,
1340
- leftComponent = _e === void 0 ? null : _e;
1398
+ _e = _a.leftHeaderComponent,
1399
+ leftHeaderComponent = _e === void 0 ? null : _e,
1400
+ _f = _a.rightHeaderComponent,
1401
+ rightHeaderComponent = _f === void 0 ? null : _f;
1341
1402
  var styles = getStyle(size);
1342
- var columnSizeIcon = leftComponent ? 3 : 1;
1343
- var columnSizeTitle = leftComponent ? 6 : 10;
1403
+ var columnSizeIcon = leftHeaderComponent || rightHeaderComponent ? 4 : 1;
1404
+ var columnSizeTitle = leftHeaderComponent || rightHeaderComponent ? 4 : 10;
1344
1405
  return /*#__PURE__*/React__default["default"].createElement(material.Box, {
1345
1406
  component: "header",
1346
1407
  className: className,
1347
1408
  sx: {
1348
1409
  boxShadow: 1,
1349
1410
  backgroundColor: 'geowebColors.background.surface',
1350
- padding: styles.padding,
1351
1411
  zIndex: 2,
1352
1412
  cursor: isDraggable ? 'move' : null
1353
1413
  }
1354
1414
  }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1355
1415
  container: true,
1356
- alignItems: "center"
1416
+ alignItems: "center",
1417
+ sx: {
1418
+ padding: styles.padding,
1419
+ height: styles.height
1420
+ }
1357
1421
  }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1422
+ className: "header-left",
1358
1423
  item: true,
1359
1424
  xs: columnSizeIcon,
1360
1425
  sx: {
1361
1426
  paddingRight: 1
1362
1427
  }
1363
- }, isDraggable && size !== 'xxs' && !leftComponent && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1428
+ }, isDraggable && size !== 'xxs' && !leftHeaderComponent && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1364
1429
  container: true,
1365
1430
  justifyContent: "flex-start"
1366
1431
  }, /*#__PURE__*/React__default["default"].createElement(material.IconButton, {
@@ -1370,7 +1435,8 @@
1370
1435
  sx: __assign(__assign({}, iconStyle), {
1371
1436
  pointerEvents: 'none'
1372
1437
  })
1373
- }, /*#__PURE__*/React__default["default"].createElement(theme.DragHandle, null))), leftComponent && leftComponent), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1438
+ }, /*#__PURE__*/React__default["default"].createElement(theme.DragHandle, null))), leftHeaderComponent && leftHeaderComponent), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1439
+ className: "header-title",
1374
1440
  item: true,
1375
1441
  xs: columnSizeTitle
1376
1442
  }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
@@ -1394,11 +1460,12 @@
1394
1460
  height: 12
1395
1461
  })
1396
1462
  }, /*#__PURE__*/React__default["default"].createElement(theme.DragHandle, null)))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
1463
+ className: "header-right",
1397
1464
  item: true,
1398
1465
  xs: columnSizeIcon,
1399
1466
  container: true,
1400
1467
  justifyContent: "flex-end"
1401
- }, onClose && /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
1468
+ }, rightHeaderComponent && rightHeaderComponent, onClose && /*#__PURE__*/React__default["default"].createElement(CustomTooltip, {
1402
1469
  title: "Close",
1403
1470
  placement: "bottom",
1404
1471
  sx: {
@@ -1466,9 +1533,11 @@
1466
1533
  _h = _a.headerClassName,
1467
1534
  // elevation_06
1468
1535
  headerClassName = _h === void 0 ? '' : _h,
1469
- _j = _a.leftComponent,
1470
- leftComponent = _j === void 0 ? null : _j,
1471
- props = __rest(_a, ["title", "size", "children", "onClose", "isResizable", "isDraggable", "maxHeight", "elevation", "headerClassName", "leftComponent"]);
1536
+ _j = _a.leftHeaderComponent,
1537
+ leftHeaderComponent = _j === void 0 ? null : _j,
1538
+ _k = _a.rightHeaderComponent,
1539
+ rightHeaderComponent = _k === void 0 ? null : _k,
1540
+ props = __rest(_a, ["title", "size", "children", "onClose", "isResizable", "isDraggable", "maxHeight", "elevation", "headerClassName", "leftHeaderComponent", "rightHeaderComponent"]);
1472
1541
 
1473
1542
  return /*#__PURE__*/React__default["default"].createElement(material.Paper, __assign({
1474
1543
  elevation: elevation,
@@ -1479,7 +1548,8 @@
1479
1548
  isDraggable: isDraggable,
1480
1549
  onClose: onClose,
1481
1550
  className: headerClassName,
1482
- leftComponent: leftComponent
1551
+ leftHeaderComponent: leftHeaderComponent,
1552
+ rightHeaderComponent: rightHeaderComponent
1483
1553
  })), /*#__PURE__*/React__default["default"].createElement(material.Box, {
1484
1554
  sx: styles$2.content,
1485
1555
  style: {
@@ -1547,42 +1617,60 @@
1547
1617
  onChangeSize = _j === void 0 ? function () {} : _j,
1548
1618
  _k = _a.onMouseDown,
1549
1619
  onMouseDown = _k === void 0 ? function () {} : _k,
1550
- _l = _a.order,
1551
- order = _l === void 0 ? 1 : _l,
1552
- _m = _a.source,
1553
- source = _m === void 0 ? 'app' : _m,
1554
- _o = _a.leftComponent,
1555
- leftComponent = _o === void 0 ? null : _o,
1556
- props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "order", "source", "leftComponent"]);
1620
+ _l = _a.onResizeStop,
1621
+ onResizeStop = _l === void 0 ? function () {} : _l,
1622
+ _m = _a.onDragEnd,
1623
+ onDragEnd = _m === void 0 ? function () {} : _m,
1624
+ _o = _a.order,
1625
+ order = _o === void 0 ? 1 : _o,
1626
+ _p = _a.source,
1627
+ source = _p === void 0 ? 'app' : _p,
1628
+ _q = _a.leftHeaderComponent,
1629
+ leftHeaderComponent = _q === void 0 ? null : _q,
1630
+ _r = _a.rightHeaderComponent,
1631
+ rightHeaderComponent = _r === void 0 ? null : _r,
1632
+ _s = _a.hasElevation,
1633
+ hasElevation = _s === void 0 ? true : _s,
1634
+ className = _a.className,
1635
+ _t = _a.sx,
1636
+ sx = _t === void 0 ? {} : _t,
1637
+ props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "onResizeStop", "onDragEnd", "order", "source", "leftHeaderComponent", "rightHeaderComponent", "hasElevation", "className", "sx"]);
1557
1638
 
1558
1639
  var zIndex = (source === 'app' ? BASE_Z_INDEX : 1000) + order;
1559
- var elevation = BASE_ELEVATION + order;
1640
+ var elevation = hasElevation ? BASE_ELEVATION + order : 0;
1560
1641
  var nodeRef = React__default["default"].useRef(null);
1561
1642
 
1562
- var _p = __read(React__default["default"].useState({
1643
+ var _u = __read(React__default["default"].useState({
1563
1644
  x: 0,
1564
1645
  y: 0
1565
1646
  }), 2),
1566
- position = _p[0],
1567
- setPosition = _p[1];
1647
+ position = _u[0],
1648
+ setPosition = _u[1];
1568
1649
 
1569
- var _q = __read(React__default["default"].useState(startSize), 2),
1570
- size = _q[0],
1571
- setSize = _q[1];
1650
+ var _v = __read(React__default["default"].useState(startSize), 2),
1651
+ size = _v[0],
1652
+ setSize = _v[1];
1572
1653
 
1654
+ var isRightAligned = startPosition && startPosition.right !== null && startPosition.right !== undefined;
1573
1655
  var onStopDrag = React__default["default"].useCallback(function (_event, position) {
1574
1656
  setPosition(position);
1575
- }, [setPosition]);
1657
+ onDragEnd(position, size);
1658
+ }, [setPosition, onDragEnd, size]);
1576
1659
 
1577
- var _r = __read(React__default["default"].useState(defaultInitialMaxHeight), 2),
1578
- initialMaxHeight = _r[0],
1579
- setInitialMaxHeight = _r[1];
1660
+ var _w = __read(React__default["default"].useState(defaultInitialMaxHeight), 2),
1661
+ initialMaxHeight = _w[0],
1662
+ setInitialMaxHeight = _w[1];
1663
+
1664
+ var _x = __read(React__default["default"].useState(0), 2),
1665
+ initialDragPositionX = _x[0],
1666
+ setInitialDragPositionX = _x[1];
1580
1667
 
1581
1668
  var onStartResize = function onStartResize() {
1582
1669
  setInitialMaxHeight('initial');
1670
+ setInitialDragPositionX(position.x);
1583
1671
  };
1584
1672
 
1585
- var onResize = React__default["default"].useCallback(function (_event, _handle, node) {
1673
+ var onResize = React__default["default"].useCallback(function (_event, _handle, node, delta) {
1586
1674
  var _a = node.getBoundingClientRect(),
1587
1675
  width = _a.width,
1588
1676
  height = _a.height;
@@ -1590,11 +1678,73 @@
1590
1678
  onChangeSize({
1591
1679
  width: width,
1592
1680
  height: height
1593
- });
1594
- }, [onChangeSize]);
1681
+ }); // If dragging the same side as alignment, adjust position
1682
+
1683
+ if (isRightAligned && _handle === 'bottomRight') {
1684
+ var newX = initialDragPositionX + delta.width; // eslint-disable-next-line no-param-reassign
1685
+
1686
+ node.parentNode.style.transform = "translate(" + newX + "px, " + position.y + "px)";
1687
+ } else if (!isRightAligned && _handle === 'bottomLeft') {
1688
+ var newX = initialDragPositionX - delta.width; // eslint-disable-next-line no-param-reassign
1689
+
1690
+ node.parentNode.style.transform = "translate(" + newX + "px, " + position.y + "px)";
1691
+ }
1692
+ }, [onChangeSize, initialDragPositionX, isRightAligned, position]);
1693
+
1694
+ var onStopResize = function onStopResize(_event, direction, node, delta) {
1695
+ if (isRightAligned && direction === 'bottomRight') {
1696
+ setPosition({
1697
+ x: initialDragPositionX + delta.width,
1698
+ y: position.y
1699
+ });
1700
+ } else if (!isRightAligned && direction === 'bottomLeft') {
1701
+ setPosition({
1702
+ x: initialDragPositionX - delta.width,
1703
+ y: position.y
1704
+ });
1705
+ }
1706
+
1707
+ onResizeStop(_event, direction, node, delta);
1708
+ };
1709
+
1595
1710
  useMakeSureContainerStaysInsideWindow(nodeRef, position, setPosition);
1596
1711
  var toolcontainerId = React__default["default"].useRef(Date.now().toString()).current;
1597
- var headerClassName = "header-" + toolcontainerId;
1712
+ var headerClassName = "header-" + (className || toolcontainerId);
1713
+ React__default["default"].useEffect(function () {
1714
+ var _a, _b; // update size when startSize has changed outside the component
1715
+
1716
+
1717
+ if (startSize !== size) {
1718
+ var node = (_a = nodeRef.current) === null || _a === void 0 ? void 0 : _a.firstChild;
1719
+ var boundsNode = bounds === 'parent' ? (_b = nodeRef.current) === null || _b === void 0 ? void 0 : _b.parentNode : document.querySelector(bounds);
1720
+ var startWidth = Number(startSize.width);
1721
+
1722
+ var _c = node.getBoundingClientRect(),
1723
+ currentX = _c.x,
1724
+ currentWidth = _c.width;
1725
+
1726
+ var maxWidth = boundsNode.getBoundingClientRect().width; // TODO: fix screen hugging issues in https://gitlab.com/opengeoweb/opengeoweb/-/issues/2924
1727
+
1728
+ if (isRightAligned) {
1729
+ var newWidth = currentX + currentWidth - startWidth < 0 ? currentX + currentWidth : startWidth;
1730
+
1731
+ var newSize = __assign(__assign({}, startSize), {
1732
+ width: newWidth
1733
+ });
1734
+
1735
+ setSize(newSize);
1736
+ } else {
1737
+ var newWidth = currentX + startWidth >= maxWidth ? maxWidth - currentX : startWidth;
1738
+
1739
+ var newSize = __assign(__assign({}, startSize), {
1740
+ width: newWidth
1741
+ });
1742
+
1743
+ setSize(newSize);
1744
+ }
1745
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
1746
+
1747
+ }, [startSize.width, startSize.height]);
1598
1748
  return isOpen ? /*#__PURE__*/React__default["default"].createElement(DraggableComponent$1, {
1599
1749
  nodeRef: nodeRef,
1600
1750
  bounds: bounds,
@@ -1602,18 +1752,23 @@
1602
1752
  onStop: onStopDrag,
1603
1753
  handle: "." + headerClassName,
1604
1754
  onMouseDown: onMouseDown
1605
- }, /*#__PURE__*/React__default["default"].createElement("div", {
1606
- style: __assign({
1755
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
1756
+ sx: __assign(__assign(__assign({
1607
1757
  position: 'absolute',
1608
1758
  pointerEvents: 'all',
1609
1759
  zIndex: zIndex
1610
- }, startPosition),
1611
- ref: nodeRef
1760
+ }, startPosition), sx), {
1761
+ '&:hover .resizableHandle': {
1762
+ display: 'inline'
1763
+ }
1764
+ }),
1765
+ ref: nodeRef,
1766
+ className: "toolContainerDraggable"
1612
1767
  }, /*#__PURE__*/React__default["default"].createElement(ResizeComponent, __assign({}, props, {
1613
- startPosition: startPosition,
1614
1768
  size: size,
1615
1769
  setSize: setSize,
1616
1770
  onResizeStart: onStartResize,
1771
+ onResizeStop: onStopResize,
1617
1772
  onResize: onResize
1618
1773
  }), /*#__PURE__*/React__default["default"].createElement(ToolContainer, {
1619
1774
  maxHeight: initialMaxHeight,
@@ -1624,7 +1779,9 @@
1624
1779
  isResizable: true,
1625
1780
  elevation: elevation,
1626
1781
  headerClassName: headerClassName,
1627
- leftComponent: leftComponent
1782
+ leftHeaderComponent: leftHeaderComponent,
1783
+ rightHeaderComponent: rightHeaderComponent,
1784
+ className: className
1628
1785
  }, children)))) : null;
1629
1786
  };
1630
1787
 
@@ -2296,7 +2453,7 @@
2296
2453
  setAnchorEl(document.getElementById(buttonTestId));
2297
2454
  }
2298
2455
  }, [isDefaultOpen, buttonTestId]);
2299
- return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
2456
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(CustomTooltip, {
2300
2457
  placement: "top",
2301
2458
  title: tooltipTitle
2302
2459
  }, /*#__PURE__*/React__namespace.createElement(ToolButton, {
@@ -2359,7 +2516,8 @@
2359
2516
  height: '24px',
2360
2517
  width: '24px',
2361
2518
  borderRadius: '5px',
2362
- marginTop: '4px',
2519
+ marginTop: 'auto',
2520
+ marginBottom: 'auto',
2363
2521
  color: function color() {
2364
2522
  if (!isEnabled) {
2365
2523
  return 'geowebColors.buttons.flat.disabled.color';
@@ -2407,7 +2565,8 @@
2407
2565
  _f = _a.isAccessible,
2408
2566
  isAccessible = _f === void 0 ? false : _f,
2409
2567
  sx = _a.sx,
2410
- props = __rest(_a, ["tooltipTitle", "onClick", "isActive", "isEnabled", "icon", "testId", "isAccessible", "sx"]);
2568
+ children = _a.children,
2569
+ props = __rest(_a, ["tooltipTitle", "onClick", "isActive", "isEnabled", "icon", "testId", "isAccessible", "sx", "children"]);
2411
2570
 
2412
2571
  var buttonStyles = makeButtonStyles(isActive, isEnabled, isAccessible);
2413
2572
 
@@ -2415,13 +2574,13 @@
2415
2574
  onClick(event);
2416
2575
  };
2417
2576
 
2418
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
2577
+ return /*#__PURE__*/React__namespace.createElement(CustomTooltip, {
2419
2578
  title: tooltipTitle,
2420
2579
  placement: "top",
2421
2580
  sx: {
2422
2581
  pointerEvents: 'none'
2423
2582
  }
2424
- }, /*#__PURE__*/React__namespace.createElement(material.IconButton, __assign({
2583
+ }, children || /*#__PURE__*/React__namespace.createElement(material.IconButton, __assign({
2425
2584
  size: "small",
2426
2585
  onClick: handleClick,
2427
2586
  "data-testid": testId,
@@ -2451,13 +2610,27 @@
2451
2610
  onClickDelete = _a.onClickDelete,
2452
2611
  _b = _a.isEnabled,
2453
2612
  isEnabled = _b === void 0 ? true : _b;
2454
- return /*#__PURE__*/React__namespace.createElement(ManagerButton, {
2613
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(ManagerButton, {
2614
+ tooltipTitle: tooltipTitle,
2615
+ onClick: onClickDelete,
2616
+ testId: "deleteButtonMedium",
2617
+ isEnabled: isEnabled,
2618
+ icon: /*#__PURE__*/React__namespace.createElement(theme.Delete, null)
2619
+ }, /*#__PURE__*/React__namespace.createElement(material.Button, {
2620
+ className: "deleteBtnMedium",
2621
+ variant: "tertiary",
2622
+ onClick: onClickDelete,
2623
+ startIcon: /*#__PURE__*/React__namespace.createElement(theme.Delete, null),
2624
+ sx: {
2625
+ display: 'none'
2626
+ }
2627
+ }, "Delete")), /*#__PURE__*/React__namespace.createElement(ManagerButton, {
2455
2628
  tooltipTitle: tooltipTitle,
2456
2629
  onClick: onClickDelete,
2457
2630
  icon: /*#__PURE__*/React__namespace.createElement(theme.Delete, null),
2458
2631
  testId: "deleteButton",
2459
2632
  isEnabled: isEnabled
2460
- });
2633
+ }));
2461
2634
  };
2462
2635
 
2463
2636
  /* *
@@ -2479,9 +2652,13 @@
2479
2652
  var EnableButton = function EnableButton(_a) {
2480
2653
  var isEnabled = _a.isEnabled,
2481
2654
  title = _a.title,
2482
- onChangeEnableLayer = _a.onChangeEnableLayer;
2655
+ onChangeEnableLayer = _a.onChangeEnableLayer,
2656
+ className = _a.className,
2657
+ _b = _a.id,
2658
+ id = _b === void 0 ? 'enableButton' : _b;
2483
2659
 
2484
- var onClick = function onClick() {
2660
+ var onClick = function onClick(event) {
2661
+ event.stopPropagation();
2485
2662
  onChangeEnableLayer(!isEnabled);
2486
2663
  };
2487
2664
 
@@ -2509,8 +2686,9 @@
2509
2686
  disableFocusRipple: true,
2510
2687
  tabIndex: -1
2511
2688
  }),
2512
- testId: "enableButton",
2513
- isEnabled: isEnabled
2689
+ testId: id,
2690
+ isEnabled: isEnabled,
2691
+ className: className
2514
2692
  });
2515
2693
  };
2516
2694
 
@@ -2559,11 +2737,6 @@
2559
2737
  return theme.palette.geowebColors.buttons.focusDefault.outline;
2560
2738
  }
2561
2739
  },
2562
- '&:focus&.MuiButton-root': {
2563
- outline: function outline(theme) {
2564
- return theme.palette.geowebColors.buttons.focusDefault.outline;
2565
- }
2566
- },
2567
2740
  '& .MuiSvgIcon-root': {
2568
2741
  transition: 'none',
2569
2742
  fill: function fill(theme) {
@@ -2589,10 +2762,11 @@
2589
2762
  backgroundColor: 'geowebColors.buttons.tool.mouseOver.fill'
2590
2763
  },
2591
2764
  '&:focus&.MuiButton-root': {
2592
- outline: function outline(theme) {
2765
+ border: function border(theme) {
2593
2766
  return theme.palette.geowebColors.buttons.focusDefault.outline;
2594
2767
  },
2595
- backgroundColor: 'geowebColors.buttons.tool.mouseOver.fill'
2768
+ backgroundColor: 'geowebColors.buttons.tool.mouseOver.fill',
2769
+ transition: 'border'
2596
2770
  }
2597
2771
  };
2598
2772
 
@@ -2634,7 +2808,7 @@
2634
2808
  selectOpen = _f[0],
2635
2809
  setSelectOpen = _f[1];
2636
2810
 
2637
- var _g = __read(React__namespace.useState(false), 2),
2811
+ var _g = __read(useControlledTooltip(), 2),
2638
2812
  tooltipOpen = _g[0],
2639
2813
  setTooltipOpen = _g[1];
2640
2814
 
@@ -2649,23 +2823,23 @@
2649
2823
  var onOpen = React__namespace.useCallback(function () {
2650
2824
  setSelectOpen(true);
2651
2825
  setTooltipOpen(false);
2652
- }, []);
2826
+ }, [setTooltipOpen]);
2653
2827
  var onClose = React__namespace.useCallback(function () {
2654
2828
  setSelectOpen(false);
2655
2829
  }, []);
2656
2830
  var onMouseEnter = React__namespace.useCallback(function () {
2657
2831
  if (!selectOpen) setTooltipOpen(true);
2658
- }, [selectOpen]);
2832
+ }, [selectOpen, setTooltipOpen]);
2659
2833
  var onMouseLeave = React__namespace.useCallback(function () {
2660
2834
  setTooltipOpen(false);
2661
- }, []);
2835
+ }, [setTooltipOpen]);
2662
2836
  var onFocus = React__namespace.useCallback(function () {
2663
2837
  setTooltipOpen(true);
2664
- }, []);
2838
+ }, [setTooltipOpen]);
2665
2839
  var onBlur = React__namespace.useCallback(function () {
2666
2840
  setTooltipOpen(false);
2667
- }, []);
2668
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
2841
+ }, [setTooltipOpen]);
2842
+ return /*#__PURE__*/React__namespace.createElement(CustomTooltip, {
2669
2843
  title: tooltip,
2670
2844
  placement: "top",
2671
2845
  open: tooltipOpen,
@@ -2745,6 +2919,43 @@
2745
2919
  };
2746
2920
  }
2747
2921
 
2922
+ var CustomAccordion = function CustomAccordion(_a) {
2923
+ var title = _a.title,
2924
+ _b = _a.defaultExpanded,
2925
+ defaultExpanded = _b === void 0 ? true : _b,
2926
+ _c = _a.disableGutters,
2927
+ disableGutters = _c === void 0 ? true : _c,
2928
+ _d = _a.expandedElevation,
2929
+ expandedElevation = _d === void 0 ? 3 : _d,
2930
+ _e = _a.collapsedElevation,
2931
+ collapsedElevation = _e === void 0 ? 0 : _e,
2932
+ _f = _a.transitionDuration,
2933
+ transitionDuration = _f === void 0 ? 150 : _f,
2934
+ detailsSx = _a.detailsSx,
2935
+ children = _a.children,
2936
+ props = __rest(_a, ["title", "defaultExpanded", "disableGutters", "expandedElevation", "collapsedElevation", "transitionDuration", "detailsSx", "children"]);
2937
+
2938
+ var _g = __read(React__namespace.useState(defaultExpanded), 2),
2939
+ expanded = _g[0],
2940
+ setExpanded = _g[1];
2941
+
2942
+ return /*#__PURE__*/React__namespace.createElement(material.Accordion, __assign({}, props, {
2943
+ defaultExpanded: defaultExpanded,
2944
+ elevation: expanded ? expandedElevation : collapsedElevation,
2945
+ onChange: function onChange(_event, expanded) {
2946
+ return setExpanded(expanded);
2947
+ },
2948
+ disableGutters: disableGutters,
2949
+ TransitionProps: {
2950
+ timeout: transitionDuration
2951
+ }
2952
+ }), /*#__PURE__*/React__namespace.createElement(material.AccordionSummary, {
2953
+ expandIcon: /*#__PURE__*/React__namespace.createElement(theme.ChevronDown, null)
2954
+ }, title), /*#__PURE__*/React__namespace.createElement(material.AccordionDetails, {
2955
+ sx: detailsSx
2956
+ }, children));
2957
+ };
2958
+
2748
2959
  /* *
2749
2960
  * Licensed under the Apache License, Version 2.0 (the "License");
2750
2961
  * you may not use this file except in compliance with the License.
@@ -2807,6 +3018,26 @@
2807
3018
  return '';
2808
3019
  };
2809
3020
 
3021
+ /* *
3022
+ * Licensed under the Apache License, Version 2.0 (the "License");
3023
+ * you may not use this file except in compliance with the License.
3024
+ * You may obtain a copy of the License at
3025
+ *
3026
+ * http://www.apache.org/licenses/LICENSE-2.0
3027
+ *
3028
+ * Unless required by applicable law or agreed to in writing, software
3029
+ * distributed under the License is distributed on an "AS IS" BASIS,
3030
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3031
+ * See the License for the specific language governing permissions and
3032
+ * limitations under the License.
3033
+ *
3034
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3035
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3036
+ * */
3037
+ // TODO: https://gitlab.com/opengeoweb/geoweb-assets/-/issues/2350
3038
+ // temporary check until we get the unit test passing with container queries
3039
+ var IS_JEST = typeof jest !== 'undefined';
3040
+
2810
3041
  exports.AlertBanner = AlertBanner;
2811
3042
  exports.AlertIcon = AlertIcon;
2812
3043
  exports.AppHeader = AppHeader;
@@ -2814,13 +3045,16 @@
2814
3045
  exports.Avatar = Avatar;
2815
3046
  exports.ConfirmationDialog = ConfirmationDialog;
2816
3047
  exports.ConfirmationServiceProvider = ConfirmationServiceProvider;
3048
+ exports.CustomAccordion = CustomAccordion;
2817
3049
  exports.CustomSlider = CustomSlider;
2818
3050
  exports.CustomToggleButton = CustomToggleButton;
3051
+ exports.CustomTooltip = CustomTooltip;
2819
3052
  exports.DEFAULT_ERROR_MESSAGE = DEFAULT_ERROR_MESSAGE;
2820
3053
  exports.Draggable = DraggableComponent$1;
2821
3054
  exports.EnableButton = EnableButton;
2822
3055
  exports.ErrorBoundary = ErrorBoundary;
2823
3056
  exports.HIDDEN_INPUT_HELPER_IS_DRAFT = HIDDEN_INPUT_HELPER_IS_DRAFT;
3057
+ exports.IS_JEST = IS_JEST;
2824
3058
  exports.ManagerButton = ManagerButton;
2825
3059
  exports.ManagerDeleteButton = ManagerDeleteButton;
2826
3060
  exports.Resizable = ResizeComponent;
@@ -2835,7 +3069,9 @@
2835
3069
  exports.UserMenu = UserMenu;
2836
3070
  exports.UserMenuItemCheatSheet = UserMenuItemCheatSheet;
2837
3071
  exports.UserMenuItemTheme = MenuItemTheme;
3072
+ exports.adjustPosition = adjustPosition;
2838
3073
  exports.calculateDialogSizeAndPosition = calculateDialogSizeAndPosition;
3074
+ exports.defaultDelay = defaultDelay;
2839
3075
  exports.getAxiosErrorMessage = getAxiosErrorMessage;
2840
3076
  exports.getAxiosWarningMessage = getAxiosWarningMessage;
2841
3077
  exports.getErrorMessage = getErrorMessage;
@@ -2847,6 +3083,7 @@
2847
3083
  exports.sliderHeaderStyle = sliderHeaderStyle;
2848
3084
  exports.tooltipContainerStyles = tooltipContainerStyles;
2849
3085
  exports.useConfirmationDialog = useConfirmationDialog;
3086
+ exports.useControlledTooltip = useControlledTooltip;
2850
3087
  exports.useDialogActions = useDialogActions;
2851
3088
  exports.useDraftFormHelpers = useDraftFormHelpers;
2852
3089
  exports.useIsMounted = useIsMounted;