@ekanos/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.
@@ -0,0 +1,12 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const alertVariants: (props?: ({
6
+ variant?: "default" | "destructive" | "success" | "warning" | "info" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
8
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>): React.JSX.Element;
9
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
10
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
11
+
12
+ export { Alert, AlertDescription, AlertTitle };
package/dist/alert.js ADDED
@@ -0,0 +1,92 @@
1
+ // ../ui/src/shadcn/alert.tsx
2
+ import { cva } from "class-variance-authority";
3
+
4
+ // ../ui/src/lib/utils/cn.ts
5
+ import { clsx } from "clsx";
6
+ import { twMerge } from "tailwind-merge";
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+
11
+ // ../ui/src/shadcn/alert.tsx
12
+ import { jsx } from "react/jsx-runtime";
13
+ var alertVariants = cva(
14
+ "relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>i]:grid-cols-[auto_1fr] has-[>i]:gap-x-3 has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>i]:shrink-0 [&>i]:translate-y-0.5 [&>i]:text-current [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
15
+ {
16
+ variants: {
17
+ variant: {
18
+ default: "bg-card text-card-foreground",
19
+ /*
20
+ * The `-strong` steps, not the base tokens.
21
+ *
22
+ * An alert's title and description are small text, so 4.5:1 applies —
23
+ * and the base status colours are FILL colours. `--destructive` reads
24
+ * 2.66:1 as dark-mode text on `--card`, and `--success` reads 3.94:1 on
25
+ * a light `bg-success/5` tint. Both tokens already ship a text step for
26
+ * exactly this; `--warning` and `--info` clear AA as-is and keep theirs.
27
+ *
28
+ * The description drops to /90 of the same step rather than of the base,
29
+ * so it stays above the floor too.
30
+ */
31
+ destructive: "bg-card text-destructive-strong *:data-[slot=alert-description]:text-destructive-strong/90 [&>svg]:text-current",
32
+ success: "bg-card text-success-strong *:data-[slot=alert-description]:text-success-strong/90 [&>svg]:text-current",
33
+ warning: "bg-card text-warning *:data-[slot=alert-description]:text-warning/90 [&>svg]:text-current",
34
+ info: "bg-card text-info *:data-[slot=alert-description]:text-info/90 [&>svg]:text-current"
35
+ }
36
+ },
37
+ defaultVariants: {
38
+ variant: "default"
39
+ }
40
+ }
41
+ );
42
+ function Alert({
43
+ className,
44
+ variant,
45
+ ...props
46
+ }) {
47
+ return /* @__PURE__ */ jsx(
48
+ "div",
49
+ {
50
+ "data-slot": "alert",
51
+ role: "alert",
52
+ className: cn(alertVariants({ variant }), className),
53
+ ...props
54
+ }
55
+ );
56
+ }
57
+ function AlertTitle({ className, ...props }) {
58
+ return /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ "data-slot": "alert-title",
62
+ className: cn(
63
+ // Wraps rather than clamps: an alert title is the sentence that names
64
+ // the problem, and a clamped one on a 390px screen names half of it.
65
+ "col-start-2 min-h-4 font-medium tracking-tight text-balance",
66
+ className
67
+ ),
68
+ ...props
69
+ }
70
+ );
71
+ }
72
+ function AlertDescription({
73
+ className,
74
+ ...props
75
+ }) {
76
+ return /* @__PURE__ */ jsx(
77
+ "div",
78
+ {
79
+ "data-slot": "alert-description",
80
+ className: cn(
81
+ "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
82
+ className
83
+ ),
84
+ ...props
85
+ }
86
+ );
87
+ }
88
+ export {
89
+ Alert,
90
+ AlertDescription,
91
+ AlertTitle
92
+ };
@@ -0,0 +1,12 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const badgeVariants: (props?: ({
7
+ variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | "success" | "warning" | "info" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ type BadgeProps = useRender.ComponentProps<'span'> & VariantProps<typeof badgeVariants>;
10
+ declare function Badge({ className, variant, render, ...props }: BadgeProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
11
+
12
+ export { Badge, type BadgeProps, badgeVariants };
package/dist/badge.js ADDED
@@ -0,0 +1,60 @@
1
+ // ../ui/src/shadcn/badge.tsx
2
+ import { mergeProps } from "@base-ui/react/merge-props";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ import { cva } from "class-variance-authority";
5
+
6
+ // ../ui/src/lib/utils/cn.ts
7
+ import { clsx } from "clsx";
8
+ import { twMerge } from "tailwind-merge";
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+
13
+ // ../ui/src/shadcn/badge.tsx
14
+ var badgeVariants = cva(
15
+ "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",
16
+ {
17
+ variants: {
18
+ variant: {
19
+ default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
20
+ secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
21
+ destructive: "bg-destructive text-destructive-foreground focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
22
+ outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
23
+ ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
24
+ link: "text-primary underline-offset-4 [a&]:hover:underline",
25
+ // `text-success-strong`, not `text-success`: a badge label is `text-xs`,
26
+ // and the base green reaches only 4.19:1 on `--background`. The strong
27
+ // step clears AA on both card and page, and is the same token in dark.
28
+ success: "border-success text-success-strong",
29
+ warning: "border-warning text-warning",
30
+ info: "border-info text-info"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ variant: "default"
35
+ }
36
+ }
37
+ );
38
+ function Badge({
39
+ className,
40
+ variant = "default",
41
+ render,
42
+ ...props
43
+ }) {
44
+ return useRender({
45
+ defaultTagName: "span",
46
+ render,
47
+ props: mergeProps(
48
+ {
49
+ "data-slot": "badge",
50
+ "data-variant": variant,
51
+ className: cn(badgeVariants({ variant }), className)
52
+ },
53
+ props
54
+ )
55
+ });
56
+ }
57
+ export {
58
+ Badge,
59
+ badgeVariants
60
+ };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { Button as Button$1 } from '@base-ui/react/button';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ declare const buttonVariants: (props?: ({
7
+ variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | "success" | null | undefined;
8
+ size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
9
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
10
+ type ButtonProps = Button$1.Props & VariantProps<typeof buttonVariants>;
11
+ declare function Button({ className, variant, size, ...props }: ButtonProps): React.JSX.Element;
12
+
13
+ export { Button, type ButtonProps, buttonVariants };
package/dist/button.js ADDED
@@ -0,0 +1,64 @@
1
+ // ../ui/src/shadcn/button.tsx
2
+ import { Button as ButtonPrimitive } from "@base-ui/react/button";
3
+ import { cva } from "class-variance-authority";
4
+
5
+ // ../ui/src/lib/utils/cn.ts
6
+ import { clsx } from "clsx";
7
+ import { twMerge } from "tailwind-merge";
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+
12
+ // ../ui/src/shadcn/button.tsx
13
+ import { jsx } from "react/jsx-runtime";
14
+ var buttonVariants = cva(
15
+ "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
16
+ {
17
+ variants: {
18
+ variant: {
19
+ default: "bg-primary-strong text-primary-foreground hover:bg-primary-strong/90",
20
+ destructive: "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 text-destructive-foreground",
21
+ outline: "bg-background hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 border shadow-xs",
22
+ success: "bg-success-strong text-success-foreground hover:bg-success-strong/90 focus-visible:ring-success-strong/30",
23
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
24
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
25
+ link: "text-primary underline-offset-4 hover:underline"
26
+ },
27
+ size: {
28
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
29
+ xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
30
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
31
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
32
+ icon: "size-9",
33
+ "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
34
+ "icon-sm": "size-8",
35
+ "icon-lg": "size-10"
36
+ }
37
+ },
38
+ defaultVariants: {
39
+ variant: "default",
40
+ size: "default"
41
+ }
42
+ }
43
+ );
44
+ function Button({
45
+ className,
46
+ variant = "default",
47
+ size = "default",
48
+ ...props
49
+ }) {
50
+ return /* @__PURE__ */ jsx(
51
+ ButtonPrimitive,
52
+ {
53
+ "data-slot": "button",
54
+ "data-variant": variant,
55
+ "data-size": size,
56
+ className: cn(buttonVariants({ variant, size, className })),
57
+ ...props
58
+ }
59
+ );
60
+ }
61
+ export {
62
+ Button,
63
+ buttonVariants
64
+ };
package/dist/card.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { useRender } from '@base-ui/react/use-render';
3
+
4
+ /**
5
+ * Takes a `render` prop (the Base UI convention — see packages/ui/CLAUDE.md) so
6
+ * a card that is itself a destination can BE the link rather than wrapping one:
7
+ * `<Card render={<Link href={href} />}>`. Without it, clickable cards get
8
+ * hand-styled anchors and the surface drifts from this one.
9
+ */
10
+ declare function Card({ className, render, ...props }: useRender.ComponentProps<'div'>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
11
+ declare function CardHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
12
+ declare function CardTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
13
+ declare function CardDescription({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
14
+ declare function CardAction({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
15
+ declare function CardContent({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
16
+ declare function CardFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
17
+
18
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
package/dist/card.js ADDED
@@ -0,0 +1,108 @@
1
+ // ../ui/src/shadcn/card.tsx
2
+ import { mergeProps } from "@base-ui/react/merge-props";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+
5
+ // ../ui/src/lib/utils/cn.ts
6
+ import { clsx } from "clsx";
7
+ import { twMerge } from "tailwind-merge";
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+
12
+ // ../ui/src/shadcn/card.tsx
13
+ import { jsx } from "react/jsx-runtime";
14
+ function Card({
15
+ className,
16
+ render,
17
+ ...props
18
+ }) {
19
+ return useRender({
20
+ defaultTagName: "div",
21
+ render,
22
+ props: mergeProps(
23
+ {
24
+ "data-slot": "card",
25
+ className: cn(
26
+ "bg-card text-card-foreground shadow-card flex flex-col gap-6 rounded-lg border-0 py-5",
27
+ className
28
+ )
29
+ },
30
+ props
31
+ )
32
+ });
33
+ }
34
+ function CardHeader({ className, ...props }) {
35
+ return /* @__PURE__ */ jsx(
36
+ "div",
37
+ {
38
+ "data-slot": "card-header",
39
+ className: cn(
40
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-5 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-5",
41
+ className
42
+ ),
43
+ ...props
44
+ }
45
+ );
46
+ }
47
+ function CardTitle({ className, ...props }) {
48
+ return /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ "data-slot": "card-title",
52
+ className: cn("leading-none font-semibold", className),
53
+ ...props
54
+ }
55
+ );
56
+ }
57
+ function CardDescription({ className, ...props }) {
58
+ return /* @__PURE__ */ jsx(
59
+ "div",
60
+ {
61
+ "data-slot": "card-description",
62
+ className: cn("text-muted-foreground text-sm", className),
63
+ ...props
64
+ }
65
+ );
66
+ }
67
+ function CardAction({ className, ...props }) {
68
+ return /* @__PURE__ */ jsx(
69
+ "div",
70
+ {
71
+ "data-slot": "card-action",
72
+ className: cn(
73
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
74
+ className
75
+ ),
76
+ ...props
77
+ }
78
+ );
79
+ }
80
+ function CardContent({ className, ...props }) {
81
+ return /* @__PURE__ */ jsx(
82
+ "div",
83
+ {
84
+ "data-slot": "card-content",
85
+ className: cn("px-5", className),
86
+ ...props
87
+ }
88
+ );
89
+ }
90
+ function CardFooter({ className, ...props }) {
91
+ return /* @__PURE__ */ jsx(
92
+ "div",
93
+ {
94
+ "data-slot": "card-footer",
95
+ className: cn("flex items-center px-5 [.border-t]:pt-5", className),
96
+ ...props
97
+ }
98
+ );
99
+ }
100
+ export {
101
+ Card,
102
+ CardAction,
103
+ CardContent,
104
+ CardDescription,
105
+ CardFooter,
106
+ CardHeader,
107
+ CardTitle
108
+ };
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
3
+
4
+ declare function Dialog({ ...props }: Dialog$1.Root.Props): React.JSX.Element;
5
+ declare function DialogTrigger({ ...props }: Dialog$1.Trigger.Props): React.JSX.Element;
6
+ declare function DialogPortal({ ...props }: Dialog$1.Portal.Props): React.JSX.Element;
7
+ declare function DialogClose({ ...props }: Dialog$1.Close.Props): React.JSX.Element;
8
+ declare function DialogOverlay({ className, ...props }: Dialog$1.Backdrop.Props): React.JSX.Element;
9
+ declare function DialogContent({ className, children, showCloseButton, ...props }: Dialog$1.Popup.Props & {
10
+ showCloseButton?: boolean;
11
+ }): React.JSX.Element;
12
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
13
+ declare function DialogFooter({ className, showCloseButton, children, ...props }: React.ComponentProps<'div'> & {
14
+ showCloseButton?: boolean;
15
+ }): React.JSX.Element;
16
+ declare function DialogTitle({ className, ...props }: Dialog$1.Title.Props): React.JSX.Element;
17
+ declare function DialogDescription({ className, ...props }: Dialog$1.Description.Props): React.JSX.Element;
18
+
19
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };