@greatapps/common 1.1.674 → 1.1.675

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 (234) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +6 -8
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs +19 -20
  4. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  5. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs +11 -10
  6. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  7. package/dist/components/account/DeleteAccountModal.mjs +28 -34
  8. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  9. package/dist/components/account/DisableTwoFactorAuthModal.mjs +5 -7
  10. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  11. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs +9 -8
  12. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  13. package/dist/components/account/TwoFactorAuthModal.mjs +23 -22
  14. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  15. package/dist/components/account/constants.mjs +4 -4
  16. package/dist/components/account/constants.mjs.map +1 -1
  17. package/dist/components/account/hooks/useChangeEmailForm.mjs +3 -5
  18. package/dist/components/account/hooks/useChangeEmailForm.mjs.map +1 -1
  19. package/dist/components/account/hooks/useChangePasswordForm.mjs +3 -26
  20. package/dist/components/account/hooks/useChangePasswordForm.mjs.map +1 -1
  21. package/dist/components/account/hooks/useChangePhoneForm.mjs +9 -18
  22. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  23. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs +3 -26
  24. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs.map +1 -1
  25. package/dist/components/account/hooks/useOtpVerification.mjs +3 -19
  26. package/dist/components/account/hooks/useOtpVerification.mjs.map +1 -1
  27. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs +4 -27
  28. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  29. package/dist/components/account/sections/ChangeEmailModal.mjs +28 -25
  30. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  31. package/dist/components/account/sections/ChangePasswordSection.mjs +6 -8
  32. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  33. package/dist/components/account/sections/ChangePhoneModal.mjs +27 -24
  34. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  35. package/dist/components/account/sections/MyProfileSection.mjs +22 -37
  36. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  37. package/dist/components/account/sections/PreferencesSection.mjs +24 -48
  38. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  39. package/dist/components/account/sections/SecuritySection.mjs +9 -11
  40. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  41. package/dist/components/account/sections/TokenSection.mjs +8 -24
  42. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  43. package/dist/components/layouts/AppMobileNavBar.mjs +148 -2
  44. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  45. package/dist/components/layouts/NavBar.mjs +3 -5
  46. package/dist/components/layouts/NavBar.mjs.map +1 -1
  47. package/dist/components/layouts/NotificationsPopover.mjs +3 -5
  48. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  49. package/dist/components/layouts/ProfilePopover.mjs +4 -6
  50. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  51. package/dist/components/layouts/UsersSelectorPopover.mjs +7 -9
  52. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  53. package/dist/components/modals/BuyCreditsModal.mjs +18 -17
  54. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  55. package/dist/components/modals/CreditsDisabledModal.mjs +4 -6
  56. package/dist/components/modals/CreditsDisabledModal.mjs.map +1 -1
  57. package/dist/components/modals/PaidPlanRequiredModal.mjs +3 -5
  58. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  59. package/dist/components/modals/cards/AddCardModal.mjs +24 -27
  60. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  61. package/dist/components/modals/cards/CannotDeleteCardModal.mjs +7 -9
  62. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  63. package/dist/components/modals/cards/CardFormFields.mjs +22 -25
  64. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  65. package/dist/components/modals/cards/DeleteCardModal.mjs +8 -10
  66. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  67. package/dist/components/navigation/CancelledSubscriptionBanner.mjs +2 -4
  68. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  69. package/dist/components/navigation/OverdueInvoiceBanner.mjs +2 -4
  70. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  71. package/dist/components/navigation/PendingCancellationBanner.mjs +6 -4
  72. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  73. package/dist/components/navigation/ProjectSelectorPopover.mjs +6 -8
  74. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  75. package/dist/components/navigation/UpcomingInvoiceBanner.mjs +6 -4
  76. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  77. package/dist/components/navigation/subcomponents/BottomLinks.mjs +3 -5
  78. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  79. package/dist/components/navigation/subcomponents/CreditsCard.mjs +1 -3
  80. package/dist/components/navigation/subcomponents/CreditsCard.mjs.map +1 -1
  81. package/dist/components/navigation/subcomponents/PlanCard.mjs +1 -3
  82. package/dist/components/navigation/subcomponents/PlanCard.mjs.map +1 -1
  83. package/dist/components/navigation/subcomponents/ProjectSelector.mjs +3 -5
  84. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  85. package/dist/components/pages/NotFoundPage.mjs +3 -5
  86. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  87. package/dist/components/pages/notifications/Notifications.mjs +10 -13
  88. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  89. package/dist/components/ui/buttons/CopyButton.mjs +5 -9
  90. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  91. package/dist/components/ui/data-display/CardItem.mjs +5 -7
  92. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  93. package/dist/components/ui/data-display/PaymentInfoCard.mjs +8 -10
  94. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  95. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  96. package/dist/components/ui/feedback/DefaultCircularProgress.mjs +1 -3
  97. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  98. package/dist/components/ui/form/ComboboxField.mjs +6 -11
  99. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  100. package/dist/components/ui/form/DatePicker.mjs +2 -5
  101. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  102. package/dist/components/ui/form/DateRangePicker.mjs +2 -5
  103. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  104. package/dist/components/ui/form/PhoneInput.mjs +3 -5
  105. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  106. package/dist/components/ui/form/SelectField.mjs +3 -6
  107. package/dist/components/ui/form/SelectField.mjs.map +1 -1
  108. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs +18 -11
  109. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  110. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs +15 -6
  111. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  112. package/dist/index.mjs +2 -16
  113. package/dist/index.mjs.map +1 -1
  114. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs +1 -2
  115. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  116. package/dist/modules/images/utils/validate-image.mjs +8 -8
  117. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  118. package/dist/modules/plans/types/plan.type.mjs +0 -3
  119. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  120. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs +34 -56
  121. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  122. package/dist/modules/subscriptions/utils/periodicity.mjs +14 -20
  123. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  124. package/dist/providers/auth.provider.mjs +1 -9
  125. package/dist/providers/auth.provider.mjs.map +1 -1
  126. package/dist/server.mjs +0 -2
  127. package/dist/server.mjs.map +1 -1
  128. package/dist/utils/format/currency.mjs +4 -32
  129. package/dist/utils/format/currency.mjs.map +1 -1
  130. package/dist/utils/intl/locales.mjs +2 -3
  131. package/dist/utils/intl/locales.mjs.map +1 -1
  132. package/package.json +1 -7
  133. package/src/components/account/ConfigurationsMyAccountModal.tsx +6 -10
  134. package/src/components/account/ConfirmDeleteAccountModal.tsx +13 -22
  135. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +10 -12
  136. package/src/components/account/DeleteAccountModal.tsx +24 -34
  137. package/src/components/account/DisableTwoFactorAuthModal.tsx +6 -11
  138. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +6 -8
  139. package/src/components/account/TwoFactorAuthModal.tsx +29 -33
  140. package/src/components/account/constants.ts +5 -8
  141. package/src/components/account/hooks/useChangeEmailForm.tsx +3 -5
  142. package/src/components/account/hooks/useChangePasswordForm.tsx +6 -20
  143. package/src/components/account/hooks/useChangePhoneForm.tsx +10 -16
  144. package/src/components/account/hooks/useDisableTwoFactorAuthForm.tsx +6 -20
  145. package/src/components/account/hooks/useOtpVerification.tsx +4 -16
  146. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +7 -21
  147. package/src/components/account/sections/ChangeEmailModal.tsx +21 -35
  148. package/src/components/account/sections/ChangePasswordSection.tsx +6 -10
  149. package/src/components/account/sections/ChangePhoneModal.tsx +22 -50
  150. package/src/components/account/sections/MyProfileSection.tsx +23 -37
  151. package/src/components/account/sections/PreferencesSection.tsx +25 -52
  152. package/src/components/account/sections/SecuritySection.tsx +10 -19
  153. package/src/components/account/sections/TokenSection.tsx +10 -22
  154. package/src/components/layouts/AppMobileNavBar.tsx +154 -1
  155. package/src/components/layouts/NavBar.tsx +3 -5
  156. package/src/components/layouts/NotificationsPopover.tsx +3 -5
  157. package/src/components/layouts/ProfilePopover.tsx +4 -6
  158. package/src/components/layouts/UsersSelectorPopover.tsx +7 -9
  159. package/src/components/modals/BuyCreditsModal.tsx +16 -18
  160. package/src/components/modals/CreditsDisabledModal.tsx +6 -6
  161. package/src/components/modals/PaidPlanRequiredModal.tsx +3 -5
  162. package/src/components/modals/cards/AddCardModal.tsx +27 -29
  163. package/src/components/modals/cards/CannotDeleteCardModal.tsx +8 -9
  164. package/src/components/modals/cards/CardFormFields.tsx +22 -25
  165. package/src/components/modals/cards/DeleteCardModal.tsx +8 -10
  166. package/src/components/navigation/CancelledSubscriptionBanner.tsx +2 -4
  167. package/src/components/navigation/OverdueInvoiceBanner.tsx +2 -4
  168. package/src/components/navigation/PendingCancellationBanner.tsx +2 -4
  169. package/src/components/navigation/ProjectSelectorPopover.tsx +6 -8
  170. package/src/components/navigation/UpcomingInvoiceBanner.tsx +2 -4
  171. package/src/components/navigation/subcomponents/BottomLinks.tsx +3 -5
  172. package/src/components/navigation/subcomponents/CreditsCard.tsx +1 -3
  173. package/src/components/navigation/subcomponents/PlanCard.tsx +1 -3
  174. package/src/components/navigation/subcomponents/ProjectSelector.tsx +3 -5
  175. package/src/components/pages/NotFoundPage.tsx +3 -5
  176. package/src/components/pages/notifications/Notifications.tsx +10 -13
  177. package/src/components/ui/buttons/CopyButton.tsx +5 -10
  178. package/src/components/ui/data-display/CardItem.tsx +5 -7
  179. package/src/components/ui/data-display/PaymentInfoCard.tsx +8 -10
  180. package/src/components/ui/feedback/CircularProgress.tsx +0 -4
  181. package/src/components/ui/feedback/DefaultCircularProgress.tsx +1 -3
  182. package/src/components/ui/form/ComboboxField.tsx +6 -11
  183. package/src/components/ui/form/DatePicker.tsx +2 -5
  184. package/src/components/ui/form/DateRangePicker.tsx +2 -5
  185. package/src/components/ui/form/PhoneInput.tsx +3 -5
  186. package/src/components/ui/form/SelectField.tsx +3 -6
  187. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +11 -19
  188. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +5 -6
  189. package/src/index.ts +2 -12
  190. package/src/modules/cards/hooks/handle-delete-card.hook.ts +3 -8
  191. package/src/modules/images/utils/validate-image.ts +8 -23
  192. package/src/modules/plans/types/plan.type.ts +0 -3
  193. package/src/modules/plans/utils/map-api-plan-to-ui.ts +46 -103
  194. package/src/modules/subscriptions/utils/periodicity.ts +12 -29
  195. package/src/providers/auth.provider.tsx +1 -13
  196. package/src/server.ts +0 -2
  197. package/src/utils/format/currency.ts +7 -62
  198. package/src/utils/intl/locales.ts +2 -3
  199. package/dist/i18n/config.mjs +0 -13
  200. package/dist/i18n/config.mjs.map +0 -1
  201. package/dist/i18n/country-language.mjs +0 -74
  202. package/dist/i18n/country-language.mjs.map +0 -1
  203. package/dist/i18n/messages/en-us.mjs +0 -492
  204. package/dist/i18n/messages/en-us.mjs.map +0 -1
  205. package/dist/i18n/messages/es-es.mjs +0 -492
  206. package/dist/i18n/messages/es-es.mjs.map +0 -1
  207. package/dist/i18n/messages/index.mjs +0 -16
  208. package/dist/i18n/messages/index.mjs.map +0 -1
  209. package/dist/i18n/messages/pt-br.mjs +0 -505
  210. package/dist/i18n/messages/pt-br.mjs.map +0 -1
  211. package/dist/i18n/normalize.mjs +0 -12
  212. package/dist/i18n/normalize.mjs.map +0 -1
  213. package/dist/i18n/resolve-locale.mjs +0 -42
  214. package/dist/i18n/resolve-locale.mjs.map +0 -1
  215. package/dist/i18n.mjs +0 -14
  216. package/dist/i18n.mjs.map +0 -1
  217. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs +0 -20
  218. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +0 -1
  219. package/dist/utils/intl/cookie-domain.mjs +0 -17
  220. package/dist/utils/intl/cookie-domain.mjs.map +0 -1
  221. package/dist/utils/intl/locale-cookie.mjs +0 -13
  222. package/dist/utils/intl/locale-cookie.mjs.map +0 -1
  223. package/src/i18n/config.ts +0 -17
  224. package/src/i18n/country-language.ts +0 -60
  225. package/src/i18n/messages/en-us.ts +0 -512
  226. package/src/i18n/messages/es-es.ts +0 -513
  227. package/src/i18n/messages/index.ts +0 -24
  228. package/src/i18n/messages/pt-br.ts +0 -536
  229. package/src/i18n/normalize.ts +0 -15
  230. package/src/i18n/resolve-locale.ts +0 -77
  231. package/src/i18n.ts +0 -10
  232. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +0 -32
  233. package/src/utils/intl/cookie-domain.ts +0 -29
  234. package/src/utils/intl/locale-cookie.ts +0 -18
