@greatapps/common 1.1.430 → 1.1.432

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 (316) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  11. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  14. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  15. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  16. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  17. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  18. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  19. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  20. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  21. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  22. package/dist/components/layouts/NavBar.mjs.map +1 -1
  23. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  24. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  25. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  26. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  27. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  28. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  29. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  30. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  31. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  32. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  33. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  34. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  35. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  36. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  37. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  38. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  39. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  40. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  41. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  42. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  43. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  44. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  45. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  46. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  47. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  49. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  50. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  53. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  54. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  55. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  56. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  57. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  58. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  59. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  60. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  61. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  62. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  63. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  64. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  65. package/dist/components/ui/form/FormField.mjs.map +1 -1
  66. package/dist/components/ui/form/Input.mjs.map +1 -1
  67. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  68. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  69. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  70. package/dist/components/ui/form/Select.mjs +1 -1
  71. package/dist/components/ui/form/Select.mjs.map +1 -1
  72. package/dist/components/ui/form/Switch.mjs.map +1 -1
  73. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  74. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  75. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  76. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  77. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  78. package/dist/components/ui/overlay/Tooltip.mjs +1 -1
  79. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  80. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  81. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  82. package/dist/index.mjs.map +1 -1
  83. package/dist/infra/utils/date.mjs.map +1 -1
  84. package/dist/middleware.mjs.map +1 -1
  85. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  86. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  87. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  88. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  89. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  90. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  91. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  92. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  93. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  94. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  95. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  96. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  97. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  98. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  99. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  100. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  101. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  102. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  103. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  104. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  105. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  106. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  107. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  108. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  109. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  110. package/dist/modules/cards/types.mjs.map +1 -1
  111. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  112. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  113. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  114. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  115. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  116. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  117. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  118. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  119. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  120. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  121. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  122. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  123. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  124. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  125. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  126. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  127. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  128. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  129. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  130. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  131. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  132. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  133. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  134. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  135. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  136. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  137. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  138. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  139. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  140. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  141. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  142. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  143. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  144. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  145. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  146. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  147. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  148. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  149. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  150. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  151. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  152. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  153. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  154. package/dist/utils/constants/br-states.mjs.map +1 -1
  155. package/dist/utils/countries.mjs.map +1 -1
  156. package/dist/utils/safeServerAction.mjs.map +1 -1
  157. package/dist/utils/withAction.mjs.map +1 -1
  158. package/package.json +89 -89
  159. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  160. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  161. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  162. package/src/components/account/DeleteAccountModal.tsx +130 -130
  163. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  164. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  165. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  166. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  167. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  168. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  169. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  170. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  171. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  172. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  173. package/src/components/account/sections/SecuritySection.tsx +46 -46
  174. package/src/components/embeds/CrispEmbed.tsx +101 -101
  175. package/src/components/embeds/FrillEmbed.tsx +119 -119
  176. package/src/components/layouts/AppMobileNavBar.tsx +76 -76
  177. package/src/components/layouts/AppNavBar.tsx +46 -46
  178. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  179. package/src/components/layouts/NavBar.tsx +172 -172
  180. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  181. package/src/components/layouts/ProfilePopover.tsx +174 -174
  182. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  183. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  184. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  185. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  186. package/src/components/modals/PaidPlanRequiredModal.tsx +57 -57
  187. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  188. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  189. package/src/components/navigation/CancelledSubscriptionBanner.tsx +64 -64
  190. package/src/components/navigation/NavItemsContext.ts +20 -20
  191. package/src/components/navigation/ProjectSelectorPopover.tsx +177 -177
  192. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  193. package/src/components/navigation/subcomponents/BottomLinks.tsx +37 -37
  194. package/src/components/navigation/subcomponents/ProjectSelector.tsx +169 -169
  195. package/src/components/pages/NotFoundPage.tsx +67 -67
  196. package/src/components/pages/notifications/Notifications.tsx +170 -170
  197. package/src/components/ui/buttons/Button.tsx +57 -57
  198. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  199. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  200. package/src/components/ui/data-display/Accordion.tsx +81 -81
  201. package/src/components/ui/data-display/Badge.tsx +47 -47
  202. package/src/components/ui/data-display/Card.tsx +93 -93
  203. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  204. package/src/components/ui/data-display/CardItem.tsx +75 -75
  205. package/src/components/ui/data-display/Pagination.tsx +126 -126
  206. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  207. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  208. package/src/components/ui/data-display/Separator.tsx +29 -29
  209. package/src/components/ui/data-display/Table.tsx +117 -117
  210. package/src/components/ui/data-display/Tabs.tsx +67 -67
  211. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  212. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  213. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  214. package/src/components/ui/feedback/Progress.tsx +40 -40
  215. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  216. package/src/components/ui/feedback/Toast.tsx +101 -101
  217. package/src/components/ui/form/Calendar.tsx +228 -228
  218. package/src/components/ui/form/Checkbox.tsx +31 -31
  219. package/src/components/ui/form/ComboboxField.tsx +154 -154
  220. package/src/components/ui/form/DatePicker.tsx +97 -97
  221. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  222. package/src/components/ui/form/FormField.tsx +131 -131
  223. package/src/components/ui/form/Input.tsx +20 -20
  224. package/src/components/ui/form/InputOtp.tsx +80 -80
  225. package/src/components/ui/form/PhoneInput.tsx +208 -208
  226. package/src/components/ui/form/RadioGroup.tsx +45 -45
  227. package/src/components/ui/form/Select.tsx +200 -200
  228. package/src/components/ui/form/Switch.tsx +32 -32
  229. package/src/components/ui/form/Textarea.tsx +19 -19
  230. package/src/components/ui/overlay/Command.tsx +185 -185
  231. package/src/components/ui/overlay/Dialog.tsx +151 -151
  232. package/src/components/ui/overlay/Popover.tsx +49 -49
  233. package/src/components/ui/overlay/Sheet.tsx +166 -166
  234. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  235. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  236. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  237. package/src/index.ts +393 -393
  238. package/src/infra/utils/date.ts +7 -7
  239. package/src/middleware.ts +4 -4
  240. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  241. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  242. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  243. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  244. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  245. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  246. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  247. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  248. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  249. package/src/modules/accounts/services/account.service.ts +239 -239
  250. package/src/modules/accounts/types.ts +225 -225
  251. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  252. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  253. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  254. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  255. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  256. package/src/modules/auth/types/management-permission.type.ts +7 -7
  257. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  258. package/src/modules/auth/utils/assert-management-subscription.ts +35 -35
  259. package/src/modules/auth/utils/assert-paid-subscription.ts +43 -43
  260. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  261. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  262. package/src/modules/cards/actions/create-card.action.ts +9 -9
  263. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  264. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  265. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  266. package/src/modules/cards/services/cards.service.ts +51 -51
  267. package/src/modules/cards/types.ts +32 -32
  268. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  269. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  270. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  271. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  272. package/src/modules/plans/services/plans.service.ts +36 -36
  273. package/src/modules/plans/types/plan.type.ts +21 -21
  274. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  275. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  276. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  277. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  278. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  279. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  280. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  281. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  282. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  283. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  284. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  285. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  286. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  287. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  288. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  289. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +15 -15
  290. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  291. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  292. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  293. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  294. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  295. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  296. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  297. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  298. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  299. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  300. package/src/modules/users/action/list-messages.action.ts +12 -12
  301. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  302. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  303. package/src/modules/users/hooks/messages.hook.ts +60 -60
  304. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  305. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  306. package/src/modules/whitelabel/schema.ts +84 -84
  307. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  308. package/src/providers/whitelabel.provider.tsx +54 -54
  309. package/src/store/useBuyCreditsModal.ts +21 -21
  310. package/src/store/useDesktopSidebarStore.ts +47 -47
  311. package/src/store/useMdSidebarStore.ts +34 -34
  312. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  313. package/src/utils/constants/br-states.ts +29 -29
  314. package/src/utils/countries.ts +224 -224
  315. package/src/utils/safeServerAction.ts +21 -21
  316. package/src/utils/withAction.ts +13 -13
