@greatapps/common 1.1.517 → 1.1.518

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 (412) 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.map +1 -1
  18. package/dist/components/embeds/ClarityEmbed.mjs +55 -0
  19. package/dist/components/embeds/ClarityEmbed.mjs.map +1 -0
  20. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  21. package/dist/components/embeds/EmbedWidgets.mjs +3 -1
  22. package/dist/components/embeds/EmbedWidgets.mjs.map +1 -1
  23. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  24. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  25. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  26. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  27. package/dist/components/layouts/NavBar.mjs.map +1 -1
  28. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  29. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  30. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  31. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  32. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  33. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  34. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  37. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  38. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  39. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  40. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  41. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  42. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  43. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  44. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  45. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  46. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  47. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  50. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  51. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  52. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  53. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  54. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  55. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  58. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  59. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  60. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  61. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  62. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  63. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  64. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  65. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  66. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  67. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  68. package/dist/components/ui/form/DatePicker.mjs +2 -2
  69. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  70. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  71. package/dist/components/ui/form/FormField.mjs.map +1 -1
  72. package/dist/components/ui/form/Input.mjs.map +1 -1
  73. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  74. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  75. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  76. package/dist/components/ui/form/Select.mjs +1 -1
  77. package/dist/components/ui/form/Select.mjs.map +1 -1
  78. package/dist/components/ui/form/Switch.mjs.map +1 -1
  79. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  80. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  82. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  83. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  84. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  85. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  86. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  87. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  88. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  89. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  90. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  91. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  92. package/dist/index.mjs +2 -0
  93. package/dist/index.mjs.map +1 -1
  94. package/dist/infra/utils/array.mjs.map +1 -1
  95. package/dist/infra/utils/date.mjs.map +1 -1
  96. package/dist/middleware.mjs.map +1 -1
  97. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  98. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  99. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  100. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  101. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  102. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  103. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  104. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  105. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  106. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  107. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  108. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  109. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  110. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  111. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  112. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  113. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  114. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  115. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  116. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  117. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  118. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  119. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  120. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  121. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  122. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  123. package/dist/modules/cards/actions/find-card-by-id.action.mjs.map +1 -1
  124. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  125. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  126. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  127. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  128. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  129. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  130. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  131. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  132. package/dist/modules/cards/types.mjs.map +1 -1
  133. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  134. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  135. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  136. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  137. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  138. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  139. package/dist/modules/images/utils/base64.mjs.map +1 -1
  140. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  141. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  142. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  143. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  144. package/dist/modules/plans/actions/list-plans.action.mjs.map +1 -1
  145. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  146. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  147. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  148. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  149. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  150. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  151. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  152. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  153. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  154. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  155. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  156. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  157. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  158. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  159. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  160. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  161. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  162. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  163. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  164. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  165. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  166. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  167. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  168. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  169. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  170. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  171. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  172. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  173. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  174. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  175. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  176. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  177. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  178. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  179. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  180. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  181. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  182. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  183. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  184. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  185. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  186. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  187. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  188. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  189. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  190. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  191. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  192. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  193. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  194. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  195. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  196. package/dist/providers/auth.provider.mjs.map +1 -1
  197. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  198. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  199. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  200. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  201. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  202. package/dist/utils/constants/br-states.mjs.map +1 -1
  203. package/dist/utils/countries.mjs.map +1 -1
  204. package/dist/utils/format/currency.mjs.map +1 -1
  205. package/dist/utils/safeServerAction.mjs.map +1 -1
  206. package/dist/utils/withAction.mjs.map +1 -1
  207. package/package.json +92 -92
  208. package/src/components/account/ConfigurationsMyAccountModal.tsx +161 -161
  209. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  210. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  211. package/src/components/account/DeleteAccountModal.tsx +130 -130
  212. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  213. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  214. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  215. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  216. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  217. package/src/components/account/sections/ChangeEmailModal.tsx +227 -227
  218. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  219. package/src/components/account/sections/ChangePhoneModal.tsx +247 -247
  220. package/src/components/account/sections/MyProfileSection.tsx +328 -328
  221. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  222. package/src/components/account/sections/SecuritySection.tsx +46 -46
  223. package/src/components/account/sections/TokenSection.tsx +64 -64
  224. package/src/components/embeds/ClarityEmbed.tsx +70 -0
  225. package/src/components/embeds/CrispEmbed.tsx +156 -156
  226. package/src/components/embeds/EmbedWidgets.tsx +52 -50
  227. package/src/components/embeds/FrillEmbed.tsx +129 -129
  228. package/src/components/layouts/AppMobileNavBar.tsx +80 -80
  229. package/src/components/layouts/AppNavBar.tsx +40 -40
  230. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  231. package/src/components/layouts/NavBar.tsx +175 -175
  232. package/src/components/layouts/NotificationsPopover.tsx +118 -118
  233. package/src/components/layouts/ProfilePopover.tsx +176 -176
  234. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  235. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  236. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  237. package/src/components/modals/BuyCreditsModal.tsx +354 -354
  238. package/src/components/modals/PaidPlanRequiredModal.tsx +57 -57
  239. package/src/components/modals/cards/AddCardModal.tsx +265 -265
  240. package/src/components/modals/cards/CardFormFields.tsx +348 -348
  241. package/src/components/navigation/CancelledSubscriptionBanner.tsx +64 -64
  242. package/src/components/navigation/NavItemsContext.ts +20 -20
  243. package/src/components/navigation/ProjectSelectorPopover.tsx +178 -178
  244. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  245. package/src/components/navigation/subcomponents/BottomLinks.tsx +37 -37
  246. package/src/components/navigation/subcomponents/ProjectSelector.tsx +182 -182
  247. package/src/components/pages/NotFoundPage.tsx +67 -67
  248. package/src/components/pages/notifications/Notifications.tsx +187 -187
  249. package/src/components/ui/buttons/Button.tsx +62 -62
  250. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  251. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  252. package/src/components/ui/data-display/Accordion.tsx +81 -81
  253. package/src/components/ui/data-display/Badge.tsx +47 -47
  254. package/src/components/ui/data-display/Card.tsx +93 -93
  255. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  256. package/src/components/ui/data-display/CardItem.tsx +75 -75
  257. package/src/components/ui/data-display/Pagination.tsx +126 -126
  258. package/src/components/ui/data-display/PaymentInfoCard.tsx +192 -192
  259. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  260. package/src/components/ui/data-display/Separator.tsx +29 -29
  261. package/src/components/ui/data-display/Table.tsx +117 -117
  262. package/src/components/ui/data-display/Tabs.tsx +67 -67
  263. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  264. package/src/components/ui/feedback/DefaultCircularProgress.tsx +65 -65
  265. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  266. package/src/components/ui/feedback/Progress.tsx +40 -40
  267. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  268. package/src/components/ui/feedback/Toast.tsx +104 -104
  269. package/src/components/ui/form/Calendar.tsx +228 -228
  270. package/src/components/ui/form/Checkbox.tsx +31 -31
  271. package/src/components/ui/form/ComboboxField.tsx +154 -154
  272. package/src/components/ui/form/DatePicker.tsx +97 -98
  273. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  274. package/src/components/ui/form/FormField.tsx +133 -133
  275. package/src/components/ui/form/Input.tsx +20 -20
  276. package/src/components/ui/form/InputOtp.tsx +80 -80
  277. package/src/components/ui/form/PhoneInput.tsx +208 -208
  278. package/src/components/ui/form/RadioGroup.tsx +45 -45
  279. package/src/components/ui/form/Select.tsx +200 -200
  280. package/src/components/ui/form/Switch.tsx +32 -32
  281. package/src/components/ui/form/Textarea.tsx +19 -19
  282. package/src/components/ui/overlay/Command.tsx +185 -185
  283. package/src/components/ui/overlay/Dialog.tsx +153 -153
  284. package/src/components/ui/overlay/Popover.tsx +49 -49
  285. package/src/components/ui/overlay/Sheet.tsx +170 -170
  286. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  287. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +254 -254
  288. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +61 -61
  289. package/src/components/widgets/ImageUpload/ImageUpload.tsx +126 -126
  290. package/src/components/widgets/ImageUpload/index.ts +3 -3
  291. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  292. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  293. package/src/hooks/useAuthQueryKey.ts +32 -32
  294. package/src/index.ts +507 -506
  295. package/src/infra/utils/array.ts +54 -54
  296. package/src/infra/utils/date.ts +18 -18
  297. package/src/middleware.ts +4 -4
  298. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  299. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  300. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  301. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  302. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  303. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  304. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  305. package/src/modules/accounts/hooks/useAccountManagement.ts +94 -94
  306. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  307. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  308. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  309. package/src/modules/accounts/services/account-token.service.ts +52 -52
  310. package/src/modules/accounts/services/account.service.ts +239 -239
  311. package/src/modules/accounts/types.ts +225 -225
  312. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  313. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  314. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  315. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  316. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  317. package/src/modules/auth/hooks/useUserQuery.ts +75 -75
  318. package/src/modules/auth/types/management-permission.type.ts +7 -7
  319. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  320. package/src/modules/auth/utils/assert-management-subscription.ts +35 -35
  321. package/src/modules/auth/utils/assert-paid-subscription.ts +43 -43
  322. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  323. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  324. package/src/modules/cards/actions/create-card.action.ts +9 -9
  325. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  326. package/src/modules/cards/actions/find-card-by-id.action.ts +8 -8
  327. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  328. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  329. package/src/modules/cards/hooks/card-by-id.hook.ts +21 -21
  330. package/src/modules/cards/hooks/cards.hook.ts +23 -23
  331. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  332. package/src/modules/cards/hooks/delete-card.hook.ts +54 -54
  333. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  334. package/src/modules/cards/services/cards.service.ts +108 -108
  335. package/src/modules/cards/types.ts +42 -42
  336. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  337. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +99 -99
  338. package/src/modules/images/actions/process-image.action.ts +40 -40
  339. package/src/modules/images/constants/image.constants.ts +11 -11
  340. package/src/modules/images/hooks/use-image-upload.hook.ts +172 -172
  341. package/src/modules/images/services/image-processing.service.ts +75 -75
  342. package/src/modules/images/types/image.type.ts +54 -54
  343. package/src/modules/images/utils/base64.ts +26 -26
  344. package/src/modules/images/utils/compress-image.ts +20 -20
  345. package/src/modules/images/utils/crop-image.ts +51 -51
  346. package/src/modules/images/utils/validate-image.ts +71 -71
  347. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  348. package/src/modules/plans/actions/list-plans.action.ts +17 -17
  349. package/src/modules/plans/hooks/list-plans.hook.ts +24 -24
  350. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  351. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +38 -38
  352. package/src/modules/plans/services/plans.service.ts +133 -133
  353. package/src/modules/plans/types/plan.type.ts +67 -67
  354. package/src/modules/plans/utils/map-api-plan-to-ui.ts +98 -98
  355. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  356. package/src/modules/projects/actions/create-project.action.ts +9 -9
  357. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  358. package/src/modules/projects/actions/find-project.action.ts +8 -8
  359. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  360. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  361. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  362. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  363. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  364. package/src/modules/projects/actions/update-project.action.ts +9 -9
  365. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  366. package/src/modules/projects/hooks/create-project.hook.ts +88 -88
  367. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  368. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  369. package/src/modules/projects/hooks/list-all-account-users.hook.ts +39 -39
  370. package/src/modules/projects/hooks/list-available-users.hook.ts +38 -38
  371. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +43 -43
  372. package/src/modules/projects/hooks/list-project-users.hook.ts +38 -38
  373. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  374. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  375. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  376. package/src/modules/projects/services/projects.service.ts +144 -144
  377. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  378. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  379. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  380. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  381. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  382. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +18 -18
  383. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +19 -19
  384. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  385. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  386. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  387. package/src/modules/subscriptions/types/calculate-subscription.type.ts +113 -113
  388. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  389. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  390. package/src/modules/subscriptions/utils/periodicity.ts +62 -62
  391. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  392. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  393. package/src/modules/users/action/list-messages.action.ts +26 -26
  394. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  395. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  396. package/src/modules/users/hooks/messages.hook.ts +67 -67
  397. package/src/modules/users/services/messages.service.ts +49 -49
  398. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  399. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  400. package/src/modules/whitelabel/schema.ts +84 -84
  401. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  402. package/src/providers/auth.provider.tsx +162 -162
  403. package/src/providers/whitelabel.provider.tsx +59 -59
  404. package/src/store/useBuyCreditsModal.ts +21 -21
  405. package/src/store/useDesktopSidebarStore.ts +47 -47
  406. package/src/store/useMdSidebarStore.ts +34 -34
  407. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  408. package/src/utils/constants/br-states.ts +29 -29
  409. package/src/utils/countries.ts +224 -224
  410. package/src/utils/format/currency.ts +15 -15
  411. package/src/utils/safeServerAction.ts +21 -21
  412. 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
+ }