@@ -2,12 +2,10 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useAppNavigationContext } from "../AppNavigationContext";
4
4
  import { Progress } from "../../../index";
5
- import { useTranslations } from "next-intl";
6
5
  import { useBuyCreditsModal } from "../../../store/useBuyCreditsModal";
7
6
  import { useCreditsDisabledModal } from "../../../store/useCreditsDisabledModal";
8
7
  import { useAuth } from "../../../providers/auth.provider";
9
8
  function CreditsCard({ used, total, onClick }) {
10
- const translate = useTranslations();
11
9
  const { breakpoint } = useAppNavigationContext();
12
10
  const { openModal } = useBuyCreditsModal();
13
11
  const { openModal: openDisabledModal } = useCreditsDisabledModal();
@@ -28,7 +26,7 @@ function CreditsCard({ used, total, onClick }) {
28
26
  onClick: handleClick,
29
27
  children: [
30
28
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
31
- /* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-semibold text-white", children: translate("common.navigation.creditsCard.label") }),
29
+ /* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-semibold text-white", children: "Cr\xE9ditos usados" }),
32
30
  /* @__PURE__ */ jsxs("span", { className: "paragraph-xsmall-medium text-white/50", children: [
33
31
  used,
34
32
  " / ",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/navigation/subcomponents/CreditsCard.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useAppNavigationContext } from '../AppNavigationContext';\r\nimport { Progress } from '../../../index';\r\nimport { useTranslations } from 'next-intl';\r\nimport { useBuyCreditsModal } from '../../../store/useBuyCreditsModal';\r\nimport { useCreditsDisabledModal } from '../../../store/useCreditsDisabledModal';\r\nimport { useAuth } from '../../../providers/auth.provider';\r\n\r\nexport interface CreditsCardProps {\r\n used: number;\r\n total: number;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function CreditsCard({ used, total, onClick }: CreditsCardProps) {\r\n const translate = useTranslations();\r\n const { breakpoint } = useAppNavigationContext();\r\n const { openModal } = useBuyCreditsModal();\r\n const { openModal: openDisabledModal } = useCreditsDisabledModal();\r\n const { user } = useAuth();\r\n const canManage = user?.profile === 'owner' || user?.profile === 'admin';\r\n const handleClick = onClick ?? (() => {\r\n if (canManage) {\r\n openModal();\r\n } else {\r\n openDisabledModal();\r\n }\r\n });\r\n\r\n // Only renders in mobile overlay\r\n if (breakpoint !== 'mobile') return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col bg-gray-950 rounded-lg gap-4 w-full px-4 pt-4 pb-[18px] cursor-pointer\"\r\n onClick={handleClick}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <span className=\"paragraph-xsmall-semibold text-white\">{translate('common.navigation.creditsCard.label')}</span>\r\n <span className=\"paragraph-xsmall-medium text-white/50\">{used} / {total}</span>\r\n </div>\r\n <Progress className=\"bg-white/10 h-[6px]\" indicatorColor=\"bg-white\" value={Math.round((used / total) * 100)} />\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAuCQ,cACA,YADA;AArCR,SAAS,+BAA+B;AACxC,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AACnC,SAAS,+BAA+B;AACxC,SAAS,eAAe;AAQjB,SAAS,YAAY,EAAE,MAAM,OAAO,QAAQ,GAAqB;AACtE,QAAM,YAAY,gBAAgB;AAClC,QAAM,EAAE,WAAW,IAAI,wBAAwB;AAC/C,QAAM,EAAE,UAAU,IAAI,mBAAmB;AACzC,QAAM,EAAE,WAAW,kBAAkB,IAAI,wBAAwB;AACjE,QAAM,EAAE,KAAK,IAAI,QAAQ;AACzB,QAAM,YAAY,MAAM,YAAY,WAAW,MAAM,YAAY;AACjE,QAAM,cAAc,YAAY,MAAM;AACpC,QAAI,WAAW;AACb,gBAAU;AAAA,IACZ,OAAO;AACL,wBAAkB;AAAA,IACpB;AAAA,EACF;AAGA,MAAI,eAAe,SAAU,QAAO;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS;AAAA,MAET;AAAA,6BAAC,SAAI,WAAU,qCACb;AAAA,8BAAC,UAAK,WAAU,wCAAwC,oBAAU,qCAAqC,GAAE;AAAA,UACzG,qBAAC,UAAK,WAAU,yCAAyC;AAAA;AAAA,YAAK;AAAA,YAAI;AAAA,aAAM;AAAA,WAC1E;AAAA,QACA,oBAAC,YAAS,WAAU,uBAAsB,gBAAe,YAAW,OAAO,KAAK,MAAO,OAAO,QAAS,GAAG,GAAG;AAAA;AAAA;AAAA,EAC/G;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/navigation/subcomponents/CreditsCard.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useAppNavigationContext } from '../AppNavigationContext';\r\nimport { Progress } from '../../../index';\r\nimport { useBuyCreditsModal } from '../../../store/useBuyCreditsModal';\r\nimport { useCreditsDisabledModal } from '../../../store/useCreditsDisabledModal';\r\nimport { useAuth } from '../../../providers/auth.provider';\r\n\r\nexport interface CreditsCardProps {\r\n used: number;\r\n total: number;\r\n onClick?: () => void;\r\n}\r\n\r\nexport function CreditsCard({ used, total, onClick }: CreditsCardProps) {\r\n const { breakpoint } = useAppNavigationContext();\r\n const { openModal } = useBuyCreditsModal();\r\n const { openModal: openDisabledModal } = useCreditsDisabledModal();\r\n const { user } = useAuth();\r\n const canManage = user?.profile === 'owner' || user?.profile === 'admin';\r\n const handleClick = onClick ?? (() => {\r\n if (canManage) {\r\n openModal();\r\n } else {\r\n openDisabledModal();\r\n }\r\n });\r\n\r\n // Only renders in mobile overlay\r\n if (breakpoint !== 'mobile') return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col bg-gray-950 rounded-lg gap-4 w-full px-4 pt-4 pb-[18px] cursor-pointer\"\r\n onClick={handleClick}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <span className=\"paragraph-xsmall-semibold text-white\">Créditos usados</span>\r\n <span className=\"paragraph-xsmall-medium text-white/50\">{used} / {total}</span>\r\n </div>\r\n <Progress className=\"bg-white/10 h-[6px]\" indicatorColor=\"bg-white\" value={Math.round((used / total) * 100)} />\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAqCQ,cACA,YADA;AAnCR,SAAS,+BAA+B;AACxC,SAAS,gBAAgB;AACzB,SAAS,0BAA0B;AACnC,SAAS,+BAA+B;AACxC,SAAS,eAAe;AAQjB,SAAS,YAAY,EAAE,MAAM,OAAO,QAAQ,GAAqB;AACtE,QAAM,EAAE,WAAW,IAAI,wBAAwB;AAC/C,QAAM,EAAE,UAAU,IAAI,mBAAmB;AACzC,QAAM,EAAE,WAAW,kBAAkB,IAAI,wBAAwB;AACjE,QAAM,EAAE,KAAK,IAAI,QAAQ;AACzB,QAAM,YAAY,MAAM,YAAY,WAAW,MAAM,YAAY;AACjE,QAAM,cAAc,YAAY,MAAM;AACpC,QAAI,WAAW;AACb,gBAAU;AAAA,IACZ,OAAO;AACL,wBAAkB;AAAA,IACpB;AAAA,EACF;AAGA,MAAI,eAAe,SAAU,QAAO;AAEpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS;AAAA,MAET;AAAA,6BAAC,SAAI,WAAU,qCACb;AAAA,8BAAC,UAAK,WAAU,wCAAuC,gCAAe;AAAA,UACtE,qBAAC,UAAK,WAAU,yCAAyC;AAAA;AAAA,YAAK;AAAA,YAAI;AAAA,aAAM;AAAA,WAC1E;AAAA,QACA,oBAAC,YAAS,WAAU,uBAAsB,gBAAe,YAAW,OAAO,KAAK,MAAO,OAAO,QAAS,GAAG,GAAG;AAAA;AAAA;AAAA,EAC/G;AAEJ;","names":[]}
@@ -1,9 +1,7 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { Button, Progress } from "../../../index";
4
- import { useTranslations } from "next-intl";
5
4
  function PlanCard({ planName, trialLabel, progressValue, onKnowPlans }) {
6
- const translate = useTranslations();
7
5
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col rounded-md p-4 gap-4 bg-gray-50", children: [
8
6
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
9
7
  /* @__PURE__ */ jsx("span", { className: "paragraph-small-semibold text-gray-950", children: planName }),
@@ -16,7 +14,7 @@ function PlanCard({ planName, trialLabel, progressValue, onKnowPlans }) {
16
14
  variant: "secondary",
17
15
  className: "paragraph-small-semibold text-gray-950",
18
16
  onClick: onKnowPlans,
19
- children: translate("common.navigation.planCard.knowPlans")
17
+ children: "Conhe\xE7a os planos"
20
18
  }
21
19
  )
22
20
  ] });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/navigation/subcomponents/PlanCard.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Button, Progress } from '../../../index';\r\nimport { useTranslations } from 'next-intl';\r\n\r\nexport interface PlanCardProps {\r\n planName: string;\r\n trialLabel: string;\r\n progressValue: number;\r\n onKnowPlans: () => void;\r\n}\r\n\r\nexport function PlanCard({ planName, trialLabel, progressValue, onKnowPlans }: PlanCardProps) {\r\n const translate = useTranslations();\r\n return (\r\n <div className=\"flex flex-col rounded-md p-4 gap-4 bg-gray-50\">\r\n <div className=\"flex flex-col gap-1\">\r\n <span className=\"paragraph-small-semibold text-gray-950\">{planName}</span>\r\n <span className=\"paragraph-xsmall-medium text-gray-600\">{trialLabel}</span>\r\n </div>\r\n <Progress value={progressValue} className=\"bg-(--color-progress-track)\" />\r\n <Button\r\n variant=\"secondary\"\r\n className=\"paragraph-small-semibold text-gray-950\"\r\n onClick={onKnowPlans}\r\n >\r\n {translate('common.navigation.planCard.knowPlans')}\r\n </Button>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAgBM,SACE,KADF;AAdN,SAAS,QAAQ,gBAAgB;AACjC,SAAS,uBAAuB;AASzB,SAAS,SAAS,EAAE,UAAU,YAAY,eAAe,YAAY,GAAkB;AAC5F,QAAM,YAAY,gBAAgB;AAClC,SACE,qBAAC,SAAI,WAAU,iDACb;AAAA,yBAAC,SAAI,WAAU,uBACb;AAAA,0BAAC,UAAK,WAAU,0CAA0C,oBAAS;AAAA,MACnE,oBAAC,UAAK,WAAU,yCAAyC,sBAAW;AAAA,OACtE;AAAA,IACA,oBAAC,YAAS,OAAO,eAAe,WAAU,+BAA8B;AAAA,IACxE;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS;AAAA,QAER,oBAAU,sCAAsC;AAAA;AAAA,IACnD;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/navigation/subcomponents/PlanCard.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Button, Progress } from '../../../index';\r\n\r\nexport interface PlanCardProps {\r\n planName: string;\r\n trialLabel: string;\r\n progressValue: number;\r\n onKnowPlans: () => void;\r\n}\r\n\r\nexport function PlanCard({ planName, trialLabel, progressValue, onKnowPlans }: PlanCardProps) {\r\n return (\r\n <div className=\"flex flex-col rounded-md p-4 gap-4 bg-gray-50\">\r\n <div className=\"flex flex-col gap-1\">\r\n <span className=\"paragraph-small-semibold text-gray-950\">{planName}</span>\r\n <span className=\"paragraph-xsmall-medium text-gray-600\">{trialLabel}</span>\r\n </div>\r\n <Progress value={progressValue} className=\"bg-(--color-progress-track)\" />\r\n <Button\r\n variant=\"secondary\"\r\n className=\"paragraph-small-semibold text-gray-950\"\r\n onClick={onKnowPlans}\r\n >\r\n Conheça os planos\r\n </Button>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAcM,SACE,KADF;AAZN,SAAS,QAAQ,gBAAgB;AAS1B,SAAS,SAAS,EAAE,UAAU,YAAY,eAAe,YAAY,GAAkB;AAC5F,SACE,qBAAC,SAAI,WAAU,iDACb;AAAA,yBAAC,SAAI,WAAU,uBACb;AAAA,0BAAC,UAAK,WAAU,0CAA0C,oBAAS;AAAA,MACnE,oBAAC,UAAK,WAAU,yCAAyC,sBAAW;AAAA,OACtE;AAAA,IACA,oBAAC,YAAS,OAAO,eAAe,WAAU,+BAA8B;AAAA,IACxE;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS;AAAA,QACV;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;","names":[]}
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useState, useRef, useEffect, useMemo } from "react";
4
- import { useTranslations } from "next-intl";
5
4
  import { useMobileNavbarSheet } from "../../../store/useMobileNavbarSheet";
6
5
  import { useAppNavigationContext } from "../AppNavigationContext";
7
6
  import { ProjectSelectorPopover } from "../ProjectSelectorPopover";
@@ -19,7 +18,6 @@ function ProjectSelector({
19
18
  onSelectProject,
20
19
  onManageProjects
21
20
  }) {
22
- const translate = useTranslations();
23
21
  const isMainWhitelabel = useIsDefaultWhitelabel();
24
22
  const { breakpoint } = useAppNavigationContext();
25
23
  const [isPopoverOpen, setIsPopoverOpen] = useState(false);
@@ -103,9 +101,9 @@ function ProjectSelector({
103
101
  }
104
102
  ) }),
105
103
  activeSection === "projects" && /* @__PURE__ */ jsxs("div", { className: "flex flex-col p-3 gap-2 border border-gray-200 rounded-lg animate-in fade-in duration-400", children: [
106
- /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx("span", { className: "paragraph-small-semibold", children: translate("common.navigation.projectSelector.title") }) }),
104
+ /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsx("span", { className: "paragraph-small-semibold", children: "Projetos" }) }),
107
105
  /* @__PURE__ */ jsxs(Command, { className: "gap-2", shouldFilter: false, children: [
108
- /* @__PURE__ */ jsx(CommandInput, { placeholder: translate("common.navigation.projectSelector.searchPlaceholder"), value: search, onValueChange: setSearch }),
106
+ /* @__PURE__ */ jsx(CommandInput, { placeholder: "Busque aqui", value: search, onValueChange: setSearch }),
109
107
  /* @__PURE__ */ jsxs(
110
108
  CommandList,
111
109
  {
@@ -119,7 +117,7 @@ function ProjectSelector({
119
117
  }
120
118
  },
121
119
  children: [
122
- /* @__PURE__ */ jsx(CommandEmpty, { children: translate("common.navigation.projectSelector.noResults") }),
120
+ /* @__PURE__ */ jsx(CommandEmpty, { children: "Nenhum resultado encontrado." }),
123
121
  showListSkeleton ? /* @__PURE__ */ jsxs(Fragment, { children: [
124
122
  /* @__PURE__ */ jsx(ProjectItemSkeleton, {}),
125
123
  /* @__PURE__ */ jsx(ProjectItemSkeleton, {}),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/navigation/subcomponents/ProjectSelector.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useEffect, useMemo, RefObject } from 'react';\nimport { useTranslations } from 'next-intl';\nimport { useMobileNavbarSheet } from '../../../store/useMobileNavbarSheet';\nimport { useAppNavigationContext } from '../AppNavigationContext';\nimport { ProjectSelectorPopover } from '../ProjectSelectorPopover';\nimport { cn, Command, CommandEmpty, CommandInput, CommandItem, CommandList, UserAvatar, useIsDefaultWhitelabel, useDebounce } from '../../../index';\nimport { useInfiniteProjects } from '../../../modules/projects/hooks/list-infinite-projects.hook';\nimport { IconChevronDown } from '@tabler/icons-react';\nimport type { Project } from '../../../modules/projects/types';\n\nexport interface ProjectSelectorProps {\n selectedProject: Project | null;\n onSelectProject: (project: Project) => void;\n onAddProject?: () => void;\n onManageProjects?: () => void;\n}\n\nfunction ProjectItemSkeleton() {\n return (\n <div className=\"flex items-center gap-2 p-[8.8px]\">\n <div className=\"skeleton size-9 rounded-lg shrink-0\" />\n <div className=\"skeleton h-4 w-36 rounded\" />\n </div>\n );\n}\n\nexport function ProjectSelector({\n selectedProject,\n onSelectProject,\n onManageProjects,\n}: ProjectSelectorProps) {\n const translate = useTranslations();\n const isMainWhitelabel = useIsDefaultWhitelabel();\n const { breakpoint } = useAppNavigationContext();\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const [activeSection, setActiveSection] = useState<'projects' | null>(null);\n const titleRef = useRef<HTMLDivElement>(null);\n const { openProjectList, clearProjectList } = useMobileNavbarSheet();\n\n const [search, setSearch] = useState('');\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading, isFetching, isFetchingNextPage, hasNextPage, fetchNextPage } = useInfiniteProjects({\n sort: 'title',\n limit: 20,\n ...(debouncedSearch ? { search: debouncedSearch } : {}),\n });\n const projects = useMemo(() => data?.pages.flatMap((page) => page.data) ?? [], [data]);\n const showListSkeleton = isLoading || (isFetching && !isFetchingNextPage && !!debouncedSearch);\n\n const handlePopoverOpenChange: typeof setIsPopoverOpen = (value) => {\n setIsPopoverOpen((prev) => {\n const next = typeof value === 'function' ? value(prev) : value;\n if (!next) setSearch('');\n return next;\n });\n };\n\n useEffect(() => {\n if (openProjectList && breakpoint === 'mobile') {\n setActiveSection('projects');\n clearProjectList();\n }\n }, [openProjectList, breakpoint, clearProjectList]);\n\n // Desktop and md: title + popover (aligned with NavBar logo + separator)\n if (breakpoint === 'desktop' || breakpoint === 'md') {\n return (\n <div className={cn(\n !isMainWhitelabel ? \"mt-[14.5px] mb-[7px]\" : \"mt-[6.5px] mb-[3px]\"\n )}>\n <div className=\"flex items-center h-7\">\n <ProjectSelectorPopover\n open={isPopoverOpen}\n setOpen={handlePopoverOpenChange}\n titleRef={titleRef as unknown as RefObject<HTMLSpanElement | null>}\n projects={projects}\n selectedProject={selectedProject}\n isLoading={showListSkeleton}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n onLoadMore={() => fetchNextPage()}\n onSelectProject={onSelectProject}\n onManageProjects={onManageProjects}\n search={search}\n onSearchChange={setSearch}\n >\n <div className=\"flex items-center gap-2 truncate select-none cursor-pointer\" ref={titleRef}>\n {isLoading ? (\n <div className=\"skeleton h-4 w-32 rounded\" />\n ) : (\n <span className=\"paragraph-medium-semibold text-gray-600 truncate max-w-[120px]\">\n {selectedProject?.title}\n </span>\n )}\n <IconChevronDown\n size={20}\n className={`transition-transform duration-200 ${isPopoverOpen ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}\n />\n </div>\n </ProjectSelectorPopover>\n </div>\n </div>\n );\n }\n\n // Mobile: inline collapsible accordion\n return (\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-center justify-between\">\n <div\n className=\"flex items-center gap-1 cursor-pointer\"\n onClick={() => { const next = activeSection === 'projects' ? null : 'projects'; setActiveSection(next); if (!next) setSearch(''); }}\n >\n <span className=\"paragraph-medium-semibold text-gray-600\">{selectedProject?.title}</span>\n <IconChevronDown\n size={20}\n className={`transition-transform duration-200 ${\n activeSection === 'projects' ? 'rotate-180 text-gray-950' : 'text-gray-400'\n }`}\n />\n </div>\n </div>\n {activeSection === 'projects' && (\n <div className=\"flex flex-col p-3 gap-2 border border-gray-200 rounded-lg animate-in fade-in duration-400\">\n <div className=\"flex items-center justify-between\">\n <span className=\"paragraph-small-semibold\">{translate('common.navigation.projectSelector.title')}</span>\n </div>\n <Command className=\"gap-2\" shouldFilter={false}>\n <CommandInput placeholder={translate('common.navigation.projectSelector.searchPlaceholder')} value={search} onValueChange={setSearch} />\n <CommandList\n className=\"custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]\"\n onScroll={(event) => {\n if (!hasNextPage || isFetchingNextPage || !fetchNextPage) return;\n\n const target = event.currentTarget;\n const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;\n\n if (distanceToBottom <= 80) {\n fetchNextPage();\n }\n }}\n >\n <CommandEmpty>{translate('common.navigation.projectSelector.noResults')}</CommandEmpty>\n {showListSkeleton ? (\n <>\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n </>\n ) : (\n projects.map((project) => (\n <CommandItem\n key={project.id}\n value={`${project.title}-${project.id}`}\n keywords={[project.title]}\n className={selectedProject?.id === project.id ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}\n onSelect={() => { onSelectProject(project); setActiveSection(null); setSearch(''); }}\n >\n <UserAvatar\n photo={project.photo}\n name={project.title}\n size={36}\n />\n {project.title}\n </CommandItem>\n ))\n )}\n {isFetchingNextPage && (\n <>\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n </>\n )}\n </CommandList>\n </Command>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/navigation/subcomponents/ProjectSelector.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useEffect, useMemo, RefObject } from 'react';\nimport { useMobileNavbarSheet } from '../../../store/useMobileNavbarSheet';\nimport { useAppNavigationContext } from '../AppNavigationContext';\nimport { ProjectSelectorPopover } from '../ProjectSelectorPopover';\nimport { cn, Command, CommandEmpty, CommandInput, CommandItem, CommandList, UserAvatar, useIsDefaultWhitelabel, useDebounce } from '../../../index';\nimport { useInfiniteProjects } from '../../../modules/projects/hooks/list-infinite-projects.hook';\nimport { IconChevronDown } from '@tabler/icons-react';\nimport type { Project } from '../../../modules/projects/types';\n\nexport interface ProjectSelectorProps {\n selectedProject: Project | null;\n onSelectProject: (project: Project) => void;\n onAddProject?: () => void;\n onManageProjects?: () => void;\n}\n\nfunction ProjectItemSkeleton() {\n return (\n <div className=\"flex items-center gap-2 p-[8.8px]\">\n <div className=\"skeleton size-9 rounded-lg shrink-0\" />\n <div className=\"skeleton h-4 w-36 rounded\" />\n </div>\n );\n}\n\nexport function ProjectSelector({\n selectedProject,\n onSelectProject,\n onManageProjects,\n}: ProjectSelectorProps) {\n const isMainWhitelabel = useIsDefaultWhitelabel();\n const { breakpoint } = useAppNavigationContext();\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const [activeSection, setActiveSection] = useState<'projects' | null>(null);\n const titleRef = useRef<HTMLDivElement>(null);\n const { openProjectList, clearProjectList } = useMobileNavbarSheet();\n\n const [search, setSearch] = useState('');\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading, isFetching, isFetchingNextPage, hasNextPage, fetchNextPage } = useInfiniteProjects({\n sort: 'title',\n limit: 20,\n ...(debouncedSearch ? { search: debouncedSearch } : {}),\n });\n const projects = useMemo(() => data?.pages.flatMap((page) => page.data) ?? [], [data]);\n const showListSkeleton = isLoading || (isFetching && !isFetchingNextPage && !!debouncedSearch);\n\n const handlePopoverOpenChange: typeof setIsPopoverOpen = (value) => {\n setIsPopoverOpen((prev) => {\n const next = typeof value === 'function' ? value(prev) : value;\n if (!next) setSearch('');\n return next;\n });\n };\n\n useEffect(() => {\n if (openProjectList && breakpoint === 'mobile') {\n setActiveSection('projects');\n clearProjectList();\n }\n }, [openProjectList, breakpoint, clearProjectList]);\n\n // Desktop and md: title + popover (aligned with NavBar logo + separator)\n if (breakpoint === 'desktop' || breakpoint === 'md') {\n return (\n <div className={cn(\n !isMainWhitelabel ? \"mt-[14.5px] mb-[7px]\" : \"mt-[6.5px] mb-[3px]\"\n )}>\n <div className=\"flex items-center h-7\">\n <ProjectSelectorPopover\n open={isPopoverOpen}\n setOpen={handlePopoverOpenChange}\n titleRef={titleRef as unknown as RefObject<HTMLSpanElement | null>}\n projects={projects}\n selectedProject={selectedProject}\n isLoading={showListSkeleton}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n onLoadMore={() => fetchNextPage()}\n onSelectProject={onSelectProject}\n onManageProjects={onManageProjects}\n search={search}\n onSearchChange={setSearch}\n >\n <div className=\"flex items-center gap-2 truncate select-none cursor-pointer\" ref={titleRef}>\n {isLoading ? (\n <div className=\"skeleton h-4 w-32 rounded\" />\n ) : (\n <span className=\"paragraph-medium-semibold text-gray-600 truncate max-w-[120px]\">\n {selectedProject?.title}\n </span>\n )}\n <IconChevronDown\n size={20}\n className={`transition-transform duration-200 ${isPopoverOpen ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}\n />\n </div>\n </ProjectSelectorPopover>\n </div>\n </div>\n );\n }\n\n // Mobile: inline collapsible accordion\n return (\n <div className=\"flex flex-col gap-2.5\">\n <div className=\"flex items-center justify-between\">\n <div\n className=\"flex items-center gap-1 cursor-pointer\"\n onClick={() => { const next = activeSection === 'projects' ? null : 'projects'; setActiveSection(next); if (!next) setSearch(''); }}\n >\n <span className=\"paragraph-medium-semibold text-gray-600\">{selectedProject?.title}</span>\n <IconChevronDown\n size={20}\n className={`transition-transform duration-200 ${\n activeSection === 'projects' ? 'rotate-180 text-gray-950' : 'text-gray-400'\n }`}\n />\n </div>\n </div>\n {activeSection === 'projects' && (\n <div className=\"flex flex-col p-3 gap-2 border border-gray-200 rounded-lg animate-in fade-in duration-400\">\n <div className=\"flex items-center justify-between\">\n <span className=\"paragraph-small-semibold\">Projetos</span>\n </div>\n <Command className=\"gap-2\" shouldFilter={false}>\n <CommandInput placeholder=\"Busque aqui\" value={search} onValueChange={setSearch} />\n <CommandList\n className=\"custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]\"\n onScroll={(event) => {\n if (!hasNextPage || isFetchingNextPage || !fetchNextPage) return;\n\n const target = event.currentTarget;\n const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;\n\n if (distanceToBottom <= 80) {\n fetchNextPage();\n }\n }}\n >\n <CommandEmpty>Nenhum resultado encontrado.</CommandEmpty>\n {showListSkeleton ? (\n <>\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n </>\n ) : (\n projects.map((project) => (\n <CommandItem\n key={project.id}\n value={`${project.title}-${project.id}`}\n keywords={[project.title]}\n className={selectedProject?.id === project.id ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}\n onSelect={() => { onSelectProject(project); setActiveSection(null); setSearch(''); }}\n >\n <UserAvatar\n photo={project.photo}\n name={project.title}\n size={36}\n />\n {project.title}\n </CommandItem>\n ))\n )}\n {isFetchingNextPage && (\n <>\n <ProjectItemSkeleton />\n <ProjectItemSkeleton />\n </>\n )}\n </CommandList>\n </Command>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,6 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import Image from "next/image";
4
4
  import { useEffect } from "react";
5
- import { useTranslations } from "next-intl";
6
5
  import { useRouter } from "next/navigation";
7
6
  import { useWhitelabel, useIsDefaultWhitelabel } from "../../providers/whitelabel.provider";
8
7
  import { Button } from "../ui/buttons/Button";
@@ -15,7 +14,6 @@ function GreatAppsLogo() {
15
14
  ] });
16
15
  }
17
16
  function NotFoundPage() {
18
- const translate = useTranslations();
19
17
  const router = useRouter();
20
18
  useEffect(() => {
21
19
  hideCrisp();
@@ -29,8 +27,8 @@ function NotFoundPage() {
29
27
  /* @__PURE__ */ jsx("div", { className: "-mt-1 w-full border-t border-zinc-100" }),
30
28
  /* @__PURE__ */ jsx("div", { className: "-mt-[25px]", children: isGreatApps ? /* @__PURE__ */ jsx(GreatAppsLogo, {}) : whitelabelLogo ? /* @__PURE__ */ jsx(Image, { src: whitelabelLogo, alt: whitelabel?.name || "", width: 50, height: 50, className: "rounded-xl object-contain" }) : null })
31
29
  ] }),
32
- /* @__PURE__ */ jsx("h1", { className: "max-w-[554px] px-6 font-[family-name:var(--font-outfit)] text-[32px] leading-[36px] font-semibold text-zinc-950 sm:px-0 sm:text-[56px] sm:leading-[56px]", children: translate("common.notFound.title") }),
33
- /* @__PURE__ */ jsx("p", { className: "max-w-[496px] px-6 paragraph-medium-medium text-zinc-950 sm:px-0", children: translate("common.notFound.description") }),
30
+ /* @__PURE__ */ jsx("h1", { className: "max-w-[554px] px-6 font-[family-name:var(--font-outfit)] text-[32px] leading-[36px] font-semibold text-zinc-950 sm:px-0 sm:text-[56px] sm:leading-[56px]", children: "P\xE1gina n\xE3o foi encontrada!" }),
31
+ /* @__PURE__ */ jsx("p", { className: "max-w-[496px] px-6 paragraph-medium-medium text-zinc-950 sm:px-0", children: "A p\xE1gina que voc\xEA est\xE1 procurando n\xE3o existe. Verifique se digitou corretamente o link que est\xE1 procurando." }),
34
32
  /* @__PURE__ */ jsx(
35
33
  Button,
36
34
  {
@@ -43,7 +41,7 @@ function NotFoundPage() {
43
41
  router.push("/");
44
42
  }
45
43
  },
46
- children: translate("common.notFound.backToHome")
44
+ children: "Voltar para o in\xEDcio"
47
45
  }
48
46
  )
49
47
  ] }) });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/pages/NotFoundPage.tsx"],"sourcesContent":["'use client';\n\nimport Image from \"next/image\";\nimport { useEffect } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport { useRouter } from \"next/navigation\";\nimport { useWhitelabel, useIsDefaultWhitelabel } from \"../../providers/whitelabel.provider\";\nimport { Button } from \"../ui/buttons/Button\";\nimport { hideCrisp } from \"../embeds/CrispEmbed\";\n\nfunction GreatAppsLogo() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 68 68\" fill=\"none\">\n <rect x=\"4.5\" y=\"4.5\" width=\"58.4463\" height=\"58.4463\" rx=\"14.2271\" fill=\"#09090B\" />\n <rect x=\"4.5\" y=\"4.5\" width=\"58.4463\" height=\"58.4463\" rx=\"14.2271\" stroke=\"white\" strokeWidth=\"9\" />\n <path d=\"M38.0883 19.5377C38.6909 19.5377 39.1795 20.0264 39.1795 20.6289V25.5892C39.1795 25.9865 39.106 26.3827 38.9364 26.7421C38.4857 27.6992 37.5451 28.2674 36.5452 28.2674H29.9031C28.9993 28.2674 28.2663 29.0004 28.2663 29.9042V37.5427C28.2663 38.4465 28.9993 39.1795 29.9031 39.1795H37.5415C38.4453 39.1795 39.1783 38.4465 39.1783 37.5427V30.9693C39.1783 30.4522 39.3053 29.9374 39.5804 29.5009C40.0596 28.7406 40.8768 28.2899 41.7462 28.2686H46.8168C47.4193 28.2686 47.908 28.7561 47.908 29.3586V37.8238C47.908 38.692 47.5629 39.5246 46.9497 40.139L40.1379 46.9508C39.5235 47.5652 38.6909 47.9091 37.8226 47.9091H29.3587C28.7561 47.9091 28.2674 47.4205 28.2674 46.8179L28.2674 41.8126C28.2674 41.114 27.9899 40.4439 27.4965 39.9504C27.0031 39.457 26.3329 39.1795 25.6343 39.1795H20.629C20.0265 39.1795 19.5378 38.6908 19.5378 38.0883L19.5378 29.6231C19.5378 28.7549 19.8829 27.9222 20.4961 27.3078L27.468 20.3371C27.9792 19.8259 28.6731 19.5377 29.3966 19.5377H38.0871H38.0883Z\" fill=\"white\" />\n </svg>\n );\n}\n\nexport function NotFoundPage() {\n const translate = useTranslations();\n const router = useRouter();\n\n useEffect(() => {\n hideCrisp();\n }, []);\n const { whitelabel } = useWhitelabel();\n const isGreatApps = useIsDefaultWhitelabel();\n const whitelabelLogo = whitelabel?.logo\n ? `${process.env.NEXT_PUBLIC_STORAGE_URL}/${whitelabel.logo}`\n : null;\n\n return (\n <div className=\"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden bg-white\">\n <div className=\"flex flex-col items-center gap-[22px] text-center\">\n <div className=\"relative flex flex-col items-center\">\n <Image src=\"/images/404.svg\" alt=\"404\" width={440} height={173} priority unoptimized />\n\n <div className=\"-mt-1 w-full border-t border-zinc-100\" />\n\n <div className=\"-mt-[25px]\">\n {isGreatApps ? (\n <GreatAppsLogo />\n ) : whitelabelLogo ? (\n <Image src={whitelabelLogo} alt={whitelabel?.name || ''} width={50} height={50} className=\"rounded-xl object-contain\" />\n ) : null}\n </div>\n </div>\n\n <h1 className=\"max-w-[554px] px-6 font-[family-name:var(--font-outfit)] text-[32px] leading-[36px] font-semibold text-zinc-950 sm:px-0 sm:text-[56px] sm:leading-[56px]\">\n {translate('common.notFound.title')}\n </h1>\n\n <p className=\"max-w-[496px] px-6 paragraph-medium-medium text-zinc-950 sm:px-0\">\n {translate('common.notFound.description')}\n </p>\n\n <Button\n variant=\"secondary\"\n className=\"h-10!\"\n onClick={() => {\n if (window.history.length > 1) {\n router.back();\n } else {\n router.push('/');\n }\n }}\n >\n {translate('common.notFound.backToHome')}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";AAYI,SACE,KADF;AAVJ,OAAO,WAAW;AAClB,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,SAAS,iBAAiB;AAC1B,SAAS,eAAe,8BAA8B;AACtD,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,SAAS,gBAAgB;AACvB,SACE,qBAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACtF;AAAA,wBAAC,UAAK,GAAE,OAAM,GAAE,OAAM,OAAM,WAAU,QAAO,WAAU,IAAG,WAAU,MAAK,WAAU;AAAA,IACnF,oBAAC,UAAK,GAAE,OAAM,GAAE,OAAM,OAAM,WAAU,QAAO,WAAU,IAAG,WAAU,QAAO,SAAQ,aAAY,KAAI;AAAA,IACnG,oBAAC,UAAK,GAAE,m9BAAk9B,MAAK,SAAQ;AAAA,KACz+B;AAEJ;AAEO,SAAS,eAAe;AAC7B,QAAM,YAAY,gBAAgB;AAClC,QAAM,SAAS,UAAU;AAEzB,YAAU,MAAM;AACd,cAAU;AAAA,EACZ,GAAG,CAAC,CAAC;AACL,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,cAAc,uBAAuB;AAC3C,QAAM,iBAAiB,YAAY,OAC/B,GAAG,QAAQ,IAAI,uBAAuB,IAAI,WAAW,IAAI,KACzD;AAEJ,SACE,oBAAC,SAAI,WAAU,mGACb,+BAAC,SAAI,WAAU,qDACb;AAAA,yBAAC,SAAI,WAAU,uCACb;AAAA,0BAAC,SAAM,KAAI,mBAAkB,KAAI,OAAM,OAAO,KAAK,QAAQ,KAAK,UAAQ,MAAC,aAAW,MAAC;AAAA,MAErF,oBAAC,SAAI,WAAU,yCAAwC;AAAA,MAEvD,oBAAC,SAAI,WAAU,cACZ,wBACC,oBAAC,iBAAc,IACb,iBACF,oBAAC,SAAM,KAAK,gBAAgB,KAAK,YAAY,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,WAAU,6BAA4B,IACpH,MACN;AAAA,OACF;AAAA,IAEA,oBAAC,QAAG,WAAU,4JACX,oBAAU,uBAAuB,GACpC;AAAA,IAEA,oBAAC,OAAE,WAAU,oEACV,oBAAU,6BAA6B,GAC1C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS,MAAM;AACb,cAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,mBAAO,KAAK;AAAA,UACd,OAAO;AACL,mBAAO,KAAK,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QAEC,oBAAU,4BAA4B;AAAA;AAAA,IACzC;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/pages/NotFoundPage.tsx"],"sourcesContent":["'use client';\n\nimport Image from \"next/image\";\nimport { useEffect } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { useWhitelabel, useIsDefaultWhitelabel } from \"../../providers/whitelabel.provider\";\nimport { Button } from \"../ui/buttons/Button\";\nimport { hideCrisp } from \"../embeds/CrispEmbed\";\n\nfunction GreatAppsLogo() {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 68 68\" fill=\"none\">\n <rect x=\"4.5\" y=\"4.5\" width=\"58.4463\" height=\"58.4463\" rx=\"14.2271\" fill=\"#09090B\" />\n <rect x=\"4.5\" y=\"4.5\" width=\"58.4463\" height=\"58.4463\" rx=\"14.2271\" stroke=\"white\" strokeWidth=\"9\" />\n <path d=\"M38.0883 19.5377C38.6909 19.5377 39.1795 20.0264 39.1795 20.6289V25.5892C39.1795 25.9865 39.106 26.3827 38.9364 26.7421C38.4857 27.6992 37.5451 28.2674 36.5452 28.2674H29.9031C28.9993 28.2674 28.2663 29.0004 28.2663 29.9042V37.5427C28.2663 38.4465 28.9993 39.1795 29.9031 39.1795H37.5415C38.4453 39.1795 39.1783 38.4465 39.1783 37.5427V30.9693C39.1783 30.4522 39.3053 29.9374 39.5804 29.5009C40.0596 28.7406 40.8768 28.2899 41.7462 28.2686H46.8168C47.4193 28.2686 47.908 28.7561 47.908 29.3586V37.8238C47.908 38.692 47.5629 39.5246 46.9497 40.139L40.1379 46.9508C39.5235 47.5652 38.6909 47.9091 37.8226 47.9091H29.3587C28.7561 47.9091 28.2674 47.4205 28.2674 46.8179L28.2674 41.8126C28.2674 41.114 27.9899 40.4439 27.4965 39.9504C27.0031 39.457 26.3329 39.1795 25.6343 39.1795H20.629C20.0265 39.1795 19.5378 38.6908 19.5378 38.0883L19.5378 29.6231C19.5378 28.7549 19.8829 27.9222 20.4961 27.3078L27.468 20.3371C27.9792 19.8259 28.6731 19.5377 29.3966 19.5377H38.0871H38.0883Z\" fill=\"white\" />\n </svg>\n );\n}\n\nexport function NotFoundPage() {\n const router = useRouter();\n\n useEffect(() => {\n hideCrisp();\n }, []);\n const { whitelabel } = useWhitelabel();\n const isGreatApps = useIsDefaultWhitelabel();\n const whitelabelLogo = whitelabel?.logo\n ? `${process.env.NEXT_PUBLIC_STORAGE_URL}/${whitelabel.logo}`\n : null;\n\n return (\n <div className=\"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden bg-white\">\n <div className=\"flex flex-col items-center gap-[22px] text-center\">\n <div className=\"relative flex flex-col items-center\">\n <Image src=\"/images/404.svg\" alt=\"404\" width={440} height={173} priority unoptimized />\n\n <div className=\"-mt-1 w-full border-t border-zinc-100\" />\n\n <div className=\"-mt-[25px]\">\n {isGreatApps ? (\n <GreatAppsLogo />\n ) : whitelabelLogo ? (\n <Image src={whitelabelLogo} alt={whitelabel?.name || ''} width={50} height={50} className=\"rounded-xl object-contain\" />\n ) : null}\n </div>\n </div>\n\n <h1 className=\"max-w-[554px] px-6 font-[family-name:var(--font-outfit)] text-[32px] leading-[36px] font-semibold text-zinc-950 sm:px-0 sm:text-[56px] sm:leading-[56px]\">\n Página não foi encontrada!\n </h1>\n\n <p className=\"max-w-[496px] px-6 paragraph-medium-medium text-zinc-950 sm:px-0\">\n A página que você está procurando não existe. Verifique se digitou corretamente o link que está procurando.\n </p>\n\n <Button\n variant=\"secondary\"\n className=\"h-10!\"\n onClick={() => {\n if (window.history.length > 1) {\n router.back();\n } else {\n router.push('/');\n }\n }}\n >\n Voltar para o início\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";AAWI,SACE,KADF;AATJ,OAAO,WAAW;AAClB,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,eAAe,8BAA8B;AACtD,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,SAAS,gBAAgB;AACvB,SACE,qBAAC,SAAI,OAAM,8BAA6B,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QACtF;AAAA,wBAAC,UAAK,GAAE,OAAM,GAAE,OAAM,OAAM,WAAU,QAAO,WAAU,IAAG,WAAU,MAAK,WAAU;AAAA,IACnF,oBAAC,UAAK,GAAE,OAAM,GAAE,OAAM,OAAM,WAAU,QAAO,WAAU,IAAG,WAAU,QAAO,SAAQ,aAAY,KAAI;AAAA,IACnG,oBAAC,UAAK,GAAE,m9BAAk9B,MAAK,SAAQ;AAAA,KACz+B;AAEJ;AAEO,SAAS,eAAe;AAC7B,QAAM,SAAS,UAAU;AAEzB,YAAU,MAAM;AACd,cAAU;AAAA,EACZ,GAAG,CAAC,CAAC;AACL,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,cAAc,uBAAuB;AAC3C,QAAM,iBAAiB,YAAY,OAC/B,GAAG,QAAQ,IAAI,uBAAuB,IAAI,WAAW,IAAI,KACzD;AAEJ,SACE,oBAAC,SAAI,WAAU,mGACb,+BAAC,SAAI,WAAU,qDACb;AAAA,yBAAC,SAAI,WAAU,uCACb;AAAA,0BAAC,SAAM,KAAI,mBAAkB,KAAI,OAAM,OAAO,KAAK,QAAQ,KAAK,UAAQ,MAAC,aAAW,MAAC;AAAA,MAErF,oBAAC,SAAI,WAAU,yCAAwC;AAAA,MAEvD,oBAAC,SAAI,WAAU,cACZ,wBACC,oBAAC,iBAAc,IACb,iBACF,oBAAC,SAAM,KAAK,gBAAgB,KAAK,YAAY,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,WAAU,6BAA4B,IACpH,MACN;AAAA,OACF;AAAA,IAEA,oBAAC,QAAG,WAAU,4JAA2J,8CAEzK;AAAA,IAEA,oBAAC,OAAE,WAAU,oEAAmE,wIAEhF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS,MAAM;AACb,cAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,mBAAO,KAAK;AAAA,UACd,OAAO;AACL,mBAAO,KAAK,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QACD;AAAA;AAAA,IAED;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { IconBell, IconCheck, IconLoader2 } from "@tabler/icons-react";
4
- import { useTranslations } from "next-intl";
5
4
  import { Button } from "../../ui/buttons/Button";
6
5
  import {
7
6
  Tabs,
@@ -27,7 +26,6 @@ function NotificationsList({
27
26
  hasNextPage,
28
27
  fetchNextPage
29
28
  }) {
30
- const translate = useTranslations();
31
29
  const notifications = pages?.pages.flatMap((p) => p.data) ?? [];
32
30
  const handleScroll = (e) => {
33
31
  const target = e.currentTarget;
@@ -38,7 +36,7 @@ function NotificationsList({
38
36
  }
39
37
  };
40
38
  if (notifications.length === 0 && !isFetchingNextPage) {
41
- return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-zinc-200 bg-white", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center py-16 gap-2", children: /* @__PURE__ */ jsx("span", { className: "paragraph-medium-regular text-zinc-500", children: translate("common.notifications.page.empty") }) }) });
39
+ return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-zinc-200 bg-white", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center justify-center py-16 gap-2", children: /* @__PURE__ */ jsx("span", { className: "paragraph-medium-regular text-zinc-500", children: "Nenhuma notifica\xE7\xE3o encontrada." }) }) });
42
40
  }