@@ -1,74 +1,74 @@
1
- 'use client';
2
-
3
- import { ReactNode, useRef, useEffect } from 'react';
4
- import Link from 'next/link';
5
- import { AppNavigationContext } from '../AppNavigationContext';
6
- import { useNavItemsContext } from '../NavItemsContext';
7
-
8
- function InternalTabsBar({ topOffset = '72px' }: { topOffset?: string }) {
9
- const { navItems } = useNavItemsContext();
10
- const tabsListRef = useRef<HTMLDivElement>(null);
11
- const activeTabRef = useRef<HTMLAnchorElement>(null);
12
-
13
- const activeLabel = navItems.find((i) => i.isActive)?.label;
14
-
15
- // Scroll active tab into center when active item changes
16
- useEffect(() => {
17
- if (activeTabRef.current && tabsListRef.current) {
18
- const tabsList = tabsListRef.current;
19
- const activeTabElement = activeTabRef.current;
20
- const tabsListRect = tabsList.getBoundingClientRect();
21
- const activeTabRect = activeTabElement.getBoundingClientRect();
22
- const scrollLeft =
23
- activeTabElement.offsetLeft - tabsListRect.width / 2 + activeTabRect.width / 2;
24
- tabsList.scrollTo({ left: Math.max(0, scrollLeft), behavior: 'smooth' });
25
- }
26
- }, [activeLabel]);
27
-
28
- if (!navItems.length) return null;
29
-
30
- return (
31
- <div
32
- ref={tabsListRef}
33
- className="md:hidden fixed left-0 right-0 z-40 bg-white border-b border-gray-200 flex overflow-x-auto scrollbar-hide"
34
- style={{ top: topOffset }}
35
- >
36
- {navItems.map((item) => (
37
- <Link
38
- key={item.label}
39
- ref={item.isActive ? activeTabRef : undefined}
40
- href={item.href}
41
- prefetch
42
- className={`flex items-center gap-2 px-4 py-3 shrink-0 border-b-2 transition-colors ${
43
- item.isActive
44
- ? 'border-gray-950 text-gray-950'
45
- : 'border-transparent text-gray-500 hover:text-gray-900'
46
- }`}
47
- >
48
- {item.icon && <item.icon size={16} className="shrink-0" />}
49
- <span
50
- className={
51
- item.isActive ? 'paragraph-small-semibold' : 'paragraph-small-medium'
52
- }
53
- >
54
- {item.label}
55
- </span>
56
- </Link>
57
- ))}
58
- </div>
59
- );
60
- }
61
-
62
- export function TabsMobileShell({ children, topOffset }: { children: ReactNode; topOffset?: string }) {
63
- return (
64
- <AppNavigationContext.Provider value={{ breakpoint: 'mobile' }}>
65
- {/*
66
- Children are hidden visually, but NavItems' useEffect still fires inside
67
- display:none — React effects are tied to commit phase, not layout visibility.
68
- This registers navItems in NavItemsContext so InternalTabsBar can read them.
69
- */}
70
- <div className="hidden">{children}</div>
71
- <InternalTabsBar topOffset={topOffset} />
72
- </AppNavigationContext.Provider>
73
- );
74
- }
1
+ 'use client';
2
+
3
+ import { ReactNode, useRef, useEffect } from 'react';
4
+ import Link from 'next/link';
5
+ import { AppNavigationContext } from '../AppNavigationContext';
6
+ import { useNavItemsContext } from '../NavItemsContext';
7
+
8
+ function InternalTabsBar({ topOffset = '72px' }: { topOffset?: string }) {
9
+ const { navItems } = useNavItemsContext();
10
+ const tabsListRef = useRef<HTMLDivElement>(null);
11
+ const activeTabRef = useRef<HTMLAnchorElement>(null);
12
+
13
+ const activeLabel = navItems.find((i) => i.isActive)?.label;
14
+
15
+ // Scroll active tab into center when active item changes
16
+ useEffect(() => {
17
+ if (activeTabRef.current && tabsListRef.current) {
18
+ const tabsList = tabsListRef.current;
19
+ const activeTabElement = activeTabRef.current;
20
+ const tabsListRect = tabsList.getBoundingClientRect();
21
+ const activeTabRect = activeTabElement.getBoundingClientRect();
22
+ const scrollLeft =
23
+ activeTabElement.offsetLeft - tabsListRect.width / 2 + activeTabRect.width / 2;
24
+ tabsList.scrollTo({ left: Math.max(0, scrollLeft), behavior: 'smooth' });
25
+ }
26
+ }, [activeLabel]);
27
+
28
+ if (!navItems.length) return null;
29
+
30
+ return (
31
+ <div
32
+ ref={tabsListRef}
33
+ className="md:hidden fixed left-0 right-0 z-40 bg-white border-b border-gray-200 flex overflow-x-auto scrollbar-hide"
34
+ style={{ top: topOffset }}
35
+ >
36
+ {navItems.map((item) => (
37
+ <Link
38
+ key={item.label}
39
+ ref={item.isActive ? activeTabRef : undefined}
40
+ href={item.href}
41
+ prefetch
42
+ className={`flex items-center gap-2 px-4 py-3 shrink-0 border-b-2 transition-colors ${
43
+ item.isActive
44
+ ? 'border-gray-950 text-gray-950'
45
+ : 'border-transparent text-gray-500 hover:text-gray-900'
46
+ }`}
47
+ >
48
+ {item.icon && <item.icon size={16} className="shrink-0" />}
49
+ <span
50
+ className={
51
+ item.isActive ? 'paragraph-small-semibold' : 'paragraph-small-medium'
52
+ }
53
+ >
54
+ {item.label}
55
+ </span>
56
+ </Link>
57
+ ))}
58
+ </div>
59
+ );
60
+ }
61
+
62
+ export function TabsMobileShell({ children, topOffset }: { children: ReactNode; topOffset?: string }) {
63
+ return (
64
+ <AppNavigationContext.Provider value={{ breakpoint: 'mobile' }}>
65
+ {/*
66
+ Children are hidden visually, but NavItems' useEffect still fires inside
67
+ display:none — React effects are tied to commit phase, not layout visibility.
68
+ This registers navItems in NavItemsContext so InternalTabsBar can read them.
69
+ */}
70
+ <div className="hidden">{children}</div>
71
+ <InternalTabsBar topOffset={topOffset} />
72
+ </AppNavigationContext.Provider>
73
+ );
74
+ }
@@ -1,37 +1,37 @@
1
- 'use client';
2
-
3
- import { IconHelp, IconBulb } from '@tabler/icons-react';
4
-
5
- const LINKS = [
6
- {
7
- label: 'Ajuda',
8
- icon: IconHelp,
9
- href: 'https://ajuda.greatsoftwares.com.br/pt-br/',
10
- },
11
- {
12
- label: 'Sugestões',
13
- icon: IconBulb,
14
- href: 'https://ideias.greatpages.com.br/b/y0geg1ve/feature-ideas',
15
- },
16
- ] as const;
17
-
18
- export function BottomLinks() {
19
- return (
20
- <div className="flex flex-col">
21
- {LINKS.map((link) => (
22
- <a
23
- key={link.label}
24
- href={link.href}
25
- target="_blank"
26
- rel="noopener noreferrer"
27
- className="rounded-md flex items-center gap-2 p-3 cursor-pointer transition-colors no-underline bg-white hover:bg-gray-100 active:bg-gray-50"
28
- >
29
- <link.icon size={20} className="text-gray-400" />
30
- <span className="paragraph-small-medium text-gray-500">
31
- {link.label}
32
- </span>
33
- </a>
34
- ))}
35
- </div>
36
- );
37
- }
1
+ 'use client';
2
+
3
+ import { IconHelp, IconBulb } from '@tabler/icons-react';
4
+
5
+ const LINKS = [
6
+ {
7
+ label: 'Ajuda',
8
+ icon: IconHelp,
9
+ href: 'https://ajuda.greatsoftwares.com.br/pt-br/',
10
+ },
11
+ {
12
+ label: 'Sugestões',
13
+ icon: IconBulb,
14
+ href: 'https://ideias.greatpages.com.br/b/y0geg1ve/feature-ideas',
15
+ },
16
+ ] as const;
17
+
18
+ export function BottomLinks() {
19
+ return (
20
+ <div className="flex flex-col">
21
+ {LINKS.map((link) => (
22
+ <a
23
+ key={link.label}
24
+ href={link.href}
25
+ target="_blank"
26
+ rel="noopener noreferrer"
27
+ className="rounded-md flex items-center gap-2 p-3 cursor-pointer transition-colors no-underline bg-white hover:bg-gray-100 active:bg-gray-50"
28
+ >
29
+ <link.icon size={20} className="text-gray-400" />
30
+ <span className="paragraph-small-medium text-gray-500">
31
+ {link.label}
32
+ </span>
33
+ </a>
34
+ ))}
35
+ </div>
36
+ );
37
+ }
@@ -1,169 +1,169 @@
1
- 'use client';
2
-
3
- import { useState, useRef, useEffect, RefObject } from 'react';
4
- import { useMobileNavbarSheet } from '../../../store/useMobileNavbarSheet';
5
- import { useAppNavigationContext } from '../AppNavigationContext';
6
- import { ProjectSelectorPopover } from '../ProjectSelectorPopover';
7
- import { Command, CommandEmpty, CommandInput, CommandItem, CommandList, UserAvatar } from '../../../index';
8
- import { IconChevronDown } from '@tabler/icons-react';
9
- import type { NavigationProject } from '../types';
10
-
11
- export interface ProjectSelectorProps {
12
- projects: NavigationProject[];
13
- selectedProject: NavigationProject | null;
14
- isLoading?: boolean;
15
- isFetchingNextPage?: boolean;
16
- hasNextPage?: boolean;
17
- onLoadMore?: () => void | Promise<unknown>;
18
- onSelectProject: (project: NavigationProject) => void;
19
- onAddProject?: () => void;
20
- onManageProjects?: () => void;
21
- }
22
-
23
- function ProjectItemSkeleton() {
24
- return (
25
- <div className="flex items-center gap-2 p-[8.8px]">
26
- <div className="skeleton size-9 rounded-lg shrink-0" />
27
- <div className="skeleton h-4 w-36 rounded" />
28
- </div>
29
- );
30
- }
31
-
32
- export function ProjectSelector({
33
- projects,
34
- selectedProject,
35
- isLoading,
36
- isFetchingNextPage,
37
- hasNextPage,
38
- onLoadMore,
39
- onSelectProject,
40
- onAddProject,
41
- onManageProjects,
42
- }: ProjectSelectorProps) {
43
- const { breakpoint } = useAppNavigationContext();
44
- const [isPopoverOpen, setIsPopoverOpen] = useState(false);
45
- const [activeSection, setActiveSection] = useState<'projects' | null>(null);
46
- const titleRef = useRef<HTMLDivElement>(null);
47
- const { openProjectList, clearProjectList } = useMobileNavbarSheet();
48
-
49
- useEffect(() => {
50
- if (openProjectList && breakpoint === 'mobile') {
51
- setActiveSection('projects');
52
- clearProjectList();
53
- }
54
- }, [openProjectList, breakpoint, clearProjectList]);
55
-
56
- // Desktop and md: title + popover (aligned with NavBar logo + separator)
57
- if (breakpoint === 'desktop' || breakpoint === 'md') {
58
- return (
59
- <div className="mt-[6.5px] mb-[3px]">
60
- <div className="flex items-center h-7">
61
- <ProjectSelectorPopover
62
- open={isPopoverOpen}
63
- setOpen={setIsPopoverOpen}
64
- titleRef={titleRef as unknown as RefObject<HTMLSpanElement | null>}
65
- projects={projects}
66
- selectedProject={selectedProject}
67
- isLoading={isLoading}
68
- isFetchingNextPage={isFetchingNextPage}
69
- hasNextPage={hasNextPage}
70
- onLoadMore={onLoadMore}
71
- onSelectProject={onSelectProject}
72
- onAddProject={onAddProject}
73
- onManageProjects={onManageProjects}
74
- >
75
- <div className="flex items-center gap-2 truncate select-none cursor-pointer" ref={titleRef}>
76
- {isLoading ? (
77
- <div className="skeleton h-4 w-32 rounded" />
78
- ) : (
79
- <span className="paragraph-medium-semibold text-gray-600 truncate max-w-[120px] inline-block">
80
- {selectedProject?.title}
81
- </span>
82
- )}
83
- <IconChevronDown
84
- size={20}
85
- className={`transition-transform duration-200 ${isPopoverOpen ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}
86
- />
87
- </div>
88
- </ProjectSelectorPopover>
89
- </div>
90
- </div>
91
- );
92
- }
93
-
94
- // Mobile: inline collapsible accordion
95
- return (
96
- <div className="flex flex-col gap-2.5">
97
- <div className="flex items-center justify-between">
98
- <div
99
- className="flex items-center gap-1 cursor-pointer"
100
- onClick={() => setActiveSection(activeSection === 'projects' ? null : 'projects')}
101
- >
102
- <span className="paragraph-medium-semibold text-gray-600">{selectedProject?.title}</span>
103
- <IconChevronDown
104
- size={20}
105
- className={`transition-transform duration-200 ${
106
- activeSection === 'projects' ? 'rotate-180 text-gray-950' : 'text-gray-400'
107
- }`}
108
- />
109
- </div>
110
- </div>
111
- {activeSection === 'projects' && (
112
- <div className="flex flex-col p-3 gap-2 border border-gray-200 rounded-lg animate-in fade-in duration-400">
113
- <div className="flex items-center justify-between">
114
- <span className="paragraph-small-semibold">Projetos</span>
115
- </div>
116
- <Command className="gap-2">
117
- <CommandInput placeholder="Busque aqui" />
118
- <CommandList
119
- className="custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]"
120
- onScroll={(event) => {
121
- if (!hasNextPage || isFetchingNextPage || !onLoadMore) return;
122
-
123
- const target = event.currentTarget;
124
- const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;
125
-
126
- if (distanceToBottom <= 80) {
127
- onLoadMore();
128
- }
129
- }}
130
- >
131
- <CommandEmpty>Nenhum resultado encontrado.</CommandEmpty>
132
- {isLoading ? (
133
- <>
134
- <ProjectItemSkeleton />
135
- <ProjectItemSkeleton />
136
- <ProjectItemSkeleton />
137
- <ProjectItemSkeleton />
138
- </>
139
- ) : (
140
- projects.map((project) => (
141
- <CommandItem
142
- key={project.id}
143
- value={`${project.title}-${project.id}`}
144
- keywords={[project.title]}
145
- className={selectedProject?.id === project.id ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}
146
- onSelect={() => { onSelectProject(project); setActiveSection(null); }}
147
- >
148
- <UserAvatar
149
- photo={project.photo}
150
- name={project.title}
151
- size={36}
152
- />
153
- {project.title}
154
- </CommandItem>
155
- ))
156
- )}
157
- {isFetchingNextPage && (
158
- <>
159
- <ProjectItemSkeleton />
160
- <ProjectItemSkeleton />
161
- </>
162
- )}
163
- </CommandList>
164
- </Command>
165
- </div>
166
- )}
167
- </div>
168
- );
169
- }
1
+ 'use client';
2
+
3
+ import { useState, useRef, useEffect, RefObject } from 'react';
4
+ import { useMobileNavbarSheet } from '../../../store/useMobileNavbarSheet';
5
+ import { useAppNavigationContext } from '../AppNavigationContext';
6
+ import { ProjectSelectorPopover } from '../ProjectSelectorPopover';
7
+ import { Command, CommandEmpty, CommandInput, CommandItem, CommandList, UserAvatar } from '../../../index';
8
+ import { IconChevronDown } from '@tabler/icons-react';
9
+ import type { NavigationProject } from '../types';
10
+
11
+ export interface ProjectSelectorProps {
12
+ projects: NavigationProject[];
13
+ selectedProject: NavigationProject | null;
14
+ isLoading?: boolean;
15
+ isFetchingNextPage?: boolean;
16
+ hasNextPage?: boolean;
17
+ onLoadMore?: () => void | Promise<unknown>;
18
+ onSelectProject: (project: NavigationProject) => void;
19
+ onAddProject?: () => void;
20
+ onManageProjects?: () => void;
21
+ }
22
+
23
+ function ProjectItemSkeleton() {
24
+ return (
25
+ <div className="flex items-center gap-2 p-[8.8px]">
26
+ <div className="skeleton size-9 rounded-lg shrink-0" />
27
+ <div className="skeleton h-4 w-36 rounded" />
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export function ProjectSelector({
33
+ projects,
34
+ selectedProject,
35
+ isLoading,
36
+ isFetchingNextPage,
37
+ hasNextPage,
38
+ onLoadMore,
39
+ onSelectProject,
40
+ onAddProject,
41
+ onManageProjects,
42
+ }: ProjectSelectorProps) {
43
+ const { breakpoint } = useAppNavigationContext();
44
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
45
+ const [activeSection, setActiveSection] = useState<'projects' | null>(null);
46
+ const titleRef = useRef<HTMLDivElement>(null);
47
+ const { openProjectList, clearProjectList } = useMobileNavbarSheet();
48
+
49
+ useEffect(() => {
50
+ if (openProjectList && breakpoint === 'mobile') {
51
+ setActiveSection('projects');
52
+ clearProjectList();
53
+ }
54
+ }, [openProjectList, breakpoint, clearProjectList]);
55
+
56
+ // Desktop and md: title + popover (aligned with NavBar logo + separator)
57
+ if (breakpoint === 'desktop' || breakpoint === 'md') {
58
+ return (
59
+ <div className="mt-[6.5px] mb-[3px]">
60
+ <div className="flex items-center h-7">
61
+ <ProjectSelectorPopover
62
+ open={isPopoverOpen}
63
+ setOpen={setIsPopoverOpen}
64
+ titleRef={titleRef as unknown as RefObject<HTMLSpanElement | null>}
65
+ projects={projects}
66
+ selectedProject={selectedProject}
67
+ isLoading={isLoading}
68
+ isFetchingNextPage={isFetchingNextPage}
69
+ hasNextPage={hasNextPage}
70
+ onLoadMore={onLoadMore}
71
+ onSelectProject={onSelectProject}
72
+ onAddProject={onAddProject}
73
+ onManageProjects={onManageProjects}
74
+ >
75
+ <div className="flex items-center gap-2 truncate select-none cursor-pointer" ref={titleRef}>
76
+ {isLoading ? (
77
+ <div className="skeleton h-4 w-32 rounded" />
78
+ ) : (
79
+ <span className="paragraph-medium-semibold text-gray-600 truncate max-w-[120px] inline-block">
80
+ {selectedProject?.title}
81
+ </span>
82
+ )}
83
+ <IconChevronDown
84
+ size={20}
85
+ className={`transition-transform duration-200 ${isPopoverOpen ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}
86
+ />
87
+ </div>
88
+ </ProjectSelectorPopover>
89
+ </div>
90
+ </div>
91
+ );
92
+ }
93
+
94
+ // Mobile: inline collapsible accordion
95
+ return (
96
+ <div className="flex flex-col gap-2.5">
97
+ <div className="flex items-center justify-between">
98
+ <div
99
+ className="flex items-center gap-1 cursor-pointer"
100
+ onClick={() => setActiveSection(activeSection === 'projects' ? null : 'projects')}
101
+ >
102
+ <span className="paragraph-medium-semibold text-gray-600">{selectedProject?.title}</span>
103
+ <IconChevronDown
104
+ size={20}
105
+ className={`transition-transform duration-200 ${
106
+ activeSection === 'projects' ? 'rotate-180 text-gray-950' : 'text-gray-400'
107
+ }`}
108
+ />
109
+ </div>
110
+ </div>
111
+ {activeSection === 'projects' && (
112
+ <div className="flex flex-col p-3 gap-2 border border-gray-200 rounded-lg animate-in fade-in duration-400">
113
+ <div className="flex items-center justify-between">
114
+ <span className="paragraph-small-semibold">Projetos</span>
115
+ </div>
116
+ <Command className="gap-2">
117
+ <CommandInput placeholder="Busque aqui" />
118
+ <CommandList
119
+ className="custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]"
120
+ onScroll={(event) => {
121
+ if (!hasNextPage || isFetchingNextPage || !onLoadMore) return;
122
+
123
+ const target = event.currentTarget;
124
+ const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;
125
+
126
+ if (distanceToBottom <= 80) {
127
+ onLoadMore();
128
+ }
129
+ }}
130
+ >
131
+ <CommandEmpty>Nenhum resultado encontrado.</CommandEmpty>
132
+ {isLoading ? (
133
+ <>
134
+ <ProjectItemSkeleton />
135
+ <ProjectItemSkeleton />
136
+ <ProjectItemSkeleton />
137
+ <ProjectItemSkeleton />
138
+ </>
139
+ ) : (
140
+ projects.map((project) => (
141
+ <CommandItem
142
+ key={project.id}
143
+ value={`${project.title}-${project.id}`}
144
+ keywords={[project.title]}
145
+ className={selectedProject?.id === project.id ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}
146
+ onSelect={() => { onSelectProject(project); setActiveSection(null); }}
147
+ >
148
+ <UserAvatar
149
+ photo={project.photo}
150
+ name={project.title}
151
+ size={36}
152
+ />
153
+ {project.title}
154
+ </CommandItem>
155
+ ))
156
+ )}
157
+ {isFetchingNextPage && (
158
+ <>
159
+ <ProjectItemSkeleton />
160
+ <ProjectItemSkeleton />
161
+ </>
162
+ )}
163
+ </CommandList>
164
+ </Command>
165
+ </div>
166
+ )}
167
+ </div>
168
+ );
169
+ }