@rovula/ui 0.0.65 → 0.0.67

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 (129) hide show
  1. package/dist/cjs/bundle.css +993 -979
  2. package/dist/cjs/bundle.js +3 -3
  3. package/dist/cjs/bundle.js.map +1 -1
  4. package/dist/cjs/types/components/ActionButton/ActionButton.d.ts +6 -6
  5. package/dist/cjs/types/components/ActionButton/ActionButton.stories.d.ts +97 -96
  6. package/dist/cjs/types/components/AlertDialog/AlertDialog.stories.d.ts +1 -1
  7. package/dist/cjs/types/components/Avatar/Avatar.stories.d.ts +7 -7
  8. package/dist/cjs/types/components/Avatar/AvatarGroup.stories.d.ts +1 -1
  9. package/dist/cjs/types/components/Button/Button.d.ts +9 -9
  10. package/dist/cjs/types/components/Button/Buttons.stories.d.ts +139 -138
  11. package/dist/cjs/types/components/Calendar/Calendar.stories.d.ts +213 -388
  12. package/dist/cjs/types/components/Checkbox/Checkbox.stories.d.ts +92 -91
  13. package/dist/cjs/types/components/Collapsible/Collapsible.d.ts +3 -3
  14. package/dist/cjs/types/components/DataTable/DataTable.stories.d.ts +1 -1
  15. package/dist/cjs/types/components/DatePicker/DatePicker.stories.d.ts +224 -399
  16. package/dist/cjs/types/components/Dialog/Dialog.d.ts +2 -2
  17. package/dist/cjs/types/components/Dialog/Dialog.stories.d.ts +1 -1
  18. package/dist/cjs/types/components/Dropdown/Dropdown.d.ts +21 -21
  19. package/dist/cjs/types/components/Dropdown/Dropdown.stories.d.ts +134 -134
  20. package/dist/cjs/types/components/DropdownMenu/DropdownMenu.d.ts +3 -3
  21. package/dist/cjs/types/components/DropdownMenu/DropdownMenu.stories.d.ts +1 -1
  22. package/dist/cjs/types/components/Icon/Icon.stories.d.ts +294 -294
  23. package/dist/cjs/types/components/Input/Input.d.ts +8 -8
  24. package/dist/cjs/types/components/Input/Input.stories.d.ts +225 -225
  25. package/dist/cjs/types/components/InputFilter/InputFilter.d.ts +18 -18
  26. package/dist/cjs/types/components/InputFilter/InputFilter.stories.d.ts +127 -127
  27. package/dist/cjs/types/components/Label/Label.stories.d.ts +87 -86
  28. package/dist/cjs/types/components/Loading/Loading.stories.d.ts +10 -10
  29. package/dist/cjs/types/components/Navbar/Navbar.stories.d.ts +1 -1
  30. package/dist/cjs/types/components/Popover/Popover.stories.d.ts +1 -1
  31. package/dist/cjs/types/components/ProgressBar/ProgressBar.stories.d.ts +9 -9
  32. package/dist/cjs/types/components/RadioGroup/RadioGroup.stories.d.ts +85 -84
  33. package/dist/cjs/types/components/Search/Search.stories.d.ts +114 -114
  34. package/dist/cjs/types/components/Slider/Slider.stories.d.ts +85 -83
  35. package/dist/cjs/types/components/Switch/Switch.stories.d.ts +92 -91
  36. package/dist/cjs/types/components/Table/Table.d.ts +2 -2
  37. package/dist/cjs/types/components/Table/Table.stories.d.ts +87 -86
  38. package/dist/cjs/types/components/Tabs/Tabs.d.ts +6 -0
  39. package/dist/cjs/types/components/Tabs/Tabs.stories.d.ts +57 -31
  40. package/dist/cjs/types/components/Text/Text.stories.d.ts +3 -3
  41. package/dist/cjs/types/components/TextInput/TextInput.d.ts +21 -21
  42. package/dist/cjs/types/components/TextInput/TextInput.stories.d.ts +128 -128
  43. package/dist/cjs/types/components/Toast/Toast.stories.d.ts +91 -90
  44. package/dist/cjs/types/components/Tooltip/Tooltip.stories.d.ts +1 -1
  45. package/dist/cjs/types/icons/type.d.ts +0 -1
  46. package/dist/components/Dropdown/Dropdown.js +8 -10
  47. package/dist/components/Tabs/Tabs.js +24 -15
  48. package/dist/components/Tabs/Tabs.stories.js +12 -0
  49. package/dist/esm/bundle.css +993 -979
  50. package/dist/esm/bundle.js +3 -3
  51. package/dist/esm/bundle.js.map +1 -1
  52. package/dist/esm/types/components/ActionButton/ActionButton.d.ts +6 -6
  53. package/dist/esm/types/components/ActionButton/ActionButton.stories.d.ts +97 -96
  54. package/dist/esm/types/components/AlertDialog/AlertDialog.stories.d.ts +1 -1
  55. package/dist/esm/types/components/Avatar/Avatar.stories.d.ts +7 -7
  56. package/dist/esm/types/components/Avatar/AvatarGroup.stories.d.ts +1 -1
  57. package/dist/esm/types/components/Button/Button.d.ts +9 -9
  58. package/dist/esm/types/components/Button/Buttons.stories.d.ts +139 -138
  59. package/dist/esm/types/components/Calendar/Calendar.stories.d.ts +213 -388
  60. package/dist/esm/types/components/Checkbox/Checkbox.stories.d.ts +92 -91
  61. package/dist/esm/types/components/Collapsible/Collapsible.d.ts +3 -3
  62. package/dist/esm/types/components/DataTable/DataTable.stories.d.ts +1 -1
  63. package/dist/esm/types/components/DatePicker/DatePicker.stories.d.ts +224 -399
  64. package/dist/esm/types/components/Dialog/Dialog.d.ts +2 -2
  65. package/dist/esm/types/components/Dialog/Dialog.stories.d.ts +1 -1
  66. package/dist/esm/types/components/Dropdown/Dropdown.d.ts +21 -21
  67. package/dist/esm/types/components/Dropdown/Dropdown.stories.d.ts +134 -134
  68. package/dist/esm/types/components/DropdownMenu/DropdownMenu.d.ts +3 -3
  69. package/dist/esm/types/components/DropdownMenu/DropdownMenu.stories.d.ts +1 -1
  70. package/dist/esm/types/components/Icon/Icon.stories.d.ts +294 -294
  71. package/dist/esm/types/components/Input/Input.d.ts +8 -8
  72. package/dist/esm/types/components/Input/Input.stories.d.ts +225 -225
  73. package/dist/esm/types/components/InputFilter/InputFilter.d.ts +18 -18
  74. package/dist/esm/types/components/InputFilter/InputFilter.stories.d.ts +127 -127
  75. package/dist/esm/types/components/Label/Label.stories.d.ts +87 -86
  76. package/dist/esm/types/components/Loading/Loading.stories.d.ts +10 -10
  77. package/dist/esm/types/components/Navbar/Navbar.stories.d.ts +1 -1
  78. package/dist/esm/types/components/Popover/Popover.stories.d.ts +1 -1
  79. package/dist/esm/types/components/ProgressBar/ProgressBar.stories.d.ts +9 -9
  80. package/dist/esm/types/components/RadioGroup/RadioGroup.stories.d.ts +85 -84
  81. package/dist/esm/types/components/Search/Search.stories.d.ts +114 -114
  82. package/dist/esm/types/components/Slider/Slider.stories.d.ts +85 -83
  83. package/dist/esm/types/components/Switch/Switch.stories.d.ts +92 -91
  84. package/dist/esm/types/components/Table/Table.d.ts +2 -2
  85. package/dist/esm/types/components/Table/Table.stories.d.ts +87 -86
  86. package/dist/esm/types/components/Tabs/Tabs.d.ts +6 -0
  87. package/dist/esm/types/components/Tabs/Tabs.stories.d.ts +57 -31
  88. package/dist/esm/types/components/Text/Text.stories.d.ts +3 -3
  89. package/dist/esm/types/components/TextInput/TextInput.d.ts +21 -21
  90. package/dist/esm/types/components/TextInput/TextInput.stories.d.ts +128 -128
  91. package/dist/esm/types/components/Toast/Toast.stories.d.ts +91 -90
  92. package/dist/esm/types/components/Tooltip/Tooltip.stories.d.ts +1 -1
  93. package/dist/esm/types/icons/type.d.ts +0 -1
  94. package/dist/index.d.ts +99 -93
  95. package/dist/src/theme/global.css +998 -981
  96. package/package.json +2 -1
  97. package/src/components/Dropdown/Dropdown.tsx +9 -11
  98. package/src/components/Tabs/Tabs.stories.tsx +38 -0
  99. package/src/components/Tabs/Tabs.tsx +31 -9
  100. package/dist/theme/global.css +0 -30
  101. package/dist/theme/main-preset.js +0 -283
  102. package/dist/theme/plugins/utilities/typography.js +0 -93
  103. package/dist/theme/presets/colors.js +0 -136
  104. package/dist/theme/theme.d.ts +0 -69
  105. package/dist/theme/themes/xspector/baseline.css +0 -9
  106. package/dist/theme/themes/xspector/color.css +0 -81
  107. package/dist/theme/themes/xspector/components/action-button.css +0 -100
  108. package/dist/theme/themes/xspector/components/dropdown-menu.css +0 -28
  109. package/dist/theme/themes/xspector/components/loading.css +0 -11
  110. package/dist/theme/themes/xspector/components/switch.css +0 -30
  111. package/dist/theme/themes/xspector/palette.css +0 -122
  112. package/dist/theme/themes/xspector/state.css +0 -89
  113. package/dist/theme/themes/xspector/transparent.css +0 -68
  114. package/dist/theme/themes/xspector/typography.css +0 -27
  115. package/dist/theme/tokens/baseline.css +0 -12
  116. package/dist/theme/tokens/color.css +0 -78
  117. package/dist/theme/tokens/components/action-button.css +0 -127
  118. package/dist/theme/tokens/components/button.css +0 -512
  119. package/dist/theme/tokens/components/dropdown-menu.css +0 -27
  120. package/dist/theme/tokens/components/loading.css +0 -11
  121. package/dist/theme/tokens/components/navbar.css +0 -8
  122. package/dist/theme/tokens/components/progress-bar.css +0 -8
  123. package/dist/theme/tokens/components/switch.css +0 -30
  124. package/dist/theme/tokens/palette.css +0 -122
  125. package/dist/theme/tokens/state.css +0 -82
  126. package/dist/theme/tokens/transparent.css +0 -68
  127. package/dist/theme/tokens/typography.css +0 -199
  128. package/dist/theme/tokens/variables.css +0 -28
  129. package/dist/theme/utils.js +0 -109