43
41
  return /* @__PURE__ */ jsxs(
44
42
  "div",
@@ -62,7 +60,7 @@ function NotificationsList({
62
60
  }),
63
61
  isUnread: notification.status === 1,
64
62
  showBorder: index < notifications.length - 1,
65
- actions: detailsUrl ? /* @__PURE__ */ jsx(Button, { asChild: true, variant: "secondary", className: "h-8! px-3! paragraph-small-semibold", children: /* @__PURE__ */ jsx(Link, { href: detailsUrl, children: translate("common.notifications.page.details") }) }) : void 0
63
+ actions: detailsUrl ? /* @__PURE__ */ jsx(Button, { asChild: true, variant: "secondary", className: "h-8! px-3! paragraph-small-semibold", children: /* @__PURE__ */ jsx(Link, { href: detailsUrl, children: "Detalhes" }) }) : void 0
66
64
  },
67
65
  notification.id
68
66
  );
@@ -73,7 +71,6 @@ function NotificationsList({
73
71
  );
74
72
  }
75
73
  function NotificationPageContent() {
76
- const translate = useTranslations();
77
74
  const unreadNotifications = useInfiniteMessages({
78
75
  readed: false,
79
76
  type: "notification",
@@ -89,18 +86,18 @@ function NotificationPageContent() {
89
86
  const handleMarkAllAsRead = () => {
90
87
  markAllAsRead(void 0, {
91
88
  onSuccess: () => {
92
- toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "success", message: translate("common.notifications.page.markAllSuccess"), toastId: t }));
89
+ toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "success", message: "Todas as notifica\xE7\xF5es foram marcadas como lidas", toastId: t }));
93
90
  },
94
91
  onError: () => {
95
- toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "error", message: translate("common.notifications.page.markAllError"), toastId: t }));
92
+ toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "error", message: "Erro ao marcar notifica\xE7\xF5es como lidas", toastId: t }));
96
93
  }
