@pycolors/ui 1.0.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.
Files changed (52) hide show
  1. package/dist/components/ui/alert.d.ts +19 -0
  2. package/dist/components/ui/alert.d.ts.map +1 -0
  3. package/dist/components/ui/alert.js +37 -0
  4. package/dist/components/ui/badge.d.ts +18 -0
  5. package/dist/components/ui/badge.d.ts.map +1 -0
  6. package/dist/components/ui/badge.js +35 -0
  7. package/dist/components/ui/button.d.ts +14 -0
  8. package/dist/components/ui/button.d.ts.map +1 -0
  9. package/dist/components/ui/button.js +35 -0
  10. package/dist/components/ui/card.d.ts +27 -0
  11. package/dist/components/ui/card.d.ts.map +1 -0
  12. package/dist/components/ui/card.js +43 -0
  13. package/dist/components/ui/dialog.d.ts +12 -0
  14. package/dist/components/ui/dialog.d.ts.map +1 -0
  15. package/dist/components/ui/dialog.js +25 -0
  16. package/dist/components/ui/dropdown-menu.d.ts +25 -0
  17. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  18. package/dist/components/ui/dropdown-menu.js +52 -0
  19. package/dist/components/ui/empty-state.d.ts +9 -0
  20. package/dist/components/ui/empty-state.d.ts.map +1 -0
  21. package/dist/components/ui/empty-state.js +5 -0
  22. package/dist/components/ui/input.d.ts +36 -0
  23. package/dist/components/ui/input.d.ts.map +1 -0
  24. package/dist/components/ui/input.js +37 -0
  25. package/dist/components/ui/pagination.d.ts +56 -0
  26. package/dist/components/ui/pagination.d.ts.map +1 -0
  27. package/dist/components/ui/pagination.js +85 -0
  28. package/dist/components/ui/password-input.d.ts +5 -0
  29. package/dist/components/ui/password-input.d.ts.map +1 -0
  30. package/dist/components/ui/password-input.js +10 -0
  31. package/dist/components/ui/sheet.d.ts +18 -0
  32. package/dist/components/ui/sheet.d.ts.map +1 -0
  33. package/dist/components/ui/sheet.js +53 -0
  34. package/dist/components/ui/skeleton.d.ts +10 -0
  35. package/dist/components/ui/skeleton.d.ts.map +1 -0
  36. package/dist/components/ui/skeleton.js +5 -0
  37. package/dist/components/ui/table.d.ts +17 -0
  38. package/dist/components/ui/table.d.ts.map +1 -0
  39. package/dist/components/ui/table.js +29 -0
  40. package/dist/components/ui/tabs.d.ts +13 -0
  41. package/dist/components/ui/tabs.d.ts.map +1 -0
  42. package/dist/components/ui/tabs.js +34 -0
  43. package/dist/components/ui/toast.d.ts +16 -0
  44. package/dist/components/ui/toast.d.ts.map +1 -0
  45. package/dist/components/ui/toast.js +26 -0
  46. package/dist/index.d.ts +17 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +16 -0
  49. package/dist/lib/utils.d.ts +3 -0
  50. package/dist/lib/utils.d.ts.map +1 -0
  51. package/dist/lib/utils.js +5 -0
  52. package/package.json +52 -0
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ export declare const alertVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "success" | "warning" | "info" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {
7
+ ariaLive?: 'off' | 'polite' | 'assertive';
8
+ }
9
+ export type AlertVariant = NonNullable<AlertProps['variant']>;
10
+ export declare function Alert({ className, variant, ariaLive, ...props }: AlertProps): import("react/jsx-runtime").JSX.Element;
11
+ export type AlertTitleProps = React.HTMLAttributes<HTMLHeadingElement>;
12
+ export declare function AlertTitle({ className, ...props }: AlertTitleProps): import("react/jsx-runtime").JSX.Element;
13
+ export type AlertDescriptionProps = React.HTMLAttributes<HTMLDivElement>;
14
+ export declare function AlertDescription({ className, ...props }: AlertDescriptionProps): import("react/jsx-runtime").JSX.Element;
15
+ export type AlertIndicatorProps = React.HTMLAttributes<HTMLSpanElement>;
16
+ export declare function AlertIndicator({ className, ...props }: AlertIndicatorProps): import("react/jsx-runtime").JSX.Element;
17
+ export type AlertContentProps = React.HTMLAttributes<HTMLDivElement>;
18
+ export declare function AlertContent({ className, ...props }: AlertContentProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../src/components/ui/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,eAAO,MAAM,aAAa;;8EAmBzB,CAAC;AAEF,MAAM,WAAW,UACf,SACE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAE9D,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,OAAO,EACP,QAAmB,EACnB,GAAG,KAAK,EACT,EAAE,UAAU,2CAiBZ;AAED,MAAM,MAAM,eAAe,GACzB,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAE3C,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAWlE;AAED,MAAM,MAAM,qBAAqB,GAC/B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEvC,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAWvB;AAED,MAAM,MAAM,mBAAmB,GAC7B,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;AAExC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAWrB;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAErE,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,iBAAiB,2CAQnB"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from 'class-variance-authority';
3
+ import { cn } from '../../lib/utils.js';
4
+ export const alertVariants = cva('relative w-full rounded-lg border p-4 text-sm', {
5
+ variants: {
6
+ variant: {
7
+ default: 'bg-card text-card-foreground border-border',
8
+ info: 'bg-card text-card-foreground border-border',
9
+ success: 'bg-card text-card-foreground border-success/30 [&_[data-slot=alert-indicator]]:text-success',
10
+ warning: 'bg-card text-card-foreground border-warning/30 [&_[data-slot=alert-indicator]]:text-warning',
11
+ destructive: 'bg-card text-card-foreground border-destructive/40 [&_[data-slot=alert-indicator]]:text-destructive',
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ variant: 'default',
16
+ },
17
+ });
18
+ export function Alert({ className, variant, ariaLive = 'polite', ...props }) {
19
+ const role = ariaLive === 'assertive'
20
+ ? 'alert'
21
+ : ariaLive === 'polite'
22
+ ? 'status'
23
+ : undefined;
24
+ return (_jsx("div", { "data-slot": "alert", role: role, "aria-live": ariaLive === 'off' ? undefined : ariaLive, className: cn(alertVariants({ variant }), className), ...props }));
25
+ }
26
+ export function AlertTitle({ className, ...props }) {
27
+ return (_jsx("h5", { "data-slot": "alert-title", className: cn('mb-1 font-medium leading-none tracking-tight', className), ...props }));
28
+ }
29
+ export function AlertDescription({ className, ...props }) {
30
+ return (_jsx("div", { "data-slot": "alert-description", className: cn('text-sm text-muted-foreground [&_p]:leading-relaxed', className), ...props }));
31
+ }
32
+ export function AlertIndicator({ className, ...props }) {
33
+ return (_jsx("span", { "data-slot": "alert-indicator", className: cn('absolute left-4 top-4 inline-flex size-5 items-center justify-center text-foreground', className), ...props }));
34
+ }
35
+ export function AlertContent({ className, ...props }) {
36
+ return (_jsx("div", { "data-slot": "alert-content", className: cn('pl-8', className), ...props }));
37
+ }
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "outline" | "secondary" | "muted" | "success" | "warning" | null | undefined;
5
+ size?: "sm" | "lg" | "md" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
8
+ /**
9
+ * Render the badge as a Slot wrapper instead of a plain span,
10
+ * useful to style links or custom components as badges.
11
+ */
12
+ asChild?: boolean;
13
+ }
14
+ export type BadgeVariant = NonNullable<BadgeProps['variant']>;
15
+ export type BadgeSize = NonNullable<BadgeProps['size']>;
16
+ declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
17
+ export { Badge, badgeVariants };
18
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,aAAa;;;8EA+BlB,CAAC;AAIF,MAAM,WAAW,UACf,SACE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EACrC,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAExD,QAAA,MAAM,KAAK,oFAaV,CAAC;AAIF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '../../lib/utils.js';
6
+ const badgeVariants = cva('inline-flex items-center gap-1 rounded-full border px-2.5 py-0.5 text-xs font-medium ' +
7
+ 'transition-colors ring-offset-background focus-visible:outline-none focus-visible:ring-2 ' +
8
+ 'focus-visible:ring-ring focus-visible:ring-offset-2', {
9
+ variants: {
10
+ variant: {
11
+ default: 'border-transparent bg-primary text-primary-foreground',
12
+ secondary: 'border-transparent bg-secondary text-secondary-foreground',
13
+ muted: 'border-transparent bg-muted text-muted-foreground',
14
+ outline: 'border-border bg-background text-foreground',
15
+ success: 'border-transparent bg-success text-success-foreground',
16
+ warning: 'border-transparent bg-warning text-warning-foreground',
17
+ destructive: 'border-transparent bg-destructive text-destructive-foreground',
18
+ },
19
+ size: {
20
+ sm: 'h-5 text-[11px]',
21
+ md: 'h-6',
22
+ lg: 'h-7 text-sm',
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ variant: 'default',
27
+ size: 'md',
28
+ },
29
+ });
30
+ const Badge = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
31
+ const Comp = asChild ? Slot : 'span';
32
+ return (_jsx(Comp, { ref: ref, "data-slot": "badge", className: cn(badgeVariants({ variant, size }), className), ...props }));
33
+ });
34
+ Badge.displayName = 'Badge';
35
+ export { Badge, badgeVariants };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface ButtonProps extends React.ComponentProps<'button'>, VariantProps<typeof buttonVariants> {
8
+ asChild?: boolean;
9
+ }
10
+ export type ButtonVariant = NonNullable<ButtonProps['variant']>;
11
+ export type ButtonSize = NonNullable<ButtonProps['size']>;
12
+ declare const Button: React.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
13
+ export { Button, buttonVariants };
14
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,cAAc;;;8EA+BnB,CAAC;AAEF,MAAM,WAAW,WACf,SACE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAC9B,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D,QAAA,MAAM,MAAM,oGAaX,CAAC;AAIF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '../../lib/utils.js';
6
+ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
7
+ variants: {
8
+ variant: {
9
+ default: 'bg-primary text-primary-foreground hover:bg-primary/90',
10
+ destructive: 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
11
+ outline: 'border border-border bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',
12
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
13
+ ghost: 'bg-transparent hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
14
+ link: 'bg-transparent text-primary underline-offset-4 hover:underline',
15
+ },
16
+ size: {
17
+ default: 'h-9 px-4 py-2 has-[>svg]:px-3',
18
+ sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
19
+ lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
20
+ icon: 'size-9',
21
+ 'icon-sm': 'size-8',
22
+ 'icon-lg': 'size-10',
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ variant: 'default',
27
+ size: 'default',
28
+ },
29
+ });
30
+ const Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
31
+ const Comp = asChild ? Slot : 'button';
32
+ return (_jsx(Comp, { ref: ref, "data-slot": "button", className: cn(buttonVariants({ variant, size }), className), ...props }));
33
+ });
34
+ Button.displayName = 'Button';
35
+ export { Button, buttonVariants };
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ export declare const cardVariants: (props?: ({
4
+ variant?: "default" | "muted" | "transparent" | null | undefined;
5
+ interactive?: boolean | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
8
+ /**
9
+ * Render the Card as another element (e.g. <a />, <section />) via Radix Slot.
10
+ * Useful for clickable cards while keeping consistent styling.
11
+ */
12
+ asChild?: boolean;
13
+ }
14
+ export type CardVariant = NonNullable<CardProps['variant']>;
15
+ export type CardInteractive = NonNullable<CardProps['interactive']>;
16
+ export declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
17
+ export type CardHeaderProps = React.HTMLAttributes<HTMLDivElement>;
18
+ export declare function CardHeader({ className, ...props }: CardHeaderProps): import("react/jsx-runtime").JSX.Element;
19
+ export type CardTitleProps = React.HTMLAttributes<HTMLHeadingElement>;
20
+ export declare function CardTitle({ className, ...props }: CardTitleProps): import("react/jsx-runtime").JSX.Element;
21
+ export type CardDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;
22
+ export declare function CardDescription({ className, ...props }: CardDescriptionProps): import("react/jsx-runtime").JSX.Element;
23
+ export type CardContentProps = React.HTMLAttributes<HTMLDivElement>;
24
+ export declare function CardContent({ className, ...props }: CardContentProps): import("react/jsx-runtime").JSX.Element;
25
+ export type CardFooterProps = React.HTMLAttributes<HTMLDivElement>;
26
+ export declare function CardFooter({ className, ...props }: CardFooterProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,eAAO,MAAM,YAAY;;;8EAqBxB,CAAC;AAIF,MAAM,WAAW,SACf,SACE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;AAEpE,eAAO,MAAM,IAAI,kFAmBhB,CAAC;AAIF,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEnE,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAQlE;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAEtE,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,2CAWhE;AAED,MAAM,MAAM,oBAAoB,GAC9B,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAE7C,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,oBAAoB,2CAQtB;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEpE,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAQlB;AAED,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEnE,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAQlE"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '../../lib/utils.js';
6
+ export const cardVariants = cva('rounded-lg border text-card-foreground', {
7
+ variants: {
8
+ variant: {
9
+ default: 'bg-card',
10
+ muted: 'bg-muted/40',
11
+ transparent: 'bg-transparent',
12
+ },
13
+ interactive: {
14
+ false: '',
15
+ true: 'cursor-pointer transition-colors hover:bg-accent/40 ' +
16
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: 'default',
21
+ interactive: false,
22
+ },
23
+ });
24
+ export const Card = React.forwardRef(({ className, variant, interactive, asChild = false, ...props }, ref) => {
25
+ const Comp = asChild ? Slot : 'div';
26
+ return (_jsx(Comp, { ref: ref, "data-slot": "card", className: cn(cardVariants({ variant, interactive }), className), ...props }));
27
+ });
28
+ Card.displayName = 'Card';
29
+ export function CardHeader({ className, ...props }) {
30
+ return (_jsx("div", { "data-slot": "card-header", className: cn('flex flex-col gap-1.5 p-6', className), ...props }));
31
+ }
32
+ export function CardTitle({ className, ...props }) {
33
+ return (_jsx("h3", { "data-slot": "card-title", className: cn('text-base font-semibold leading-none tracking-tight', className), ...props }));
34
+ }
35
+ export function CardDescription({ className, ...props }) {
36
+ return (_jsx("p", { "data-slot": "card-description", className: cn('text-sm text-muted-foreground', className), ...props }));
37
+ }
38
+ export function CardContent({ className, ...props }) {
39
+ return (_jsx("div", { "data-slot": "card-content", className: cn('p-6 pt-0', className), ...props }));
40
+ }
41
+ export function CardFooter({ className, ...props }) {
42
+ return (_jsx("div", { "data-slot": "card-footer", className: cn('flex items-center p-6 pt-0', className), ...props }));
43
+ }
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
4
+ declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare function DialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
8
+ declare function DialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
9
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
10
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
11
+ export { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose, };
12
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAI1D,QAAA,MAAM,MAAM,uCAAuB,CAAC;AACpC,QAAA,MAAM,aAAa,8GAA0B,CAAC;AAE9C,QAAA,MAAM,WAAW,4GAAwB,CAAC;AAmB1C,QAAA,MAAM,aAAa,8JAiCjB,CAAC;AAGH,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAOtC;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAUtC;AAED,QAAA,MAAM,WAAW,oKASf,CAAC;AAGH,QAAA,MAAM,iBAAiB,8KASrB,CAAC;AAGH,OAAO,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,WAAW,GACZ,CAAC"}
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
5
+ import { X } from 'lucide-react';
6
+ import { cn } from '../../lib/utils.js';
7
+ const Dialog = DialogPrimitive.Root;
8
+ const DialogTrigger = DialogPrimitive.Trigger;
9
+ const DialogPortal = DialogPrimitive.Portal;
10
+ const DialogClose = DialogPrimitive.Close;
11
+ const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn('fixed inset-0 z-50 bg-black/50 backdrop-blur-sm', 'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props })));
12
+ DialogOverlay.displayName = 'DialogOverlay';
13
+ const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: cn('fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2', 'rounded-lg border border-border/60 bg-card text-card-foreground shadow-lg', 'p-6 outline-none', 'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', className), ...props, children: [children, _jsxs(DialogClose, { className: cn('absolute right-4 top-4 rounded-sm p-1', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'), children: [_jsx(X, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: "Close" })] })] })] })));
14
+ DialogContent.displayName = 'DialogContent';
15
+ function DialogHeader({ className, ...props }) {
16
+ return (_jsx("div", { className: cn('flex flex-col space-y-1.5', className), ...props }));
17
+ }
18
+ function DialogFooter({ className, ...props }) {
19
+ return (_jsx("div", { className: cn('mt-6 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className), ...props }));
20
+ }
21
+ const DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn('text-lg font-semibold', className), ...props })));
22
+ DialogTitle.displayName = 'DialogTitle';
23
+ const DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn('text-sm text-muted-foreground', className), ...props })));
24
+ DialogDescription.displayName = 'DialogDescription';
25
+ export { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, DialogClose, };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
3
+ declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
4
+ declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
7
+ declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
8
+ declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
9
+ declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
11
+ inset?: boolean;
12
+ } & React.RefAttributes<HTMLDivElement>>;
13
+ declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+ declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
15
+ declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
16
+ inset?: boolean;
17
+ } & React.RefAttributes<HTMLDivElement>>;
18
+ declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
19
+ declare function DropdownMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
20
+ declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
21
+ inset?: boolean;
22
+ } & React.RefAttributes<HTMLDivElement>>;
23
+ declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
24
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, DropdownMenuRadioGroup, };
25
+ //# sourceMappingURL=dropdown-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dropdown-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAQvE,QAAA,MAAM,YAAY,mDAA6B,CAAC;AAChD,QAAA,MAAM,mBAAmB,0HAAgC,CAAC;AAC1D,QAAA,MAAM,iBAAiB,qHAA8B,CAAC;AACtD,QAAA,MAAM,kBAAkB,yDAA+B,CAAC;AACxD,QAAA,MAAM,eAAe,sDAA4B,CAAC;AAClD,QAAA,MAAM,sBAAsB,0HAAmC,CAAC;AAMhE,QAAA,MAAM,mBAAmB,0KAoBvB,CAAC;AAWH,QAAA,MAAM,gBAAgB;YAKV,OAAO;wCAQjB,CAAC;AAGH,QAAA,MAAM,wBAAwB,+KAmB5B,CAAC;AAGH,QAAA,MAAM,qBAAqB,4KAqBzB,CAAC;AAOH,QAAA,MAAM,iBAAiB;YAKX,OAAO;wCAYjB,CAAC;AAGH,QAAA,MAAM,qBAAqB,4KAWzB,CAAC;AAGH,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,2CAUvC;AAMD,QAAA,MAAM,sBAAsB;YAKhB,OAAO;wCAgBjB,CAAC;AAGH,QAAA,MAAM,sBAAsB,6KAmB1B,CAAC;AAOH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
5
+ import { Check, ChevronRight, Circle } from 'lucide-react';
6
+ import { cn } from '../../lib/utils.js';
7
+ /* -----------------------------------------------------------------------------
8
+ * Root primitives
9
+ * -------------------------------------------------------------------------- */
10
+ const DropdownMenu = DropdownMenuPrimitive.Root;
11
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
12
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group;
13
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
14
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub;
15
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
16
+ /* -----------------------------------------------------------------------------
17
+ * Content
18
+ * -------------------------------------------------------------------------- */
19
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 8, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { ref: ref, sideOffset: sideOffset, className: cn('z-50 min-w-48 overflow-hidden rounded-md border border-border/60 bg-popover text-popover-foreground shadow-md', 'p-1', 'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', 'data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1', className), ...props }) })));
20
+ DropdownMenuContent.displayName = 'DropdownMenuContent';
21
+ /* -----------------------------------------------------------------------------
22
+ * Items
23
+ * -------------------------------------------------------------------------- */
24
+ const itemBase = 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors ' +
25
+ 'focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50';
26
+ const DropdownMenuItem = React.forwardRef(({ className, inset, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Item, { ref: ref, className: cn(itemBase, inset && 'pl-8', className), ...props })));
27
+ DropdownMenuItem.displayName = 'DropdownMenuItem';
28
+ const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.CheckboxItem, { ref: ref, className: cn(itemBase, 'pl-8', className), checked: checked, ...props, children: [_jsx("span", { className: "absolute left-2 inline-flex size-4 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4", "aria-hidden": "true" }) }) }), children] })));
29
+ DropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';
30
+ const DropdownMenuRadioItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.RadioItem, { ref: ref, className: cn(itemBase, 'pl-8', className), ...props, children: [_jsx("span", { className: "absolute left-2 inline-flex size-4 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(Circle, { className: "h-2.5 w-2.5 fill-current", "aria-hidden": "true" }) }) }), children] })));
31
+ DropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';
32
+ /* -----------------------------------------------------------------------------
33
+ * Labels / separators / shortcuts
34
+ * -------------------------------------------------------------------------- */
35
+ const DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Label, { ref: ref, className: cn('px-2 py-1.5 text-xs font-medium text-muted-foreground', inset && 'pl-8', className), ...props })));
36
+ DropdownMenuLabel.displayName = 'DropdownMenuLabel';
37
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Separator, { ref: ref, className: cn('my-1 h-px bg-border/60', className), ...props })));
38
+ DropdownMenuSeparator.displayName = 'DropdownMenuSeparator';
39
+ function DropdownMenuShortcut({ className, ...props }) {
40
+ return (_jsx("span", { className: cn('ml-auto text-xs tracking-widest text-muted-foreground', className), ...props }));
41
+ }
42
+ /* -----------------------------------------------------------------------------
43
+ * Sub menus
44
+ * -------------------------------------------------------------------------- */
45
+ const DropdownMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.SubTrigger, { ref: ref, className: cn(itemBase, inset && 'pl-8', 'data-[state=open]:bg-accent', className), ...props, children: [children, _jsx(ChevronRight, { className: "ml-auto h-4 w-4", "aria-hidden": "true" })] })));
46
+ DropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';
47
+ const DropdownMenuSubContent = React.forwardRef(({ className, sideOffset = 8, ...props }, ref) => (_jsx(DropdownMenuPrimitive.SubContent, { ref: ref, sideOffset: sideOffset, className: cn('z-50 min-w-48 overflow-hidden rounded-md border border-border/60 bg-popover text-popover-foreground shadow-md', 'p-1', 'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', className), ...props })));
48
+ DropdownMenuSubContent.displayName = 'DropdownMenuSubContent';
49
+ /* -----------------------------------------------------------------------------
50
+ * Exports
51
+ * -------------------------------------------------------------------------- */
52
+ export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, DropdownMenuRadioGroup, };
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ export interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ icon?: React.ReactNode;
4
+ title: string;
5
+ description?: string;
6
+ action?: React.ReactNode;
7
+ }
8
+ export declare function EmptyState({ icon, title, description, action, className, ...props }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=empty-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../../src/components/ui/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC3E,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,2CAyBjB"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../../lib/utils.js';
3
+ export function EmptyState({ icon, title, description, action, className, ...props }) {
4
+ return (_jsxs("div", { role: "status", className: cn('flex w-full flex-col items-center justify-center rounded-lg border border-dashed border-border p-8 text-center', className), ...props, children: [icon && (_jsx("div", { className: "mb-4 text-muted-foreground", children: icon })), _jsx("h3", { className: "text-sm font-medium", children: title }), description && (_jsx("p", { className: "mt-1 max-w-sm text-sm text-muted-foreground", children: description })), action && _jsx("div", { className: "mt-4", children: action })] }));
5
+ }
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const inputVariants: (props?: ({
4
+ size?: "sm" | "lg" | "md" | null | undefined;
5
+ hasError?: boolean | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type InputSize = 'sm' | 'md' | 'lg';
8
+ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {
9
+ /**
10
+ * Accessible label displayed above the input.
11
+ */
12
+ label?: string;
13
+ /**
14
+ * Helper text displayed below the field when there is no error.
15
+ */
16
+ helperText?: string;
17
+ /**
18
+ * Error message – also toggles the error styles.
19
+ */
20
+ error?: string;
21
+ /**
22
+ * Optional icon rendered on the left inside the field.
23
+ */
24
+ leftIcon?: React.ReactNode;
25
+ /**
26
+ * Optional icon rendered on the right inside the field.
27
+ */
28
+ rightIcon?: React.ReactNode;
29
+ /**
30
+ * Design system size (not the native HTML `size` attribute).
31
+ */
32
+ size?: InputSize;
33
+ }
34
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
35
+ export { Input, inputVariants };
36
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,aAAa;;;8EAmBlB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,UACf,SACE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,EACzD,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,QAAA,MAAM,KAAK,qFAoGV,CAAC;AAIF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '../../lib/utils.js';
6
+ const inputVariants = cva('flex w-full items-center gap-2 rounded-md border bg-background text-sm ring-offset-background transition-colors focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', {
7
+ variants: {
8
+ size: {
9
+ sm: 'h-9 px-3',
10
+ md: 'h-10 px-3.5',
11
+ lg: 'h-11 px-4',
12
+ },
13
+ hasError: {
14
+ false: 'border-input',
15
+ true: 'border-destructive focus-within:ring-destructive',
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ size: 'md',
20
+ hasError: false,
21
+ },
22
+ });
23
+ const Input = React.forwardRef(({ label, helperText, error, leftIcon, rightIcon, className, size, id, disabled, required, ...props }, ref) => {
24
+ const generatedId = React.useId();
25
+ const inputId = id ?? generatedId;
26
+ const describedByIds = [];
27
+ if (helperText && !error)
28
+ describedByIds.push(`${inputId}-helper`);
29
+ if (error)
30
+ describedByIds.push(`${inputId}-error`);
31
+ const describedBy = describedByIds.length > 0
32
+ ? describedByIds.join(' ')
33
+ : undefined;
34
+ return (_jsxs("div", { className: "w-full", children: [label && (_jsxs("label", { htmlFor: inputId, className: "mb-1 block text-sm font-medium text-foreground", children: [label, required ? (_jsx("span", { className: "ml-1 text-destructive", children: "*" })) : null] })), _jsxs("div", { className: cn(inputVariants({ size, hasError: !!error }), className), children: [leftIcon && (_jsx("span", { className: "inline-flex shrink-0 items-center justify-center text-muted-foreground", children: leftIcon })), _jsx("input", { id: inputId, ref: ref, disabled: disabled, required: required, "aria-invalid": !!error, "aria-describedby": describedBy, "aria-errormessage": error ? `${inputId}-error` : undefined, "aria-required": required ? true : undefined, className: cn('flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground', !leftIcon && 'pl-1', !rightIcon && 'pr-1'), ...props }), rightIcon && (_jsx("span", { className: "inline-flex shrink-0 items-center justify-center text-muted-foreground", children: rightIcon }))] }), helperText && !error && (_jsx("p", { id: `${inputId}-helper`, className: "mt-1 text-xs text-muted-foreground", children: helperText })), error && (_jsx("p", { id: `${inputId}-error`, className: "mt-1 text-xs text-destructive", children: error }))] }));
35
+ });
36
+ Input.displayName = 'Input';
37
+ export { Input, inputVariants };
@@ -0,0 +1,56 @@
1
+ import * as React from 'react';
2
+ import { type ButtonProps } from './button.js';
3
+ export type PaginationProps = React.ComponentPropsWithoutRef<'nav'>;
4
+ export declare function Pagination({ className, ...props }: PaginationProps): import("react/jsx-runtime").JSX.Element;
5
+ export type PaginationContentProps = React.ComponentPropsWithoutRef<'ul'>;
6
+ export declare function PaginationContent({ className, ...props }: PaginationContentProps): import("react/jsx-runtime").JSX.Element;
7
+ export type PaginationItemProps = React.ComponentPropsWithoutRef<'li'>;
8
+ export declare function PaginationItem({ className, ...props }: PaginationItemProps): import("react/jsx-runtime").JSX.Element;
9
+ export interface PaginationLinkProps extends React.ComponentPropsWithoutRef<'button'> {
10
+ /**
11
+ * Marks the current page for accessibility and styling.
12
+ */
13
+ isActive?: boolean;
14
+ /**
15
+ * Optional size mapping to Button sizes.
16
+ * Defaults to "icon-sm" for compact pagination.
17
+ */
18
+ size?: ButtonProps['size'];
19
+ }
20
+ export declare function PaginationLink({ className, isActive, size, ...props }: PaginationLinkProps): import("react/jsx-runtime").JSX.Element;
21
+ export interface PaginationPreviousProps extends React.ComponentPropsWithoutRef<'button'> {
22
+ /**
23
+ * Optional label for accessibility and i18n.
24
+ */
25
+ label?: string;
26
+ }
27
+ export declare function PaginationPrevious({ className, label, ...props }: PaginationPreviousProps): import("react/jsx-runtime").JSX.Element;
28
+ export interface PaginationNextProps extends React.ComponentPropsWithoutRef<'button'> {
29
+ /**
30
+ * Optional label for accessibility and i18n.
31
+ */
32
+ label?: string;
33
+ }
34
+ export declare function PaginationNext({ className, label, ...props }: PaginationNextProps): import("react/jsx-runtime").JSX.Element;
35
+ export interface PaginationEllipsisProps extends React.ComponentPropsWithoutRef<'span'> {
36
+ /**
37
+ * Accessible label read by screen readers.
38
+ */
39
+ label?: string;
40
+ }
41
+ export declare function PaginationEllipsis({ className, label, ...props }: PaginationEllipsisProps): import("react/jsx-runtime").JSX.Element;
42
+ export type PaginationToken = {
43
+ type: 'page';
44
+ value: number;
45
+ isActive?: boolean;
46
+ } | {
47
+ type: 'ellipsis';
48
+ key: string;
49
+ };
50
+ export declare function buildPaginationRange(args: {
51
+ page: number;
52
+ totalPages: number;
53
+ siblingCount?: number;
54
+ boundaryCount?: number;
55
+ }): PaginationToken[];
56
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/components/ui/pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAUvD,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAEpE,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CASlE;AAED,MAAM,MAAM,sBAAsB,GAChC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAEvC,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAQxB;AAED,MAAM,MAAM,mBAAmB,GAC7B,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAEvC,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAQrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC;IACnF;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAgB,EAChB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAiBrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC;IACvF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,KAAuB,EACvB,GAAG,KAAK,EACT,EAAE,uBAAuB,2CAezB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC;IACnF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,KAAmB,EACnB,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAerB;AAED,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC;IACrF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,KAAoB,EACpB,GAAG,KAAK,EACT,EAAE,uBAAuB,2CAczB;AASD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,eAAe,EAAE,CA8EpB"}
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronLeft, ChevronRight, MoreHorizontal, } from 'lucide-react';
3
+ import { Button } from './button.js';
4
+ import { cn } from '../../lib/utils.js';
5
+ export function Pagination({ className, ...props }) {
6
+ return (_jsx("nav", { "aria-label": "Pagination", "data-slot": "pagination", className: cn('flex w-full justify-center', className), ...props }));
7
+ }
8
+ export function PaginationContent({ className, ...props }) {
9
+ return (_jsx("ul", { "data-slot": "pagination-content", className: cn('flex items-center gap-1', className), ...props }));
10
+ }
11
+ export function PaginationItem({ className, ...props }) {
12
+ return (_jsx("li", { "data-slot": "pagination-item", className: cn('list-none', className), ...props }));
13
+ }
14
+ export function PaginationLink({ className, isActive = false, size = 'icon-sm', ...props }) {
15
+ return (_jsx(Button, { "data-slot": "pagination-link", type: "button", variant: isActive ? 'secondary' : 'outline', size: size, "aria-current": isActive ? 'page' : undefined, className: cn('min-w-8 px-2',
16
+ // for icon sizes, Button already squares; for non-icon, ensure height rhythm
17
+ isActive && 'font-semibold', className), ...props }));
18
+ }
19
+ export function PaginationPrevious({ className, label = 'Previous page', ...props }) {
20
+ return (_jsxs(Button, { "data-slot": "pagination-previous", type: "button", variant: "outline", size: "sm", "aria-label": label, className: cn('gap-2 px-3', className), ...props, children: [_jsx(ChevronLeft, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { className: "hidden sm:inline", children: "Previous" })] }));
21
+ }
22
+ export function PaginationNext({ className, label = 'Next page', ...props }) {
23
+ return (_jsxs(Button, { "data-slot": "pagination-next", type: "button", variant: "outline", size: "sm", "aria-label": label, className: cn('gap-2 px-3', className), ...props, children: [_jsx("span", { className: "hidden sm:inline", children: "Next" }), _jsx(ChevronRight, { className: "h-4 w-4", "aria-hidden": "true" })] }));
24
+ }
25
+ export function PaginationEllipsis({ className, label = 'More pages', ...props }) {
26
+ return (_jsx("span", { "data-slot": "pagination-ellipsis", "aria-label": label, className: cn('flex h-8 w-8 items-center justify-center text-muted-foreground', className), ...props, children: _jsx(MoreHorizontal, { className: "h-4 w-4", "aria-hidden": "true" }) }));
27
+ }
28
+ export function buildPaginationRange(args) {
29
+ const { page, totalPages, siblingCount = 1, boundaryCount = 1, } = args;
30
+ const clamp = (n) => Math.max(1, Math.min(totalPages, n));
31
+ const current = clamp(page);
32
+ // If total pages is small, show all pages.
33
+ const totalNumbers = boundaryCount * 2 + siblingCount * 2 + 3; // incl current + 2 ellipsis
34
+ if (totalPages <= totalNumbers) {
35
+ return Array.from({ length: totalPages }, (_, i) => ({
36
+ type: 'page',
37
+ value: i + 1,
38
+ isActive: i + 1 === current,
39
+ }));
40
+ }
41
+ const leftBoundaryEnd = boundaryCount;
42
+ const rightBoundaryStart = totalPages - boundaryCount + 1;
43
+ const leftSiblingStart = Math.max(current - siblingCount, leftBoundaryEnd + 2);
44
+ const rightSiblingEnd = Math.min(current + siblingCount, rightBoundaryStart - 2);
45
+ const showLeftEllipsis = leftSiblingStart > leftBoundaryEnd + 2;
46
+ const showRightEllipsis = rightSiblingEnd < rightBoundaryStart - 2;
47
+ const range = [];
48
+ // Left boundary
49
+ for (let p = 1; p <= leftBoundaryEnd; p++) {
50
+ range.push({ type: 'page', value: p, isActive: p === current });
51
+ }
52
+ // Left ellipsis or gap page
53
+ if (showLeftEllipsis) {
54
+ range.push({ type: 'ellipsis', key: 'left' });
55
+ }
56
+ else {
57
+ const gapPage = leftBoundaryEnd + 1;
58
+ range.push({
59
+ type: 'page',
60
+ value: gapPage,
61
+ isActive: gapPage === current,
62
+ });
63
+ }
64
+ // Siblings
65
+ for (let p = leftSiblingStart; p <= rightSiblingEnd; p++) {
66
+ range.push({ type: 'page', value: p, isActive: p === current });
67
+ }
68
+ // Right ellipsis or gap page
69
+ if (showRightEllipsis) {
70
+ range.push({ type: 'ellipsis', key: 'right' });
71
+ }
72
+ else {
73
+ const gapPage = rightBoundaryStart - 1;
74
+ range.push({
75
+ type: 'page',
76
+ value: gapPage,
77
+ isActive: gapPage === current,
78
+ });
79
+ }
80
+ // Right boundary
81
+ for (let p = rightBoundaryStart; p <= totalPages; p++) {
82
+ range.push({ type: 'page', value: p, isActive: p === current });
83
+ }
84
+ return range;
85
+ }
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { type InputProps } from './input.js';
3
+ export type PasswordInputProps = Omit<InputProps, 'type' | 'rightIcon'>;
4
+ export declare const PasswordInput: React.ForwardRefExoticComponent<PasswordInputProps & React.RefAttributes<HTMLInputElement>>;
5
+ //# sourceMappingURL=password-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/password-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,UAAU,EACV,MAAM,GAAG,WAAW,CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,6FAoCxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Eye, EyeOff } from 'lucide-react';
5
+ import { Input } from './input.js';
6
+ export const PasswordInput = React.forwardRef((props, ref) => {
7
+ const [visible, setVisible] = React.useState(false);
8
+ return (_jsx(Input, { ...props, ref: ref, type: visible ? 'text' : 'password', rightIcon: _jsx("button", { type: "button", "aria-label": visible ? 'Hide password' : 'Show password', "aria-pressed": visible, onClick: () => setVisible((v) => !v), className: "\n rounded-sm p-1\n text-muted-foreground\n hover:text-foreground\n focus-visible:outline-none\n focus-visible:ring-2\n focus-visible:ring-ring\n focus-visible:ring-offset-1\n ", children: visible ? (_jsx(EyeOff, { className: "h-4 w-4", "aria-hidden": "true" })) : (_jsx(Eye, { className: "h-4 w-4", "aria-hidden": "true" })) }) }));
9
+ });
10
+ PasswordInput.displayName = 'PasswordInput';
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import { type VariantProps } from 'class-variance-authority';
4
+ declare const Sheet: React.FC<DialogPrimitive.DialogProps>;
5
+ declare const SheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const sheetVariants: (props?: ({
8
+ side?: "top" | "bottom" | "left" | "right" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ export interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
11
+ }
12
+ declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
13
+ declare function SheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
14
+ declare function SheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
15
+ declare const SheetTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
16
+ declare const SheetDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
17
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
18
+ //# sourceMappingURL=sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,QAAA,MAAM,KAAK,uCAAuB,CAAC;AACnC,QAAA,MAAM,YAAY,8GAA0B,CAAC;AAC7C,QAAA,MAAM,UAAU,4GAAwB,CAAC;AA2BzC,QAAA,MAAM,aAAa;;8EAiBlB,CAAC;AAEF,MAAM,WAAW,iBACf,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,EAC9D,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,QAAA,MAAM,YAAY,0FA6BhB,CAAC;AAOH,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAOtC;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAUtC;AAED,QAAA,MAAM,UAAU,oKASd,CAAC;AAGH,QAAA,MAAM,gBAAgB,8KASpB,CAAC;AAOH,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,53 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
5
+ import { cva } from 'class-variance-authority';
6
+ import { X } from 'lucide-react';
7
+ import { cn } from '../../lib/utils.js';
8
+ /* -----------------------------------------------------------------------------
9
+ * Root
10
+ * -------------------------------------------------------------------------- */
11
+ const Sheet = DialogPrimitive.Root;
12
+ const SheetTrigger = DialogPrimitive.Trigger;
13
+ const SheetClose = DialogPrimitive.Close;
14
+ /* -----------------------------------------------------------------------------
15
+ * Overlay
16
+ * -------------------------------------------------------------------------- */
17
+ const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn('fixed inset-0 z-50 bg-black/50 backdrop-blur-sm', 'data-[state=open]:animate-in data-[state=closed]:animate-out', 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props })));
18
+ SheetOverlay.displayName = 'SheetOverlay';
19
+ /* -----------------------------------------------------------------------------
20
+ * Content
21
+ * -------------------------------------------------------------------------- */
22
+ const sheetVariants = cva('fixed z-50 gap-4 bg-card text-foreground shadow-lg transition ease-in-out', {
23
+ variants: {
24
+ side: {
25
+ top: 'inset-x-0 top-0 border-b data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',
26
+ bottom: 'inset-x-0 bottom-0 border-t data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',
27
+ left: 'inset-y-0 left-0 h-full w-80 border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',
28
+ right: 'inset-y-0 right-0 h-full w-80 border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ side: 'right',
33
+ },
34
+ });
35
+ const SheetContent = React.forwardRef(({ side = 'right', className, children, ...props }, ref) => (_jsxs(DialogPrimitive.Portal, { children: [_jsx(SheetOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: cn(sheetVariants({ side }), 'p-6 outline-none', className), ...props, children: [children, _jsxs(SheetClose, { className: cn('absolute right-4 top-4 rounded-sm p-1', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'), children: [_jsx(X, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: "Close" })] })] })] })));
36
+ SheetContent.displayName = 'SheetContent';
37
+ /* -----------------------------------------------------------------------------
38
+ * Structural helpers
39
+ * -------------------------------------------------------------------------- */
40
+ function SheetHeader({ className, ...props }) {
41
+ return (_jsx("div", { className: cn('flex flex-col space-y-1.5 text-left', className), ...props }));
42
+ }
43
+ function SheetFooter({ className, ...props }) {
44
+ return (_jsx("div", { className: cn('mt-4 flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className), ...props }));
45
+ }
46
+ const SheetTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn('text-lg font-semibold', className), ...props })));
47
+ SheetTitle.displayName = 'SheetTitle';
48
+ const SheetDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn('text-sm text-muted-foreground', className), ...props })));
49
+ SheetDescription.displayName = 'SheetDescription';
50
+ /* -----------------------------------------------------------------------------
51
+ * Exports
52
+ * -------------------------------------------------------------------------- */
53
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ export interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * Render the skeleton as a circle.
5
+ * Useful for avatars and icons.
6
+ */
7
+ circle?: boolean;
8
+ }
9
+ export declare function Skeleton({ className, circle, ...props }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,MAAc,EACd,GAAG,KAAK,EACT,EAAE,aAAa,2CAYf"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../../lib/utils.js';
3
+ export function Skeleton({ className, circle = false, ...props }) {
4
+ return (_jsx("div", { "aria-hidden": "true", className: cn('animate-pulse bg-muted', circle ? 'rounded-full' : 'rounded-md', className), ...props }));
5
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+ export declare function Table({ className, ...props }: React.HTMLAttributes<HTMLTableElement>): import("react/jsx-runtime").JSX.Element;
3
+ export declare function TableHeader({ className, ...props }: React.HTMLAttributes<HTMLTableSectionElement>): import("react/jsx-runtime").JSX.Element;
4
+ export declare function TableBody({ className, ...props }: React.HTMLAttributes<HTMLTableSectionElement>): import("react/jsx-runtime").JSX.Element;
5
+ export declare function TableRow({ className, ...props }: React.HTMLAttributes<HTMLTableRowElement>): import("react/jsx-runtime").JSX.Element;
6
+ export declare function TableHead({ className, ...props }: React.ThHTMLAttributes<HTMLTableCellElement>): import("react/jsx-runtime").JSX.Element;
7
+ export declare function TableCell({ className, ...props }: React.TdHTMLAttributes<HTMLTableCellElement>): import("react/jsx-runtime").JSX.Element;
8
+ export declare function TableCaption({ className, ...props }: React.HTMLAttributes<HTMLTableCaptionElement>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function TableEmpty({ colSpan, title, description, }: {
10
+ colSpan: number;
11
+ title?: string;
12
+ description?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ export declare function TableLoading({ colSpan }: {
15
+ colSpan: number;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/ui/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,2CASxC;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC,2CAI/C;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC,2CAO/C;AAED,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,2CAU3C;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,2CAU9C;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,2CAI9C;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,uBAAuB,CAAC,2CAO/C;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,KAAoB,EACpB,WAAgE,GACjE,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,2CAaA;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,2CAW5D"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../../lib/utils.js';
3
+ export function Table({ className, ...props }) {
4
+ return (_jsx("div", { className: "w-full overflow-auto rounded-lg border border-border/60", children: _jsx("table", { className: cn('w-full caption-bottom text-sm', className), ...props }) }));
5
+ }
6
+ export function TableHeader({ className, ...props }) {
7
+ return (_jsx("thead", { className: cn('bg-muted/40', className), ...props }));
8
+ }
9
+ export function TableBody({ className, ...props }) {
10
+ return (_jsx("tbody", { className: cn('[&_tr:last-child]:border-0', className), ...props }));
11
+ }
12
+ export function TableRow({ className, ...props }) {
13
+ return (_jsx("tr", { className: cn('border-b border-border/60 transition-colors hover:bg-accent/30', className), ...props }));
14
+ }
15
+ export function TableHead({ className, ...props }) {
16
+ return (_jsx("th", { className: cn('h-10 px-4 text-left align-middle font-medium text-muted-foreground', className), ...props }));
17
+ }
18
+ export function TableCell({ className, ...props }) {
19
+ return (_jsx("td", { className: cn('p-4 align-middle', className), ...props }));
20
+ }
21
+ export function TableCaption({ className, ...props }) {
22
+ return (_jsx("caption", { className: cn('mt-3 text-sm text-muted-foreground', className), ...props }));
23
+ }
24
+ export function TableEmpty({ colSpan, title = 'No results', description = 'Try adjusting your filters or create a new item.', }) {
25
+ return (_jsx(TableRow, { className: "hover:bg-transparent", children: _jsx(TableCell, { colSpan: colSpan, className: "py-10", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "font-medium", children: title }), _jsx("div", { className: "mt-1 text-sm text-muted-foreground", children: description })] }) }) }));
26
+ }
27
+ export function TableLoading({ colSpan }) {
28
+ return (_jsx(TableRow, { className: "hover:bg-transparent", children: _jsx(TableCell, { colSpan: colSpan, className: "py-10", children: _jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [_jsx("span", { className: "inline-block size-4 animate-spin rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground" }), "Loading\u2026"] }) }) }));
29
+ }
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
3
+ import { type VariantProps } from 'class-variance-authority';
4
+ declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
5
+ declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
6
+ size?: "sm" | "lg" | "md" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
9
+ size?: "sm" | "lg" | "md" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
11
+ declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
13
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA+BlE,QAAA,MAAM,IAAI,gGAAqB,CAAC;AAEhC,QAAA,MAAM,QAAQ;;sHAUZ,CAAC;AAGH,QAAA,MAAM,WAAW;;yHAef,CAAC;AAGH,QAAA,MAAM,WAAW,0JAYf,CAAC;AAGH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
5
+ import { cva } from 'class-variance-authority';
6
+ import { cn } from '../../lib/utils.js';
7
+ const tabsListVariants = cva('inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground', {
8
+ variants: {
9
+ size: {
10
+ sm: 'h-9',
11
+ md: 'h-10',
12
+ lg: 'h-11',
13
+ },
14
+ },
15
+ defaultVariants: { size: 'md' },
16
+ });
17
+ const tabsTriggerVariants = cva('inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition', {
18
+ variants: {
19
+ size: {
20
+ sm: 'text-xs',
21
+ md: 'text-sm',
22
+ lg: 'text-sm',
23
+ },
24
+ },
25
+ defaultVariants: { size: 'md' },
26
+ });
27
+ const Tabs = TabsPrimitive.Root;
28
+ const TabsList = React.forwardRef(({ className, size, ...props }, ref) => (_jsx(TabsPrimitive.List, { ref: ref, className: cn(tabsListVariants({ size }), className), ...props })));
29
+ TabsList.displayName = 'TabsList';
30
+ const TabsTrigger = React.forwardRef(({ className, size, ...props }, ref) => (_jsx(TabsPrimitive.Trigger, { ref: ref, className: cn(tabsTriggerVariants({ size }), 'data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', className), ...props })));
31
+ TabsTrigger.displayName = 'TabsTrigger';
32
+ const TabsContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.Content, { ref: ref, className: cn('mt-4 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', className), ...props })));
33
+ TabsContent.displayName = 'TabsContent';
34
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import * as ToastPrimitive from '@radix-ui/react-toast';
3
+ import { type VariantProps } from 'class-variance-authority';
4
+ declare const toastVariants: (props?: ({
5
+ variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export declare const ToastProvider: React.FC<ToastPrimitive.ToastProviderProps>;
8
+ export declare const ToastViewport: React.ForwardRefExoticComponent<ToastPrimitive.ToastViewportProps & React.RefAttributes<HTMLOListElement>>;
9
+ export interface ToastProps extends React.ComponentPropsWithoutRef<typeof ToastPrimitive.Root>, VariantProps<typeof toastVariants> {
10
+ }
11
+ export declare const Toast: React.ForwardRefExoticComponent<ToastProps & React.RefAttributes<HTMLLIElement>>;
12
+ export declare const ToastTitle: React.ForwardRefExoticComponent<ToastPrimitive.ToastTitleProps & React.RefAttributes<HTMLDivElement>>;
13
+ export declare const ToastDescription: React.ForwardRefExoticComponent<ToastPrimitive.ToastDescriptionProps & React.RefAttributes<HTMLDivElement>>;
14
+ export declare const ToastClose: React.ForwardRefExoticComponent<ToastPrimitive.ToastCloseProps & React.RefAttributes<HTMLButtonElement>>;
15
+ export {};
16
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toast.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,aAAa;;8EAkBlB,CAAC;AAEF,eAAO,MAAM,aAAa,6CAA0B,CAAC;AACrD,eAAO,MAAM,aAAa,4GAA0B,CAAC;AAErD,MAAM,WAAW,UACf,SACE,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,EAC1D,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,eAAO,MAAM,KAAK,kFAShB,CAAC;AAGH,eAAO,MAAM,UAAU,uGAAuB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,6GAA6B,CAAC;AAC3D,eAAO,MAAM,UAAU,0GAAuB,CAAC"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import * as ToastPrimitive from '@radix-ui/react-toast';
5
+ import { cva } from 'class-variance-authority';
6
+ import { cn } from '../../lib/utils.js';
7
+ const toastVariants = cva('pointer-events-auto relative flex w-full items-center justify-between gap-4 rounded-md border px-4 py-3 text-sm shadow-lg', {
8
+ variants: {
9
+ variant: {
10
+ default: 'bg-background text-foreground border-border',
11
+ success: 'bg-background text-foreground border-success/40 text-success',
12
+ warning: 'bg-background text-foreground border-warning/40 text-warning',
13
+ destructive: 'bg-background text-foreground border-destructive/40 text-destructive',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: 'default',
18
+ },
19
+ });
20
+ export const ToastProvider = ToastPrimitive.Provider;
21
+ export const ToastViewport = ToastPrimitive.Viewport;
22
+ export const Toast = React.forwardRef(({ className, variant, ...props }, ref) => (_jsx(ToastPrimitive.Root, { ref: ref, className: cn(toastVariants({ variant }), className), ...props })));
23
+ Toast.displayName = 'Toast';
24
+ export const ToastTitle = ToastPrimitive.Title;
25
+ export const ToastDescription = ToastPrimitive.Description;
26
+ export const ToastClose = ToastPrimitive.Close;
@@ -0,0 +1,17 @@
1
+ export * from './components/ui/button.js';
2
+ export * from './components/ui/card.js';
3
+ export * from './components/ui/badge.js';
4
+ export * from './components/ui/input.js';
5
+ export * from './components/ui/skeleton.js';
6
+ export * from './components/ui/empty-state.js';
7
+ export * from './components/ui/alert.js';
8
+ export * from './components/ui/dialog.js';
9
+ export * from './components/ui/sheet.js';
10
+ export * from './components/ui/dropdown-menu.js';
11
+ export * from './components/ui/tabs.js';
12
+ export * from './components/ui/toast.js';
13
+ export * from './components/ui/pagination.js';
14
+ export * from './components/ui/table.js';
15
+ export * from './components/ui/password-input.js';
16
+ export * from './lib/utils.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export * from './components/ui/button.js';
2
+ export * from './components/ui/card.js';
3
+ export * from './components/ui/badge.js';
4
+ export * from './components/ui/input.js';
5
+ export * from './components/ui/skeleton.js';
6
+ export * from './components/ui/empty-state.js';
7
+ export * from './components/ui/alert.js';
8
+ export * from './components/ui/dialog.js';
9
+ export * from './components/ui/sheet.js';
10
+ export * from './components/ui/dropdown-menu.js';
11
+ export * from './components/ui/tabs.js';
12
+ export * from './components/ui/toast.js';
13
+ export * from './components/ui/pagination.js';
14
+ export * from './components/ui/table.js';
15
+ export * from './components/ui/password-input.js';
16
+ export * from './lib/utils.js';
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,5 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@pycolors/ui",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist"],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "clean": "rm -rf dist",
21
+ "build": "tsc -p tsconfig.json",
22
+ "prepublishOnly": "pnpm clean && pnpm build",
23
+ "lint": "eslint . --max-warnings 0",
24
+ "types:check": "tsc --noEmit",
25
+ "verify": "pnpm lint && pnpm types:check && pnpm build",
26
+ "generate:component": "turbo gen react-component"
27
+ },
28
+ "peerDependencies": {
29
+ "react": ">=18",
30
+ "react-dom": ">=18"
31
+ },
32
+ "dependencies": {
33
+ "@radix-ui/react-alert-dialog": "^1.1.15",
34
+ "@radix-ui/react-dialog": "^1.1.15",
35
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
36
+ "@radix-ui/react-slot": "^1.2.4",
37
+ "@radix-ui/react-tabs": "^1.1.13",
38
+ "@radix-ui/react-toast": "^1.2.15",
39
+ "class-variance-authority": "^0.7.1",
40
+ "clsx": "^2.1.1",
41
+ "tailwind-merge": "^3.4.0"
42
+ },
43
+ "devDependencies": {
44
+ "@repo/eslint-config": "workspace:*",
45
+ "@repo/typescript-config": "workspace:*",
46
+ "@types/node": "^22.15.3",
47
+ "@types/react": "19.2.2",
48
+ "@types/react-dom": "19.2.2",
49
+ "eslint": "^9.39.1",
50
+ "typescript": "5.9.2"
51
+ }
52
+ }