funda-ui 4.7.515 → 4.7.525

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.
@@ -1431,6 +1431,12 @@ __webpack_require__.r(__webpack_exports__);
1431
1431
  /* harmony import */ var funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__);
1432
1432
  /* harmony import */ var funda_utils_dist_cjs_inputsCalculation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(954);
1433
1433
  /* harmony import */ var funda_utils_dist_cjs_inputsCalculation__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(funda_utils_dist_cjs_inputsCalculation__WEBPACK_IMPORTED_MODULE_6__);
1434
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1435
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1436
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1437
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1438
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
1439
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
1434
1440
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1435
1441
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1436
1442
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -1444,35 +1450,8 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1444
1450
 
1445
1451
 
1446
1452
 
1447
- var useContainerDimensions = function useContainerDimensions(myRef) {
1448
- var _useState = useState({
1449
- width: 0,
1450
- height: 0
1451
- }),
1452
- _useState2 = _slicedToArray(_useState, 2),
1453
- dimensions = _useState2[0],
1454
- setDimensions = _useState2[1];
1455
- useEffect(function () {
1456
- var getDimensions = function getDimensions() {
1457
- return {
1458
- width: myRef.current.offsetWidth,
1459
- height: myRef.current.offsetHeight
1460
- };
1461
- };
1462
- var handleResize = function handleResize() {
1463
- setDimensions(getDimensions());
1464
- };
1465
- if (myRef.current) {
1466
- setDimensions(getDimensions());
1467
- }
1468
- window.addEventListener("resize", handleResize);
1469
- return function () {
1470
- window.removeEventListener("resize", handleResize);
1471
- };
1472
- }, [myRef]);
1473
- return dimensions;
1474
- };
1475
- var Tooltip = function Tooltip(props) {
1453
+ // Use forwardRef to expose imperative methods
1454
+ var Tooltip = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props, ref) {
1476
1455
  var triggerClassName = props.triggerClassName,
1477
1456
  wrapperClassName = props.wrapperClassName,
1478
1457
  direction = props.direction,
@@ -1483,7 +1462,14 @@ var Tooltip = function Tooltip(props) {
1483
1462
  mouseOutDelay = props.mouseOutDelay,
1484
1463
  content = props.content,
1485
1464
  id = props.id,
1486
- children = props.children;
1465
+ children = props.children,
1466
+ controlled = props.controlled,
1467
+ popupArrowColor = props.popupArrowColor,
1468
+ popupContentStyle = props.popupContentStyle,
1469
+ delayedClose = props.delayedClose,
1470
+ delayedCloseTimeout = props.delayedCloseTimeout,
1471
+ onContentMouseEnter = props.onContentMouseEnter,
1472
+ onContentMouseLeave = props.onContentMouseLeave;
1487
1473
  var POS_OFFSET = Number(offset) || 4;
1488
1474
  var EXCEEDED_SIDE_POS_OFFSET = Number(exceededSidePosOffset) || 15;
1489
1475
  var uniqueID = funda_utils_dist_cjs_useComId__WEBPACK_IMPORTED_MODULE_2___default()();
@@ -1492,33 +1478,85 @@ var Tooltip = function Tooltip(props) {
1492
1478
  var modalRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1493
1479
  var HOVER_DELAY = hoverDelay ? hoverDelay : 200;
1494
1480
  var MOUSE_OUT_DELAY = mouseOutDelay ? mouseOutDelay : HOVER_DELAY;
1481
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
1482
+ _useState2 = _slicedToArray(_useState, 2),
1483
+ hasBeenShown = _useState2[0],
1484
+ setHasBeenShown = _useState2[1];
1495
1485
  var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
1496
1486
  _useState4 = _slicedToArray(_useState3, 2),
1497
- hasBeenShown = _useState4[0],
1498
- setHasBeenShown = _useState4[1];
1499
- var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
1500
- _useState6 = _slicedToArray(_useState5, 2),
1501
- isShow = _useState6[0],
1502
- setIsShow = _useState6[1];
1503
- var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
1487
+ isShow = _useState4[0],
1488
+ setIsShow = _useState4[1];
1489
+ var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
1504
1490
  x: 0,
1505
1491
  y: 0
1506
1492
  }),
1507
- _useState8 = _slicedToArray(_useState7, 2),
1508
- position = _useState8[0],
1509
- setPosition = _useState8[1];
1493
+ _useState6 = _slicedToArray(_useState5, 2),
1494
+ position = _useState6[0],
1495
+ setPosition = _useState6[1];
1496
+ var popupArrowStyle = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {
1497
+ if (typeof popupArrowColor !== 'undefined' && Array.isArray(popupArrowColor) && popupArrowColor.length === 4) {
1498
+ return {
1499
+ '--cus-tooltip-arrow-bg-top': "url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%28".concat(popupArrowColor[0], ",%20").concat(popupArrowColor[1], ",%20").concat(popupArrowColor[2], ",%20").concat(popupArrowColor[3], "%29%22%20transform%3D%22rotate%280%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\") no-repeat"),
1500
+ '--cus-tooltip-arrow-bg-bottom': "url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%28".concat(popupArrowColor[0], ",%20").concat(popupArrowColor[1], ",%20").concat(popupArrowColor[2], ",%20").concat(popupArrowColor[3], "%29%22%20transform%3D%22rotate%28180%2018%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\") no-repeat"),
1501
+ '--cus-tooltip-arrow-bg-left': "url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%28".concat(popupArrowColor[0], ",%20").concat(popupArrowColor[1], ",%20").concat(popupArrowColor[2], ",%20").concat(popupArrowColor[3], "%29%22%20transform%3D%22rotate%28-90%2018%2018%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\") no-repeat"),
1502
+ '--cus-tooltip-arrow-bg-right': "url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%28".concat(popupArrowColor[0], ",%20").concat(popupArrowColor[1], ",%20").concat(popupArrowColor[2], ",%20").concat(popupArrowColor[3], "%29%22%20transform%3D%22rotate%2890%206%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\") no-repeat")
1503
+ };
1504
+ }
1505
+ return undefined;
1506
+ }, [popupArrowColor]);
1507
+
1508
+ // Expose show/hide methods to parent via ref
1509
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle)(ref, function () {
1510
+ return {
1511
+ show: function show() {
1512
+ // Find the trigger element
1513
+ var triggerEl = rootRef.current;
1514
+ if (triggerEl) {
1515
+ // Calculate position (copy from handleMouseEnter)
1516
+ var _getAbsolutePositionO = (0,funda_utils_dist_cjs_getElementProperty__WEBPACK_IMPORTED_MODULE_4__.getAbsolutePositionOfStage)(triggerEl),
1517
+ x = _getAbsolutePositionO.x,
1518
+ y = _getAbsolutePositionO.y,
1519
+ width = _getAbsolutePositionO.width,
1520
+ height = _getAbsolutePositionO.height;
1521
+ var pos = triggerEl.dataset.microtipPosition;
1522
+ if (typeof pos === 'undefined') pos = 'top';
1523
+ if (pos.indexOf('top') >= 0) {
1524
+ setPosition({
1525
+ x: x + width / 2 + 'px',
1526
+ y: y - height - POS_OFFSET + 'px'
1527
+ });
1528
+ }
1529
+ if (pos.indexOf('bottom') >= 0) {
1530
+ setPosition({
1531
+ x: x + width / 2 + 'px',
1532
+ y: y + height + POS_OFFSET + 'px'
1533
+ });
1534
+ }
1535
+ }
1536
+ setIsShow(true);
1537
+ },
1538
+ hide: function hide() {
1539
+ hideTip();
1540
+ }
1541
+ };
1542
+ }, [POS_OFFSET]);
1510
1543
 