97
94
  });
98
95
  };
99
96
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6 lg:gap-8", children: [
100
97
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
101
98
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
102
- /* @__PURE__ */ jsx("h1", { className: "title-large-semibold text-gray-950", children: translate("common.notifications.page.title") }),
103
- /* @__PURE__ */ jsx("p", { className: "paragraph-small-regular text-gray-600 hidden lg:block", children: translate("common.notifications.page.subtitle") })
99
+ /* @__PURE__ */ jsx("h1", { className: "title-large-semibold text-gray-950", children: "Notifica\xE7\xF5es" }),
100
+ /* @__PURE__ */ jsx("p", { className: "paragraph-small-regular text-gray-600 hidden lg:block", children: "Tenha controle total sobre p\xE1ginas, experi\xEAncias e convers\xF5es." })
104
101
  ] }),
105
102
  /* @__PURE__ */ jsxs(
106
103
  Button,
@@ -111,8 +108,8 @@ function NotificationPageContent() {
111
108
  disabled: isMarkingAll || totalUnread === 0,
112
109
  children: [
113
110
  isMarkingAll ? /* @__PURE__ */ jsx(IconLoader2, { size: 20, className: "animate-spin" }) : /* @__PURE__ */ jsx(IconCheck, { size: 20 }),
114
- /* @__PURE__ */ jsx("span", { className: "lg:block hidden", children: translate("common.notifications.page.markAllReadDesktop") }),
115
- /* @__PURE__ */ jsx("span", { className: "lg:hidden", children: translate("common.notifications.page.markAllReadMobile") })
111
+ /* @__PURE__ */ jsx("span", { className: "lg:block hidden", children: "Marcar todos como lidos" }),
112
+ /* @__PURE__ */ jsx("span", { className: "lg:hidden", children: "Marcar como lidos" })
116
113
  ]
117
114
  }
118
115
  )
