@greatapps/common 1.1.517 → 1.1.519

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 (413) 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/account/sections/TokenSection.mjs +7 -1
  18. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  19. package/dist/components/embeds/ClarityEmbed.mjs +55 -0
  20. package/dist/components/embeds/ClarityEmbed.mjs.map +1 -0
  21. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  22. package/dist/components/embeds/EmbedWidgets.mjs +3 -1
  23. package/dist/components/embeds/EmbedWidgets.mjs.map +1 -1
  24. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  25. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  26. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  27. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  28. package/dist/components/layouts/NavBar.mjs.map +1 -1
  29. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  30. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  31. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  32. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  33. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  34. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  35. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  37. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  38. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  39. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  40. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  41. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  42. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  43. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  44. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  45. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  46. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  47. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  48. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  50. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  52. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  53. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  54. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  55. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  56. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  58. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  59. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  60. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  61. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  62. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  63. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  64. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  65. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  66. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  67. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  68. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  69. package/dist/components/ui/form/DatePicker.mjs +2 -2
  70. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  71. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  72. package/dist/components/ui/form/FormField.mjs.map +1 -1
  73. package/dist/components/ui/form/Input.mjs.map +1 -1
  74. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  75. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  76. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  77. package/dist/components/ui/form/Select.mjs +1 -1
  78. package/dist/components/ui/form/Select.mjs.map +1 -1
  79. package/dist/components/ui/form/Switch.mjs.map +1 -1
  80. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  82. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  83. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  84. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  85. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  86. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  87. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  88. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  89. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  90. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  91. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  92. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  93. package/dist/index.mjs +2 -0
  94. package/dist/index.mjs.map +1 -1
  95. package/dist/infra/utils/array.mjs.map +1 -1
  96. package/dist/infra/utils/date.mjs.map +1 -1
  97. package/dist/middleware.mjs.map +1 -1
  98. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  99. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  100. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  101. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  102. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  103. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  104. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  105. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  106. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  107. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  108. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  109. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  110. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  111. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  112. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  113. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  114. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  115. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  116. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  117. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  118. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  119. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  120. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  121. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  122. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  123. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  124. package/dist/modules/cards/actions/find-card-by-id.action.mjs.map +1 -1
  125. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  126. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  127. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  128. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  129. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  130. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  131. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  132. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  133. package/dist/modules/cards/types.mjs.map +1 -1
  134. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  135. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  136. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  137. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  138. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  139. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  140. package/dist/modules/images/utils/base64.mjs.map +1 -1
  141. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  142. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  143. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  144. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  145. package/dist/modules/plans/actions/list-plans.action.mjs.map +1 -1
  146. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  147. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  148. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  149. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  150. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  151. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  152. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  153. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  154. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  155. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  156. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  157. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  158. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  159. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  160. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  161. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  162. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  163. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  164. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  165. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  166. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  167. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  168. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  169. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  170. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  171. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  172. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  173. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  174. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  175. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  176. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  177. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  178. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  179. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  180. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  181. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  182. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  183. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  184. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  185. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  186. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  187. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  188. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  189. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  190. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  191. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  192. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  193. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  194. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  195. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  196. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  197. package/dist/providers/auth.provider.mjs.map +1 -1
  198. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  199. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  200. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  201. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  202. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  203. package/dist/utils/constants/br-states.mjs.map +1 -1
  204. package/dist/utils/countries.mjs.map +1 -1
  205. package/dist/utils/format/currency.mjs.map +1 -1
  206. package/dist/utils/safeServerAction.mjs.map +1 -1
  207. package/dist/utils/withAction.mjs.map +1 -1
  208. package/package.json +92 -92
  209. package/src/components/account/ConfigurationsMyAccountModal.tsx +161 -161
  210. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  211. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  212. package/src/components/account/DeleteAccountModal.tsx +130 -130
  213. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  214. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  215. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  216. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  217. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  218. package/src/components/account/sections/ChangeEmailModal.tsx +227 -227
  219. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  220. package/src/components/account/sections/ChangePhoneModal.tsx +247 -247
  221. package/src/components/account/sections/MyProfileSection.tsx +328 -328
  222. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  223. package/src/components/account/sections/SecuritySection.tsx +46 -46
  224. package/src/components/account/sections/TokenSection.tsx +73 -64
  225. package/src/components/embeds/ClarityEmbed.tsx +70 -0
  226. package/src/components/embeds/CrispEmbed.tsx +156 -156
  227. package/src/components/embeds/EmbedWidgets.tsx +52 -50
  228. package/src/components/embeds/FrillEmbed.tsx +129 -129
  229. package/src/components/layouts/AppMobileNavBar.tsx +80 -80
  230. package/src/components/layouts/AppNavBar.tsx +40 -40
  231. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  232. package/src/components/layouts/NavBar.tsx +175 -175
  233. package/src/components/layouts/NotificationsPopover.tsx +118 -118
  234. package/src/components/layouts/ProfilePopover.tsx +176 -176
  235. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  236. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  237. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  238. package/src/components/modals/BuyCreditsModal.tsx +354 -354
  239. package/src/components/modals/PaidPlanRequiredModal.tsx +57 -57
  240. package/src/components/modals/cards/AddCardModal.tsx +265 -265
  241. package/src/components/modals/cards/CardFormFields.tsx +348 -348
  242. package/src/components/navigation/CancelledSubscriptionBanner.tsx +64 -64
  243. package/src/components/navigation/NavItemsContext.ts +20 -20
  244. package/src/components/navigation/ProjectSelectorPopover.tsx +178 -178
  245. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  246. package/src/components/navigation/subcomponents/BottomLinks.tsx +37 -37
  247. package/src/components/navigation/subcomponents/ProjectSelector.tsx +182 -182
  248. package/src/components/pages/NotFoundPage.tsx +67 -67
  249. package/src/components/pages/notifications/Notifications.tsx +187 -187
  250. package/src/components/ui/buttons/Button.tsx +62 -62
  251. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  252. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  253. package/src/components/ui/data-display/Accordion.tsx +81 -81
  254. package/src/components/ui/data-display/Badge.tsx +47 -47
  255. package/src/components/ui/data-display/Card.tsx +93 -93
  256. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  257. package/src/components/ui/data-display/CardItem.tsx +75 -75
  258. package/src/components/ui/data-display/Pagination.tsx +126 -126
  259. package/src/components/ui/data-display/PaymentInfoCard.tsx +192 -192
  260. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  261. package/src/components/ui/data-display/Separator.tsx +29 -29
  262. package/src/components/ui/data-display/Table.tsx +117 -117
  263. package/src/components/ui/data-display/Tabs.tsx +67 -67
  264. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  265. package/src/components/ui/feedback/DefaultCircularProgress.tsx +65 -65
  266. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  267. package/src/components/ui/feedback/Progress.tsx +40 -40
  268. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  269. package/src/components/ui/feedback/Toast.tsx +104 -104
  270. package/src/components/ui/form/Calendar.tsx +228 -228
  271. package/src/components/ui/form/Checkbox.tsx +31 -31
  272. package/src/components/ui/form/ComboboxField.tsx +154 -154
  273. package/src/components/ui/form/DatePicker.tsx +97 -98
  274. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  275. package/src/components/ui/form/FormField.tsx +133 -133
  276. package/src/components/ui/form/Input.tsx +20 -20
  277. package/src/components/ui/form/InputOtp.tsx +80 -80
  278. package/src/components/ui/form/PhoneInput.tsx +208 -208
  279. package/src/components/ui/form/RadioGroup.tsx +45 -45
  280. package/src/components/ui/form/Select.tsx +200 -200
  281. package/src/components/ui/form/Switch.tsx +32 -32
  282. package/src/components/ui/form/Textarea.tsx +19 -19
  283. package/src/components/ui/overlay/Command.tsx +185 -185
  284. package/src/components/ui/overlay/Dialog.tsx +153 -153
  285. package/src/components/ui/overlay/Popover.tsx +49 -49
  286. package/src/components/ui/overlay/Sheet.tsx +170 -170
  287. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  288. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +254 -254
  289. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +61 -61
  290. package/src/components/widgets/ImageUpload/ImageUpload.tsx +126 -126
  291. package/src/components/widgets/ImageUpload/index.ts +3 -3
  292. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  293. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  294. package/src/hooks/useAuthQueryKey.ts +32 -32
  295. package/src/index.ts +507 -506
  296. package/src/infra/utils/array.ts +54 -54
  297. package/src/infra/utils/date.ts +18 -18
  298. package/src/middleware.ts +4 -4
  299. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  300. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  301. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  302. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  303. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  304. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  305. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  306. package/src/modules/accounts/hooks/useAccountManagement.ts +94 -94
  307. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  308. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  309. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  310. package/src/modules/accounts/services/account-token.service.ts +52 -52
  311. package/src/modules/accounts/services/account.service.ts +239 -239
  312. package/src/modules/accounts/types.ts +225 -225
  313. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  314. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  315. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  316. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  317. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  318. package/src/modules/auth/hooks/useUserQuery.ts +75 -75
  319. package/src/modules/auth/types/management-permission.type.ts +7 -7
  320. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  321. package/src/modules/auth/utils/assert-management-subscription.ts +35 -35
  322. package/src/modules/auth/utils/assert-paid-subscription.ts +43 -43
  323. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  324. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  325. package/src/modules/cards/actions/create-card.action.ts +9 -9
  326. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  327. package/src/modules/cards/actions/find-card-by-id.action.ts +8 -8
  328. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  329. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  330. package/src/modules/cards/hooks/card-by-id.hook.ts +21 -21
  331. package/src/modules/cards/hooks/cards.hook.ts +23 -23
  332. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  333. package/src/modules/cards/hooks/delete-card.hook.ts +54 -54
  334. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  335. package/src/modules/cards/services/cards.service.ts +108 -108
  336. package/src/modules/cards/types.ts +42 -42
  337. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  338. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +99 -99
  339. package/src/modules/images/actions/process-image.action.ts +40 -40
  340. package/src/modules/images/constants/image.constants.ts +11 -11
  341. package/src/modules/images/hooks/use-image-upload.hook.ts +172 -172
  342. package/src/modules/images/services/image-processing.service.ts +75 -75
  343. package/src/modules/images/types/image.type.ts +54 -54
  344. package/src/modules/images/utils/base64.ts +26 -26
  345. package/src/modules/images/utils/compress-image.ts +20 -20
  346. package/src/modules/images/utils/crop-image.ts +51 -51
  347. package/src/modules/images/utils/validate-image.ts +71 -71
  348. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  349. package/src/modules/plans/actions/list-plans.action.ts +17 -17
  350. package/src/modules/plans/hooks/list-plans.hook.ts +24 -24
  351. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  352. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +38 -38
  353. package/src/modules/plans/services/plans.service.ts +133 -133
  354. package/src/modules/plans/types/plan.type.ts +67 -67
  355. package/src/modules/plans/utils/map-api-plan-to-ui.ts +98 -98
  356. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  357. package/src/modules/projects/actions/create-project.action.ts +9 -9
  358. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  359. package/src/modules/projects/actions/find-project.action.ts +8 -8
  360. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  361. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  362. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  363. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  364. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  365. package/src/modules/projects/actions/update-project.action.ts +9 -9
  366. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  367. package/src/modules/projects/hooks/create-project.hook.ts +88 -88
  368. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  369. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  370. package/src/modules/projects/hooks/list-all-account-users.hook.ts +39 -39
  371. package/src/modules/projects/hooks/list-available-users.hook.ts +38 -38
  372. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +43 -43
  373. package/src/modules/projects/hooks/list-project-users.hook.ts +38 -38
  374. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  375. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  376. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  377. package/src/modules/projects/services/projects.service.ts +144 -144
  378. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  379. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  380. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  381. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  382. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  383. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +18 -18
  384. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +19 -19
  385. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  386. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  387. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  388. package/src/modules/subscriptions/types/calculate-subscription.type.ts +113 -113
  389. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  390. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  391. package/src/modules/subscriptions/utils/periodicity.ts +62 -62
  392. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  393. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  394. package/src/modules/users/action/list-messages.action.ts +26 -26
  395. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  396. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  397. package/src/modules/users/hooks/messages.hook.ts +67 -67
  398. package/src/modules/users/services/messages.service.ts +49 -49
  399. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  400. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  401. package/src/modules/whitelabel/schema.ts +84 -84
  402. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  403. package/src/providers/auth.provider.tsx +162 -162
  404. package/src/providers/whitelabel.provider.tsx +59 -59
  405. package/src/store/useBuyCreditsModal.ts +21 -21
  406. package/src/store/useDesktopSidebarStore.ts +47 -47
  407. package/src/store/useMdSidebarStore.ts +34 -34
  408. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  409. package/src/utils/constants/br-states.ts +29 -29
  410. package/src/utils/countries.ts +224 -224
  411. package/src/utils/format/currency.ts +15 -15
  412. package/src/utils/safeServerAction.ts +21 -21
  413. package/src/utils/withAction.ts +13 -13
