@matheusrizzati/ui 0.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,801 @@
1
+ 'use strict';
2
+
3
+ var clsx = require('clsx');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var react = require('react');
6
+ var classVarianceAuthority = require('class-variance-authority');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var Dialog = require('@radix-ui/react-dialog');
9
+ var DropdownMenu = require('@radix-ui/react-dropdown-menu');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var Dialog__namespace = /*#__PURE__*/_interopNamespace(Dialog);
30
+ var DropdownMenu__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu);
31
+
32
+ // src/utils/cn.ts
33
+ function cn(...inputs) {
34
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
35
+ }
36
+ var buttonVariants = classVarianceAuthority.cva(
37
+ [
38
+ "inline-flex items-center justify-center gap-2",
39
+ "font-medium whitespace-nowrap select-none",
40
+ "transition-all duration-[var(--transition-fast)]",
41
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring-color)] focus-visible:ring-offset-[var(--ring-offset)]",
42
+ "disabled:pointer-events-none disabled:opacity-50",
43
+ "active:scale-[0.97]",
44
+ "cursor-pointer"
45
+ ],
46
+ {
47
+ variants: {
48
+ variant: {
49
+ primary: [
50
+ "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]",
51
+ "hover:bg-[var(--color-primary-hover)]",
52
+ "shadow-[var(--shadow-sm)]"
53
+ ],
54
+ secondary: [
55
+ "bg-[var(--color-surface)] text-[var(--color-text-primary)]",
56
+ "border border-[var(--color-border)]",
57
+ "hover:bg-[var(--color-surface-hover)] hover:border-[var(--color-border-hover)]"
58
+ ],
59
+ ghost: [
60
+ "text-[var(--color-text-secondary)]",
61
+ "hover:bg-[var(--color-surface)] hover:text-[var(--color-text-primary)]"
62
+ ],
63
+ danger: [
64
+ "bg-[var(--color-danger)] text-white",
65
+ "hover:brightness-110",
66
+ "shadow-[var(--shadow-sm)]"
67
+ ]
68
+ },
69
+ size: {
70
+ sm: "h-8 px-3 text-[var(--text-xs)] rounded-[var(--radius-sm)]",
71
+ md: "h-9 px-4 text-[var(--text-sm)] rounded-[var(--radius)]",
72
+ lg: "h-11 px-6 text-[var(--text-base)] rounded-[var(--radius-md)]",
73
+ icon: "h-9 w-9 rounded-[var(--radius)]"
74
+ }
75
+ },
76
+ defaultVariants: {
77
+ variant: "primary",
78
+ size: "md"
79
+ }
80
+ }
81
+ );
82
+ var Spinner = () => /* @__PURE__ */ jsxRuntime.jsxs(
83
+ "svg",
84
+ {
85
+ className: "animate-spin h-4 w-4",
86
+ xmlns: "http://www.w3.org/2000/svg",
87
+ fill: "none",
88
+ viewBox: "0 0 24 24",
89
+ children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx(
91
+ "circle",
92
+ {
93
+ className: "opacity-25",
94
+ cx: "12",
95
+ cy: "12",
96
+ r: "10",
97
+ stroke: "currentColor",
98
+ strokeWidth: "4"
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsxRuntime.jsx(
102
+ "path",
103
+ {
104
+ className: "opacity-75",
105
+ fill: "currentColor",
106
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
107
+ }
108
+ )
109
+ ]
110
+ }
111
+ );
112
+ var Button = react.forwardRef(
113
+ ({ className, variant, size, loading, disabled, children, ...props }, ref) => {
114
+ return /* @__PURE__ */ jsxRuntime.jsxs(
115
+ "button",
116
+ {
117
+ ref,
118
+ className: cn(buttonVariants({ variant, size }), className),
119
+ disabled: disabled || loading,
120
+ ...props,
121
+ children: [
122
+ loading && /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}),
123
+ children
124
+ ]
125
+ }
126
+ );
127
+ }
128
+ );
129
+ Button.displayName = "Button";
130
+ var inputVariants = classVarianceAuthority.cva(
131
+ [
132
+ "w-full bg-[var(--color-surface)] text-[var(--color-text-primary)]",
133
+ "border border-[var(--color-border)]",
134
+ "placeholder:text-[var(--color-text-muted)]",
135
+ "transition-all duration-[var(--transition-fast)]",
136
+ "focus:outline-none focus:ring-2 focus:ring-[var(--ring-color)] focus:border-[var(--color-primary)]",
137
+ "hover:border-[var(--color-border-hover)]",
138
+ "disabled:opacity-50 disabled:cursor-not-allowed",
139
+ "font-[var(--font-sans)]"
140
+ ],
141
+ {
142
+ variants: {
143
+ inputSize: {
144
+ sm: "h-8 px-3 text-[var(--text-xs)] rounded-[var(--radius-sm)]",
145
+ md: "h-9 px-3 text-[var(--text-sm)] rounded-[var(--radius)]",
146
+ lg: "h-11 px-4 text-[var(--text-base)] rounded-[var(--radius-md)]"
147
+ },
148
+ state: {
149
+ default: "",
150
+ error: "border-[var(--color-danger)] focus:ring-[var(--color-danger)]/30"
151
+ }
152
+ },
153
+ defaultVariants: {
154
+ inputSize: "md",
155
+ state: "default"
156
+ }
157
+ }
158
+ );
159
+ var labelStyles = "block text-[var(--text-sm)] font-medium text-[var(--color-text-secondary)] mb-1.5";
160
+ var helperStyles = "mt-1.5 text-[var(--text-xs)] text-[var(--color-text-muted)]";
161
+ var errorStyles = "mt-1.5 text-[var(--text-xs)] text-[var(--color-danger)]";
162
+ var Input = react.forwardRef(
163
+ ({
164
+ className,
165
+ inputSize,
166
+ state,
167
+ label,
168
+ helperText,
169
+ error,
170
+ startIcon,
171
+ endIcon,
172
+ id,
173
+ ...props
174
+ }, ref) => {
175
+ const inputId = id || (label ? label.toLowerCase().replace(/\s+/g, "-") : void 0);
176
+ const effectiveState = error ? "error" : state;
177
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
178
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: labelStyles, children: label }),
179
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
180
+ startIcon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-text-muted)]", children: startIcon }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(
182
+ "input",
183
+ {
184
+ ref,
185
+ id: inputId,
186
+ className: cn(
187
+ inputVariants({ inputSize, state: effectiveState }),
188
+ startIcon && "pl-9",
189
+ endIcon && "pr-9",
190
+ className
191
+ ),
192
+ ...props
193
+ }
194
+ ),
195
+ endIcon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 text-[var(--color-text-muted)]", children: endIcon })
196
+ ] }),
197
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: errorStyles, children: error }),
198
+ !error && helperText && /* @__PURE__ */ jsxRuntime.jsx("p", { className: helperStyles, children: helperText })
199
+ ] });
200
+ }
201
+ );
202
+ Input.displayName = "Input";
203
+ var cardVariants = classVarianceAuthority.cva(
204
+ [
205
+ "rounded-[var(--radius-lg)]",
206
+ "transition-all duration-[var(--transition-base)]"
207
+ ],
208
+ {
209
+ variants: {
210
+ variant: {
211
+ elevated: [
212
+ "bg-[var(--color-surface)] border border-[var(--color-border)]",
213
+ "shadow-[var(--shadow-md)]"
214
+ ],
215
+ outlined: [
216
+ "bg-transparent border border-[var(--color-border)]"
217
+ ],
218
+ ghost: [
219
+ "bg-[var(--color-surface)]/50"
220
+ ]
221
+ },
222
+ hoverable: {
223
+ true: "hover:border-[var(--color-border-hover)] hover:shadow-[var(--shadow-lg)] cursor-pointer",
224
+ false: ""
225
+ }
226
+ },
227
+ defaultVariants: {
228
+ variant: "elevated",
229
+ hoverable: false
230
+ }
231
+ }
232
+ );
233
+ var cardHeaderStyles = "px-[var(--space-lg)] pt-[var(--space-lg)] pb-[var(--space-sm)]";
234
+ var cardBodyStyles = "px-[var(--space-lg)] py-[var(--space-md)]";
235
+ var cardFooterStyles = "px-[var(--space-lg)] pt-[var(--space-sm)] pb-[var(--space-lg)] border-t border-[var(--color-border)]";
236
+ var Card = react.forwardRef(
237
+ ({ className, variant, hoverable, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
238
+ "div",
239
+ {
240
+ ref,
241
+ className: cn(cardVariants({ variant, hoverable }), className),
242
+ ...props
243
+ }
244
+ )
245
+ );
246
+ Card.displayName = "Card";
247
+ var CardHeader = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardHeaderStyles, className), ...props }));
248
+ CardHeader.displayName = "CardHeader";
249
+ var CardBody = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardBodyStyles, className), ...props }));
250
+ CardBody.displayName = "CardBody";
251
+ var CardFooter = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(cardFooterStyles, className), ...props }));
252
+ CardFooter.displayName = "CardFooter";
253
+
254
+ // src/components/modal/modal.styles.ts
255
+ var modalOverlayStyles = [
256
+ "fixed inset-0 z-50 bg-black/60 backdrop-blur-sm",
257
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
258
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0"
259
+ ].join(" ");
260
+ var modalContentStyles = [
261
+ "fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2",
262
+ "w-full max-w-lg",
263
+ "bg-[var(--color-surface)] border border-[var(--color-border)]",
264
+ "rounded-[var(--radius-xl)] shadow-[var(--shadow-lg)]",
265
+ "p-[var(--space-lg)]",
266
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
267
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
268
+ "duration-200"
269
+ ].join(" ");
270
+ var modalTitleStyles = "text-[var(--text-lg)] font-semibold text-[var(--color-text-primary)]";
271
+ var modalDescriptionStyles = "text-[var(--text-sm)] text-[var(--color-text-secondary)] mt-2";
272
+ var modalCloseStyles = [
273
+ "absolute right-4 top-4",
274
+ "rounded-[var(--radius-sm)] p-1",
275
+ "text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)]",
276
+ "hover:bg-[var(--color-surface-hover)]",
277
+ "transition-colors duration-[var(--transition-fast)]",
278
+ "focus:outline-none focus:ring-2 focus:ring-[var(--ring-color)]"
279
+ ].join(" ");
280
+ var Modal = Dialog__namespace.Root;
281
+ var ModalTrigger = Dialog__namespace.Trigger;
282
+ var ModalOverlay = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Overlay, { ref, className: cn(modalOverlayStyles, className), ...props }));
283
+ ModalOverlay.displayName = "ModalOverlay";
284
+ var ModalContent = react.forwardRef(({ className, children, showClose = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Portal, { children: [
285
+ /* @__PURE__ */ jsxRuntime.jsx(ModalOverlay, {}),
286
+ /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Content, { ref, className: cn(modalContentStyles, className), ...props, children: [
287
+ children,
288
+ showClose && /* @__PURE__ */ jsxRuntime.jsxs(Dialog__namespace.Close, { className: modalCloseStyles, children: [
289
+ /* @__PURE__ */ jsxRuntime.jsxs(
290
+ "svg",
291
+ {
292
+ xmlns: "http://www.w3.org/2000/svg",
293
+ width: "16",
294
+ height: "16",
295
+ viewBox: "0 0 24 24",
296
+ fill: "none",
297
+ stroke: "currentColor",
298
+ strokeWidth: "2",
299
+ strokeLinecap: "round",
300
+ strokeLinejoin: "round",
301
+ children: [
302
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
303
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
304
+ ]
305
+ }
306
+ ),
307
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
308
+ ] })
309
+ ] })
310
+ ] }));
311
+ ModalContent.displayName = "ModalContent";
312
+ var ModalTitle = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(Dialog__namespace.Title, { ref, className: cn(modalTitleStyles, className), ...props }));
313
+ ModalTitle.displayName = "ModalTitle";
314
+ var ModalDescription = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
315
+ Dialog__namespace.Description,
316
+ {
317
+ ref,
318
+ className: cn(modalDescriptionStyles, className),
319
+ ...props
320
+ }
321
+ ));
322
+ ModalDescription.displayName = "ModalDescription";
323
+ var ModalFooter = react.forwardRef(
324
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
325
+ "div",
326
+ {
327
+ ref,
328
+ className: cn(
329
+ "flex justify-end gap-[var(--space-sm)] mt-[var(--space-lg)]",
330
+ className
331
+ ),
332
+ ...props
333
+ }
334
+ )
335
+ );
336
+ ModalFooter.displayName = "ModalFooter";
337
+
338
+ // src/components/dropdown/dropdown.styles.ts
339
+ var dropdownContentStyles = [
340
+ "z-50 min-w-[180px] overflow-hidden",
341
+ "bg-[var(--color-surface)] border border-[var(--color-border)]",
342
+ "rounded-[var(--radius-md)] shadow-[var(--shadow-lg)]",
343
+ "p-1",
344
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
345
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
346
+ "data-[side=top]:slide-in-from-bottom-2",
347
+ "data-[side=bottom]:slide-in-from-top-2",
348
+ "data-[side=left]:slide-in-from-right-2",
349
+ "data-[side=right]:slide-in-from-left-2"
350
+ ].join(" ");
351
+ var dropdownItemStyles = [
352
+ "relative flex items-center gap-2",
353
+ "rounded-[var(--radius-sm)] px-2 py-1.5",
354
+ "text-[var(--text-sm)] text-[var(--color-text-secondary)]",
355
+ "cursor-pointer select-none outline-none",
356
+ "transition-colors duration-[var(--transition-fast)]",
357
+ "data-[highlighted]:bg-[var(--color-surface-hover)] data-[highlighted]:text-[var(--color-text-primary)]",
358
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
359
+ ].join(" ");
360
+ var dropdownSeparatorStyles = "my-1 h-px bg-[var(--color-border)]";
361
+ var dropdownLabelStyles = "px-2 py-1.5 text-[var(--text-xs)] font-semibold text-[var(--color-text-muted)]";
362
+ var Dropdown = DropdownMenu__namespace.Root;
363
+ var DropdownTrigger = DropdownMenu__namespace.Trigger;
364
+ var DropdownGroup = DropdownMenu__namespace.Group;
365
+ var DropdownContent = react.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
366
+ DropdownMenu__namespace.Content,
367
+ {
368
+ ref,
369
+ sideOffset,
370
+ className: cn(dropdownContentStyles, className),
371
+ ...props
372
+ }
373
+ ) }));
374
+ DropdownContent.displayName = "DropdownContent";
375
+ var DropdownItem = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
376
+ DropdownMenu__namespace.Item,
377
+ {
378
+ ref,
379
+ className: cn(dropdownItemStyles, className),
380
+ ...props
381
+ }
382
+ ));
383
+ DropdownItem.displayName = "DropdownItem";
384
+ var DropdownSeparator = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
385
+ DropdownMenu__namespace.Separator,
386
+ {
387
+ ref,
388
+ className: cn(dropdownSeparatorStyles, className),
389
+ ...props
390
+ }
391
+ ));
392
+ DropdownSeparator.displayName = "DropdownSeparator";
393
+ var DropdownLabel = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
394
+ DropdownMenu__namespace.Label,
395
+ {
396
+ ref,
397
+ className: cn(dropdownLabelStyles, className),
398
+ ...props
399
+ }
400
+ ));
401
+ DropdownLabel.displayName = "DropdownLabel";
402
+ var badgeVariants = classVarianceAuthority.cva(
403
+ [
404
+ "inline-flex items-center font-medium",
405
+ "rounded-full whitespace-nowrap",
406
+ "transition-colors duration-[var(--transition-fast)]"
407
+ ],
408
+ {
409
+ variants: {
410
+ variant: {
411
+ default: "bg-[var(--color-surface-raised)] text-[var(--color-text-secondary)] border border-[var(--color-border)]",
412
+ primary: "bg-[var(--color-primary)]/15 text-[var(--color-primary-hover)] border border-[var(--color-primary)]/25",
413
+ success: "bg-[var(--color-success)]/15 text-[var(--color-success)] border border-[var(--color-success)]/25",
414
+ warning: "bg-[var(--color-warning)]/15 text-[var(--color-warning)] border border-[var(--color-warning)]/25",
415
+ danger: "bg-[var(--color-danger)]/15 text-[var(--color-danger)] border border-[var(--color-danger)]/25",
416
+ info: "bg-[var(--color-info)]/15 text-[var(--color-info)] border border-[var(--color-info)]/25"
417
+ },
418
+ size: {
419
+ sm: "px-2 py-0.5 text-[10px]",
420
+ md: "px-2.5 py-0.5 text-[var(--text-xs)]"
421
+ }
422
+ },
423
+ defaultVariants: {
424
+ variant: "default",
425
+ size: "md"
426
+ }
427
+ }
428
+ );
429
+ var Badge = react.forwardRef(
430
+ ({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
431
+ "span",
432
+ {
433
+ ref,
434
+ className: cn(badgeVariants({ variant, size }), className),
435
+ ...props
436
+ }
437
+ )
438
+ );
439
+ Badge.displayName = "Badge";
440
+
441
+ // src/components/tabs/tabs.styles.ts
442
+ var tabsListStyles = [
443
+ "inline-flex items-center gap-1",
444
+ "bg-[var(--color-bg-secondary)] p-1",
445
+ "rounded-[var(--radius-md)]",
446
+ "border border-[var(--color-border)]"
447
+ ].join(" ");
448
+ var tabsTriggerStyles = [
449
+ "relative inline-flex items-center justify-center",
450
+ "px-3 py-1.5",
451
+ "text-[var(--text-sm)] font-medium",
452
+ "text-[var(--color-text-muted)]",
453
+ "rounded-[var(--radius)]",
454
+ "transition-all duration-[var(--transition-fast)]",
455
+ "cursor-pointer select-none",
456
+ "hover:text-[var(--color-text-secondary)]",
457
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring-color)]"
458
+ ].join(" ");
459
+ var tabsTriggerActiveStyles = [
460
+ "bg-[var(--color-surface)] text-[var(--color-text-primary)]",
461
+ "shadow-[var(--shadow-sm)]"
462
+ ].join(" ");
463
+ var tabsContentStyles = [
464
+ "mt-[var(--space-md)]",
465
+ "focus-visible:outline-none"
466
+ ].join(" ");
467
+ var TabsContext = react.createContext(null);
468
+ function useTabsContext() {
469
+ const ctx = react.useContext(TabsContext);
470
+ if (!ctx) throw new Error("Tabs compound components must be used within <Tabs>");
471
+ return ctx;
472
+ }
473
+ var Tabs = react.forwardRef(
474
+ ({ value: controlledValue, defaultValue = "", onValueChange, className, children, ...props }, ref) => {
475
+ const [internal, setInternal] = react.useState(defaultValue);
476
+ const value = controlledValue ?? internal;
477
+ const handleChange = react.useCallback(
478
+ (v) => {
479
+ setInternal(v);
480
+ onValueChange?.(v);
481
+ },
482
+ [onValueChange]
483
+ );
484
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: { value, onValueChange: handleChange }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className, ...props, children }) });
485
+ }
486
+ );
487
+ Tabs.displayName = "Tabs";
488
+ var TabsList = react.forwardRef(
489
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, role: "tablist", className: cn(tabsListStyles, className), ...props })
490
+ );
491
+ TabsList.displayName = "TabsList";
492
+ var TabsTrigger = react.forwardRef(
493
+ ({ value, className, ...props }, ref) => {
494
+ const ctx = useTabsContext();
495
+ const isActive = ctx.value === value;
496
+ return /* @__PURE__ */ jsxRuntime.jsx(
497
+ "button",
498
+ {
499
+ ref,
500
+ role: "tab",
501
+ type: "button",
502
+ "aria-selected": isActive,
503
+ "data-state": isActive ? "active" : "inactive",
504
+ className: cn(
505
+ tabsTriggerStyles,
506
+ isActive && tabsTriggerActiveStyles,
507
+ className
508
+ ),
509
+ onClick: () => ctx.onValueChange(value),
510
+ ...props
511
+ }
512
+ );
513
+ }
514
+ );
515
+ TabsTrigger.displayName = "TabsTrigger";
516
+ var TabsContent = react.forwardRef(
517
+ ({ value, className, children, ...props }, ref) => {
518
+ const ctx = useTabsContext();
519
+ if (ctx.value !== value) return null;
520
+ return /* @__PURE__ */ jsxRuntime.jsx(
521
+ "div",
522
+ {
523
+ ref,
524
+ role: "tabpanel",
525
+ "data-state": "active",
526
+ className: cn(tabsContentStyles, className),
527
+ ...props,
528
+ children
529
+ }
530
+ );
531
+ }
532
+ );
533
+ TabsContent.displayName = "TabsContent";
534
+
535
+ // src/components/table/table.styles.ts
536
+ var tableWrapperStyles = "w-full overflow-auto rounded-[var(--radius-lg)] border border-[var(--color-border)]";
537
+ var tableStyles = "w-full caption-bottom text-[var(--text-sm)] border-collapse";
538
+ var theadStyles = "bg-[var(--color-bg-secondary)]";
539
+ var tbodyStyles = "[&_tr:last-child]:border-0";
540
+ var trStyles = [
541
+ "border-b border-[var(--color-border)]",
542
+ "transition-colors duration-[var(--transition-fast)]",
543
+ "hover:bg-[var(--color-surface-hover)]/50",
544
+ "data-[state=selected]:bg-[var(--color-primary)]/5"
545
+ ].join(" ");
546
+ var thStyles = [
547
+ "h-10 px-4 text-left align-middle",
548
+ "font-medium text-[var(--color-text-muted)] text-[var(--text-xs)] uppercase tracking-wider",
549
+ "[&:has([role=checkbox])]:pr-0"
550
+ ].join(" ");
551
+ var tdStyles = [
552
+ "p-4 align-middle text-[var(--color-text-secondary)]",
553
+ "[&:has([role=checkbox])]:pr-0"
554
+ ].join(" ");
555
+ var TableWrapper = react.forwardRef(
556
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(tableWrapperStyles, className), ...props })
557
+ );
558
+ TableWrapper.displayName = "TableWrapper";
559
+ var Table = react.forwardRef(
560
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(TableWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx("table", { ref, className: cn(tableStyles, className), ...props }) })
561
+ );
562
+ Table.displayName = "Table";
563
+ var Thead = react.forwardRef(
564
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("thead", { ref, className: cn(theadStyles, className), ...props })
565
+ );
566
+ Thead.displayName = "Thead";
567
+ var Tbody = react.forwardRef(
568
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("tbody", { ref, className: cn(tbodyStyles, className), ...props })
569
+ );
570
+ Tbody.displayName = "Tbody";
571
+ var Tr = react.forwardRef(
572
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("tr", { ref, className: cn(trStyles, className), ...props })
573
+ );
574
+ Tr.displayName = "Tr";
575
+ var Th = react.forwardRef(
576
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("th", { ref, className: cn(thStyles, className), ...props })
577
+ );
578
+ Th.displayName = "Th";
579
+ var Td = react.forwardRef(
580
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("td", { ref, className: cn(tdStyles, className), ...props })
581
+ );
582
+ Td.displayName = "Td";
583
+
584
+ // src/components/sidebar/sidebar.styles.ts
585
+ var sidebarStyles = [
586
+ "flex flex-col h-full",
587
+ "bg-[var(--color-bg-secondary)] border-r border-[var(--color-border)]",
588
+ "transition-all duration-[var(--transition-slow)]"
589
+ ].join(" ");
590
+ var sidebarExpandedStyles = "w-[260px]";
591
+ var sidebarCollapsedStyles = "w-[68px]";
592
+ var sidebarHeaderStyles = [
593
+ "flex items-center gap-3",
594
+ "px-[var(--space-md)] h-14",
595
+ "border-b border-[var(--color-border)]",
596
+ "shrink-0"
597
+ ].join(" ");
598
+ var sidebarContentStyles = "flex-1 overflow-y-auto py-[var(--space-sm)] px-[var(--space-sm)]";
599
+ var sidebarFooterStyles = [
600
+ "shrink-0",
601
+ "px-[var(--space-md)] py-[var(--space-sm)]",
602
+ "border-t border-[var(--color-border)]"
603
+ ].join(" ");
604
+ var sidebarSectionStyles = "py-[var(--space-xs)]";
605
+ var sidebarSectionLabelStyles = [
606
+ "px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wider",
607
+ "text-[var(--color-text-muted)]"
608
+ ].join(" ");
609
+ var sidebarItemStyles = [
610
+ "flex items-center gap-3",
611
+ "w-full px-3 py-2",
612
+ "text-[var(--text-sm)] text-[var(--color-text-secondary)]",
613
+ "rounded-[var(--radius)]",
614
+ "cursor-pointer select-none",
615
+ "transition-all duration-[var(--transition-fast)]",
616
+ "hover:bg-[var(--color-surface)] hover:text-[var(--color-text-primary)]"
617
+ ].join(" ");
618
+ var sidebarItemActiveStyles = [
619
+ "bg-[var(--color-primary)]/10 text-[var(--color-primary-hover)]",
620
+ "hover:bg-[var(--color-primary)]/15"
621
+ ].join(" ");
622
+ var sidebarToggleStyles = [
623
+ "flex items-center justify-center",
624
+ "h-7 w-7 rounded-[var(--radius)]",
625
+ "text-[var(--color-text-muted)]",
626
+ "hover:bg-[var(--color-surface)] hover:text-[var(--color-text-primary)]",
627
+ "transition-colors duration-[var(--transition-fast)]",
628
+ "cursor-pointer"
629
+ ].join(" ");
630
+ var SidebarContext = react.createContext({
631
+ collapsed: false,
632
+ toggle: () => {
633
+ }
634
+ });
635
+ function useSidebar() {
636
+ return react.useContext(SidebarContext);
637
+ }
638
+ var Sidebar = react.forwardRef(
639
+ ({
640
+ collapsed: controlledCollapsed,
641
+ defaultCollapsed = false,
642
+ onCollapsedChange,
643
+ className,
644
+ children,
645
+ ...props
646
+ }, ref) => {
647
+ const [internal, setInternal] = react.useState(defaultCollapsed);
648
+ const collapsed = controlledCollapsed ?? internal;
649
+ const toggle = react.useCallback(() => {
650
+ const next = !collapsed;
651
+ setInternal(next);
652
+ onCollapsedChange?.(next);
653
+ }, [collapsed, onCollapsedChange]);
654
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: { collapsed, toggle }, children: /* @__PURE__ */ jsxRuntime.jsx(
655
+ "aside",
656
+ {
657
+ ref,
658
+ className: cn(
659
+ sidebarStyles,
660
+ collapsed ? sidebarCollapsedStyles : sidebarExpandedStyles,
661
+ className
662
+ ),
663
+ ...props,
664
+ children
665
+ }
666
+ ) });
667
+ }
668
+ );
669
+ Sidebar.displayName = "Sidebar";
670
+ var SidebarHeader = react.forwardRef(
671
+ ({ className, logo, children, ...props }, ref) => {
672
+ const { collapsed } = useSidebar();
673
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn(sidebarHeaderStyles, className), ...props, children: [
674
+ logo,
675
+ !collapsed && children
676
+ ] });
677
+ }
678
+ );
679
+ SidebarHeader.displayName = "SidebarHeader";
680
+ var SidebarContent = react.forwardRef(
681
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(sidebarContentStyles, className), ...props })
682
+ );
683
+ SidebarContent.displayName = "SidebarContent";
684
+ var SidebarFooter = react.forwardRef(
685
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(sidebarFooterStyles, className), ...props })
686
+ );
687
+ SidebarFooter.displayName = "SidebarFooter";
688
+ var SidebarSection = react.forwardRef(
689
+ ({ className, label, children, ...props }, ref) => {
690
+ const { collapsed } = useSidebar();
691
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: cn(sidebarSectionStyles, className), ...props, children: [
692
+ label && !collapsed && /* @__PURE__ */ jsxRuntime.jsx("div", { className: sidebarSectionLabelStyles, children: label }),
693
+ children
694
+ ] });
695
+ }
696
+ );
697
+ SidebarSection.displayName = "SidebarSection";
698
+ var SidebarItem = react.forwardRef(
699
+ ({ className, icon, active, children, ...props }, ref) => {
700
+ const { collapsed } = useSidebar();
701
+ return /* @__PURE__ */ jsxRuntime.jsxs(
702
+ "button",
703
+ {
704
+ ref,
705
+ type: "button",
706
+ className: cn(
707
+ sidebarItemStyles,
708
+ active && sidebarItemActiveStyles,
709
+ collapsed && "justify-center px-0",
710
+ className
711
+ ),
712
+ ...props,
713
+ children: [
714
+ icon,
715
+ !collapsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children })
716
+ ]
717
+ }
718
+ );
719
+ }
720
+ );
721
+ SidebarItem.displayName = "SidebarItem";
722
+ var SidebarToggle = react.forwardRef(
723
+ ({ className, ...props }, ref) => {
724
+ const { collapsed, toggle } = useSidebar();
725
+ return /* @__PURE__ */ jsxRuntime.jsx(
726
+ "button",
727
+ {
728
+ ref,
729
+ type: "button",
730
+ onClick: toggle,
731
+ className: cn(sidebarToggleStyles, className),
732
+ "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar",
733
+ ...props,
734
+ children: /* @__PURE__ */ jsxRuntime.jsx(
735
+ "svg",
736
+ {
737
+ xmlns: "http://www.w3.org/2000/svg",
738
+ width: "16",
739
+ height: "16",
740
+ viewBox: "0 0 24 24",
741
+ fill: "none",
742
+ stroke: "currentColor",
743
+ strokeWidth: "2",
744
+ strokeLinecap: "round",
745
+ strokeLinejoin: "round",
746
+ className: cn("transition-transform", collapsed && "rotate-180"),
747
+ children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "15 18 9 12 15 6" })
748
+ }
749
+ )
750
+ }
751
+ );
752
+ }
753
+ );
754
+ SidebarToggle.displayName = "SidebarToggle";
755
+
756
+ exports.Badge = Badge;
757
+ exports.Button = Button;
758
+ exports.Card = Card;
759
+ exports.CardBody = CardBody;
760
+ exports.CardFooter = CardFooter;
761
+ exports.CardHeader = CardHeader;
762
+ exports.Dropdown = Dropdown;
763
+ exports.DropdownContent = DropdownContent;
764
+ exports.DropdownGroup = DropdownGroup;
765
+ exports.DropdownItem = DropdownItem;
766
+ exports.DropdownLabel = DropdownLabel;
767
+ exports.DropdownSeparator = DropdownSeparator;
768
+ exports.DropdownTrigger = DropdownTrigger;
769
+ exports.Input = Input;
770
+ exports.Modal = Modal;
771
+ exports.ModalContent = ModalContent;
772
+ exports.ModalDescription = ModalDescription;
773
+ exports.ModalFooter = ModalFooter;
774
+ exports.ModalTitle = ModalTitle;
775
+ exports.ModalTrigger = ModalTrigger;
776
+ exports.Sidebar = Sidebar;
777
+ exports.SidebarContent = SidebarContent;
778
+ exports.SidebarFooter = SidebarFooter;
779
+ exports.SidebarHeader = SidebarHeader;
780
+ exports.SidebarItem = SidebarItem;
781
+ exports.SidebarSection = SidebarSection;
782
+ exports.SidebarToggle = SidebarToggle;
783
+ exports.Table = Table;
784
+ exports.TableWrapper = TableWrapper;
785
+ exports.Tabs = Tabs;
786
+ exports.TabsContent = TabsContent;
787
+ exports.TabsList = TabsList;
788
+ exports.TabsTrigger = TabsTrigger;
789
+ exports.Tbody = Tbody;
790
+ exports.Td = Td;
791
+ exports.Th = Th;
792
+ exports.Thead = Thead;
793
+ exports.Tr = Tr;
794
+ exports.badgeVariants = badgeVariants;
795
+ exports.buttonVariants = buttonVariants;
796
+ exports.cardVariants = cardVariants;
797
+ exports.cn = cn;
798
+ exports.inputVariants = inputVariants;
799
+ exports.useSidebar = useSidebar;
800
+ //# sourceMappingURL=index.cjs.map
801
+ //# sourceMappingURL=index.cjs.map