bianic-ui 1.3.0-beta.1 → 1.4.0-beta

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 (82) hide show
  1. package/dist/cjs/index.js +177 -46
  2. package/dist/cjs/lib.css +1 -1
  3. package/dist/cjs/types/components/FileTree/index.d.ts +12 -0
  4. package/dist/cjs/types/components/Forms/SegmentButton/SegmentButtonItem.d.ts +2 -1
  5. package/dist/cjs/types/components/Forms/SegmentButton/config.d.ts +7 -1
  6. package/dist/cjs/types/components/Forms/TextInput/Simulation.d.ts +4 -7
  7. package/dist/cjs/types/components/Forms/TextInput/configs.d.ts +4 -0
  8. package/dist/cjs/types/components/Forms/TextInput/index.d.ts +6 -2
  9. package/dist/cjs/types/components/Menu/Example/BasicExample.d.ts +3 -0
  10. package/dist/cjs/types/components/Menu/Example/FilterExample.d.ts +9 -0
  11. package/dist/cjs/types/components/Menu/Example/NestedExample.d.ts +14 -0
  12. package/dist/cjs/types/components/Menu/MenuContainer.d.ts +15 -0
  13. package/dist/cjs/types/components/Menu/MenuItem.d.ts +18 -0
  14. package/dist/cjs/types/components/Menu/index.d.ts +3 -0
  15. package/dist/cjs/types/components/Modal/Modal.d.ts +1 -1
  16. package/dist/cjs/types/components/Tab/CardTab.d.ts +13 -0
  17. package/dist/cjs/types/components/Tab/CardTabConfig.d.ts +26 -0
  18. package/dist/cjs/types/components/Tab/CardTabDemo.d.ts +3 -0
  19. package/dist/cjs/types/components/Tab/Tab.d.ts +1 -13
  20. package/dist/cjs/types/components/Tab/index.d.ts +1 -0
  21. package/dist/cjs/types/components/Tooltip/PropsInterface.d.ts +9 -0
  22. package/dist/cjs/types/components/Tooltip/Simulation.d.ts +15 -0
  23. package/dist/cjs/types/components/Tooltip/index.d.ts +1 -7
  24. package/dist/cjs/types/components/index.d.ts +2 -0
  25. package/dist/cjs/types/stories/FileTree/FileTree.stories.d.ts +15 -0
  26. package/dist/cjs/types/stories/Form/TextInput/TextInput.stories.d.ts +6 -3
  27. package/dist/cjs/types/stories/{Form/TextInput/TextInputSimulation.stories.d.ts → Menu/BasicExample.stories.d.ts} +3 -4
  28. package/dist/{esm/types/stories/Form/TextInput/TextInputSimulation.stories.d.ts → cjs/types/stories/Menu/FilterExample.stories.d.ts} +3 -4
  29. package/dist/cjs/types/stories/Menu/MenuContainer.stories.d.ts +13 -0
  30. package/dist/cjs/types/stories/Menu/MenuItem.stories.d.ts +13 -0
  31. package/dist/cjs/types/stories/Menu/NestedExample.stories.d.ts +13 -0
  32. package/dist/cjs/types/stories/Modal/Modal.stories.d.ts +0 -1
  33. package/dist/cjs/types/stories/Modal/ModalDemo.stories.d.ts +0 -1
  34. package/dist/cjs/types/stories/Tab/CardTab.stories.d.ts +18 -0
  35. package/dist/cjs/types/stories/Tab/CardTabDemo.stories.d.ts +13 -0
  36. package/dist/cjs/types/stories/Tab/TabHead.stories.d.ts +0 -1
  37. package/dist/cjs/types/stories/Tooltip/Tooltip.stories.d.ts +2 -2
  38. package/dist/esm/index.js +176 -48
  39. package/dist/esm/lib.css +1 -1
  40. package/dist/esm/types/components/FileTree/index.d.ts +12 -0
  41. package/dist/esm/types/components/Forms/SegmentButton/SegmentButtonItem.d.ts +2 -1
  42. package/dist/esm/types/components/Forms/SegmentButton/config.d.ts +7 -1
  43. package/dist/esm/types/components/Forms/TextInput/Simulation.d.ts +4 -7
  44. package/dist/esm/types/components/Forms/TextInput/configs.d.ts +4 -0
  45. package/dist/esm/types/components/Forms/TextInput/index.d.ts +6 -2
  46. package/dist/esm/types/components/Menu/Example/BasicExample.d.ts +3 -0
  47. package/dist/esm/types/components/Menu/Example/FilterExample.d.ts +9 -0
  48. package/dist/esm/types/components/Menu/Example/NestedExample.d.ts +14 -0
  49. package/dist/esm/types/components/Menu/MenuContainer.d.ts +15 -0
  50. package/dist/esm/types/components/Menu/MenuItem.d.ts +18 -0
  51. package/dist/esm/types/components/Menu/index.d.ts +3 -0
  52. package/dist/esm/types/components/Modal/Modal.d.ts +1 -1
  53. package/dist/esm/types/components/Tab/CardTab.d.ts +13 -0
  54. package/dist/esm/types/components/Tab/CardTabConfig.d.ts +26 -0
  55. package/dist/esm/types/components/Tab/CardTabDemo.d.ts +3 -0
  56. package/dist/esm/types/components/Tab/Tab.d.ts +1 -13
  57. package/dist/esm/types/components/Tab/index.d.ts +1 -0
  58. package/dist/esm/types/components/Tooltip/PropsInterface.d.ts +9 -0
  59. package/dist/esm/types/components/Tooltip/Simulation.d.ts +15 -0
  60. package/dist/esm/types/components/Tooltip/index.d.ts +1 -7
  61. package/dist/esm/types/components/index.d.ts +2 -0
  62. package/dist/esm/types/stories/FileTree/FileTree.stories.d.ts +15 -0
  63. package/dist/esm/types/stories/Form/TextInput/TextInput.stories.d.ts +6 -3
  64. package/dist/esm/types/stories/Menu/BasicExample.stories.d.ts +13 -0
  65. package/dist/esm/types/stories/Menu/FilterExample.stories.d.ts +13 -0
  66. package/dist/esm/types/stories/Menu/MenuContainer.stories.d.ts +13 -0
  67. package/dist/esm/types/stories/Menu/MenuItem.stories.d.ts +13 -0
  68. package/dist/esm/types/stories/Menu/NestedExample.stories.d.ts +13 -0
  69. package/dist/esm/types/stories/Modal/Modal.stories.d.ts +0 -1
  70. package/dist/esm/types/stories/Modal/ModalDemo.stories.d.ts +0 -1
  71. package/dist/esm/types/stories/Tab/CardTab.stories.d.ts +18 -0
  72. package/dist/esm/types/stories/Tab/CardTabDemo.stories.d.ts +13 -0
  73. package/dist/esm/types/stories/Tab/TabHead.stories.d.ts +0 -1
  74. package/dist/esm/types/stories/Tooltip/Tooltip.stories.d.ts +2 -2
  75. package/dist/index.d.ts +125 -87
  76. package/package.json +1 -1
  77. package/src/font/Arial/arial.ttf +0 -0
  78. package/src/font/Arial/arialblack.ttf +0 -0
  79. package/src/font/Arial/arialbold.ttf +0 -0
  80. package/src/font/Arial/arialbolditalic.ttf +0 -0
  81. package/src/font/Arial/arialitalic.ttf +0 -0
  82. package/tailwind.config.js +1 -0