@@ -1,254 +1,254 @@
1
- 'use client'
2
-
3
- import { useRef, useState } from 'react'
4
- import ReactCrop, {
5
- type Crop,
6
- centerCrop,
7
- makeAspectCrop,
8
- } from 'react-image-crop'
9
- import 'react-image-crop/dist/ReactCrop.css'
10
- import {
11
- Dialog,
12
- DialogContent,
13
- DialogFooter,
14
- DialogHeader,
15
- DialogTitle,
16
- } from '../../ui/overlay/Dialog'
17
- import { Button } from '../../ui/buttons/Button'
18
-
19
- // CSS customizado para grid pontilhado fino e círculo
20
- const baseCropStyles = `
21
- .custom-crop-area .ReactCrop__crop-selection {
22
- border: 2px solid white !important;
23
- box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5) !important;
24
- }
25
-
26
- /* Grid de 9 quadrados - linhas pontilhadas finas */
27
- .custom-crop-area .ReactCrop__crop-selection .crop-grid {
28
- position: absolute;
29
- inset: 0;
30
- pointer-events: none;
31
- }
32
-
33
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line {
34
- position: absolute;
35
- background: repeating-linear-gradient(
36
- to right,
37
- rgba(255, 255, 255, 0.5) 0,
38
- rgba(255, 255, 255, 0.5) 4px,
39
- transparent 4px,
40
- transparent 8px
41
- );
42
- }
43
-
44
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.horizontal {
45
- left: 0;
46
- right: 0;
47
- height: 1px;
48
- }
49
-
50
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.vertical {
51
- top: 0;
52
- bottom: 0;
53
- width: 1px;
54
- background: repeating-linear-gradient(
55
- to bottom,
56
- rgba(255, 255, 255, 0.5) 0,
57
- rgba(255, 255, 255, 0.5) 4px,
58
- transparent 4px,
59
- transparent 8px
60
- );
61
- }
62
-
63
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.h1 { top: 33.33%; }
64
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.h2 { top: 66.66%; }
65
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.v1 { left: 33.33%; }
66
- .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.v2 { left: 66.66%; }
67
-
68
- /* Círculo inscrito */
69
- .custom-crop-area.with-circle .ReactCrop__crop-selection .crop-circle {
70
- position: absolute;
71
- inset: 0;
72
- border: 1px dashed rgba(255, 255, 255, 0.6);
73
- border-radius: 50%;
74
- pointer-events: none;
75
- }
76
-
77
- /* Bolinhas centrais nas bordas */
78
- .custom-crop-area .ReactCrop__crop-selection .crop-handle {
79
- position: absolute;
80
- width: 10px;
81
- height: 10px;
82
- background: white;
83
- border-radius: 50%;
84
- pointer-events: none;
85
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
86
- }
87
-
88
- .custom-crop-area .ReactCrop__crop-selection .crop-handle.top {
89
- top: -5px;
90
- left: 50%;
91
- transform: translateX(-50%);
92
- }
93
-
94
- .custom-crop-area .ReactCrop__crop-selection .crop-handle.bottom {
95
- bottom: -5px;
96
- left: 50%;
97
- transform: translateX(-50%);
98
- }
99
-
100
- .custom-crop-area .ReactCrop__crop-selection .crop-handle.left {
101
- left: -5px;
102
- top: 50%;
103
- transform: translateY(-50%);
104
- }
105
-
106
- .custom-crop-area .ReactCrop__crop-selection .crop-handle.right {
107
- right: -5px;
108
- top: 50%;
109
- transform: translateY(-50%);
110
- }
111
- `
112
-
113
- interface ImageCropModalProps {
114
- open: boolean
115
- onOpenChange: (open: boolean) => void
116
- imageSrc: string
117
- aspectRatio: number
118
- onConfirm: (image: HTMLImageElement, crop: Crop) => void
119
- onCancel?: () => void
120
- onImageLoad?: (naturalWidth: number, naturalHeight: number) => void
121
- showCircleGuide?: boolean
122
- minWidth?: number
123
- minHeight?: number
124
- }
125
-
126
- export function ImageCropModal({
127
- open,
128
- onOpenChange,
129
- imageSrc,
130
- aspectRatio,
131
- onConfirm,
132
- onCancel,
133
- onImageLoad: onImageLoadCallback,
134
- showCircleGuide,
135
- minWidth,
136
- minHeight,
137
- }: ImageCropModalProps) {
138
- const imgRef = useRef<HTMLImageElement>(null)
139
- const [crop, setCrop] = useState<Crop>()
140
- const [imageSize, setImageSize] = useState({ width: 0, height: 0 })
141
-
142
- const onImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {
143
- const { naturalWidth, naturalHeight } = e.currentTarget
144
- setImageSize({ width: naturalWidth, height: naturalHeight })
145
-
146
- // Notifica o hook para verificar dimensões mínimas
147
- onImageLoadCallback?.(naturalWidth, naturalHeight)
148
-
149
- const initialCrop = centerCrop(
150
- makeAspectCrop(
151
- { unit: '%', width: 90 },
152
- aspectRatio,
153
- naturalWidth,
154
- naturalHeight
155
- ),
156
- naturalWidth,
157
- naturalHeight
158
- )
159
-
160
- setCrop(initialCrop)
161
- }
162
-
163
- // Calcula tamanho mínimo em porcentagem baseado nas dimensões mínimas em pixels
164
- const minCropWidth = minWidth && imageSize.width > 0
165
- ? Math.min((minWidth / imageSize.width) * 100, 100)
166
- : undefined
167
- const minCropHeight = minHeight && imageSize.height > 0
168
- ? Math.min((minHeight / imageSize.height) * 100, 100)
169
- : undefined
170
-
171
- const handleConfirm = () => {
172
- if (imgRef.current && crop) {
173
- onConfirm(imgRef.current, crop)
174
- }
175
- }
176
-
177
- const handleCancel = () => {
178
- onCancel?.()
179
- onOpenChange(false)
180
- }
181
-
182
- // Determina se deve mostrar círculo (aspect ratio 1:1 por padrão)
183
- const shouldShowCircle = showCircleGuide ?? aspectRatio === 1
184
-
185
- // Renderiza grid, círculo e bolinhas dentro da área de crop
186
- const renderSelectionAddon = () => (
187
- <>
188
- {/* Grid de 9 quadrados com linhas pontilhadas */}
189
- <div className="crop-grid">
190
- <div className="crop-grid-line horizontal h1" />
191
- <div className="crop-grid-line horizontal h2" />
192
- <div className="crop-grid-line vertical v1" />
193
- <div className="crop-grid-line vertical v2" />
194
- </div>
195
- {/* Círculo inscrito */}
196
- {shouldShowCircle && <div className="crop-circle" />}
197
- {/* Bolinhas centrais nas bordas */}
198
- <div className="crop-handle top" />
199
- <div className="crop-handle bottom" />
200
- <div className="crop-handle left" />
201
- <div className="crop-handle right" />
202
- </>
203
- )
204
-
205
- return (
206
- <Dialog open={open} onOpenChange={onOpenChange}>
207
- <style>{baseCropStyles}</style>
208
- <DialogContent
209
- className="w-full md:w-[650px]! lg:w-[650px]! max-w-[650px]! max-[650px]:w-[calc(100%-32px)] p-0 gap-0 z-[1003]!"
210
- overlayClassName="z-[1002]!"
211
- >
212
- <DialogHeader className="p-5">
213
- <DialogTitle className="text-center text-[16px]!">
214
- Ajustar imagem
215
- </DialogTitle>
216
- </DialogHeader>
217
-
218
- <div className="flex flex-col gap-4 px-5 pb-5">
219
- <div className="flex justify-center overflow-hidden rounded-lg">
220
- <ReactCrop
221
- crop={crop}
222
- onChange={(c) => setCrop(c)}
223
- aspect={aspectRatio}
224
- className={`max-h-[50vh] custom-crop-area ${shouldShowCircle ? 'with-circle' : ''}`}
225
- keepSelection
226
- minWidth={minCropWidth}
227
- minHeight={minCropHeight}
228
- renderSelectionAddon={renderSelectionAddon}
229
- >
230
- <img
231
- ref={imgRef}
232
- src={imageSrc}
233
- alt="Crop"
234
- onLoad={onImageLoad}
235
- className="max-h-[50vh] object-contain"
236
- />
237
- </ReactCrop>
238
- </div>
239
-
240
- <p className="paragraph-small-regular text-zinc-500 text-center">
241
- Arraste para ajustar a área de corte
242
- </p>
243
- </div>
244
-
245
- <DialogFooter className="flex-row! items-center justify-start! gap-3 p-5 border-t border-zinc-200">
246
- <Button onClick={handleConfirm}>Confirmar</Button>
247
- <Button variant="secondary" onClick={handleCancel}>
248
- Cancelar
249
- </Button>
250
- </DialogFooter>
251
- </DialogContent>
252
- </Dialog>
253
- )
254
- }
1
+ 'use client'
2
+
3
+ import { useRef, useState } from 'react'
4
+ import ReactCrop, {
5
+ type Crop,
6
+ centerCrop,
7
+ makeAspectCrop,
8
+ } from 'react-image-crop'
9
+ import 'react-image-crop/dist/ReactCrop.css'
10
+ import {
11
+ Dialog,
12
+ DialogContent,
13
+ DialogFooter,
14
+ DialogHeader,
15
+ DialogTitle,
16
+ } from '../../ui/overlay/Dialog'
17
+ import { Button } from '../../ui/buttons/Button'
18
+
19
+ // CSS customizado para grid pontilhado fino e círculo
20
+ const baseCropStyles = `
21
+ .custom-crop-area .ReactCrop__crop-selection {
22
+ border: 2px solid white !important;
23
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.5) !important;
24
+ }
25
+
26
+ /* Grid de 9 quadrados - linhas pontilhadas finas */
27
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid {
28
+ position: absolute;
29
+ inset: 0;
30
+ pointer-events: none;
31
+ }
32
+
33
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line {
34
+ position: absolute;
35
+ background: repeating-linear-gradient(
36
+ to right,
37
+ rgba(255, 255, 255, 0.5) 0,
38
+ rgba(255, 255, 255, 0.5) 4px,
39
+ transparent 4px,
40
+ transparent 8px
41
+ );
42
+ }
43
+
44
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.horizontal {
45
+ left: 0;
46
+ right: 0;
47
+ height: 1px;
48
+ }
49
+
50
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.vertical {
51
+ top: 0;
52
+ bottom: 0;
53
+ width: 1px;
54
+ background: repeating-linear-gradient(
55
+ to bottom,
56
+ rgba(255, 255, 255, 0.5) 0,
57
+ rgba(255, 255, 255, 0.5) 4px,
58
+ transparent 4px,
59
+ transparent 8px
60
+ );
61
+ }
62
+
63
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.h1 { top: 33.33%; }
64
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.h2 { top: 66.66%; }
65
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.v1 { left: 33.33%; }
66
+ .custom-crop-area .ReactCrop__crop-selection .crop-grid-line.v2 { left: 66.66%; }
67
+
68
+ /* Círculo inscrito */
69
+ .custom-crop-area.with-circle .ReactCrop__crop-selection .crop-circle {
70
+ position: absolute;
71
+ inset: 0;
72
+ border: 1px dashed rgba(255, 255, 255, 0.6);
73
+ border-radius: 50%;
74
+ pointer-events: none;
75
+ }
76
+
77
+ /* Bolinhas centrais nas bordas */
78
+ .custom-crop-area .ReactCrop__crop-selection .crop-handle {
79
+ position: absolute;
80
+ width: 10px;
81
+ height: 10px;
82
+ background: white;
83
+ border-radius: 50%;
84
+ pointer-events: none;
85
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
86
+ }
87
+
88
+ .custom-crop-area .ReactCrop__crop-selection .crop-handle.top {
89
+ top: -5px;
90
+ left: 50%;
91
+ transform: translateX(-50%);
92
+ }
93
+
94
+ .custom-crop-area .ReactCrop__crop-selection .crop-handle.bottom {
95
+ bottom: -5px;
96
+ left: 50%;
97
+ transform: translateX(-50%);
98
+ }
99
+
100
+ .custom-crop-area .ReactCrop__crop-selection .crop-handle.left {
101
+ left: -5px;
102
+ top: 50%;
103
+ transform: translateY(-50%);
104
+ }
105
+
106
+ .custom-crop-area .ReactCrop__crop-selection .crop-handle.right {
107
+ right: -5px;
108
+ top: 50%;
109
+ transform: translateY(-50%);
110
+ }
111
+ `
112
+
113
+ interface ImageCropModalProps {
114
+ open: boolean
115
+ onOpenChange: (open: boolean) => void
116
+ imageSrc: string
117
+ aspectRatio: number
118
+ onConfirm: (image: HTMLImageElement, crop: Crop) => void
119
+ onCancel?: () => void
120
+ onImageLoad?: (naturalWidth: number, naturalHeight: number) => void
121
+ showCircleGuide?: boolean
122
+ minWidth?: number
123
+ minHeight?: number
124
+ }
125
+
126
+ export function ImageCropModal({
127
+ open,
128
+ onOpenChange,
129
+ imageSrc,
130
+ aspectRatio,
131
+ onConfirm,
132
+ onCancel,
133
+ onImageLoad: onImageLoadCallback,
134
+ showCircleGuide,
135
+ minWidth,
136
+ minHeight,
137
+ }: ImageCropModalProps) {
138
+ const imgRef = useRef<HTMLImageElement>(null)
139
+ const [crop, setCrop] = useState<Crop>()
140
+ const [imageSize, setImageSize] = useState({ width: 0, height: 0 })
141
+
142
+ const onImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {
143
+ const { naturalWidth, naturalHeight } = e.currentTarget
144
+ setImageSize({ width: naturalWidth, height: naturalHeight })
145
+
146
+ // Notifica o hook para verificar dimensões mínimas
147
+ onImageLoadCallback?.(naturalWidth, naturalHeight)
148
+
149
+ const initialCrop = centerCrop(
150
+ makeAspectCrop(
151
+ { unit: '%', width: 90 },
152
+ aspectRatio,
153
+ naturalWidth,
154
+ naturalHeight
155
+ ),
156
+ naturalWidth,
157
+ naturalHeight
158
+ )
159
+
160
+ setCrop(initialCrop)
161
+ }
162
+
163
+ // Calcula tamanho mínimo em porcentagem baseado nas dimensões mínimas em pixels
164
+ const minCropWidth = minWidth && imageSize.width > 0
165
+ ? Math.min((minWidth / imageSize.width) * 100, 100)
166
+ : undefined
167
+ const minCropHeight = minHeight && imageSize.height > 0
168
+ ? Math.min((minHeight / imageSize.height) * 100, 100)
169
+ : undefined
170
+
171
+ const handleConfirm = () => {
172
+ if (imgRef.current && crop) {
173
+ onConfirm(imgRef.current, crop)
174
+ }
175
+ }
176
+
177
+ const handleCancel = () => {
178
+ onCancel?.()
179
+ onOpenChange(false)
180
+ }
181
+
182
+ // Determina se deve mostrar círculo (aspect ratio 1:1 por padrão)
183
+ const shouldShowCircle = showCircleGuide ?? aspectRatio === 1
184
+
185
+ // Renderiza grid, círculo e bolinhas dentro da área de crop
186
+ const renderSelectionAddon = () => (
187
+ <>
188
+ {/* Grid de 9 quadrados com linhas pontilhadas */}
189
+ <div className="crop-grid">
190
+ <div className="crop-grid-line horizontal h1" />
191
+ <div className="crop-grid-line horizontal h2" />
192
+ <div className="crop-grid-line vertical v1" />
193
+ <div className="crop-grid-line vertical v2" />
194
+ </div>
195
+ {/* Círculo inscrito */}
196
+ {shouldShowCircle && <div className="crop-circle" />}
197
+ {/* Bolinhas centrais nas bordas */}
198
+ <div className="crop-handle top" />
199
+ <div className="crop-handle bottom" />
200
+ <div className="crop-handle left" />
201
+ <div className="crop-handle right" />
202
+ </>
203
+ )
204
+
205
+ return (
206
+ <Dialog open={open} onOpenChange={onOpenChange}>
207
+ <style>{baseCropStyles}</style>
208
+ <DialogContent
209
+ className="w-full md:w-[650px]! lg:w-[650px]! max-w-[650px]! max-[650px]:w-[calc(100%-32px)] p-0 gap-0 z-[1003]!"
210
+ overlayClassName="z-[1002]!"
211
+ >
212
+ <DialogHeader className="p-5">
213
+ <DialogTitle className="text-center text-[16px]!">
214
+ Ajustar imagem
215
+ </DialogTitle>
216
+ </DialogHeader>
217
+
218
+ <div className="flex flex-col gap-4 px-5 pb-5">
219
+ <div className="flex justify-center overflow-hidden rounded-lg">
220
+ <ReactCrop
221
+ crop={crop}
222
+ onChange={(c) => setCrop(c)}
223
+ aspect={aspectRatio}
224
+ className={`max-h-[50vh] custom-crop-area ${shouldShowCircle ? 'with-circle' : ''}`}
225
+ keepSelection
226
+ minWidth={minCropWidth}
227
+ minHeight={minCropHeight}
228
+ renderSelectionAddon={renderSelectionAddon}
229
+ >
230
+ <img
231
+ ref={imgRef}
232
+ src={imageSrc}
233
+ alt="Crop"
234
+ onLoad={onImageLoad}
235
+ className="max-h-[50vh] object-contain"
236
+ />
237
+ </ReactCrop>
238
+ </div>
239
+
240
+ <p className="paragraph-small-regular text-zinc-500 text-center">
241
+ Arraste para ajustar a área de corte
242
+ </p>
243
+ </div>
244
+
245
+ <DialogFooter className="flex-row! items-center justify-start! gap-3 p-5 border-t border-zinc-200">
246
+ <Button onClick={handleConfirm}>Confirmar</Button>
247
+ <Button variant="secondary" onClick={handleCancel}>
248
+ Cancelar
249
+ </Button>
250
+ </DialogFooter>
251
+ </DialogContent>
252
+ </Dialog>
253
+ )
254
+ }
@@ -1,61 +1,61 @@
1
- 'use client'
2
-
3
- import {
4
- Dialog,
5
- DialogContent,
6
- DialogFooter,
7
- DialogHeader,
8
- DialogTitle,
9
- } from '../../ui/overlay/Dialog'
10
- import { Button } from '../../ui/buttons/Button'
11
-
12
- interface ImageTooSmallModalProps {
13
- open: boolean
14
- onOpenChange: (open: boolean) => void
15
- fileName: string
16
- minWidth: number
17
- minHeight: number
18
- onSelectAnother: () => void
19
- onCancel: () => void
20
- }
21
-
22
- export function ImageTooSmallModal({
23
- open,
24
- onOpenChange,
25
- fileName,
26
- minWidth,
27
- minHeight,
28
- onSelectAnother,
29
- onCancel,
30
- }: ImageTooSmallModalProps) {
31
- const dimensionText = `${minWidth}x${minHeight}px`
32
-
33
- return (
34
- <Dialog open={open} onOpenChange={onOpenChange}>
35
- <DialogContent
36
- className="w-full md:w-[480px]! lg:w-[480px]! max-w-[480px]! max-[480px]:w-[calc(100%-32px)] p-0 gap-0 z-[1003]!"
37
- overlayClassName="z-[1002]!"
38
- >
39
- <DialogHeader className="p-5">
40
- <DialogTitle className="text-center text-[16px]!">
41
- Foto menor que {dimensionText}
42
- </DialogTitle>
43
- </DialogHeader>
44
-
45
- <div className="px-5 pb-5">
46
- <p className="paragraph-small-regular text-zinc-600 text-center">
47
- O arquivo "{fileName}" é menor que {dimensionText}. Faça envio de
48
- uma imagem com pelo menos {dimensionText} para continuar.
49
- </p>
50
- </div>
51
-
52
- <DialogFooter className="flex-row! items-center justify-start! gap-3 p-5 border-t border-zinc-200">
53
- <Button onClick={onSelectAnother}>Enviar outra</Button>
54
- <Button variant="secondary" onClick={onCancel}>
55
- Cancelar
56
- </Button>
57
- </DialogFooter>
58
- </DialogContent>
59
- </Dialog>
60
- )
61
- }
1
+ 'use client'
2
+
3
+ import {
4
+ Dialog,
5
+ DialogContent,
6
+ DialogFooter,
7
+ DialogHeader,
8
+ DialogTitle,
9
+ } from '../../ui/overlay/Dialog'
10
+ import { Button } from '../../ui/buttons/Button'
11
+
12
+ interface ImageTooSmallModalProps {
13
+ open: boolean
14
+ onOpenChange: (open: boolean) => void
15
+ fileName: string
16
+ minWidth: number
17
+ minHeight: number
18
+ onSelectAnother: () => void
19
+ onCancel: () => void
20
+ }
21
+
22
+ export function ImageTooSmallModal({
23
+ open,
24
+ onOpenChange,
25
+ fileName,
26
+ minWidth,
27
+ minHeight,
28
+ onSelectAnother,
29
+ onCancel,
30
+ }: ImageTooSmallModalProps) {
31
+ const dimensionText = `${minWidth}x${minHeight}px`
32
+
33
+ return (
34
+ <Dialog open={open} onOpenChange={onOpenChange}>
35
+ <DialogContent
36
+ className="w-full md:w-[480px]! lg:w-[480px]! max-w-[480px]! max-[480px]:w-[calc(100%-32px)] p-0 gap-0 z-[1003]!"
37
+ overlayClassName="z-[1002]!"
38
+ >
39
+ <DialogHeader className="p-5">
40
+ <DialogTitle className="text-center text-[16px]!">
41
+ Foto menor que {dimensionText}
42
+ </DialogTitle>
43
+ </DialogHeader>
44
+
45
+ <div className="px-5 pb-5">
46
+ <p className="paragraph-small-regular text-zinc-600 text-center">
47
+ O arquivo "{fileName}" é menor que {dimensionText}. Faça envio de
48
+ uma imagem com pelo menos {dimensionText} para continuar.
49
+ </p>
50
+ </div>
51
+
52
+ <DialogFooter className="flex-row! items-center justify-start! gap-3 p-5 border-t border-zinc-200">
53
+ <Button onClick={onSelectAnother}>Enviar outra</Button>
54
+ <Button variant="secondary" onClick={onCancel}>
55
+ Cancelar
56
+ </Button>
57
+ </DialogFooter>
58
+ </DialogContent>
59
+ </Dialog>
60
+ )
61
+ }