@zentauri-ui/zentauri-components 1.7.9 → 1.8.1
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 +9 -4
- package/cli/registry.json +3 -0
- package/dist/chunk-7TGUGTTQ.mjs +147 -0
- package/dist/chunk-7TGUGTTQ.mjs.map +1 -0
- package/dist/chunk-CQMV7BB6.js +50 -0
- package/dist/chunk-CQMV7BB6.js.map +1 -0
- package/dist/chunk-DN7TYUJ6.js +119 -0
- package/dist/chunk-DN7TYUJ6.js.map +1 -0
- package/dist/chunk-ODBG4Y6R.mjs +48 -0
- package/dist/chunk-ODBG4Y6R.mjs.map +1 -0
- package/dist/chunk-RKX5MERK.js +150 -0
- package/dist/chunk-RKX5MERK.js.map +1 -0
- package/dist/chunk-VYI3GS2C.mjs +115 -0
- package/dist/chunk-VYI3GS2C.mjs.map +1 -0
- package/dist/design-system/animated-number.d.ts +32 -0
- package/dist/design-system/animated-number.d.ts.map +1 -0
- package/dist/design-system/copy-button.d.ts +43 -0
- package/dist/design-system/copy-button.d.ts.map +1 -0
- package/dist/design-system/index.d.ts +3 -0
- package/dist/design-system/index.d.ts.map +1 -1
- package/dist/design-system/kbd.d.ts +44 -0
- package/dist/design-system/kbd.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +6 -44
- package/dist/hooks/useClipboard.js.map +1 -1
- package/dist/hooks/useClipboard.mjs +1 -46
- package/dist/hooks/useClipboard.mjs.map +1 -1
- package/dist/ui/animated-number/animated-number.d.ts +4 -0
- package/dist/ui/animated-number/animated-number.d.ts.map +1 -0
- package/dist/ui/animated-number/animations.d.ts +59 -0
- package/dist/ui/animated-number/animations.d.ts.map +1 -0
- package/dist/ui/animated-number/index.d.ts +4 -0
- package/dist/ui/animated-number/index.d.ts.map +1 -0
- package/dist/ui/animated-number/types.d.ts +31 -0
- package/dist/ui/animated-number/types.d.ts.map +1 -0
- package/dist/ui/animated-number/variants.d.ts +5 -0
- package/dist/ui/animated-number/variants.d.ts.map +1 -0
- package/dist/ui/animated-number.js +181 -0
- package/dist/ui/animated-number.js.map +1 -0
- package/dist/ui/animated-number.mjs +177 -0
- package/dist/ui/animated-number.mjs.map +1 -0
- package/dist/ui/copy-button/animated/animations.d.ts +3 -0
- package/dist/ui/copy-button/animated/animations.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/copy-button-animated.d.ts +6 -0
- package/dist/ui/copy-button/animated/copy-button-animated.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/index.d.ts +4 -0
- package/dist/ui/copy-button/animated/index.d.ts.map +1 -0
- package/dist/ui/copy-button/animated/types.d.ts +26 -0
- package/dist/ui/copy-button/animated/types.d.ts.map +1 -0
- package/dist/ui/copy-button/animated.js +59 -0
- package/dist/ui/copy-button/animated.js.map +1 -0
- package/dist/ui/copy-button/animated.mjs +56 -0
- package/dist/ui/copy-button/animated.mjs.map +1 -0
- package/dist/ui/copy-button/copy-button-base.d.ts +6 -0
- package/dist/ui/copy-button/copy-button-base.d.ts.map +1 -0
- package/dist/ui/copy-button/copy-button.d.ts +6 -0
- package/dist/ui/copy-button/copy-button.d.ts.map +1 -0
- package/dist/ui/copy-button/index.d.ts +4 -0
- package/dist/ui/copy-button/index.d.ts.map +1 -0
- package/dist/ui/copy-button/types.d.ts +32 -0
- package/dist/ui/copy-button/types.d.ts.map +1 -0
- package/dist/ui/copy-button/variants.d.ts +6 -0
- package/dist/ui/copy-button/variants.d.ts.map +1 -0
- package/dist/ui/copy-button.js +20 -0
- package/dist/ui/copy-button.js.map +1 -0
- package/dist/ui/copy-button.mjs +15 -0
- package/dist/ui/copy-button.mjs.map +1 -0
- package/dist/ui/kbd/animated/animations.d.ts +3 -0
- package/dist/ui/kbd/animated/animations.d.ts.map +1 -0
- package/dist/ui/kbd/animated/index.d.ts +4 -0
- package/dist/ui/kbd/animated/index.d.ts.map +1 -0
- package/dist/ui/kbd/animated/kbd-animated.d.ts +6 -0
- package/dist/ui/kbd/animated/kbd-animated.d.ts.map +1 -0
- package/dist/ui/kbd/animated/types.d.ts +10 -0
- package/dist/ui/kbd/animated/types.d.ts.map +1 -0
- package/dist/ui/kbd/animated.js +42 -0
- package/dist/ui/kbd/animated.js.map +1 -0
- package/dist/ui/kbd/animated.mjs +39 -0
- package/dist/ui/kbd/animated.mjs.map +1 -0
- package/dist/ui/kbd/index.d.ts +4 -0
- package/dist/ui/kbd/index.d.ts.map +1 -0
- package/dist/ui/kbd/kbd-base.d.ts +6 -0
- package/dist/ui/kbd/kbd-base.d.ts.map +1 -0
- package/dist/ui/kbd/kbd.d.ts +6 -0
- package/dist/ui/kbd/kbd.d.ts.map +1 -0
- package/dist/ui/kbd/types.d.ts +17 -0
- package/dist/ui/kbd/types.d.ts.map +1 -0
- package/dist/ui/kbd/variants.d.ts +8 -0
- package/dist/ui/kbd/variants.d.ts.map +1 -0
- package/dist/ui/kbd.js +23 -0
- package/dist/ui/kbd.js.map +1 -0
- package/dist/ui/kbd.mjs +14 -0
- package/dist/ui/kbd.mjs.map +1 -0
- package/package.json +1 -1
- package/src/design-system/animated-number.ts +53 -0
- package/src/design-system/copy-button.ts +81 -0
- package/src/design-system/index.ts +3 -0
- package/src/design-system/kbd.ts +83 -0
- package/src/ui/animated-number/animated-number.test.tsx +64 -0
- package/src/ui/animated-number/animated-number.tsx +120 -0
- package/src/ui/animated-number/animations.ts +22 -0
- package/src/ui/animated-number/index.ts +4 -0
- package/src/ui/animated-number/types.ts +39 -0
- package/src/ui/animated-number/variants.ts +14 -0
- package/src/ui/copy-button/animated/animations.ts +22 -0
- package/src/ui/copy-button/animated/copy-button-animated.tsx +39 -0
- package/src/ui/copy-button/animated/index.ts +10 -0
- package/src/ui/copy-button/animated/types.ts +21 -0
- package/src/ui/copy-button/copy-button-base.tsx +88 -0
- package/src/ui/copy-button/copy-button.test.tsx +82 -0
- package/src/ui/copy-button/copy-button.tsx +9 -0
- package/src/ui/copy-button/index.ts +10 -0
- package/src/ui/copy-button/types.ts +37 -0
- package/src/ui/copy-button/variants.ts +29 -0
- package/src/ui/kbd/animated/animations.ts +15 -0
- package/src/ui/kbd/animated/index.ts +9 -0
- package/src/ui/kbd/animated/kbd-animated.tsx +26 -0
- package/src/ui/kbd/animated/types.ts +16 -0
- package/src/ui/kbd/index.ts +5 -0
- package/src/ui/kbd/kbd-base.tsx +50 -0
- package/src/ui/kbd/kbd.test.tsx +48 -0
- package/src/ui/kbd/kbd.tsx +9 -0
- package/src/ui/kbd/types.ts +21 -0
- package/src/ui/kbd/variants.ts +31 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkDN7TYUJ6_js = require('../../chunk-DN7TYUJ6.js');
|
|
5
|
+
require('../../chunk-ZS5756ZC.js');
|
|
6
|
+
var framerMotion = require('framer-motion');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
// src/ui/kbd/animated/animations.ts
|
|
10
|
+
var kbdAnimationPresets = {
|
|
11
|
+
none: {},
|
|
12
|
+
press: {
|
|
13
|
+
whileHover: { y: -1 },
|
|
14
|
+
whileTap: { y: 1, scale: 0.96 },
|
|
15
|
+
transition: { type: "spring", stiffness: 600, damping: 22 }
|
|
16
|
+
},
|
|
17
|
+
pop: {
|
|
18
|
+
initial: { scale: 0.85, opacity: 0 },
|
|
19
|
+
animate: { scale: 1, opacity: 1 },
|
|
20
|
+
transition: { type: "spring", stiffness: 520, damping: 26 }
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function KbdAnimated({ animation = "none", ...props }) {
|
|
24
|
+
const motionProps = kbdAnimationPresets[animation];
|
|
25
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26
|
+
chunkDN7TYUJ6_js.KbdBase,
|
|
27
|
+
{
|
|
28
|
+
...{
|
|
29
|
+
as: framerMotion.motion.span,
|
|
30
|
+
initial: animation === "none" ? false : void 0,
|
|
31
|
+
...motionProps,
|
|
32
|
+
...props
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
KbdAnimated.displayName = "KbdAnimated";
|
|
38
|
+
|
|
39
|
+
exports.KbdAnimated = KbdAnimated;
|
|
40
|
+
exports.kbdAnimationPresets = kbdAnimationPresets;
|
|
41
|
+
//# sourceMappingURL=animated.js.map
|
|
42
|
+
//# sourceMappingURL=animated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/kbd/animated/animations.ts","../../../src/ui/kbd/animated/kbd-animated.tsx"],"names":["jsx","KbdBase","motion"],"mappings":";;;;;;;;AAEO,IAAM,mBAAA,GAA2C;AAAA,EACtD,MAAM,EAAC;AAAA,EACP,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,EAAE,CAAA,EAAG,EAAA,EAAG;AAAA,IACpB,QAAA,EAAU,EAAE,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,IAC9B,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG,GAC5D;AAAA,EACA,GAAA,EAAK;AAAA,IACH,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,IACnC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,IAChC,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG;AAE9D;ACJO,SAAS,YAAY,EAAE,SAAA,GAAY,MAAA,EAAQ,GAAG,OAAM,EAAqB;AAC9E,EAAA,MAAM,WAAA,GAAc,oBAAoB,SAAS,CAAA;AAEjD,EAAA,uBACEA,cAAA;AAAA,IAACC,wBAAA;AAAA,IAAA;AAAA,MACE,GAAI;AAAA,QACH,IAAIC,mBAAA,CAAO,IAAA;AAAA,QACX,OAAA,EAAS,SAAA,KAAc,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,QACxC,GAAG,WAAA;AAAA,QACH,GAAG;AAAA;AACL;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"animated.js","sourcesContent":["import type { KbdAnimationPresets } from \"./types\";\n\nexport const kbdAnimationPresets: KbdAnimationPresets = {\n none: {},\n press: {\n whileHover: { y: -1 },\n whileTap: { y: 1, scale: 0.96 },\n transition: { type: \"spring\", stiffness: 600, damping: 22 },\n },\n pop: {\n initial: { scale: 0.85, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { type: \"spring\", stiffness: 520, damping: 26 },\n },\n};\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\n\nimport { KbdBase } from \"../kbd-base\";\nimport type { KbdBaseProps } from \"../types\";\n\nimport { kbdAnimationPresets } from \"./animations\";\nimport type { KbdAnimatedProps } from \"./types\";\n\nexport function KbdAnimated({ animation = \"none\", ...props }: KbdAnimatedProps) {\n const motionProps = kbdAnimationPresets[animation];\n\n return (\n <KbdBase\n {...({\n as: motion.span,\n initial: animation === \"none\" ? false : undefined,\n ...motionProps,\n ...props,\n } as KbdBaseProps)}\n />\n );\n}\n\nKbdAnimated.displayName = \"KbdAnimated\";\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { KbdBase } from '../../chunk-VYI3GS2C.mjs';
|
|
3
|
+
import '../../chunk-4D54YOL6.mjs';
|
|
4
|
+
import { motion } from 'framer-motion';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
// src/ui/kbd/animated/animations.ts
|
|
8
|
+
var kbdAnimationPresets = {
|
|
9
|
+
none: {},
|
|
10
|
+
press: {
|
|
11
|
+
whileHover: { y: -1 },
|
|
12
|
+
whileTap: { y: 1, scale: 0.96 },
|
|
13
|
+
transition: { type: "spring", stiffness: 600, damping: 22 }
|
|
14
|
+
},
|
|
15
|
+
pop: {
|
|
16
|
+
initial: { scale: 0.85, opacity: 0 },
|
|
17
|
+
animate: { scale: 1, opacity: 1 },
|
|
18
|
+
transition: { type: "spring", stiffness: 520, damping: 26 }
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
function KbdAnimated({ animation = "none", ...props }) {
|
|
22
|
+
const motionProps = kbdAnimationPresets[animation];
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
KbdBase,
|
|
25
|
+
{
|
|
26
|
+
...{
|
|
27
|
+
as: motion.span,
|
|
28
|
+
initial: animation === "none" ? false : void 0,
|
|
29
|
+
...motionProps,
|
|
30
|
+
...props
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
KbdAnimated.displayName = "KbdAnimated";
|
|
36
|
+
|
|
37
|
+
export { KbdAnimated, kbdAnimationPresets };
|
|
38
|
+
//# sourceMappingURL=animated.mjs.map
|
|
39
|
+
//# sourceMappingURL=animated.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/kbd/animated/animations.ts","../../../src/ui/kbd/animated/kbd-animated.tsx"],"names":[],"mappings":";;;;;;AAEO,IAAM,mBAAA,GAA2C;AAAA,EACtD,MAAM,EAAC;AAAA,EACP,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,EAAE,CAAA,EAAG,EAAA,EAAG;AAAA,IACpB,QAAA,EAAU,EAAE,CAAA,EAAG,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,IAC9B,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG,GAC5D;AAAA,EACA,GAAA,EAAK;AAAA,IACH,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,IACnC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,IAChC,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG;AAE9D;ACJO,SAAS,YAAY,EAAE,SAAA,GAAY,MAAA,EAAQ,GAAG,OAAM,EAAqB;AAC9E,EAAA,MAAM,WAAA,GAAc,oBAAoB,SAAS,CAAA;AAEjD,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAI;AAAA,QACH,IAAI,MAAA,CAAO,IAAA;AAAA,QACX,OAAA,EAAS,SAAA,KAAc,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,QACxC,GAAG,WAAA;AAAA,QACH,GAAG;AAAA;AACL;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"animated.mjs","sourcesContent":["import type { KbdAnimationPresets } from \"./types\";\n\nexport const kbdAnimationPresets: KbdAnimationPresets = {\n none: {},\n press: {\n whileHover: { y: -1 },\n whileTap: { y: 1, scale: 0.96 },\n transition: { type: \"spring\", stiffness: 600, damping: 22 },\n },\n pop: {\n initial: { scale: 0.85, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n transition: { type: \"spring\", stiffness: 520, damping: 26 },\n },\n};\n","\"use client\";\n\nimport { motion } from \"framer-motion\";\n\nimport { KbdBase } from \"../kbd-base\";\nimport type { KbdBaseProps } from \"../types\";\n\nimport { kbdAnimationPresets } from \"./animations\";\nimport type { KbdAnimatedProps } from \"./types\";\n\nexport function KbdAnimated({ animation = \"none\", ...props }: KbdAnimatedProps) {\n const motionProps = kbdAnimationPresets[animation];\n\n return (\n <KbdBase\n {...({\n as: motion.span,\n initial: animation === \"none\" ? false : undefined,\n ...motionProps,\n ...props,\n } as KbdBaseProps)}\n />\n );\n}\n\nKbdAnimated.displayName = \"KbdAnimated\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/kbd/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { KbdBaseProps } from "./types";
|
|
2
|
+
export declare function KbdBase({ keys, separator, appearance, size, children, className, as: Wrapper, ref, ...rest }: KbdBaseProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare namespace KbdBase {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=kbd-base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd-base.d.ts","sourceRoot":"","sources":["../../../src/ui/kbd/kbd-base.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,EAAE,EAAE,OAAgB,EACpB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,YAAY,2CA2Bd;yBArCe,OAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../../src/ui/kbd/kbd.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,2CAElC;yBAFe,GAAG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { VariantProps } from "class-variance-authority";
|
|
2
|
+
import type { ComponentPropsWithRef, ElementType, ReactNode } from "react";
|
|
3
|
+
import type { kbdKeyVariants } from "./variants";
|
|
4
|
+
export type KbdVariantProps = VariantProps<typeof kbdKeyVariants>;
|
|
5
|
+
export interface KbdBaseProps extends Omit<ComponentPropsWithRef<"span">, "children"> {
|
|
6
|
+
/** Keys to render as individual keycaps, e.g. `["⌘", "K"]`. Takes precedence over `children`. */
|
|
7
|
+
keys?: ReactNode[];
|
|
8
|
+
/** Optional node rendered between keycaps (e.g. "+" or "then"). */
|
|
9
|
+
separator?: ReactNode;
|
|
10
|
+
appearance?: KbdVariantProps["appearance"];
|
|
11
|
+
size?: KbdVariantProps["size"];
|
|
12
|
+
/** Single keycap content when `keys` is not provided. */
|
|
13
|
+
children?: ReactNode;
|
|
14
|
+
as?: ElementType;
|
|
15
|
+
}
|
|
16
|
+
export type KbdProps = Omit<KbdBaseProps, "as">;
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/kbd/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAElE,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IACvD,iGAAiG;IACjG,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,EAAE,CAAC,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const kbdKeyVariants: (props?: ({
|
|
2
|
+
appearance?: "default" | "outline" | "glass" | "sky" | "emerald" | "violet" | "amber" | "rose" | "gray" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "secondary" | "destructive" | "ghost" | null | undefined;
|
|
3
|
+
size?: "md" | "sm" | "lg" | null | undefined;
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
|
+
export declare const kbdSeparatorVariants: (props?: ({
|
|
6
|
+
size?: "md" | "sm" | "lg" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
//# sourceMappingURL=variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/ui/kbd/variants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;8EASzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;8EAUhC,CAAC"}
|
package/dist/ui/kbd.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkDN7TYUJ6_js = require('../chunk-DN7TYUJ6.js');
|
|
5
|
+
require('../chunk-ZS5756ZC.js');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function Kbd(props) {
|
|
9
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkDN7TYUJ6_js.KbdBase, { ...props });
|
|
10
|
+
}
|
|
11
|
+
Kbd.displayName = "Kbd";
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, "kbdKeyVariants", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkDN7TYUJ6_js.kbdKeyVariants; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "kbdSeparatorVariants", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkDN7TYUJ6_js.kbdSeparatorVariants; }
|
|
20
|
+
});
|
|
21
|
+
exports.Kbd = Kbd;
|
|
22
|
+
//# sourceMappingURL=kbd.js.map
|
|
23
|
+
//# sourceMappingURL=kbd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ui/kbd/kbd.tsx"],"names":["jsx","KbdBase"],"mappings":";;;;;;AAIO,SAAS,IAAI,KAAA,EAAiB;AACnC,EAAA,uBAAOA,cAAA,CAACC,wBAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;AAEA,GAAA,CAAI,WAAA,GAAc,KAAA","file":"kbd.js","sourcesContent":["// kbd.tsx — default static entry (no framer-motion)\nimport { KbdBase } from \"./kbd-base\";\nimport type { KbdProps } from \"./types\";\n\nexport function Kbd(props: KbdProps) {\n return <KbdBase {...props} />;\n}\n\nKbd.displayName = \"Kbd\";\n"]}
|
package/dist/ui/kbd.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { KbdBase } from '../chunk-VYI3GS2C.mjs';
|
|
3
|
+
export { kbdKeyVariants, kbdSeparatorVariants } from '../chunk-VYI3GS2C.mjs';
|
|
4
|
+
import '../chunk-4D54YOL6.mjs';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function Kbd(props) {
|
|
8
|
+
return /* @__PURE__ */ jsx(KbdBase, { ...props });
|
|
9
|
+
}
|
|
10
|
+
Kbd.displayName = "Kbd";
|
|
11
|
+
|
|
12
|
+
export { Kbd };
|
|
13
|
+
//# sourceMappingURL=kbd.mjs.map
|
|
14
|
+
//# sourceMappingURL=kbd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ui/kbd/kbd.tsx"],"names":[],"mappings":";;;;;AAIO,SAAS,IAAI,KAAA,EAAiB;AACnC,EAAA,uBAAO,GAAA,CAAC,OAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;AAEA,GAAA,CAAI,WAAA,GAAc,KAAA","file":"kbd.mjs","sourcesContent":["// kbd.tsx — default static entry (no framer-motion)\nimport { KbdBase } from \"./kbd-base\";\nimport type { KbdProps } from \"./types\";\n\nexport function Kbd(props: KbdProps) {\n return <KbdBase {...props} />;\n}\n\nKbd.displayName = \"Kbd\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zentauri-ui/zentauri-components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "React + Tailwind UI kit with charts, ESM/CJS builds, per-entry exports, and a zentauri-components / zentauri-ui CLI to vendor UI or hook source into your app",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const zuiAnimatedNumberBase =
|
|
2
|
+
"relative flex w-full overflow-hidden [perspective:1000px]";
|
|
3
|
+
|
|
4
|
+
export const zuiAnimatedNumberAppearance = {
|
|
5
|
+
default:
|
|
6
|
+
"text-[color:var(--zui-animated-number-default-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-animated-number-default-fg-dark,oklch(98.4%_0.003_247.858))]",
|
|
7
|
+
success:
|
|
8
|
+
"text-[color:var(--zui-animated-number-success-fg,oklch(62.7%_0.194_149.214))] dark:text-[color:var(--zui-animated-number-success-fg-dark,oklch(79.2%_0.209_151.711))]",
|
|
9
|
+
warning:
|
|
10
|
+
"text-[color:var(--zui-animated-number-warning-fg,oklch(66.6%_0.179_58.318))] dark:text-[color:var(--zui-animated-number-warning-fg-dark,oklch(82.8%_0.189_84.429))]",
|
|
11
|
+
error:
|
|
12
|
+
"text-[color:var(--zui-animated-number-error-fg,oklch(57.7%_0.245_27.325))] dark:text-[color:var(--zui-animated-number-error-fg-dark,oklch(70.4%_0.191_22.216))]",
|
|
13
|
+
info: "text-[color:var(--zui-animated-number-info-fg,oklch(58.8%_0.158_241.966))] dark:text-[color:var(--zui-animated-number-info-fg-dark,oklch(74.6%_0.16_232.661))]",
|
|
14
|
+
ghost:
|
|
15
|
+
"text-[color:var(--zui-animated-number-ghost-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-animated-number-ghost-fg-dark,oklch(70.4%_0.04_256.788))]",
|
|
16
|
+
purple:
|
|
17
|
+
"text-[color:var(--zui-animated-number-purple-fg,oklch(55.8%_0.288_302.321))] dark:text-[color:var(--zui-animated-number-purple-fg-dark,oklch(71.4%_0.203_305.504))]",
|
|
18
|
+
pink: "text-[color:var(--zui-animated-number-pink-fg,oklch(59.2%_0.249_0.584))] dark:text-[color:var(--zui-animated-number-pink-fg-dark,oklch(71.8%_0.202_349.761))]",
|
|
19
|
+
orange:
|
|
20
|
+
"text-[color:var(--zui-animated-number-orange-fg,oklch(64.6%_0.222_41.116))] dark:text-[color:var(--zui-animated-number-orange-fg-dark,oklch(75%_0.183_55.934))]",
|
|
21
|
+
yellow:
|
|
22
|
+
"text-[color:var(--zui-animated-number-yellow-fg,oklch(68.1%_0.162_75.834))] dark:text-[color:var(--zui-animated-number-yellow-fg-dark,oklch(85.2%_0.199_91.936))]",
|
|
23
|
+
teal: "text-[color:var(--zui-animated-number-teal-fg,oklch(60%_0.118_184.704))] dark:text-[color:var(--zui-animated-number-teal-fg-dark,oklch(77.7%_0.152_181.912))]",
|
|
24
|
+
indigo:
|
|
25
|
+
"text-[color:var(--zui-animated-number-indigo-fg,oklch(51.1%_0.262_276.966))] dark:text-[color:var(--zui-animated-number-indigo-fg-dark,oklch(67.3%_0.182_276.935))]",
|
|
26
|
+
gray: "text-[color:var(--zui-animated-number-gray-fg,oklch(44.6%_0.03_256.802))] dark:text-[color:var(--zui-animated-number-gray-fg-dark,oklch(70.7%_0.022_261.325))]",
|
|
27
|
+
violet:
|
|
28
|
+
"text-[color:var(--zui-animated-number-violet-fg,oklch(54.1%_0.281_293.009))] dark:text-[color:var(--zui-animated-number-violet-fg-dark,oklch(70.2%_0.183_293.541))]",
|
|
29
|
+
"gradient-blue":
|
|
30
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-blue-from,oklch(42.4%_0.199_265.638))] dark:from-[var(--zui-animated-number-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] to-[var(--zui-animated-number-gradient-blue-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent",
|
|
31
|
+
"gradient-green":
|
|
32
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-green-from,oklch(44.8%_0.119_151.328))] dark:from-[var(--zui-animated-number-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] to-[var(--zui-animated-number-gradient-green-to,oklch(45.3%_0.124_130.933))] dark:to-[var(--zui-animated-number-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] bg-clip-text text-transparent",
|
|
33
|
+
"gradient-red":
|
|
34
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-red-from,oklch(44.4%_0.177_26.899))] dark:from-[var(--zui-animated-number-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] to-[var(--zui-animated-number-gradient-red-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent",
|
|
35
|
+
"gradient-yellow":
|
|
36
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-yellow-from,oklch(47.6%_0.114_61.907))] dark:from-[var(--zui-animated-number-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] to-[var(--zui-animated-number-gradient-yellow-to,oklch(47%_0.157_37.304))] dark:to-[var(--zui-animated-number-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] bg-clip-text text-transparent",
|
|
37
|
+
"gradient-purple":
|
|
38
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-purple-from,oklch(43.8%_0.218_303.724))] dark:from-[var(--zui-animated-number-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] to-[var(--zui-animated-number-gradient-purple-to,oklch(45.9%_0.187_3.815))] dark:to-[var(--zui-animated-number-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] bg-clip-text text-transparent",
|
|
39
|
+
"gradient-teal":
|
|
40
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-teal-from,oklch(43.7%_0.078_188.216))] dark:from-[var(--zui-animated-number-gradient-teal-from-dark,oklch(60%_0.118_184.704))] to-[var(--zui-animated-number-gradient-teal-to,oklch(45%_0.085_224.283))] dark:to-[var(--zui-animated-number-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] bg-clip-text text-transparent",
|
|
41
|
+
"gradient-indigo":
|
|
42
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-indigo-from,oklch(39.8%_0.195_277.366))] dark:from-[var(--zui-animated-number-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] to-[var(--zui-animated-number-gradient-indigo-to,oklch(43.8%_0.218_303.724))] dark:to-[var(--zui-animated-number-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] bg-clip-text text-transparent",
|
|
43
|
+
"gradient-pink":
|
|
44
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-pink-from,oklch(45.9%_0.187_3.815))] dark:from-[var(--zui-animated-number-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] to-[var(--zui-animated-number-gradient-pink-to,oklch(45.5%_0.188_13.697))] dark:to-[var(--zui-animated-number-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] bg-clip-text text-transparent",
|
|
45
|
+
"gradient-orange":
|
|
46
|
+
"bg-linear-to-r from-[var(--zui-animated-number-gradient-orange-from,oklch(47%_0.157_37.304))] dark:from-[var(--zui-animated-number-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] to-[var(--zui-animated-number-gradient-orange-to,oklch(44.4%_0.177_26.899))] dark:to-[var(--zui-animated-number-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] bg-clip-text text-transparent",
|
|
47
|
+
} as const;
|
|
48
|
+
|
|
49
|
+
export const zuiAnimatedNumberSize = {
|
|
50
|
+
sm: "text-2xl font-semibold tabular-nums",
|
|
51
|
+
md: "text-4xl font-semibold tabular-nums",
|
|
52
|
+
lg: "text-6xl font-bold tabular-nums",
|
|
53
|
+
} as const;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const zuiCopyButtonBase = [
|
|
2
|
+
"relative inline-flex items-center justify-center gap-2 whitespace-nowrap",
|
|
3
|
+
"rounded-[var(--zui-copy-button-radius,0.75rem)] font-medium",
|
|
4
|
+
"ring-offset-[var(--zui-copy-button-ring-offset,#f8fafc)] dark:ring-offset-[var(--zui-copy-button-ring-offset-dark,#020617)]",
|
|
5
|
+
"transition-colors select-none",
|
|
6
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-copy-button-focus-ring,#475569)] dark:focus-visible:ring-[var(--zui-copy-button-focus-ring-dark,#cbd5e1)] focus-visible:ring-offset-2",
|
|
7
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
8
|
+
] as const;
|
|
9
|
+
|
|
10
|
+
export const zuiCopyButtonAppearances = {
|
|
11
|
+
default:
|
|
12
|
+
"bg-[var(--zui-copy-button-default-bg,#0f172a)] dark:bg-[var(--zui-copy-button-default-bg-dark,#f8fafc)] text-[color:var(--zui-copy-button-default-fg,#f8fafc)] dark:text-[color:var(--zui-copy-button-default-fg-dark,#020617)] shadow-[var(--zui-copy-button-default-shadow,0_1px_2px_#0f172a14)] dark:shadow-[var(--zui-copy-button-default-shadow-dark,0_1px_2px_#0f172a1f)] hover:bg-[var(--zui-copy-button-default-bg-hover,#000000)] dark:hover:bg-[var(--zui-copy-button-default-bg-hover-dark,#ffffff)]",
|
|
13
|
+
secondary:
|
|
14
|
+
"bg-[var(--zui-copy-button-secondary-bg,#e2e8f0)] dark:bg-[var(--zui-copy-button-secondary-bg-dark,#1e293b)] text-[color:var(--zui-copy-button-secondary-fg,#0f172a)] dark:text-[color:var(--zui-copy-button-secondary-fg-dark,#f8fafc)] hover:bg-[var(--zui-copy-button-secondary-bg-hover,#cbd5e1)] dark:hover:bg-[var(--zui-copy-button-secondary-bg-hover-dark,#334155)]",
|
|
15
|
+
destructive:
|
|
16
|
+
"bg-[var(--zui-copy-button-destructive-bg,#f43f5e)] dark:bg-[var(--zui-copy-button-destructive-bg-dark,#be123c)] text-[color:var(--zui-copy-button-destructive-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-destructive-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-destructive-bg-hover,#f43f5e)] dark:hover:bg-[var(--zui-copy-button-destructive-bg-hover-dark,#9f1239)]",
|
|
17
|
+
outline:
|
|
18
|
+
"border border-[color:var(--zui-copy-button-outline-border,#0000001a)] dark:border-[color:var(--zui-copy-button-outline-border-dark,#ffffff1a)] bg-[var(--zui-copy-button-outline-bg,#0000000d)] dark:bg-[var(--zui-copy-button-outline-bg-dark,#ffffff0d)] text-[color:var(--zui-copy-button-outline-fg,#0f172a)] dark:text-[color:var(--zui-copy-button-outline-fg-dark,#f8fafc)] hover:bg-[var(--zui-copy-button-outline-bg-hover,#0000001a)] dark:hover:bg-[var(--zui-copy-button-outline-bg-hover-dark,#ffffff1a)]",
|
|
19
|
+
ghost:
|
|
20
|
+
"bg-transparent text-[color:var(--zui-copy-button-ghost-fg,#334155)] dark:text-[color:var(--zui-copy-button-ghost-fg-dark,#e2e8f0)] hover:bg-[var(--zui-copy-button-ghost-bg-hover,#0000000d)] dark:hover:bg-[var(--zui-copy-button-ghost-bg-hover-dark,#ffffff0d)]",
|
|
21
|
+
glass:
|
|
22
|
+
"border border-[color:var(--zui-copy-button-glass-border,#00000026)] dark:border-[color:var(--zui-copy-button-glass-border-dark,#ffffff26)] bg-[var(--zui-copy-button-glass-bg,#0000001a)] dark:bg-[var(--zui-copy-button-glass-bg-dark,#ffffff1a)] text-[color:var(--zui-copy-button-glass-fg,#0f172a)] dark:text-[color:var(--zui-copy-button-glass-fg-dark,#ffffff)] backdrop-blur-md hover:bg-[var(--zui-copy-button-glass-bg-hover,#00000026)] dark:hover:bg-[var(--zui-copy-button-glass-bg-hover-dark,#ffffff26)]",
|
|
23
|
+
emerald:
|
|
24
|
+
"bg-[var(--zui-copy-button-emerald-bg,#10b981)] dark:bg-[var(--zui-copy-button-emerald-bg-dark,#065f46)] text-[color:var(--zui-copy-button-emerald-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-emerald-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-emerald-bg-hover,#10b981)] dark:hover:bg-[var(--zui-copy-button-emerald-bg-hover-dark,#064e3b)]",
|
|
25
|
+
indigo:
|
|
26
|
+
"bg-[var(--zui-copy-button-indigo-bg,#3730a3)] dark:bg-[var(--zui-copy-button-indigo-bg-dark,#4f46e5)] text-[color:var(--zui-copy-button-indigo-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-indigo-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-indigo-bg-hover,#3730a3)] dark:hover:bg-[var(--zui-copy-button-indigo-bg-hover-dark,#4f46e5)]",
|
|
27
|
+
purple:
|
|
28
|
+
"bg-[var(--zui-copy-button-purple-bg,#6b21a8)] dark:bg-[var(--zui-copy-button-purple-bg-dark,#9333ea)] text-[color:var(--zui-copy-button-purple-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-purple-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-purple-bg-hover,#6b21a8)] dark:hover:bg-[var(--zui-copy-button-purple-bg-hover-dark,#9333ea)]",
|
|
29
|
+
pink:
|
|
30
|
+
"bg-[var(--zui-copy-button-pink-bg,#9d174d)] dark:bg-[var(--zui-copy-button-pink-bg-dark,#db2777)] text-[color:var(--zui-copy-button-pink-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-pink-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-pink-bg-hover,#9d174d)] dark:hover:bg-[var(--zui-copy-button-pink-bg-hover-dark,#db2777)]",
|
|
31
|
+
rose:
|
|
32
|
+
"bg-[var(--zui-copy-button-rose-bg,#9f1239)] dark:bg-[var(--zui-copy-button-rose-bg-dark,#e11d48)] text-[color:var(--zui-copy-button-rose-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-rose-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-rose-bg-hover,#9f1239)] dark:hover:bg-[var(--zui-copy-button-rose-bg-hover-dark,#e11d48)]",
|
|
33
|
+
sky:
|
|
34
|
+
"bg-[var(--zui-copy-button-sky-bg,#0ea5e9)] dark:bg-[var(--zui-copy-button-sky-bg-dark,#0369a1)] text-[color:var(--zui-copy-button-sky-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-sky-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-sky-bg-hover,#0ea5e9)] dark:hover:bg-[var(--zui-copy-button-sky-bg-hover-dark,#075985)]",
|
|
35
|
+
teal:
|
|
36
|
+
"bg-[var(--zui-copy-button-teal-bg,#14b8a6)] dark:bg-[var(--zui-copy-button-teal-bg-dark,#0f766e)] text-[color:var(--zui-copy-button-teal-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-teal-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-teal-bg-hover,#14b8a6)] dark:hover:bg-[var(--zui-copy-button-teal-bg-hover-dark,#115e59)]",
|
|
37
|
+
yellow:
|
|
38
|
+
"bg-[var(--zui-copy-button-yellow-bg,#eab308)] dark:bg-[var(--zui-copy-button-yellow-bg-dark,#854d0e)] text-[color:var(--zui-copy-button-yellow-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-yellow-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-yellow-bg-hover,#eab308)] dark:hover:bg-[var(--zui-copy-button-yellow-bg-hover-dark,#713f12)]",
|
|
39
|
+
orange:
|
|
40
|
+
"bg-[var(--zui-copy-button-orange-bg,#f97316)] dark:bg-[var(--zui-copy-button-orange-bg-dark,#9a3412)] text-[color:var(--zui-copy-button-orange-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-orange-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-orange-bg-hover,#f97316)] dark:hover:bg-[var(--zui-copy-button-orange-bg-hover-dark,#7c2d12)]",
|
|
41
|
+
gray:
|
|
42
|
+
"bg-[var(--zui-copy-button-gray-bg,#6b7280)] dark:bg-[var(--zui-copy-button-gray-bg-dark,#374151)] text-[color:var(--zui-copy-button-gray-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gray-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-gray-bg-hover,#6b7280)] dark:hover:bg-[var(--zui-copy-button-gray-bg-hover-dark,#1f2937)]",
|
|
43
|
+
amber:
|
|
44
|
+
"bg-[var(--zui-copy-button-amber-bg,#f59e0b)] dark:bg-[var(--zui-copy-button-amber-bg-dark,#92400e)] text-[color:var(--zui-copy-button-amber-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-amber-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-amber-bg-hover,#f59e0b)] dark:hover:bg-[var(--zui-copy-button-amber-bg-hover-dark,#78350f)]",
|
|
45
|
+
violet:
|
|
46
|
+
"bg-[var(--zui-copy-button-violet-bg,#5b21b6)] dark:bg-[var(--zui-copy-button-violet-bg-dark,#7c3aed)] text-[color:var(--zui-copy-button-violet-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-violet-fg-dark,#ffffff)] hover:bg-[var(--zui-copy-button-violet-bg-hover,#5b21b6)] dark:hover:bg-[var(--zui-copy-button-violet-bg-hover-dark,#7c3aed)]",
|
|
47
|
+
"gradient-blue":
|
|
48
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-blue-from,#1e40af)] dark:from-[var(--zui-copy-button-gradient-blue-from-dark,#2563eb)] to-[var(--zui-copy-button-gradient-blue-to,#6b21a8)] dark:to-[var(--zui-copy-button-gradient-blue-to-dark,#9333ea)] text-[color:var(--zui-copy-button-gradient-blue-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-blue-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-blue-from-hover,#1e40af)] dark:hover:from-[var(--zui-copy-button-gradient-blue-from-hover-dark,#2563eb)] hover:to-[var(--zui-copy-button-gradient-blue-to-hover,#6b21a8)] dark:hover:to-[var(--zui-copy-button-gradient-blue-to-hover-dark,#9333ea)]",
|
|
49
|
+
"gradient-green":
|
|
50
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-green-from,#166534)] dark:from-[var(--zui-copy-button-gradient-green-from-dark,#16a34a)] to-[var(--zui-copy-button-gradient-green-to,#3f6212)] dark:to-[var(--zui-copy-button-gradient-green-to-dark,#65a30d)] text-[color:var(--zui-copy-button-gradient-green-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-green-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-green-from-hover,#166534)] dark:hover:from-[var(--zui-copy-button-gradient-green-from-hover-dark,#16a34a)] hover:to-[var(--zui-copy-button-gradient-green-to-hover,#3f6212)] dark:hover:to-[var(--zui-copy-button-gradient-green-to-hover-dark,#65a30d)]",
|
|
51
|
+
"gradient-red":
|
|
52
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-red-from,#991b1b)] dark:from-[var(--zui-copy-button-gradient-red-from-dark,#dc2626)] to-[var(--zui-copy-button-gradient-red-to,#9d174d)] dark:to-[var(--zui-copy-button-gradient-red-to-dark,#db2777)] text-[color:var(--zui-copy-button-gradient-red-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-red-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-red-from-hover,#991b1b)] dark:hover:from-[var(--zui-copy-button-gradient-red-from-hover-dark,#dc2626)] hover:to-[var(--zui-copy-button-gradient-red-to-hover,#9d174d)] dark:hover:to-[var(--zui-copy-button-gradient-red-to-hover-dark,#db2777)]",
|
|
53
|
+
"gradient-yellow":
|
|
54
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-yellow-from,#854d0e)] dark:from-[var(--zui-copy-button-gradient-yellow-from-dark,#ca8a04)] to-[var(--zui-copy-button-gradient-yellow-to,#9a3412)] dark:to-[var(--zui-copy-button-gradient-yellow-to-dark,#ea580c)] text-[color:var(--zui-copy-button-gradient-yellow-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-yellow-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-yellow-from-hover,#854d0e)] dark:hover:from-[var(--zui-copy-button-gradient-yellow-from-hover-dark,#ca8a04)] hover:to-[var(--zui-copy-button-gradient-yellow-to-hover,#9a3412)] dark:hover:to-[var(--zui-copy-button-gradient-yellow-to-hover-dark,#ea580c)]",
|
|
55
|
+
"gradient-purple":
|
|
56
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-purple-from,#6b21a8)] dark:from-[var(--zui-copy-button-gradient-purple-from-dark,#9333ea)] to-[var(--zui-copy-button-gradient-purple-to,#9d174d)] dark:to-[var(--zui-copy-button-gradient-purple-to-dark,#db2777)] text-[color:var(--zui-copy-button-gradient-purple-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-purple-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-purple-from-hover,#6b21a8)] dark:hover:from-[var(--zui-copy-button-gradient-purple-from-hover-dark,#9333ea)] hover:to-[var(--zui-copy-button-gradient-purple-to-hover,#9d174d)] dark:hover:to-[var(--zui-copy-button-gradient-purple-to-hover-dark,#db2777)]",
|
|
57
|
+
"gradient-teal":
|
|
58
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-teal-from,#115e59)] dark:from-[var(--zui-copy-button-gradient-teal-from-dark,#0d9488)] to-[var(--zui-copy-button-gradient-teal-to,#155e75)] dark:to-[var(--zui-copy-button-gradient-teal-to-dark,#0891b2)] text-[color:var(--zui-copy-button-gradient-teal-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-teal-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-teal-from-hover,#115e59)] dark:hover:from-[var(--zui-copy-button-gradient-teal-from-hover-dark,#0d9488)] hover:to-[var(--zui-copy-button-gradient-teal-to-hover,#155e75)] dark:hover:to-[var(--zui-copy-button-gradient-teal-to-hover-dark,#0891b2)]",
|
|
59
|
+
"gradient-indigo":
|
|
60
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-indigo-from,#3730a3)] dark:from-[var(--zui-copy-button-gradient-indigo-from-dark,#4f46e5)] to-[var(--zui-copy-button-gradient-indigo-to,#6b21a8)] dark:to-[var(--zui-copy-button-gradient-indigo-to-dark,#9333ea)] text-[color:var(--zui-copy-button-gradient-indigo-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-indigo-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-indigo-from-hover,#3730a3)] dark:hover:from-[var(--zui-copy-button-gradient-indigo-from-hover-dark,#4f46e5)] hover:to-[var(--zui-copy-button-gradient-indigo-to-hover,#6b21a8)] dark:hover:to-[var(--zui-copy-button-gradient-indigo-to-hover-dark,#9333ea)]",
|
|
61
|
+
"gradient-pink":
|
|
62
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-pink-from,#9d174d)] dark:from-[var(--zui-copy-button-gradient-pink-from-dark,#db2777)] to-[var(--zui-copy-button-gradient-pink-to,#9f1239)] dark:to-[var(--zui-copy-button-gradient-pink-to-dark,#e11d48)] text-[color:var(--zui-copy-button-gradient-pink-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-pink-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-pink-from-hover,#9d174d)] dark:hover:from-[var(--zui-copy-button-gradient-pink-from-hover-dark,#db2777)] hover:to-[var(--zui-copy-button-gradient-pink-to-hover,#9f1239)] dark:hover:to-[var(--zui-copy-button-gradient-pink-to-hover-dark,#e11d48)]",
|
|
63
|
+
"gradient-orange":
|
|
64
|
+
"bg-linear-to-r from-[var(--zui-copy-button-gradient-orange-from,#9a3412)] dark:from-[var(--zui-copy-button-gradient-orange-from-dark,#ea580c)] to-[var(--zui-copy-button-gradient-orange-to,#991b1b)] dark:to-[var(--zui-copy-button-gradient-orange-to-dark,#dc2626)] text-[color:var(--zui-copy-button-gradient-orange-fg,#ffffff)] dark:text-[color:var(--zui-copy-button-gradient-orange-fg-dark,#ffffff)] hover:from-[var(--zui-copy-button-gradient-orange-from-hover,#9a3412)] dark:hover:from-[var(--zui-copy-button-gradient-orange-from-hover-dark,#ea580c)] hover:to-[var(--zui-copy-button-gradient-orange-to-hover,#991b1b)] dark:hover:to-[var(--zui-copy-button-gradient-orange-to-hover-dark,#dc2626)]",
|
|
65
|
+
} as const;
|
|
66
|
+
|
|
67
|
+
export type ZuiCopyButtonAppearance = keyof typeof zuiCopyButtonAppearances;
|
|
68
|
+
|
|
69
|
+
export const zuiCopyButtonSizes = {
|
|
70
|
+
sm: "h-8 px-2.5 text-xs [&_svg]:size-3.5",
|
|
71
|
+
md: "h-9 px-3 text-sm [&_svg]:size-4",
|
|
72
|
+
lg: "h-11 px-4 text-base [&_svg]:size-5",
|
|
73
|
+
} as const;
|
|
74
|
+
|
|
75
|
+
export type ZuiCopyButtonSize = keyof typeof zuiCopyButtonSizes;
|
|
76
|
+
|
|
77
|
+
export const zuiCopyButtonIconOnlySizes = {
|
|
78
|
+
sm: "w-8 px-0",
|
|
79
|
+
md: "w-9 px-0",
|
|
80
|
+
lg: "w-11 px-0",
|
|
81
|
+
} as const;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from "./accordion";
|
|
2
2
|
export * from "./alert";
|
|
3
|
+
export * from "./animated-number";
|
|
3
4
|
export * from "./avatar";
|
|
4
5
|
export * from "./badge";
|
|
5
6
|
export * from "./breadcrumb";
|
|
@@ -8,6 +9,7 @@ export * from "./card";
|
|
|
8
9
|
export * from "./checkbox";
|
|
9
10
|
export * from "./command";
|
|
10
11
|
export * from "./context-menu";
|
|
12
|
+
export * from "./copy-button";
|
|
11
13
|
export * from "./divider";
|
|
12
14
|
export * from "./drawer";
|
|
13
15
|
export * from "./dropdown";
|
|
@@ -15,6 +17,7 @@ export * from "./dynamic-stepper";
|
|
|
15
17
|
export * from "./empty-state";
|
|
16
18
|
export * from "./file-upload";
|
|
17
19
|
export * from "./inputs";
|
|
20
|
+
export * from "./kbd";
|
|
18
21
|
export * from "./marquee";
|
|
19
22
|
export * from "./modal";
|
|
20
23
|
export * from "./otp-input";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export const zuiKbdBase = [
|
|
2
|
+
"inline-flex items-center justify-center gap-1 align-middle",
|
|
3
|
+
"rounded-[var(--zui-kbd-radius,0.375rem)] font-mono font-medium leading-none select-none",
|
|
4
|
+
] as const;
|
|
5
|
+
|
|
6
|
+
export const zuiKbdKeyAppearances = {
|
|
7
|
+
default:
|
|
8
|
+
"bg-[var(--zui-kbd-default-bg,#0f172a)] dark:bg-[var(--zui-kbd-default-bg-dark,#f8fafc)] text-[color:var(--zui-kbd-default-fg,#f8fafc)] dark:text-[color:var(--zui-kbd-default-fg-dark,#020617)] shadow-[var(--zui-kbd-default-shadow,0_1px_2px_#0f172a14)] dark:shadow-[var(--zui-kbd-default-shadow-dark,0_1px_2px_#0f172a1f)]",
|
|
9
|
+
secondary:
|
|
10
|
+
"bg-[var(--zui-kbd-secondary-bg,#e2e8f0)] dark:bg-[var(--zui-kbd-secondary-bg-dark,#1e293b)] text-[color:var(--zui-kbd-secondary-fg,#0f172a)] dark:text-[color:var(--zui-kbd-secondary-fg-dark,#f8fafc)]",
|
|
11
|
+
destructive:
|
|
12
|
+
"bg-[var(--zui-kbd-destructive-bg,#f43f5e)] dark:bg-[var(--zui-kbd-destructive-bg-dark,#be123c)] text-[color:var(--zui-kbd-destructive-fg,#ffffff)] dark:text-[color:var(--zui-kbd-destructive-fg-dark,#ffffff)]",
|
|
13
|
+
outline:
|
|
14
|
+
"border border-[color:var(--zui-kbd-outline-border,#0000001a)] dark:border-[color:var(--zui-kbd-outline-border-dark,#ffffff1a)] bg-[var(--zui-kbd-outline-bg,#0000000d)] dark:bg-[var(--zui-kbd-outline-bg-dark,#ffffff0d)] text-[color:var(--zui-kbd-outline-fg,#0f172a)] dark:text-[color:var(--zui-kbd-outline-fg-dark,#f8fafc)]",
|
|
15
|
+
ghost:
|
|
16
|
+
"bg-transparent text-[color:var(--zui-kbd-ghost-fg,#334155)] dark:text-[color:var(--zui-kbd-ghost-fg-dark,#e2e8f0)]",
|
|
17
|
+
glass:
|
|
18
|
+
"border border-[color:var(--zui-kbd-glass-border,#00000026)] dark:border-[color:var(--zui-kbd-glass-border-dark,#ffffff26)] bg-[var(--zui-kbd-glass-bg,#0000001a)] dark:bg-[var(--zui-kbd-glass-bg-dark,#ffffff1a)] text-[color:var(--zui-kbd-glass-fg,#0f172a)] dark:text-[color:var(--zui-kbd-glass-fg-dark,#ffffff)] backdrop-blur-md",
|
|
19
|
+
emerald:
|
|
20
|
+
"bg-[var(--zui-kbd-emerald-bg,#10b981)] dark:bg-[var(--zui-kbd-emerald-bg-dark,#065f46)] text-[color:var(--zui-kbd-emerald-fg,#ffffff)] dark:text-[color:var(--zui-kbd-emerald-fg-dark,#ffffff)]",
|
|
21
|
+
indigo:
|
|
22
|
+
"bg-[var(--zui-kbd-indigo-bg,#3730a3)] dark:bg-[var(--zui-kbd-indigo-bg-dark,#4f46e5)] text-[color:var(--zui-kbd-indigo-fg,#ffffff)] dark:text-[color:var(--zui-kbd-indigo-fg-dark,#ffffff)]",
|
|
23
|
+
purple:
|
|
24
|
+
"bg-[var(--zui-kbd-purple-bg,#6b21a8)] dark:bg-[var(--zui-kbd-purple-bg-dark,#9333ea)] text-[color:var(--zui-kbd-purple-fg,#ffffff)] dark:text-[color:var(--zui-kbd-purple-fg-dark,#ffffff)]",
|
|
25
|
+
pink:
|
|
26
|
+
"bg-[var(--zui-kbd-pink-bg,#9d174d)] dark:bg-[var(--zui-kbd-pink-bg-dark,#db2777)] text-[color:var(--zui-kbd-pink-fg,#ffffff)] dark:text-[color:var(--zui-kbd-pink-fg-dark,#ffffff)]",
|
|
27
|
+
rose:
|
|
28
|
+
"bg-[var(--zui-kbd-rose-bg,#9f1239)] dark:bg-[var(--zui-kbd-rose-bg-dark,#e11d48)] text-[color:var(--zui-kbd-rose-fg,#ffffff)] dark:text-[color:var(--zui-kbd-rose-fg-dark,#ffffff)]",
|
|
29
|
+
sky:
|
|
30
|
+
"bg-[var(--zui-kbd-sky-bg,#0ea5e9)] dark:bg-[var(--zui-kbd-sky-bg-dark,#0369a1)] text-[color:var(--zui-kbd-sky-fg,#ffffff)] dark:text-[color:var(--zui-kbd-sky-fg-dark,#ffffff)]",
|
|
31
|
+
teal:
|
|
32
|
+
"bg-[var(--zui-kbd-teal-bg,#14b8a6)] dark:bg-[var(--zui-kbd-teal-bg-dark,#0f766e)] text-[color:var(--zui-kbd-teal-fg,#ffffff)] dark:text-[color:var(--zui-kbd-teal-fg-dark,#ffffff)]",
|
|
33
|
+
yellow:
|
|
34
|
+
"bg-[var(--zui-kbd-yellow-bg,#eab308)] dark:bg-[var(--zui-kbd-yellow-bg-dark,#854d0e)] text-[color:var(--zui-kbd-yellow-fg,#ffffff)] dark:text-[color:var(--zui-kbd-yellow-fg-dark,#ffffff)]",
|
|
35
|
+
orange:
|
|
36
|
+
"bg-[var(--zui-kbd-orange-bg,#f97316)] dark:bg-[var(--zui-kbd-orange-bg-dark,#9a3412)] text-[color:var(--zui-kbd-orange-fg,#ffffff)] dark:text-[color:var(--zui-kbd-orange-fg-dark,#ffffff)]",
|
|
37
|
+
gray:
|
|
38
|
+
"bg-[var(--zui-kbd-gray-bg,#6b7280)] dark:bg-[var(--zui-kbd-gray-bg-dark,#374151)] text-[color:var(--zui-kbd-gray-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gray-fg-dark,#ffffff)]",
|
|
39
|
+
amber:
|
|
40
|
+
"bg-[var(--zui-kbd-amber-bg,#f59e0b)] dark:bg-[var(--zui-kbd-amber-bg-dark,#92400e)] text-[color:var(--zui-kbd-amber-fg,#ffffff)] dark:text-[color:var(--zui-kbd-amber-fg-dark,#ffffff)]",
|
|
41
|
+
violet:
|
|
42
|
+
"bg-[var(--zui-kbd-violet-bg,#5b21b6)] dark:bg-[var(--zui-kbd-violet-bg-dark,#7c3aed)] text-[color:var(--zui-kbd-violet-fg,#ffffff)] dark:text-[color:var(--zui-kbd-violet-fg-dark,#ffffff)]",
|
|
43
|
+
"gradient-blue":
|
|
44
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-blue-from,#1e40af)] dark:from-[var(--zui-kbd-gradient-blue-from-dark,#2563eb)] to-[var(--zui-kbd-gradient-blue-to,#6b21a8)] dark:to-[var(--zui-kbd-gradient-blue-to-dark,#9333ea)] text-[color:var(--zui-kbd-gradient-blue-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-blue-fg-dark,#ffffff)]",
|
|
45
|
+
"gradient-green":
|
|
46
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-green-from,#166534)] dark:from-[var(--zui-kbd-gradient-green-from-dark,#16a34a)] to-[var(--zui-kbd-gradient-green-to,#3f6212)] dark:to-[var(--zui-kbd-gradient-green-to-dark,#65a30d)] text-[color:var(--zui-kbd-gradient-green-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-green-fg-dark,#ffffff)]",
|
|
47
|
+
"gradient-red":
|
|
48
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-red-from,#991b1b)] dark:from-[var(--zui-kbd-gradient-red-from-dark,#dc2626)] to-[var(--zui-kbd-gradient-red-to,#9d174d)] dark:to-[var(--zui-kbd-gradient-red-to-dark,#db2777)] text-[color:var(--zui-kbd-gradient-red-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-red-fg-dark,#ffffff)]",
|
|
49
|
+
"gradient-yellow":
|
|
50
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-yellow-from,#854d0e)] dark:from-[var(--zui-kbd-gradient-yellow-from-dark,#ca8a04)] to-[var(--zui-kbd-gradient-yellow-to,#9a3412)] dark:to-[var(--zui-kbd-gradient-yellow-to-dark,#ea580c)] text-[color:var(--zui-kbd-gradient-yellow-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-yellow-fg-dark,#ffffff)]",
|
|
51
|
+
"gradient-purple":
|
|
52
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-purple-from,#6b21a8)] dark:from-[var(--zui-kbd-gradient-purple-from-dark,#9333ea)] to-[var(--zui-kbd-gradient-purple-to,#9d174d)] dark:to-[var(--zui-kbd-gradient-purple-to-dark,#db2777)] text-[color:var(--zui-kbd-gradient-purple-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-purple-fg-dark,#ffffff)]",
|
|
53
|
+
"gradient-teal":
|
|
54
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-teal-from,#115e59)] dark:from-[var(--zui-kbd-gradient-teal-from-dark,#0d9488)] to-[var(--zui-kbd-gradient-teal-to,#155e75)] dark:to-[var(--zui-kbd-gradient-teal-to-dark,#0891b2)] text-[color:var(--zui-kbd-gradient-teal-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-teal-fg-dark,#ffffff)]",
|
|
55
|
+
"gradient-indigo":
|
|
56
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-indigo-from,#3730a3)] dark:from-[var(--zui-kbd-gradient-indigo-from-dark,#4f46e5)] to-[var(--zui-kbd-gradient-indigo-to,#6b21a8)] dark:to-[var(--zui-kbd-gradient-indigo-to-dark,#9333ea)] text-[color:var(--zui-kbd-gradient-indigo-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-indigo-fg-dark,#ffffff)]",
|
|
57
|
+
"gradient-pink":
|
|
58
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-pink-from,#9d174d)] dark:from-[var(--zui-kbd-gradient-pink-from-dark,#db2777)] to-[var(--zui-kbd-gradient-pink-to,#9f1239)] dark:to-[var(--zui-kbd-gradient-pink-to-dark,#e11d48)] text-[color:var(--zui-kbd-gradient-pink-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-pink-fg-dark,#ffffff)]",
|
|
59
|
+
"gradient-orange":
|
|
60
|
+
"bg-linear-to-r from-[var(--zui-kbd-gradient-orange-from,#9a3412)] dark:from-[var(--zui-kbd-gradient-orange-from-dark,#ea580c)] to-[var(--zui-kbd-gradient-orange-to,#991b1b)] dark:to-[var(--zui-kbd-gradient-orange-to-dark,#dc2626)] text-[color:var(--zui-kbd-gradient-orange-fg,#ffffff)] dark:text-[color:var(--zui-kbd-gradient-orange-fg-dark,#ffffff)]",
|
|
61
|
+
} as const;
|
|
62
|
+
|
|
63
|
+
export type ZuiKbdAppearance = keyof typeof zuiKbdKeyAppearances;
|
|
64
|
+
|
|
65
|
+
export const zuiKbdKeyBase = [
|
|
66
|
+
"inline-flex items-center justify-center font-mono font-medium leading-none",
|
|
67
|
+
"rounded-[var(--zui-kbd-radius,0.375rem)]",
|
|
68
|
+
"shadow-[var(--zui-kbd-shadow,inset_0_-1px_0_#0000001f)] dark:shadow-[var(--zui-kbd-shadow-dark,inset_0_-1px_0_#0000004d)]",
|
|
69
|
+
] as const;
|
|
70
|
+
|
|
71
|
+
export const zuiKbdKeySizes = {
|
|
72
|
+
sm: "h-5 min-w-5 px-1 text-[0.7rem]",
|
|
73
|
+
md: "h-6 min-w-6 px-1.5 text-xs",
|
|
74
|
+
lg: "h-7 min-w-7 px-2 text-sm",
|
|
75
|
+
} as const;
|
|
76
|
+
|
|
77
|
+
export type ZuiKbdSize = keyof typeof zuiKbdKeySizes;
|
|
78
|
+
|
|
79
|
+
export const zuiKbdSeparatorSizes = {
|
|
80
|
+
sm: "text-[0.7rem]",
|
|
81
|
+
md: "text-xs",
|
|
82
|
+
lg: "text-sm",
|
|
83
|
+
} as const;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { render, screen } from "@testing-library/react";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
|
|
4
|
+
import { AnimatedNumber, AnimatedNumberCounter } from "./animated-number";
|
|
5
|
+
|
|
6
|
+
describe("AnimatedNumber", () => {
|
|
7
|
+
it("renders one span per digit", () => {
|
|
8
|
+
render(<AnimatedNumber number={123} />);
|
|
9
|
+
expect(screen.getByText("1")).toBeInTheDocument();
|
|
10
|
+
expect(screen.getByText("2")).toBeInTheDocument();
|
|
11
|
+
expect(screen.getByText("3")).toBeInTheDocument();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("applies the default appearance token by default", () => {
|
|
15
|
+
render(<AnimatedNumber number={7} />);
|
|
16
|
+
expect(screen.getByText("7").className).toContain(
|
|
17
|
+
"--zui-animated-number-default-fg",
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("applies the requested appearance token", () => {
|
|
22
|
+
render(<AnimatedNumber number={5} appearance="success" />);
|
|
23
|
+
expect(screen.getByText("5").className).toContain(
|
|
24
|
+
"--zui-animated-number-success-fg",
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("clips a gradient to the text for gradient appearances", () => {
|
|
29
|
+
render(<AnimatedNumber number={9} appearance="gradient-blue" />);
|
|
30
|
+
const span = screen.getByText("9");
|
|
31
|
+
expect(span.className).toContain("bg-clip-text");
|
|
32
|
+
expect(span.className).toContain("text-transparent");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("applies the requested size token", () => {
|
|
36
|
+
render(<AnimatedNumber number={4} size="lg" />);
|
|
37
|
+
expect(screen.getByText("4").className).toMatch(/text-6xl/);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("merges a custom className onto each digit", () => {
|
|
41
|
+
render(<AnimatedNumber number={8} className="custom-digit" />);
|
|
42
|
+
expect(screen.getByText("8").className).toContain("custom-digit");
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe("AnimatedNumberCounter", () => {
|
|
47
|
+
it("renders a paragraph starting from zero", () => {
|
|
48
|
+
render(<AnimatedNumberCounter number={500} />);
|
|
49
|
+
expect(screen.getByText("0").tagName).toBe("P");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("applies the requested appearance token", () => {
|
|
53
|
+
render(<AnimatedNumberCounter number={500} appearance="orange" />);
|
|
54
|
+
expect(screen.getByText("0").className).toContain(
|
|
55
|
+
"--zui-animated-number-orange-fg",
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("defers the count until the element is in view", () => {
|
|
60
|
+
render(<AnimatedNumberCounter number={500} />);
|
|
61
|
+
expect(screen.getByText("0")).toBeInTheDocument();
|
|
62
|
+
expect(screen.queryByText("500")).not.toBeInTheDocument();
|
|
63
|
+
});
|
|
64
|
+
});
|