@fluencypassdevs/cycle 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 +36 -0
- package/dist/chunk-2MXR6RRJ.js +106 -0
- package/dist/chunk-2MXR6RRJ.js.map +1 -0
- package/dist/chunk-2WPH3IQP.js +48 -0
- package/dist/chunk-2WPH3IQP.js.map +1 -0
- package/dist/chunk-3LXU5C35.js +68 -0
- package/dist/chunk-3LXU5C35.js.map +1 -0
- package/dist/chunk-6LML23MS.js +347 -0
- package/dist/chunk-6LML23MS.js.map +1 -0
- package/dist/chunk-726XFHED.js +22 -0
- package/dist/chunk-726XFHED.js.map +1 -0
- package/dist/chunk-7UMEJDC3.js +62 -0
- package/dist/chunk-7UMEJDC3.js.map +1 -0
- package/dist/chunk-7XT6ISPQ.js +97 -0
- package/dist/chunk-7XT6ISPQ.js.map +1 -0
- package/dist/chunk-AL2ALTBH.js +115 -0
- package/dist/chunk-AL2ALTBH.js.map +1 -0
- package/dist/chunk-CIM6KJH5.js +59 -0
- package/dist/chunk-CIM6KJH5.js.map +1 -0
- package/dist/chunk-CSL4DRPW.js +39 -0
- package/dist/chunk-CSL4DRPW.js.map +1 -0
- package/dist/chunk-HZJRM5EK.js +97 -0
- package/dist/chunk-HZJRM5EK.js.map +1 -0
- package/dist/chunk-IJTNFN6N.js +61 -0
- package/dist/chunk-IJTNFN6N.js.map +1 -0
- package/dist/chunk-K567KZD5.js +63 -0
- package/dist/chunk-K567KZD5.js.map +1 -0
- package/dist/chunk-MSLQRGSP.js +113 -0
- package/dist/chunk-MSLQRGSP.js.map +1 -0
- package/dist/chunk-NGOZFA33.js +60 -0
- package/dist/chunk-NGOZFA33.js.map +1 -0
- package/dist/chunk-NVA4ZJOS.js +66 -0
- package/dist/chunk-NVA4ZJOS.js.map +1 -0
- package/dist/chunk-OT2HCBR2.js +37 -0
- package/dist/chunk-OT2HCBR2.js.map +1 -0
- package/dist/chunk-PM6ZUCMQ.js +73 -0
- package/dist/chunk-PM6ZUCMQ.js.map +1 -0
- package/dist/chunk-PXWCEJ2C.js +223 -0
- package/dist/chunk-PXWCEJ2C.js.map +1 -0
- package/dist/chunk-QTL6W4I2.js +57 -0
- package/dist/chunk-QTL6W4I2.js.map +1 -0
- package/dist/chunk-QZVQPUVT.js +129 -0
- package/dist/chunk-QZVQPUVT.js.map +1 -0
- package/dist/chunk-R4LITCVX.js +111 -0
- package/dist/chunk-R4LITCVX.js.map +1 -0
- package/dist/chunk-TYCPXAXF.js +10 -0
- package/dist/chunk-TYCPXAXF.js.map +1 -0
- package/dist/chunk-UEJLA7Q6.js +70 -0
- package/dist/chunk-UEJLA7Q6.js.map +1 -0
- package/dist/chunk-UVCEQOQR.js +104 -0
- package/dist/chunk-UVCEQOQR.js.map +1 -0
- package/dist/chunk-VECLN5AT.js +202 -0
- package/dist/chunk-VECLN5AT.js.map +1 -0
- package/dist/chunk-XX3I65LQ.js +435 -0
- package/dist/chunk-XX3I65LQ.js.map +1 -0
- package/dist/chunk-YINJ5YZ5.js +35 -0
- package/dist/chunk-YINJ5YZ5.js.map +1 -0
- package/dist/icons/index.d.ts +617 -0
- package/dist/icons/index.js +5 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +4 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles/tailwind-theme.css +87 -0
- package/dist/styles/tokens.css +496 -0
- package/dist/ui/accordion.d.ts +10 -0
- package/dist/ui/accordion.js +5 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/audio-player.d.ts +30 -0
- package/dist/ui/audio-player.js +7 -0
- package/dist/ui/audio-player.js.map +1 -0
- package/dist/ui/avatar.d.ts +16 -0
- package/dist/ui/avatar.js +5 -0
- package/dist/ui/avatar.js.map +1 -0
- package/dist/ui/badge.d.ts +15 -0
- package/dist/ui/badge.js +5 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/button.d.ts +15 -0
- package/dist/ui/button.js +5 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/chat-bubble.d.ts +21 -0
- package/dist/ui/chat-bubble.js +6 -0
- package/dist/ui/chat-bubble.js.map +1 -0
- package/dist/ui/chat-panel.d.ts +35 -0
- package/dist/ui/chat-panel.js +10 -0
- package/dist/ui/chat-panel.js.map +1 -0
- package/dist/ui/checkbox.d.ts +17 -0
- package/dist/ui/checkbox.js +5 -0
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/file-card.d.ts +27 -0
- package/dist/ui/file-card.js +5 -0
- package/dist/ui/file-card.js.map +1 -0
- package/dist/ui/input.d.ts +11 -0
- package/dist/ui/input.js +5 -0
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/label.d.ts +9 -0
- package/dist/ui/label.js +5 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/like-dislike.d.ts +32 -0
- package/dist/ui/like-dislike.js +9 -0
- package/dist/ui/like-dislike.js.map +1 -0
- package/dist/ui/live-waiting.d.ts +16 -0
- package/dist/ui/live-waiting.js +8 -0
- package/dist/ui/live-waiting.js.map +1 -0
- package/dist/ui/progress-stage.d.ts +19 -0
- package/dist/ui/progress-stage.js +5 -0
- package/dist/ui/progress-stage.js.map +1 -0
- package/dist/ui/progress.d.ts +19 -0
- package/dist/ui/progress.js +5 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/radio-group.d.ts +19 -0
- package/dist/ui/radio-group.js +5 -0
- package/dist/ui/radio-group.js.map +1 -0
- package/dist/ui/scroll-area.d.ts +8 -0
- package/dist/ui/scroll-area.js +5 -0
- package/dist/ui/scroll-area.js.map +1 -0
- package/dist/ui/sheet.d.ts +17 -0
- package/dist/ui/sheet.js +5 -0
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/slider.d.ts +16 -0
- package/dist/ui/slider.js +5 -0
- package/dist/ui/slider.js.map +1 -0
- package/dist/ui/switch.d.ts +16 -0
- package/dist/ui/switch.js +5 -0
- package/dist/ui/switch.js.map +1 -0
- package/dist/ui/tabs.d.ts +15 -0
- package/dist/ui/tabs.js +5 -0
- package/dist/ui/tabs.js.map +1 -0
- package/dist/ui/textarea.d.ts +12 -0
- package/dist/ui/textarea.js +5 -0
- package/dist/ui/textarea.js.map +1 -0
- package/dist/ui/toggle.d.ts +17 -0
- package/dist/ui/toggle.js +5 -0
- package/dist/ui/toggle.js.map +1 -0
- package/dist/ui/video-player.d.ts +28 -0
- package/dist/ui/video-player.js +7 -0
- package/dist/ui/video-player.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/input.tsx"],"names":[],"mappings":";;;;AAUA,SAAS,MAAM,EAAA,EAAuF;AAAvF,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,IAAA,EAAM,SAAA,GAAY,SAAA,EAAW,OAAA,GAAU,SAAA,EAVnE,GAUe,EAAA,EAAkE,KAAA,GAAA,SAAA,CAAlE,EAAA,EAAkE,CAAhE,WAAA,EAAW,QAAM,WAAA,EAAuB,SAAA,CAAA,CAAA;AACvD,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAW,SAAA;AAAA,MACX,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,2YAAA;AAAA;AAAA,QAEA,YAAY,SAAA,IAAa,uHAAA;AAAA,QACzB,YAAY,SAAA,IAAa,mCAAA;AAAA,QACzB,YAAY,SAAA,IAAa,uGAAA;AAAA;AAAA,QAEzB,YAAY,QAAA,IAAY,6CAAA;AAAA,QACxB,YAAY,QAAA,IAAY,sCAAA;AAAA,QACxB,YAAY,QAAA,IAAY,0GAAA;AAAA;AAAA,QAExB,mLAAA;AAAA;AAAA,QAEA,cAAc,IAAA,IAAQ,uBAAA;AAAA,QACtB,cAAc,SAAA,IAAa,wBAAA;AAAA,QAC3B,cAAc,IAAA,IAAQ,0BAAA;AAAA,QACtB;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ","file":"chunk-CSL4DRPW.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputProps extends React.ComponentProps<\"input\"> {\n inputSize?: \"sm\" | \"default\" | \"lg\"\n /** Variante visual: outline (borda) ou filled (fundo preenchido) */\n variant?: \"outline\" | \"filled\"\n}\n\nfunction Input({ className, type, inputSize = \"default\", variant = \"outline\", ...props }: InputProps) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n data-size={inputSize}\n data-variant={variant}\n className={cn(\n // Base\n \"w-full min-w-0 rounded-lg text-neutral-foreground transition-[color,border-color,box-shadow,background-color] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:border-0 file:bg-transparent file:font-medium file:text-neutral-foreground placeholder:text-neutral-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n // Variant: outline\n variant === \"outline\" && \"border border-neutral-border bg-transparent shadow-xs dark:border-neutral-border dark:bg-transparent dark:shadow-none\",\n variant === \"outline\" && \"hover:border-ring hover:bg-ring/5\",\n variant === \"outline\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-ring/5\",\n // Variant: filled (mesmos tokens do Button outline: accent light, input dark)\n variant === \"filled\" && \"border border-transparent bg-neutral-accent\",\n variant === \"filled\" && \"hover:border-ring hover:bg-secondary\",\n variant === \"filled\" && \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:bg-secondary\",\n // Error (sempre visível, ambas variantes)\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:hover:border-destructive dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/40\",\n // Sizes\n inputSize === \"sm\" && \"h-8 px-3 py-2 text-sm\",\n inputSize === \"default\" && \"h-10 px-4 py-2 text-sm\",\n inputSize === \"lg\" && \"h-12 px-4 py-3 text-base\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"]}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Avatar, AvatarImage, AvatarFallback } from './chunk-MSLQRGSP.js';
|
|
2
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
3
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var chatBubbleVariants = cva(
|
|
8
|
+
"flex gap-2.5 text-sm",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "",
|
|
13
|
+
instructor: "",
|
|
14
|
+
system: "justify-center"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
variant: "default"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
function getInitials(name) {
|
|
23
|
+
return name.split(" ").slice(0, 2).map((w) => w[0]).join("").toUpperCase();
|
|
24
|
+
}
|
|
25
|
+
function ChatBubble(_a) {
|
|
26
|
+
var _b = _a, {
|
|
27
|
+
author,
|
|
28
|
+
avatar,
|
|
29
|
+
message,
|
|
30
|
+
timestamp,
|
|
31
|
+
variant = "default",
|
|
32
|
+
className
|
|
33
|
+
} = _b, props = __objRest(_b, [
|
|
34
|
+
"author",
|
|
35
|
+
"avatar",
|
|
36
|
+
"message",
|
|
37
|
+
"timestamp",
|
|
38
|
+
"variant",
|
|
39
|
+
"className"
|
|
40
|
+
]);
|
|
41
|
+
if (variant === "system") {
|
|
42
|
+
return /* @__PURE__ */ jsx(
|
|
43
|
+
"div",
|
|
44
|
+
__spreadProps(__spreadValues({
|
|
45
|
+
"data-slot": "chat-bubble",
|
|
46
|
+
"data-variant": "system",
|
|
47
|
+
className: cn(chatBubbleVariants({ variant }), className)
|
|
48
|
+
}, props), {
|
|
49
|
+
children: /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground italic", children: message })
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const isInstructor = variant === "instructor";
|
|
54
|
+
return /* @__PURE__ */ jsxs(
|
|
55
|
+
"div",
|
|
56
|
+
__spreadProps(__spreadValues({
|
|
57
|
+
"data-slot": "chat-bubble",
|
|
58
|
+
"data-variant": variant,
|
|
59
|
+
className: cn(chatBubbleVariants({ variant }), className)
|
|
60
|
+
}, props), {
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsxs(Avatar, { children: [
|
|
63
|
+
avatar && /* @__PURE__ */ jsx(AvatarImage, { src: avatar, alt: author }),
|
|
64
|
+
/* @__PURE__ */ jsx(
|
|
65
|
+
AvatarFallback,
|
|
66
|
+
{
|
|
67
|
+
className: cn(
|
|
68
|
+
isInstructor ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"
|
|
69
|
+
),
|
|
70
|
+
children: getInitials(author)
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
className: cn(
|
|
80
|
+
"text-sm font-semibold leading-5 truncate",
|
|
81
|
+
isInstructor ? "text-primary" : "text-foreground"
|
|
82
|
+
),
|
|
83
|
+
children: author
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
timestamp && /* @__PURE__ */ jsx("span", { className: "text-[11px] text-muted-foreground shrink-0", children: timestamp })
|
|
87
|
+
] }),
|
|
88
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm leading-5 text-foreground break-words", children: message })
|
|
89
|
+
] })
|
|
90
|
+
]
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export { ChatBubble, chatBubbleVariants };
|
|
96
|
+
//# sourceMappingURL=chunk-HZJRM5EK.js.map
|
|
97
|
+
//# sourceMappingURL=chunk-HZJRM5EK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/chat-bubble.tsx"],"names":[],"mappings":"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","file":"chunk-HZJRM5EK.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Variants ─── */\n\nconst chatBubbleVariants = cva(\n \"flex gap-2.5 text-sm\",\n {\n variants: {\n variant: {\n default: \"\",\n instructor: \"\",\n system: \"justify-center\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\n/* ─── Types ─── */\n\nexport interface ChatBubbleProps\n extends React.ComponentProps<\"div\">,\n VariantProps<typeof chatBubbleVariants> {\n /** Author display name */\n author: string\n /** Avatar URL (renders initials if absent) */\n avatar?: string\n /** Message text content */\n message: string\n /** Timestamp label (e.g. \"14:32\") */\n timestamp?: string\n}\n\n/* ─── Helpers ─── */\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n}\n\n/* ─── Component ─── */\n\nfunction ChatBubble({\n author,\n avatar,\n message,\n timestamp,\n variant = \"default\",\n className,\n ...props\n}: ChatBubbleProps) {\n if (variant === \"system\") {\n return (\n <div\n data-slot=\"chat-bubble\"\n data-variant=\"system\"\n className={cn(chatBubbleVariants({ variant }), className)}\n {...props}\n >\n <span className=\"text-xs text-muted-foreground italic\">{message}</span>\n </div>\n )\n }\n\n const isInstructor = variant === \"instructor\"\n\n return (\n <div\n data-slot=\"chat-bubble\"\n data-variant={variant}\n className={cn(chatBubbleVariants({ variant }), className)}\n {...props}\n >\n {/* Avatar */}\n <Avatar>\n {avatar && <AvatarImage src={avatar} alt={author} />}\n <AvatarFallback\n className={cn(\n isInstructor\n ? \"bg-primary text-primary-foreground\"\n : \"bg-muted text-muted-foreground\"\n )}\n >\n {getInitials(author)}\n </AvatarFallback>\n </Avatar>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className={cn(\n \"text-sm font-semibold leading-5 truncate\",\n isInstructor ? \"text-primary\" : \"text-foreground\"\n )}\n >\n {author}\n </span>\n {timestamp && (\n <span className=\"text-[11px] text-muted-foreground shrink-0\">\n {timestamp}\n </span>\n )}\n </div>\n <p className=\"text-sm leading-5 text-foreground break-words\">\n {message}\n </p>\n </div>\n </div>\n )\n}\n\nexport { ChatBubble, chatBubbleVariants }\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import { CheckIcon } from 'lucide-react';
|
|
4
|
+
import { Checkbox as Checkbox$1 } from 'radix-ui';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var checkboxVariants = cva(
|
|
9
|
+
"peer shrink-0 border border-neutral-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-neutral-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
size: {
|
|
13
|
+
sm: "size-3.5 [&_svg]:size-3",
|
|
14
|
+
default: "size-4 [&_svg]:size-3.5",
|
|
15
|
+
lg: "size-5 [&_svg]:size-4"
|
|
16
|
+
},
|
|
17
|
+
variant: {
|
|
18
|
+
default: "rounded-[4px]",
|
|
19
|
+
circular: "rounded-full"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
defaultVariants: {
|
|
23
|
+
size: "default",
|
|
24
|
+
variant: "default"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
function Checkbox(_a) {
|
|
29
|
+
var _b = _a, {
|
|
30
|
+
className,
|
|
31
|
+
size = "default",
|
|
32
|
+
variant = "default",
|
|
33
|
+
theme
|
|
34
|
+
} = _b, props = __objRest(_b, [
|
|
35
|
+
"className",
|
|
36
|
+
"size",
|
|
37
|
+
"variant",
|
|
38
|
+
"theme"
|
|
39
|
+
]);
|
|
40
|
+
return /* @__PURE__ */ jsx(
|
|
41
|
+
Checkbox$1.Root,
|
|
42
|
+
__spreadProps(__spreadValues({
|
|
43
|
+
"data-slot": "checkbox",
|
|
44
|
+
"data-variant": variant,
|
|
45
|
+
className: cn(theme, checkboxVariants({ size, variant }), className)
|
|
46
|
+
}, props), {
|
|
47
|
+
children: /* @__PURE__ */ jsx(
|
|
48
|
+
Checkbox$1.Indicator,
|
|
49
|
+
{
|
|
50
|
+
"data-slot": "checkbox-indicator",
|
|
51
|
+
className: "grid place-content-center text-current transition-none",
|
|
52
|
+
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
})
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { Checkbox, checkboxVariants };
|
|
60
|
+
//# sourceMappingURL=chunk-IJTNFN6N.js.map
|
|
61
|
+
//# sourceMappingURL=chunk-IJTNFN6N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/checkbox.tsx"],"names":["CheckboxPrimitive"],"mappings":";;;;;;;AASA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB,weAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,yBAAA;AAAA,QACJ,OAAA,EAAS,yBAAA;AAAA,QACT,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ;AASA,SAAS,SAAS,EAAA,EAMA;AANA,EAAA,IAAA,EAAA,GAAA,EAAA,EAChB;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,OAAA,GAAU,SAAA;AAAA,IACV;AAAA,GAzCF,GAqCkB,EAAA,EAKb,KAAA,GAAA,SAAA,CALa,EAAA,EAKb;AAAA,IAJH,WAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAACA,UAAA,CAAkB,IAAA;AAAA,IAAlB,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,GAAG,KAAA,EAAO,gBAAA,CAAiB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,SAAS;AAAA,KAAA,EAC/D,KAAA,CAAA,EAJL;AAAA,MAMC,QAAA,kBAAA,GAAA;AAAA,QAACA,UAAA,CAAkB,SAAA;AAAA,QAAlB;AAAA,UACC,WAAA,EAAU,oBAAA;AAAA,UACV,SAAA,EAAU,wDAAA;AAAA,UAEV,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,KAAA;AAAA,GACF;AAEJ","file":"chunk-IJTNFN6N.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon } from \"lucide-react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst checkboxVariants = cva(\n \"peer shrink-0 border border-neutral-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-neutral-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary\",\n {\n variants: {\n size: {\n sm: \"size-3.5 [&_svg]:size-3\",\n default: \"size-4 [&_svg]:size-3.5\",\n lg: \"size-5 [&_svg]:size-4\",\n },\n variant: {\n default: \"rounded-[4px]\",\n circular: \"rounded-full\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"default\",\n },\n }\n)\n\nexport interface CheckboxProps\n extends React.ComponentProps<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {\n /** Classe de tema aplicada apenas no estado checked (ex: \"theme-class\") */\n theme?: string\n}\n\nfunction Checkbox({\n className,\n size = \"default\",\n variant = \"default\",\n theme,\n ...props\n}: CheckboxProps) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n data-variant={variant}\n className={cn(theme, checkboxVariants({ size, variant }), className)}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox, checkboxVariants }\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadValues, __spreadProps } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import { CircleIcon } from 'lucide-react';
|
|
4
|
+
import { RadioGroup as RadioGroup$1 } from 'radix-ui';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var radioVariants = cva(
|
|
9
|
+
"aspect-square rounded-full border border-neutral-input bg-neutral-bg shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:text-foreground dark:aria-invalid:ring-destructive/40",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
size: {
|
|
13
|
+
sm: "size-3.5 [&_svg]:size-2",
|
|
14
|
+
default: "size-4 [&_svg]:size-2.5",
|
|
15
|
+
lg: "size-5 [&_svg]:size-3"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
size: "default"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
function RadioGroup(_a) {
|
|
24
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
RadioGroup$1.Root,
|
|
27
|
+
__spreadValues({
|
|
28
|
+
"data-slot": "radio-group",
|
|
29
|
+
className: cn("grid gap-3", className)
|
|
30
|
+
}, props)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
function RadioGroupItem(_a) {
|
|
34
|
+
var _b = _a, {
|
|
35
|
+
className,
|
|
36
|
+
size = "default",
|
|
37
|
+
theme
|
|
38
|
+
} = _b, props = __objRest(_b, [
|
|
39
|
+
"className",
|
|
40
|
+
"size",
|
|
41
|
+
"theme"
|
|
42
|
+
]);
|
|
43
|
+
return /* @__PURE__ */ jsx(
|
|
44
|
+
RadioGroup$1.Item,
|
|
45
|
+
__spreadProps(__spreadValues({
|
|
46
|
+
"data-slot": "radio-group-item",
|
|
47
|
+
className: cn(theme, radioVariants({ size }), className)
|
|
48
|
+
}, props), {
|
|
49
|
+
children: /* @__PURE__ */ jsx(
|
|
50
|
+
RadioGroup$1.Indicator,
|
|
51
|
+
{
|
|
52
|
+
"data-slot": "radio-group-indicator",
|
|
53
|
+
className: "grid place-content-center text-current",
|
|
54
|
+
children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-current" })
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { RadioGroup, RadioGroupItem, radioVariants };
|
|
62
|
+
//# sourceMappingURL=chunk-K567KZD5.js.map
|
|
63
|
+
//# sourceMappingURL=chunk-K567KZD5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/radio-group.tsx"],"names":["RadioGroupPrimitive"],"mappings":";;;;;;;AASA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,6ZAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,yBAAA;AAAA,QACJ,OAAA,EAAS,yBAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAKA,SAAS,WAAW,EAAA,EAA0C;AAA1C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA5BtB,GA4BoB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACpB,EAAA,uBACE,GAAA;AAAA,IAACA,YAAA,CAAoB,IAAA;AAAA,IAApB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS;AAAA,KAAA,EACjC,KAAA;AAAA,GACN;AAEJ;AASA,SAAS,eAAe,EAAA,EAKA;AALA,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP;AAAA,GAhDF,GA6CwB,EAAA,EAInB,KAAA,GAAA,SAAA,CAJmB,EAAA,EAInB;AAAA,IAHH,WAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAACA,YAAA,CAAoB,IAAA;AAAA,IAApB,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,GAAG,KAAA,EAAO,aAAA,CAAc,EAAE,IAAA,EAAM,GAAG,SAAS;AAAA,KAAA,EACnD,KAAA,CAAA,EAHL;AAAA,MAKC,QAAA,kBAAA,GAAA;AAAA,QAACA,YAAA,CAAoB,SAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,uBAAA;AAAA,UACV,SAAA,EAAU,wCAAA;AAAA,UAEV,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA;AACvC,KAAA;AAAA,GACF;AAEJ","file":"chunk-K567KZD5.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { CircleIcon } from \"lucide-react\"\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst radioVariants = cva(\n \"aspect-square rounded-full border border-neutral-input bg-neutral-bg shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:text-foreground dark:aria-invalid:ring-destructive/40\",\n {\n variants: {\n size: {\n sm: \"size-3.5 [&_svg]:size-2\",\n default: \"size-4 [&_svg]:size-2.5\",\n lg: \"size-5 [&_svg]:size-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface RadioGroupProps\n extends React.ComponentProps<typeof RadioGroupPrimitive.Root> {}\n\nfunction RadioGroup({ className, ...props }: RadioGroupProps) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nexport interface RadioGroupItemProps\n extends React.ComponentProps<typeof RadioGroupPrimitive.Item>,\n VariantProps<typeof radioVariants> {\n /** Classe de tema aplicada apenas no estado checked (ex: \"theme-class\") */\n theme?: string\n}\n\nfunction RadioGroupItem({\n className,\n size = \"default\",\n theme,\n ...props\n}: RadioGroupItemProps) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(theme, radioVariants({ size }), className)}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"grid place-content-center text-current\"\n >\n <CircleIcon className=\"fill-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem, radioVariants }\n"]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import { Avatar as Avatar$1 } from 'radix-ui';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
function Avatar(_a) {
|
|
7
|
+
var _b = _a, {
|
|
8
|
+
className,
|
|
9
|
+
size = "default",
|
|
10
|
+
theme
|
|
11
|
+
} = _b, props = __objRest(_b, [
|
|
12
|
+
"className",
|
|
13
|
+
"size",
|
|
14
|
+
"theme"
|
|
15
|
+
]);
|
|
16
|
+
return /* @__PURE__ */ jsx(
|
|
17
|
+
Avatar$1.Root,
|
|
18
|
+
__spreadValues({
|
|
19
|
+
"data-slot": "avatar",
|
|
20
|
+
"data-size": size,
|
|
21
|
+
"data-themed": theme ? "" : void 0,
|
|
22
|
+
className: cn(
|
|
23
|
+
"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6",
|
|
24
|
+
theme,
|
|
25
|
+
className
|
|
26
|
+
)
|
|
27
|
+
}, props)
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function AvatarImage(_a) {
|
|
31
|
+
var _b = _a, {
|
|
32
|
+
className
|
|
33
|
+
} = _b, props = __objRest(_b, [
|
|
34
|
+
"className"
|
|
35
|
+
]);
|
|
36
|
+
return /* @__PURE__ */ jsx(
|
|
37
|
+
Avatar$1.Image,
|
|
38
|
+
__spreadValues({
|
|
39
|
+
"data-slot": "avatar-image",
|
|
40
|
+
className: cn("aspect-square size-full rounded-full", className)
|
|
41
|
+
}, props)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function AvatarFallback(_a) {
|
|
45
|
+
var _b = _a, {
|
|
46
|
+
className
|
|
47
|
+
} = _b, props = __objRest(_b, [
|
|
48
|
+
"className"
|
|
49
|
+
]);
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
Avatar$1.Fallback,
|
|
52
|
+
__spreadValues({
|
|
53
|
+
"data-slot": "avatar-fallback",
|
|
54
|
+
className: cn(
|
|
55
|
+
"flex size-full items-center justify-center overflow-hidden rounded-full bg-muted text-sm text-muted-foreground",
|
|
56
|
+
"group-data-[size=sm]/avatar:text-xs",
|
|
57
|
+
"group-data-[themed]/avatar:bg-primary group-data-[themed]/avatar:text-primary-foreground",
|
|
58
|
+
className
|
|
59
|
+
)
|
|
60
|
+
}, props)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
function AvatarBadge(_a) {
|
|
64
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
"span",
|
|
67
|
+
__spreadValues({
|
|
68
|
+
"data-slot": "avatar-badge",
|
|
69
|
+
className: cn(
|
|
70
|
+
"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 ring-background select-none",
|
|
71
|
+
"bg-primary text-primary-foreground",
|
|
72
|
+
"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
|
|
73
|
+
"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
|
|
74
|
+
"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
|
|
75
|
+
className
|
|
76
|
+
)
|
|
77
|
+
}, props)
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
function AvatarGroup(_a) {
|
|
81
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
82
|
+
return /* @__PURE__ */ jsx(
|
|
83
|
+
"div",
|
|
84
|
+
__spreadValues({
|
|
85
|
+
"data-slot": "avatar-group",
|
|
86
|
+
className: cn(
|
|
87
|
+
"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
|
|
88
|
+
className
|
|
89
|
+
)
|
|
90
|
+
}, props)
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
function AvatarGroupCount(_a) {
|
|
94
|
+
var _b = _a, {
|
|
95
|
+
className
|
|
96
|
+
} = _b, props = __objRest(_b, [
|
|
97
|
+
"className"
|
|
98
|
+
]);
|
|
99
|
+
return /* @__PURE__ */ jsx(
|
|
100
|
+
"div",
|
|
101
|
+
__spreadValues({
|
|
102
|
+
"data-slot": "avatar-group-count",
|
|
103
|
+
className: cn(
|
|
104
|
+
"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
|
|
105
|
+
className
|
|
106
|
+
)
|
|
107
|
+
}, props)
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
|
|
112
|
+
//# sourceMappingURL=chunk-MSLQRGSP.js.map
|
|
113
|
+
//# sourceMappingURL=chunk-MSLQRGSP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/avatar.tsx"],"names":["AvatarPrimitive"],"mappings":";;;;;AAOA,SAAS,OAAO,EAAA,EASb;AATa,EAAA,IAAA,EAAA,GAAA,EAAA,EACd;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP;AAAA,GAVF,GAOgB,EAAA,EAIX,KAAA,GAAA,SAAA,CAJW,EAAA,EAIX;AAAA,IAHH,WAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAOA,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,QAAQ,EAAA,GAAK,MAAA;AAAA,MAC1B,SAAA,EAAW,EAAA;AAAA,QACT,kHAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAY,EAAA,EAGkC;AAHlC,EAAA,IAAA,EAAA,GAAA,EAAA,EACnB;AAAA,IAAA;AAAA,GAjCF,GAgCqB,EAAA,EAEhB,KAAA,GAAA,SAAA,CAFgB,EAAA,EAEhB;AAAA,IADH;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,KAAA;AAAA,IAAhB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS;AAAA,KAAA,EAC3D,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,eAAe,EAAA,EAGkC;AAHlC,EAAA,IAAA,EAAA,GAAA,EAAA,EACtB;AAAA,IAAA;AAAA,GA9CF,GA6CwB,EAAA,EAEnB,KAAA,GAAA,SAAA,CAFmB,EAAA,EAEnB;AAAA,IADH;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,QAAA;AAAA,IAAhB,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,gHAAA;AAAA,QACA,qCAAA;AAAA,QACA,0FAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAY,EAAA,EAAuD;AAAvD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA/DvB,GA+DqB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACrB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,wHAAA;AAAA,QACA,oCAAA;AAAA,QACA,+EAAA;AAAA,QACA,2FAAA;AAAA,QACA,+EAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,YAAY,EAAA,EAAsD;AAAtD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAhFvB,GAgFqB,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACrB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBAAiB,EAAA,EAGM;AAHN,EAAA,IAAA,EAAA,GAAA,EAAA,EACxB;AAAA,IAAA;AAAA,GA9FF,GA6F0B,EAAA,EAErB,KAAA,GAAA,SAAA,CAFqB,EAAA,EAErB;AAAA,IADH;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,0VAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ","file":"chunk-MSLQRGSP.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n theme,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\"\n /** Apply a color theme (.theme-*) — colors the fallback bg/text via primary tokens */\n theme?: string\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-themed={theme ? \"\" : undefined}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6\",\n theme,\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full rounded-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center overflow-hidden rounded-full bg-muted text-sm text-muted-foreground\",\n \"group-data-[size=sm]/avatar:text-xs\",\n \"group-data-[themed]/avatar:bg-primary group-data-[themed]/avatar:text-primary-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full ring-2 ring-background select-none\",\n \"bg-primary text-primary-foreground\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { Slot } from 'radix-ui';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var badgeVariants = cva(
|
|
8
|
+
"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:shrink-0",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
13
|
+
secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
14
|
+
destructive: "bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90",
|
|
15
|
+
outline: "border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
16
|
+
ghost: "[a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
17
|
+
link: "text-primary underline-offset-4 [a&]:hover:underline",
|
|
18
|
+
muted: "bg-muted text-muted-foreground",
|
|
19
|
+
success: "bg-[#28c953]/15 text-[#28c953] border-[#28c953]/20",
|
|
20
|
+
progress: "bg-accent text-muted-foreground",
|
|
21
|
+
"progress-completed": "bg-accent text-[#00c234] dark:text-[#00E73E]"
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
default: "rounded-full px-2 py-0.5 text-xs font-medium [&>svg]:size-3",
|
|
25
|
+
sm: "rounded-md px-1.5 py-px text-[11px] font-medium [&>svg]:size-3",
|
|
26
|
+
lg: "rounded-full px-3 py-1 text-sm font-medium [&>svg]:size-4"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
variant: "default",
|
|
31
|
+
size: "default"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
function Badge(_a) {
|
|
36
|
+
var _b = _a, {
|
|
37
|
+
className,
|
|
38
|
+
variant = "default",
|
|
39
|
+
size = "default",
|
|
40
|
+
asChild = false
|
|
41
|
+
} = _b, props = __objRest(_b, [
|
|
42
|
+
"className",
|
|
43
|
+
"variant",
|
|
44
|
+
"size",
|
|
45
|
+
"asChild"
|
|
46
|
+
]);
|
|
47
|
+
const Comp = asChild ? Slot.Root : "span";
|
|
48
|
+
return /* @__PURE__ */ jsx(
|
|
49
|
+
Comp,
|
|
50
|
+
__spreadValues({
|
|
51
|
+
"data-slot": "badge",
|
|
52
|
+
"data-variant": variant,
|
|
53
|
+
className: cn(badgeVariants({ variant, size }), className)
|
|
54
|
+
}, props)
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { Badge, badgeVariants };
|
|
59
|
+
//# sourceMappingURL=chunk-NGOZFA33.js.map
|
|
60
|
+
//# sourceMappingURL=chunk-NGOZFA33.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/badge.tsx"],"names":[],"mappings":";;;;;;AAMA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,mRAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,6DAAA;AAAA,QACF,SAAA,EACE,mEAAA;AAAA,QACF,WAAA,EACE,wJAAA;AAAA,QACF,OAAA,EACE,sFAAA;AAAA,QACF,KAAA,EACE,wDAAA;AAAA,QACF,IAAA,EACE,sDAAA;AAAA,QACF,KAAA,EACE,gCAAA;AAAA,QACF,OAAA,EACE,oDAAA;AAAA,QACF,QAAA,EACE,iCAAA;AAAA,QACF,oBAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,6DAAA;AAAA,QACT,EAAA,EAAI,gEAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAQA,SAAS,MAAM,EAAA,EAMA;AANA,EAAA,IAAA,EAAA,GAAA,EAAA,EACb;AAAA,IAAA,SAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,IAAA,GAAO,SAAA;AAAA,IACP,OAAA,GAAU;AAAA,GAvDZ,GAmDe,EAAA,EAKV,KAAA,GAAA,SAAA,CALU,EAAA,EAKV;AAAA,IAJH,WAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,IAAA,GAAO,OAAA,GAAU,IAAA,CAAK,IAAA,GAAO,MAAA;AAEnC,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,GAAG,aAAA,CAAc,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS;AAAA,KAAA,EACrD,KAAA;AAAA,GACN;AAEJ","file":"chunk-NGOZFA33.js","sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost:\n \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link:\n \"text-primary underline-offset-4 [a&]:hover:underline\",\n muted:\n \"bg-muted text-muted-foreground\",\n success:\n \"bg-[#28c953]/15 text-[#28c953] border-[#28c953]/20\",\n progress:\n \"bg-accent text-muted-foreground\",\n \"progress-completed\":\n \"bg-accent text-[#00c234] dark:text-[#00E73E]\",\n },\n size: {\n default: \"rounded-full px-2 py-0.5 text-xs font-medium [&>svg]:size-3\",\n sm: \"rounded-md px-1.5 py-px text-[11px] font-medium [&>svg]:size-3\",\n lg: \"rounded-full px-3 py-1 text-sm font-medium [&>svg]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.ComponentProps<\"span\">,\n VariantProps<typeof badgeVariants> {\n asChild?: boolean\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: BadgeProps) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { cn } from './chunk-TYCPXAXF.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
3
|
+
import { Switch as Switch$1 } from 'radix-ui';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var switchVariants = cva(
|
|
8
|
+
"peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-neutral-input data-[state=checked]:bg-primary",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
size: {
|
|
12
|
+
sm: "h-4 w-7",
|
|
13
|
+
default: "h-5 w-9",
|
|
14
|
+
lg: "h-6 w-11"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
size: "default"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
var thumbVariants = cva(
|
|
23
|
+
"pointer-events-none block rounded-full bg-primary-foreground ring-0 shadow-sm transition-transform data-[state=unchecked]:translate-x-0.5",
|
|
24
|
+
{
|
|
25
|
+
variants: {
|
|
26
|
+
size: {
|
|
27
|
+
sm: "size-3 data-[state=checked]:translate-x-[calc(100%+2px)]",
|
|
28
|
+
default: "size-4 data-[state=checked]:translate-x-[calc(100%+2px)]",
|
|
29
|
+
lg: "size-5 data-[state=checked]:translate-x-[calc(100%+2px)]"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
size: "default"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
function Switch(_a) {
|
|
38
|
+
var _b = _a, {
|
|
39
|
+
className,
|
|
40
|
+
size = "default",
|
|
41
|
+
theme
|
|
42
|
+
} = _b, props = __objRest(_b, [
|
|
43
|
+
"className",
|
|
44
|
+
"size",
|
|
45
|
+
"theme"
|
|
46
|
+
]);
|
|
47
|
+
return /* @__PURE__ */ jsx(
|
|
48
|
+
Switch$1.Root,
|
|
49
|
+
__spreadProps(__spreadValues({
|
|
50
|
+
"data-slot": "switch",
|
|
51
|
+
className: cn(theme, switchVariants({ size }), className)
|
|
52
|
+
}, props), {
|
|
53
|
+
children: /* @__PURE__ */ jsx(
|
|
54
|
+
Switch$1.Thumb,
|
|
55
|
+
{
|
|
56
|
+
"data-slot": "switch-thumb",
|
|
57
|
+
className: thumbVariants({ size })
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { Switch, switchVariants };
|
|
65
|
+
//# sourceMappingURL=chunk-NVA4ZJOS.js.map
|
|
66
|
+
//# sourceMappingURL=chunk-NVA4ZJOS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/switch.tsx"],"names":["SwitchPrimitive"],"mappings":";;;;;;AAQA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB,uVAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,OAAA,EAAS,SAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAEA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,2IAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,0DAAA;AAAA,QACJ,OAAA,EAAS,0DAAA;AAAA,QACT,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AASA,SAAS,OAAO,EAAA,EAKA;AALA,EAAA,IAAA,EAAA,GAAA,EAAA,EACd;AAAA,IAAA,SAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP;AAAA,GAlDF,GA+CgB,EAAA,EAIX,KAAA,GAAA,SAAA,CAJW,EAAA,EAIX;AAAA,IAHH,WAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACE,GAAA;AAAA,IAACA,QAAA,CAAgB,IAAA;AAAA,IAAhB,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,GAAG,KAAA,EAAO,cAAA,CAAe,EAAE,IAAA,EAAM,GAAG,SAAS;AAAA,KAAA,EACpD,KAAA,CAAA,EAHL;AAAA,MAKC,QAAA,kBAAA,GAAA;AAAA,QAACA,QAAA,CAAgB,KAAA;AAAA,QAAhB;AAAA,UACC,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,aAAA,CAAc,EAAE,IAAA,EAAM;AAAA;AAAA;AACnC,KAAA;AAAA,GACF;AAEJ","file":"chunk-NVA4ZJOS.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst switchVariants = cva(\n \"peer group/switch inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-neutral-input data-[state=checked]:bg-primary\",\n {\n variants: {\n size: {\n sm: \"h-4 w-7\",\n default: \"h-5 w-9\",\n lg: \"h-6 w-11\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nconst thumbVariants = cva(\n \"pointer-events-none block rounded-full bg-primary-foreground ring-0 shadow-sm transition-transform data-[state=unchecked]:translate-x-0.5\",\n {\n variants: {\n size: {\n sm: \"size-3 data-[state=checked]:translate-x-[calc(100%+2px)]\",\n default: \"size-4 data-[state=checked]:translate-x-[calc(100%+2px)]\",\n lg: \"size-5 data-[state=checked]:translate-x-[calc(100%+2px)]\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nexport interface SwitchProps\n extends React.ComponentProps<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchVariants> {\n /** Classe de tema aplicada no estado checked (ex: \"theme-brand\") */\n theme?: string\n}\n\nfunction Switch({\n className,\n size = \"default\",\n theme,\n ...props\n}: SwitchProps) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(theme, switchVariants({ size }), className)}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={thumbVariants({ size })}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch, switchVariants }\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { __objRest, __spreadValues } from './chunk-YINJ5YZ5.js';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/components/icons/sizes.ts
|
|
6
|
+
var ICON_SIZES = {
|
|
7
|
+
"2xs": { size: 12, stroke: 1 },
|
|
8
|
+
xs: { size: 16, stroke: 1.2 },
|
|
9
|
+
sm: { size: 24, stroke: 1.5 },
|
|
10
|
+
md: { size: 32, stroke: 1.8 },
|
|
11
|
+
lg: { size: 40, stroke: 2.1 },
|
|
12
|
+
xl: { size: 48, stroke: 2.4 }
|
|
13
|
+
};
|
|
14
|
+
var CycleIcon = forwardRef(
|
|
15
|
+
function CycleIcon2(props, ref) {
|
|
16
|
+
const _a = props, { icon: Icon, size = "sm", decorative, className } = _a, rest = __objRest(_a, ["icon", "size", "decorative", "className"]);
|
|
17
|
+
const { size: px, stroke } = ICON_SIZES[size];
|
|
18
|
+
const VIEWBOX = 24;
|
|
19
|
+
const adjustedStroke = stroke * (VIEWBOX / px);
|
|
20
|
+
const ariaProps = decorative ? { "aria-hidden": true, focusable: "false" } : { role: "img" };
|
|
21
|
+
return /* @__PURE__ */ jsx(
|
|
22
|
+
Icon,
|
|
23
|
+
__spreadValues(__spreadValues({
|
|
24
|
+
ref,
|
|
25
|
+
width: px,
|
|
26
|
+
height: px,
|
|
27
|
+
strokeWidth: adjustedStroke,
|
|
28
|
+
className,
|
|
29
|
+
style: { width: px, height: px }
|
|
30
|
+
}, ariaProps), rest)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
export { CycleIcon, ICON_SIZES };
|
|
36
|
+
//# sourceMappingURL=chunk-OT2HCBR2.js.map
|
|
37
|
+
//# sourceMappingURL=chunk-OT2HCBR2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/icons/sizes.ts","../src/components/icons/CycleIcon.tsx"],"names":["CycleIcon"],"mappings":";;;;;AASO,IAAM,UAAA,GAAa;AAAA,EACxB,KAAA,EAAO,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,CAAA,EAAE;AAAA,EAC7B,EAAA,EAAI,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,GAAA,EAAI;AAAA,EAC5B,EAAA,EAAI,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,GAAA,EAAI;AAAA,EAC5B,EAAA,EAAI,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,GAAA,EAAI;AAAA,EAC5B,EAAA,EAAI,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,GAAA,EAAI;AAAA,EAC5B,EAAA,EAAI,EAAE,IAAA,EAAM,EAAA,EAAI,QAAQ,GAAA;AAC1B;ACgCO,IAAM,SAAA,GAAY,UAAA;AAAA,EACvB,SAASA,UAAAA,CAAU,KAAA,EAAO,GAAA,EAAyB;AACjD,IAAA,MAAoE,EAAA,GAAA,KAAA,EAA5D,EAAA,IAAA,EAAM,IAAA,EAAM,IAAA,GAAO,MAAM,UAAA,EAAY,SAAA,EAlDjD,GAkDwE,EAAA,EAAT,IAAA,GAAA,SAAA,CAAS,EAAA,EAAT,CAAnD,MAAA,EAAY,QAAa,YAAA,EAAY,WAAA,CAAA,CAAA;AAE7C,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,MAAA,EAAO,GAAI,WAAW,IAAI,CAAA;AAM5C,IAAA,MAAM,OAAA,GAAU,EAAA;AAChB,IAAA,MAAM,cAAA,GAAiB,UAAU,OAAA,GAAU,EAAA,CAAA;AAE3C,IAAA,MAAM,SAAA,GAAY,UAAA,GACd,EAAE,aAAA,EAAe,IAAA,EAAe,WAAW,OAAA,EAAiB,GAC5D,EAAE,IAAA,EAAM,KAAA,EAAe;AAE3B,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA,cAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO,EAAA;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,WAAA,EAAa,cAAA;AAAA,QACb,SAAA;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AAAG,OAAA,EAC3B,SAAA,CAAA,EACA,IAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-OT2HCBR2.js","sourcesContent":["/**\n * Cycle Design — Icon Size Map\n *\n * Fonte da verdade para componentes React.\n * Derivado de: figma/Icons size/icon-{size}.json\n *\n * REGRA: strokeWidth nunca é prop — é sempre derivado de size.\n * Isso garante consistência visual em todos os ícones.\n */\nexport const ICON_SIZES = {\n '2xs': { size: 12, stroke: 1 },\n xs: { size: 16, stroke: 1.2 },\n sm: { size: 24, stroke: 1.5 },\n md: { size: 32, stroke: 1.8 },\n lg: { size: 40, stroke: 2.1 },\n xl: { size: 48, stroke: 2.4 },\n} as const satisfies Record<string, { size: number; stroke: number }>\n\nexport type IconSize = keyof typeof ICON_SIZES\n","import { forwardRef } from 'react'\nimport type { Ref } from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport { ICON_SIZES } from './sizes'\nimport type { IconSize } from './sizes'\n\n/**\n * Props base compartilhada.\n */\ntype BaseProps = {\n icon: LucideIcon\n size?: IconSize\n className?: string\n}\n\n/**\n * Ícone semântico — comunica algo para o usuário.\n * @example <CycleIcon icon={Home} size=\"sm\" aria-label=\"Ir para home\" />\n */\ntype SemanticProps = BaseProps & {\n decorative?: false\n 'aria-label': string\n}\n\n/**\n * Ícone decorativo — puramente visual.\n * @example <CycleIcon icon={Home} size=\"sm\" decorative />\n */\ntype DecorativeProps = BaseProps & {\n decorative: true\n 'aria-label'?: never\n}\n\nexport type CycleIconProps = SemanticProps | DecorativeProps\n\n/**\n * CycleIcon — wrapper para ícones Lucide com regras de size/stroke da Cycle.\n *\n * Aplica automaticamente width, height e strokeWidth baseado no size token.\n * Use para todos os ícones Lucide no produto.\n *\n * @example\n * import { Home, Search } from \"lucide-react\"\n * import { CycleIcon } from \"@/components/icons\"\n *\n * <CycleIcon icon={Home} size=\"sm\" decorative />\n * <CycleIcon icon={Search} size=\"lg\" aria-label=\"Buscar\" />\n */\nexport const CycleIcon = forwardRef<SVGSVGElement, CycleIconProps>(\n function CycleIcon(props, ref: Ref<SVGSVGElement>) {\n const { icon: Icon, size = 'sm', decorative, className, ...rest } = props\n\n const { size: px, stroke } = ICON_SIZES[size]\n\n // Lucide usa viewBox=\"0 0 24 24\" fixo. Quando renderizado em tamanho\n // diferente de 24px, o stroke-width e escalado proporcionalmente.\n // Compensamos dividindo pelo fator de escala para que o stroke\n // renderizado em pixels corresponda ao valor definido em ICON_SIZES.\n const VIEWBOX = 24\n const adjustedStroke = stroke * (VIEWBOX / px)\n\n const ariaProps = decorative\n ? { 'aria-hidden': true as const, focusable: 'false' as const }\n : { role: 'img' as const }\n\n return (\n <Icon\n ref={ref}\n width={px}\n height={px}\n strokeWidth={adjustedStroke}\n className={className}\n style={{ width: px, height: px }}\n {...ariaProps}\n {...rest}\n />\n )\n }\n)\n"]}
|