package/dist/cjs/index.js CHANGED
@@ -1498,6 +1498,82 @@ Divider.defaultProps = {
1498
1498
  classname: '',
1499
1499
  };
1500
1500
 
1501
+ var FileTree = function (_a) {
1502
+ var data = _a.data, color = _a.color;
1503
+ return (React.createElement("div", { className: "file-tree" }, data.map(function (_a, index) {
1504
+ var label = _a.label, nodes = _a.nodes, props = __rest(_a, ["label", "nodes"]);
1505
+ return (React.createElement(TreeItem, __assign({ label: label, nodes: nodes, key: index, color: color }, props)));
1506
+ })));
1507
+ };
1508
+ var TreeItem = function (_a) {
1509
+ var label = _a.label, nodes = _a.nodes, color = _a.color, props = __rest(_a, ["label", "nodes", "color"]);
1510
+ var _b = React.useState(false), isExpand = _b[0], setIsExpand = _b[1];
1511
+ var _c = React.useState(false), isFocused = _c[0], setIsFocused = _c[1];
1512
+ var focusedIconColor = color
1513
+ ? "text-bia-".concat(color)
1514
+ : 'text-bia-coolgrey-light-50';
1515
+ var foucusedBgColor = color ? "bg-bia-".concat(color) : 'bg-bia-coolgrey-light-50';
1516
+ var textClass = "flex items-center rounded-radius-sm px-[2px] cursor-pointer hover:bg-bia-coolgrey-light-90 focus:pointer-events-none ".concat(isFocused && foucusedBgColor);
1517
+ return (React.createElement("div", { className: "bianic-tree-item" },
1518
+ React.createElement("div", { className: "justify-left group flex items-center" },
1519
+ nodes && nodes.length > 0 ? (React.createElement("button", { className: "cursor-pointer", onClick: function (e) {
1520
+ setIsExpand(function (prev) { return !prev; });
1521
+ } },
1522
+ React.createElement(TbChevronRight, { className: "text-bia-coolgrey-light-50 ".concat(isFocused && focusedIconColor, " ").concat(isExpand && 'rotate-90'), size: 18 }))) : (React.createElement("div", { className: "aspect-square w-[18px]" })),
1523
+ React.createElement("button", __assign({ onFocus: function (e) {
1524
+ var _a;
1525
+ setIsFocused(true);
1526
+ (_a = props === null || props === void 0 ? void 0 : props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
1527
+ }, onBlur: function (e) {
1528
+ var _a;
1529
+ setIsFocused(false);
1530
+ (_a = props === null || props === void 0 ? void 0 : props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
1531
+ }, className: textClass }, props),
1532
+ React.createElement(Text, { variant: "small-text" },
1533
+ " ",
1534
+ label,
1535
+ " "))),
1536
+ isExpand && nodes && nodes.length > 0 && (React.createElement("div", { className: "ml-4" }, nodes.map(function (_a, index) {
1537
+ var label = _a.label, nodes = _a.nodes;
1538
+ return (React.createElement(TreeItem, { label: label, nodes: nodes, key: index, color: color }));
1539
+ })))));
1540
+ };
1541
+
1542
+ function MenuContainer(_a) {
1543
+ var _b = _a.isTopFlat, isTopFlat = _b === void 0 ? false : _b, children = _a.children, open = _a.open, _c = _a.onClose, onClose = _c === void 0 ? function () { } : _c, _d = _a.className, className = _d === void 0 ? '' : _d;
1544
+ var radiusClass = "rounded-b-radius-sm ".concat(!isTopFlat && 'rounded-t-radius-sm');
1545
+ return (open && (React.createElement(React.Fragment, null,
1546
+ React.createElement("div", { className: "fixed left-0 top-0 z-0 h-screen w-screen", onClick: function () { return onClose(); } }),
1547
+ React.createElement("div", { className: "w-fit shadow-[0px_3px_20px_0px_rgba(0,0,0,0.20)] ".concat(radiusClass, " ").concat(className) }, React.Children.map(children, function (child) {
1548
+ return React.isValidElement(child)
1549
+ ? // Kirimkan handleItemClick sebagai props onClick ke setiap MenuItem
1550
+ React.cloneElement(child, { onClose: function () { return onClose(); } })
1551
+ : child;
1552
+ })))));
1553
+ }
1554
+ MenuContainer.defaultProps = {
1555
+ isTopFlat: false,
1556
+ };
1557
+
1558
+ function MenuItem(_a) {
1559
+ 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"]);
1560
+ var _g = React.useState(false), isHovered = _g[0], setIsHovered = _g[1];
1561
+ 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); } },
1562
+ React.createElement("div", __assign({ className: "relative z-10 flex items-center p-[5px] font-arial hover:bg-bia-blue-pastel ".concat(className, "}"), role: "button", tabIndex: 0, onClick: function (e) {
1563
+ onClick(e);
1564
+ }, onKeyDown: function () { } }, props),
1565
+ React.createElement("div", { className: "mr-[5px] aspect-square w-[14px]" }, isChecked !== undefined && isChecked && (React.createElement(TbCheck, { className: "text-primary-black", size: 14 }))),
1566
+ React.createElement("span", { className: "whitespace-nowrap text-[11px]" }, label),
1567
+ React.createElement("div", { className: "ml-auto flex items-center" },
1568
+ children && React.createElement(TbChevronRight, { className: "ml-[10px] text-bia-grey" }),
1569
+ children === undefined && caption && (React.createElement("span", { className: "ml-[30px] whitespace-nowrap text-[11px] text-bia-coolgrey" }, caption)))),
1570
+ 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))));
1571
+ }
1572
+ MenuItem.defaultProps = {
1573
+ className: '',
1574
+ onClick: function () { },
1575
+ };
1576
+
1501
1577
  var sizeConfig$a = {
1502
1578
  md: {
1503
1579
  fieldSize: 'text-size-base p-2.5 font-[350] h-10',
@@ -1527,6 +1603,10 @@ var styleConfig = {
1527
1603
  fieldStyle: '',
1528
1604
  iconStyle: 'pointer-events-none',
1529
1605
  },
1606
+ 'text-transparent': {
1607
+ fieldStyle: 'px-0 ',
1608
+ iconStyle: '',
1609
+ },
1530
1610
  };
1531
1611
 
1532
1612
  function ValidationIcon(_a) {
@@ -1550,15 +1630,22 @@ function PasswordIcon(_a) {
1550
1630
  }
1551
1631
 
1552
1632
  function TextInput(_a) {
1553
- var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, icon = _a.icon, _c = _a.id, id = _c === void 0 ? '' : _c, _d = _a.size, size = _d === void 0 ? 'md' : _d, _e = _a.isValid, isValid = _e === void 0 ? false : _e, label = _a.label, _f = _a.placeholder, placeholder = _f === void 0 ? '' : _f, _g = _a.readOnly, readOnly = _g === void 0 ? false : _g, _h = _a.required, required = _h === void 0 ? false : _h, _j = _a.variant, variant = _j === void 0 ? 'text' : _j, _k = _a.value, value = _k === void 0 ? '' : _k, _l = _a.onChange, onChange = _l === void 0 ? function () { } : _l, _m = _a.maxLength, maxLength = _m === void 0 ? undefined : _m, props = __rest(_a, ["descText", "disabled", "icon", "id", "size", "isValid", "label", "placeholder", "readOnly", "required", "variant", "value", "onChange", "maxLength"]);
1554
- var _o = React.useState(false), isShow = _o[0], setIsShow = _o[1];
1555
- var _p = styleConfig[variant], fieldStyle = _p.fieldStyle, iconStyle = _p.iconStyle;
1556
- var _q = sizeConfig$a[size], iconSize = _q.iconSize, fieldSize = _q.fieldSize, iconPosition = _q.iconPosition;
1633
+ var descText = _a.descText, _b = _a.disabled, disabled = _b === void 0 ? false : _b, icon = _a.icon, _c = _a.id, id = _c === void 0 ? '' : _c, _d = _a.size, size = _d === void 0 ? 'md' : _d, _e = _a.isValid, isValid = _e === void 0 ? false : _e, label = _a.label, _f = _a.placeholder, placeholder = _f === void 0 ? '' : _f, _g = _a.readOnly, readOnly = _g === void 0 ? false : _g, _h = _a.required, required = _h === void 0 ? false : _h, _j = _a.variant, variant = _j === void 0 ? 'text' : _j, _k = _a.value, value = _k === void 0 ? '' : _k, _l = _a.onChange, onChange = _l === void 0 ? function () { } : _l, _m = _a.maxLength, maxLength = _m === void 0 ? undefined : _m, _o = _a.inputClassName, inputClassName = _o === void 0 ? '' : _o, _p = _a.isFlatRight, isFlatRight = _p === void 0 ? false : _p, props = __rest(_a, ["descText", "disabled", "icon", "id", "size", "isValid", "label", "placeholder", "readOnly", "required", "variant", "value", "onChange", "maxLength", "inputClassName", "isFlatRight"]);
1634
+ var isTransparent = variant.includes('transparent');
1635
+ var _q = React.useState(false), isShow = _q[0], setIsShow = _q[1];
1636
+ var _r = styleConfig[variant], fieldStyle = _r.fieldStyle, iconStyle = _r.iconStyle;
1637
+ var _s = isTransparent
1638
+ ? __assign(__assign({}, sizeConfig$a[size]), { iconPosition: "right-0 ", fieldSize: sizeConfig$a[size].fieldSize +
1639
+ " pe-[".concat(9 + sizeConfig$a[size].iconSize, "px]") }) : sizeConfig$a[size], iconSize = _s.iconSize, fieldSize = _s.fieldSize, iconPosition = _s.iconPosition;
1640
+ var borderStyle = isTransparent
1641
+ ? 'border-transparent bg-transparent' // customize border rule for transparent variant
1642
+ : 'border border-bia-grey-dark-10 bg-primary-white';
1643
+ var iconSizing = iconSize ? "text-[".concat(iconSize, "px]") : 'text-[18px]';
1644
+ var remainWords = maxLength ? maxLength - (value ? value.length : 0) : 0;
1645
+ var isExistValidation = isValid !== null;
1557
1646
  var typeVariant = variant;
1558
1647
  if (variant === 'password')
1559
1648
  typeVariant = isShow ? 'text' : 'password';
1560
- var remainWords = maxLength ? maxLength - (value ? value.length : 0) : 0;
1561
- var isExistValidation = isValid !== null;
1562
1649
  var descColor = 'text-primary-cool';
1563
1650
  if (!disabled && isExistValidation && isValid)
1564
1651
  descColor = 'text-bia-green';
@@ -1577,13 +1664,14 @@ function TextInput(_a) {
1577
1664
  if (variant === 'password') {
1578
1665
  iconElement = (React.createElement(PasswordIcon, { isShow: isShow, showHandler: setIsShow, iconSize: iconSize, disabled: disabled }));
1579
1666
  }
1667
+ var extendedInputClassName = "".concat(fieldStyle, " ").concat(fieldSize, " ").concat(bottomBorderColor, " ").concat(inputClassName, " ").concat(borderStyle, " ").concat(isFlatRight && 'rounded-r-none');
1580
1668
  return (React.createElement("div", { className: "field-group flex w-full flex-col gap-y-2 text-bia-black" },
1581
1669
  React.createElement("label", { htmlFor: id, className: "label text-xs font-semibold" },
1582
1670
  label,
1583
1671
  required && React.createElement("span", { className: "p-1 text-bia-red" }, "*")),
1584
1672
  React.createElement("div", { className: "relative w-full" },
1585
- React.createElement("input", __assign({ className: "field w-full rounded border border-bia-grey-dark-10 bg-primary-white read-only:pointer-events-none read-only:border-bia-grey-light-50 hover:rounded-b-none focus:rounded-b-none focus-visible:outline-none disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-80 disabled:text-bia-grey-active ".concat(fieldStyle, " ").concat(fieldSize, " ").concat(bottomBorderColor), disabled: disabled, id: id, placeholder: placeholder || label, readOnly: readOnly, required: required, type: typeVariant, value: value, onChange: function (e) { return onChange(e); }, maxLength: maxLength }, props)),
1586
- React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 ".concat(iconStyle, " ").concat(iconPosition) }, iconElement)),
1673
+ React.createElement("input", __assign({ className: "field w-full rounded read-only:pointer-events-none read-only:border-bia-grey-light-50 hover:rounded-b-none focus:rounded-b-none focus-visible:outline-none disabled:border-bia-grey-dark-10 disabled:bg-bia-grey-light-80 disabled:text-bia-grey-active ".concat(extendedInputClassName), disabled: disabled, id: id, placeholder: placeholder || label, readOnly: readOnly, required: required, type: typeVariant, value: value, onChange: function (e) { return onChange(e); }, maxLength: maxLength }, props)),
1674
+ React.createElement("div", { className: "absolute inset-y-0 flex items-center pl-3 ".concat(iconStyle, " ").concat(iconPosition, " ").concat(iconSizing) }, iconElement)),
1587
1675
  React.createElement("div", { className: "desc flex justify-between gap-1 text-xs ".concat(descColor) },
1588
1676
  descText && React.createElement("span", null, descText),
1589
1677
  maxLength && (React.createElement("span", null,
@@ -1605,6 +1693,8 @@ TextInput.defaultProps = {
1605
1693
  variant: 'text',
1606
1694
  value: '',
1607
1695
  onChange: function () { },
1696
+ inputClassName: '',
1697
+ isFlatRight: false,
1608
1698
  };
1609
1699
 
1610
1700
  // Desc: Radio button size configuration
@@ -1815,7 +1905,7 @@ function SelectInput(_a) {
1815
1905
  setIsOpen(false);
1816
1906
  } }));
1817
1907
  })))),
1818
- React.createElement("span", { className: "desc mt-2 text-xs text-primary-cool" }, descText)));
1908
+ descText && (React.createElement("span", { className: "desc mt-2 text-xs text-primary-cool" }, descText))));
1819
1909
  }
