bianic-ui 1.9.0-beta.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/cjs/index.js +289 -59
  2. package/dist/cjs/lib.css +1 -1
  3. package/dist/cjs/types/components/Forms/Dropdown/DropdownContainer.d.ts +14 -0
  4. package/dist/cjs/types/components/Forms/Dropdown/DropdownItem.d.ts +20 -0
  5. package/dist/cjs/types/components/Forms/Dropdown/Example/BasicExample.d.ts +6 -0
  6. package/dist/cjs/types/components/Forms/Dropdown/Example/CheckMenuExample.d.ts +6 -0
  7. package/dist/cjs/types/components/Forms/Dropdown/Example/CheckboxFilterExample.d.ts +6 -0
  8. package/dist/cjs/types/components/Forms/Dropdown/Example/NestedExample.d.ts +6 -0
  9. package/dist/cjs/types/components/Forms/Dropdown/Example/WithValueExample.d.ts +6 -0
  10. package/dist/cjs/types/components/Forms/Dropdown/config.d.ts +9 -0
  11. package/dist/cjs/types/components/Forms/Dropdown/index.d.ts +3 -0
  12. package/dist/cjs/types/components/Forms/LiveSearch/Example/LiveSearchCustomDropdown.d.ts +3 -0
  13. package/dist/cjs/types/components/Forms/LiveSearch/PropsInterface.d.ts +4 -0
  14. package/dist/cjs/types/components/Forms/LiveSearch/index.d.ts +5 -1
  15. package/dist/cjs/types/components/Forms/TextInput/index.d.ts +1 -0
  16. package/dist/cjs/types/components/Forms/index.d.ts +1 -0
  17. package/dist/cjs/types/components/Menu/MenuContainer.d.ts +4 -8
  18. package/dist/cjs/types/components/Menu/MenuItem.d.ts +2 -1
  19. package/dist/cjs/types/components/Progress/Bar/index.d.ts +3 -1
  20. package/dist/cjs/types/components/Window/index.d.ts +3 -4
  21. package/dist/cjs/types/components/index.d.ts +2 -1
  22. package/dist/cjs/types/stories/Button/Button.stories.d.ts +1 -1
  23. package/dist/cjs/types/stories/{Menu/MenuContainer.stories.d.ts → Form/Dropdown/BasicExample.stories.d.ts} +3 -3
  24. package/dist/cjs/types/stories/Form/Dropdown/DropdownContainer.stories.d.ts +41 -0
  25. package/dist/cjs/types/stories/Form/Dropdown/DropdownItem.stories.d.ts +26 -0
  26. package/dist/cjs/types/stories/Form/Dropdown/NestedExample.stories.d.ts +13 -0
  27. package/dist/cjs/types/stories/Form/Dropdown/SampleTest/CheckMenuExample.stories.d.ts +12 -0
  28. package/dist/cjs/types/stories/Form/Dropdown/SampleTest/CheckboxExample.stories.d.ts +12 -0
  29. package/dist/cjs/types/stories/Form/Dropdown/WithValueExample.stories.d.ts +13 -0
  30. package/dist/cjs/types/stories/Form/LiveSearch/Livesearch.stories.d.ts +38 -0
  31. package/dist/cjs/types/stories/Form/LiveSearch/LivesearchCustomDropdownExample.stories.d.ts +12 -0
  32. package/dist/cjs/types/stories/Form/LiveSearch/{LiveSearch.stories.d.ts → LivesearchOld.stories.d.ts} +1 -4
  33. package/dist/cjs/types/stories/Form/SelectInput/SelectInput.stories.d.ts +0 -1
  34. package/dist/cjs/types/stories/Progress/Bar/ProgressBar.stories.d.ts +2 -0
  35. package/dist/cjs/types/stories/Window/Window.stories.d.ts +2 -1
  36. package/dist/esm/index.js +288 -61
  37. package/dist/esm/lib.css +1 -1
  38. package/dist/esm/types/components/Forms/Dropdown/DropdownContainer.d.ts +14 -0
  39. package/dist/esm/types/components/Forms/Dropdown/DropdownItem.d.ts +20 -0
  40. package/dist/esm/types/components/Forms/Dropdown/Example/BasicExample.d.ts +6 -0
  41. package/dist/esm/types/components/Forms/Dropdown/Example/CheckMenuExample.d.ts +6 -0
  42. package/dist/esm/types/components/Forms/Dropdown/Example/CheckboxFilterExample.d.ts +6 -0
  43. package/dist/esm/types/components/Forms/Dropdown/Example/NestedExample.d.ts +6 -0
  44. package/dist/esm/types/components/Forms/Dropdown/Example/WithValueExample.d.ts +6 -0
  45. package/dist/esm/types/components/Forms/Dropdown/config.d.ts +9 -0
  46. package/dist/esm/types/components/Forms/Dropdown/index.d.ts +3 -0
  47. package/dist/esm/types/components/Forms/LiveSearch/Example/LiveSearchCustomDropdown.d.ts +3 -0
  48. package/dist/esm/types/components/Forms/LiveSearch/PropsInterface.d.ts +4 -0
  49. package/dist/esm/types/components/Forms/LiveSearch/index.d.ts +5 -1
  50. package/dist/esm/types/components/Forms/TextInput/index.d.ts +1 -0
  51. package/dist/esm/types/components/Forms/index.d.ts +1 -0
  52. package/dist/esm/types/components/Menu/MenuContainer.d.ts +4 -8
  53. package/dist/esm/types/components/Menu/MenuItem.d.ts +2 -1
  54. package/dist/esm/types/components/Progress/Bar/index.d.ts +3 -1
  55. package/dist/esm/types/components/Window/index.d.ts +3 -4
  56. package/dist/esm/types/components/index.d.ts +2 -1
  57. package/dist/esm/types/stories/Button/Button.stories.d.ts +1 -1
  58. package/dist/esm/types/stories/{Menu/MenuContainer.stories.d.ts → Form/Dropdown/BasicExample.stories.d.ts} +3 -3
  59. package/dist/esm/types/stories/Form/Dropdown/DropdownContainer.stories.d.ts +41 -0
  60. package/dist/esm/types/stories/Form/Dropdown/DropdownItem.stories.d.ts +26 -0
  61. package/dist/esm/types/stories/Form/Dropdown/NestedExample.stories.d.ts +13 -0
  62. package/dist/esm/types/stories/Form/Dropdown/SampleTest/CheckMenuExample.stories.d.ts +12 -0
  63. package/dist/esm/types/stories/Form/Dropdown/SampleTest/CheckboxExample.stories.d.ts +12 -0
  64. package/dist/esm/types/stories/Form/Dropdown/WithValueExample.stories.d.ts +13 -0
  65. package/dist/esm/types/stories/Form/LiveSearch/Livesearch.stories.d.ts +38 -0
  66. package/dist/esm/types/stories/Form/LiveSearch/LivesearchCustomDropdownExample.stories.d.ts +12 -0
  67. package/dist/esm/types/stories/Form/LiveSearch/{LiveSearch.stories.d.ts → LivesearchOld.stories.d.ts} +1 -4
  68. package/dist/esm/types/stories/Form/SelectInput/SelectInput.stories.d.ts +0 -1
  69. package/dist/esm/types/stories/Progress/Bar/ProgressBar.stories.d.ts +2 -0
  70. package/dist/esm/types/stories/Window/Window.stories.d.ts +2 -1
  71. package/dist/index.d.ts +54 -12
  72. package/package.json +5 -6
  73. package/src/style/scrollbar.css +9 -1