@@ -125,7 +122,7 @@ function NotificationPageContent() {
125
122
  children: [
126
123
  /* @__PURE__ */ jsxs(TabsList, { className: "h-auto pb-0 bg-transparent", children: [
127
124
  /* @__PURE__ */ jsxs(TabsTrigger, { className: "gap-2", value: "all", children: [
128
- translate("common.notifications.page.tabAll"),
125
+ "Todas as notifica\xE7\xF5es",
129
126
  " ",
130
127
  /* @__PURE__ */ jsxs("span", { className: "text-gray-500", children: [
131
128
  "(",
@@ -134,7 +131,7 @@ function NotificationPageContent() {
134
131
  ] })
135
132
  ] }),
136
133
  /* @__PURE__ */ jsxs(TabsTrigger, { className: "gap-2", value: "unreads", disabled: totalUnread === 0, children: [
137
- translate("common.notifications.page.tabUnread"),
134
+ "N\xE3o lidas",
138
135
  " ",
139
136
  /* @__PURE__ */ jsxs("span", { className: "text-gray-500", children: [
140
137
  "(",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/pages/notifications/Notifications.tsx"],"sourcesContent":["'use client';\n\nimport { IconBell, IconCheck, IconLoader2 } from '@tabler/icons-react';\nimport { useTranslations } from 'next-intl';\nimport { Button } from \"../../ui/buttons/Button\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../ui/data-display/Tabs\";\nimport { useInfiniteMessages, useMarkAllMessagesAsRead } from \"../../../modules/users/hooks/messages.hook\";\nimport NotificationCard from \"../../widgets/notifications/NotificationCard\";\nimport { Toast } from \"../../ui/feedback/Toast\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\nimport React from \"react\";\nimport Link from \"next/link\";\n\nfunction parseNotificationUrl(raw: string): string | null {\n if (!raw) return null;\n const match = raw.match(/href=\"([^\"]+)\"/);\n return match ? match[1] : raw.startsWith('/') ? raw : null;\n}\n\nfunction NotificationsList({\n pages,\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: {\n pages: ReturnType<typeof useInfiniteMessages>[\"data\"];\n isFetchingNextPage: boolean;\n hasNextPage: boolean;\n fetchNextPage: () => void;\n}) {\n const translate = useTranslations();\n const notifications = pages?.pages.flatMap((p) => p.data) ?? [];\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const target = e.currentTarget;\n const nearBottom =\n target.scrollTop + target.clientHeight >= target.scrollHeight - 50;\n if (!nearBottom) return;\n if (hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n };\n\n if (notifications.length === 0 && !isFetchingNextPage) {\n return (\n <div className=\"rounded-lg border border-zinc-200 bg-white\">\n <div className=\"flex flex-col items-center justify-center py-16 gap-2\">\n <span className=\"paragraph-medium-regular text-zinc-500\">{translate('common.notifications.page.empty')}</span>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"flex flex-col border border-gray-200 rounded-lg w-full bg-white max-h-[70vh] overflow-y-auto custom-scrollbar\"\n onScroll={handleScroll}\n >\n {notifications.map((notification, index) => {\n const detailsUrl = parseNotificationUrl(notification.url);\n return (\n <NotificationCard\n key={notification.id}\n icon={<IconBell size={20} className=\"text-pages-600\" />}\n iconBgColor=\"bg-zinc-50\"\n title={notification.subject}\n description={notification.message}\n gapPx={8}\n time={formatDistanceToNow(new Date(notification.datetime_add), {\n addSuffix: true,\n locale: ptBR,\n })}\n isUnread={notification.status === 1}\n showBorder={index < notifications.length - 1}\n actions={\n detailsUrl ? (\n <Button asChild variant=\"secondary\" className=\"h-8! px-3! paragraph-small-semibold\">\n <Link href={detailsUrl}>{translate('common.notifications.page.details')}</Link>\n </Button>\n ) : undefined\n }\n />\n );\n })}\n {isFetchingNextPage && (\n <div className=\"flex items-center justify-center py-4\">\n <IconLoader2 size={20} className=\"animate-spin text-gray-400\" />\n </div>\n )}\n </div>\n );\n}\n\nexport function NotificationPageContent() {\n const translate = useTranslations();\n const unreadNotifications = useInfiniteMessages({\n readed: false,\n type: \"notification\",\n order: \"desc\",\n });\n const allNotifications = useInfiniteMessages({\n type: \"notification\",\n order: \"desc\",\n });\n\n const totalAll = allNotifications.data?.pages[0]?.total ?? 0;\n const totalUnread = unreadNotifications.data?.pages[0]?.total ?? 0;\n\n const { mutate: markAllAsRead, isPending: isMarkingAll } = useMarkAllMessagesAsRead();\n\n const handleMarkAllAsRead = () => {\n markAllAsRead(undefined, {\n onSuccess: () => {\n toast.custom((t) => (\n <Toast variant=\"success\" message={translate('common.notifications.page.markAllSuccess')} toastId={t} />\n ));\n },\n onError: () => {\n toast.custom((t) => (\n <Toast variant=\"error\" message={translate('common.notifications.page.markAllError')} toastId={t} />\n ));\n },\n });\n };\n\n return (\n <div className=\"flex flex-col gap-6 lg:gap-8\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-2\">\n <h1 className=\"title-large-semibold text-gray-950\">\n {translate('common.notifications.page.title')}\n </h1>\n <p className=\"paragraph-small-regular text-gray-600 hidden lg:block\">\n {translate('common.notifications.page.subtitle')}\n </p>\n </div>\n <Button\n variant={\"secondary\"}\n className=\"h-10! lg:h-12! shrink-0\"\n onClick={handleMarkAllAsRead}\n disabled={isMarkingAll || totalUnread === 0}\n >\n {isMarkingAll ? <IconLoader2 size={20} className=\"animate-spin\" /> : <IconCheck size={20} />}\n <span className=\"lg:block hidden\">{translate('common.notifications.page.markAllReadDesktop')}</span>\n <span className=\"lg:hidden\">{translate('common.notifications.page.markAllReadMobile')}</span>\n </Button>\n </div>\n <Tabs\n defaultValue=\"all\"\n className=\"flex flex-col w-full bg-transparent gap-6 lg:gap-8\"\n >\n <TabsList className=\"h-auto pb-0 bg-transparent\">\n <TabsTrigger className=\"gap-2\" value=\"all\">\n {translate('common.notifications.page.tabAll')}{\" \"}\n <span className=\"text-gray-500\">({totalAll})</span>\n </TabsTrigger>\n <TabsTrigger className=\"gap-2\" value=\"unreads\" disabled={totalUnread === 0}>\n {translate('common.notifications.page.tabUnread')}{\" \"}\n <span className=\"text-gray-500\">({totalUnread})</span>\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"all\">\n <NotificationsList\n pages={allNotifications.data}\n isFetchingNextPage={allNotifications.isFetchingNextPage}\n hasNextPage={allNotifications.hasNextPage}\n fetchNextPage={allNotifications.fetchNextPage}\n />\n </TabsContent>\n\n <TabsContent value=\"unreads\">\n <NotificationsList\n pages={unreadNotifications.data}\n isFetchingNextPage={unreadNotifications.isFetchingNextPage}\n hasNextPage={unreadNotifications.hasNextPage}\n fetchNextPage={unreadNotifications.fetchNextPage}\n />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/pages/notifications/Notifications.tsx"],"sourcesContent":["'use client';\n\nimport { IconBell, IconCheck, IconLoader2 } from '@tabler/icons-react';\nimport { Button } from \"../../ui/buttons/Button\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../ui/data-display/Tabs\";\nimport { useInfiniteMessages, useMarkAllMessagesAsRead } from \"../../../modules/users/hooks/messages.hook\";\nimport NotificationCard from \"../../widgets/notifications/NotificationCard\";\nimport { Toast } from \"../../ui/feedback/Toast\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { toast } from \"sonner\";\nimport React from \"react\";\nimport Link from \"next/link\";\n\nfunction parseNotificationUrl(raw: string): string | null {\n if (!raw) return null;\n const match = raw.match(/href=\"([^\"]+)\"/);\n return match ? match[1] : raw.startsWith('/') ? raw : null;\n}\n\nfunction NotificationsList({\n pages,\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: {\n pages: ReturnType<typeof useInfiniteMessages>[\"data\"];\n isFetchingNextPage: boolean;\n hasNextPage: boolean;\n fetchNextPage: () => void;\n}) {\n const notifications = pages?.pages.flatMap((p) => p.data) ?? [];\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n const target = e.currentTarget;\n const nearBottom =\n target.scrollTop + target.clientHeight >= target.scrollHeight - 50;\n if (!nearBottom) return;\n if (hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n };\n\n if (notifications.length === 0 && !isFetchingNextPage) {\n return (\n <div className=\"rounded-lg border border-zinc-200 bg-white\">\n <div className=\"flex flex-col items-center justify-center py-16 gap-2\">\n <span className=\"paragraph-medium-regular text-zinc-500\">Nenhuma notificação encontrada.</span>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"flex flex-col border border-gray-200 rounded-lg w-full bg-white max-h-[70vh] overflow-y-auto custom-scrollbar\"\n onScroll={handleScroll}\n >\n {notifications.map((notification, index) => {\n const detailsUrl = parseNotificationUrl(notification.url);\n return (\n <NotificationCard\n key={notification.id}\n icon={<IconBell size={20} className=\"text-pages-600\" />}\n iconBgColor=\"bg-zinc-50\"\n title={notification.subject}\n description={notification.message}\n gapPx={8}\n time={formatDistanceToNow(new Date(notification.datetime_add), {\n addSuffix: true,\n locale: ptBR,\n })}\n isUnread={notification.status === 1}\n showBorder={index < notifications.length - 1}\n actions={\n detailsUrl ? (\n <Button asChild variant=\"secondary\" className=\"h-8! px-3! paragraph-small-semibold\">\n <Link href={detailsUrl}>Detalhes</Link>\n </Button>\n ) : undefined\n }\n />\n );\n })}\n {isFetchingNextPage && (\n <div className=\"flex items-center justify-center py-4\">\n <IconLoader2 size={20} className=\"animate-spin text-gray-400\" />\n </div>\n )}\n </div>\n );\n}\n\nexport function NotificationPageContent() {\n const unreadNotifications = useInfiniteMessages({\n readed: false,\n type: \"notification\",\n order: \"desc\",\n });\n const allNotifications = useInfiniteMessages({\n type: \"notification\",\n order: \"desc\",\n });\n\n const totalAll = allNotifications.data?.pages[0]?.total ?? 0;\n const totalUnread = unreadNotifications.data?.pages[0]?.total ?? 0;\n\n const { mutate: markAllAsRead, isPending: isMarkingAll } = useMarkAllMessagesAsRead();\n\n const handleMarkAllAsRead = () => {\n markAllAsRead(undefined, {\n onSuccess: () => {\n toast.custom((t) => (\n <Toast variant=\"success\" message=\"Todas as notificações foram marcadas como lidas\" toastId={t} />\n ));\n },\n onError: () => {\n toast.custom((t) => (\n <Toast variant=\"error\" message=\"Erro ao marcar notificações como lidas\" toastId={t} />\n ));\n },\n });\n };\n\n return (\n <div className=\"flex flex-col gap-6 lg:gap-8\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-2\">\n <h1 className=\"title-large-semibold text-gray-950\">\n Notificações\n </h1>\n <p className=\"paragraph-small-regular text-gray-600 hidden lg:block\">\n Tenha controle total sobre páginas, experiências e conversões.\n </p>\n </div>\n <Button\n variant={\"secondary\"}\n className=\"h-10! lg:h-12! shrink-0\"\n onClick={handleMarkAllAsRead}\n disabled={isMarkingAll || totalUnread === 0}\n >\n {isMarkingAll ? <IconLoader2 size={20} className=\"animate-spin\" /> : <IconCheck size={20} />}\n <span className=\"lg:block hidden\">Marcar todos como lidos</span>\n <span className=\"lg:hidden\">Marcar como lidos</span>\n </Button>\n </div>\n <Tabs\n defaultValue=\"all\"\n className=\"flex flex-col w-full bg-transparent gap-6 lg:gap-8\"\n >\n <TabsList className=\"h-auto pb-0 bg-transparent\">\n <TabsTrigger className=\"gap-2\" value=\"all\">\n Todas as notificações{\" \"}\n <span className=\"text-gray-500\">({totalAll})</span>\n </TabsTrigger>\n <TabsTrigger className=\"gap-2\" value=\"unreads\" disabled={totalUnread === 0}>\n Não lidas{\" \"}\n <span className=\"text-gray-500\">({totalUnread})</span>\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"all\">\n <NotificationsList\n pages={allNotifications.data}\n isFetchingNextPage={allNotifications.isFetchingNextPage}\n hasNextPage={allNotifications.hasNextPage}\n fetchNextPage={allNotifications.fetchNextPage}\n />\n </TabsContent>\n\n <TabsContent value=\"unreads\">\n <NotificationsList\n pages={unreadNotifications.data}\n isFetchingNextPage={unreadNotifications.isFetchingNextPage}\n hasNextPage={unreadNotifications.hasNextPage}\n fetchNextPage={unreadNotifications.fetchNextPage}\n />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useTranslations } from "next-intl";
4
3
  import { IconCheck, IconCopy } from "@tabler/icons-react";
5
4
  import { toast } from "sonner";
6
5
  import { Toast } from "../feedback/Toast";
@@ -11,18 +10,15 @@ function CopyButton({
11
10
  textToCopy,
12
11
  size = 14,
13
12
  className,
14
- tooltipText,
15
- successMessage
13
+ tooltipText = "Copiar link",
14
+ successMessage = "Link copiado"
16
15
  }) {
17
- const translate = useTranslations();
18
- const resolvedTooltipText = tooltipText ?? translate("common.forms.copyButton.tooltipDefault");
19
- const resolvedSuccessMessage = successMessage ?? translate("common.forms.copyButton.successDefault");
20
16
  const { isCopied, copy } = useCopyToClipboard({
21
17
  onSuccess: () => {
22
- toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "success", message: resolvedSuccessMessage, toastId: t }));
18
+ toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "success", message: successMessage, toastId: t }));
23
19
  },
24
20
  onError: () => {
25
- toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "error", message: translate("common.forms.copyButton.errorMessage"), toastId: t }));
21
+ toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "error", message: "N\xE3o foi poss\xEDvel copiar o link", toastId: t }));
26
22
  }
27
23
  });
28
24
  return /* @__PURE__ */ jsxs(Tooltip, { children: [
@@ -37,7 +33,7 @@ function CopyButton({
37
33
  children: /* @__PURE__ */ jsx("span", { className: cn("cursor-pointer text-gray-500", className), children: isCopied ? /* @__PURE__ */ jsx(IconCheck, { size }) : /* @__PURE__ */ jsx(IconCopy, { size }) })
38
34
  }
39
35
  ),
40
- /* @__PURE__ */ jsx(TooltipContent, { children: isCopied ? translate("common.actions.copied") : resolvedTooltipText })
36
+ /* @__PURE__ */ jsx(TooltipContent, { children: isCopied ? "Copiado!" : tooltipText })
41
37
  ] });
42
38
  }