1511
1544
  // click outside
1512
1545
  funda_utils_dist_cjs_useClickOutside__WEBPACK_IMPORTED_MODULE_3___default()({
1513
- enabled: isShow && rootRef.current,
1546
+ enabled: isShow && rootRef.current && !controlled,
1547
+ // Only auto-close if not controlled
1514
1548
  isOutside: function isOutside(event) {
1549
+ // Prevent closing when clicking inside the tooltip wrapper
1550
+ if (modalRef.current && modalRef.current.contains(event.target)) {
1551
+ return false; // Click is inside the tooltip wrapper, do not close
1552
+ }
1515
1553
  // close dropdown when other dropdown is opened
1516
1554
  return rootRef.current !== event.target && !rootRef.current.contains(event.target);
1517
1555
  },
1518
1556
  handle: function handle(event) {
1519
1557
  hideTip();
1520
1558
  }
1521
- }, [isShow, rootRef]);
1559
+ }, [isShow, rootRef, controlled]);
1522
1560
 
1523
1561
  //timer hover
1524
1562
  var timeoutHoverIdRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
@@ -1552,7 +1590,7 @@ var Tooltip = function Tooltip(props) {
1552
1590
  //------------------
1553
1591
  var _modalRef = modalRef.current;
1554
1592
  if (_modalRef === null) return;
1555
- var _modalContent = _modalRef.querySelector('.tooltip__content');
1593
+ var _modalContent = _modalRef.querySelector('.cus-tooltip__content');
1556
1594
  var _modalBox = _modalContent.getBoundingClientRect();
1557
1595
  if (typeof _modalContent.dataset.offset === 'undefined' && _modalBox.left > 0) {
1558
1596
  // Adjust the coordinates due to height
@@ -1590,6 +1628,7 @@ var Tooltip = function Tooltip(props) {
1590
1628
  };
1591
1629
 
1592
1630
  function handleMouseEnter(e) {
1631
+ if (controlled) return; // Do nothing if controlled
1593
1632
  stopTimerHover();
1594
1633
  stopTimerMouseout();
1595
1634
  startTimerHover();
@@ -1600,11 +1639,11 @@ var Tooltip = function Tooltip(props) {
1600
1639
 
1601
1640
  // console.log(getAbsolutePositionOfStage(_triggerRef));
1602
1641
  if (_triggerRef !== null) {
1603
- var _getAbsolutePositionO = (0,funda_utils_dist_cjs_getElementProperty__WEBPACK_IMPORTED_MODULE_4__.getAbsolutePositionOfStage)(_triggerRef),
1604
- x = _getAbsolutePositionO.x,
1605
- y = _getAbsolutePositionO.y,
1606
- width = _getAbsolutePositionO.width,
1607
- height = _getAbsolutePositionO.height;
1642
+ var _getAbsolutePositionO2 = (0,funda_utils_dist_cjs_getElementProperty__WEBPACK_IMPORTED_MODULE_4__.getAbsolutePositionOfStage)(_triggerRef),
1643
+ x = _getAbsolutePositionO2.x,
1644
+ y = _getAbsolutePositionO2.y,
1645
+ width = _getAbsolutePositionO2.width,
1646
+ height = _getAbsolutePositionO2.height;
1608
1647
  var pos = _triggerRef.dataset.microtipPosition;
1609
1648
  if (typeof pos === 'undefined') pos = 'top';
1610
1649
 
@@ -1628,6 +1667,7 @@ var Tooltip = function Tooltip(props) {
1628
1667
  }
1629
1668
  }
1630
1669
  function handleMouseLeave() {
1670
+ if (controlled) return; // Do nothing if controlled
1631
1671
  stopTimerHover();
1632
1672
  stopTimerMouseout();
1633
1673
  startTimerMouseout();
@@ -1635,10 +1675,59 @@ var Tooltip = function Tooltip(props) {
1635
1675
  function hideTip() {
1636
1676
  setIsShow(false);
1637
1677
  }
1678
+
1679
+ // Timer for delayed close
1680
+ var delayedCloseTimerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1681
+ var DELAYED_CLOSE_TIMEOUT = typeof delayedCloseTimeout === 'number' ? delayedCloseTimeout : 1500;
1682
+
1683
+ // Handler for mouse leave on trigger (when delayedClose is enabled)
1684
+ function handleTriggerMouseLeave() {
1685
+ if (controlled) return;
1686
+ if (delayedClose) {
1687
+ // Start delayed close timer
1688
+ if (delayedCloseTimerRef.current) clearTimeout(delayedCloseTimerRef.current);
1689
+ delayedCloseTimerRef.current = setTimeout(function () {
1690
+ hideTip();
1691
+ }, DELAYED_CLOSE_TIMEOUT);
1692
+ } else {
1693
+ stopTimerHover();
1694
+ stopTimerMouseout();
1695
+ startTimerMouseout();
1696
+ }
1697
+ }
1698
+
1699
+ // Handler for mouse enter on wrapper (cancel delayed close)
1700
+ function handleWrapperMouseEnter(event) {
1701
+ if (controlled) return;
1702
+ if (delayedClose && delayedCloseTimerRef.current) {
1703
+ clearTimeout(delayedCloseTimerRef.current);
1704
+ delayedCloseTimerRef.current = null;
1705
+ }
1706
+ // Call user-provided handler if present
1707
+ if (onContentMouseEnter && event) {
1708
+ onContentMouseEnter(event);
1709
+ }
1710
+ }
1711
+
1712
+ // Handler for mouse leave on wrapper (restart delayed close timer)
1713
+ function handleWrapperMouseLeave(event) {
1714
+ if (controlled) return;
1715
+ if (delayedClose) {
1716
+ if (delayedCloseTimerRef.current) clearTimeout(delayedCloseTimerRef.current);
1717
+ delayedCloseTimerRef.current = setTimeout(function () {
1718
+ hideTip();
1719
+ }, DELAYED_CLOSE_TIMEOUT);
1720
+ }
1721
+ // Call user-provided handler if present
1722
+ if (onContentMouseLeave && event) {
1723
+ onContentMouseLeave(event);
1724
+ }
1725
+ }
1638
1726
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
1639
1727
  return function () {
1640
1728
  stopTimerHover();
1641
1729
  stopTimerMouseout();
1730
+ if (delayedCloseTimerRef.current) clearTimeout(delayedCloseTimerRef.current);
1642
1731
  };
1643
1732
  }, []);
1644
1733
 
@@ -1648,31 +1737,38 @@ var Tooltip = function Tooltip(props) {
1648
1737
  });
1649
1738
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1650
1739
  ref: rootRef,
1651
- "data-overlay-id": "tooltip__wrapper-".concat(idRes),
1652
- className: (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.combinedCls)('tooltip__trigger', (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.clsWrite)(triggerClassName, 'd-inline-block')),
1740
+ "data-overlay-id": "cus-tooltip__wrapper-".concat(idRes),
1741
+ className: (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.combinedCls)('cus-tooltip__trigger', (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.clsWrite)(triggerClassName, 'd-inline-block')),
1653
1742
  "data-microtip-position": direction || 'top',
1654
1743
  "data-microtip-size": size || 'auto',
1655
1744
  onMouseEnter: handleMouseEnter,
1656
- onMouseLeave: handleMouseLeave
1745
+ onMouseLeave: delayedClose ? handleTriggerMouseLeave : handleMouseLeave
1657
1746
  }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((funda_root_portal__WEBPACK_IMPORTED_MODULE_1___default()), {
1658
1747
  show: isShow,
1659
1748
  containerClassName: "Tooltip"
1660
1749
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1661
1750
  ref: modalRef,
1662
- id: "tooltip__wrapper-".concat(idRes),
1663
- className: (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.combinedCls)('tooltip__wrapper', wrapperClassName, 'active'),
1751
+ id: "cus-tooltip__wrapper-".concat(idRes),
1752
+ className: (0,funda_utils_dist_cjs_cls__WEBPACK_IMPORTED_MODULE_5__.combinedCls)('cus-tooltip__wrapper', wrapperClassName, 'active'),
1664
1753
  role: "tooltip",
1665
1754
  "data-microtip-position": direction || 'top',
1666
1755
  "data-microtip-size": size || 'auto',
1667
- style: {
1756
+ style: _objectSpread({
1668
1757
  left: position.x,
1669
1758
  top: position.y,
1670
1759
  display: 'none'
1671
- }
1760
+ }, popupArrowStyle),
1761
+ onMouseEnter: delayedClose || onContentMouseEnter ? function (e) {
1762
+ return handleWrapperMouseEnter(e);
1763
+ } : undefined,
1764
+ onMouseLeave: delayedClose || onContentMouseLeave ? function (e) {
1765
+ return handleWrapperMouseLeave(e);
1766
+ } : undefined
1672
1767
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1673
- className: "tooltip__content"
1768
+ className: "cus-tooltip__content",
1769
+ style: _objectSpread({}, popupContentStyle)
1674
1770
  }, content))));