@@ -17,7 +17,7 @@ import { customInputVariant, dropdownIconVariant, iconWrapperVariant, } from "./
17
17
  import { ChevronDownIcon } from "@heroicons/react/16/solid";
18
18
  import { cn } from "@/utils/cn";
19
19
  const Dropdown = forwardRef((_a, ref) => {
20
- var { id, options = [], value, label, size = "md", rounded = "normal", variant = "outline", helperText, errorMessage, fullwidth = true, disabled = false, error = false, filterMode = false, required = true, modal = true, onChangeText, onSelect, renderOptions: customRenderOptions, optionContainerClassName, optionItemClassName, optionNotFoundItemClassName } = _a, props = __rest(_a, ["id", "options", "value", "label", "size", "rounded", "variant", "helperText", "errorMessage", "fullwidth", "disabled", "error", "filterMode", "required", "modal", "onChangeText", "onSelect", "renderOptions", "optionContainerClassName", "optionItemClassName", "optionNotFoundItemClassName"]);
20
+ var { id, options = [], value, label, size = "md", rounded = "normal", variant = "outline", helperText, errorMessage, fullwidth = true, disabled = false, error = false, filterMode = false, required = true, modal = false, onChangeText, onSelect, renderOptions: customRenderOptions, optionContainerClassName, optionItemClassName, optionNotFoundItemClassName } = _a, props = __rest(_a, ["id", "options", "value", "label", "size", "rounded", "variant", "helperText", "errorMessage", "fullwidth", "disabled", "error", "filterMode", "required", "modal", "onChangeText", "onSelect", "renderOptions", "optionContainerClassName", "optionItemClassName", "optionNotFoundItemClassName"]);
21
21
  const _id = id || `${label}-select`;
22
22
  const [isFocused, setIsFocused] = useState(false);
23
23
  const [selectedOption, setSelectedOption] = useState(null);
@@ -66,6 +66,7 @@ const Dropdown = forwardRef((_a, ref) => {
66
66
  ((_a = option.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(textValue === null || textValue === void 0 ? void 0 : textValue.toLowerCase()));
67
67
  });
68
68
  }, [options, filterMode, textValue]);
69
+ const usePortal = isInsideDialog ? false : modal;
69
70
  const updateDropdownPosition = useCallback(() => {
70
71
  if (inputRef.current && dropdownRef.current) {
71
72
  const rect = inputRef.current.getBoundingClientRect();
@@ -74,7 +75,6 @@ const Dropdown = forwardRef((_a, ref) => {
74
75
  const spaceAbove = rect.top;
75
76
  const shouldOpenAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow;
76
77
  setIsAbove(shouldOpenAbove);
77
- const usePortal = isInsideDialog ? false : modal;
78
78
  if (usePortal) {
79
79
  setDropdownStyles({
80
80
  position: "absolute",
@@ -83,7 +83,7 @@ const Dropdown = forwardRef((_a, ref) => {
83
83
  : `${rect.bottom}px`,
84
84
  left: `${rect.left}px`,
85
85
  width: `${rect.width}px`,
86
- zIndex: 9999, // Ensure it's above everything
86
+ zIndex: 9999,
87
87
  });
88
88
  }
89
89
  else {
@@ -92,20 +92,18 @@ const Dropdown = forwardRef((_a, ref) => {
92
92
  top: shouldOpenAbove ? `-${dropdownHeight}px` : "100%",
93
93
  left: "0",
94
94
  width: "100%",
95
- zIndex: 10,
95
+ zIndex: 9999,
96
96
  });
97
97
  }
98
98
  }
99
- }, [modal, isInsideDialog]);
99
+ }, [modal, isInsideDialog, usePortal]);
100
100
  useEffect(() => {
101
101
  if (isFocused) {
102
102
  updateDropdownPosition();
103
103
  window.addEventListener("resize", updateDropdownPosition);
104
- window.addEventListener("scroll", updateDropdownPosition, true);
105
104
  }
106
105
  return () => {
107
106
  window.removeEventListener("resize", updateDropdownPosition);
108
- window.removeEventListener("scroll", updateDropdownPosition, true);
109
107
  };
110
108
  }, [isFocused, updateDropdownPosition]);
111
109
  const renderOptions = () => {
@@ -118,7 +116,7 @@ const Dropdown = forwardRef((_a, ref) => {
118
116
  dropdownRef,
119
117
  });
120
118
  }
121
- return (_jsxs("ul", { className: cn("absolute mt-1 w-full bg-base-popup border border-base-popup text-base-popup-foreground rounded-md shadow-md z-[9999] max-h-60 overflow-y-auto", isAbove ? "bottom-full mb-1" : "top-full mt-1", optionContainerClassName), style: dropdownStyles, ref: dropdownRef, children: [optionsFiltered.map((option) => {
119
+ return (_jsxs("ul", { className: cn("absolute mt-1 w-full bg-base-popup border border-base-popup text-base-popup-foreground rounded-md shadow-md z-[9999] max-h-60 overflow-y-auto", !usePortal && (isAbove ? "bottom-full mb-1" : "top-full mt-1"), optionContainerClassName), style: dropdownStyles, ref: dropdownRef, children: [optionsFiltered.map((option) => {
122
120
  if (option.renderLabel) {
123
121
  return (_jsx(Fragment, { children: option.renderLabel({
124
122
  value: option.value,
@@ -172,7 +170,7 @@ const Dropdown = forwardRef((_a, ref) => {
172
170
  keyCode.current = e.code;
173
171
  (_a = props === null || props === void 0 ? void 0 : props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
174
172
  }, [props === null || props === void 0 ? void 0 : props.onKeyDown]);
175
- return (_jsxs("div", { className: `relative ${fullwidth ? "w-full" : ""}`, children: [_jsx(TextInput, Object.assign({ hasClearIcon: false, endIcon: _jsx("div", { className: iconWrapperVariant({ size }), children: _jsx(ChevronDownIcon, { className: dropdownIconVariant({ size, isFocus: isFocused }) }) }) }, props, { ref: inputRef, readOnly: !filterMode, value: textValue, onChange: handleOnChangeText, label: label, placeholder: " ", type: "text", autoComplete: "off", rounded: rounded, variant: variant, helperText: helperText, errorMessage: errorMessage, fullwidth: fullwidth, error: error, required: required, id: _id, disabled: disabled, size: size, className: customInputVariant({ size }), onFocus: handleOnFocus, onBlur: handleOnBlur, onKeyDown: handleOnKeyDown })), isFocused &&
176
- ((isInsideDialog ? false : modal) ? (_jsx(Portal.Root, { container: document.body, children: renderOptions() })) : (renderOptions()))] }));
173
+ return (_jsxs("div", { className: `relative ${fullwidth ? "w-full" : ""}`, children: [_jsx(TextInput, Object.assign({ hasClearIcon: false, endIcon: _jsx("div", { className: iconWrapperVariant({ size }), children: _jsx(ChevronDownIcon, { className: dropdownIconVariant({ size, isFocus: isFocused }) }) }) }, props, { ref: inputRef, readOnly: !filterMode, value: textValue, onChange: handleOnChangeText, label: label, placeholder: " ", type: "text", autoComplete: "off", rounded: rounded, variant: variant, helperText: helperText, errorMessage: errorMessage, fullwidth: fullwidth, error: error, required: required, id: _id, disabled: disabled, size: size, className: customInputVariant({ size }), onFocus: handleOnFocus, onBlur: handleOnBlur, onKeyDown: handleOnKeyDown })), isFocused &&
174
+ (usePortal ? (_jsx(Portal.Root, { container: document.body, children: renderOptions() })) : (renderOptions()))] }));
177
175
  });
178
176
  export default Dropdown;
@@ -5,7 +5,7 @@ import "./Tabs.css";
5
5
  import ActionButton from "../ActionButton/ActionButton";
6
6
  import Icon from "../Icon/Icon";
7
7
  import { Loading } from "@/index";
8
- const Tabs = ({ tabs = [], value, initialTab = 0, tabBarSize = 38, enableBorderLine = true, enableAddTabButton = false, keepIconSpace = true, disabled = false, keepMounted = false, tabMode = "start", className, tabBarClassName, tabBarContainerClassName, tabBarWrapperClassName, tabButtonClassName, tabButtonActiveClassName, tabContentClassName, addTabButtonWrapperClassName, borderSliderClassName, leftAction, rightAction, onAddTab, onTabChange, }) => {
8
+ const Tabs = ({ tabs = [], value, initialTab = 0, tabBarSize = 38, enableBorderLine = true, enableAddTabButton = false, keepIconSpace = true, disabled = false, keepMounted = false, tabMode = "start", className, tabBarClassName, tabBarContainerClassName, tabBarWrapperClassName, tabButtonClassName, tabButtonActiveClassName, tabButtonActiveDisableClassName, tabButtonDisableClassName, tabContentClassName, addTabButtonWrapperClassName, borderSliderClassName, leftAction, rightAction, onAddTab, onTabChange, }) => {
9
9
  const [activeTab, setActiveTab] = useState(initialTab);
10
10
  const [sliderStyle, setSliderStyle] = useState({
11
11
  width: "0px",
@@ -62,25 +62,34 @@ const Tabs = ({ tabs = [], value, initialTab = 0, tabBarSize = 38, enableBorderL
62
62
  [`border-b-[1px] border-base-stroke`]: enableBorderLine,
63
63
  "border-state-disable-outline": disabled,
64
64
  "flex-1": tabMode === "justify",
65
- tabBarContainerClassName,
66
- }), children: [leftAction, _jsx("div", { className: cn("relative flex flex-row overflow-x-auto", {
65
+ }, tabBarContainerClassName), children: [leftAction, _jsx("div", { className: cn("relative flex flex-row overflow-x-auto", {
67
66
  "flex-1": tabMode === "justify",
68
67
  }, tabBarWrapperClassName), children: _jsxs("div", { className: cn("tabs-scrollbar overflow-x-auto w-full", `relative flex gap-3 h-[${tabBarSize}px] box-border`, {
69
68
  "gap-0": tabMode === "justify",
70
69
  }, tabBarClassName), style: {
71
70
  justifyContent: tabMode === "justify" ? "stretch" : tabMode,
72
- }, role: "tablist", children: [tabs.map((tab, index) => (_jsxs("button", { ref: (el) => (tabRefs.current[index] = el), role: "tab", "aria-selected": index === activeTab, "aria-controls": `tab-content-${index}`, disabled: disabled || tab.disabled, id: `tab-${index}`, className: cn("flex justify-center flex-row items-center py-3 cursor-pointer transition-colors duration-300 box-border gap-1 flex-shrink-0 typography-subtitile6", {
73
- "text-foreground": index === activeTab,
74
- "text-text-grey-medium hover:text-text-grey-dark active:text-text-dark": index !== activeTab,
75
- "text-state-disable-solid pointer-events-none": disabled || tab.disabled,
76
- "text-state-disable-outline": (index === activeTab && disabled) || tab.disabled,
77
- [tabButtonClassName !== null && tabButtonClassName !== void 0 ? tabButtonClassName : ""]: true,
78
- [tabButtonActiveClassName !== null && tabButtonActiveClassName !== void 0 ? tabButtonActiveClassName : ""]: index === activeTab,
79
- "flex-1": tabMode === "justify",
80
- }), onClick: () => {
81
- setActiveTab(index);
82
- onTabChange === null || onTabChange === void 0 ? void 0 : onTabChange(index);
83
- }, children: [(keepIconSpace || tab.startTabContent) && (_jsx("div", { className: "h-full w-3 flex items-center justify-center", children: tab.isLoading ? _jsx(Loading, {}) : tab.startTabContent })), tab.label, (keepIconSpace || tab.endTabContent) && (_jsx("div", { className: "h-full w-3 flex items-center justify-center", children: tab.endTabContent }))] }, index))), _jsx("div", { className: cn(`absolute left-0 bottom-0 h-[2px] rounded-full bg-foreground transition-all duration-300 ease-in-out`, {
71
+ }, role: "tablist", children: [tabs.map((tab, index) => {
72
+ var _a, _b, _c, _d, _e, _f, _g, _h;
73
+ return (_jsxs("button", { ref: (el) => (tabRefs.current[index] = el), role: "tab", "aria-selected": index === activeTab, "aria-controls": `tab-content-${index}`, disabled: disabled || tab.disabled, id: `tab-${index}`, className: cn("flex justify-center flex-row items-center py-3 cursor-pointer transition-colors duration-300 box-border gap-1 flex-shrink-0 typography-subtitile6", {
74
+ "text-foreground": index === activeTab,
75
+ "text-text-grey-medium hover:text-text-grey-dark active:text-text-dark": index !== activeTab,
76
+ // -- disabled
77
+ "text-state-disable-solid pointer-events-none": disabled || tab.disabled,
78
+ [(_b = (_a = tab.disableClassName) !== null && _a !== void 0 ? _a : tabButtonDisableClassName) !== null && _b !== void 0 ? _b : ""]: disabled || tab.disabled,
79
+ // --
80
+ "text-state-disable-outline": index === activeTab && (disabled || tab.disabled),
81
+ // -- active disabled --
82
+ [(_d = (_c = tab.activeDisableClassName) !== null && _c !== void 0 ? _c : tabButtonActiveDisableClassName) !== null && _d !== void 0 ? _d : ""]: index === activeTab && (disabled || tab.disabled),
83
+ // -- class name
84
+ [(_f = (_e = tab.className) !== null && _e !== void 0 ? _e : tabButtonClassName) !== null && _f !== void 0 ? _f : ""]: true,
85
+ // -- active --
86
+ [(_h = (_g = tab.activeClassName) !== null && _g !== void 0 ? _g : tabButtonActiveClassName) !== null && _h !== void 0 ? _h : ""]: index === activeTab,
87
+ "flex-1": tabMode === "justify",
88
+ }), onClick: () => {
89
+ setActiveTab(index);
90
+ onTabChange === null || onTabChange === void 0 ? void 0 : onTabChange(index);
91
+ }, children: [(keepIconSpace || tab.startTabContent) && (_jsx("div", { className: "h-full w-3 flex items-center justify-center", children: tab.isLoading ? _jsx(Loading, {}) : tab.startTabContent })), tab.label, (keepIconSpace || tab.endTabContent) && (_jsx("div", { className: "h-full w-3 flex items-center justify-center", children: tab.endTabContent }))] }, index));
92
+ }), _jsx("div", { className: cn(`absolute left-0 bottom-0 h-[2px] rounded-full bg-foreground transition-all duration-300 ease-in-out`, {
84
93
  "bg-state-disable-solid": disabled,
85
94
  }, borderSliderClassName), style: sliderStyle })] }) }), enableAddTabButton && (_jsx("div", { className: cn("sticky right-0 flex content-center items-center mx-4", addTabButtonWrapperClassName), children: _jsx(ActionButton, { variant: "outline", size: "sm", onClick: () => onAddTab === null || onAddTab === void 0 ? void 0 : onAddTab(), disabled: disabled, children: _jsx(Icon, { name: "plus" }) }) })), rightAction] }), _jsx("div", { className: cn("mt-4 text-foreground", tabContentClassName), role: "tabpanel", id: `tab-content-${activeTab}`, "aria-labelledby": `tab-${activeTab}`, children: tabs.map((tab, idx) => {
86
95
  var _a;
@@ -174,3 +174,15 @@ export const Controller = {
174
174
  } }))] }));
175
175
  },
176
176
  };
177
+ export const CustomClassname = {
178
+ args: {
179
+ initialTab: 0,
180
+ tabs: tabs.map((tab, i) => (Object.assign(Object.assign({}, tab), { disabled: i !== 0, activeClassName: "text-green-500",
181
+ // className: "text-red-500",
182
+ disableClassName: i === 1 && "text-pink-200", activeDisableClassName: "text-red-500" }))),
183
+ },
184
+ render: (args) => {
185
+ const props = Object.assign({}, args);
186
+ return (_jsxs("div", { className: "flex flex-row gap-4", children: [_jsx(Tabs, Object.assign({ tabs: tabs }, props, { tabButtonDisableClassName: "text-red-500", tabButtonActiveDisableClassName: "text-blue-500", tabBarContainerClassName: "border-red-500" })), _jsx(Tabs, Object.assign({ tabs: tabs }, props, { disabled: true, tabButtonDisableClassName: "text-red-500", tabButtonActiveDisableClassName: "text-blue-500", tabBarContainerClassName: "border-blue-500" }))] }));
187
+ },
188
+ };