uiplex 1.0.2 → 1.1.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.
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ import "./Tabs.css";
3
+ export interface TabsProps {
4
+ children: React.ReactNode;
5
+ defaultIndex?: number;
6
+ index?: number;
7
+ onChange?: (index: number) => void;
8
+ variant?: "line" | "enclosed" | "soft-rounded";
9
+ size?: "sm" | "md" | "lg";
10
+ colorScheme?: "blue" | "green" | "red" | "yellow" | "purple" | "gray";
11
+ orientation?: "horizontal" | "vertical";
12
+ className?: string;
13
+ style?: React.CSSProperties;
14
+ }
15
+ export declare const Tabs: React.FC<TabsProps>;
16
+ export interface TabListProps {
17
+ children: React.ReactNode;
18
+ className?: string;
19
+ style?: React.CSSProperties;
20
+ }
21
+ export declare const TabList: React.FC<TabListProps>;
22
+ export interface TabProps {
23
+ children: React.ReactNode;
24
+ index?: number;
25
+ disabled?: boolean;
26
+ icon?: React.ReactNode;
27
+ className?: string;
28
+ style?: React.CSSProperties;
29
+ }
30
+ export declare const Tab: React.FC<TabProps>;
31
+ export interface TabPanelsProps {
32
+ children: React.ReactNode;
33
+ className?: string;
34
+ style?: React.CSSProperties;
35
+ }
36
+ export declare const TabPanels: React.FC<TabPanelsProps>;
37
+ export interface TabPanelProps {
38
+ children: React.ReactNode;
39
+ index?: number;
40
+ className?: string;
41
+ style?: React.CSSProperties;
42
+ }
43
+ export declare const TabPanel: React.FC<TabPanelProps>;
44
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmE,MAAM,OAAO,CAAC;AACxF,OAAO,YAAY,CAAC;AAuBpB,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,CAAC;IAC/C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtE,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAmDpC,CAAC;AAGF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAoB1C,CAAC;AAGF,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CA6FlC,CAAC;AAGF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAU9C,CAAC;AAGF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA6B5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Tabs, TabList, Tab, TabPanels, TabPanel, } from "./Tabs";
2
+ export type { TabsProps, TabListProps, TabProps, TabPanelsProps, TabPanelProps, } from "./Tabs";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,OAAO,EACP,GAAG,EACH,SAAS,EACT,QAAQ,GACT,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,aAAa,GACd,MAAM,QAAQ,CAAC"}
package/dist/index.cjs CHANGED
@@ -1067,6 +1067,126 @@ const ToastContainerGlobal = () => {
1067
1067
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: positionsWithToasts.map((position) => (jsxRuntime.jsx(ToastContainer, { toasts: toastsByPosition[position], position: position, onClose: handleClose }, position))) }));
1068
1068
  };
1069
1069
 
