@bouko/react 2.5.6 → 2.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/assets/icons/check copy.svg +6 -0
  2. package/dist/assets/icons/check-circle copy.svg +6 -0
  3. package/dist/assets/icons/chevron copy.svg +6 -0
  4. package/dist/assets/icons/paperclip copy.svg +6 -0
  5. package/dist/assets/icons/spinner copy.svg +6 -0
  6. package/dist/assets/icons/x-circle copy.svg +6 -0
  7. package/dist/colors/core.d.ts +10 -0
  8. package/dist/colors/core.js +25 -0
  9. package/dist/colors/index.d.ts +26 -0
  10. package/dist/colors/index.js +43 -0
  11. package/dist/colors/types.d.ts +11 -0
  12. package/dist/colors/types.js +7 -0
  13. package/dist/components/animate/configs.d.ts +136 -136
  14. package/dist/components/animate/configs.js +62 -62
  15. package/dist/components/animate/index.d.ts +54 -54
  16. package/dist/components/animate/index.js +33 -33
  17. package/dist/components/attachment.d.ts +2 -2
  18. package/dist/components/attachment.js +18 -18
  19. package/dist/components/badge.d.ts +5 -0
  20. package/dist/components/badge.js +4 -0
  21. package/dist/components/button/ghost.d.ts +7 -7
  22. package/dist/components/button/ghost.js +8 -8
  23. package/dist/components/button/icon.d.ts +9 -9
  24. package/dist/components/button/icon.js +20 -19
  25. package/dist/components/button/load.d.ts +10 -11
  26. package/dist/components/button/load.js +35 -35
  27. package/dist/components/button/normal.d.ts +11 -11
  28. package/dist/components/button/normal.js +39 -39
  29. package/dist/components/button.d.ts +10 -10
  30. package/dist/components/button.js +22 -22
  31. package/dist/components/carousel/index.d.ts +11 -11
  32. package/dist/components/carousel/index.js +19 -19
  33. package/dist/components/checkbox.d.ts +8 -8
  34. package/dist/components/checkbox.js +13 -13
  35. package/dist/components/dropdown/normal.d.ts +10 -10
  36. package/dist/components/dropdown/normal.js +19 -19
  37. package/dist/components/fade-carousel.d.ts +4 -4
  38. package/dist/components/fade-carousel.js +14 -14
  39. package/dist/components/field.d.ts +10 -10
  40. package/dist/components/field.js +10 -10
  41. package/dist/components/flex.d.ts +16 -0
  42. package/dist/components/flex.js +8 -0
  43. package/dist/components/form/fields.d.ts +16 -0
  44. package/dist/components/form/fields.js +21 -0
  45. package/dist/components/form/footer.js +2 -2
  46. package/dist/components/form/functions.d.ts +1 -1
  47. package/dist/components/form/functions.js +28 -28
  48. package/dist/components/form/loaders.d.ts +3 -0
  49. package/dist/components/form/loaders.js +11 -0
  50. package/dist/components/form/test-next.d.ts +1 -0
  51. package/dist/components/form/test-next.js +6 -0
  52. package/dist/components/form/types.d.ts +38 -38
  53. package/dist/components/form/types.js +1 -1
  54. package/dist/components/heading/normal.d.ts +29 -29
  55. package/dist/components/heading/normal.js +22 -22
  56. package/dist/components/heading/page.d.ts +25 -25
  57. package/dist/components/heading/page.js +23 -23
  58. package/dist/components/index.d.ts +13 -13
  59. package/dist/components/index.js +13 -13
  60. package/dist/components/input.d.ts +37 -37
  61. package/dist/components/input.js +40 -40
  62. package/dist/components/layout/fade.d.ts +7 -7
  63. package/dist/components/layout/fade.js +15 -15
  64. package/dist/components/layout/flex.d.ts +16 -16
  65. package/dist/components/layout/flex.js +42 -42
  66. package/dist/components/layout/heading.d.ts +3 -1
  67. package/dist/components/layout/heading.js +2 -2
  68. package/dist/components/layout/separator.d.ts +3 -3
  69. package/dist/components/layout/separator.js +5 -5
  70. package/dist/components/list/index.d.ts +2 -2
  71. package/dist/components/list/index.js +2 -2
  72. package/dist/components/list/item.d.ts +9 -9
  73. package/dist/components/list/item.js +7 -7
  74. package/dist/components/list/variants/bullet.d.ts +9 -9
  75. package/dist/components/list/variants/bullet.js +16 -16
  76. package/dist/components/list/variants/number.d.ts +10 -10
  77. package/dist/components/list/variants/number.js +18 -18
  78. package/dist/components/multiple-choice.d.ts +2 -2
  79. package/dist/components/multiple-choice.js +12 -12
  80. package/dist/components/search/index.d.ts +6 -0
  81. package/dist/components/search/index.js +12 -0
  82. package/dist/components/search-bar.d.ts +13 -14
  83. package/dist/components/search-bar.js +22 -22
  84. package/dist/components/select.d.ts +6 -6
  85. package/dist/components/select.js +24 -24
  86. package/dist/components/text/badge.d.ts +16 -16
  87. package/dist/components/text/badge.js +28 -28
  88. package/dist/components/textarea.d.ts +7 -7
  89. package/dist/components/textarea.js +11 -11
  90. package/dist/components/upload/file.d.ts +8 -8
  91. package/dist/components/upload/file.js +23 -23
  92. package/dist/components/waveform/index.d.ts +8 -8
  93. package/dist/components/waveform/index.js +11 -11
  94. package/dist/components/waveform/patterns.d.ts +1 -1
  95. package/dist/components/waveform/patterns.js +27 -27
  96. package/dist/core/classes.d.ts +0 -0
  97. package/dist/core/classes.js +1 -0
  98. package/dist/core/format.d.ts +3 -3
  99. package/dist/core/format.js +34 -34
  100. package/dist/core/functions.d.ts +13 -13
  101. package/dist/core/functions.js +79 -79
  102. package/dist/core/types.d.ts +15 -15
  103. package/dist/core/types.js +2 -2
  104. package/dist/core/variants.d.ts +5 -0
  105. package/dist/core/variants.js +6 -0
  106. package/dist/format/index.d.ts +2 -0
  107. package/dist/format/index.js +33 -0
  108. package/dist/hooks/audio/sound.d.ts +1 -1
  109. package/dist/hooks/audio/sound.js +6 -6
  110. package/dist/hooks/clock/interval.d.ts +8 -8
  111. package/dist/hooks/clock/interval.js +25 -25
  112. package/dist/hooks/color.d.ts +7 -0
  113. package/dist/hooks/color.js +8 -0
  114. package/dist/hooks/element/container.d.ts +4 -5
  115. package/dist/hooks/element/container.js +7 -7
  116. package/dist/hooks/element/resize.d.ts +1 -1
  117. package/dist/hooks/element/resize.js +12 -12
  118. package/dist/hooks/index.d.ts +4 -4
  119. package/dist/hooks/index.js +4 -4
  120. package/dist/index.d.ts +14 -14
  121. package/dist/index.js +14 -14
  122. package/package.json +1 -1
