@zentauri-ui/zentauri-components 0.0.8 → 0.0.9

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 (132) hide show
  1. package/README.md +27 -2
  2. package/dist/ui/accordion.cjs +311 -0
  3. package/dist/ui/accordion.cjs.map +1 -0
  4. package/dist/ui/accordion.d.cts +70 -0
  5. package/dist/ui/accordion.d.ts +70 -0
  6. package/dist/ui/accordion.js +286 -0
  7. package/dist/ui/accordion.js.map +1 -0
  8. package/dist/ui/alert.cjs +257 -0
  9. package/dist/ui/alert.cjs.map +1 -0
  10. package/dist/ui/alert.d.cts +66 -0
  11. package/dist/ui/alert.d.ts +66 -0
  12. package/dist/ui/alert.js +224 -0
  13. package/dist/ui/alert.js.map +1 -0
  14. package/dist/ui/badge.cjs +192 -0
  15. package/dist/ui/badge.cjs.map +1 -0
  16. package/dist/ui/badge.d.cts +37 -0
  17. package/dist/ui/badge.d.ts +37 -0
  18. package/dist/ui/badge.js +165 -0
  19. package/dist/ui/badge.js.map +1 -0
  20. package/dist/ui/buttons.cjs +202 -0
  21. package/dist/ui/buttons.cjs.map +1 -0
  22. package/dist/ui/buttons.d.cts +27 -0
  23. package/dist/ui/buttons.d.ts +27 -0
  24. package/dist/ui/buttons.js +176 -0
  25. package/dist/ui/buttons.js.map +1 -0
  26. package/dist/ui/card.cjs +293 -0
  27. package/dist/ui/card.cjs.map +1 -0
  28. package/dist/ui/card.d.cts +77 -0
  29. package/dist/ui/card.d.ts +77 -0
  30. package/dist/ui/card.js +258 -0
  31. package/dist/ui/card.js.map +1 -0
  32. package/dist/ui/divider.cjs +229 -0
  33. package/dist/ui/divider.cjs.map +1 -0
  34. package/dist/ui/divider.d.cts +39 -0
  35. package/dist/ui/divider.d.ts +39 -0
  36. package/dist/ui/divider.js +200 -0
  37. package/dist/ui/divider.js.map +1 -0
  38. package/dist/ui/drawer.cjs +408 -0
  39. package/dist/ui/drawer.cjs.map +1 -0
  40. package/dist/ui/drawer.d.cts +81 -0
  41. package/dist/ui/drawer.d.ts +81 -0
  42. package/dist/ui/drawer.js +383 -0
  43. package/dist/ui/drawer.js.map +1 -0
  44. package/dist/ui/dropdown.cjs +302 -0
  45. package/dist/ui/dropdown.cjs.map +1 -0
  46. package/dist/ui/dropdown.d.cts +50 -0
  47. package/dist/ui/dropdown.d.ts +50 -0
  48. package/dist/ui/dropdown.js +278 -0
  49. package/dist/ui/dropdown.js.map +1 -0
  50. package/dist/ui/empty-state.cjs +186 -0
  51. package/dist/ui/empty-state.cjs.map +1 -0
  52. package/dist/ui/empty-state.d.cts +55 -0
  53. package/dist/ui/empty-state.d.ts +55 -0
  54. package/dist/ui/empty-state.js +154 -0
  55. package/dist/ui/empty-state.js.map +1 -0
  56. package/dist/ui/index.d.cts +27 -1164
  57. package/dist/ui/index.d.ts +27 -1164
  58. package/dist/ui/inputs.cjs +458 -0
  59. package/dist/ui/inputs.cjs.map +1 -0
  60. package/dist/ui/inputs.d.cts +35 -0
  61. package/dist/ui/inputs.d.ts +35 -0
  62. package/dist/ui/inputs.js +432 -0
  63. package/dist/ui/inputs.js.map +1 -0
  64. package/dist/ui/modal.cjs +406 -0
  65. package/dist/ui/modal.cjs.map +1 -0
  66. package/dist/ui/modal.d.cts +84 -0
  67. package/dist/ui/modal.d.ts +84 -0
  68. package/dist/ui/modal.js +384 -0
  69. package/dist/ui/modal.js.map +1 -0
  70. package/dist/ui/pagination.cjs +523 -0
  71. package/dist/ui/pagination.cjs.map +1 -0
  72. package/dist/ui/pagination.d.cts +114 -0
  73. package/dist/ui/pagination.d.ts +114 -0
  74. package/dist/ui/pagination.js +494 -0
  75. package/dist/ui/pagination.js.map +1 -0
  76. package/dist/ui/progress.cjs +268 -0
  77. package/dist/ui/progress.cjs.map +1 -0
  78. package/dist/ui/progress.d.cts +61 -0
  79. package/dist/ui/progress.d.ts +61 -0
  80. package/dist/ui/progress.js +237 -0
  81. package/dist/ui/progress.js.map +1 -0
  82. package/dist/ui/select.cjs +360 -0
  83. package/dist/ui/select.cjs.map +1 -0
  84. package/dist/ui/select.d.cts +73 -0
  85. package/dist/ui/select.d.ts +73 -0
  86. package/dist/ui/select.js +327 -0
  87. package/dist/ui/select.js.map +1 -0
  88. package/dist/ui/skeleton.cjs +576 -0
  89. package/dist/ui/skeleton.cjs.map +1 -0
  90. package/dist/ui/skeleton.d.cts +90 -0
  91. package/dist/ui/skeleton.d.ts +90 -0
  92. package/dist/ui/skeleton.js +544 -0
  93. package/dist/ui/skeleton.js.map +1 -0
  94. package/dist/ui/spinner.cjs +219 -0
  95. package/dist/ui/spinner.cjs.map +1 -0
  96. package/dist/ui/spinner.d.cts +27 -0
  97. package/dist/ui/spinner.d.ts +27 -0
  98. package/dist/ui/spinner.js +193 -0
  99. package/dist/ui/spinner.js.map +1 -0
  100. package/dist/ui/table.cjs +328 -0
  101. package/dist/ui/table.cjs.map +1 -0
  102. package/dist/ui/table.d.cts +81 -0
  103. package/dist/ui/table.d.ts +81 -0
  104. package/dist/ui/table.js +293 -0
  105. package/dist/ui/table.js.map +1 -0
  106. package/dist/ui/tabs.cjs +300 -0
  107. package/dist/ui/tabs.cjs.map +1 -0
  108. package/dist/ui/tabs.d.cts +58 -0
  109. package/dist/ui/tabs.d.ts +58 -0
  110. package/dist/ui/tabs.js +274 -0
  111. package/dist/ui/tabs.js.map +1 -0
  112. package/dist/ui/toast.cjs +285 -0
  113. package/dist/ui/toast.cjs.map +1 -0
  114. package/dist/ui/toast.d.cts +86 -0
  115. package/dist/ui/toast.d.ts +86 -0
  116. package/dist/ui/toast.js +258 -0
  117. package/dist/ui/toast.js.map +1 -0
  118. package/dist/ui/toggle.cjs +185 -0
  119. package/dist/ui/toggle.cjs.map +1 -0
  120. package/dist/ui/toggle.d.cts +37 -0
  121. package/dist/ui/toggle.d.ts +37 -0
  122. package/dist/ui/toggle.js +158 -0
  123. package/dist/ui/toggle.js.map +1 -0
  124. package/dist/ui/tooltip.cjs +242 -0
  125. package/dist/ui/tooltip.cjs.map +1 -0
  126. package/dist/ui/tooltip.d.cts +46 -0
  127. package/dist/ui/tooltip.d.ts +46 -0
  128. package/dist/ui/tooltip.js +214 -0
  129. package/dist/ui/tooltip.js.map +1 -0
  130. package/dist/variants-1Bx3BEeS.d.cts +8 -0
  131. package/dist/variants-1Bx3BEeS.d.ts +8 -0
  132. package/package.json +7 -3