43
39
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/buttons/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { useTranslations } from 'next-intl';\nimport { IconCheck, IconCopy } from '@tabler/icons-react';\nimport { toast } from \"sonner\";\nimport { Toast } from \"../feedback/Toast\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../overlay/Tooltip\";\nimport useCopyToClipboard from \"../../../hooks/copy-to-clipboard.hook\";\nimport { cn } from \"../../../infra/utils/clsx\";\n\ninterface CopyButtonProps {\n textToCopy: string;\n size?: number;\n className?: string;\n tooltipText?: string;\n successMessage?: string;\n}\n\nexport function CopyButton({\n textToCopy,\n size = 14,\n className,\n tooltipText,\n successMessage,\n}: CopyButtonProps) {\n const translate = useTranslations();\n const resolvedTooltipText = tooltipText ?? translate('common.forms.copyButton.tooltipDefault');\n const resolvedSuccessMessage = successMessage ?? translate('common.forms.copyButton.successDefault');\n\n const { isCopied, copy } = useCopyToClipboard({\n onSuccess: () => {\n toast.custom((t) => (\n <Toast variant=\"success\" message={resolvedSuccessMessage} toastId={t} />\n ));\n },\n onError: () => {\n toast.custom((t) => (\n <Toast variant=\"error\" message={translate('common.forms.copyButton.errorMessage')} toastId={t} />\n ));\n },\n });\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n copy(textToCopy);\n }}\n >\n <span className={cn(\"cursor-pointer text-gray-500\", className)}>\n {isCopied ? <IconCheck size={size} /> : <IconCopy size={size} />}\n </span>\n </TooltipTrigger>\n <TooltipContent>{isCopied ? translate('common.actions.copied') : resolvedTooltipText}</TooltipContent>\n </Tooltip>\n );\n}\n"],"mappings":";AAgCQ,cAWJ,YAXI;AA9BR,SAAS,uBAAuB;AAChC,SAAS,WAAW,gBAAgB;AACpC,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,OAAO,wBAAwB;AAC/B,SAAS,UAAU;AAUZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,QAAM,YAAY,gBAAgB;AAClC,QAAM,sBAAsB,eAAe,UAAU,wCAAwC;AAC7F,QAAM,yBAAyB,kBAAkB,UAAU,wCAAwC;AAEnG,QAAM,EAAE,UAAU,KAAK,IAAI,mBAAmB;AAAA,IAC5C,WAAW,MAAM;AACf,YAAM,OAAO,CAAC,MACZ,oBAAC,SAAM,SAAQ,WAAU,SAAS,wBAAwB,SAAS,GAAG,CACvE;AAAA,IACH;AAAA,IACA,SAAS,MAAM;AACb,YAAM,OAAO,CAAC,MACZ,oBAAC,SAAM,SAAQ,SAAQ,SAAS,UAAU,sCAAsC,GAAG,SAAS,GAAG,CAChG;AAAA,IACH;AAAA,EACF,CAAC;AAED,SACE,qBAAC,WACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAO;AAAA,QACP,SAAS,CAAC,MAAwB;AAChC,YAAE,gBAAgB;AAClB,eAAK,UAAU;AAAA,QACjB;AAAA,QAEA,8BAAC,UAAK,WAAW,GAAG,gCAAgC,SAAS,GAC1D,qBAAW,oBAAC,aAAU,MAAY,IAAK,oBAAC,YAAS,MAAY,GAChE;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,kBAAgB,qBAAW,UAAU,uBAAuB,IAAI,qBAAoB;AAAA,KACvF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/buttons/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { IconCheck, IconCopy } from '@tabler/icons-react';\nimport { toast } from \"sonner\";\nimport { Toast } from \"../feedback/Toast\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../overlay/Tooltip\";\nimport useCopyToClipboard from \"../../../hooks/copy-to-clipboard.hook\";\nimport { cn } from \"../../../infra/utils/clsx\";\n\ninterface CopyButtonProps {\n textToCopy: string;\n size?: number;\n className?: string;\n tooltipText?: string;\n successMessage?: string;\n}\n\nexport function CopyButton({\n textToCopy,\n size = 14,\n className,\n tooltipText = \"Copiar link\",\n successMessage = \"Link copiado\",\n}: CopyButtonProps) {\n const { isCopied, copy } = useCopyToClipboard({\n onSuccess: () => {\n toast.custom((t) => (\n <Toast variant=\"success\" message={successMessage} toastId={t} />\n ));\n },\n onError: () => {\n toast.custom((t) => (\n <Toast variant=\"error\" message=\"Não foi possível copiar o link\" toastId={t} />\n ));\n },\n });\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n copy(textToCopy);\n }}\n >\n <span className={cn(\"cursor-pointer text-gray-500\", className)}>\n {isCopied ? <IconCheck size={size} /> : <IconCopy size={size} />}\n </span>\n </TooltipTrigger>\n <TooltipContent>{isCopied ? \"Copiado!\" : tooltipText}</TooltipContent>\n </Tooltip>\n );\n}\n"],"mappings":";AA2BQ,cAWJ,YAXI;AAzBR,SAAS,WAAW,gBAAgB;AACpC,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,OAAO,wBAAwB;AAC/B,SAAS,UAAU;AAUZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAAA,EACd,iBAAiB;AACnB,GAAoB;AAClB,QAAM,EAAE,UAAU,KAAK,IAAI,mBAAmB;AAAA,IAC5C,WAAW,MAAM;AACf,YAAM,OAAO,CAAC,MACZ,oBAAC,SAAM,SAAQ,WAAU,SAAS,gBAAgB,SAAS,GAAG,CAC/D;AAAA,IACH;AAAA,IACA,SAAS,MAAM;AACb,YAAM,OAAO,CAAC,MACZ,oBAAC,SAAM,SAAQ,SAAQ,SAAQ,wCAAiC,SAAS,GAAG,CAC7E;AAAA,IACH;AAAA,EACF,CAAC;AAED,SACE,qBAAC,WACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAO;AAAA,QACP,SAAS,CAAC,MAAwB;AAChC,YAAE,gBAAgB;AAClB,eAAK,UAAU;AAAA,QACjB;AAAA,QAEA,8BAAC,UAAK,WAAW,GAAG,gCAAgC,SAAS,GAC1D,qBAAW,oBAAC,aAAU,MAAY,IAAK,oBAAC,YAAS,MAAY,GAChE;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,kBAAgB,qBAAW,aAAa,aAAY;AAAA,KACvD;AAEJ;","names":[]}
@@ -9,7 +9,6 @@ import { Toast } from "../feedback/Toast";
9
9
  import { CardBrandIcon } from "./CardBrandIcons";