package/dist/cjs/index.js CHANGED
@@ -90,6 +90,8 @@ function TbCircleCheckFilled (props) {
90
90
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"currentColor"},"child":[{"tag":"path","attr":{"d":"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z"},"child":[]}]})(props);
91
91
  }function TbAlertTriangle (props) {
92
92
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M12 9v4"},"child":[]},{"tag":"path","attr":{"d":"M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z"},"child":[]},{"tag":"path","attr":{"d":"M12 16h.01"},"child":[]}]})(props);
93
+ }function TbCalendar (props) {
94
+ return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z"},"child":[]},{"tag":"path","attr":{"d":"M16 3v4"},"child":[]},{"tag":"path","attr":{"d":"M8 3v4"},"child":[]},{"tag":"path","attr":{"d":"M4 11h16"},"child":[]},{"tag":"path","attr":{"d":"M11 15h1"},"child":[]},{"tag":"path","attr":{"d":"M12 15v3"},"child":[]}]})(props);
93
95
  }function TbCheck (props) {
94
96
  return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":"2","strokeLinecap":"round","strokeLinejoin":"round"},"child":[{"tag":"path","attr":{"d":"M5 12l5 5l10 -10"},"child":[]}]})(props);
95
97
  }function TbChevronDown (props) {
@@ -412,7 +414,7 @@ var radiusConfig$1 = {
412
414
  tn: 'rounded-radius-full focus-visible:rounded-radius-full',
413
415
  },
414
416
  };
415
- var sizeConfig$c = {
417
+ var sizeConfig$d = {
416
418
  lg: 'py-[10.5px] h-[48px] flex items-center justify-center gap-[10px] text-size-md ',
417
419
  md: 'py-[9px] h-[40px] flex items-center justify-center gap-[5px] text-size-base ',
418
420
  sm: 'py-[6px] h-[30px] flex items-center justify-center gap-[5px] text-size-sm ',
@@ -490,10 +492,10 @@ function Button(_a) {
490
492
  }
491
493
  var sizingRules;
492
494
  if (variant.includes('link')) {
493
- sizingRules = "".concat(sizeConfig$c[validatedSize]);
495
+ sizingRules = "".concat(sizeConfig$d[validatedSize]);
494
496
  }
495
497
  else {
496
- sizingRules = "".concat(sizeConfig$c[validatedSize], " ").concat(sidePaddingConfig[validatedSize]);
498
+ sizingRules = "".concat(sizeConfig$d[validatedSize], " ").concat(sidePaddingConfig[validatedSize]);
497
499
  }
498
500
  var sizeClass = label || variant === 'form-group'
499
501
  ? " ".concat(minWidthRules, " ").concat(sizingRules)
@@ -1481,15 +1483,15 @@ var colorConfig$1 = {
1481
1483
  active: 'bg-bia-verdantgreen-dark-40 text-primary-white',
1482
1484
  },
1483
1485
  blue: {
1484
- default: 'bg-bia-olympicblue hover:bg-bia-olympicblue-dark-10 active:bg-bia-olympicblue-dark-40 text-primary-white disabled:bg-bia-olympicblue disabled:text-primary-white/50 disabled:cursor-default',
1485
- active: 'bg-bia-olympicblue-dark-40 text-primary-white',
1486
+ default: 'bg-bia-olympicblue hover:bg-bia-olympicblue-light-10 active:bg-bia-olympicblue-dark-10 text-primary-white disabled:bg-bia-olympicblue-dark-20 disabled:text-primary-white/50 disabled:cursor-default',
1487
+ active: 'bg-bia-olympicblue-dark-10 text-primary-white',
1486
1488
  },
1487
1489
  };
1488
1490
 
1489
1491
  var ButtonApp = function (_a) {
1490
1492
  _a.icon; _a.isNotified; var _c = _a.isActive, isActive = _c === void 0 ? false : _c, disabled = _a.disabled, _d = _a.color, color = _d === void 0 ? 'green' : _d, label = _a.label, extended = _a.extended, rest = __rest(_a, ["icon", "isNotified", "isActive", "disabled", "color", "label", "extended"]);
1491
1493
  var buttonState = isActive ? 'active' : 'default';
1492
- return (React.createElement("button", __assign({ className: "button-app px-[10px] pb-[8.8px] pt-[8px] font-arial text-size-tiny ".concat(colorConfig$1[color][buttonState], " ").concat(extended), type: "button", disabled: disabled }, rest), label));
1494
+ return (React.createElement("button", __assign({ className: "button-app flex items-center justify-center px-[10px] pb-[8.3px] pt-[8.5px] font-arial text-size-tiny ".concat(colorConfig$1[color][buttonState], " ").concat(extended), type: "button", disabled: disabled }, rest), label));
1493
1495
  };
1494
1496
 
1495
1497
  var textColorConfig = {
@@ -1718,46 +1720,72 @@ var TreeItem = function (_a) {
1718
1720
  })))));
1719
1721
  };
1720
1722
 
