czero 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -0
- package/dist/cli/index.js +218 -0
- package/dist/components.css +336 -0
- package/dist/react/core/build-tokens.d.ts +6 -0
- package/dist/react/core/build-tokens.d.ts.map +1 -0
- package/dist/react/core/theme.config.d.ts +122 -0
- package/dist/react/core/theme.config.d.ts.map +1 -0
- package/dist/react/index.cjs +90 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.ts +35 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +66 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/react/components/badge.d.ts +7 -0
- package/dist/react/react/components/badge.d.ts.map +1 -0
- package/dist/react/react/components/button.d.ts +8 -0
- package/dist/react/react/components/button.d.ts.map +1 -0
- package/dist/react/react/components/card.d.ts +12 -0
- package/dist/react/react/components/card.d.ts.map +1 -0
- package/dist/react/react/components/input.d.ts +8 -0
- package/dist/react/react/components/input.d.ts.map +1 -0
- package/dist/react/react/index.d.ts +8 -0
- package/dist/react/react/index.d.ts.map +1 -0
- package/dist/react/react/lib/cn.d.ts +7 -0
- package/dist/react/react/lib/cn.d.ts.map +1 -0
- package/dist/reset.css +21 -0
- package/dist/styles.css +431 -0
- package/package.json +61 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
const Button = React.forwardRef(({ className = "", variant = "primary", size = "md", loading = false, disabled, children, ...props }, ref) => {
|
|
5
|
+
const classes = [
|
|
6
|
+
"cz-btn",
|
|
7
|
+
`cz-btn-${variant}`,
|
|
8
|
+
`cz-btn-${size}`,
|
|
9
|
+
className,
|
|
10
|
+
].filter(Boolean).join(" ");
|
|
11
|
+
return (jsxs("button", { ref: ref, className: classes, disabled: disabled || loading, ...props, children: [loading && (jsxs("svg", { className: "cz-animate-spin cz-h-4 cz-w-4", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [jsx("circle", { className: "cz-opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), jsx("path", { className: "cz-opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] })), children] }));
|
|
12
|
+
});
|
|
13
|
+
Button.displayName = "Button";
|
|
14
|
+
|
|
15
|
+
const Input = React.forwardRef(({ className = "", label, error, size = "md", id, ...props }, ref) => {
|
|
16
|
+
const inputId = id || React.useId();
|
|
17
|
+
const inputClasses = [
|
|
18
|
+
"cz-input",
|
|
19
|
+
`cz-input-${size}`,
|
|
20
|
+
error && "cz-input-error",
|
|
21
|
+
className,
|
|
22
|
+
].filter(Boolean).join(" ");
|
|
23
|
+
return (jsxs("div", { className: "cz-flex cz-flex-col cz-gap-1.5", children: [label && (jsx("label", { htmlFor: inputId, className: "cz-label", children: label })), jsx("input", { ref: ref, id: inputId, className: inputClasses, ...props }), error && jsx("span", { className: "cz-error", children: error })] }));
|
|
24
|
+
});
|
|
25
|
+
Input.displayName = "Input";
|
|
26
|
+
|
|
27
|
+
const CardRoot = React.forwardRef(({ className = "", noPadding, ...props }, ref) => {
|
|
28
|
+
const classes = [
|
|
29
|
+
"cz-card",
|
|
30
|
+
noPadding && "cz-card-no-padding",
|
|
31
|
+
className,
|
|
32
|
+
].filter(Boolean).join(" ");
|
|
33
|
+
return jsx("div", { ref: ref, className: classes, ...props });
|
|
34
|
+
});
|
|
35
|
+
CardRoot.displayName = "Card";
|
|
36
|
+
const CardHeader = React.forwardRef(({ className = "", ...props }, ref) => (jsx("div", { ref: ref, className: `cz-card-header ${className}`, ...props })));
|
|
37
|
+
CardHeader.displayName = "Card.Header";
|
|
38
|
+
const CardTitle = React.forwardRef(({ className = "", ...props }, ref) => (jsx("h3", { ref: ref, className: `cz-card-title ${className}`, ...props })));
|
|
39
|
+
CardTitle.displayName = "Card.Title";
|
|
40
|
+
const CardDescription = React.forwardRef(({ className = "", ...props }, ref) => (jsx("p", { ref: ref, className: `cz-card-description ${className}`, ...props })));
|
|
41
|
+
CardDescription.displayName = "Card.Description";
|
|
42
|
+
const CardBody = React.forwardRef(({ className = "", ...props }, ref) => (jsx("div", { ref: ref, className: `cz-card-body ${className}`, ...props })));
|
|
43
|
+
CardBody.displayName = "Card.Body";
|
|
44
|
+
const CardFooter = React.forwardRef(({ className = "", ...props }, ref) => (jsx("div", { ref: ref, className: `cz-card-footer ${className}`, ...props })));
|
|
45
|
+
CardFooter.displayName = "Card.Footer";
|
|
46
|
+
const Card = Object.assign(CardRoot, {
|
|
47
|
+
Header: CardHeader,
|
|
48
|
+
Title: CardTitle,
|
|
49
|
+
Description: CardDescription,
|
|
50
|
+
Body: CardBody,
|
|
51
|
+
Footer: CardFooter,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const Badge = React.forwardRef(({ className = "", variant = "default", size = "md", ...props }, ref) => {
|
|
55
|
+
const classes = [
|
|
56
|
+
"cz-badge",
|
|
57
|
+
`cz-badge-${variant}`,
|
|
58
|
+
`cz-badge-${size}`,
|
|
59
|
+
className,
|
|
60
|
+
].filter(Boolean).join(" ");
|
|
61
|
+
return jsx("span", { ref: ref, className: classes, ...props });
|
|
62
|
+
});
|
|
63
|
+
Badge.displayName = "Badge";
|
|
64
|
+
|
|
65
|
+
export { Badge, Button, Card, Input };
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/react/components/button.tsx","../../../src/react/components/input.tsx","../../../src/react/components/card.tsx","../../../src/react/components/badge.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n loading?: boolean;\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (\r\n {\r\n className = \"\",\r\n variant = \"primary\",\r\n size = \"md\",\r\n loading = false,\r\n disabled,\r\n children,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const classes = [\r\n \"cz-btn\",\r\n `cz-btn-${variant}`,\r\n `cz-btn-${size}`,\r\n className,\r\n ].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n className={classes}\r\n disabled={disabled || loading}\r\n {...props}\r\n >\r\n {loading && (\r\n <svg\r\n className=\"cz-animate-spin cz-h-4 cz-w-4\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <circle\r\n className=\"cz-opacity-25\"\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"10\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"4\"\r\n />\r\n <path\r\n className=\"cz-opacity-75\"\r\n fill=\"currentColor\"\r\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n />\r\n </svg>\r\n )}\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n","import * as React from \"react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className = \"\", label, error, size = \"md\", id, ...props }, ref) => {\r\n const inputId = id || React.useId();\r\n\r\n const inputClasses = [\r\n \"cz-input\",\r\n `cz-input-${size}`,\r\n error && \"cz-input-error\",\r\n className,\r\n ].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <div className=\"cz-flex cz-flex-col cz-gap-1.5\">\r\n {label && (\r\n <label htmlFor={inputId} className=\"cz-label\">\r\n {label}\r\n </label>\r\n )}\r\n <input\r\n ref={ref}\r\n id={inputId}\r\n className={inputClasses}\r\n {...props}\r\n />\r\n {error && <span className=\"cz-error\">{error}</span>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n","import * as React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n noPadding?: boolean;\n}\n\nconst CardRoot = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className = \"\", noPadding, ...props }, ref) => {\n const classes = [\n \"cz-card\",\n noPadding && \"cz-card-no-padding\",\n className,\n ].filter(Boolean).join(\" \");\n\n return <div ref={ref} className={classes} {...props} />;\n }\n);\nCardRoot.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className = \"\", ...props }, ref) => (\n <div ref={ref} className={`cz-card-header ${className}`} {...props} />\n));\nCardHeader.displayName = \"Card.Header\";\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className = \"\", ...props }, ref) => (\n <h3 ref={ref} className={`cz-card-title ${className}`} {...props} />\n));\nCardTitle.displayName = \"Card.Title\";\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className = \"\", ...props }, ref) => (\n <p ref={ref} className={`cz-card-description ${className}`} {...props} />\n));\nCardDescription.displayName = \"Card.Description\";\n\nconst CardBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className = \"\", ...props }, ref) => (\n <div ref={ref} className={`cz-card-body ${className}`} {...props} />\n));\nCardBody.displayName = \"Card.Body\";\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className = \"\", ...props }, ref) => (\n <div ref={ref} className={`cz-card-footer ${className}`} {...props} />\n));\nCardFooter.displayName = \"Card.Footer\";\n\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Body: CardBody,\n Footer: CardFooter,\n});\n","import * as React from \"react\";\r\n\r\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n variant?: \"default\" | \"primary\" | \"success\" | \"danger\" | \"warning\" | \"outline\";\r\n size?: \"sm\" | \"md\";\r\n}\r\n\r\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\r\n ({ className = \"\", variant = \"default\", size = \"md\", ...props }, ref) => {\r\n const classes = [\r\n \"cz-badge\",\r\n `cz-badge-${variant}`,\r\n `cz-badge-${size}`,\r\n className,\r\n ].filter(Boolean).join(\" \");\r\n\r\n return <span ref={ref} className={classes} {...props} />;\r\n }\r\n);\r\n\r\nBadge.displayName = \"Badge\";\r\n"],"names":["_jsxs","_jsx"],"mappings":";;;AASO,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CACE,EACE,SAAS,GAAG,EAAE,EACd,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EACD,GAAG,KACD;AACF,IAAA,MAAM,OAAO,GAAG;QACd,QAAQ;AACR,QAAA,CAAA,OAAA,EAAU,OAAO,CAAA,CAAE;AACnB,QAAA,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE;QAChB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE3B,IAAA,QACEA,IAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAA,GACzB,KAAK,EAAA,QAAA,EAAA,CAER,OAAO,KACNA,cACE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EAAA,QAAA,EAAA,CAEnBC,gBACE,SAAS,EAAC,eAAe,EACzB,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EAAA,CACf,EACFA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,eAAe,EACzB,IAAI,EAAC,cAAc,EACnB,CAAC,EAAC,iHAAiH,GACnH,CAAA,EAAA,CACE,CACP,EACA,QAAQ,CAAA,EAAA,CACF;AAEb,CAAC;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;ACvDtB,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CACnC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;IACnE,MAAM,OAAO,GAAG,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE;AAEnC,IAAA,MAAM,YAAY,GAAG;QACnB,UAAU;AACV,QAAA,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE;AAClB,QAAA,KAAK,IAAI,gBAAgB;QACzB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAE3B,QACED,cAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAAA,CAC5C,KAAK,KACJC,GAAA,CAAA,OAAA,EAAA,EAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,UAAU,YAC1C,KAAK,EAAA,CACA,CACT,EACDA,GAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,YAAY,EAAA,GACnB,KAAK,EAAA,CACT,EACD,KAAK,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,UAAU,YAAE,KAAK,EAAA,CAAQ,CAAA,EAAA,CAC/C;AAEV,CAAC;AAGH,KAAK,CAAC,WAAW,GAAG,OAAO;;ACjC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAC/B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AAC/C,IAAA,MAAM,OAAO,GAAG;QACd,SAAS;AACT,QAAA,SAAS,IAAI,oBAAoB;QACjC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAE3B,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAA,GAAM,KAAK,EAAA,CAAI;AACzD,CAAC,CACF;AACD,QAAQ,CAAC,WAAW,GAAG,MAAM;AAE7B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAClCA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA,eAAA,EAAkB,SAAS,EAAE,EAAA,GAAM,KAAK,EAAA,CAAI,CACvE,CAAC;AACF,UAAU,CAAC,WAAW,GAAG,aAAa;AAEtC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAClCA,GAAA,CAAA,IAAA,EAAA,EAAI,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA,cAAA,EAAiB,SAAS,EAAE,EAAA,GAAM,KAAK,EAAA,CAAI,CACrE,CAAC;AACF,SAAS,CAAC,WAAW,GAAG,YAAY;AAEpC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAGtC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAClCA,GAAA,CAAA,GAAA,EAAA,EAAG,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA,oBAAA,EAAuB,SAAS,EAAE,EAAA,GAAM,KAAK,EAAA,CAAI,CAC1E,CAAC;AACF,eAAe,CAAC,WAAW,GAAG,kBAAkB;AAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAG/B,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAClCA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA,aAAA,EAAgB,SAAS,EAAE,EAAA,GAAM,KAAK,EAAA,CAAI,CACrE,CAAC;AACF,QAAQ,CAAC,WAAW,GAAG,WAAW;AAElC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAClCA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA,eAAA,EAAkB,SAAS,EAAE,EAAA,GAAM,KAAK,EAAA,CAAI,CACvE,CAAC;AACF,UAAU,CAAC,WAAW,GAAG,aAAa;MAEzB,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1C,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,eAAe;AAC5B,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAE,UAAU;AACnB,CAAA;;AC1DM,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CACnC,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AACtE,IAAA,MAAM,OAAO,GAAG;QACd,UAAU;AACV,QAAA,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE;AACrB,QAAA,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE;QAClB,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAE3B,OAAOA,GAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAA,GAAM,KAAK,EAAA,CAAI;AAC1D,CAAC;AAGH,KAAK,CAAC,WAAW,GAAG,OAAO;;;;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
3
|
+
variant?: "default" | "primary" | "success" | "danger" | "warning" | "outline";
|
|
4
|
+
size?: "sm" | "md";
|
|
5
|
+
}
|
|
6
|
+
export declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
|
|
7
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../../src/react/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACvE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,KAAK,oFAWjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
|
+
variant?: "primary" | "secondary" | "outline" | "ghost" | "danger";
|
|
4
|
+
size?: "sm" | "md" | "lg";
|
|
5
|
+
loading?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../src/react/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IACrD,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,MAAM,uFAqDlB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
noPadding?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>> & {
|
|
6
|
+
Header: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
Title: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
|
|
8
|
+
Description: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
|
|
9
|
+
Body: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
Footer: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../src/react/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAuDD,eAAO,MAAM,IAAI;;;;;;CAMf,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
3
|
+
label?: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
size?: "sm" | "md" | "lg";
|
|
6
|
+
}
|
|
7
|
+
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
8
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/react/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,KAAK,qFA4BjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CZero React Components
|
|
3
|
+
*/
|
|
4
|
+
export { Button, type ButtonProps } from "./components/button";
|
|
5
|
+
export { Input, type InputProps } from "./components/input";
|
|
6
|
+
export { Card, type CardProps } from "./components/card";
|
|
7
|
+
export { Badge, type BadgeProps } from "./components/badge";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../../../src/react/lib/cn.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
|
package/dist/reset.css
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CZero Minimal Reset
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
*, *::before, *::after {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
* {
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
line-height: var(--cz-font-lineHeight-normal);
|
|
15
|
+
-webkit-font-smoothing: antialiased;
|
|
16
|
+
font-family: var(--cz-font-fontFamily);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
button, input, textarea, select {
|
|
20
|
+
font: inherit;
|
|
21
|
+
}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CZero Minimal Reset
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
*, *::before, *::after {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
* {
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
line-height: var(--cz-font-lineHeight-normal);
|
|
15
|
+
-webkit-font-smoothing: antialiased;
|
|
16
|
+
font-family: var(--cz-font-fontFamily);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
button, input, textarea, select {
|
|
20
|
+
font: inherit;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* CZero Design Tokens
|
|
24
|
+
* Auto-generated from theme.config.ts - DO NOT EDIT MANUALLY
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
:root {
|
|
28
|
+
--cz-color-bg: 0 0% 100%;
|
|
29
|
+
--cz-color-fg: 220 15% 10%;
|
|
30
|
+
--cz-color-primary: 222 47% 45%;
|
|
31
|
+
--cz-color-primaryFg: 0 0% 100%;
|
|
32
|
+
--cz-color-secondary: 220 10% 95%;
|
|
33
|
+
--cz-color-secondaryFg: 220 15% 10%;
|
|
34
|
+
--cz-color-muted: 220 10% 95%;
|
|
35
|
+
--cz-color-mutedFg: 220 10% 40%;
|
|
36
|
+
--cz-color-danger: 0 70% 55%;
|
|
37
|
+
--cz-color-dangerFg: 0 0% 100%;
|
|
38
|
+
--cz-color-success: 142 70% 45%;
|
|
39
|
+
--cz-color-successFg: 0 0% 100%;
|
|
40
|
+
--cz-color-warning: 38 92% 50%;
|
|
41
|
+
--cz-color-warningFg: 0 0% 100%;
|
|
42
|
+
--cz-color-border: 220 13% 90%;
|
|
43
|
+
--cz-color-ring: 222 47% 45%;
|
|
44
|
+
--cz-radius-none: 0;
|
|
45
|
+
--cz-radius-sm: 0.25rem;
|
|
46
|
+
--cz-radius-md: 0.5rem;
|
|
47
|
+
--cz-radius-lg: 0.75rem;
|
|
48
|
+
--cz-radius-xl: 1rem;
|
|
49
|
+
--cz-radius-full: 9999px;
|
|
50
|
+
--cz-shadow-none: none;
|
|
51
|
+
--cz-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
|
|
52
|
+
--cz-shadow-md: 0 2px 4px rgb(0 0 0 / 0.08);
|
|
53
|
+
--cz-shadow-lg: 0 4px 12px rgb(0 0 0 / 0.12);
|
|
54
|
+
--cz-spacing-xs: 0.25rem;
|
|
55
|
+
--cz-spacing-sm: 0.5rem;
|
|
56
|
+
--cz-spacing-md: 0.75rem;
|
|
57
|
+
--cz-spacing-lg: 1rem;
|
|
58
|
+
--cz-spacing-xl: 1.5rem;
|
|
59
|
+
--cz-spacing-2xl: 2rem;
|
|
60
|
+
--cz-transition-fast: 150ms ease;
|
|
61
|
+
--cz-transition-normal: 200ms ease;
|
|
62
|
+
--cz-transition-slow: 300ms ease;
|
|
63
|
+
--cz-font-fontFamily: Inter, system-ui, -apple-system, sans-serif;
|
|
64
|
+
--cz-font-size-xs: 0.75rem;
|
|
65
|
+
--cz-font-size-sm: 0.875rem;
|
|
66
|
+
--cz-font-size-md: 1rem;
|
|
67
|
+
--cz-font-size-lg: 1.125rem;
|
|
68
|
+
--cz-font-size-xl: 1.25rem;
|
|
69
|
+
--cz-font-weight-normal: 400;
|
|
70
|
+
--cz-font-weight-medium: 500;
|
|
71
|
+
--cz-font-weight-semibold: 600;
|
|
72
|
+
--cz-font-weight-bold: 700;
|
|
73
|
+
--cz-font-lineHeight-tight: 1.25;
|
|
74
|
+
--cz-font-lineHeight-normal: 1.5;
|
|
75
|
+
--cz-font-lineHeight-relaxed: 1.75;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.dark {
|
|
79
|
+
--cz-color-bg: 220 40% 3%;
|
|
80
|
+
--cz-color-fg: 210 40% 96%;
|
|
81
|
+
--cz-color-primary: 210 80% 65%;
|
|
82
|
+
--cz-color-primaryFg: 220 40% 3%;
|
|
83
|
+
--cz-color-secondary: 220 8% 25%;
|
|
84
|
+
--cz-color-secondaryFg: 210 40% 96%;
|
|
85
|
+
--cz-color-muted: 220 8% 20%;
|
|
86
|
+
--cz-color-mutedFg: 220 10% 60%;
|
|
87
|
+
--cz-color-danger: 0 80% 65%;
|
|
88
|
+
--cz-color-dangerFg: 0 0% 100%;
|
|
89
|
+
--cz-color-success: 142 70% 55%;
|
|
90
|
+
--cz-color-successFg: 0 0% 100%;
|
|
91
|
+
--cz-color-warning: 38 92% 60%;
|
|
92
|
+
--cz-color-warningFg: 0 0% 0%;
|
|
93
|
+
--cz-color-border: 220 10% 20%;
|
|
94
|
+
--cz-color-ring: 210 80% 65%;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* CZero Component Styles
|
|
98
|
+
* Pure CSS using --cz-* design tokens
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/* ===== UTILITIES ===== */
|
|
102
|
+
|
|
103
|
+
/* Display */
|
|
104
|
+
.cz-inline-flex { display: inline-flex; }
|
|
105
|
+
.cz-flex { display: flex; }
|
|
106
|
+
.cz-flex-col { flex-direction: column; }
|
|
107
|
+
.cz-items-center { align-items: center; }
|
|
108
|
+
.cz-justify-center { justify-content: center; }
|
|
109
|
+
.cz-flex-wrap { flex-wrap: wrap; }
|
|
110
|
+
|
|
111
|
+
/* Gap */
|
|
112
|
+
.cz-gap-1 { gap: 0.25rem; }
|
|
113
|
+
.cz-gap-1\.5 { gap: 0.375rem; }
|
|
114
|
+
.cz-gap-2 { gap: 0.5rem; }
|
|
115
|
+
|
|
116
|
+
/* Width */
|
|
117
|
+
.cz-w-full { width: 100%; }
|
|
118
|
+
|
|
119
|
+
/* Whitespace */
|
|
120
|
+
.cz-whitespace-nowrap { white-space: nowrap; }
|
|
121
|
+
|
|
122
|
+
/* Opacity */
|
|
123
|
+
.cz-opacity-25 { opacity: 0.25; }
|
|
124
|
+
.cz-opacity-50 { opacity: 0.5; }
|
|
125
|
+
.cz-opacity-75 { opacity: 0.75; }
|
|
126
|
+
|
|
127
|
+
/* Animation */
|
|
128
|
+
@keyframes cz-spin {
|
|
129
|
+
from { transform: rotate(0deg); }
|
|
130
|
+
to { transform: rotate(360deg); }
|
|
131
|
+
}
|
|
132
|
+
.cz-animate-spin { animation: cz-spin 1s linear infinite; }
|
|
133
|
+
|
|
134
|
+
/* Sizing */
|
|
135
|
+
.cz-h-4 { height: 1rem; }
|
|
136
|
+
.cz-w-4 { width: 1rem; }
|
|
137
|
+
.cz-h-8 { height: 2rem; }
|
|
138
|
+
.cz-h-10 { height: 2.5rem; }
|
|
139
|
+
.cz-h-12 { height: 3rem; }
|
|
140
|
+
|
|
141
|
+
/* Padding */
|
|
142
|
+
.cz-px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
|
143
|
+
.cz-px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
|
|
144
|
+
.cz-px-4 { padding-left: 1rem; padding-right: 1rem; }
|
|
145
|
+
.cz-px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
|
|
146
|
+
.cz-py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
|
|
147
|
+
.cz-p-lg { padding: var(--cz-spacing-lg); }
|
|
148
|
+
.cz-pb-md { padding-bottom: var(--cz-spacing-md); }
|
|
149
|
+
.cz-pt-md { padding-top: var(--cz-spacing-md); }
|
|
150
|
+
.cz-px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }
|
|
151
|
+
|
|
152
|
+
/* Margin */
|
|
153
|
+
.cz-mb-md { margin-bottom: var(--cz-spacing-md); }
|
|
154
|
+
.cz-mt-md { margin-top: var(--cz-spacing-md); }
|
|
155
|
+
|
|
156
|
+
/* Typography */
|
|
157
|
+
.cz-text-xs { font-size: var(--cz-font-size-xs); }
|
|
158
|
+
.cz-text-sm { font-size: var(--cz-font-size-sm); }
|
|
159
|
+
.cz-text-md { font-size: var(--cz-font-size-md); }
|
|
160
|
+
.cz-text-lg { font-size: var(--cz-font-size-lg); }
|
|
161
|
+
.cz-font-medium { font-weight: var(--cz-font-weight-medium); }
|
|
162
|
+
.cz-font-semibold { font-weight: var(--cz-font-weight-semibold); }
|
|
163
|
+
.cz-leading-tight { line-height: var(--cz-font-lineHeight-tight); }
|
|
164
|
+
|
|
165
|
+
/* Colors - Background */
|
|
166
|
+
.cz-bg-bg { background-color: hsl(var(--cz-color-bg)); }
|
|
167
|
+
.cz-bg-primary { background-color: hsl(var(--cz-color-primary)); }
|
|
168
|
+
.cz-bg-secondary { background-color: hsl(var(--cz-color-secondary)); }
|
|
169
|
+
.cz-bg-muted { background-color: hsl(var(--cz-color-muted)); }
|
|
170
|
+
.cz-bg-danger { background-color: hsl(var(--cz-color-danger)); }
|
|
171
|
+
.cz-bg-success { background-color: hsl(var(--cz-color-success)); }
|
|
172
|
+
.cz-bg-warning { background-color: hsl(var(--cz-color-warning)); }
|
|
173
|
+
.cz-bg-transparent { background-color: transparent; }
|
|
174
|
+
|
|
175
|
+
/* Colors - Text */
|
|
176
|
+
.cz-text-fg { color: hsl(var(--cz-color-fg)); }
|
|
177
|
+
.cz-text-primary-fg { color: hsl(var(--cz-color-primaryFg)); }
|
|
178
|
+
.cz-text-secondary-fg { color: hsl(var(--cz-color-secondaryFg)); }
|
|
179
|
+
.cz-text-muted-fg { color: hsl(var(--cz-color-mutedFg)); }
|
|
180
|
+
.cz-text-danger { color: hsl(var(--cz-color-danger)); }
|
|
181
|
+
.cz-text-danger-fg { color: hsl(var(--cz-color-dangerFg)); }
|
|
182
|
+
.cz-text-success-fg { color: hsl(var(--cz-color-successFg)); }
|
|
183
|
+
.cz-text-warning-fg { color: hsl(var(--cz-color-warningFg)); }
|
|
184
|
+
|
|
185
|
+
/* Border */
|
|
186
|
+
.cz-border { border-width: 1px; border-style: solid; }
|
|
187
|
+
.cz-border-b { border-bottom-width: 1px; border-bottom-style: solid; }
|
|
188
|
+
.cz-border-t { border-top-width: 1px; border-top-style: solid; }
|
|
189
|
+
.cz-border-border { border-color: hsl(var(--cz-color-border)); }
|
|
190
|
+
.cz-border-danger { border-color: hsl(var(--cz-color-danger)); }
|
|
191
|
+
|
|
192
|
+
/* Border Radius */
|
|
193
|
+
.cz-rounded-sm { border-radius: var(--cz-radius-sm); }
|
|
194
|
+
.cz-rounded-md { border-radius: var(--cz-radius-md); }
|
|
195
|
+
.cz-rounded-lg { border-radius: var(--cz-radius-lg); }
|
|
196
|
+
.cz-rounded-full { border-radius: var(--cz-radius-full); }
|
|
197
|
+
|
|
198
|
+
/* Shadow */
|
|
199
|
+
.cz-shadow-sm { box-shadow: var(--cz-shadow-sm); }
|
|
200
|
+
|
|
201
|
+
/* Transitions */
|
|
202
|
+
.cz-transition { transition: all var(--cz-transition-fast); }
|
|
203
|
+
|
|
204
|
+
/* States */
|
|
205
|
+
.cz-disabled {
|
|
206
|
+
pointer-events: none;
|
|
207
|
+
opacity: 0.5;
|
|
208
|
+
cursor: not-allowed;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* Focus */
|
|
212
|
+
.cz-focus-ring:focus {
|
|
213
|
+
outline: none;
|
|
214
|
+
box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.cz-focus-ring:focus-visible {
|
|
218
|
+
outline: none;
|
|
219
|
+
box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Hover states */
|
|
223
|
+
.cz-hover-opacity:hover { opacity: 0.9; }
|
|
224
|
+
.cz-hover-muted:hover { background-color: hsl(var(--cz-color-muted)); }
|
|
225
|
+
|
|
226
|
+
/* ===== BUTTON ===== */
|
|
227
|
+
|
|
228
|
+
.cz-btn {
|
|
229
|
+
display: inline-flex;
|
|
230
|
+
align-items: center;
|
|
231
|
+
justify-content: center;
|
|
232
|
+
gap: 0.5rem;
|
|
233
|
+
border-radius: var(--cz-radius-md);
|
|
234
|
+
font-weight: var(--cz-font-weight-medium);
|
|
235
|
+
transition: all var(--cz-transition-fast);
|
|
236
|
+
cursor: pointer;
|
|
237
|
+
border: none;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.cz-btn:focus-visible {
|
|
241
|
+
outline: none;
|
|
242
|
+
box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.cz-btn:disabled {
|
|
246
|
+
pointer-events: none;
|
|
247
|
+
opacity: 0.5;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* Button Sizes */
|
|
251
|
+
.cz-btn-sm { height: 2rem; padding: 0 0.75rem; font-size: var(--cz-font-size-sm); }
|
|
252
|
+
.cz-btn-md { height: 2.5rem; padding: 0 1rem; font-size: var(--cz-font-size-md); }
|
|
253
|
+
.cz-btn-lg { height: 3rem; padding: 0 1.5rem; font-size: var(--cz-font-size-lg); }
|
|
254
|
+
|
|
255
|
+
/* Button Variants */
|
|
256
|
+
.cz-btn-primary {
|
|
257
|
+
background-color: hsl(var(--cz-color-primary));
|
|
258
|
+
color: hsl(var(--cz-color-primaryFg));
|
|
259
|
+
}
|
|
260
|
+
.cz-btn-primary:hover { opacity: 0.9; }
|
|
261
|
+
|
|
262
|
+
.cz-btn-secondary {
|
|
263
|
+
background-color: hsl(var(--cz-color-secondary));
|
|
264
|
+
color: hsl(var(--cz-color-secondaryFg));
|
|
265
|
+
}
|
|
266
|
+
.cz-btn-secondary:hover { opacity: 0.8; }
|
|
267
|
+
|
|
268
|
+
.cz-btn-outline {
|
|
269
|
+
background-color: transparent;
|
|
270
|
+
border: 1px solid hsl(var(--cz-color-border));
|
|
271
|
+
color: hsl(var(--cz-color-fg));
|
|
272
|
+
}
|
|
273
|
+
.cz-btn-outline:hover { background-color: hsl(var(--cz-color-muted)); }
|
|
274
|
+
|
|
275
|
+
.cz-btn-ghost {
|
|
276
|
+
background-color: transparent;
|
|
277
|
+
color: hsl(var(--cz-color-fg));
|
|
278
|
+
}
|
|
279
|
+
.cz-btn-ghost:hover { background-color: hsl(var(--cz-color-muted)); }
|
|
280
|
+
|
|
281
|
+
.cz-btn-danger {
|
|
282
|
+
background-color: hsl(var(--cz-color-danger));
|
|
283
|
+
color: hsl(var(--cz-color-dangerFg));
|
|
284
|
+
}
|
|
285
|
+
.cz-btn-danger:hover { opacity: 0.9; }
|
|
286
|
+
|
|
287
|
+
/* ===== INPUT ===== */
|
|
288
|
+
|
|
289
|
+
.cz-input {
|
|
290
|
+
width: 100%;
|
|
291
|
+
border-radius: var(--cz-radius-md);
|
|
292
|
+
border: 1px solid hsl(var(--cz-color-border));
|
|
293
|
+
background-color: hsl(var(--cz-color-bg));
|
|
294
|
+
color: hsl(var(--cz-color-fg));
|
|
295
|
+
transition: all var(--cz-transition-fast);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.cz-input::placeholder {
|
|
299
|
+
color: hsl(var(--cz-color-mutedFg));
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.cz-input:focus {
|
|
303
|
+
outline: none;
|
|
304
|
+
box-shadow: 0 0 0 2px hsl(var(--cz-color-ring));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.cz-input:disabled {
|
|
308
|
+
cursor: not-allowed;
|
|
309
|
+
opacity: 0.5;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.cz-input-error {
|
|
313
|
+
border-color: hsl(var(--cz-color-danger));
|
|
314
|
+
}
|
|
315
|
+
.cz-input-error:focus {
|
|
316
|
+
box-shadow: 0 0 0 2px hsl(var(--cz-color-danger));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* Input Sizes */
|
|
320
|
+
.cz-input-sm { height: 2rem; padding: 0 0.5rem; font-size: var(--cz-font-size-sm); }
|
|
321
|
+
.cz-input-md { height: 2.5rem; padding: 0 0.75rem; font-size: var(--cz-font-size-md); }
|
|
322
|
+
.cz-input-lg { height: 3rem; padding: 0 1rem; font-size: var(--cz-font-size-lg); }
|
|
323
|
+
|
|
324
|
+
/* ===== CARD ===== */
|
|
325
|
+
|
|
326
|
+
.cz-card {
|
|
327
|
+
border-radius: var(--cz-radius-lg);
|
|
328
|
+
border: 1px solid hsl(var(--cz-color-border));
|
|
329
|
+
background-color: hsl(var(--cz-color-bg));
|
|
330
|
+
box-shadow: var(--cz-shadow-sm);
|
|
331
|
+
padding: var(--cz-spacing-lg);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.cz-card-no-padding {
|
|
335
|
+
padding: 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.cz-card-header {
|
|
339
|
+
display: flex;
|
|
340
|
+
flex-direction: column;
|
|
341
|
+
gap: 0.375rem;
|
|
342
|
+
padding-bottom: var(--cz-spacing-md);
|
|
343
|
+
border-bottom: 1px solid hsl(var(--cz-color-border));
|
|
344
|
+
margin-bottom: var(--cz-spacing-md);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.cz-card-title {
|
|
348
|
+
font-size: var(--cz-font-size-lg);
|
|
349
|
+
font-weight: var(--cz-font-weight-semibold);
|
|
350
|
+
color: hsl(var(--cz-color-fg));
|
|
351
|
+
line-height: var(--cz-font-lineHeight-tight);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.cz-card-description {
|
|
355
|
+
font-size: var(--cz-font-size-sm);
|
|
356
|
+
color: hsl(var(--cz-color-mutedFg));
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.cz-card-body {
|
|
360
|
+
color: hsl(var(--cz-color-fg));
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.cz-card-footer {
|
|
364
|
+
display: flex;
|
|
365
|
+
align-items: center;
|
|
366
|
+
gap: 0.5rem;
|
|
367
|
+
padding-top: var(--cz-spacing-md);
|
|
368
|
+
margin-top: var(--cz-spacing-md);
|
|
369
|
+
border-top: 1px solid hsl(var(--cz-color-border));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* ===== BADGE ===== */
|
|
373
|
+
|
|
374
|
+
.cz-badge {
|
|
375
|
+
display: inline-flex;
|
|
376
|
+
align-items: center;
|
|
377
|
+
border-radius: var(--cz-radius-full);
|
|
378
|
+
font-weight: var(--cz-font-weight-medium);
|
|
379
|
+
white-space: nowrap;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/* Badge Sizes */
|
|
383
|
+
.cz-badge-sm { padding: 0.125rem 0.375rem; font-size: 0.7rem; }
|
|
384
|
+
.cz-badge-md { padding: 0.125rem 0.5rem; font-size: var(--cz-font-size-xs); }
|
|
385
|
+
|
|
386
|
+
/* Badge Variants */
|
|
387
|
+
.cz-badge-default {
|
|
388
|
+
background-color: hsl(var(--cz-color-secondary));
|
|
389
|
+
color: hsl(var(--cz-color-secondaryFg));
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.cz-badge-primary {
|
|
393
|
+
background-color: hsl(var(--cz-color-primary));
|
|
394
|
+
color: hsl(var(--cz-color-primaryFg));
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.cz-badge-success {
|
|
398
|
+
background-color: hsl(var(--cz-color-success));
|
|
399
|
+
color: hsl(var(--cz-color-successFg));
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.cz-badge-danger {
|
|
403
|
+
background-color: hsl(var(--cz-color-danger));
|
|
404
|
+
color: hsl(var(--cz-color-dangerFg));
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.cz-badge-warning {
|
|
408
|
+
background-color: hsl(var(--cz-color-warning));
|
|
409
|
+
color: hsl(var(--cz-color-warningFg));
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.cz-badge-outline {
|
|
413
|
+
background-color: transparent;
|
|
414
|
+
border: 1px solid hsl(var(--cz-color-border));
|
|
415
|
+
color: hsl(var(--cz-color-fg));
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/* ===== LABEL ===== */
|
|
419
|
+
|
|
420
|
+
.cz-label {
|
|
421
|
+
font-size: var(--cz-font-size-sm);
|
|
422
|
+
font-weight: var(--cz-font-weight-medium);
|
|
423
|
+
color: hsl(var(--cz-color-fg));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/* ===== ERROR TEXT ===== */
|
|
427
|
+
|
|
428
|
+
.cz-error {
|
|
429
|
+
font-size: var(--cz-font-size-sm);
|
|
430
|
+
color: hsl(var(--cz-color-danger));
|
|
431
|
+
}
|