10
10
  import { useSetDefaultCard } from "../../../modules/cards/hooks/set-default-card.hook";
11
11
  import { useHandleDeleteCard } from "../../../modules/cards/hooks/handle-delete-card.hook";
12
- import { useTranslations } from "next-intl";
13
12
  function CardItem({
14
13
  card,
15
14
  isSelected,
@@ -20,7 +19,6 @@ function CardItem({
20
19
  onAfterDelete,
21
20
  onAfterSetDefault
22
21
  }) {
23
- const translate = useTranslations();
24
22
  const [popoverOpen, setPopoverOpen] = useState(false);
25
23
  const setDefaultCardMutation = useSetDefaultCard();
26
24
  const handleDeleteCard = useHandleDeleteCard({ onAfterDelete });
@@ -31,7 +29,7 @@ function CardItem({
31
29
  Toast,
32
30
  {
33
31
  variant: "success",
34
- message: translate("common.cards.item.setDefaultSuccess"),
32
+ message: "Cart\xE3o definido como padr\xE3o",
35
33
  toastId: t
36
34
  }
37
35
  ));
@@ -42,7 +40,7 @@ function CardItem({
42
40
  Toast,
43
41
  {
44
42
  variant: "error",
45
- message: translate("common.cards.item.setDefaultError"),
43
+ message: "Erro ao definir cart\xE3o padr\xE3o",
46
44
  toastId: t
47
45
  }
48
46
  ));
@@ -66,7 +64,7 @@ function CardItem({
66
64
  (card.number ?? "").replaceAll(/\D/g, "").slice(-4)
67
65
  ] })
68
66
  ] }),
69
- card.is_default && /* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-semibold text-zinc-600 bg-zinc-100 px-2 py-0.5 rounded-lg whitespace-nowrap", children: translate("common.cards.item.defaultBadge") }),
67
+ card.is_default && /* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-semibold text-zinc-600 bg-zinc-100 px-2 py-0.5 rounded-lg whitespace-nowrap", children: "Padr\xE3o" }),
70
68
  /* @__PURE__ */ jsx(CardBrandIcon, { brand: card.brand }),