1820
1910
  SelectInput.defaultProps = {
1821
1911
  descText: '',
@@ -1935,16 +2025,27 @@ var roundedConfig = {
1935
2025
  tn: 'first:rounded-l-radius-tn last:rounded-r-radius-tn',
1936
2026
  };
1937
2027
  var sizeConfig$2 = {
1938
- lg: 'text-size-md leading-[23.94px] px-[13px] py-[10.5px] min-w-[112px]',
1939
- md: 'text-size-base leading-[21px] px-[11px] py-[9px] min-w-[96px]',
1940
- sm: 'text-size-sm leading-[15.96px] px-[7px] py-[5px] min-w-[72px]',
1941
- tn: 'text-size-sm leading-[15.96px] px-[4px] py-[2px] min-w-[64px]',
2028
+ lg: 'text-size-md leading-[23.94px] px-[13px] py-[10.5px] ',
2029
+ md: 'text-size-base leading-[21px] px-[11px] py-[9px] ',
2030
+ sm: 'text-size-sm leading-[15.96px] px-[7px] py-[5px] ',
2031
+ tn: 'text-size-sm leading-[15.96px] px-[4px] py-[2px] ',
2032
+ };
2033
+ var minWidthConfig = {
2034
+ lg: 'min-w-[112px]',
2035
+ md: 'min-w-[96px]',
2036
+ sm: 'min-w-[72px]',
2037
+ tn: 'min-w-[64px]',
1942
2038
  };
1943
2039
 
1944
2040
  function SegmentButtonItem(_a) {
1945
- var _b = _a.selected, selected = _b === void 0 ? false : _b, size = _a.size, children = _a.children, disabled = _a.disabled, onClick = _a.onClick;
2041
+ var _b = _a.selected, selected = _b === void 0 ? false : _b, size = _a.size, children = _a.children, disabled = _a.disabled, _c = _a.isfitContent, isfitContent = _c === void 0 ? false : _c, onClick = _a.onClick;
1946
2042
  var isSelected = selected ? 'selected' : 'notSelected';
1947
- return (React.createElement("button", { type: "button", onClick: onClick, disabled: disabled, className: "group:last:border-l-0 border-[1px] border-l-0 border-bia-grey-dark-10 first:border-l-[1px] focus-visible:z-50 focus-visible:outline focus-visible:outline-[3px] focus-visible:-outline-offset-1 focus-visible:outline-bia-blue-light-50 disabled:cursor-not-allowed disabled:bg-bia-grey-light-80 disabled:text-bia-grey-dark-10 ".concat(isSelectedConfig[isSelected], " ").concat(roundedConfig[size], " ").concat(sizeConfig$2[size]) }, children));
2043
+ var sizingStyle = isfitContent
2044
+ ? "".concat(sizeConfig$2[size])
2045
+ : "".concat(sizeConfig$2[size], " ").concat(minWidthConfig[size]);
2046
+ var radiusStyle = "".concat(roundedConfig[size]);
2047
+ var selectedStyle = "".concat(isSelectedConfig[isSelected]);
2048
+ return (React.createElement("button", { type: "button", onClick: onClick, disabled: disabled, className: "group:last:border-l-0 border-[1px] border-l-0 border-bia-grey-dark-10 first:border-l-[1px] focus-visible:z-50 focus-visible:outline focus-visible:outline-[3px] focus-visible:-outline-offset-1 focus-visible:outline-bia-blue-light-50 disabled:cursor-not-allowed disabled:bg-bia-grey-light-80 disabled:text-bia-grey-dark-10 ".concat(selectedStyle, " ").concat(radiusStyle, " ").concat(sizingStyle) }, children));
1948
2049
  }
1949
2050
 
1950
2051
  function SegmentButtonGroup(_a) {
@@ -1953,7 +2054,7 @@ function SegmentButtonGroup(_a) {
1953
2054
  }
1954
2055
 
1955
2056
  function Modal(_a) {
1956
- var size = _a.size, title = _a.title, open = _a.open, zIndex = _a.zIndex, onClose = _a.onClose, rest = __rest(_a, ["size", "title", "open", "zIndex", "onClose"]);
2057
+ var _b = _a.size, size = _b === void 0 ? 'sm' : _b, title = _a.title, open = _a.open, _c = _a.zIndex, zIndex = _c === void 0 ? 100 : _c, onClose = _a.onClose, rest = __rest(_a, ["size", "title", "open", "zIndex", "onClose"]);
1957
2058
  var modalSize;
1958
2059
  if (size === 'sm') {
1959
2060
  modalSize = 'w-[300px]';
@@ -1975,12 +2076,12 @@ function Modal(_a) {
1975
2076
  if (open) {
1976
2077
  return (
1977
2078
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
1978
- React.createElement("div", { className: "fixed inset-0 flex items-center justify-center bg-bia-black-transparent-75", style: { zIndex: !zIndex && isNaN(zIndex) ? 'auto' : zIndex }, id: "wrapper", onClick: handleClose },
1979
- React.createElement("div", { className: "modal flex flex-col gap-[20px] rounded-[5px] bg-white p-[20px] ".concat(modalSize) },
1980
- React.createElement("div", { className: "flex justify-between" },
1981
- React.createElement("div", { className: " w-[260px] text-wrap font-humnst777 text-[18px] font-bold leading-[21.85px] text-primary-black" }, title),
2079
+ React.createElement("div", { className: "bianic-modal-wrapper fixed inset-0 flex items-center justify-center bg-bia-black-transparent-75", style: { zIndex: !zIndex && isNaN(zIndex) ? 'auto' : zIndex }, id: "", onClick: handleClose },
2080
+ React.createElement("div", { className: "bianic-modal flex flex-col gap-[20px] rounded-[5px] bg-white p-[20px] ".concat(modalSize) },
2081
+ React.createElement("div", { className: "bianic-modal-header flex justify-between" },
2082
+ React.createElement("div", { className: " text-wrap text-left font-humnst777 text-[18px] font-bold leading-[21.85px] text-primary-black" }, title),
1982
2083
  React.createElement(Button, { variant: "subtle", radius: "full-rounded", iconLeft: React.createElement(TbX, null), size: "tn", onClick: function () { return onClose(); } })),
1983
- React.createElement("div", { className: "flex flex-col gap-[20px]" }, rest.children))));
2084
+ React.createElement("div", { className: "bianic-modal-content flex w-full flex-col items-start gap-[20px]" }, rest.children))));
1984
2085
  }
1985
2086
  return null;
1986
2087
  }
@@ -2262,17 +2363,9 @@ var configTab = {
2262
2363
  };
2263
2364
 
2264
2365
  function Tab(_a) {
2265
- var children = _a.children, active = _a.active, icon = _a.icon, disabled = _a.disabled, _b = _a.mode, mode = _b === void 0 ? 'horizontal' : _b, _c = _a.fit, fit = _c === void 0 ? 'fit-content' : _c, _d = _a.size, size = _d === void 0 ? 'md' : _d, _e = _a.card, card = _e === void 0 ? false : _e, rest = __rest(_a, ["children", "active", "icon", "disabled", "mode", "fit", "size", "card"]);
2366
+ var children = _a.children, active = _a.active, icon = _a.icon, disabled = _a.disabled, _b = _a.mode, mode = _b === void 0 ? 'horizontal' : _b, _c = _a.fit, fit = _c === void 0 ? 'fit-content' : _c, _d = _a.size, size = _d === void 0 ? 'md' : _d, rest = __rest(_a, ["children", "active", "icon", "disabled", "mode", "fit", "size"]);
2266
2367
  var disabledKeyTab = disabled || active ? ' pointer-events-none' : '';
2267
2368
  var cursor;
2268
- var cardColor;
2269
- if (active) {
2270
- cardColor = 'bg-white';
2271
- }
2272
- else {
2273
- cardColor =
2274
- 'bg-bia-grey-light-50 hover:bg-bia-grey-light-20 active:bg-bia-grey';
2275
- }
2276
2369
  if (disabled) {
2277
2370
  cursor = 'cursor-not-allowed';
2278
2371
  }
@@ -2282,26 +2375,25 @@ function Tab(_a) {
2282
2375
  else {
2283
2376
  cursor = 'cursor-auto';
2284
2377
  }
2378
+ var horizontalButtonStyle = mode === 'horizontal' ? '-mb-[1px] flex-col' : 'w-full flex-row';
2379
+ var indicatorStyle = configTab[active ? 'true' : 'false'][mode];
2380
+ var indicatorContainerStyle = mode === 'vertical' ? 'w-[3px] justify-end' : 'h-[3px] w-full';
2381
+ var buttonContentStyle = size === 'sm'
2382
+ ? " pt-[10px] ".concat(mode === 'vertical' ? 'pb-[10px] pe-[30px]' : 'px-[30px] pb-[8px]')
2383
+ : "px-[30px] pt-[13px] ".concat(mode === 'vertical' ? 'pb-[13px]' : 'pb-[10px]', " ");
2285
2384
  var activeKeyTab = active
2286
2385
  ? 'group-disabled:text-bia-coolgrey-disabled text-primary-black'
2287
2386
  : 'text-bia-coolgrey group-hover:text-bia-coolgrey-hover group-active:text-bia-coolgrey-active group-disabled:text-bia-coolgrey-disabled';
2288
2387
  return (React.createElement("div", { className: "".concat(mode === 'horizontal' ? 'h-full' : 'w-full', " ").concat(cursor) },
2289
- React.createElement("button", __assign({ type: "button", disabled: disabled }, rest, { className: "-mb-[1px] flex items-stretch justify-between ".concat(card && cardColor, " ").concat(mode === 'horizontal' ? 'flex-col' : 'w-full flex-row', " group relative outline-none ").concat(disabledKeyTab, " ").concat(fit) }),
2290
- React.createElement("div", { className: "flex items-center justify-center ".concat(size === 'sm' ? " pt-[10px] ".concat(mode === 'vertical' ? 'pb-[10px] pe-[30px]' : 'px-[30px] pb-[8px]') : "px-[30px] pt-[13px] ".concat(mode === 'vertical' ? 'pb-[13px]' : 'pb-[10px]', " ")) },
2388
+ React.createElement("button", __assign({ type: "button", disabled: disabled }, rest, { className: "flex items-stretch justify-between ".concat(horizontalButtonStyle, " group relative outline-none ").concat(disabledKeyTab, " ").concat(fit) }),
2389
+ React.createElement("div", { className: "flex items-center justify-center ".concat(buttonContentStyle) },
2291
2390
  React.createElement("div", { className: "flex items-center justify-center " },
2292
2391
  React.createElement("div", { className: "flex items-center space-x-1 text-nowrap ".concat(activeKeyTab, " ").concat(configTab[size].text) },
2293
2392
  icon && React.createElement("div", { className: "mr-[5px]" }, icon),
2294
2393
  children))),
2295
- React.createElement("div", { className: "flex flex-row ".concat(mode === 'vertical' ? 'w-[3px] justify-end' : 'h-[3px] w-full', " items-end") }, !card && (React.createElement("div", { className: "shadow-lg shadow-bia-blue ".concat(configTab[active ? 'true' : 'false'][mode]) }))))));
2394
+ React.createElement("div", { className: "flex flex-row ".concat(indicatorContainerStyle, " items-end") },
2395
+ React.createElement("div", { className: "shadow-lg shadow-bia-blue ".concat(indicatorStyle) })))));
2296
2396
  }
2297
- Tab.defaultProps = {
2298
- children: null,
2299
- mode: 'horizontal',
2300
- fit: 'size-base',
2301
- size: 'md',
2302
- icon: null,
2303
- card: false,
2304
- };
2305
2397
 
2306
2398
  var radiusConfig = {
2307
2399
  none: '',
@@ -2620,7 +2712,7 @@ var classConfig = {
2620
2712
  };
2621
2713
 
2622
2714
  function Tooltip(props) {
2623
- var children = props.children, content = props.content, delay = props.delay, _a = props.direction, direction = _a === void 0 ? 'top' : _a, _b = props.maxWidth, maxWidth = _b === void 0 ? '300px' : _b;
2715
+ var children = props.children, content = props.content, delay = props.delay, _a = props.direction, direction = _a === void 0 ? 'top' : _a, _b = props.maxWidth, maxWidth = _b === void 0 ? undefined : _b;
2624
2716
  var timeout;
2625
2717
  var _c = React.useState(false), active = _c[0], setActive = _c[1];
2626
2718
  var showTip = function () {
@@ -2633,15 +2725,51 @@ function Tooltip(props) {
2633
2725
  setActive(false);
2634
2726
  };
2635
2727
  var _d = classConfig[direction], tooltipContainer = _d.tooltipContainer; _d.triangleContainer; _d.triangleShape;
2636
- return (React.createElement("div", { className: "Tooltip-Wrapper relative flex flex-col w-full h-fit", onMouseEnter: showTip, onMouseLeave: hideTip },
2728
+ var tooltipContainerRef = React.useRef(null);
2729
+ var _e = React.useState({
2730
+ maxWidth: maxWidth + 'px',
2731
+ whiteSpace: 'nowrap',
2732
+ }), tooltipContainerStyle = _e[0], setTooltipContainerStyle = _e[1];
2733
+ var tooltipContainerElement = tooltipContainerRef === null || tooltipContainerRef === void 0 ? void 0 : tooltipContainerRef.current;
2734
+ var scrollWidth = tooltipContainerElement === null || tooltipContainerElement === void 0 ? void 0 : tooltipContainerElement.scrollWidth; // Mendapatkan lebar konten aktual
2735
+ var offsetWidth = tooltipContainerElement === null || tooltipContainerElement === void 0 ? void 0 : tooltipContainerElement.offsetWidth;
2736
+ var offsetHeight = tooltipContainerElement === null || tooltipContainerElement === void 0 ? void 0 : tooltipContainerElement.offsetHeight;
2737
+ React.useEffect(function () {
2738
+ if (scrollWidth && offsetWidth) {
2739
+ var maxWidthNumber = Number(maxWidth);
2740
+ var isMultiLine = offsetHeight > 23; // 23 pixels is the approximate height of one line of text
2741
+ // Tooltip Width and Whitespace Determination Rules:
2742
+ // 1. Default Condition:
2743
+ // - width: fit-content
2744
+ // - whiteSpace: nowrap
2745
+ // 2. When maxWidth is Set:
2746
+ // * Text Exceeds maxWidth:
2747
+ // - width: maxWidth
2748
+ // - whiteSpace: normal
2749
+ // * Text Equals maxWidth (Multi-line):
2750
+ // - width: maxWidth
2751
+ // - whiteSpace: normal
2752
+ // * Text Less Than maxWidth:
2753
+ // - width: fit-content
2754
+ // - whiteSpace: nowrap
2755
+ var newWidth_1 = 'fit-content';
2756
+ var newWhiteSpace_1 = 'nowrap';
2757
+ if (scrollWidth > maxWidthNumber ||
2758
+ (offsetWidth === maxWidthNumber && isMultiLine)) {
2759
+ newWidth_1 = maxWidthNumber + 'px';
2760
+ newWhiteSpace_1 = 'normal';
2761
+ }
2762
+ setTooltipContainerStyle(function (prev) { return (__assign(__assign({}, prev), { width: newWidth_1, whiteSpace: newWhiteSpace_1 })); });
2763
+ }
2764
+ }, [content, maxWidth, scrollWidth, offsetHeight]);
2765
+ return (React.createElement("div", { className: "tooltip-wrapper relative inline-flex h-fit w-fit flex-col", onMouseEnter: showTip, onMouseLeave: hideTip },
2637
2766
  children,
2638
- active && (React.createElement("div", { className: "Tooltip absolute px-[7px] py-[4px] text-size-sm bg-primary-black text-primary-white z-50 whitespace-nowrap rounded-[4px] ".concat(tooltipContainer), style: { maxWidth: maxWidth } },
2639
- React.createElement("p", { className: " whitespace-pre-wrap break-words" }, content)))));
2767
+ active && (React.createElement("div", { className: "tooltip-container break-word absolute z-50 inline-block break-all rounded-[4px] bg-primary-black px-[7px] py-[4px] text-size-sm text-primary-white ".concat(tooltipContainer), style: tooltipContainerStyle, ref: tooltipContainerRef }, content))));
2640
2768
  }
2641
2769
  Tooltip.defaultProps = {
2642
2770
  delay: 400,
2643
2771
  direction: 'top',
2644
- maxWidth: '300px',
2772
+ maxWidth: '300',
2645
2773
  };
2646
2774
  Tooltip.defaultProps = {};
2647
2775
 
@@ -2658,8 +2786,11 @@ exports.Checkbox = Checkbox;
2658
2786
  exports.Color = Color;
2659
2787
  exports.Display = Display;
2660
2788
  exports.Divider = Divider;
2789
+ exports.FileTree = FileTree;
2661
2790
  exports.Heading = Heading;
2662
2791
  exports.LiveSearch = LiveSearch;
2792
+ exports.MenuContainer = MenuContainer;
2793
+ exports.MenuItem = MenuItem;
2663
2794
  exports.Modal = Modal;
2664
2795
  exports.P = P;
2665
2796
  exports.PaginationBar = PaginationBar;