1721
- function MenuContainer(_a) {
1722
- var _b = _a.isTopFlat, isTopFlat = _b === void 0 ? false : _b, children = _a.children, _c = _a.open, open = _c === void 0 ? true : _c, _d = _a.onClose, onClose = _d === void 0 ? function () { } : _d, _e = _a.className, className = _e === void 0 ? '' : _e, _f = _a.isWithOverlay, isWithOverlay = _f === void 0 ? true : _f;
1723
+ var MenuContainer = React.forwardRef(function MenuContainer(propsComp, ref) {
1724
+ var _a = propsComp.isTopFlat, isTopFlat = _a === void 0 ? false : _a, children = propsComp.children, _b = propsComp.open, open = _b === void 0 ? true : _b, _c = propsComp.onClose, onClose = _c === void 0 ? function () { } : _c, _d = propsComp.className, className = _d === void 0 ? '' : _d, _e = propsComp.isWithOverlay, isWithOverlay = _e === void 0 ? true : _e, _f = propsComp.zIndex, zIndex = _f === void 0 ? 0 : _f, restProps = __rest(propsComp, ["isTopFlat", "children", "open", "onClose", "className", "isWithOverlay", "zIndex"]);
1723
1725
  var radiusClass = "rounded-b-radius-sm ".concat(!isTopFlat && 'rounded-t-radius-sm');
1724
1726
  return (open && (React.createElement(React.Fragment, null,
1725
1727
  isWithOverlay && (React.createElement("div", { className: "bianic-menu-overlay fixed left-0 top-0 z-0 h-screen w-screen", onClick: function () { return onClose(); } })),
1726
- React.createElement("div", { className: "w-fit bg-bia-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] ".concat(radiusClass, " ").concat(className) }, React.Children.map(children, function (child) {
1728
+ React.createElement("div", __assign({ className: "w-fit bg-bia-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] ".concat(radiusClass, " ").concat(className), ref: ref, style: {
1729
+ zIndex: zIndex,
1730
+ } }, restProps), React.Children.map(children, function (child) {
1727
1731
  return React.isValidElement(child)
1728
1732
  ? // Kirimkan handleItemClick sebagai props onClick ke setiap MenuItem
1729
- React.cloneElement(child, { onClose: function () { return onClose(); } })
1733
+ React.cloneElement(child, {
1734
+ onClose: function () { return onClose(); },
1735
+ zIndex: zIndex,
1736
+ })
1730
1737
  : child;
1731
1738
  })))));
1732
- }
1739
+ });
1733
1740
  MenuContainer.defaultProps = {
1734
1741
  isTopFlat: false,
1735
1742
  };
1736
1743
 
1737
1744
  function MenuItem(_a) {
1738
- var _b = _a.className, className = _b === void 0 ? '' : _b, label = _a.label, _c = _a.onClick, onClick = _c === void 0 ? function () { } : _c, _d = _a.caption, caption = _d === void 0 ? undefined : _d, _e = _a.isChecked, isChecked = _e === void 0 ? undefined : _e, _f = _a.onClose, onClose = _f === void 0 ? function () { } : _f, children = _a.children, props = __rest(_a, ["className", "label", "onClick", "caption", "isChecked", "onClose", "children"]);
1739
- var _g = React.useState(false), isHovered = _g[0], setIsHovered = _g[1];
1745
+ var _b = _a.className, className = _b === void 0 ? '' : _b, label = _a.label, _c = _a.onClick, onClick = _c === void 0 ? function () { } : _c, _d = _a.caption, caption = _d === void 0 ? undefined : _d, _e = _a.isChecked, isChecked = _e === void 0 ? undefined : _e, _f = _a.onClose, onClose = _f === void 0 ? function () { } : _f, children = _a.children, _g = _a.zIndex, zIndex = _g === void 0 ? 0 : _g, props = __rest(_a, ["className", "label", "onClick", "caption", "isChecked", "onClose", "children", "zIndex"]);
1746
+ var _h = React.useState(false), isHovered = _h[0], setIsHovered = _h[1];
1747
+ var _j = React.useState(false), isLeft = _j[0], setIsLeft = _j[1];
1740
1748
  var isWithChecked = isChecked !== undefined;
1741
1749
  var leftPadding = isWithChecked ? 'pl-[5px]' : 'pl-[10px]';
1742
1750
  var rightPadding = caption || children ? 'pr-[5px]' : 'pr-[10px]';
1743
1751
  var itemClass = "".concat(leftPadding, " ").concat(rightPadding, " ").concat(className);
1744
- return (React.createElement("div", { className: "group/main relative cursor-pointer first:rounded-t-radius-sm first:pt-[6px] last:rounded-b-radius-sm last:pb-[6px] ".concat(!isHovered && 'z-10'), onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } },
1745
- React.createElement("div", __assign({ className: "relative z-10 flex items-center py-[5px] hover:bg-bia-blue-pastel ".concat(itemClass), role: "button", tabIndex: 0, onClick: function (e) {
1752
+ var MenuContRef = React.useRef(null);
1753
+ React.useEffect(function () {
1754
+ var _a;
1755
+ if (MenuContRef.current) {
1756
+ // Adjust dropdown position to prevent overflow on the right.
1757
+ var MenuContRect = (_a = MenuContRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
1758
+ var RectRight = MenuContRect === null || MenuContRect === void 0 ? void 0 : MenuContRect.right;
1759
+ var innerWindow = window.innerWidth;
1760
+ if (RectRight > innerWindow)
1761
+ setIsLeft(true);
1762
+ else
1763
+ setIsLeft(false);
1764
+ }
1765
+ }, [isHovered]);
1766
+ var translateClass = isLeft
1767
+ ? 'left-0 -translate-x-full'
1768
+ : 'right-0 translate-x-full';
1769
+ var currentZIndex = zIndex + 10;
1770
+ return (React.createElement("div", { className: "group/main relative cursor-pointer first:rounded-t-radius-sm first:pt-[6px] last:rounded-b-radius-sm last:pb-[6px]", onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } },
1771
+ React.createElement("div", __assign({ className: "relative flex items-center py-[5px] hover:bg-bia-blue-pastel ".concat(itemClass), role: "button", tabIndex: 0, onClick: function (e) {
1746
1772
  onClick(e);
1747
- }, onKeyDown: function () { } }, props),
1773
+ }, onKeyDown: function () { }, style: {
1774
+ zIndex: isHovered ? currentZIndex : 0,
1775
+ } }, props),
1748
1776
  isWithChecked && (React.createElement("div", { className: "mr-[5px] aspect-square w-[14px]" }, isChecked && React.createElement(TbCheck, { className: "text-primary-black", size: 14 }))),
1749
1777
  React.createElement("span", { className: "whitespace-nowrap font-arial text-[11px] text-bia-black" }, label),
1750
1778
  React.createElement("div", { className: "ml-auto flex items-center" },
1751
1779
  children && (React.createElement(TbChevronRight, { className: "ml-[10px] text-bia-coolgrey" })),
1752
1780
  children === undefined && caption && (React.createElement("span", { className: "ml-[30px] whitespace-nowrap text-[11px] text-bia-coolgrey" }, caption)))),
1753
- children && (React.createElement(MenuContainer, { open: isHovered, onClose: onClose, className: "absolute right-0 top-0 translate-x-full bg-primary-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] group-first/main:top-[6px]" }, children))));
1781
+ children && (React.createElement(MenuContainer, { open: isHovered, onClose: onClose, className: "absolute top-0 bg-primary-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] group-first/main:top-[6px] ".concat(translateClass), ref: MenuContRef, zIndex: currentZIndex }, children))));
1754
1782
  }
1755
1783
  MenuItem.defaultProps = {
1756
1784
  className: '',
1757
1785
  onClick: function () { },
1758
1786
  };
1759
1787
 
1760
- var sizeConfig$b = {
1788
+ var sizeConfig$c = {
1761
1789
  md: {
1762
1790
  fieldSize: 'text-size-base p-2.5 font-[350] h-10',
1763
1791
  iconPosition: 'right-[10px]',
@@ -1818,8 +1846,8 @@ function TextInput(_a) {
1818
1846
  var _r = React.useState(false), isShow = _r[0], setIsShow = _r[1];
1819
1847
  var _s = styleConfig[variant], fieldStyle = _s.fieldStyle, iconStyle = _s.iconStyle;
1820
1848
  var _t = isTransparent
1821
- ? __assign(__assign({}, sizeConfig$b[size]), { iconPosition: "right-0 ", fieldSize: sizeConfig$b[size].fieldSize +
1822
- " pe-[".concat(9 + sizeConfig$b[size].iconSize, "px]") }) : sizeConfig$b[size], iconSize = _t.iconSize, fieldSize = _t.fieldSize, iconPosition = _t.iconPosition;
1849
+ ? __assign(__assign({}, sizeConfig$c[size]), { iconPosition: "right-0 ", fieldSize: sizeConfig$c[size].fieldSize +
1850
+ " pe-[".concat(9 + sizeConfig$c[size].iconSize, "px]") }) : sizeConfig$c[size], iconSize = _t.iconSize, fieldSize = _t.fieldSize, iconPosition = _t.iconPosition;
1823
1851
  var borderStyle = isTransparent
1824
1852
  ? 'border-transparent bg-transparent' // customize border rule for transparent variant
1825
1853
  : 'border border-bia-grey-dark-10 bg-primary-white';
@@ -1849,6 +1877,8 @@ function TextInput(_a) {
1849
1877
  if (variant === 'password') {
1850
1878
  iconElement = (React.createElement(PasswordIcon, { isShow: isShow, showHandler: setIsShow, iconSize: iconSize, disabled: disabled }));
1851
1879
  }
1880
+ if (variant === 'date')
1881
+ iconElement = React.createElement(TbCalendar, { className: "text-bia-coolgrey", size: 18 });
1852
1882
  var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(bottomBorderColor, " ").concat(inputClassName, " ").concat(borderStyle);
1853
1883
  var labelStatus = readOnly ? 'read-only:pointer-events-none' : '';
1854
1884
  return (React.createElement("div", { className: "bianic-text-input-container bianic-fgc-container flex w-full flex-col gap-y-2 text-bia-black" },
@@ -1883,7 +1913,7 @@ TextInput.defaultProps = {
1883
1913
  };
1884
1914
 
1885
1915
  // Desc: Radio button size configuration
1886
- var sizeConfig$a = {
1916
+ var sizeConfig$b = {
1887
1917
  md: {
1888
1918
  checkSize: 'w-[22px] h-[22px]',
1889
1919
  labelSize: 'text-size-base',
@@ -1898,7 +1928,7 @@ var sizeUnion$4 = ['md', 'sm'];
1898
1928
  function Radio(_a) {
1899
1929
  var label = _a.label, _b = _a.size, size = _b === void 0 ? 'md' : _b, id = _a.id, _c = _a.onClick, onClick = _c === void 0 ? function () { } : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, _e = _a.checked, checked = _e === void 0 ? false : _e;
1900
1930
  var validatedSize = validUnion(size, sizeUnion$4);
1901
- var _f = sizeConfig$a[validatedSize], checkSize = _f.checkSize, labelSize = _f.labelSize;
1931
+ var _f = sizeConfig$b[validatedSize], checkSize = _f.checkSize, labelSize = _f.labelSize;
1902
1932
  return (React.createElement("div", { className: "flex items-center" },
1903
1933
  React.createElement("div", { className: "bg-white rounded-full flex flex-shrink-0 justify-center items-center relative ".concat(checkSize) },
1904
1934
  React.createElement("input", { id: id, "aria-labelledby": "label1", type: "radio", className: "peer checkbox box-content appearance-none focus:opacity-100 focus:ring-1 focus:ring-offset-2 checked:disabled:border-bia-blue-disabled focus:ring-bia-blue focus:outline-none rounded-full border-bia-coolgrey-light-50 checked:border-bia-blue hover:border-bia-blue-hover disabled:border-bia-grey-dark-10 border-2 absolute cursor-pointer w-full h-full", onClick: function (e) { return onClick(e); }, checked: checked, disabled: disabled }),
@@ -1914,7 +1944,7 @@ Radio.defaultProps = {
1914
1944
  checked: false,
1915
1945
  };
1916
1946
 
1917
- var sizeConfig$9 = {
1947
+ var sizeConfig$a = {
1918
1948
  md: {
1919
1949
  inputClass: 'text-size-base font-[350] min-h-10',
1920
1950
  },
@@ -1937,7 +1967,7 @@ var ResizeIcon = function (_a) {
1937
1967
  function TextArea(_a) {
1938
1968
  var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, id = _a.id, _c = _a.size, size = _c === void 0 ? 'md' : _c, label = _a.label, _d = _a.placeholder, placeholder = _d === void 0 ? '' : _d, required = _a.required, rows = _a.rows, _e = _a.maxLength, maxLength = _e === void 0 ? undefined : _e, value = _a.value, _f = _a.readOnly, readOnly = _f === void 0 ? false : _f, _g = _a.autoComplete, autoComplete = _g === void 0 ? 'off' : _g, props = __rest(_a, ["descText", "disabled", "id", "size", "label", "placeholder", "required", "rows", "maxLength", "value", "readOnly", "autoComplete"]);
1939
1969
  var inputRow = rows !== null && rows !== void 0 ? rows : 4;
1940
- var inputClass = sizeConfig$9[size].inputClass;
1970
+ var inputClass = sizeConfig$a[size].inputClass;
1941
1971
  var remainWords = maxLength ? maxLength - (value ? value.length : 0) : 0;
1942
1972
  return (React.createElement("div", { className: "field-group flex w-full flex-col" },
1943
1973
  React.createElement("label", { htmlFor: id, className: "label pb-2 text-xs font-semibold read-only:pointer-events-none" },
@@ -1967,7 +1997,7 @@ TextArea.defaultProps = {
1967
1997
  value: '',
1968
1998
  };
1969
1999
 
1970
- var sizeConfig$8 = {
2000
+ var sizeConfig$9 = {
1971
2001
  md: {
1972
2002
  checkClass: 'w-[22px] h-[22px]',
1973
2003
  labelClass: 'text-size-base font-[350]',
@@ -1981,7 +2011,7 @@ var sizeConfig$8 = {
1981
2011
  var sizeUnion$3 = ['md', 'sm'];
1982
2012
  function Checkbox(_a) {
1983
2013
  var _b = _a.disabled, disabled = _b === void 0 ? false : _b, id = _a.id, _c = _a.size, size = _c === void 0 ? 'md' : _c, label = _a.label, _d = _a.onChange, onChange = _d === void 0 ? function () { } : _d, props = __rest(_a, ["disabled", "id", "size", "label", "onChange"]);
1984
- var _e = sizeConfig$8[validUnion(size, sizeUnion$3)], checkClass = _e.checkClass, labelClass = _e.labelClass;
2014
+ var _e = sizeConfig$9[validUnion(size, sizeUnion$3)], checkClass = _e.checkClass, labelClass = _e.labelClass;
1985
2015
  return (React.createElement("div", { className: "flex items-center" },
1986
2016
  React.createElement("div", { className: "relative flex flex-shrink-0 items-center justify-center rounded-full bg-white ".concat(checkClass) },
1987
2017
  React.createElement("input", __assign({ id: id, type: "checkbox", className: "checkbox peer absolute box-content h-full w-full cursor-pointer appearance-none rounded-full border-2 border-bia-coolgrey-light-50 checked:border-bia-blue hover:border-bia-blue-hover focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-bia-blue focus-visible:ring-offset-2 disabled:border-bia-coolgrey-light-50 disabled:checked:border-bia-blue-light-50", onChange: function (e) { return onChange(e); }, disabled: disabled }, props)),
@@ -1999,7 +2029,7 @@ Checkbox.defaultProps = {
1999
2029
  onChange: function () { },
2000
2030
  };
2001
2031
 
2002
- var sizeConfig$7 = {
2032
+ var sizeConfig$8 = {
2003
2033
  md: {
2004
2034
  searchSize: 'text-size-base p-2.5 font-[350] h-10',
2005
2035
  iconSize: 'right-[10px] text-[18px]',
@@ -2010,7 +2040,7 @@ var sizeConfig$7 = {
2010
2040
  },
2011
2041
  };
2012
2042
 
2013
- var sizeConfig$6 = {
2043
+ var sizeConfig$7 = {
2014
2044
  md: {
2015
2045
  container: 'text-size-base font-[350] py-[3px] first:pt-[8px] last:pb-[8px]',
2016
2046
  item: 'min-h-[34px] p-2.5',
@@ -2028,7 +2058,7 @@ function CustomDropdownItem(_a) {
2028
2058
  var _f = React.useState(false), isHoveredSubMenu = _f[0], setIsHoveredSubMenu = _f[1];
2029
2059
  var isOpenDropdown = isHovered || isHoveredSubMenu;
2030
2060
  var selectedClass = isSelected ? 'font-semibold' : 'font-normal';
2031
- var _g = sizeConfig$6[size], containerClass = _g.container, item = _g.item;
2061
+ var _g = sizeConfig$7[size], containerClass = _g.container, item = _g.item;
2032
2062
  var itemClass = "".concat(item, " ").concat(selectedClass, " ").concat(className);
2033
2063
  var isExistSubDropdown = options.length !== 0;
2034
2064
  return (React.createElement("div", { className: "relative w-full focus-visible:outline-bia-blue-light-50 ".concat(containerClass), tabIndex: 0, role: "button", onClick: function (e) { return onClick(e); }, onMouseEnter: function () { return setisHovered(true); }, onMouseLeave: function () { return setisHovered(false); }, onKeyDown: function () { } },
@@ -2055,7 +2085,7 @@ function DefaultDropdownItem(_a) {
2055
2085
  var _g = React.useState(false), isHoveredSubMenu = _g[0], setIsHoveredSubMenu = _g[1];
2056
2086
  var isOpenDropdown = isHovered || isHoveredSubMenu;
2057
2087
  var selectedClass = isSelected ? 'font-semibold' : 'font-normal';
2058
- var _h = sizeConfig$6[size], containerClass = _h.container, item = _h.item;
2088
+ var _h = sizeConfig$7[size], containerClass = _h.container, item = _h.item;
2059
2089
  var itemClass = "".concat(item, " ").concat(selectedClass, " ").concat(className);
2060
2090
  var isExistSubDropdown = options.length !== 0;
2061
2091
  return (React.createElement("div", { className: "relative w-full focus-visible:outline-bia-blue-light-50 ".concat(containerClass), tabIndex: 0, role: "button", onClick: function (e) { return onClick(e); }, onMouseEnter: function () { return setisHovered(true); }, onMouseLeave: function () { return setisHovered(false); }, onKeyDown: function () { } },
@@ -2082,7 +2112,7 @@ function SelectInput(_a) {
2082
2112
  var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.size, size = _c === void 0 ? 'md' : _c, id = _a.id, label = _a.label, options = _a.options, _d = _a.required, required = _d === void 0 ? false : _d, selected = _a.selected, setSelected = _a.setSelected, _e = _a.onClickDropdown, onClickDropdown = _e === void 0 ? function () { } : _e, props = __rest(_a, ["descText", "disabled", "size", "id", "label", "options", "required", "selected", "setSelected", "onClickDropdown"]);
2083
2113
  var _f = React.useState(false), isOpen = _f[0], setIsOpen = _f[1];
2084
2114
  var validatedSize = validUnion(size, sizeUnion$2);
2085
- var _g = sizeConfig$7[validatedSize], searchSize = _g.searchSize, iconSize = _g.iconSize;
2115
+ var _g = sizeConfig$8[validatedSize], searchSize = _g.searchSize, iconSize = _g.iconSize;
2086
2116
  var inputRef = React.useRef(null);
2087
2117
  var handleOutsideClick = function (e) {
2088
2118
  if (inputRef.current && !inputRef.current.contains(e.target)) {
@@ -2146,7 +2176,7 @@ SelectInput.defaultProps = {
2146
2176
  setSelected: function () { },
2147
2177
  };
2148
2178
 
2149
- var sizeConfig$5 = {
2179
+ var sizeConfig$6 = {
2150
2180
  md: {
2151
2181
  iconClass: 'right-[10px]',
2152
2182
  iconSize: '18',
@@ -2161,11 +2191,89 @@ var sizeConfig$5 = {
2161
2191
  },
2162
2192
  };
2163
2193
 
2164
- /* eslint-disable @typescript-eslint/no-explicit-any */
2194
+ var sizeConfig$5 = {
2195
+ sm: 'min-w-[72px]',
2196
+ md: 'min-w-[96px]',
2197
+ };
2198
+ var fontConfig = {
2199
+ sm: 'text-[12px] font-[400]',
2200
+ md: 'text-[14px] font-[350]',
2201
+ };
2202
+
2203
+ var DropdownContainer = React.forwardRef(function DropdownContainer(propsComp, ref) {
2204
+ var _a = propsComp.isTopFlat, isTopFlat = _a === void 0 ? false : _a, children = propsComp.children, _b = propsComp.open, open = _b === void 0 ? true : _b, _c = propsComp.onClose, onClose = _c === void 0 ? function () { } : _c, _d = propsComp.className, className = _d === void 0 ? '' : _d, _e = propsComp.isWithOverlay, isWithOverlay = _e === void 0 ? true : _e, _f = propsComp.size, size = _f === void 0 ? 'md' : _f, _g = propsComp.onClickItem, onClickItem = _g === void 0 ? function () { } : _g, _h = propsComp.zIndex, zIndex = _h === void 0 ? 0 : _h, restProps = __rest(propsComp, ["isTopFlat", "children", "open", "onClose", "className", "isWithOverlay", "size", "onClickItem", "zIndex"]);
2205
+ var radiusClass = "rounded-b-radius-sm ".concat(!isTopFlat && 'rounded-t-radius-sm');
2206
+ var sizeClass = sizeConfig$5[size] || sizeConfig$5['md'];
2207
+ var containerClass = "".concat(sizeClass, " ").concat(radiusClass, " ").concat(className);
2208
+ var handleClickDrpdownItem = function (e, val) {
2209
+ onClickItem(e, val);
2210
+ onClose();
2211
+ };
2212
+ return (open && (React.createElement(React.Fragment, null,
2213
+ isWithOverlay && (React.createElement("div", { className: "bianic-dropdown-overlay fixed left-0 top-0 z-0 h-screen w-screen", onClick: function () { return onClose(); } })),
2214
+ React.createElement("div", __assign({ style: {
2215
+ zIndex: zIndex,
2216
+ }, ref: ref, className: "bianic-dropdown-container bg-bia-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] ".concat(containerClass) }, restProps), React.Children.map(children, function (child) {
2217
+ return React.isValidElement(child)
2218
+ ? // Kirimkan handleItemClick sebagai props onClick ke setiap DropdownItem
2219
+ React.cloneElement(child, {
2220
+ onClose: function () { return onClose(); },
2221
+ size: size,
2222
+ onClickItem: function (e, val) { return handleClickDrpdownItem(e, val); },
2223
+ zIndex: zIndex,
2224
+ })
2225
+ : child;
2226
+ })))));
2227
+ });
2228
+ DropdownContainer.defaultProps = {
2229
+ isTopFlat: false,
2230
+ };
2231
+
2232
+ function DropdownItem(_a) {
2233
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? '' : _b, _c = _a.onClickItem, onClickItem = _c === void 0 ? function () { } : _c, _d = _a.onClose, onClose = _d === void 0 ? function () { } : _d, _e = _a.size, size = _e === void 0 ? 'md' : _e, _f = _a.value, value = _f === void 0 ? '' : _f, content = _a.content, _g = _a.disabled, disabled = _g === void 0 ? false : _g, _h = _a.zIndex, zIndex = _h === void 0 ? 0 : _h, props = __rest(_a, ["children", "className", "onClickItem", "onClose", "size", "value", "content", "disabled", "zIndex"]);
2234
+ var _j = React.useState(false), isHovered = _j[0], setIsHovered = _j[1];
2235
+ var _k = React.useState(false), isLeft = _k[0], setIsLeft = _k[1];
2236
+ var fontClass = fontConfig[size] || fontConfig['md'];
2237
+ var itemClass = "".concat(fontClass, " ").concat(className);
2238
+ var chevronSize = size === 'sm' ? 14 : 18;
2239
+ var DropdownContRef = React.useRef(null);
2240
+ React.useEffect(function () {
2241
+ var _a;
2242
+ if (DropdownContRef.current) {
2243
+ // Adjust dropdown position to prevent overflow on the right.
2244
+ var MenuContRect = (_a = DropdownContRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
2245
+ var RectRight = MenuContRect === null || MenuContRect === void 0 ? void 0 : MenuContRect.right;
2246
+ var innerWindow = window.innerWidth;
2247
+ if (RectRight > innerWindow)
2248
+ setIsLeft(true);
2249
+ else
2250
+ setIsLeft(false);
2251
+ }
2252
+ }, [isHovered]);
2253
+ var translateClass = isLeft
2254
+ ? 'left-0 -translate-x-full'
2255
+ : 'right-0 translate-x-full';
2256
+ var currentZIndex = zIndex + 10;
2257
+ return (React.createElement("div", { className: "bianic-dropdown-item group/main relative cursor-pointer first:rounded-t-radius-sm first:pt-[6px] last:rounded-b-radius-sm last:pb-[6px]", onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } },
2258
+ React.createElement("button", __assign({ className: "relative flex h-full w-full !min-w-fit items-center justify-start whitespace-nowrap px-[15px] py-[5px] text-left text-bia-black disabled:cursor-not-allowed disabled:text-bia-coolgrey-light-50 hover:[&:not(:disabled)]:bg-bia-blue-pastel ".concat(itemClass), style: {
2259
+ zIndex: isHovered ? currentZIndex : 0,
2260
+ }, onClick: function (e) {
2261
+ onClickItem(e, value);
2262
+ }, onKeyDown: function () { }, disabled: disabled, type: "button" }, props),
2263
+ content,
2264
+ React.createElement("div", { className: "ml-auto flex items-center" }, children && (React.createElement(TbChevronRight, { className: "ml-[10px] text-bia-coolgrey", size: chevronSize })))),
2265
+ children && (React.createElement(DropdownContainer, { className: "absolute top-0 bg-primary-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] group-first/main:top-[6px] ".concat(translateClass), onClose: onClose, open: isHovered, onClickItem: function (e, value) { return onClickItem(e, value); }, size: size, ref: DropdownContRef, zIndex: currentZIndex }, children))));
2266
+ }
2267
+ DropdownItem.defaultProps = {
2268
+ className: '',
2269
+ onClickItem: function () { },
2270
+ };
2271
+
2165
2272
  function LiveSearch(_a) {
2166
- var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, id = _a.id, _c = _a.size, size = _c === void 0 ? 'md' : _c, label = _a.label, placeholder = _a.placeholder, _d = _a.required, required = _d === void 0 ? false : _d, options = _a.options, setValue = _a.setValue, value = _a.value, _e = _a.readOnly, readOnly = _e === void 0 ? false : _e, _f = _a.onChangeText, onChangeText = _f === void 0 ? function () { } : _f, _g = _a.onClickDropdown, onClickDropdown = _g === void 0 ? function () { } : _g, _h = _a.autoComplete, autoComplete = _h === void 0 ? 'off' : _h;
2167
- var _j = React.useState(false), isOpen = _j[0], setIsOpen = _j[1];
2168
- var _k = sizeConfig$5[size], iconClass = _k.iconClass, iconSize = _k.iconSize, inputClass = _k.inputClass;
2273
+ var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, id = _a.id, _c = _a.size, size = _c === void 0 ? 'md' : _c, label = _a.label, placeholder = _a.placeholder, _d = _a.required, required = _d === void 0 ? false : _d, options = _a.options, setValue = _a.setValue, value = _a.value, _e = _a.readOnly, readOnly = _e === void 0 ? false : _e, _f = _a.onChangeText, onChangeText = _f === void 0 ? function () { } : _f, _g = _a.onClickDropdown, onClickDropdown = _g === void 0 ? function () { } : _g, _h = _a.autoComplete, autoComplete = _h === void 0 ? 'off' : _h, _j = _a.children, children = _j === void 0 ? undefined : _j, _k = _a.dropdownClassName, dropdownClassName = _k === void 0 ? '' : _k, _l = _a.dropContProps, dropContProps = _l === void 0 ? undefined : _l;
2274
+ var _m = React.useState(false), isOpen = _m[0], setIsOpen = _m[1];
2275
+ var _o = React.useState(value.label || ''), searchTerm = _o[0], setSearchTerm = _o[1];
2276
+ var _p = sizeConfig$6[size], iconClass = _p.iconClass, iconSize = _p.iconSize, inputClass = _p.inputClass;
2169
2277
  var inputRef = React.useRef(null);
2170
2278
  var handleOutsideClick = function (e) {
2171
2279
  if (inputRef.current && !inputRef.current.contains(e.target)) {
@@ -2178,30 +2286,108 @@ function LiveSearch(_a) {
2178
2286
  document.removeEventListener('mousedown', handleOutsideClick);
2179
2287
  };
2180
2288
  });
2289
+ // Synchronize internal searchTerm with external value prop
2290
+ React.useEffect(function () {
2291
+ // Only update searchTerm if the label from the value prop differs from the current searchTerm
2292
+ // This prevents infinite loops if searchTerm is already the same as value.label
2293
+ if (value.label !== searchTerm) {
2294
+ setSearchTerm(value.label || '');
2295
+ }
2296
+ }, [value.label, searchTerm]);
2181
2297
  var filteredOptions = options.filter(function (item) {
2182
2298
  return item.label.toLowerCase().includes(value.label.toLowerCase());
2183
2299
  });
2184
- return (React.createElement("div", { className: "field-group flex w-full flex-col gap-y-2", ref: inputRef },
2185
- React.createElement("label", { htmlFor: id, className: "label text-xs font-semibold read-only:pointer-events-none" },
2300
+ var handleInputChange = function (e) {
2301
+ var newSearchTerm = e.target.value;
2302
+ setSearchTerm(newSearchTerm);
2303
+ setIsOpen(true); // Ensure dropdown opens when typing
2304
+ };
2305
+ var handleDropdownItemClick = React.useCallback(function (clickedValue) {
2306
+ setSearchTerm(clickedValue.label); // Set input text to the selected label
2307
+ setValue(clickedValue); // Update the value in the parent
2308
+ setIsOpen(false);
2309
+ }, [setValue]);
2310
+ // Recursive function to filter and clone DropdownItems, including nested items
2311
+ var processDropdownChildren = function (nodes, currentSearchTerm, includeAllIfNoSearch) {
2312
+ return React.Children.map(nodes, function (child) {
2313
+ if (!React.isValidElement(child) || child.type !== DropdownItem) {
2314
+ return child; // Render non-DropdownItem or other elements as is
2315
+ }
2316
+ var itemProps = child.props; // Cast to any to access props
2317
+ var itemValue = itemProps.value;
2318
+ var isDisabled = itemProps.disabled;
2319
+ // Filter based on searchTerm only if searchTerm is present
2320
+ if (currentSearchTerm &&
2321
+ !itemValue.toLowerCase().includes(currentSearchTerm.toLowerCase())) {
2322
+ return null; // Do not render if it doesn't match
2323
+ }
2324
+ // If includeAllIfNoSearch is true (when searchTerm is empty), do not filter.
2325
+ // If includeAllIfNoSearch is false (when searchTerm is present), filtering has been done above.
2326
+ // Clone its children recursively if any
2327
+ var clonedChildren = itemProps.children
2328
+ ? processDropdownChildren(itemProps.children, currentSearchTerm)
2329
+ : null;
2330
+ // Clone the DropdownItem to inject the onClick prop
2331
+ return React.cloneElement(child, {
2332
+ onClick: function (e) {
2333
+ if (!isDisabled) {
2334
+ handleDropdownItemClick({
2335
+ id: itemValue,
2336
+ label: itemValue,
2337
+ });
2338
+ }
2339
+ if (dropContProps === null || dropContProps === void 0 ? void 0 : dropContProps.onClickItem) {
2340
+ dropContProps.onClickItem(e, itemValue);
2341
+ }
2342
+ },
2343
+ children: clonedChildren, // Ensure processed children are also cloned
2344
+ });
2345
+ });
2346
+ };
2347
+ // Determine which children to display
2348
+ var renderedChildren = null;
2349
+ var hasFilteredResults = false;
2350
+ if (searchTerm) {
2351
+ // If there's a searchTerm, filter children
2352
+ renderedChildren = processDropdownChildren(children, searchTerm);
2353
+ hasFilteredResults =
2354
+ React.Children.toArray(renderedChildren).filter(Boolean).length > 0;
2355
+ }
2356
+ else {
2357
+ // If searchTerm is empty, display all children without filtering (but with onClick injected)
2358
+ renderedChildren = processDropdownChildren(children, '');
2359
+ hasFilteredResults =
2360
+ React.Children.toArray(renderedChildren).filter(Boolean).length > 0; // Should always be true if there are initial children
2361
+ }
2362
+ return (React.createElement("div", { className: "bianic-livesearch field-group flex w-full flex-col gap-y-2", ref: inputRef },
2363
+ React.createElement("label", { htmlFor: id, className: "bianic-livesearch-label text-xs font-semibold read-only:pointer-events-none" },
2186
2364
  label,
2187
2365
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*")),
2188
2366
  React.createElement("div", { className: "group relative w-full" },
2189
- React.createElement("input", { className: "field peer w-full rounded border border-bia-grey-dark-10 bg-primary-white read-only:pointer-events-none read-only:border-bia-grey-disabled focus-visible:outline-none enabled:hover:rounded-b-none enabled:hover:border-b-bia-blue enabled:focus:rounded-b-none enabled:focus:border-b-bia-blue disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-10 disabled:text-bia-coolgrey ".concat(inputClass), onClick: function () { return setIsOpen(!isOpen); }, value: value.label, required: required, disabled: disabled, id: id, placeholder: placeholder, onChange: function (e) {
2367
+ React.createElement("input", { className: "bianic-livesearch-input field peer w-full rounded border border-bia-grey-dark-10 bg-primary-white read-only:pointer-events-none read-only:border-bia-grey-disabled focus-visible:outline-none enabled:hover:rounded-b-none enabled:hover:border-b-bia-blue enabled:focus:rounded-b-none enabled:focus:border-b-bia-blue disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-10 disabled:text-bia-coolgrey ".concat(inputClass), onClick: function () { return setIsOpen(!isOpen); }, value: searchTerm, required: required, disabled: disabled, id: id, placeholder: placeholder, onChange: function (e) {
2190
2368
  onChangeText(e);
2191
2369
  setValue({ id: null, label: e.target.value });
2192
- }, type: "search", readOnly: readOnly, autoComplete: autoComplete }),
2193
- React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 peer-hover:hidden peer-focus:hidden ".concat(iconClass) },
2370
+ handleInputChange(e);
2371
+ }, type: "text", readOnly: readOnly, autoComplete: autoComplete }),
2372
+ React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 group-hover:hidden ".concat(iconClass) },
2194
2373
  React.createElement(TbZoom, { className: "text-primary-black", style: { fontSize: iconSize } })),
2195
- isOpen && (React.createElement("div", { className: "border-grey-100 absolute z-10 max-h-60 w-full overflow-y-auto rounded-b-md border bg-primary-white shadow-lg", onClick: onClickDropdown }, filteredOptions.map(function (option) {
2374
+ React.createElement("div", { className: "absolute inset-y-0 z-20 hidden pl-3 group-hover:block ".concat(iconClass) },
2375
+ React.createElement("button", { onClick: function () { return setValue({ id: null, label: '' }); }, className: "flex h-full w-full items-center" },
2376
+ React.createElement(TbX, { className: "text-primary-black", style: { fontSize: iconSize } }))),
2377
+ children === undefined && isOpen && (React.createElement("div", { className: "border-grey-100 absolute z-10 max-h-60 w-full overflow-y-auto rounded-b-md border bg-primary-white shadow-lg", onClick: onClickDropdown }, filteredOptions.map(function (option) {
2196
2378
  var isSelected = value && value.id && option.id === value.id;
2197
- return option.custom ? (React.createElement(CustomDropdownItem, { size: size, isSelected: isSelected, onClick: function () {
2379
+ return option.custom ? (React.createElement(CustomDropdownItem, { size: size, isSelected: isSelected, className: dropdownClassName, onClick: function () {
2198
2380
  setValue(option);
2199
2381
  setIsOpen(false);
2200
- } }, option.custom)) : (React.createElement(DefaultDropdownItem, { label: option.label, size: size, isSelected: isSelected, onClick: function () {
2382
+ } }, option.custom)) : (React.createElement(DefaultDropdownItem, { label: option.label, size: size, isSelected: isSelected, className: dropdownClassName, onClick: function () {
2201
2383
  setValue(option);
2202
2384
  setIsOpen(false);
2203
2385
  } }));
2204
- })))),
2386
+ }))),
2387
+ children && isOpen && (React.createElement(DropdownContainer, __assign({ open: isOpen, onClose: function () { return setIsOpen(false); }, size: size, isTopFlat: true, className: "bianic-livesearch-dropdown absolute z-10 mt-1 w-full overflow-hidden rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none ".concat(dropdownClassName) }, dropContProps), hasFilteredResults
2388
+ ? renderedChildren
2389
+ : // If no results and searchTerm is present
2390
+ searchTerm.length > 0 && (React.createElement(DropdownItem, { content: React.createElement("div", { className: "px-4 py-2 text-gray-500" }, "Tidak ada hasil ditemukan.") }))))),
2205
2391
  React.createElement("span", { className: "desc text-xs text-primary-cool" }, descText)));
2206
2392
  }
2207
2393
  LiveSearch.defaultProps = {
@@ -2724,35 +2910,49 @@ var SpinnerIcon = function (_a) {
2724
2910
 
2725
2911
  var config = {
2726
2912
  success: {
2727
- progress: 'bg-bia-green',
2913
+ progress: 'bg-bia-green outline-bia-green',
2728
2914
  statusIcon: React.createElement(TbCircleCheckFilled, { className: "text-[16px] text-bia-green" }),
2729
2915
  },
2730
2916
  failed: {
2731
- progress: 'bg-bia-red',
2917
+ progress: 'bg-bia-red outline-bia-red',
2732
2918
  statusIcon: React.createElement(TbPlaystationX, { className: "text-[16px] text-bia-red" }),
2733
2919
  },
2734
2920
  loading: {
2735
- progress: 'bg-bia-blue',
2921
+ progress: 'bg-bia-blue outline-bia-blue ',
2736
2922
  statusIcon: React.createElement(SpinnerIcon, { className: "text-[16px] text-bia-grey-dark-10" }),
2737
2923
  },
2738
2924
  };
2739
2925
 
2740
2926
  function ProgressBar(_a) {
2741
- var _b = _a.title, title = _b === void 0 ? '' : _b, _c = _a.percentage, percentage = _c === void 0 ? 0 : _c, caption = _a.caption, _d = _a.variant, variant = _d === void 0 ? 'loading' : _d;
2742
- var persentageVal = percentage;
2927
+ var _b = _a.title, title = _b === void 0 ? '' : _b, _c = _a.percentage, percentage = _c === void 0 ? 0 : _c, caption = _a.caption, _d = _a.variant, variant = _d === void 0 ? 'loading' : _d, _e = _a.icon, icon = _e === void 0 ? true : _e, barColor = _a.barColor;
2928
+ var percentageVal = percentage;
2929
+ if (percentageVal === 0)
2930
+ percentageVal = 0.5;
2743
2931
  if (percentage > 100)
2744
- persentageVal = 100;
2745
- var _e = config[variant], progress = _e.progress, statusIcon = _e.statusIcon;
2932
+ percentageVal = 100;
2933
+ var _f = config[variant], progress = _f.progress, statusIcon = _f.statusIcon;
2934
+ var barColorRules = barColor
2935
+ ? "outline-bia-".concat(barColor, " bg-bia-").concat(barColor)
2936
+ : progress; // Use the provided barColor or fallback to the default progress color
2937
+ var iconElement = null;
2938
+ if (icon) {
2939
+ if (typeof icon === 'boolean') {
2940
+ iconElement = statusIcon; // Use the default icon based on the variant
2941
+ }
2942
+ else {
2943
+ iconElement = icon; // Use the provided icon
2944
+ }
2945
+ }
2746
2946
  return (React.createElement("div", { className: "bianic-progress-bar-container flex w-[320px] flex-col rounded-radius-lg bg-bia-grey-light-80 p-[10px] " },
2747
2947
  React.createElement("div", { className: "flex items-center justify-between text-primary-black" },
2748
2948
  React.createElement(Text, { variant: "small-text-semibold", extended: "bianic-progress-bar-title" }, title),
2749
2949
  React.createElement("div", { className: "flex gap-1" },
2750
- React.createElement(Text, { variant: "small-text-semibold", extended: "bianic-progress-bar-persentage" },
2751
- persentageVal,
2950
+ React.createElement(Text, { variant: "small-text-semibold", extended: "bianic-progress-bar-percentage" },
2951
+ percentage,
2752
2952
  "%"),
2753
- statusIcon)),
2953
+ iconElement)),
2754
2954
  React.createElement("div", { className: "bianic-progress-bar mb-1 mt-2 w-full rounded-radius-lg bg-bia-white p-[3px]" },
2755
- React.createElement("div", { className: "h-1 w-full rounded-radius-lg ".concat(progress), style: { width: "".concat(persentageVal, "%") } })),
2955
+ React.createElement("div", { className: "h-[1px] rounded-radius-lg outline outline-[1.5px] ".concat(barColorRules), style: { width: "".concat(percentageVal, "%") } })),
2756
2956
  caption && (React.createElement(Text, { variant: "small-text-semibold", extended: "text-bia-coolgrey-dark-10" }, caption))));
2757
2957
  }
2758
2958
 
@@ -2927,7 +3127,7 @@ var alternativeConfigs = {
2927
3127
  false: 'cursor-pointer bg-bia-verdantgreen-dark-40 hover:bg-bia-verdantgreen-dark-50 text-primary-white overflow-hidden',
2928
3128
  };
2929
3129
  var alternativeButtonConfigs = {
2930
- true: 'absolute px-[5px] opacity-0 hover:opacity-100 grid-cols-2 gap-[2px] bg-gradient-to-l from-primary-white from-50% to-primary-white/[.0] inset-y-0 right-0',
3130
+ true: 'absolute px-[5px] opacity-0 group-hover/container:opacity-100 grid-cols-2 gap-[2px] bg-gradient-to-l from-primary-white from-50% to-primary-white/[.0] inset-y-0 right-0',
2931
3131
  false: ' absolute px-[5px] opacity-0 hover:opacity-100 grid-cols-2 gap-[2px] bg-gradient-to-l from-bia-verdantgreen-dark-50 from-50% to-bia-verdantgreen-dark-50/[.0] inset-y-0 right-0',
2932
3132
  };
2933
3133
  var actionButtonConfig = {
@@ -2956,11 +3156,11 @@ var TabMenu = function (_a) {
2956
3156
  usedButtonConfig = defaultButtonConfigs[isActive];
2957
3157
  usedActionButtonConfig = '';
2958
3158
  }
2959
- return (React.createElement("div", __assign({ className: "tab-menu flex flex-row font-arial text-size-tiny font-normal ".concat(radiusConfig[validatedRadius], " ").concat(variantConfig[validatedVariant], " ").concat(usedBaseConfig, " ").concat(rest.className) }, rest),
3159
+ return (React.createElement("div", __assign({ className: "tab-menu group/container flex flex-row font-arial text-size-tiny font-normal ".concat(radiusConfig[validatedRadius], " ").concat(variantConfig[validatedVariant], " ").concat(usedBaseConfig, " ").concat(rest.className) }, rest),
2960
3160
  text,
2961
3161
  React.createElement("div", { className: "grid ".concat(usedButtonConfig, " ") },
2962
3162
  validatedVariant === 'alternative' && React.createElement("div", { className: "order-first" }),
2963
- React.createElement("button", { className: "group order-last ", onClick: onClose },
3163
+ React.createElement("button", { className: "group order-last", onClick: onClose },
2964
3164
  React.createElement(TbX, { className: "rounded-radius-sm ".concat(usedActionButtonConfig), size: 14 })))));
2965
3165
  };
2966
3166
 
@@ -3262,6 +3462,33 @@ function Toaster(_a) {
3262
3462
  React.createElement(TbX, { size: 14 })))));
3263
3463
  }
3264
3464
 
3465
+ function Window(_a) {
3466
+ var _b = _a.size, size = _b === void 0 ? 'sm' : _b, title = _a.title; _a.zIndex; var onClose = _a.onClose, rest = __rest(_a, ["size", "title", "zIndex", "onClose"]);
3467
+ var windowSize;
3468
+ // sizing logic
3469
+ switch (size) {
3470
+ case 'sm':
3471
+ windowSize = 'w-[300px]';
3472
+ break;
3473
+ case 'md':
3474
+ windowSize = 'w-[540px]';
3475
+ break;
3476
+ case 'lg':
3477
+ windowSize = 'w-[800px]';
3478
+ break;
3479
+ case 'xl':
3480
+ windowSize = 'w-[1140px]';
3481
+ break;
3482
+ default:
3483
+ windowSize = 'w-[540px]';
3484
+ }
3485
+ return (React.createElement("div", { className: "bianic-window drag-handle flex flex-col gap-[20px] rounded-[5px] bg-white ".concat(windowSize, " shadow-[0px_3px_20px_0px_rgba(0,0,0,0.10)]") },
3486
+ React.createElement("div", { className: "bianic-window-header flex cursor-move justify-between px-[20px] pt-[20px]" },
3487
+ React.createElement("div", { className: " text-wrap text-left font-humnst777 text-[18px] font-bold leading-[21.85px] text-primary-black" }, title),
3488
+ React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, null), size: "tn", onClick: function () { return onClose(); } })),
3489
+ React.createElement("div", { className: "bianic-window-content flex w-full flex-col items-start gap-[20px] px-[20px] pb-[20px] text-primary-black" }, rest.children)));
3490
+ }
3491
+
3265
3492
  exports.Accordions = Accordions;
3266
3493
  exports.Alert = Alert;
3267
3494
  exports.Avatar = Avatar;
@@ -3297,6 +3524,8 @@ exports.Color = Color;
3297
3524
  exports.ContextualButton = ContextualButton;
3298
3525
  exports.Display = Display;
3299
3526
  exports.Divider = Divider;
3527
+ exports.DropdownContainer = DropdownContainer;
3528
+ exports.DropdownItem = DropdownItem;
3300
3529
  exports.FileTree = FileTree;
3301
3530
  exports.FormGroup = FormGroup;
3302
3531
  exports.FormGroupButton = FormGroupButton;
@@ -3330,3 +3559,4 @@ exports.TextInput = TextInput;
3330
3559
  exports.Toaster = Toaster;
3331
3560
  exports.Toggle = Toggle;
3332
3561
  exports.Tooltip = Tooltip;
3562
+ exports.Window = Window;