71
69
  renderMenu && /* @__PURE__ */ jsxs(Popover, { open: popoverOpen, onOpenChange: setPopoverOpen, children: [
72
70
  /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -88,7 +86,7 @@ function CardItem({
88
86
  NavBarItem,
89
87
  {
90
88
  icon: /* @__PURE__ */ jsx(IconStar, { size: 18, className: "text-zinc-400" }),
91
- label: translate("common.cards.item.makeDefault"),
89
+ label: "Tornar padr\xE3o",
92
90
  onClick: () => {
93
91
  setPopoverOpen(false);
94
92
  handleSetDefault();
@@ -99,7 +97,7 @@ function CardItem({
99
97
  NavBarItem,
100
98
  {
101
99
  icon: /* @__PURE__ */ jsx(IconTrash, { size: 18, className: "text-zinc-400" }),
102
- label: translate("common.actions.delete"),
100
+ label: "Excluir",
103
101
  onClick: () => {
104
102
  setPopoverOpen(false);
105
103
  handleDeleteCard(card);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/data-display/CardItem.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport { IconDotsVertical, IconStar, IconTrash } from '@tabler/icons-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\nimport { NavBarItem } from '../../layouts/NavBarItem';\nimport { Toast } from '../feedback/Toast';\nimport { CardBrandIcon } from './CardBrandIcons';\nimport { useSetDefaultCard } from '../../../modules/cards/hooks/set-default-card.hook';\nimport { useHandleDeleteCard } from '../../../modules/cards/hooks/handle-delete-card.hook';\nimport type { Card } from '../../../modules/cards/types';\nimport { useTranslations } from 'next-intl';\n\ntype CardItemProps = {\n card: Card;\n isSelected?: boolean;\n onSelect?: () => void;\n showMenu?: boolean;\n hideDelete?: boolean;\n hideSetDefault?: boolean;\n onAfterDelete?: (card: Card) => void;\n onAfterSetDefault?: (card: Card) => void;\n};\n\nexport function CardItem({\n card,\n isSelected,\n onSelect,\n showMenu = true,\n hideDelete = false,\n hideSetDefault = false,\n onAfterDelete,\n onAfterSetDefault,\n}: CardItemProps) {\n const translate = useTranslations();\n const [popoverOpen, setPopoverOpen] = useState(false);\n\n const setDefaultCardMutation = useSetDefaultCard();\n\n const handleDeleteCard = useHandleDeleteCard({ onAfterDelete });\n\n const handleSetDefault = () => {\n setDefaultCardMutation.mutate(card.id.toString(), {\n onSuccess: () => {\n toast.custom((t) => (\n <Toast\n variant=\"success\"\n message={translate('common.cards.item.setDefaultSuccess')}\n toastId={t}\n />\n ));\n onAfterSetDefault?.(card);\n },\n onError: () => {\n toast.custom((t) => (\n <Toast\n variant=\"error\"\n message={translate('common.cards.item.setDefaultError')}\n toastId={t}\n />\n ));\n },\n });\n };\n\n const menuHasSetDefault = !hideSetDefault && !card.is_default;\n const menuHasDelete = !hideDelete;\n const hasMenuItems = menuHasSetDefault || menuHasDelete;\n const renderMenu = showMenu && hasMenuItems;\n\n return (\n <div\n className={`flex items-center p-4 cursor-pointer transition-colors gap-3 rounded-lg border ${\n isSelected\n ? 'bg-zinc-50 border-zinc-950'\n : 'bg-white border-zinc-200 hover:bg-zinc-50'\n }`}\n onClick={onSelect}\n >\n <div className=\"flex flex-col gap-0.5 flex-1 min-w-0\">\n <span className=\"paragraph-small-semibold text-zinc-950 truncate\">\n {card.name}\n </span>\n <span className=\"paragraph-small-medium text-zinc-950\">\n •••• {(card.number ?? '').replaceAll(/\\D/g, '').slice(-4)}\n </span>\n </div>\n {card.is_default && (\n <span className=\"paragraph-xsmall-semibold text-zinc-600 bg-zinc-100 px-2 py-0.5 rounded-lg whitespace-nowrap\">\n {translate('common.cards.item.defaultBadge')}\n </span>\n )}\n <CardBrandIcon brand={card.brand} />\n {renderMenu && (\n <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger asChild>\n <button\n className=\"size-10 flex items-center justify-center rounded-lg hover:bg-zinc-100 cursor-pointer\"\n onClick={(e) => e.stopPropagation()}\n >\n <IconDotsVertical className=\"size-5 text-zinc-500\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"w-[180px] p-2 bg-white rounded-2xl border border-zinc-200\"\n onClick={(e) => e.stopPropagation()}\n >\n {menuHasSetDefault && (\n <NavBarItem\n icon={<IconStar size={18} className=\"text-zinc-400\" />}\n label={translate('common.cards.item.makeDefault')}\n onClick={() => {\n setPopoverOpen(false);\n handleSetDefault();\n }}\n />\n )}\n {menuHasDelete && (\n <NavBarItem\n icon={<IconTrash size={18} className=\"text-zinc-400\" />}\n label={translate('common.actions.delete')}\n onClick={() => {\n setPopoverOpen(false);\n handleDeleteCard(card);\n }}\n />\n )}\n </PopoverContent>\n </Popover>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/data-display/CardItem.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { toast } from 'sonner';\nimport { IconDotsVertical, IconStar, IconTrash } from '@tabler/icons-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\nimport { NavBarItem } from '../../layouts/NavBarItem';\nimport { Toast } from '../feedback/Toast';\nimport { CardBrandIcon } from './CardBrandIcons';\nimport { useSetDefaultCard } from '../../../modules/cards/hooks/set-default-card.hook';\nimport { useHandleDeleteCard } from '../../../modules/cards/hooks/handle-delete-card.hook';\nimport type { Card } from '../../../modules/cards/types';\n\ntype CardItemProps = {\n card: Card;\n isSelected?: boolean;\n onSelect?: () => void;\n showMenu?: boolean;\n hideDelete?: boolean;\n hideSetDefault?: boolean;\n onAfterDelete?: (card: Card) => void;\n onAfterSetDefault?: (card: Card) => void;\n};\n\nexport function CardItem({\n card,\n isSelected,\n onSelect,\n showMenu = true,\n hideDelete = false,\n hideSetDefault = false,\n onAfterDelete,\n onAfterSetDefault,\n}: CardItemProps) {\n const [popoverOpen, setPopoverOpen] = useState(false);\n\n const setDefaultCardMutation = useSetDefaultCard();\n\n const handleDeleteCard = useHandleDeleteCard({ onAfterDelete });\n\n const handleSetDefault = () => {\n setDefaultCardMutation.mutate(card.id.toString(), {\n onSuccess: () => {\n toast.custom((t) => (\n <Toast\n variant=\"success\"\n message=\"Cartão definido como padrão\"\n toastId={t}\n />\n ));\n onAfterSetDefault?.(card);\n },\n onError: () => {\n toast.custom((t) => (\n <Toast\n variant=\"error\"\n message=\"Erro ao definir cartão padrão\"\n toastId={t}\n />\n ));\n },\n });\n };\n\n const menuHasSetDefault = !hideSetDefault && !card.is_default;\n const menuHasDelete = !hideDelete;\n const hasMenuItems = menuHasSetDefault || menuHasDelete;\n const renderMenu = showMenu && hasMenuItems;\n\n return (\n <div\n className={`flex items-center p-4 cursor-pointer transition-colors gap-3 rounded-lg border ${\n isSelected\n ? 'bg-zinc-50 border-zinc-950'\n : 'bg-white border-zinc-200 hover:bg-zinc-50'\n }`}\n onClick={onSelect}\n >\n <div className=\"flex flex-col gap-0.5 flex-1 min-w-0\">\n <span className=\"paragraph-small-semibold text-zinc-950 truncate\">\n {card.name}\n </span>\n <span className=\"paragraph-small-medium text-zinc-950\">\n •••• {(card.number ?? '').replaceAll(/\\D/g, '').slice(-4)}\n </span>\n </div>\n {card.is_default && (\n <span className=\"paragraph-xsmall-semibold text-zinc-600 bg-zinc-100 px-2 py-0.5 rounded-lg whitespace-nowrap\">\n Padrão\n </span>\n )}\n <CardBrandIcon brand={card.brand} />\n {renderMenu && (\n <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger asChild>\n <button\n className=\"size-10 flex items-center justify-center rounded-lg hover:bg-zinc-100 cursor-pointer\"\n onClick={(e) => e.stopPropagation()}\n >\n <IconDotsVertical className=\"size-5 text-zinc-500\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"w-[180px] p-2 bg-white rounded-2xl border border-zinc-200\"\n onClick={(e) => e.stopPropagation()}\n >\n {menuHasSetDefault && (\n <NavBarItem\n icon={<IconStar size={18} className=\"text-zinc-400\" />}\n label=\"Tornar padrão\"\n onClick={() => {\n setPopoverOpen(false);\n handleSetDefault();\n }}\n />\n )}\n {menuHasDelete && (\n <NavBarItem\n icon={<IconTrash size={18} className=\"text-zinc-400\" />}\n label=\"Excluir\"\n onClick={() => {\n setPopoverOpen(false);\n handleDeleteCard(card);\n }}\n />\n )}\n </PopoverContent>\n </Popover>\n )}\n </div>\n );\n}\n"],"mappings":";AA4CU,cAsCF,YAtCE;AA1CV,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,SAAS,kBAAkB,UAAU,iBAAiB;AACtD,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,kBAAkB;AAC3B,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AAc7B,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AAEpD,QAAM,yBAAyB,kBAAkB;AAEjD,QAAM,mBAAmB,oBAAoB,EAAE,cAAc,CAAC;AAE9D,QAAM,mBAAmB,MAAM;AAC7B,2BAAuB,OAAO,KAAK,GAAG,SAAS,GAAG;AAAA,MAChD,WAAW,MAAM;AACf,cAAM,OAAO,CAAC,MACZ;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAQ;AAAA,YACR,SAAS;AAAA;AAAA,QACX,CACD;AACD,4BAAoB,IAAI;AAAA,MAC1B;AAAA,MACA,SAAS,MAAM;AACb,cAAM,OAAO,CAAC,MACZ;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAQ;AAAA,YACR,SAAS;AAAA;AAAA,QACX,CACD;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,CAAC,kBAAkB,CAAC,KAAK;AACnD,QAAM,gBAAgB,CAAC;AACvB,QAAM,eAAe,qBAAqB;AAC1C,QAAM,aAAa,YAAY;AAE/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,kFACT,aACI,+BACA,2CACN;AAAA,MACA,SAAS;AAAA,MAET;AAAA,6BAAC,SAAI,WAAU,wCACb;AAAA,8BAAC,UAAK,WAAU,mDACb,eAAK,MACR;AAAA,UACA,qBAAC,UAAK,WAAU,wCAAuC;AAAA;AAAA,aAC9C,KAAK,UAAU,IAAI,WAAW,OAAO,EAAE,EAAE,MAAM,EAAE;AAAA,aAC1D;AAAA,WACF;AAAA,QACC,KAAK,cACJ,oBAAC,UAAK,WAAU,gGAA+F,uBAE/G;AAAA,QAEF,oBAAC,iBAAc,OAAO,KAAK,OAAO;AAAA,QACjC,cACC,qBAAC,WAAQ,MAAM,aAAa,cAAc,gBACxC;AAAA,8BAAC,kBAAe,SAAO,MACrB;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAElC,8BAAC,oBAAiB,WAAU,wBAAuB;AAAA;AAAA,UACrD,GACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,WAAU;AAAA,cACV,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAEjC;AAAA,qCACC;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM,oBAAC,YAAS,MAAM,IAAI,WAAU,iBAAgB;AAAA,oBACpD,OAAM;AAAA,oBACN,SAAS,MAAM;AACb,qCAAe,KAAK;AACpB,uCAAiB;AAAA,oBACnB;AAAA;AAAA,gBACF;AAAA,gBAED,iBACC;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM,oBAAC,aAAU,MAAM,IAAI,WAAU,iBAAgB;AAAA,oBACrD,OAAM;AAAA,oBACN,SAAS,MAAM;AACb,qCAAe,KAAK;AACpB,uCAAiB,IAAI;AAAA,oBACvB;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UAEJ;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}