@@ -0,0 +1,58 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { HTMLMotionProps } from 'framer-motion';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+
6
+ type TabsAnimation = "none" | "fade" | "slide";
7
+ type TabsPresetMotionProps = Pick<HTMLMotionProps<"div">, "initial" | "animate" | "transition">;
8
+ type TabsAnimationPresets = Record<TabsAnimation, TabsPresetMotionProps>;
9
+ type TabsOrientation = "horizontal" | "vertical";
10
+ declare const tabsContentAnimationPresets: TabsAnimationPresets;
11
+ declare function getTabsContentMotionProps(animation: TabsAnimation, orientation: TabsOrientation, reducedMotion: boolean): TabsPresetMotionProps;
12
+
13
+ type TabsValue = string;
14
+ type TabsProps = {
15
+ value?: TabsValue;
16
+ defaultValue?: TabsValue;
17
+ onValueChange?: (value: TabsValue) => void;
18
+ orientation?: "horizontal" | "vertical";
19
+ variant?: "default" | "underline" | "pills";
20
+ size?: "sm" | "md" | "lg";
21
+ appearance?: "default" | "sky" | "rose" | "purple" | "pink" | "orange" | "yellow" | "teal" | "indigo" | "emerald" | "gray" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange";
22
+ children: ReactNode;
23
+ className?: string;
24
+ };
25
+ type TabsListProps = {
26
+ children: ReactNode;
27
+ className?: string;
28
+ };
29
+ type TabsTriggerProps = {
30
+ value: TabsValue;
31
+ children: ReactNode;
32
+ disabled?: boolean;
33
+ className?: string;
34
+ };
35
+ type TabsContentProps = {
36
+ value: TabsValue;
37
+ children: ReactNode;
38
+ className?: string;
39
+ animation?: TabsAnimation;
40
+ };
41
+
42
+ declare function Tabs({ value, defaultValue, onValueChange, orientation, children, className, }: TabsProps): react_jsx_runtime.JSX.Element;
43
+ declare function TabsList({ children, className, ...props }: TabsListProps): react_jsx_runtime.JSX.Element;
44
+ declare function TabsTrigger({ value, children, disabled, className, ...props }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
45
+ declare function TabsContent({ value, children, className, animation, ...props }: TabsContentProps): react_jsx_runtime.JSX.Element | null;
46
+
47
+ declare const tabsListVariants: (props?: ({
48
+ variant?: "default" | "underline" | "pills" | null | undefined;
49
+ size?: "sm" | "md" | "lg" | null | undefined;
50
+ orientation?: "horizontal" | "vertical" | null | undefined;
51
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
52
+ declare const tabsTriggerVariants: (props?: ({
53
+ appearance?: "default" | "sky" | "rose" | "purple" | "pink" | "orange" | "yellow" | "teal" | "indigo" | "emerald" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "gray" | null | undefined;
54
+ variant?: "default" | "underline" | "pills" | null | undefined;
55
+ size?: "sm" | "md" | "lg" | null | undefined;
56
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
57
+
58
+ export { Tabs, type TabsAnimation, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, getTabsContentMotionProps, tabsContentAnimationPresets, tabsListVariants, tabsTriggerVariants };
@@ -0,0 +1,58 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { HTMLMotionProps } from 'framer-motion';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+
6
+ type TabsAnimation = "none" | "fade" | "slide";
7
+ type TabsPresetMotionProps = Pick<HTMLMotionProps<"div">, "initial" | "animate" | "transition">;
8
+ type TabsAnimationPresets = Record<TabsAnimation, TabsPresetMotionProps>;
9
+ type TabsOrientation = "horizontal" | "vertical";
10
+ declare const tabsContentAnimationPresets: TabsAnimationPresets;
11
+ declare function getTabsContentMotionProps(animation: TabsAnimation, orientation: TabsOrientation, reducedMotion: boolean): TabsPresetMotionProps;
12
+
13
+ type TabsValue = string;
14
+ type TabsProps = {
15
+ value?: TabsValue;
16
+ defaultValue?: TabsValue;
17
+ onValueChange?: (value: TabsValue) => void;
18
+ orientation?: "horizontal" | "vertical";
19
+ variant?: "default" | "underline" | "pills";
20
+ size?: "sm" | "md" | "lg";
21
+ appearance?: "default" | "sky" | "rose" | "purple" | "pink" | "orange" | "yellow" | "teal" | "indigo" | "emerald" | "gray" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange";
22
+ children: ReactNode;
23
+ className?: string;
24
+ };
25
+ type TabsListProps = {
26
+ children: ReactNode;
27
+ className?: string;
28
+ };
29
+ type TabsTriggerProps = {
30
+ value: TabsValue;
31
+ children: ReactNode;
32
+ disabled?: boolean;
33
+ className?: string;
34
+ };
35
+ type TabsContentProps = {
36
+ value: TabsValue;
37
+ children: ReactNode;
38
+ className?: string;
39
+ animation?: TabsAnimation;
40
+ };
41
+
42
+ declare function Tabs({ value, defaultValue, onValueChange, orientation, children, className, }: TabsProps): react_jsx_runtime.JSX.Element;
43
+ declare function TabsList({ children, className, ...props }: TabsListProps): react_jsx_runtime.JSX.Element;
44
+ declare function TabsTrigger({ value, children, disabled, className, ...props }: TabsTriggerProps): react_jsx_runtime.JSX.Element;
45
+ declare function TabsContent({ value, children, className, animation, ...props }: TabsContentProps): react_jsx_runtime.JSX.Element | null;
46
+
47
+ declare const tabsListVariants: (props?: ({
48
+ variant?: "default" | "underline" | "pills" | null | undefined;
49
+ size?: "sm" | "md" | "lg" | null | undefined;
50
+ orientation?: "horizontal" | "vertical" | null | undefined;
51
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
52
+ declare const tabsTriggerVariants: (props?: ({
53
+ appearance?: "default" | "sky" | "rose" | "purple" | "pink" | "orange" | "yellow" | "teal" | "indigo" | "emerald" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "gray" | null | undefined;
54
+ variant?: "default" | "underline" | "pills" | null | undefined;
55
+ size?: "sm" | "md" | "lg" | null | undefined;
56
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
57
+
58
+ export { Tabs, type TabsAnimation, TabsContent, type TabsContentProps, TabsList, type TabsListProps, type TabsProps, TabsTrigger, type TabsTriggerProps, getTabsContentMotionProps, tabsContentAnimationPresets, tabsListVariants, tabsTriggerVariants };
@@ -0,0 +1,274 @@
1
+ "use client";
2
+
3
+
4
+ // src/ui/tabs/tabs.tsx
5
+ import { motion, useReducedMotion } from "framer-motion";
6
+ import {
7
+ createContext,
8
+ useContext,
9
+ useId,
10
+ useState
11
+ } from "react";
12
+
13
+ // src/lib/utils.ts
14
+ import { clsx } from "clsx";
15
+ import { twMerge } from "tailwind-merge";
16
+ function cn(...inputs) {
17
+ return twMerge(clsx(inputs));
18
+ }
19
+
20
+ // src/ui/tabs/animations.ts
21
+ var easeOutExpo = [0.16, 1, 0.3, 1];
22
+ var tabsContentAnimationPresets = {
23
+ none: {},
24
+ fade: {
25
+ initial: { opacity: 0, y: 6 },
26
+ animate: { opacity: 1, y: 0 },
27
+ transition: { duration: 0.2, ease: easeOutExpo }
28
+ },
29
+ slide: {
30
+ initial: { opacity: 0, y: 8 },
31
+ animate: { opacity: 1, y: 0 },
32
+ transition: {
33
+ type: "spring",
34
+ stiffness: 420,
35
+ damping: 34,
36
+ mass: 0.82
37
+ }
38
+ }
39
+ };
40
+ function getTabsContentMotionProps(animation, orientation, reducedMotion) {
41
+ if (reducedMotion || animation === "none") {
42
+ return {};
43
+ }
44
+ if (animation === "fade") {
45
+ return tabsContentAnimationPresets.fade;
46
+ }
47
+ if (animation === "slide") {
48
+ const offset = 12;
49
+ return {
50
+ initial: orientation === "horizontal" ? { opacity: 0, x: offset, y: 0 } : { opacity: 0, x: 0, y: offset },
51
+ animate: { opacity: 1, x: 0, y: 0 },
52
+ transition: { duration: 0.22, ease: easeOutExpo }
53
+ };
54
+ }
55
+ return {};
56
+ }
57
+
58
+ // src/ui/tabs/variants.ts
59
+ import { cva } from "class-variance-authority";
60
+ var tabsListVariants = cva(
61
+ "flex items-center gap-1",
62
+ {
63
+ variants: {
64
+ variant: {
65
+ default: "bg-transparent",
66
+ underline: "border-b-2 border-transparent",
67
+ pills: "rounded-md"
68
+ },
69
+ size: {
70
+ sm: "text-sm p-1",
71
+ md: "text-base p-1.5",
72
+ lg: "text-lg p-2"
73
+ },
74
+ orientation: {
75
+ horizontal: "flex-row",
76
+ vertical: "flex-col"
77
+ }
78
+ },
79
+ defaultVariants: {
80
+ size: "md",
81
+ orientation: "horizontal"
82
+ }
83
+ }
84
+ );
85
+ var tabsTriggerVariants = cva(
86
+ "px-3 py-1.5 rounded-md transition-all focus:outline-none focus:ring-2 focus:ring-ring",
87
+ {
88
+ variants: {
89
+ appearance: {
90
+ default: "bg-transparent",
91
+ sky: "bg-sky-500/75",
92
+ rose: "bg-rose-500/75",
93
+ purple: "bg-purple-500/75",
94
+ pink: "bg-pink-500/75",
95
+ orange: "bg-orange-500/75",
96
+ yellow: "bg-yellow-500/75",
97
+ teal: "bg-teal-500/75",
98
+ indigo: "bg-indigo-500/75",
99
+ emerald: "bg-emerald-500/75",
100
+ gray: "bg-gray-500/75",
101
+ "gradient-blue": "bg-gradient-to-r from-blue-600 to-purple-600",
102
+ "gradient-green": "bg-gradient-to-r from-green-600 to-lime-600",
103
+ "gradient-red": "bg-gradient-to-r from-red-600 to-pink-600",
104
+ "gradient-yellow": "bg-gradient-to-r from-yellow-600 to-orange-600",
105
+ "gradient-purple": "bg-gradient-to-r from-purple-600 to-pink-600",
106
+ "gradient-teal": "bg-gradient-to-r from-teal-600 to-cyan-600",
107
+ "gradient-indigo": "bg-gradient-to-r from-indigo-600 to-purple-600",
108
+ "gradient-pink": "bg-gradient-to-r from-pink-600 to-rose-600",
109
+ "gradient-orange": "bg-gradient-to-r from-orange-600 to-red-600"
110
+ },
111
+ variant: {
112
+ default: "data-[state=active]:bg-background",
113
+ underline: "border-b-2 border-transparent data-[state=active]:border-primary rounded-none",
114
+ pills: "data-[state=active]:bg-primary data-[state=active]:text-white"
115
+ },
116
+ size: {
117
+ sm: "px-2 py-1",
118
+ md: "px-3 py-1.5",
119
+ lg: "px-4 py-2"
120
+ }
121
+ },
122
+ defaultVariants: {
123
+ appearance: "default",
124
+ variant: "default",
125
+ size: "md"
126
+ }
127
+ }
128
+ );
129
+
130
+ // src/ui/tabs/tabs.tsx
131
+ import { jsx } from "react/jsx-runtime";
132
+ var TabsContext = createContext(null);
133
+ var useTabs = () => {
134
+ const ctx = useContext(TabsContext);
135
+ if (!ctx) throw new Error("Tabs components must be used within Tabs");
136
+ return ctx;
137
+ };
138
+ function Tabs({
139
+ value,
140
+ defaultValue,
141
+ onValueChange,
142
+ orientation = "horizontal",
143
+ children,
144
+ className
145
+ }) {
146
+ const [internalValue, setInternalValue] = useState(defaultValue);
147
+ const idPrefix = useId();
148
+ const isControlled = value !== void 0;
149
+ const currentValue = isControlled ? value : internalValue;
150
+ const setValue = (val) => {
151
+ if (!isControlled) setInternalValue(val);
152
+ onValueChange?.(val);
153
+ };
154
+ const tabTriggerId = (tabValue) => `${idPrefix}zentauri-tab-${tabValue}`;
155
+ const tabPanelId = (tabValue) => `${idPrefix}zentauri-panel-${tabValue}`;
156
+ return /* @__PURE__ */ jsx(
157
+ TabsContext.Provider,
158
+ {
159
+ value: {
160
+ value: currentValue,
161
+ setValue,
162
+ orientation,
163
+ tabTriggerId,
164
+ tabPanelId
165
+ },
166
+ children: /* @__PURE__ */ jsx("div", { "data-slot": "tabs", className: cn("w-full", className), children })
167
+ }
168
+ );
169
+ }
170
+ function TabsList({
171
+ children,
172
+ className,
173
+ ...props
174
+ }) {
175
+ const { orientation, size } = useTabs();
176
+ return /* @__PURE__ */ jsx(
177
+ "div",
178
+ {
179
+ role: "tablist",
180
+ "aria-orientation": orientation,
181
+ className: cn(tabsListVariants({ orientation, size }), className),
182
+ ...props,
183
+ children
184
+ }
185
+ );
186
+ }
187
+ function TabsTrigger({
188
+ value,
189
+ children,
190
+ disabled,
191
+ className,
192
+ ...props
193
+ }) {
194
+ const { value: activeValue, setValue, tabTriggerId, tabPanelId, size, appearance, variant } = useTabs();
195
+ const isActive = activeValue === value;
196
+ const handleKeyDown = (e) => {
197
+ const triggers = Array.from(
198
+ document.querySelectorAll('[role="tab"]')
199
+ );
200
+ const index = triggers.findIndex((el) => el === e.currentTarget);
201
+ if (e.key === "ArrowRight" || e.key === "ArrowDown") {
202
+ e.preventDefault();
203
+ triggers[index + 1]?.focus();
204
+ }
205
+ if (e.key === "ArrowLeft" || e.key === "ArrowUp") {
206
+ e.preventDefault();
207
+ triggers[index - 1]?.focus();
208
+ }
209
+ if (e.key === "Home") {
210
+ e.preventDefault();
211
+ triggers[0]?.focus();
212
+ }
213
+ if (e.key === "End") {
214
+ e.preventDefault();
215
+ triggers[triggers.length - 1]?.focus();
216
+ }
217
+ };
218
+ return /* @__PURE__ */ jsx(
219
+ "button",
220
+ {
221
+ id: tabTriggerId(value),
222
+ type: "button",
223
+ role: "tab",
224
+ "data-state": isActive ? "active" : "inactive",
225
+ "aria-selected": isActive,
226
+ "aria-controls": tabPanelId(value),
227
+ disabled,
228
+ onClick: () => setValue(value),
229
+ onKeyDown: handleKeyDown,
230
+ className: cn(tabsTriggerVariants({ size, appearance, variant }), className, "cursor-pointer"),
231
+ ...props,
232
+ children
233
+ }
234
+ );
235
+ }
236
+ function TabsContent({
237
+ value,
238
+ children,
239
+ className,
240
+ animation = "fade",
241
+ ...props
242
+ }) {
243
+ const { value: activeValue, orientation, tabTriggerId, tabPanelId } = useTabs();
244
+ const prefersReducedMotion = useReducedMotion();
245
+ if (activeValue !== value) return null;
246
+ const motionProps = getTabsContentMotionProps(
247
+ animation,
248
+ orientation,
249
+ Boolean(prefersReducedMotion)
250
+ );
251
+ return /* @__PURE__ */ jsx(
252
+ motion.div,
253
+ {
254
+ id: tabPanelId(value),
255
+ role: "tabpanel",
256
+ "aria-labelledby": tabTriggerId(value),
257
+ ...props,
258
+ ...motionProps,
259
+ className: cn("mt-2", className),
260
+ children
261
+ }
262
+ );
263
+ }
264
+ export {
265
+ Tabs,
266
+ TabsContent,
267
+ TabsList,
268
+ TabsTrigger,
269
+ getTabsContentMotionProps,
270
+ tabsContentAnimationPresets,
271
+ tabsListVariants,
272
+ tabsTriggerVariants
273
+ };
274
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/tabs/tabs.tsx","../../src/lib/utils.ts","../../src/ui/tabs/animations.ts","../../src/ui/tabs/variants.ts"],"sourcesContent":["\"use client\"\n\nimport { motion, useReducedMotion } from \"framer-motion\"\nimport {\n createContext,\n KeyboardEvent,\n useContext,\n useId,\n useState,\n} from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nimport { getTabsContentMotionProps } from \"./animations\"\nimport {\n TabsContentProps,\n TabsListProps,\n TabsProps,\n TabsTriggerProps,\n TabsValue,\n TabsContextType,\n} from \"./types\"\nimport { tabsListVariants, tabsTriggerVariants } from \"./variants\"\n\n\nexport const TabsContext = createContext<TabsContextType | null>(null)\n\nexport const useTabs = () => {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error(\"Tabs components must be used within Tabs\")\n return ctx\n}\n\nexport function Tabs({\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n children,\n className,\n}: TabsProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const idPrefix = useId()\n\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : internalValue\n\n const setValue = (val: string) => {\n if (!isControlled) setInternalValue(val)\n onValueChange?.(val)\n }\n\n const tabTriggerId = (tabValue: TabsValue) =>\n `${idPrefix}zentauri-tab-${tabValue}`\n const tabPanelId = (tabValue: TabsValue) =>\n `${idPrefix}zentauri-panel-${tabValue}`\n\n return (\n <TabsContext.Provider\n value={{\n value: currentValue,\n setValue,\n orientation,\n tabTriggerId,\n tabPanelId,\n }}\n >\n <div data-slot=\"tabs\" className={cn(\"w-full\", className)}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n}\n\nexport function TabsList({\n children,\n className,\n ...props\n}: TabsListProps) {\n const { orientation, size } = useTabs()\n\n return (\n <div\n role=\"tablist\"\n aria-orientation={orientation}\n className={cn(tabsListVariants({ orientation, size }), className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function TabsTrigger({\n value,\n children,\n disabled,\n className,\n ...props\n}: TabsTriggerProps) {\n const { value: activeValue, setValue, tabTriggerId, tabPanelId, size, appearance, variant } = useTabs()\n\n const isActive = activeValue === value\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n const triggers = Array.from(\n document.querySelectorAll('[role=\"tab\"]'),\n ) as HTMLElement[]\n\n const index = triggers.findIndex((el) => el === e.currentTarget)\n\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault()\n triggers[index + 1]?.focus()\n }\n\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault()\n triggers[index - 1]?.focus()\n }\n\n if (e.key === \"Home\") {\n e.preventDefault()\n triggers[0]?.focus()\n }\n\n if (e.key === \"End\") {\n e.preventDefault()\n triggers[triggers.length - 1]?.focus()\n }\n }\n\n return (\n <button\n id={tabTriggerId(value)}\n type=\"button\"\n role=\"tab\"\n data-state={isActive ? \"active\" : \"inactive\"}\n aria-selected={isActive}\n aria-controls={tabPanelId(value)}\n disabled={disabled}\n onClick={() => setValue(value)}\n onKeyDown={handleKeyDown}\n className={cn(tabsTriggerVariants({ size, appearance, variant }), className, \"cursor-pointer\")}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nexport function TabsContent({\n value,\n children,\n className,\n animation = \"fade\",\n ...props\n}: TabsContentProps) {\n const { value: activeValue, orientation, tabTriggerId, tabPanelId } =\n useTabs()\n const prefersReducedMotion = useReducedMotion()\n\n if (activeValue !== value) return null\n\n const motionProps = getTabsContentMotionProps(\n animation,\n orientation,\n Boolean(prefersReducedMotion),\n )\n\n return (\n <motion.div\n id={tabPanelId(value)}\n role=\"tabpanel\"\n aria-labelledby={tabTriggerId(value)}\n {...props}\n {...motionProps}\n className={cn(\"mt-2\", className)}\n >\n {children}\n </motion.div>\n )\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","import type { HTMLMotionProps } from \"framer-motion\";\n\nexport type TabsAnimation = \"none\" | \"fade\" | \"slide\";\n\ntype TabsPresetMotionProps = Pick<\n HTMLMotionProps<\"div\">,\n \"initial\" | \"animate\" | \"transition\"\n>;\n\nexport type TabsAnimationPresets = Record<TabsAnimation, TabsPresetMotionProps>;\n\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst easeOutExpo: [number, number, number, number] = [0.16, 1, 0.3, 1];\n\nexport const tabsContentAnimationPresets: TabsAnimationPresets = {\n none: {},\n fade: {\n initial: { opacity: 0, y: 6 },\n animate: { opacity: 1, y: 0 },\n transition: { duration: 0.2, ease: easeOutExpo },\n },\n slide: {\n initial: { opacity: 0, y: 8 },\n animate: { opacity: 1, y: 0 },\n transition: {\n type: \"spring\",\n stiffness: 420,\n damping: 34,\n mass: 0.82,\n },\n },\n};\n\nexport function getTabsContentMotionProps(\n animation: TabsAnimation,\n orientation: TabsOrientation,\n reducedMotion: boolean,\n): TabsPresetMotionProps {\n if (reducedMotion || animation === \"none\") {\n return {};\n }\n if (animation === \"fade\") {\n return tabsContentAnimationPresets.fade;\n }\n if (animation === \"slide\") {\n const offset = 12;\n return {\n initial:\n orientation === \"horizontal\"\n ? { opacity: 0, x: offset, y: 0 }\n : { opacity: 0, x: 0, y: offset },\n animate: { opacity: 1, x: 0, y: 0 },\n transition: { duration: 0.22, ease: easeOutExpo },\n };\n }\n return {};\n}\n","import { cva } from \"class-variance-authority\"\n\nexport const tabsListVariants = cva(\n \"flex items-center gap-1\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n underline: \"border-b-2 border-transparent\",\n pills: \"rounded-md\",\n },\n size: {\n sm: \"text-sm p-1\",\n md: \"text-base p-1.5\",\n lg: \"text-lg p-2\",\n },\n orientation: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n },\n defaultVariants: {\n size: \"md\",\n orientation: \"horizontal\",\n },\n }\n)\n\nexport const tabsTriggerVariants = cva(\n \"px-3 py-1.5 rounded-md transition-all focus:outline-none focus:ring-2 focus:ring-ring\",\n {\n variants: {\n appearance: {\n default: \"bg-transparent\",\n sky: \"bg-sky-500/75\",\n rose: \"bg-rose-500/75\",\n purple: \"bg-purple-500/75\",\n pink: \"bg-pink-500/75\",\n orange: \"bg-orange-500/75\",\n yellow: \"bg-yellow-500/75\",\n teal: \"bg-teal-500/75\",\n indigo: \"bg-indigo-500/75\",\n emerald: \"bg-emerald-500/75\",\n gray: \"bg-gray-500/75\",\n \"gradient-blue\": \"bg-gradient-to-r from-blue-600 to-purple-600\",\n \"gradient-green\": \"bg-gradient-to-r from-green-600 to-lime-600\",\n \"gradient-red\": \"bg-gradient-to-r from-red-600 to-pink-600\",\n \"gradient-yellow\": \"bg-gradient-to-r from-yellow-600 to-orange-600\",\n \"gradient-purple\": \"bg-gradient-to-r from-purple-600 to-pink-600\",\n \"gradient-teal\": \"bg-gradient-to-r from-teal-600 to-cyan-600\",\n \"gradient-indigo\": \"bg-gradient-to-r from-indigo-600 to-purple-600\",\n \"gradient-pink\": \"bg-gradient-to-r from-pink-600 to-rose-600\",\n \"gradient-orange\": \"bg-gradient-to-r from-orange-600 to-red-600\",\n },\n variant: {\n default: \"data-[state=active]:bg-background\",\n underline:\n \"border-b-2 border-transparent data-[state=active]:border-primary rounded-none\",\n pills:\n \"data-[state=active]:bg-primary data-[state=active]:text-white\",\n },\n size: {\n sm: \"px-2 py-1\",\n md: \"px-3 py-1.5\",\n lg: \"px-4 py-2\",\n },\n },\n defaultVariants: {\n appearance: \"default\",\n variant: \"default\",\n size: \"md\",\n },\n }\n)"],"mappings":"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","names":[]}