@greatapps/common 1.1.515 → 1.1.517

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