@greatapps/common 1.1.154 → 1.1.156
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/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
- package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
- package/dist/components/layouts/AppNavBar.mjs.map +1 -1
- package/dist/components/layouts/NavBar.mjs.map +1 -1
- package/dist/components/layouts/UsersSelectorPopover.mjs +3 -6
- package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
- package/dist/components/navigation/AppNavigation.mjs +3 -1
- package/dist/components/navigation/AppNavigation.mjs.map +1 -1
- package/dist/components/navigation/CancelledSubscriptionBanner.mjs +59 -0
- package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -0
- package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
- package/dist/components/navigation/shells/DesktopShell.mjs +2 -14
- package/dist/components/navigation/shells/DesktopShell.mjs.map +1 -1
- package/dist/components/navigation/shells/MdShell.mjs +2 -14
- package/dist/components/navigation/shells/MdShell.mjs.map +1 -1
- package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
- package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
- package/dist/components/ui/buttons/Button.mjs.map +1 -1
- package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
- package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
- package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
- package/dist/components/ui/data-display/Badge.mjs.map +1 -1
- package/dist/components/ui/data-display/Card.mjs.map +1 -1
- package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
- package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
- package/dist/components/ui/data-display/Separator.mjs.map +1 -1
- package/dist/components/ui/data-display/Table.mjs.map +1 -1
- package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
- package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
- package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
- package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
- package/dist/components/ui/feedback/Progress.mjs.map +1 -1
- package/dist/components/ui/feedback/Toast.mjs.map +1 -1
- package/dist/components/ui/form/Calendar.mjs.map +1 -1
- package/dist/components/ui/form/Checkbox.mjs.map +1 -1
- package/dist/components/ui/form/DatePicker.mjs.map +1 -1
- package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
- package/dist/components/ui/form/Input.mjs.map +1 -1
- package/dist/components/ui/form/InputOtp.mjs.map +1 -1
- package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
- package/dist/components/ui/form/Select.mjs +1 -1
- package/dist/components/ui/form/Select.mjs.map +1 -1
- package/dist/components/ui/form/Switch.mjs.map +1 -1
- package/dist/components/ui/form/Textarea.mjs.map +1 -1
- package/dist/components/ui/overlay/Command.mjs.map +1 -1
- package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
- package/dist/components/ui/overlay/Popover.mjs.map +1 -1
- package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
- package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
- package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middleware.mjs.map +1 -1
- package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
- package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
- package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
- package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
- package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
- package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
- package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
- package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
- package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
- package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
- package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
- package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
- package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
- package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
- package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
- package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
- package/dist/providers/whitelabel.provider.mjs.map +1 -1
- package/dist/utils/safeServerAction.mjs.map +1 -1
- package/dist/utils/withAction.mjs.map +1 -1
- package/package.json +90 -89
- package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
- package/src/components/account/DeleteAccountModal.tsx +130 -130
- package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
- package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
- package/src/components/layouts/AppMobileNavBar.tsx +125 -125
- package/src/components/layouts/AppNavBar.tsx +57 -57
- package/src/components/layouts/NavBar.tsx +112 -112
- package/src/components/layouts/UsersSelectorPopover.tsx +6 -10
- package/src/components/navigation/AppNavigation.tsx +4 -1
- package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -0
- package/src/components/navigation/NavItemsContext.ts +20 -20
- package/src/components/navigation/shells/DesktopShell.tsx +0 -7
- package/src/components/navigation/shells/MdShell.tsx +0 -6
- package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
- package/src/components/pages/notifications/Notifications.tsx +160 -160
- package/src/components/ui/buttons/Button.tsx +57 -57
- package/src/components/ui/buttons/CancelButton.tsx +14 -14
- package/src/components/ui/buttons/CopyButton.tsx +54 -54
- package/src/components/ui/data-display/Accordion.tsx +81 -81
- package/src/components/ui/data-display/Badge.tsx +47 -47
- package/src/components/ui/data-display/Card.tsx +93 -93
- package/src/components/ui/data-display/Pagination.tsx +126 -126
- package/src/components/ui/data-display/ScrollArea.tsx +59 -59
- package/src/components/ui/data-display/Separator.tsx +29 -29
- package/src/components/ui/data-display/Table.tsx +117 -117
- package/src/components/ui/data-display/Tabs.tsx +67 -67
- package/src/components/ui/feedback/CircularProgress.tsx +75 -75
- package/src/components/ui/feedback/DefaultCircularProgress.tsx +53 -53
- package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
- package/src/components/ui/feedback/Progress.tsx +40 -40
- package/src/components/ui/feedback/Toast.tsx +101 -101
- package/src/components/ui/form/Calendar.tsx +228 -228
- package/src/components/ui/form/Checkbox.tsx +31 -31
- package/src/components/ui/form/DatePicker.tsx +97 -97
- package/src/components/ui/form/DateRangePicker.tsx +108 -108
- package/src/components/ui/form/Input.tsx +20 -20
- package/src/components/ui/form/InputOtp.tsx +80 -80
- package/src/components/ui/form/RadioGroup.tsx +45 -45
- package/src/components/ui/form/Select.tsx +200 -200
- package/src/components/ui/form/Switch.tsx +32 -32
- package/src/components/ui/form/Textarea.tsx +19 -19
- package/src/components/ui/overlay/Command.tsx +185 -185
- package/src/components/ui/overlay/Dialog.tsx +151 -151
- package/src/components/ui/overlay/Popover.tsx +49 -49
- package/src/components/ui/overlay/Sheet.tsx +159 -159
- package/src/components/ui/overlay/Tooltip.tsx +62 -62
- package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
- package/src/index.ts +347 -347
- package/src/middleware.ts +4 -4
- package/src/modules/accounts/actions/account-management.action.ts +90 -90
- package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
- package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
- package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
- package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
- package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
- package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
- package/src/modules/accounts/hooks/useTimezones.ts +15 -15
- package/src/modules/auth/hooks/login.hook.tsx +13 -13
- package/src/modules/auth/hooks/logout.hook.tsx +11 -11
- package/src/modules/auth/hooks/register.hook.tsx +11 -11
- package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
- package/src/modules/projects/actions/add-project-user.action.ts +9 -9
- package/src/modules/projects/actions/list-available-users.action.ts +9 -9
- package/src/modules/projects/actions/list-project-users.action.ts +9 -9
- package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
- package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
- package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
- package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
- package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
- package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +17 -17
- package/src/modules/users/action/find-user-by-id.action.ts +8 -8
- package/src/modules/users/action/list-messages.action.ts +12 -12
- package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
- package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
- package/src/modules/users/hooks/messages.hook.ts +60 -60
- package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
- package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
- package/src/modules/whitelabel/services/whitelabel-styles.service.ts +98 -98
- package/src/modules/whitelabel/styles-schema.ts +37 -37
- package/src/providers/whitelabel.provider.tsx +46 -46
- package/src/utils/safeServerAction.ts +21 -21
- package/src/utils/withAction.ts +13 -13
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import { Slot } from "@radix-ui/react-slot"
|
|
5
|
-
import { cva, type VariantProps } from "class-variance-authority"
|
|
6
|
-
import { cn } from "../../../infra/utils/clsx"
|
|
7
|
-
|
|
8
|
-
const buttonVariants = cva(
|
|
9
|
-
"paragraph-small-semibold cursor-pointer flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
10
|
-
{
|
|
11
|
-
variants: {
|
|
12
|
-
variant: {
|
|
13
|
-
default: " bg-gray-950 text-white hover:bg-gray-950/90",
|
|
14
|
-
secondary:
|
|
15
|
-
"bg-white text-gray-950 border-gray-200 hover:border-gray-400 border",
|
|
16
|
-
ghost:
|
|
17
|
-
"text-gray-600 hover:bg-accent hover:text-gray-950 dark:hover:bg-accent/50",
|
|
18
|
-
brand: "bg-pages-300 hover:bg-pages-200 text-gray-950",
|
|
19
|
-
},
|
|
20
|
-
size: {
|
|
21
|
-
default: "h-12 px-4 py-2 has-[>svg]:px-3",
|
|
22
|
-
sm: "rounded-md gap-1.5 px-2 py-2 has-[>svg]:px-2.5",
|
|
23
|
-
lg: "rounded-md px-6 has-[>svg]:px-4",
|
|
24
|
-
icon: "size-9",
|
|
25
|
-
"icon-sm": "size-8",
|
|
26
|
-
"icon-lg": "size-10",
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
defaultVariants: {
|
|
30
|
-
variant: "default",
|
|
31
|
-
size: "default",
|
|
32
|
-
},
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
function Button({
|
|
37
|
-
className,
|
|
38
|
-
variant,
|
|
39
|
-
size,
|
|
40
|
-
asChild = false,
|
|
41
|
-
...props
|
|
42
|
-
}: React.ComponentProps<"button"> &
|
|
43
|
-
VariantProps<typeof buttonVariants> & {
|
|
44
|
-
asChild?: boolean
|
|
45
|
-
}) {
|
|
46
|
-
const Comp = asChild ? Slot : "button"
|
|
47
|
-
|
|
48
|
-
return (
|
|
49
|
-
<Comp
|
|
50
|
-
data-slot="button"
|
|
51
|
-
className={cn(buttonVariants({ variant, size, className }))}
|
|
52
|
-
{...props}
|
|
53
|
-
/>
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export { Button, buttonVariants }
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { Slot } from "@radix-ui/react-slot"
|
|
5
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
6
|
+
import { cn } from "../../../infra/utils/clsx"
|
|
7
|
+
|
|
8
|
+
const buttonVariants = cva(
|
|
9
|
+
"paragraph-small-semibold cursor-pointer flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
variant: {
|
|
13
|
+
default: " bg-gray-950 text-white hover:bg-gray-950/90",
|
|
14
|
+
secondary:
|
|
15
|
+
"bg-white text-gray-950 border-gray-200 hover:border-gray-400 border",
|
|
16
|
+
ghost:
|
|
17
|
+
"text-gray-600 hover:bg-accent hover:text-gray-950 dark:hover:bg-accent/50",
|
|
18
|
+
brand: "bg-pages-300 hover:bg-pages-200 text-gray-950",
|
|
19
|
+
},
|
|
20
|
+
size: {
|
|
21
|
+
default: "h-12 px-4 py-2 has-[>svg]:px-3",
|
|
22
|
+
sm: "rounded-md gap-1.5 px-2 py-2 has-[>svg]:px-2.5",
|
|
23
|
+
lg: "rounded-md px-6 has-[>svg]:px-4",
|
|
24
|
+
icon: "size-9",
|
|
25
|
+
"icon-sm": "size-8",
|
|
26
|
+
"icon-lg": "size-10",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
defaultVariants: {
|
|
30
|
+
variant: "default",
|
|
31
|
+
size: "default",
|
|
32
|
+
},
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
function Button({
|
|
37
|
+
className,
|
|
38
|
+
variant,
|
|
39
|
+
size,
|
|
40
|
+
asChild = false,
|
|
41
|
+
...props
|
|
42
|
+
}: React.ComponentProps<"button"> &
|
|
43
|
+
VariantProps<typeof buttonVariants> & {
|
|
44
|
+
asChild?: boolean
|
|
45
|
+
}) {
|
|
46
|
+
const Comp = asChild ? Slot : "button"
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<Comp
|
|
50
|
+
data-slot="button"
|
|
51
|
+
className={cn(buttonVariants({ variant, size, className }))}
|
|
52
|
+
{...props}
|
|
53
|
+
/>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { Button, buttonVariants }
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
|
|
5
|
-
export default function CancelButton({
|
|
6
|
-
...props
|
|
7
|
-
}: React.ComponentProps<"button">) {
|
|
8
|
-
return (
|
|
9
|
-
<button
|
|
10
|
-
className="flex h-8 px-2 justify-center items-center rounded-lg bg-red-50 text-red-600 font-semibold text-sm px-3 cursor-pointer hover:bg-red-100"
|
|
11
|
-
{...props}
|
|
12
|
-
/>
|
|
13
|
-
);
|
|
14
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
export default function CancelButton({
|
|
6
|
+
...props
|
|
7
|
+
}: React.ComponentProps<"button">) {
|
|
8
|
+
return (
|
|
9
|
+
<button
|
|
10
|
+
className="flex h-8 px-2 justify-center items-center rounded-lg bg-red-50 text-red-600 font-semibold text-sm px-3 cursor-pointer hover:bg-red-100"
|
|
11
|
+
{...props}
|
|
12
|
+
/>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { Check, Copy } from "lucide-react";
|
|
4
|
-
import { toast } from "sonner";
|
|
5
|
-
import { Toast } from "../feedback/Toast";
|
|
6
|
-
import { Tooltip, TooltipContent, TooltipTrigger } from "../overlay/Tooltip";
|
|
7
|
-
import useCopyToClipboard from "../../../hooks/copy-to-clipboard.hook";
|
|
8
|
-
import { cn } from "../../../infra/utils/clsx";
|
|
9
|
-
|
|
10
|
-
interface CopyButtonProps {
|
|
11
|
-
textToCopy: string;
|
|
12
|
-
size?: number;
|
|
13
|
-
className?: string;
|
|
14
|
-
tooltipText?: string;
|
|
15
|
-
successMessage?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function CopyButton({
|
|
19
|
-
textToCopy,
|
|
20
|
-
size = 14,
|
|
21
|
-
className,
|
|
22
|
-
tooltipText = "Copiar link",
|
|
23
|
-
successMessage = "Link copiado",
|
|
24
|
-
}: CopyButtonProps) {
|
|
25
|
-
const { isCopied, copy } = useCopyToClipboard({
|
|
26
|
-
onSuccess: () => {
|
|
27
|
-
toast.custom((t) => (
|
|
28
|
-
<Toast variant="success" message={successMessage} toastId={t} />
|
|
29
|
-
));
|
|
30
|
-
},
|
|
31
|
-
onError: () => {
|
|
32
|
-
toast.custom((t) => (
|
|
33
|
-
<Toast variant="error" message="Não foi possível copiar o link" toastId={t} />
|
|
34
|
-
));
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<Tooltip>
|
|
40
|
-
<TooltipTrigger
|
|
41
|
-
asChild
|
|
42
|
-
onClick={(e: React.MouseEvent) => {
|
|
43
|
-
e.stopPropagation();
|
|
44
|
-
copy(textToCopy);
|
|
45
|
-
}}
|
|
46
|
-
>
|
|
47
|
-
<span className={cn("cursor-pointer text-gray-500", className)}>
|
|
48
|
-
{isCopied ? <Check size={size} /> : <Copy size={size} />}
|
|
49
|
-
</span>
|
|
50
|
-
</TooltipTrigger>
|
|
51
|
-
<TooltipContent>{isCopied ? "Copiado!" : tooltipText}</TooltipContent>
|
|
52
|
-
</Tooltip>
|
|
53
|
-
);
|
|
54
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Check, Copy } from "lucide-react";
|
|
4
|
+
import { toast } from "sonner";
|
|
5
|
+
import { Toast } from "../feedback/Toast";
|
|
6
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../overlay/Tooltip";
|
|
7
|
+
import useCopyToClipboard from "../../../hooks/copy-to-clipboard.hook";
|
|
8
|
+
import { cn } from "../../../infra/utils/clsx";
|
|
9
|
+
|
|
10
|
+
interface CopyButtonProps {
|
|
11
|
+
textToCopy: string;
|
|
12
|
+
size?: number;
|
|
13
|
+
className?: string;
|
|
14
|
+
tooltipText?: string;
|
|
15
|
+
successMessage?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function CopyButton({
|
|
19
|
+
textToCopy,
|
|
20
|
+
size = 14,
|
|
21
|
+
className,
|
|
22
|
+
tooltipText = "Copiar link",
|
|
23
|
+
successMessage = "Link copiado",
|
|
24
|
+
}: CopyButtonProps) {
|
|
25
|
+
const { isCopied, copy } = useCopyToClipboard({
|
|
26
|
+
onSuccess: () => {
|
|
27
|
+
toast.custom((t) => (
|
|
28
|
+
<Toast variant="success" message={successMessage} toastId={t} />
|
|
29
|
+
));
|
|
30
|
+
},
|
|
31
|
+
onError: () => {
|
|
32
|
+
toast.custom((t) => (
|
|
33
|
+
<Toast variant="error" message="Não foi possível copiar o link" toastId={t} />
|
|
34
|
+
));
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<Tooltip>
|
|
40
|
+
<TooltipTrigger
|
|
41
|
+
asChild
|
|
42
|
+
onClick={(e: React.MouseEvent) => {
|
|
43
|
+
e.stopPropagation();
|
|
44
|
+
copy(textToCopy);
|
|
45
|
+
}}
|
|
46
|
+
>
|
|
47
|
+
<span className={cn("cursor-pointer text-gray-500", className)}>
|
|
48
|
+
{isCopied ? <Check size={size} /> : <Copy size={size} />}
|
|
49
|
+
</span>
|
|
50
|
+
</TooltipTrigger>
|
|
51
|
+
<TooltipContent>{isCopied ? "Copiado!" : tooltipText}</TooltipContent>
|
|
52
|
+
</Tooltip>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
"use client"
|
|
4
|
-
|
|
5
|
-
import * as React from "react"
|
|
6
|
-
import * as AccordionPrimitive from "@radix-ui/react-accordion"
|
|
7
|
-
import { ChevronDownIcon } from "lucide-react"
|
|
8
|
-
import { cn } from "../../../infra/utils/clsx"
|
|
9
|
-
|
|
10
|
-
function Accordion({
|
|
11
|
-
...props
|
|
12
|
-
}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
|
|
13
|
-
return <AccordionPrimitive.Root data-slot="accordion" {...props} />
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function AccordionItem({
|
|
17
|
-
className,
|
|
18
|
-
children,
|
|
19
|
-
...props
|
|
20
|
-
}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
|
|
21
|
-
const itemRef = React.useRef<HTMLDivElement>(null);
|
|
22
|
-
|
|
23
|
-
return (
|
|
24
|
-
<AccordionPrimitive.Item
|
|
25
|
-
ref={itemRef}
|
|
26
|
-
data-slot="accordion-item"
|
|
27
|
-
className={cn("cursor-pointer border rounded-lg p-5", className)}
|
|
28
|
-
onClick={(e) => {
|
|
29
|
-
// Evita abrir/fechar quando o clique já é no Trigger
|
|
30
|
-
if ((e.target as HTMLElement).closest("[data-slot='accordion-trigger']")) return;
|
|
31
|
-
|
|
32
|
-
// Procura o trigger interno e clica nele
|
|
33
|
-
const trigger = itemRef.current?.querySelector("[data-slot='accordion-trigger']") as HTMLElement | null;
|
|
34
|
-
trigger?.click();
|
|
35
|
-
}}
|
|
36
|
-
{...props}
|
|
37
|
-
>
|
|
38
|
-
{children}
|
|
39
|
-
</AccordionPrimitive.Item>
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function AccordionTrigger({
|
|
44
|
-
className,
|
|
45
|
-
children,
|
|
46
|
-
...props
|
|
47
|
-
}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
|
|
48
|
-
return (
|
|
49
|
-
<AccordionPrimitive.Header className="flex">
|
|
50
|
-
<AccordionPrimitive.Trigger
|
|
51
|
-
data-slot="accordion-trigger"
|
|
52
|
-
className={cn(
|
|
53
|
-
"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
|
|
54
|
-
className
|
|
55
|
-
)}
|
|
56
|
-
{...props}
|
|
57
|
-
>
|
|
58
|
-
{children}
|
|
59
|
-
<ChevronDownIcon className="size-5! text-gray-950 pointer-events-none shrink-0 translate-y-0.5 transition-transform duration-200" />
|
|
60
|
-
</AccordionPrimitive.Trigger>
|
|
61
|
-
</AccordionPrimitive.Header>
|
|
62
|
-
)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function AccordionContent({
|
|
66
|
-
className,
|
|
67
|
-
children,
|
|
68
|
-
...props
|
|
69
|
-
}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
|
|
70
|
-
return (
|
|
71
|
-
<AccordionPrimitive.Content
|
|
72
|
-
data-slot="accordion-content"
|
|
73
|
-
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
|
|
74
|
-
{...props}
|
|
75
|
-
>
|
|
76
|
-
<div className={cn("pt-3 paragraph-small-regular text-gray-500", className)}>{children}</div>
|
|
77
|
-
</AccordionPrimitive.Content>
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
"use client"
|
|
4
|
+
|
|
5
|
+
import * as React from "react"
|
|
6
|
+
import * as AccordionPrimitive from "@radix-ui/react-accordion"
|
|
7
|
+
import { ChevronDownIcon } from "lucide-react"
|
|
8
|
+
import { cn } from "../../../infra/utils/clsx"
|
|
9
|
+
|
|
10
|
+
function Accordion({
|
|
11
|
+
...props
|
|
12
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
|
|
13
|
+
return <AccordionPrimitive.Root data-slot="accordion" {...props} />
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function AccordionItem({
|
|
17
|
+
className,
|
|
18
|
+
children,
|
|
19
|
+
...props
|
|
20
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
|
|
21
|
+
const itemRef = React.useRef<HTMLDivElement>(null);
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<AccordionPrimitive.Item
|
|
25
|
+
ref={itemRef}
|
|
26
|
+
data-slot="accordion-item"
|
|
27
|
+
className={cn("cursor-pointer border rounded-lg p-5", className)}
|
|
28
|
+
onClick={(e) => {
|
|
29
|
+
// Evita abrir/fechar quando o clique já é no Trigger
|
|
30
|
+
if ((e.target as HTMLElement).closest("[data-slot='accordion-trigger']")) return;
|
|
31
|
+
|
|
32
|
+
// Procura o trigger interno e clica nele
|
|
33
|
+
const trigger = itemRef.current?.querySelector("[data-slot='accordion-trigger']") as HTMLElement | null;
|
|
34
|
+
trigger?.click();
|
|
35
|
+
}}
|
|
36
|
+
{...props}
|
|
37
|
+
>
|
|
38
|
+
{children}
|
|
39
|
+
</AccordionPrimitive.Item>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function AccordionTrigger({
|
|
44
|
+
className,
|
|
45
|
+
children,
|
|
46
|
+
...props
|
|
47
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
|
|
48
|
+
return (
|
|
49
|
+
<AccordionPrimitive.Header className="flex">
|
|
50
|
+
<AccordionPrimitive.Trigger
|
|
51
|
+
data-slot="accordion-trigger"
|
|
52
|
+
className={cn(
|
|
53
|
+
"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
|
|
54
|
+
className
|
|
55
|
+
)}
|
|
56
|
+
{...props}
|
|
57
|
+
>
|
|
58
|
+
{children}
|
|
59
|
+
<ChevronDownIcon className="size-5! text-gray-950 pointer-events-none shrink-0 translate-y-0.5 transition-transform duration-200" />
|
|
60
|
+
</AccordionPrimitive.Trigger>
|
|
61
|
+
</AccordionPrimitive.Header>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function AccordionContent({
|
|
66
|
+
className,
|
|
67
|
+
children,
|
|
68
|
+
...props
|
|
69
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
|
|
70
|
+
return (
|
|
71
|
+
<AccordionPrimitive.Content
|
|
72
|
+
data-slot="accordion-content"
|
|
73
|
+
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
|
|
74
|
+
{...props}
|
|
75
|
+
>
|
|
76
|
+
<div className={cn("pt-3 paragraph-small-regular text-gray-500", className)}>{children}</div>
|
|
77
|
+
</AccordionPrimitive.Content>
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import * as React from "react"
|
|
4
|
-
import { Slot } from "@radix-ui/react-slot"
|
|
5
|
-
import { cva, type VariantProps } from "class-variance-authority"
|
|
6
|
-
import { cn } from "../../../infra/utils/clsx"
|
|
7
|
-
|
|
8
|
-
const badgeVariants = cva(
|
|
9
|
-
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
10
|
-
{
|
|
11
|
-
variants: {
|
|
12
|
-
variant: {
|
|
13
|
-
default:
|
|
14
|
-
"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
15
|
-
secondary:
|
|
16
|
-
"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
17
|
-
destructive:
|
|
18
|
-
"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
19
|
-
outline:
|
|
20
|
-
"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
defaultVariants: {
|
|
24
|
-
variant: "default",
|
|
25
|
-
},
|
|
26
|
-
}
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
function Badge({
|
|
30
|
-
className,
|
|
31
|
-
variant,
|
|
32
|
-
asChild = false,
|
|
33
|
-
...props
|
|
34
|
-
}: React.ComponentProps<"span"> &
|
|
35
|
-
VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
|
|
36
|
-
const Comp = asChild ? Slot : "span"
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<Comp
|
|
40
|
-
data-slot="badge"
|
|
41
|
-
className={cn(badgeVariants({ variant }), className)}
|
|
42
|
-
{...props}
|
|
43
|
-
/>
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export { Badge, badgeVariants }
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { Slot } from "@radix-ui/react-slot"
|
|
5
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
6
|
+
import { cn } from "../../../infra/utils/clsx"
|
|
7
|
+
|
|
8
|
+
const badgeVariants = cva(
|
|
9
|
+
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
variant: {
|
|
13
|
+
default:
|
|
14
|
+
"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
15
|
+
secondary:
|
|
16
|
+
"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
17
|
+
destructive:
|
|
18
|
+
"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
19
|
+
outline:
|
|
20
|
+
"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
variant: "default",
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
function Badge({
|
|
30
|
+
className,
|
|
31
|
+
variant,
|
|
32
|
+
asChild = false,
|
|
33
|
+
...props
|
|
34
|
+
}: React.ComponentProps<"span"> &
|
|
35
|
+
VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
|
|
36
|
+
const Comp = asChild ? Slot : "span"
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<Comp
|
|
40
|
+
data-slot="badge"
|
|
41
|
+
className={cn(badgeVariants({ variant }), className)}
|
|
42
|
+
{...props}
|
|
43
|
+
/>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { Badge, badgeVariants }
|