1675
- };
1771
+ });
1676
1772
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Tooltip);
1677
1773
  })();
1678
1774
 
@@ -1,20 +1,20 @@
1
1
  /* ======================================================
2
2
  <!-- Cascading Select -->
3
3
  /* ====================================================== */
4
- .casc-select__wrapper {
5
- --casc-select-arrow-fill: #a5a5a5;
6
- --casc-select-result-arrow-fill: #a5a5a5;
7
- --casc-select-result-font-size: 1rem;
8
- --casc-select-result-padding-x: 0.75rem;
9
- --casc-select-result-padding-y: 0.375rem;
10
- }
11
- .casc-select__wrapper .casc-select__result {
4
+ .casc-menu__wrapper {
5
+ --casc-menu-arrow-fill: #a5a5a5;
6
+ --casc-menu-result-arrow-fill: #a5a5a5;
7
+ --casc-menu-result-font-size: 1rem;
8
+ --casc-menu-result-padding-x: 0.75rem;
9
+ --casc-menu-result-padding-y: 0.375rem;
10
+ }
11
+ .casc-menu__wrapper .casc-menu__result {
12
12
  position: absolute;
13
13
  left: auto;
14
14
  z-index: 1;
15
15
  top: 0;
16
- padding: var(--casc-select-result-padding-y) var(--casc-select-result-padding-x);
17
- font-size: var(--casc-select-result-font-size);
16
+ padding: var(--casc-menu-result-padding-y) var(--casc-menu-result-padding-x);
17
+ font-size: var(--casc-menu-result-font-size);
18
18
  font-weight: 400;
19
19
  line-height: 1.5;
20
20
  color: inherit;
@@ -26,20 +26,20 @@
26
26
  /* required */
27
27
  display: flex;
28
28
  }
29
- .casc-select__wrapper .casc-select__result div {
29
+ .casc-menu__wrapper .casc-menu__result div {
30
30
  /* required */
31
31
  display: flex;
32
32
  }
33
- .casc-select__wrapper .casc-select__result span {
33
+ .casc-menu__wrapper .casc-menu__result span {
34
34
  padding: 3px;
35
35
  }
36
- .casc-select__wrapper .casc-select__result svg {
36
+ .casc-menu__wrapper .casc-menu__result svg {
37
37
  margin: 0 0.3rem;
38
38
  }
39
- .casc-select__wrapper .casc-select__result svg path {
40
- fill: var(--casc-select-result-arrow-fill);
39
+ .casc-menu__wrapper .casc-menu__result svg path {
40
+ fill: var(--casc-menu-result-arrow-fill);
41
41
  }
42
- .casc-select__wrapper .casc-select__closemask {
42
+ .casc-menu__wrapper .casc-menu__closemask {
43
43
  position: absolute;
44
44
  z-index: 1;
45
45
  top: 0;
@@ -49,77 +49,81 @@
49
49
  background: rgba(0, 0, 0, 0);
50
50
  user-select: none;
51
51
  }
52
- .casc-select__wrapper .casc-select__trigger {
52
+ .casc-menu__wrapper .casc-menu__trigger {
53
53
  position: relative;
54
54
  z-index: 0;
55
55
  }
56
- .casc-select__wrapper .casc-select__val {
56
+ .casc-menu__wrapper .casc-menu__val {
57
57
  position: relative;
58
58
  }
59
- .casc-select__wrapper .casc-select__val:not(.inputable) input {
59
+ .casc-menu__wrapper .casc-menu__val:not(.inputable) input {
60
60
  cursor: pointer;
61
61
  color: transparent !important;
62
62
  }
63
- .casc-select__wrapper .casc-select__val:not(.inputable) input:focus {
63
+ .casc-menu__wrapper .casc-menu__val:not(.inputable) input:focus {
64
64
  color: transparent !important;
65
65
  }
66
- .casc-select__wrapper .casc-select__val .arrow {
66
+ .casc-menu__wrapper .casc-menu__val .arrow {
67
67
  position: absolute;
68
68
  top: 50%;
69
69
  transform: translateY(-50%);
70
70
  right: 0.5rem;
71
71
  }
72
- .casc-select__wrapper .casc-select__val .arrow svg .arrow-fill-g {
73
- fill: var(--casc-select-arrow-fill);
72
+ .casc-menu__wrapper .casc-menu__val .arrow svg .arrow-fill-g {
73
+ fill: var(--casc-menu-arrow-fill);
74
74
  }
75
75
 
76
76
  /*------ List ------*/
77
- .casc-select__items-wrapper {
78
- --casc-select-opt-font-size: 0.875rem;
79
- --casc-select-opt-padding-x: .4rem;
80
- --casc-select-opt-padding-y: .3rem;
81
- --casc-select-opt-header-border-color: rgba(1, 1, 1, .2);
82
- --casc-select-opt-header-text-color: #999;
83
- --casc-select-opt-hover-bg: #f7f7f7;
84
- --casc-select-opt-active-bg: #eeeeee;
85
- --casc-select-items-box-shadow: 0 5px 15px 5px rgba(80, 102, 224, 0.08);
86
- --casc-select-items-bg: #fff;
87
- --casc-select-items-color: inherit;
88
- --casc-select-items-border-color: rgba(0, 0, 0, .1);
89
- --casc-select-items-li-border-color: #eee;
90
- --casc-select-loader-color: #000000;
91
- --casc-select-clean-btn-color: #b5b5b5;
92
- --casc-select-searchbox-border-color: #ddd;
93
- box-shadow: var(--casc-select-items-box-shadow);
77
+ .casc-menu__items-wrapper {
78
+ --casc-menu-scrollbar-color: rgba(0, 0, 0, 0.2);
79
+ --casc-menu-scrollbar-track: rgba(0, 0, 0, 0);
80
+ --casc-menu-scrollbar-h: 3px;
81
+ --casc-menu-scrollbar-w: 3px;
82
+ --casc-menu-per-col-maxheight: 300px;
83
+ --casc-menu-opt-font-size: 0.875rem;
84
+ --casc-menu-opt-padding-x: .4rem;
85
+ --casc-menu-opt-padding-y: .3rem;
86
+ --casc-menu-opt-header-border-color: rgba(1, 1, 1, .2);
87
+ --casc-menu-opt-header-text-color: #999;
88
+ --casc-menu-opt-hover-bg: #f7f7f7;
89
+ --casc-menu-opt-active-bg: #eeeeee;
90
+ --casc-menu-items-box-shadow: 0 5px 15px 5px rgba(80, 102, 224, 0.08);
91
+ --casc-menu-items-bg: #fff;
92
+ --casc-menu-items-color: inherit;
93
+ --casc-menu-items-border-color: rgba(0, 0, 0, .1);
94
+ --casc-menu-items-li-border-color: #eee;
95
+ --casc-menu-loader-color: #000000;
96
+ --casc-menu-clean-btn-color: #b5b5b5;
97
+ --casc-menu-searchbox-border-color: #ddd;
98
+ box-shadow: var(--casc-menu-items-box-shadow);
94
99
  position: absolute;
95
100
  left: auto;
96
- max-height: 300px;
97
- border: 1px solid var(--casc-select-items-border-color);
98
- background: var(--casc-select-items-bg);
101
+ border: 1px solid var(--casc-menu-items-border-color);
102
+ background: var(--casc-menu-items-bg);
99
103
  padding: 10px;
100
- overflow-y: auto;
101
104
  box-sizing: border-box;
102
105
  top: 2.3rem;
103
106
  border-radius: 5px;
104
107
  width: max-content;
105
108
  /* required -> the content will not wrap at all even if it causes overflows*/
106
- color: var(--casc-select-items-color);
109
+ color: var(--casc-menu-items-color);
107
110
  display: none;
108
111
  z-index: 1055; /* --bs-modal-zindex */
109
112
  /* each item */
113
+ /* Column */
110
114
  /* Searchbox */
111
115
  /* Options */
112
116
  }
113
- .casc-select__items-wrapper.active {
117
+ .casc-menu__items-wrapper.active {
114
118
  display: block !important;
115
119
  }
116
- .casc-select__items-wrapper ul,
117
- .casc-select__items-wrapper li {
120
+ .casc-menu__items-wrapper ul,
121
+ .casc-menu__items-wrapper li {
118
122
  list-style: none;
119
123
  margin: 0;
120
124
  padding: 0;
121
125
  }
122
- .casc-select__items-wrapper .casc-select__items-loader {
126
+ .casc-menu__items-wrapper .casc-menu__items-loader {
123
127
  position: absolute;
124
128
  pointer-events: none;
125
129
  left: 0;
@@ -131,98 +135,111 @@
131
135
  text-align: center;
132
136
  transform-origin: center;
133
137
  transform: translate(2px, 5px) rotate(0);
134
- animation: 1s linear infinite casc-select__spinner;
138
+ animation: 1s linear infinite casc-menu__spinner;
135
139
  }
136
- .casc-select__items-wrapper .casc-select__items-loader svg {
140
+ .casc-menu__items-wrapper .casc-menu__items-loader svg {
137
141
  vertical-align: top;
138
142
  }
139
- .casc-select__items-wrapper .casc-select__items-loader svg path {
140
- fill: var(--casc-select-loader-color);
143
+ .casc-menu__items-wrapper .casc-menu__items-loader svg path {
144
+ fill: var(--casc-menu-loader-color);
141
145
  }
142
- @keyframes casc-select__spinner {
146
+ @keyframes casc-menu__spinner {
143
147
  to {
144
148
  transform: translate(2px, 5px) rotate(-360deg);
145
149
  }
146
150
  }
147
- .casc-select__items-wrapper .casc-select__close svg {
151
+ .casc-menu__items-wrapper .casc-menu__close svg {
148
152
  opacity: 0.4;
149
153
  }
150
- .casc-select__items-wrapper .casc-select__close:hover svg {
154
+ .casc-menu__items-wrapper .casc-menu__close:hover svg {
151
155
  transition: 0.2s ease-out;
152
156
  opacity: 0.7;
153
157
  }
154
- .casc-select__items-wrapper ul {
158
+ .casc-menu__items-wrapper ul {
155
159
  transition: 0.2s ease-out;
156
160
  min-width: 8px;
157
161
  min-height: 9px;
158
162
  }
159
- .casc-select__items-wrapper ul > li {
163
+ .casc-menu__items-wrapper ul > li {
160
164
  position: relative;
161
165
  cursor: pointer;
162
166
  float: left;
163
167
  padding: 0 10px;
164
168
  margin-right: 15px;
165
- border-right: 1px dotted var(--casc-select-items-li-border-color);
169
+ border-right: 1px dotted var(--casc-menu-items-li-border-color);
166
170
  transition: 0.2s ease-out;
167
171
  }
168
- .casc-select__items-wrapper ul > li.hide-col {
172
+ .casc-menu__items-wrapper ul > li.hide-col {
169
173
  display: none;
170
174
  }
171
- .casc-select__items-wrapper ul > li:last-child {
175
+ .casc-menu__items-wrapper ul > li:last-child {
172
176
  margin-right: 0;
173
177
  border-right: none;
174
178
  }
175
- .casc-select__items-wrapper .casc-select__items-col-searchbox input {
176
- border: 1px solid var(--casc-select-searchbox-border-color);
179
+ .casc-menu__items-wrapper .casc-menu__items-col {
180
+ max-height: var(--casc-menu-per-col-maxheight);
181
+ overflow-y: auto;
182
+ }
183
+ .casc-menu__items-wrapper .casc-menu__items-col::-webkit-scrollbar {
184
+ width: var(--casc-menu-scrollbar-w);
185
+ }
186
+ .casc-menu__items-wrapper .casc-menu__items-col::-webkit-scrollbar-thumb {
187
+ background: var(--casc-menu-scrollbar-color);
188
+ }
189
+ .casc-menu__items-wrapper .casc-menu__items-col::-webkit-scrollbar-track {
190
+ background: var(--casc-menu-scrollbar-track);
191
+ }
192
+ .casc-menu__items-wrapper .casc-menu__items-col-searchbox input {
193
+ border: 1px solid var(--casc-menu-searchbox-border-color);
177
194
  border-radius: 0.15rem;
178
195
  width: 100%;
179
196
  background: transparent;
180
197
  font-size: 0.75rem;
181
198
  }
182
- .casc-select__items-wrapper .casc-select__opt {
183
- padding: var(--casc-select-opt-padding-y) var(--casc-select-opt-padding-x);
184
- font-size: var(--casc-select-opt-font-size);
199
+ .casc-menu__items-wrapper .casc-menu__opt {
200
+ padding: var(--casc-menu-opt-padding-y) var(--casc-menu-opt-padding-x);
201
+ font-size: var(--casc-menu-opt-font-size);
185
202
  border-radius: 2px;
186
203
  }
187
- .casc-select__items-wrapper .casc-select__opt:hover {
188
- background: var(--casc-select-opt-hover-bg);
204
+ .casc-menu__items-wrapper .casc-menu__opt:hover {
205
+ background: var(--casc-menu-opt-hover-bg);
189
206
  }
190
- .casc-select__items-wrapper .casc-select__opt.active {
191
- background: var(--casc-select-opt-active-bg);
207
+ .casc-menu__items-wrapper .casc-menu__opt.active {
208
+ background: var(--casc-menu-opt-active-bg);
192
209
  }
193
- .casc-select__items-wrapper .casc-select__opt-header {
194
- padding: var(--casc-select-opt-padding-y) var(--casc-select-opt-padding-x);
195
- font-size: var(--casc-select-opt-font-size);
196
- border-bottom: 1px dotted var(--casc-select-opt-header-border-color);
210
+ .casc-menu__items-wrapper .casc-menu__opt-header {
211
+ padding: var(--casc-menu-opt-padding-y) var(--casc-menu-opt-padding-x);
212
+ font-size: var(--casc-menu-opt-font-size);
213
+ border-bottom: 1px dotted var(--casc-menu-opt-header-border-color);
197
214
  border-radius: 2px;
198
215
  position: sticky;
199
- top: calc(var(--casc-select-opt-font-size) * -1);
200
- background: var(--casc-select-items-bg);
201
- color: var(--casc-select-opt-header-text-color);
216
+ top: 0;
217
+ background: var(--casc-menu-items-bg);
218
+ color: var(--casc-menu-opt-header-text-color);
202
219
  display: flex;
203
220
  align-items: center;
204
221
  }
205
- .casc-select__items-wrapper .casc-select__opt-header > span {
222
+ .casc-menu__items-wrapper .casc-menu__opt-header > span {
206
223
  cursor: default;
207
224
  }
208
- .casc-select__items-wrapper .casc-select__opt-header:hover {
209
- background: var(--casc-select-opt-hover-bg);
225
+ .casc-menu__items-wrapper .casc-menu__opt-header:hover {
226
+ background: var(--casc-menu-opt-hover-bg);
210
227
  }
211
- .casc-select__items-wrapper .casc-select__opt-header.active {
212
- background: var(--casc-select-opt-active-bg);
228
+ .casc-menu__items-wrapper .casc-menu__opt-header.active {
229
+ background: var(--casc-menu-opt-active-bg);
213
230
  }
214
- .casc-select__items-wrapper .casc-select__opt-header .casc-select__opt-header__clean {
231
+ .casc-menu__items-wrapper .casc-menu__opt-header .casc-menu__opt-header__clean {
215
232
  display: inline-block;
216
233
  margin-left: 0.2rem;
217
234
  padding: 0.1rem;
218
235
  }
219
- .casc-select__items-wrapper .casc-select__opt-header .casc-select__opt-header__clean:hover {
236
+ .casc-menu__items-wrapper .casc-menu__opt-header .casc-menu__opt-header__clean:hover {
220
237
  transform: scale(1.1);
221
238
  }
222
- .casc-select__items-wrapper .casc-select__opt-header .casc-select__opt-header__clean svg {
223
- border: 1px var(--casc-select-clean-btn-color) solid;
239
+ .casc-menu__items-wrapper .casc-menu__opt-header .casc-menu__opt-header__clean svg {
240
+ border: 1px var(--casc-menu-clean-btn-color) solid;
224
241
  border-radius: 50%;
225
242
  }
226
- .casc-select__items-wrapper .casc-select__opt-header .casc-select__opt-header__clean svg path {
227
- fill: var(--casc-select-clean-btn-color);
243
+ .casc-menu__items-wrapper .casc-menu__opt-header .casc-menu__opt-header__clean svg path {
244
+ fill: var(--casc-menu-clean-btn-color);
228
245
  }