@greatapps/common 1.1.234 → 1.1.237

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 (227) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  11. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  14. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  15. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  16. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  17. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  18. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  19. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  20. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  21. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  22. package/dist/components/layouts/NavBar.mjs +3 -3
  23. package/dist/components/layouts/NavBar.mjs.map +1 -1
  24. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  25. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  26. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  27. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  28. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  29. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  30. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  31. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  32. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  33. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  34. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  35. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  36. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  37. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  38. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  39. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  40. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  41. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  42. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  43. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  44. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  45. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  46. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  47. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  48. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  49. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  50. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  51. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  52. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  53. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  54. package/dist/components/ui/form/FormField.mjs.map +1 -1
  55. package/dist/components/ui/form/Input.mjs.map +1 -1
  56. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  57. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  58. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  59. package/dist/components/ui/form/Select.mjs +1 -1
  60. package/dist/components/ui/form/Select.mjs.map +1 -1
  61. package/dist/components/ui/form/Switch.mjs.map +1 -1
  62. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  63. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  64. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  65. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  66. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  67. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  68. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  69. package/dist/index.mjs.map +1 -1
  70. package/dist/middleware.mjs.map +1 -1
  71. package/dist/modules/accounts/actions/account-management.action.mjs +1 -0
  72. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  73. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  74. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  75. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  76. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  77. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  78. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  79. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  80. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  81. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  82. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  83. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  84. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  85. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  86. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  87. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  88. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  89. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  90. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  91. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  92. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  93. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  94. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  95. package/dist/modules/subscriptions/actions/find-plan-by-id.action.mjs.map +1 -1
  96. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  97. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  98. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  99. package/dist/modules/subscriptions/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  100. package/dist/modules/subscriptions/hooks/use-plan-by-id.hook.mjs.map +1 -1
  101. package/dist/modules/subscriptions/services/plans.service.mjs.map +1 -1
  102. package/dist/modules/subscriptions/types/plan.type.mjs.map +1 -1
  103. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  104. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  105. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  106. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  107. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  108. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  109. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  110. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  111. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  112. package/dist/utils/countries.mjs.map +1 -1
  113. package/dist/utils/safeServerAction.mjs.map +1 -1
  114. package/dist/utils/withAction.mjs.map +1 -1
  115. package/package.json +89 -89
  116. package/src/components/account/ConfigurationsMyAccountModal.tsx +150 -150
  117. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  118. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  119. package/src/components/account/DeleteAccountModal.tsx +130 -130
  120. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  121. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  122. package/src/components/account/TwoFactorAuthModal.tsx +223 -223
  123. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  124. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  125. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  126. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  127. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  128. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  129. package/src/components/account/sections/PreferencesSection.tsx +273 -273
  130. package/src/components/account/sections/SecuritySection.tsx +160 -160
  131. package/src/components/embeds/CrispEmbed.tsx +101 -101
  132. package/src/components/embeds/FrillEmbed.tsx +119 -119
  133. package/src/components/layouts/AppMobileNavBar.tsx +110 -110
  134. package/src/components/layouts/AppNavBar.tsx +57 -57
  135. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  136. package/src/components/layouts/NavBar.tsx +120 -120
  137. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  138. package/src/components/layouts/ProfilePopover.tsx +167 -167
  139. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  140. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  141. package/src/components/navigation/NavItemsContext.ts +20 -20
  142. package/src/components/navigation/ProjectSelectorPopover.tsx +157 -157
  143. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  144. package/src/components/navigation/subcomponents/ProjectSelector.tsx +154 -154
  145. package/src/components/pages/notifications/Notifications.tsx +160 -160
  146. package/src/components/ui/buttons/Button.tsx +57 -57
  147. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  148. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  149. package/src/components/ui/data-display/Accordion.tsx +81 -81
  150. package/src/components/ui/data-display/Badge.tsx +47 -47
  151. package/src/components/ui/data-display/Card.tsx +93 -93
  152. package/src/components/ui/data-display/Pagination.tsx +126 -126
  153. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  154. package/src/components/ui/data-display/Separator.tsx +29 -29
  155. package/src/components/ui/data-display/Table.tsx +117 -117
  156. package/src/components/ui/data-display/Tabs.tsx +67 -67
  157. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  158. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  159. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  160. package/src/components/ui/feedback/Progress.tsx +40 -40
  161. package/src/components/ui/feedback/Toast.tsx +101 -101
  162. package/src/components/ui/form/Calendar.tsx +228 -228
  163. package/src/components/ui/form/Checkbox.tsx +31 -31
  164. package/src/components/ui/form/ComboboxField.tsx +154 -154
  165. package/src/components/ui/form/DatePicker.tsx +97 -97
  166. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  167. package/src/components/ui/form/FormField.tsx +131 -131
  168. package/src/components/ui/form/Input.tsx +20 -20
  169. package/src/components/ui/form/InputOtp.tsx +80 -80
  170. package/src/components/ui/form/PhoneInput.tsx +205 -205
  171. package/src/components/ui/form/RadioGroup.tsx +45 -45
  172. package/src/components/ui/form/Select.tsx +200 -200
  173. package/src/components/ui/form/Switch.tsx +32 -32
  174. package/src/components/ui/form/Textarea.tsx +19 -19
  175. package/src/components/ui/overlay/Command.tsx +185 -185
  176. package/src/components/ui/overlay/Dialog.tsx +151 -151
  177. package/src/components/ui/overlay/Popover.tsx +49 -49
  178. package/src/components/ui/overlay/Sheet.tsx +166 -166
  179. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  180. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  181. package/src/index.ts +359 -359
  182. package/src/middleware.ts +4 -4
  183. package/src/modules/accounts/actions/account-management.action.ts +91 -90
  184. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  185. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  186. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  187. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  188. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  189. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  190. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  191. package/src/modules/accounts/services/account.service.ts +236 -236
  192. package/src/modules/accounts/types.ts +214 -214
  193. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  194. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  195. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  196. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  197. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  198. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  199. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  200. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  201. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  202. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  203. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  204. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  205. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  206. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  207. package/src/modules/subscriptions/actions/find-plan-by-id.action.ts +8 -8
  208. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  209. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  210. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +17 -17
  211. package/src/modules/subscriptions/hooks/use-has-plan-addon.hook.ts +17 -17
  212. package/src/modules/subscriptions/hooks/use-plan-by-id.hook.ts +13 -13
  213. package/src/modules/subscriptions/services/plans.service.ts +36 -36
  214. package/src/modules/subscriptions/types/plan.type.ts +21 -21
  215. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  216. package/src/modules/users/action/list-messages.action.ts +12 -12
  217. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  218. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  219. package/src/modules/users/hooks/messages.hook.ts +60 -60
  220. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  221. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  222. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +98 -98
  223. package/src/modules/whitelabel/styles-schema.ts +37 -37
  224. package/src/providers/whitelabel.provider.tsx +46 -46
  225. package/src/utils/countries.ts +224 -224
  226. package/src/utils/safeServerAction.ts +21 -21
  227. 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 { IconCheck, IconCopy } from '@tabler/icons-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 ? <IconCheck size={size} /> : <IconCopy size={size} />}
49
- </span>
50
- </TooltipTrigger>
51
- <TooltipContent>{isCopied ? "Copiado!" : tooltipText}</TooltipContent>
52
- </Tooltip>
53
- );
54
- }
1
+ 'use client';
2
+
3
+ import { IconCheck, IconCopy } from '@tabler/icons-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 ? <IconCheck size={size} /> : <IconCopy 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 { IconChevronDown } from '@tabler/icons-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
- <IconChevronDown 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 { IconChevronDown } from '@tabler/icons-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
+ <IconChevronDown 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 }