1070
+ const TabContext = React.createContext(undefined);
1071
+ const useTabContext = () => {
1072
+ const context = React.useContext(TabContext);
1073
+ if (!context) {
1074
+ throw new Error("Tab components must be used within a Tabs component");
1075
+ }
1076
+ return context;
1077
+ };
1078
+ const Tabs = ({ children, defaultIndex = 0, index: controlledIndex, onChange, variant = "line", size = "md", colorScheme = "blue", orientation = "horizontal", className = "", style, }) => {
1079
+ const [uncontrolledIndex, setUncontrolledIndex] = React.useState(defaultIndex);
1080
+ const isControlled = controlledIndex !== undefined;
1081
+ const activeIndex = isControlled ? controlledIndex : uncontrolledIndex;
1082
+ const setActiveIndex = React.useCallback((newIndex) => {
1083
+ if (!isControlled) {
1084
+ setUncontrolledIndex(newIndex);
1085
+ }
1086
+ onChange?.(newIndex);
1087
+ }, [isControlled, onChange]);
1088
+ const contextValue = {
1089
+ activeIndex,
1090
+ setActiveIndex,
1091
+ variant,
1092
+ size,
1093
+ colorScheme,
1094
+ orientation,
1095
+ };
1096
+ const tabsClasses = [
1097
+ "ui-tabs",
1098
+ `ui-tabs--${orientation}`,
1099
+ `ui-tabs--${variant}`,
1100
+ className,
1101
+ ]
1102
+ .filter(Boolean)
1103
+ .join(" ");
1104
+ return (jsxRuntime.jsx(TabContext.Provider, { value: contextValue, children: jsxRuntime.jsx("div", { className: tabsClasses, style: style, role: "tablist", children: children }) }));
1105
+ };
1106
+ const TabList = ({ children, className = "", style, }) => {
1107
+ const { orientation } = useTabContext();
1108
+ const tabListClasses = [
1109
+ "ui-tab-list",
1110
+ `ui-tab-list--${orientation}`,
1111
+ className,
1112
+ ]
1113
+ .filter(Boolean)
1114
+ .join(" ");
1115
+ return (jsxRuntime.jsx("div", { className: tabListClasses, style: style, role: "tablist", children: children }));
1116
+ };
1117
+ const Tab = ({ children, index = 0, disabled = false, icon, className = "", style, }) => {
1118
+ const { activeIndex, setActiveIndex, variant, size, colorScheme } = useTabContext();
1119
+ const tabRef = React.useRef(null);
1120
+ const isActive = activeIndex === index;
1121
+ const handleClick = () => {
1122
+ if (!disabled) {
1123
+ setActiveIndex(index);
1124
+ }
1125
+ };
1126
+ const handleKeyDown = (e) => {
1127
+ if (disabled)
1128
+ return;
1129
+ const tabs = Array.from(document.querySelectorAll(`.ui-tab-list [role="tab"]:not([aria-disabled="true"])`));
1130
+ const currentTabIndex = tabs.findIndex((tab) => tab === tabRef.current);
1131
+ let nextIndex = currentTabIndex;
1132
+ switch (e.key) {
1133
+ case "ArrowRight":
1134
+ case "ArrowDown":
1135
+ e.preventDefault();
1136
+ nextIndex = (currentTabIndex + 1) % tabs.length;
1137
+ break;
1138
+ case "ArrowLeft":
1139
+ case "ArrowUp":
1140
+ e.preventDefault();
1141
+ nextIndex = currentTabIndex - 1 < 0 ? tabs.length - 1 : currentTabIndex - 1;
1142
+ break;
1143
+ case "Home":
1144
+ e.preventDefault();
1145
+ nextIndex = 0;
1146
+ break;
1147
+ case "End":
1148
+ e.preventDefault();
1149
+ nextIndex = tabs.length - 1;
1150
+ break;
1151
+ default:
1152
+ return;
1153
+ }
1154
+ const nextTab = tabs[nextIndex];
1155
+ if (nextTab) {
1156
+ const tabIndex = parseInt(nextTab.getAttribute("data-tab-index") || "0", 10);
1157
+ setActiveIndex(tabIndex);
1158
+ nextTab.focus();
1159
+ }
1160
+ };
1161
+ const tabClasses = [
1162
+ "ui-tab",
1163
+ `ui-tab--${variant}`,
1164
+ `ui-tab--${size}`,
1165
+ `ui-tab--${colorScheme}`,
1166
+ isActive && "ui-tab--active",
1167
+ disabled && "ui-tab--disabled",
1168
+ className,
1169
+ ]
1170
+ .filter(Boolean)
1171
+ .join(" ");
1172
+ return (jsxRuntime.jsxs("button", { ref: tabRef, role: "tab", "aria-selected": isActive, "aria-disabled": disabled, "aria-controls": `tabpanel-${index}`, id: `tab-${index}`, "data-tab-index": index, tabIndex: isActive ? 0 : -1, className: tabClasses, onClick: handleClick, onKeyDown: handleKeyDown, disabled: disabled, style: style, children: [icon && jsxRuntime.jsx("span", { className: "ui-tab__icon", children: icon }), jsxRuntime.jsx("span", { className: "ui-tab__label", children: children })] }));
1173
+ };
1174
+ const TabPanels = ({ children, className = "", style, }) => {
1175
+ return (jsxRuntime.jsx("div", { className: `ui-tab-panels ${className}`, style: style, children: children }));
1176
+ };
1177
+ const TabPanel = ({ children, index = 0, className = "", style, }) => {
1178
+ const { activeIndex } = useTabContext();
1179
+ const isActive = activeIndex === index;
1180
+ const tabPanelClasses = [
1181
+ "ui-tab-panel",
1182
+ isActive && "ui-tab-panel--active",
1183
+ className,
1184
+ ]
1185
+ .filter(Boolean)
1186
+ .join(" ");
1187
+ return (jsxRuntime.jsx("div", { role: "tabpanel", id: `tabpanel-${index}`, "aria-labelledby": `tab-${index}`, hidden: !isActive, className: tabPanelClasses, style: style, children: children }));
1188
+ };
1189
+
1070
1190
  const useDisclosure = (defaultIsOpen = false) => {
1071
1191
  const [isOpen, setIsOpen] = React.useState(defaultIsOpen);
1072
1192
  const onOpen = React.useCallback(() => {
@@ -1307,6 +1427,11 @@ exports.PopoverHeader = PopoverHeader;
1307
1427
  exports.Radio = Radio;
1308
1428
  exports.RadioGroup = RadioGroup;
1309
1429
  exports.Select = Select;
1430
+ exports.Tab = Tab;
1431
+ exports.TabList = TabList;
1432
+ exports.TabPanel = TabPanel;
1433
+ exports.TabPanels = TabPanels;
1434
+ exports.Tabs = Tabs;
1310
1435
  exports.Text = Text;
1311
1436
  exports.Textarea = Textarea;
1312
1437
  exports.ThemeProvider = ThemeProvider;
package/dist/index.css CHANGED
@@ -2693,6 +2693,396 @@
2693
2693
  }
2694
2694
 
2695
2695
 
2696
+ /* Tabs Container */
2697
+ .ui-tabs {
2698
+ width: 100%;
2699
+ font-family: inherit;
2700
+ }
2701
+
2702
+ .ui-tabs--horizontal {
2703
+ display: flex;
2704
+ flex-direction: column;
2705
+ }
2706
+
2707
+ .ui-tabs--vertical {
2708
+ display: flex;
2709
+ flex-direction: row;
2710
+ gap: 1rem;
2711
+ }
2712
+
2713
+ /* Tab List */
2714
+ .ui-tab-list {
2715
+ display: flex;
2716
+ gap: 0.5rem;
2717
+ border-bottom: 1px solid var(--border-primary, #d1d5db);
2718
+ margin-bottom: 1rem;
2719
+ }
2720
+
2721
+ .ui-tabs--vertical .ui-tab-list {
2722
+ flex-direction: column;
2723
+ border-bottom: none;
2724
+ border-right: 1px solid var(--border-primary, #d1d5db);
2725
+ margin-bottom: 0;
2726
+ margin-right: 1rem;
2727
+ min-width: 150px;
2728
+ }
2729
+
2730
+ .ui-tabs--enclosed .ui-tab-list {
2731
+ border: 1px solid var(--border-primary, #d1d5db);
2732
+ border-radius: 0.375rem;
2733
+ padding: 0.25rem;
2734
+ background-color: var(--bg-secondary, #f3f4f6);
2735
+ border-bottom: 1px solid var(--border-primary, #d1d5db);
2736
+ }
2737
+
2738
+ .ui-tabs--soft-rounded .ui-tab-list {
2739
+ border-bottom: none;
2740
+ gap: 0.25rem;
2741
+ }
2742
+
2743
+ /* Tab Button */
2744
+ .ui-tab {
2745
+ display: inline-flex;
2746
+ align-items: center;
2747
+ justify-content: center;
2748
+ gap: 0.5rem;
2749
+ padding: 0.5rem 1rem;
2750
+ font-weight: 500;
2751
+ font-size: 0.875rem;
2752
+ color: var(--text-secondary, #6b7280);
2753
+ background-color: transparent;
2754
+ border: none;
2755
+ border-bottom: 2px solid transparent;
2756
+ cursor: pointer;
2757
+ transition: all 0.2s ease-in-out;
2758
+ outline: none;
2759
+ position: relative;
2760
+ white-space: nowrap;
2761
+ font-family: inherit;
2762
+ }
2763
+
2764
+ .ui-tab:hover:not(:disabled) {
2765
+ color: var(--text-primary, #111827);
2766
+ background-color: var(--bg-secondary, #f9fafb);
2767
+ }
2768
+
2769
+ .ui-tab:focus-visible {
2770
+ outline: 2px solid var(--accent-primary, #bb00ed);
2771
+ outline-offset: 2px;
2772
+ border-radius: 0.25rem;
2773
+ }
2774
+
2775
+ .ui-tab--active {
2776
+ color: var(--text-primary, #111827);
2777
+ border-bottom-color: var(--accent-primary, #bb00ed);
2778
+ }
2779
+
2780
+ .ui-tabs--enclosed .ui-tab {
2781
+ border: none;
2782
+ border-radius: 0.25rem;
2783
+ border-bottom: none;
2784
+ }
2785
+
2786
+ .ui-tabs--enclosed .ui-tab--active {
2787
+ background-color: var(--bg-primary, #ffffff);
2788
+ color: var(--text-primary, #111827);
2789
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
2790
+ }
2791
+
2792
+ .ui-tabs--soft-rounded .ui-tab {
2793
+ border: none;
2794
+ border-radius: 0.5rem;
2795
+ border-bottom: none;
2796
+ }
2797
+
2798
+ .ui-tabs--soft-rounded .ui-tab--active {
2799
+ background-color: var(--bg-secondary, #f3f4f6);
2800
+ color: var(--text-primary, #111827);
2801
+ }
2802
+
2803
+ .ui-tabs--vertical .ui-tab {
2804
+ justify-content: flex-start;
2805
+ border-bottom: none;
2806
+ border-right: 2px solid transparent;
2807
+ border-radius: 0;
2808
+ padding-left: 0.75rem;
2809
+ padding-right: 0.75rem;
2810
+ }
2811
+
2812
+ .ui-tabs--vertical .ui-tab--active {
2813
+ border-right-color: var(--accent-primary, #bb00ed);
2814
+ border-bottom-color: transparent;
2815
+ }
2816
+
2817
+ .ui-tab--disabled {
2818
+ opacity: 0.5;
2819
+ cursor: not-allowed;
2820
+ pointer-events: none;
2821
+ }
2822
+
2823
+ /* Color Schemes */
2824
+ .ui-tab--blue.ui-tab--active {
2825
+ border-bottom-color: #3b82f6;
2826
+ color: #3b82f6;
2827
+ }
2828
+
2829
+ .ui-tabs--enclosed .ui-tab--blue.ui-tab--active {
2830
+ background-color: #dbeafe;
2831
+ color: #1e40af;
2832
+ }
2833
+
2834
+ .ui-tabs--soft-rounded .ui-tab--blue.ui-tab--active {
2835
+ background-color: #dbeafe;
2836
+ color: #1e40af;
2837
+ }
2838
+
2839
+ .ui-tabs--vertical .ui-tab--blue.ui-tab--active {
2840
+ border-right-color: #3b82f6;
2841
+ color: #3b82f6;
2842
+ }
2843
+
2844
+ .ui-tab--green.ui-tab--active {
2845
+ border-bottom-color: #10b981;
2846
+ color: #10b981;
2847
+ }
2848
+
2849
+ .ui-tabs--enclosed .ui-tab--green.ui-tab--active {
2850
+ background-color: #d1fae5;
2851
+ color: #065f46;
2852
+ }
2853
+
2854
+ .ui-tabs--soft-rounded .ui-tab--green.ui-tab--active {
2855
+ background-color: #d1fae5;
2856
+ color: #065f46;
2857
+ }
2858
+
2859
+ .ui-tabs--vertical .ui-tab--green.ui-tab--active {
2860
+ border-right-color: #10b981;
2861
+ color: #10b981;
2862
+ }
2863
+
2864
+ .ui-tab--red.ui-tab--active {
2865
+ border-bottom-color: #ef4444;
2866
+ color: #ef4444;
2867
+ }
2868
+
2869
+ .ui-tabs--enclosed .ui-tab--red.ui-tab--active {
2870
+ background-color: #fee2e2;
2871
+ color: #991b1b;
2872
+ }
2873
+
2874
+ .ui-tabs--soft-rounded .ui-tab--red.ui-tab--active {
2875
+ background-color: #fee2e2;
2876
+ color: #991b1b;
2877
+ }
2878
+
2879
+ .ui-tabs--vertical .ui-tab--red.ui-tab--active {
2880
+ border-right-color: #ef4444;
2881
+ color: #ef4444;
2882
+ }
2883
+
2884
+ .ui-tab--yellow.ui-tab--active {
2885
+ border-bottom-color: #f59e0b;
2886
+ color: #f59e0b;
2887
+ }
2888
+
2889
+ .ui-tabs--enclosed .ui-tab--yellow.ui-tab--active {
2890
+ background-color: #fef3c7;
2891
+ color: #92400e;
2892
+ }
2893
+
2894
+ .ui-tabs--soft-rounded .ui-tab--yellow.ui-tab--active {
2895
+ background-color: #fef3c7;
2896
+ color: #92400e;
2897
+ }
2898
+
2899
+ .ui-tabs--vertical .ui-tab--yellow.ui-tab--active {
2900
+ border-right-color: #f59e0b;
2901
+ color: #f59e0b;
2902
+ }
2903
+
2904
+ .ui-tab--purple.ui-tab--active {
2905
+ border-bottom-color: #8b5cf6;
2906
+ color: #8b5cf6;
2907
+ }
2908
+
2909
+ .ui-tabs--enclosed .ui-tab--purple.ui-tab--active {
2910
+ background-color: #ede9fe;
2911
+ color: #5b21b6;
2912
+ }
2913
+
2914
+ .ui-tabs--soft-rounded .ui-tab--purple.ui-tab--active {
2915
+ background-color: #ede9fe;
2916
+ color: #5b21b6;
2917
+ }
2918
+
2919
+ .ui-tabs--vertical .ui-tab--purple.ui-tab--active {
2920
+ border-right-color: #8b5cf6;
2921
+ color: #8b5cf6;
2922
+ }
2923
+
2924
+ .ui-tab--gray.ui-tab--active {
2925
+ border-bottom-color: #6b7280;
2926
+ color: #6b7280;
2927
+ }
2928
+
2929
+ .ui-tabs--enclosed .ui-tab--gray.ui-tab--active {
2930
+ background-color: #f3f4f6;
2931
+ color: #374151;
2932
+ }
2933
+
2934
+ .ui-tabs--soft-rounded .ui-tab--gray.ui-tab--active {
2935
+ background-color: #f3f4f6;
2936
+ color: #374151;
2937
+ }
2938
+
2939
+ .ui-tabs--vertical .ui-tab--gray.ui-tab--active {
2940
+ border-right-color: #6b7280;
2941
+ color: #6b7280;
2942
+ }
2943
+
2944
+ /* Tab Icon */
2945
+ .ui-tab__icon {
2946
+ display: flex;
2947
+ align-items: center;
2948
+ justify-content: center;
2949
+ font-size: 1rem;
2950
+ }
2951
+
2952
+ .ui-tab__label {
2953
+ display: flex;
2954
+ align-items: center;
2955
+ }
2956
+
2957
+ /* Sizes */
2958
+ .ui-tab--sm {
2959
+ padding: 0.375rem 0.75rem;
2960
+ font-size: 0.75rem;
2961
+ min-height: 2rem;
2962
+ }
2963
+
2964
+ .ui-tab--md {
2965
+ padding: 0.5rem 1rem;
2966
+ font-size: 0.875rem;
2967
+ min-height: 2.5rem;
2968
+ }
2969
+
2970
+ .ui-tab--lg {
2971
+ padding: 0.75rem 1.5rem;
2972
+ font-size: 1rem;
2973
+ min-height: 3rem;
2974
+ }
2975
+
2976
+ /* Tab Panels */
2977
+ .ui-tab-panels {
2978
+ width: 100%;
2979
+ }
2980
+
2981
+ /* Tab Panel */
2982
+ .ui-tab-panel {
2983
+ display: none;
2984
+ padding: 1rem 0;
2985
+ animation: fadeIn 0.2s ease-in-out;
2986
+ }
2987
+
2988
+ .ui-tab-panel--active {
2989
+ display: block;
2990
+ }
2991
+
2992
+ @keyframes fadeIn {
2993
+ from {
2994
+ opacity: 0;
2995
+ transform: translateY(4px);
2996
+ }
2997
+ to {
2998
+ opacity: 1;
2999
+ transform: translateY(0);
3000
+ }
3001
+ }
3002
+
3003
+ /* Dark mode support */
3004
+ [data-theme="dark"] .ui-tab-list {
3005
+ border-color: var(--border-primary, #374151);
3006
+ }
3007
+
3008
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab-list {
3009
+ background-color: var(--bg-secondary, #1f2937);
3010
+ border-color: var(--border-primary, #374151);
3011
+ }
3012
+
3013
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--active {
3014
+ background-color: var(--bg-primary, #111827);
3015
+ }
3016
+
3017
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--active {
3018
+ background-color: var(--bg-secondary, #1f2937);
3019
+ }
3020
+
3021
+ [data-theme="dark"] .ui-tab:hover:not(:disabled) {
3022
+ background-color: var(--bg-secondary, #1f2937);
3023
+ }
3024
+
3025
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--blue.ui-tab--active {
3026
+ background-color: #1e3a8a;
3027
+ color: #93c5fd;
3028
+ }
3029
+
3030
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--blue.ui-tab--active {
3031
+ background-color: #1e3a8a;
3032
+ color: #93c5fd;
3033
+ }
3034
+
3035
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--green.ui-tab--active {
3036
+ background-color: #064e3b;
3037
+ color: #6ee7b7;
3038
+ }
3039
+
3040
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--green.ui-tab--active {
3041
+ background-color: #064e3b;
3042
+ color: #6ee7b7;
3043
+ }
3044
+
3045
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--red.ui-tab--active {
3046
+ background-color: #7f1d1d;
3047
+ color: #fca5a5;
3048
+ }
3049
+
3050
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--red.ui-tab--active {
3051
+ background-color: #7f1d1d;
3052
+ color: #fca5a5;
3053
+ }
3054
+
3055
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--yellow.ui-tab--active {
3056
+ background-color: #78350f;
3057
+ color: #fde68a;
3058
+ }
3059
+
3060
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--yellow.ui-tab--active {
3061
+ background-color: #78350f;
3062
+ color: #fde68a;
3063
+ }
3064
+
3065
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--purple.ui-tab--active {
3066
+ background-color: #4c1d95;
3067
+ color: #c4b5fd;
3068
+ }
3069
+
3070
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--purple.ui-tab--active {
3071
+ background-color: #4c1d95;
3072
+ color: #c4b5fd;
3073
+ }
3074
+
3075
+ [data-theme="dark"] .ui-tabs--enclosed .ui-tab--gray.ui-tab--active {
3076
+ background-color: var(--bg-secondary, #1f2937);
3077
+ color: var(--text-primary, #f9fafb);
3078
+ }
3079
+
3080
+ [data-theme="dark"] .ui-tabs--soft-rounded .ui-tab--gray.ui-tab--active {
3081
+ background-color: var(--bg-secondary, #1f2937);
3082
+ color: var(--text-primary, #f9fafb);
3083
+ }
3084
+
3085
+
2696
3086
  /* Uiplex Theme Variables */
2697
3087
 
2698
3088
  :root {
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ import './CircularProgress/CircularProgress.css';
16
16
  import './Tooltip/Tooltip.css';
17
17
  import './Toast/Toast.css';
18
18
  import './Popover/Popover.css';
19
+ import './Tabs/Tabs.css';
19
20
  import './Theme/theme.css';
20
21
  export { Button } from './Button';
21
22
  export type { ButtonProps } from './Button';
@@ -53,6 +54,8 @@ export { Popover, PopoverContent, PopoverHeader, PopoverBody, PopoverFooter, Pop
53
54
  export type { PopoverProps, PopoverPlacement, PopoverContentProps, PopoverHeaderProps, PopoverBodyProps, PopoverFooterProps, PopoverCloseButtonProps, } from './Popover';
54
55
  export { Toast, ToastComponent, ToastContainer, ToastContainerGlobal } from './Toast';
55
56
  export type { ToastProps, ToastVariant, ToastPosition, ToastContainerProps, ToastOptions } from './Toast';
57
+ export { Tabs, TabList, Tab, TabPanels, TabPanel } from './Tabs';
58
+ export type { TabsProps, TabListProps, TabProps, TabPanelsProps, TabPanelProps } from './Tabs';
56
59
  export { useDisclosure } from './hooks';
57
60
  export type { UseDisclosureReturn } from './hooks';
58
61
  export { useOutsideClick } from './hooks';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,qBAAqB,CAAA;AAC5B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,mBAAmB,CAAA;AAC1B,OAAO,iBAAiB,CAAA;AACxB,OAAO,eAAe,CAAA;AACtB,OAAO,iBAAiB,CAAA;AACxB,OAAO,mBAAmB,CAAA;AAC1B,OAAO,+BAA+B,CAAA;AACtC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,yBAAyB,CAAA;AAChC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AACxB,OAAO,6BAA6B,CAAA;AACpC,OAAO,yCAAyC,CAAA;AAChD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,mBAAmB,CAAA;AAC1B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACnF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGzD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACrF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGzG,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC3E,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,qBAAqB,CAAA;AAC5B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,mBAAmB,CAAA;AAC1B,OAAO,iBAAiB,CAAA;AACxB,OAAO,eAAe,CAAA;AACtB,OAAO,iBAAiB,CAAA;AACxB,OAAO,mBAAmB,CAAA;AAC1B,OAAO,+BAA+B,CAAA;AACtC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,yBAAyB,CAAA;AAChC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AACxB,OAAO,6BAA6B,CAAA;AACpC,OAAO,yCAAyC,CAAA;AAChD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,mBAAmB,CAAA;AAC1B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,iBAAiB,CAAA;AACxB,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACnF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGzD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,YAAY,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACrF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACzG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAChE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAGrD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC3E,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/index.js CHANGED
@@ -1066,6 +1066,126 @@ const ToastContainerGlobal = () => {
1066
1066
  return (jsx(Fragment, { children: positionsWithToasts.map((position) => (jsx(ToastContainer, { toasts: toastsByPosition[position], position: position, onClose: handleClose }, position))) }));
1067
1067
  };
1068
1068
 
1069
+ const TabContext = createContext(undefined);
1070
+ const useTabContext = () => {
1071
+ const context = useContext(TabContext);
1072
+ if (!context) {
1073
+ throw new Error("Tab components must be used within a Tabs component");
1074
+ }
1075
+ return context;
1076
+ };
1077
+ const Tabs = ({ children, defaultIndex = 0, index: controlledIndex, onChange, variant = "line", size = "md", colorScheme = "blue", orientation = "horizontal", className = "", style, }) => {
1078
+ const [uncontrolledIndex, setUncontrolledIndex] = useState(defaultIndex);
1079
+ const isControlled = controlledIndex !== undefined;
1080
+ const activeIndex = isControlled ? controlledIndex : uncontrolledIndex;
1081
+ const setActiveIndex = useCallback((newIndex) => {
1082
+ if (!isControlled) {
1083
+ setUncontrolledIndex(newIndex);
1084
+ }
1085
+ onChange?.(newIndex);
1086
+ }, [isControlled, onChange]);
1087
+ const contextValue = {
1088
+ activeIndex,
1089
+ setActiveIndex,
1090
+ variant,
1091
+ size,
1092
+ colorScheme,
1093
+ orientation,
1094
+ };
1095
+ const tabsClasses = [
1096
+ "ui-tabs",
1097
+ `ui-tabs--${orientation}`,
1098
+ `ui-tabs--${variant}`,
1099
+ className,
1100
+ ]
1101
+ .filter(Boolean)
1102
+ .join(" ");
1103
+ return (jsx(TabContext.Provider, { value: contextValue, children: jsx("div", { className: tabsClasses, style: style, role: "tablist", children: children }) }));
1104
+ };
1105
+ const TabList = ({ children, className = "", style, }) => {
1106
+ const { orientation } = useTabContext();
1107
+ const tabListClasses = [
1108
+ "ui-tab-list",
1109
+ `ui-tab-list--${orientation}`,
1110
+ className,
1111
+ ]
1112
+ .filter(Boolean)
1113
+ .join(" ");
1114
+ return (jsx("div", { className: tabListClasses, style: style, role: "tablist", children: children }));
1115
+ };
1116
+ const Tab = ({ children, index = 0, disabled = false, icon, className = "", style, }) => {
1117
+ const { activeIndex, setActiveIndex, variant, size, colorScheme } = useTabContext();
1118
+ const tabRef = useRef(null);
1119
+ const isActive = activeIndex === index;
1120
+ const handleClick = () => {
1121
+ if (!disabled) {
1122
+ setActiveIndex(index);
1123
+ }
1124
+ };
1125
+ const handleKeyDown = (e) => {
1126
+ if (disabled)
1127
+ return;
1128
+ const tabs = Array.from(document.querySelectorAll(`.ui-tab-list [role="tab"]:not([aria-disabled="true"])`));
1129
+ const currentTabIndex = tabs.findIndex((tab) => tab === tabRef.current);
1130
+ let nextIndex = currentTabIndex;
1131
+ switch (e.key) {
1132
+ case "ArrowRight":
1133
+ case "ArrowDown":
1134
+ e.preventDefault();
1135
+ nextIndex = (currentTabIndex + 1) % tabs.length;
1136
+ break;
1137
+ case "ArrowLeft":
1138
+ case "ArrowUp":
1139
+ e.preventDefault();
1140
+ nextIndex = currentTabIndex - 1 < 0 ? tabs.length - 1 : currentTabIndex - 1;
1141
+ break;
1142
+ case "Home":
1143
+ e.preventDefault();
1144
+ nextIndex = 0;
1145
+ break;
1146
+ case "End":
1147
+ e.preventDefault();
1148
+ nextIndex = tabs.length - 1;
1149
+ break;
1150
+ default:
1151
+ return;
1152
+ }
1153
+ const nextTab = tabs[nextIndex];
1154
+ if (nextTab) {
1155
+ const tabIndex = parseInt(nextTab.getAttribute("data-tab-index") || "0", 10);
1156
+ setActiveIndex(tabIndex);
1157
+ nextTab.focus();
1158
+ }
1159
+ };
1160
+ const tabClasses = [
1161
+ "ui-tab",
1162
+ `ui-tab--${variant}`,
1163
+ `ui-tab--${size}`,
1164
+ `ui-tab--${colorScheme}`,
1165
+ isActive && "ui-tab--active",
1166
+ disabled && "ui-tab--disabled",
1167
+ className,
1168
+ ]
1169
+ .filter(Boolean)
1170
+ .join(" ");
1171
+ return (jsxs("button", { ref: tabRef, role: "tab", "aria-selected": isActive, "aria-disabled": disabled, "aria-controls": `tabpanel-${index}`, id: `tab-${index}`, "data-tab-index": index, tabIndex: isActive ? 0 : -1, className: tabClasses, onClick: handleClick, onKeyDown: handleKeyDown, disabled: disabled, style: style, children: [icon && jsx("span", { className: "ui-tab__icon", children: icon }), jsx("span", { className: "ui-tab__label", children: children })] }));
1172
+ };
1173
+ const TabPanels = ({ children, className = "", style, }) => {
1174
+ return (jsx("div", { className: `ui-tab-panels ${className}`, style: style, children: children }));
1175
+ };
1176
+ const TabPanel = ({ children, index = 0, className = "", style, }) => {
1177
+ const { activeIndex } = useTabContext();
1178
+ const isActive = activeIndex === index;
1179
+ const tabPanelClasses = [
1180
+ "ui-tab-panel",
1181
+ isActive && "ui-tab-panel--active",
1182
+ className,
1183
+ ]
1184
+ .filter(Boolean)
1185
+ .join(" ");
1186
+ return (jsx("div", { role: "tabpanel", id: `tabpanel-${index}`, "aria-labelledby": `tab-${index}`, hidden: !isActive, className: tabPanelClasses, style: style, children: children }));
1187
+ };
1188
+
1069
1189
  const useDisclosure = (defaultIsOpen = false) => {
1070
1190
  const [isOpen, setIsOpen] = useState(defaultIsOpen);
1071
1191
  const onOpen = useCallback(() => {
@@ -1277,4 +1397,4 @@ const ThemeScript = ({ storageKey = "uiplex-theme", defaultTheme = "system" }) =
1277
1397
  } }));
1278
1398
  };
1279
1399
 
1280
- export { Box, Button, CircularProgress, CircularProgressLabel, Flex, FormControl, FormErrorMessage, FormLabel, Grid, IconButton, Input, Link, Loader, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Popover, PopoverBody, PopoverCloseButton, PopoverContent, PopoverFooter, PopoverHeader, Radio, RadioGroup, Select, Text, Textarea, ThemeProvider, ThemeScript, ThemeToggle, ToastStatic as Toast, Toast as ToastComponent, ToastContainer, ToastContainerGlobal, Tooltip, useDisclosure, useOutsideClick, useTheme };
1400
+ export { Box, Button, CircularProgress, CircularProgressLabel, Flex, FormControl, FormErrorMessage, FormLabel, Grid, IconButton, Input, Link, Loader, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Popover, PopoverBody, PopoverCloseButton, PopoverContent, PopoverFooter, PopoverHeader, Radio, RadioGroup, Select, Tab, TabList, TabPanel, TabPanels, Tabs, Text, Textarea, ThemeProvider, ThemeScript, ThemeToggle, ToastStatic as Toast, Toast as ToastComponent, ToastContainer, ToastContainerGlobal, Tooltip, useDisclosure, useOutsideClick, useTheme };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uiplex",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "A modern React component library with TypeScript support, featuring Button, Loader, Radio components and a comprehensive theme system",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",