@@ -1,54 +1,54 @@
1
- import type { ReactNode } from "react";
2
- export declare type Props = {
3
- variants?: VariantConfig[];
4
- direction?: "horizontal" | "vertical";
5
- interval?: number;
6
- duration?: number;
7
- style?: string;
8
- layout?: boolean;
9
- children?: ReactNode;
10
- };
11
- export declare function Animation({ variants, style, direction, interval, duration, ...props }: Props): import("react/jsx-runtime").JSX.Element;
12
- declare type VariantConfig = {
13
- initial?: Record<string, number>;
14
- animate?: Record<string, number>;
15
- exit?: Record<string, number>;
16
- };
17
- /**
18
- * Merges multiple variant configs into one.
19
- */
20
- export declare function mergeVariants(...variants: VariantConfig[]): VariantConfig;
21
- export declare const opacity: (x?: number) => {
22
- initial: {
23
- opacity: number;
24
- };
25
- animate: {
26
- opacity: number;
27
- };
28
- exit: {
29
- opacity: number;
30
- };
31
- };
32
- export declare const slideX: (x?: number) => {
33
- initial: {
34
- x: number;
35
- };
36
- animate: {
37
- x: number;
38
- };
39
- exit: {
40
- x: number;
41
- };
42
- };
43
- export declare const slideY: (y?: number) => {
44
- initial: {
45
- y: number;
46
- };
47
- animate: {
48
- y: number;
49
- };
50
- exit: {
51
- y: number;
52
- };
53
- };
54
- export { AnimatePresence } from "framer-motion";
1
+ import type { ReactNode } from "react";
2
+ export type Props = {
3
+ variants?: VariantConfig[];
4
+ direction?: "horizontal" | "vertical";
5
+ interval?: number;
6
+ duration?: number;
7
+ style?: string;
8
+ layout?: boolean;
9
+ children?: ReactNode;
10
+ };
11
+ export declare function Animation({ variants, style, direction, interval, duration, ...props }: Props): import("react/jsx-runtime").JSX.Element;
12
+ type VariantConfig = {
13
+ initial?: Record<string, number>;
14
+ animate?: Record<string, number>;
15
+ exit?: Record<string, number>;
16
+ };
17
+ /**
18
+ * Merges multiple variant configs into one.
19
+ */
20
+ export declare function mergeVariants(...variants: VariantConfig[]): VariantConfig;
21
+ export declare const opacity: (x?: number) => {
22
+ initial: {
23
+ opacity: number;
24
+ };
25
+ animate: {
26
+ opacity: number;
27
+ };
28
+ exit: {
29
+ opacity: number;
30
+ };
31
+ };
32
+ export declare const slideX: (x?: number) => {
33
+ initial: {
34
+ x: number;
35
+ };
36
+ animate: {
37
+ x: number;
38
+ };
39
+ exit: {
40
+ x: number;
41
+ };
42
+ };
43
+ export declare const slideY: (y?: number) => {
44
+ initial: {
45
+ y: number;
46
+ };
47
+ animate: {
48
+ y: number;
49
+ };
50
+ exit: {
51
+ y: number;
52
+ };
53
+ };
54
+ export { AnimatePresence } from "framer-motion";
@@ -1,33 +1,33 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { motion } from "framer-motion";
4
- import { cn } from "@bouko/style";
5
- export function Animation({ variants = [opacity()], style, direction = "horizontal", interval = 3000, duration = 0.3, ...props }) {
6
- return (_jsx(motion.div, { className: cn("w-full", style), transition: { duration: duration }, ...mergeVariants(...variants), ...props }, void 0));
7
- }
8
- /**
9
- * Merges multiple variant configs into one.
10
- */
11
- export function mergeVariants(...variants) {
12
- return variants.reduce((acc, v) => ({
13
- initial: { ...acc.initial, ...v.initial },
14
- animate: { ...acc.animate, ...v.animate },
15
- exit: { ...acc.exit, ...v.exit },
16
- }), { initial: {}, animate: {}, exit: {} });
17
- }
18
- export const opacity = (x = 1) => ({
19
- initial: { opacity: 0 },
20
- animate: { opacity: x },
21
- exit: { opacity: 0 }
22
- });
23
- export const slideX = (x = 5) => ({
24
- initial: { x: x },
25
- animate: { x: 0 },
26
- exit: { x: -x }
27
- });
28
- export const slideY = (y = 5) => ({
29
- initial: { y: y },
30
- animate: { y: 0 },
31
- exit: { y: -y }
32
- });
33
- export { AnimatePresence } from "framer-motion";
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { motion } from "framer-motion";
4
+ import { cn } from "@bouko/style";
5
+ export function Animation({ variants = [opacity()], style, direction = "horizontal", interval = 3000, duration = 0.3, ...props }) {
6
+ return (_jsx(motion.div, { className: cn("w-full", style), transition: { duration: duration }, ...mergeVariants(...variants), ...props }));
7
+ }
8
+ /**
9
+ * Merges multiple variant configs into one.
10
+ */
11
+ export function mergeVariants(...variants) {
12
+ return variants.reduce((acc, v) => ({
13
+ initial: { ...acc.initial, ...v.initial },
14
+ animate: { ...acc.animate, ...v.animate },
15
+ exit: { ...acc.exit, ...v.exit },
16
+ }), { initial: {}, animate: {}, exit: {} });
17
+ }
18
+ export const opacity = (x = 1) => ({
19
+ initial: { opacity: 0 },
20
+ animate: { opacity: x },
21
+ exit: { opacity: 0 }
22
+ });
23
+ export const slideX = (x = 5) => ({
24
+ initial: { x: x },
25
+ animate: { x: 0 },
26
+ exit: { x: -x }
27
+ });
28
+ export const slideY = (y = 5) => ({
29
+ initial: { y: y },
30
+ animate: { y: 0 },
31
+ exit: { y: -y }
32
+ });
33
+ export { AnimatePresence } from "framer-motion";
@@ -1,2 +1,2 @@
1
- import { type Field } from "./form/types";
2
- export default function Attachment({ id, style, label, value, update, required, note }: Field<File[], File[]>): import("react/jsx-runtime").JSX.Element;
1
+ import { type Field } from "./form/types";
2
+ export default function Attachment({ id, style, label, value, update, required, note }: Field<File[], File[]>): import("react/jsx-runtime").JSX.Element;
@@ -1,18 +1,18 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useRef } from "react";
3
- import PaperClip from "../assets/icons/paperclip.svg";
4
- import { cn } from "@bouko/style";
5
- export default function Attachment({ id, style, label, value, update, required = true, note }) {
6
- const ref = useRef(null);
7
- const handleFileChange = (e) => {
8
- if (e.target.files && id)
9
- update(Array.from(e.target.files));
10
- };
11
- return (_jsxs("div", { className: cn(styles.container, style), children: [label && _jsxs("span", { className: styles.label, children: [label, " ", !required ? _jsx("span", { className: "italic text-slate-400", children: "(optional)" }, void 0) : ""] }, void 0), _jsxs("div", { onClick: () => ref.current?.click(), className: "flex flex-col justify-center items-center py-3 gap-1 w-full cursor-pointer duration-200 hover:bg-slate-200/40 rounded border-2 border-slate-300 border-dashed", children: [!value || value.length === 0 && (_jsxs(_Fragment, { children: [_jsxs("span", { className: "flex gap-2 items-center font-semibold text-sm", children: [_jsx(PaperClip, {}, void 0), "Drag and drop files, paste screenshots, or"] }, void 0), _jsx("span", { className: "text-xs text-slate-500", children: "browse" }, void 0), _jsx("input", { type: "file", className: "hidden", onChange: handleFileChange, multiple: true, ref: ref }, void 0)] }, void 0)), value && value.length > 0 && value.map((x, i) => (_jsx("span", { className: "text-xs text-slate-500", children: x.name }, i)))] }, void 0), note && _jsx("span", { className: styles.note, children: note }, void 0)] }, void 0));
12
- }
13
- const styles = {
14
- container: "flex flex-col gap-2 w-full shrink-0 overflow-hidden",
15
- label: "text-xs text-slate-600",
16
- input: "px-3 py-2 bg-slate-200/50 border border-slate-300 outline-blue-500 rounded text-sm",
17
- note: "mt-1 text-xs text-slate-500"
18
- };
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef } from "react";
3
+ import PaperClip from "../assets/icons/paperclip.svg";
4
+ import { cn } from "@bouko/style";
5
+ export default function Attachment({ id, style, label, value, update, required = true, note }) {
6
+ const ref = useRef(null);
7
+ const handleFileChange = (e) => {
8
+ if (e.target.files && id)
9
+ update(Array.from(e.target.files));
10
+ };
11
+ return (_jsxs("div", { className: cn(styles.container, style), children: [label && _jsxs("span", { className: styles.label, children: [label, " ", !required ? _jsx("span", { className: "italic text-slate-400", children: "(optional)" }) : ""] }), _jsxs("div", { onClick: () => ref.current?.click(), className: "flex flex-col justify-center items-center py-3 gap-1 w-full cursor-pointer duration-200 hover:bg-slate-200/40 rounded border-2 border-slate-300 border-dashed", children: [!value || value.length === 0 && (_jsxs(_Fragment, { children: [_jsxs("span", { className: "flex gap-2 items-center font-semibold text-sm", children: [_jsx(PaperClip, {}), "Drag and drop files, paste screenshots, or"] }), _jsx("span", { className: "text-xs text-slate-500", children: "browse" }), _jsx("input", { type: "file", className: "hidden", onChange: handleFileChange, multiple: true, ref: ref })] })), value && value.length > 0 && value.map((x, i) => (_jsx("span", { className: "text-xs text-slate-500", children: x.name }, i)))] }), note && _jsx("span", { className: styles.note, children: note })] }));
12
+ }
13
+ const styles = {
14
+ container: "flex flex-col gap-2 w-full shrink-0 overflow-hidden",
15
+ label: "text-xs text-slate-600",
16
+ input: "px-3 py-2 bg-slate-200/50 border border-slate-300 outline-blue-500 rounded text-sm",
17
+ note: "mt-1 text-xs text-slate-500"
18
+ };
@@ -0,0 +1,5 @@
1
+ import type { ReactNode } from "react";
2
+ export default function Badge({ style, children }: {
3
+ style?: string;
4
+ children: ReactNode;
5
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export default function Badge({ style, children }) {
3
+ return (_jsx("span", { className: "w-min px-3 py-1 bg-accent/20 border border-accent-dark rounded-full text-xs text-accent-dark font-semibold", children: children }));
4
+ }
@@ -1,7 +1,7 @@
1
- import type { Component, Clickable } from "../../core/types";
2
- export default function GhostButton({ style, action, children }: Component & Clickable): import("react/jsx-runtime").JSX.Element | null;
3
- /**
4
- * Problems:
5
- *
6
- * - Perfect `Button`
7
- **/
1
+ import type { Component, Clickable } from "../../core/types";
2
+ export default function GhostButton({ style, action, children }: Component & Clickable): import("react/jsx-runtime").JSX.Element | null;
3
+ /**
4
+ * Problems:
5
+ *
6
+ * - Perfect `Button`
7
+ **/
@@ -1,8 +1,8 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Button } from "./normal";
3
- import { cn } from "@bouko/style";
4
- export default function GhostButton({ style, action, children }) {
5
- if (!children)
6
- return null;
7
- return (_jsx(Button, { variant: "ghost", style: cn("p-0 hover:brightness-110", style), onClick: action, children: children }, void 0));
8
- }
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from "./normal";
3
+ import { cn } from "@bouko/style";
4
+ export default function GhostButton({ style, action, children }) {
5
+ if (!children)
6
+ return null;
7
+ return (_jsx(Button, { variant: "ghost", style: cn("p-0 hover:brightness-110", style), onClick: action, children: children }));
8
+ }
@@ -1,9 +1,9 @@
1
- import type { ReactNode } from "react";
2
- import type { Clickable } from "../../core/types";
3
- declare type Props = Clickable & {
4
- color?: string;
5
- icon: ReactNode;
6
- disabled?: boolean;
7
- };
8
- export default function IconButton({ color, icon, action, disabled }: Props): import("react/jsx-runtime").JSX.Element;
9
- export {};
1
+ import type { ReactNode } from "react";
2
+ import type { Clickable } from "../../core/types";
3
+ type Props = Clickable & {
4
+ color?: string;
5
+ icon: ReactNode;
6
+ disabled?: boolean;
7
+ };
8
+ export default function IconButton({ color, icon, action, disabled }: Props): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -1,19 +1,20 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { opacitize } from "@bouko/style";
3
- export default function IconButton({ color = "--color-accent", icon, action, disabled = false }) {
4
- return (_jsx("button", { className: "hover:brightness-115 disabled:cursor-not-allowed", style: styles(color), onClick: action, disabled: !action || disabled, children: icon }, void 0));
5
- }
6
- const styles = (color) => ({
7
- display: "flex",
8
- justifyContent: "center",
9
- itemsCenter: "center",
10
- padding: "0.5rem",
11
- background: opacitize(color, 60),
12
- border: `1px solid var(${color})`,
13
- borderRadius: "100%",
14
- fontSize: "0.75rem",
15
- fontWeight: "600",
16
- color: opacitize("--color-primary", 80),
17
- transitionDuration: "200ms",
18
- cursor: "pointer"
19
- });
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { opacitize } from "@bouko/style";
3
+ export default function IconButton({ color = "--color-accent", icon, action, disabled = false }) {
4
+ console.log(disabled);
5
+ return (_jsx("button", { className: "hover:brightness-115 disabled:!cursor-not-allowed", style: styles(color), onClick: action, disabled: !action || disabled, children: icon }));
6
+ }
7
+ const styles = (color) => ({
8
+ display: "flex",
9
+ justifyContent: "center",
10
+ itemsCenter: "center",
11
+ padding: "0.5rem",
12
+ background: opacitize(color, 60),
13
+ border: `1px solid var(${color})`,
14
+ borderRadius: "100%",
15
+ fontSize: "0.75rem",
16
+ fontWeight: "600",
17
+ color: opacitize("--color-primary", 80),
18
+ transitionDuration: "200ms",
19
+ cursor: "pointer"
20
+ });
@@ -1,11 +1,10 @@
1
- import type { ReactNode } from "react";
2
- export declare type ButtonProps = {
3
- variant?: "primary" | "outline" | "ghost";
4
- size?: "xs" | "sm" | "md" | "lg";
5
- style?: string;
6
- icon?: ReactNode;
7
- onClick?: () => void;
8
- disabled?: boolean;
9
- children: ReactNode;
10
- };
11
- export default function LoadButton({ size, variant, style, icon, onClick, children, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
1
+ import type { ReactNode } from "react";
2
+ export type ButtonProps = {
3
+ variant?: "primary" | "outline" | "ghost";
4
+ size?: "xs" | "sm" | "md" | "lg";
5
+ style?: string;
6
+ onClick?: () => void;
7
+ disabled?: boolean;
8
+ children: ReactNode;
9
+ };
10
+ export default function LoadButton({ size, variant, style, onClick, children, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -1,35 +1,35 @@
1
- "use state";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { cn, tv } from "@bouko/style";
5
- import CheckCircle from "../../assets/icons/check-circle.svg";
6
- import Spinner from "../../assets/icons/spinner.svg";
7
- export default function LoadButton({ size, variant, style, icon, onClick, children, ...props }) {
8
- const [isLoading, setLoading] = useState(false);
9
- const submit = async () => {
10
- setLoading(true);
11
- try {
12
- await onClick?.();
13
- }
14
- catch { }
15
- setLoading(false);
16
- };
17
- return (_jsxs("button", { className: cn(styles({ variant, size }), style), onClick: submit, ...props, children: [isLoading ? _jsx(Spinner, { className: "animate-spin" }, void 0) : (icon || _jsx(CheckCircle, {}, void 0)), children] }, void 0));
18
- }
19
- const styles = tv({
20
- base: "flex justify-center items-center gap-2 bg-accent hover:bg-accent-dark border border-accent-dark rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed",
21
- defaultVariants: { size: "md" },
22
- variants: {
23
- variant: {
24
- primary: "bg-primary hover:bg-primary-dark border-primary-dark",
25
- outline: "!bg-transparent border-accent hover:border-accent-dark text-primary",
26
- ghost: "!bg-transparent border-transparent text-accent hover:text-accent-dark"
27
- },
28
- size: {
29
- xs: "px-3 py-1 text-xs",
30
- sm: "px-4 py-2 text-xs sm:text-sm",
31
- md: "px-4 py-2",
32
- lg: "px-5 py-3 text-lg"
33
- }
34
- }
35
- });
1
+ "use state";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { cn, tv } from "@bouko/style";
5
+ import CheckCircle from "../../assets/icons/check-circle.svg";
6
+ import Spinner from "../../assets/icons/spinner.svg";
7
+ export default function LoadButton({ size, variant, style, onClick, children, ...props }) {
8
+ const [isLoading, setLoading] = useState(false);
9
+ const submit = async () => {
10
+ setLoading(true);
11
+ try {
12
+ await onClick?.();
13
+ }
14
+ catch { }
15
+ setLoading(false);
16
+ };
17
+ return (_jsxs("button", { className: cn(styles({ variant, size }), style), onClick: submit, ...props, children: [isLoading ? _jsx(Spinner, { className: "animate-spin" }) : _jsx(CheckCircle, {}), children] }));
18
+ }
19
+ const styles = tv({
20
+ base: "flex justify-center items-center gap-2 bg-accent hover:bg-accent-dark border border-accent-dark rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed",
21
+ defaultVariants: { size: "md" },
22
+ variants: {
23
+ variant: {
24
+ primary: "bg-primary hover:bg-primary-dark border-primary-dark",
25
+ outline: "!bg-transparent border-accent hover:border-accent-dark text-primary",
26
+ ghost: "!bg-transparent border-transparent text-accent hover:text-accent-dark"
27
+ },
28
+ size: {
29
+ xs: "px-3 py-1 text-xs",
30
+ sm: "px-4 py-2 text-xs sm:text-sm",
31
+ md: "px-4 py-2",
32
+ lg: "px-5 py-3 text-lg"
33
+ }
34
+ }
35
+ });
@@ -1,11 +1,11 @@
1
- import { ReactNode } from "react";
2
- import type { Component } from "../../core/types";
3
- export declare type ButtonProps = Component & {
4
- variant?: "primary" | "outline" | "ghost" | "secondary";
5
- size?: "xs" | "sm" | "md" | "lg";
6
- icon?: ReactNode;
7
- action?: () => void;
8
- disabled?: boolean;
9
- };
10
- export declare function Button({ size, variant, style, icon, action, disabled, children }: ButtonProps): import("react/jsx-runtime").JSX.Element;
11
- export default Button;
1
+ import { ReactNode } from "react";
2
+ import type { Component } from "../../core/types";
3
+ export type ButtonProps = Component & {
4
+ variant?: "primary" | "outline" | "ghost" | "secondary";
5
+ size?: "xs" | "sm" | "md" | "lg";
6
+ icon?: ReactNode;
7
+ action?: () => void;
8
+ disabled?: boolean;
9
+ };
10
+ export declare function Button({ size, variant, style, icon, action, disabled, children }: ButtonProps): import("react/jsx-runtime").JSX.Element;
11
+ export default Button;
@@ -1,39 +1,39 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from "react";
4
- import { cn, tv } from "@bouko/style";
5
- import Spinner from "../../assets/icons/spinner.svg";
6
- export function Button({ size, variant, style, icon, action, disabled, children }) {
7
- const [isLoading, setLoading] = useState(false);
8
- const submit = async () => {
9
- setLoading(true);
10
- try {
11
- await action?.();
12
- }
13
- catch { }
14
- setLoading(false);
15
- };
16
- return (_jsxs("button", { className: cn(styles({ variant, size }), variant === "ghost" && "p-0", style), onClick: submit, disabled: disabled || isLoading, children: [icon && isLoading
17
- ? _jsx(Spinner, { className: "animate-spin" }, void 0)
18
- : icon, children] }, void 0));
19
- }
20
- const styles = tv({
21
- base: "flex justify-center items-center gap-2 bg-accent border border-accent-darker rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed hover:brightness-110",
22
- defaultVariants: { size: "md" },
23
- variants: {
24
- variant: {
25
- primary: "bg-primary border-primary-dark",
26
- outline: "bg-transparent border-accent hover:border-accent-dark text-primary",
27
- ghost: "bg-transparent border-transparent text-accent hover:brightness-110",
28
- secondary: "bg-background-dark dark:bg-background-light border-border-dark dark:border-border-light text-background-darker dark:text-primary"
29
- },
30
- size: {
31
- xs: "px-3 py-1 text-xs",
32
- circle: "px-2 py-2 text-xs rounded-full",
33
- sm: "px-3 py-2 text-xs sm:text-sm",
34
- md: "px-4 py-2",
35
- lg: "px-5 py-3 text-lg"
36
- }
37
- }
38
- });
39
- export default Button;
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { cn, tv } from "@bouko/style";
5
+ import Spinner from "../../assets/icons/spinner.svg";
6
+ export function Button({ size, variant, style, icon, action, disabled, children }) {
7
+ const [isLoading, setLoading] = useState(false);
8
+ const submit = async () => {
9
+ setLoading(true);
10
+ try {
11
+ await action?.();
12
+ }
13
+ catch { }
14
+ setLoading(false);
15
+ };
16
+ return (_jsxs("button", { className: cn(styles({ variant, size }), variant === "ghost" && "p-0", style), onClick: submit, disabled: disabled || isLoading, children: [icon && isLoading
17
+ ? _jsx(Spinner, { className: "animate-spin" })
18
+ : icon, children] }));
19
+ }
20
+ const styles = tv({
21
+ base: "flex justify-center items-center gap-2 bg-accent border border-accent-darker rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed hover:brightness-110",
22
+ defaultVariants: { size: "md" },
23
+ variants: {
24
+ variant: {
25
+ primary: "bg-primary border-primary-dark",
26
+ outline: "bg-transparent border-accent hover:border-accent-dark text-primary",
27
+ ghost: "bg-transparent border-transparent text-accent hover:brightness-110",
28
+ secondary: "bg-background-dark dark:bg-background-light border-border-dark dark:border-border-light text-background-darker dark:text-primary"
29
+ },
30
+ size: {
31
+ xs: "px-3 py-1 text-xs",
32
+ circle: "px-2 py-2 text-xs rounded-full",
33
+ sm: "px-3 py-2 text-xs sm:text-sm",
34
+ md: "px-4 py-2",
35
+ lg: "px-5 py-3 text-lg"
36
+ }
37
+ }
38
+ });
39
+ export default Button;
@@ -1,10 +1,10 @@
1
- import type { ReactNode } from "react";
2
- export declare type ButtonProps = {
3
- variant?: "primary" | "outline" | "ghost";
4
- size?: "xs" | "sm" | "md" | "lg";
5
- style?: string;
6
- onClick?: () => void;
7
- disabled?: boolean;
8
- children: ReactNode;
9
- };
10
- export declare function Button({ size, variant, style, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
1
+ import type { ReactNode } from "react";
2
+ export type ButtonProps = {
3
+ variant?: "primary" | "outline" | "ghost";
4
+ size?: "xs" | "sm" | "md" | "lg";
5
+ style?: string;
6
+ onClick?: () => void;
7
+ disabled?: boolean;
8
+ children: ReactNode;
9
+ };
10
+ export declare function Button({ size, variant, style, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -1,22 +1,22 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cn, tv } from "@bouko/style";
3
- export function Button({ size, variant, style, ...props }) {
4
- return (_jsx("button", { className: cn(styles({ variant, size }), style), ...props }, void 0));
5
- }
6
- const styles = tv({
7
- base: "flex justify-center items-center gap-2 bg-accent hover:bg-accent-dark border border-accent-dark rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed",
8
- defaultVariants: { size: "md" },
9
- variants: {
10
- variant: {
11
- primary: "bg-primary hover:bg-primary-dark border-primary-dark",
12
- outline: "!bg-transparent border-accent hover:border-accent-dark text-primary",
13
- ghost: "!bg-transparent border-transparent text-accent hover:text-accent-dark"
14
- },
15
- size: {
16
- xs: "px-3 py-1 text-xs",
17
- sm: "px-4 py-2 text-xs sm:text-sm",
18
- md: "px-4 py-2",
19
- lg: "px-5 py-3 text-lg"
20
- }
21
- }
22
- });
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn, tv } from "@bouko/style";
3
+ export function Button({ size, variant, style, ...props }) {
4
+ return (_jsx("button", { className: cn(styles({ variant, size }), style), ...props }));
5
+ }
6
+ const styles = tv({
7
+ base: "flex justify-center items-center gap-2 bg-accent hover:bg-accent-dark border border-accent-dark rounded font-semibold text-background-light duration-200 cursor-pointer disabled:cursor-not-allowed",
8
+ defaultVariants: { size: "md" },
9
+ variants: {
10
+ variant: {
11
+ primary: "bg-primary hover:bg-primary-dark border-primary-dark",
12
+ outline: "!bg-transparent border-accent hover:border-accent-dark text-primary",
13
+ ghost: "!bg-transparent border-transparent text-accent hover:text-accent-dark"
14
+ },
15
+ size: {
16
+ xs: "px-3 py-1 text-xs",
17
+ sm: "px-4 py-2 text-xs sm:text-sm",
18
+ md: "px-4 py-2",
19
+ lg: "px-5 py-3 text-lg"
20
+ }
21
+ }
22
+ });
@@ -1,11 +1,11 @@
1
- import { ReactNode } from "react";
2
- export declare type CarouselProps<T = ReactNode> = {
3
- container?: string;
4
- items: T[];
5
- direction?: "horizontal" | "vertical";
6
- interval?: number;
7
- duration?: number;
8
- autoplay?: boolean;
9
- style?: string;
10
- };
11
- export declare function Carousel({ container, style, items, direction, autoplay, interval, ...props }: CarouselProps): import("react/jsx-runtime").JSX.Element;
1
+ import { ReactNode } from "react";
2
+ export type CarouselProps<T = ReactNode> = {
3
+ container?: string;
4
+ items: T[];
5
+ direction?: "horizontal" | "vertical";
6
+ interval?: number;
7
+ duration?: number;
8
+ autoplay?: boolean;
9
+ style?: string;
10
+ };
11
+ export declare function Carousel({ container, style, items, direction, autoplay, interval, ...props }: CarouselProps): import("react/jsx-runtime").JSX.Element;