@greatapps/common 1.1.697 → 1.1.699

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 (557) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  11. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  14. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  15. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  16. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  17. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  18. package/dist/components/embeds/ClarityEmbed.mjs.map +1 -1
  19. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  20. package/dist/components/embeds/EmbedWidgets.mjs.map +1 -1
  21. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  22. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  24. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  25. package/dist/components/layouts/NavBar.mjs.map +1 -1
  26. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  27. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  28. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  29. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  30. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  31. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  32. package/dist/components/modals/CreditsDisabledModal.mjs.map +1 -1
  33. package/dist/components/modals/Modals.mjs.map +1 -1
  34. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  37. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  38. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  39. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  40. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  41. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  42. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  43. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  44. package/dist/components/navigation/SubscriptionBanner.mjs.map +1 -1
  45. package/dist/components/navigation/TrialBanner.mjs.map +1 -1
  46. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  47. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  48. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  49. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  50. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  51. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  52. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  53. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  54. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  58. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  59. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  60. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  61. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  62. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  63. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  64. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  65. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  66. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  67. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  68. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  69. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  70. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  71. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  72. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  73. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  74. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  75. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  76. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  77. package/dist/components/ui/form/FormField.mjs.map +1 -1
  78. package/dist/components/ui/form/Input.mjs.map +1 -1
  79. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  80. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  81. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  82. package/dist/components/ui/form/Select.mjs +1 -1
  83. package/dist/components/ui/form/Select.mjs.map +1 -1
  84. package/dist/components/ui/form/Switch.mjs.map +1 -1
  85. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  86. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  87. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  88. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  89. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  90. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  91. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  92. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  93. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  94. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  95. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  96. package/dist/handlers.mjs.map +1 -1
  97. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  98. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  99. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  100. package/dist/hooks/useRouter.mjs.map +1 -1
  101. package/dist/http.mjs.map +1 -1
  102. package/dist/i18n/config.mjs.map +1 -1
  103. package/dist/i18n/country-language.mjs.map +1 -1
  104. package/dist/i18n/messages/en-us.mjs.map +1 -1
  105. package/dist/i18n/messages/es-es.mjs.map +1 -1
  106. package/dist/i18n/messages/index.mjs.map +1 -1
  107. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  108. package/dist/i18n/normalize.mjs.map +1 -1
  109. package/dist/i18n/resolve-locale.mjs.map +1 -1
  110. package/dist/i18n.mjs.map +1 -1
  111. package/dist/index.mjs.map +1 -1
  112. package/dist/infra/http/api-fetch.mjs.map +1 -1
  113. package/dist/infra/route/parse-id.mjs.map +1 -1
  114. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  115. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  116. package/dist/infra/route/search-params.mjs.map +1 -1
  117. package/dist/infra/utils/array.mjs.map +1 -1
  118. package/dist/infra/utils/date.mjs.map +1 -1
  119. package/dist/middleware.mjs.map +1 -1
  120. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  121. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  122. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  123. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  124. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  125. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  126. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  127. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  128. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  129. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  132. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  133. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  134. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  135. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  136. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  137. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  138. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  139. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  140. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  141. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  142. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  143. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  147. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  148. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  149. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  150. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  151. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  152. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  153. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  154. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  155. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  156. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  157. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  158. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  159. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  160. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  161. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  162. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  163. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  164. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  168. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  169. package/dist/modules/cards/types.mjs.map +1 -1
  170. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  171. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  172. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  173. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  174. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  175. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  176. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  177. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  178. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  179. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  180. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  181. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  182. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  183. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  184. package/dist/modules/images/utils/base64.mjs.map +1 -1
  185. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  186. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  187. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  188. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  189. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  190. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  191. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  192. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  193. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  194. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  195. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  196. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  197. package/dist/modules/plans/services/plans.service.mjs +1 -1
  198. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  199. package/dist/modules/plans/types/plan.type.mjs +5 -1
  200. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  201. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  202. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  203. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  204. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  205. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  210. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  211. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  212. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  215. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  216. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  217. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  226. package/dist/modules/projects/services/project-users.service.mjs +2 -2
  227. package/dist/modules/projects/services/project-users.service.mjs.map +1 -1
  228. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  229. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  230. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  231. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  232. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  233. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  234. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  235. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  236. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  237. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  238. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  240. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  241. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  242. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  243. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  244. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  248. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  249. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  250. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  251. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  252. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  253. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  254. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  255. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  256. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  257. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  258. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  259. package/dist/providers/auth.provider.mjs.map +1 -1
  260. package/dist/providers/navigation.provider.mjs.map +1 -1
  261. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  262. package/dist/route.mjs.map +1 -1
  263. package/dist/store/useAccountModals.mjs.map +1 -1
  264. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  265. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  266. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  267. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  268. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  269. package/dist/utils/constants/br-states.mjs.map +1 -1
  270. package/dist/utils/countries.mjs.map +1 -1
  271. package/dist/utils/format/currency.mjs.map +1 -1
  272. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  273. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  274. package/dist/utils/next-navigation.mjs.map +1 -1
  275. package/dist/utils/redirect.mjs.map +1 -1
  276. package/dist/utils/safeMutationAction.mjs.map +1 -1
  277. package/dist/utils/safeServerAction.mjs.map +1 -1
  278. package/dist/utils/withAction.mjs.map +1 -1
  279. package/package.json +115 -115
  280. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  281. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  282. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  283. package/src/components/account/DeleteAccountModal.tsx +160 -160
  284. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  285. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  286. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  287. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  288. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  289. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  290. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  291. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  292. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  293. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  294. package/src/components/account/sections/SecuritySection.tsx +102 -102
  295. package/src/components/account/sections/TokenSection.tsx +85 -85
  296. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  297. package/src/components/embeds/CrispEmbed.tsx +195 -195
  298. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  299. package/src/components/embeds/FrillEmbed.tsx +146 -146
  300. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  301. package/src/components/layouts/AppNavBar.tsx +40 -40
  302. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  303. package/src/components/layouts/NavBar.tsx +228 -228
  304. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  305. package/src/components/layouts/ProfilePopover.tsx +191 -191
  306. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  307. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  308. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  309. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  310. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  311. package/src/components/modals/Modals.tsx +25 -25
  312. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  313. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  314. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  315. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  316. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  317. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  318. package/src/components/navigation/NavItemsContext.ts +20 -20
  319. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  320. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  321. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  322. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  323. package/src/components/navigation/TrialBanner.tsx +54 -54
  324. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  325. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  326. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  327. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  328. package/src/components/pages/NotFoundPage.tsx +75 -75
  329. package/src/components/pages/notifications/Notifications.tsx +190 -190
  330. package/src/components/ui/buttons/Button.tsx +77 -77
  331. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  332. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  333. package/src/components/ui/data-display/Accordion.tsx +81 -81
  334. package/src/components/ui/data-display/Badge.tsx +47 -47
  335. package/src/components/ui/data-display/Card.tsx +93 -93
  336. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  337. package/src/components/ui/data-display/CardItem.tsx +135 -135
  338. package/src/components/ui/data-display/Pagination.tsx +126 -126
  339. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  340. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  341. package/src/components/ui/data-display/Separator.tsx +29 -29
  342. package/src/components/ui/data-display/Table.tsx +117 -117
  343. package/src/components/ui/data-display/Tabs.tsx +67 -67
  344. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  345. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  346. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  347. package/src/components/ui/feedback/Progress.tsx +40 -40
  348. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  349. package/src/components/ui/feedback/Toast.tsx +104 -104
  350. package/src/components/ui/form/Calendar.tsx +228 -228
  351. package/src/components/ui/form/Checkbox.tsx +31 -31
  352. package/src/components/ui/form/ComboboxField.tsx +159 -159
  353. package/src/components/ui/form/DatePicker.tsx +100 -100
  354. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  355. package/src/components/ui/form/FormField.tsx +133 -133
  356. package/src/components/ui/form/Input.tsx +20 -20
  357. package/src/components/ui/form/InputOtp.tsx +80 -80
  358. package/src/components/ui/form/PhoneInput.tsx +210 -210
  359. package/src/components/ui/form/RadioGroup.tsx +45 -45
  360. package/src/components/ui/form/Select.tsx +200 -200
  361. package/src/components/ui/form/Switch.tsx +32 -32
  362. package/src/components/ui/form/Textarea.tsx +19 -19
  363. package/src/components/ui/overlay/Command.tsx +185 -185
  364. package/src/components/ui/overlay/Dialog.tsx +153 -153
  365. package/src/components/ui/overlay/Popover.tsx +49 -49
  366. package/src/components/ui/overlay/Sheet.tsx +170 -170
  367. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  368. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  369. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  370. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  371. package/src/components/widgets/ImageUpload/index.ts +3 -3
  372. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  373. package/src/handlers.ts +22 -22
  374. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  375. package/src/hooks/useAuthQueryKey.ts +32 -32
  376. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  377. package/src/hooks/useRouter.ts +38 -38
  378. package/src/http.ts +1 -1
  379. package/src/i18n/config.ts +17 -17
  380. package/src/i18n/country-language.ts +60 -60
  381. package/src/i18n/messages/en-us.ts +519 -519
  382. package/src/i18n/messages/es-es.ts +520 -520
  383. package/src/i18n/messages/index.ts +24 -24
  384. package/src/i18n/messages/pt-br.ts +543 -543
  385. package/src/i18n/normalize.ts +15 -15
  386. package/src/i18n/resolve-locale.ts +77 -77
  387. package/src/i18n.ts +10 -10
  388. package/src/index.ts +584 -584
  389. package/src/infra/http/api-fetch.ts +39 -39
  390. package/src/infra/route/parse-id.ts +9 -9
  391. package/src/infra/route/parse-numeric.ts +16 -16
  392. package/src/infra/route/safe-route-handler.ts +16 -16
  393. package/src/infra/route/search-params.ts +9 -9
  394. package/src/infra/utils/array.ts +167 -167
  395. package/src/infra/utils/date.ts +59 -59
  396. package/src/middleware.ts +4 -4
  397. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  398. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  399. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  400. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  401. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  402. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  403. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  404. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  405. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  406. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  407. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  408. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  409. package/src/modules/accounts/services/account-token.service.ts +52 -52
  410. package/src/modules/accounts/services/account.service.ts +243 -243
  411. package/src/modules/accounts/types.ts +230 -230
  412. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  413. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  414. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  415. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  416. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  417. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  418. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  419. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  420. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  421. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  422. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  423. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  424. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  425. package/src/modules/auth/types/management-permission.type.ts +14 -14
  426. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  427. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  428. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  429. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  430. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  431. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  432. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  433. package/src/modules/cards/actions/create-card.action.ts +9 -9
  434. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  435. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  436. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  437. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  438. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  439. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  440. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  441. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  442. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  443. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  444. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  445. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  446. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  447. package/src/modules/cards/services/cards.service.ts +136 -136
  448. package/src/modules/cards/types.ts +52 -52
  449. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  450. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  451. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  452. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  453. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  454. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  455. package/src/modules/charges/services/charges.service.ts +63 -63
  456. package/src/modules/charges/types/charge.type.ts +68 -68
  457. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  458. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  459. package/src/modules/images/actions/process-image.action.ts +40 -40
  460. package/src/modules/images/constants/image.constants.ts +11 -11
  461. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  462. package/src/modules/images/services/image-processing.service.ts +75 -75
  463. package/src/modules/images/types/image.type.ts +54 -54
  464. package/src/modules/images/utils/base64.ts +26 -26
  465. package/src/modules/images/utils/compress-image.ts +20 -20
  466. package/src/modules/images/utils/crop-image.ts +68 -68
  467. package/src/modules/images/utils/validate-image.ts +86 -86
  468. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  469. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  470. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  471. package/src/modules/pages/services/pages.service.ts +27 -27
  472. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  473. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  474. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  475. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  476. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  477. package/src/modules/plans/services/plans.service.ts +136 -135
  478. package/src/modules/plans/types/plan.type.ts +79 -75
  479. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  480. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  481. package/src/modules/projects/actions/create-project.action.ts +9 -9
  482. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  483. package/src/modules/projects/actions/find-project.action.ts +8 -8
  484. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  485. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  486. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  487. package/src/modules/projects/actions/update-project.action.ts +9 -9
  488. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  489. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  490. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  491. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  492. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  493. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  494. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  495. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  496. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  497. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  498. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  499. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  500. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  501. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  502. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  503. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  504. package/src/modules/projects/services/project-users.service.ts +3 -2
  505. package/src/modules/projects/services/projects.service.ts +156 -156
  506. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  507. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  508. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  509. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  510. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  511. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  512. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  513. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  514. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  515. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  516. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  517. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  518. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  519. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  520. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  521. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  522. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  523. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  524. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  525. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  526. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  527. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  528. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  529. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  530. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  531. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  532. package/src/modules/users/hooks/messages.hook.ts +69 -69
  533. package/src/modules/users/services/messages.service.ts +49 -49
  534. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  535. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  536. package/src/modules/whitelabel/schema.ts +84 -84
  537. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  538. package/src/providers/auth.provider.tsx +264 -264
  539. package/src/providers/navigation.provider.tsx +99 -99
  540. package/src/providers/whitelabel.provider.tsx +90 -90
  541. package/src/route.ts +4 -4
  542. package/src/store/useAccountModals.ts +85 -85
  543. package/src/store/useBuyCreditsModal.ts +21 -21
  544. package/src/store/useCreditsDisabledModal.ts +11 -11
  545. package/src/store/useDesktopSidebarStore.ts +47 -47
  546. package/src/store/useMdSidebarStore.ts +34 -34
  547. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  548. package/src/utils/constants/br-states.ts +29 -29
  549. package/src/utils/countries.ts +224 -224
  550. package/src/utils/format/currency.ts +70 -70
  551. package/src/utils/intl/cookie-domain.ts +29 -29
  552. package/src/utils/intl/locale-cookie.ts +18 -18
  553. package/src/utils/next-navigation.ts +7 -7
  554. package/src/utils/redirect.ts +78 -78
  555. package/src/utils/safeMutationAction.ts +24 -24
  556. package/src/utils/safeServerAction.ts +21 -21
  557. package/src/utils/withAction.ts +13 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/CircularProgress.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\r\nimport {\r\n calculateRadius,\r\n calculateCircumference,\r\n calculatePercentage,\r\n calculateCircularProgressOffset,\r\n} from \"../../../infra/utils/percentage\";\r\n\r\ninterface CircularProgressProps {\r\n current: number;\r\n total: number;\r\n size?: number;\r\n strokeWidth?: number;\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function CircularProgress({\r\n current,\r\n total,\r\n size = 62,\r\n strokeWidth = 3,\r\n children,\r\n}: CircularProgressProps) {\r\n const radius = calculateRadius(size, strokeWidth);\r\n const circumference = calculateCircumference(radius);\r\n const percentage = calculatePercentage(current, total);\r\n const offset = calculateCircularProgressOffset(percentage, circumference);\r\n\r\n return (\r\n <div\r\n className=\"relative flex items-center justify-center\"\r\n style={{ width: size, height: size }}\r\n role=\"progressbar\"\r\n aria-valuenow={current}\r\n aria-valuemin={0}\r\n aria-valuemax={total}\r\n // i18n-TODO: aria-label hardcoded — CircularProgress has no 'use client' directive and\r\n // receives no translate prop, so useTranslations() cannot be called here without\r\n // converting it to a client component. Key to use: common.forms.circularProgress.ariaLabel ('Progresso').\r\n // Either add 'use client' + useTranslations(), or accept a translate prop from the caller.\r\n aria-label=\"Progresso\"\r\n >\r\n <svg width={size} height={size} className=\"absolute\">\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke=\"var(--color-gray-50)\"\r\n strokeWidth={strokeWidth}\r\n fill=\"white\"\r\n />\r\n\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke=\"var(--color-gray-950)\"\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={offset}\r\n strokeLinecap=\"round\"\r\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\r\n className=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n\r\n <div className=\"relative z-10 flex items-center justify-center w-[50px] h-[50px] rounded-full bg-gray-50 paragraph-small-semibold\">\r\n {children ?? (\r\n <>\r\n <span className=\"text-gray-600\">{current}</span>\r\n <span className=\"text-gray-500\">/</span>\r\n <span className=\"text-gray-600\">{total}</span>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"mappings":"AA0CM,SA2BI,UA1BF,KADF;AAzCN;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUQ,SAAR,iBAAkC;AAAA,EACvC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AACF,GAA0B;AACxB,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,gBAAgB,uBAAuB,MAAM;AACnD,QAAM,aAAa,oBAAoB,SAAS,KAAK;AACrD,QAAM,SAAS,gCAAgC,YAAY,aAAa;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,MACnC,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MAKf,cAAW;AAAA,MAEX;AAAA,6BAAC,SAAI,OAAO,MAAM,QAAQ,MAAM,WAAU,YACxC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,GAAG;AAAA,cACH,QAAO;AAAA,cACP;AAAA,cACA,MAAK;AAAA;AAAA,UACP;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,GAAG;AAAA,cACH,QAAO;AAAA,cACP;AAAA,cACA,MAAK;AAAA,cACL,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,cAClB,eAAc;AAAA,cACd,WAAW,cAAc,OAAO,CAAC,IAAI,OAAO,CAAC;AAAA,cAC7C,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QAEA,oBAAC,SAAI,WAAU,qHACZ,sBACC,iCACE;AAAA,8BAAC,UAAK,WAAU,iBAAiB,mBAAQ;AAAA,UACzC,oBAAC,UAAK,WAAU,iBAAgB,eAAC;AAAA,UACjC,oBAAC,UAAK,WAAU,iBAAiB,iBAAM;AAAA,WACzC,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/CircularProgress.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n calculateRadius,\n calculateCircumference,\n calculatePercentage,\n calculateCircularProgressOffset,\n} from \"../../../infra/utils/percentage\";\n\ninterface CircularProgressProps {\n current: number;\n total: number;\n size?: number;\n strokeWidth?: number;\n children?: ReactNode;\n}\n\nexport default function CircularProgress({\n current,\n total,\n size = 62,\n strokeWidth = 3,\n children,\n}: CircularProgressProps) {\n const radius = calculateRadius(size, strokeWidth);\n const circumference = calculateCircumference(radius);\n const percentage = calculatePercentage(current, total);\n const offset = calculateCircularProgressOffset(percentage, circumference);\n\n return (\n <div\n className=\"relative flex items-center justify-center\"\n style={{ width: size, height: size }}\n role=\"progressbar\"\n aria-valuenow={current}\n aria-valuemin={0}\n aria-valuemax={total}\n // i18n-TODO: aria-label hardcoded — CircularProgress has no 'use client' directive and\n // receives no translate prop, so useTranslations() cannot be called here without\n // converting it to a client component. Key to use: common.forms.circularProgress.ariaLabel ('Progresso').\n // Either add 'use client' + useTranslations(), or accept a translate prop from the caller.\n aria-label=\"Progresso\"\n >\n <svg width={size} height={size} className=\"absolute\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"var(--color-gray-50)\"\n strokeWidth={strokeWidth}\n fill=\"white\"\n />\n\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"var(--color-gray-950)\"\n strokeWidth={strokeWidth}\n fill=\"none\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className=\"transition-all duration-300 ease-in-out\"\n />\n </svg>\n\n <div className=\"relative z-10 flex items-center justify-center w-[50px] h-[50px] rounded-full bg-gray-50 paragraph-small-semibold\">\n {children ?? (\n <>\n <span className=\"text-gray-600\">{current}</span>\n <span className=\"text-gray-500\">/</span>\n <span className=\"text-gray-600\">{total}</span>\n </>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"AA0CM,SA2BI,UA1BF,KADF;AAzCN;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUQ,SAAR,iBAAkC;AAAA,EACvC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AACF,GAA0B;AACxB,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,gBAAgB,uBAAuB,MAAM;AACnD,QAAM,aAAa,oBAAoB,SAAS,KAAK;AACrD,QAAM,SAAS,gCAAgC,YAAY,aAAa;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,MACnC,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MAKf,cAAW;AAAA,MAEX;AAAA,6BAAC,SAAI,OAAO,MAAM,QAAQ,MAAM,WAAU,YACxC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,GAAG;AAAA,cACH,QAAO;AAAA,cACP;AAAA,cACA,MAAK;AAAA;AAAA,UACP;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,GAAG;AAAA,cACH,QAAO;AAAA,cACP;AAAA,cACA,MAAK;AAAA,cACL,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,cAClB,eAAc;AAAA,cACd,WAAW,cAAc,OAAO,CAAC,IAAI,OAAO,CAAC;AAAA,cAC7C,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QAEA,oBAAC,SAAI,WAAU,qHACZ,sBACC,iCACE;AAAA,8BAAC,UAAK,WAAU,iBAAiB,mBAAQ;AAAA,UACzC,oBAAC,UAAK,WAAU,iBAAgB,eAAC;AAAA,UACjC,oBAAC,UAAK,WAAU,iBAAiB,iBAAM;AAAA,WACzC,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/DefaultCircularProgress.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useTranslations } from 'next-intl';\r\nimport {\r\n calculateRadius,\r\n calculateCircumference,\r\n calculatePercentage,\r\n calculateCircularProgressOffset,\r\n} from \"../../../infra/utils/percentage\";\r\nimport { useIsDefaultWhitelabel } from \"../../../providers/whitelabel.provider\";\r\n\r\ninterface CircularProgressProps {\r\n current: number;\r\n total: number;\r\n size?: number;\r\n strokeWidth?: number;\r\n}\r\n\r\nexport default function DefaultCircularProgress({\r\n current,\r\n total,\r\n size = 62,\r\n strokeWidth = 3,\r\n}: CircularProgressProps) {\r\n const translate = useTranslations();\r\n const isDefaultWl = useIsDefaultWhitelabel();\r\n const radius = calculateRadius(size, strokeWidth);\r\n const circumference = calculateCircumference(radius);\r\n const percentage = calculatePercentage(current, total);\r\n const offset = calculateCircularProgressOffset(percentage, circumference);\r\n\r\n return (\r\n <div\r\n className=\"relative flex items-center justify-center\"\r\n style={{ width: size, height: size }}\r\n role=\"progressbar\"\r\n aria-valuenow={current}\r\n aria-valuemin={0}\r\n aria-valuemax={total}\r\n aria-label={translate('common.forms.circularProgress.ariaLabel')}\r\n >\r\n <svg width={size} height={size} className=\"absolute\">\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke=\"var(--color-zinc-200)\"\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n />\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={isDefaultWl ? \"var(--color-cyan-300)\" : \"var(--color-zinc-300)\"}\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={offset}\r\n strokeLinecap=\"round\"\r\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\r\n className=\"transition-all duration-300 ease-in-out\"\r\n />\r\n </svg>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAyCM,SACE,KADF;AAvCN,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AASxB,SAAR,wBAAyC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAChB,GAA0B;AACxB,QAAM,YAAY,gBAAgB;AAClC,QAAM,cAAc,uBAAuB;AAC3C,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,gBAAgB,uBAAuB,MAAM;AACnD,QAAM,aAAa,oBAAoB,SAAS,KAAK;AACrD,QAAM,SAAS,gCAAgC,YAAY,aAAa;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,MACnC,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAY,UAAU,yCAAyC;AAAA,MAE/D,+BAAC,SAAI,OAAO,MAAM,QAAQ,MAAM,WAAU,YACxC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,IAAI,OAAO;AAAA,YACX,GAAG;AAAA,YACH,QAAO;AAAA,YACP;AAAA,YACA,MAAK;AAAA;AAAA,QACP;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,IAAI,OAAO;AAAA,YACX,GAAG;AAAA,YACH,QAAQ,cAAc,0BAA0B;AAAA,YAChD;AAAA,YACA,MAAK;AAAA,YACL,iBAAiB;AAAA,YACjB,kBAAkB;AAAA,YAClB,eAAc;AAAA,YACd,WAAW,cAAc,OAAO,CAAC,IAAI,OAAO,CAAC;AAAA,YAC7C,WAAU;AAAA;AAAA,QACZ;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/DefaultCircularProgress.tsx"],"sourcesContent":["'use client';\n\nimport { useTranslations } from 'next-intl';\nimport {\n calculateRadius,\n calculateCircumference,\n calculatePercentage,\n calculateCircularProgressOffset,\n} from \"../../../infra/utils/percentage\";\nimport { useIsDefaultWhitelabel } from \"../../../providers/whitelabel.provider\";\n\ninterface CircularProgressProps {\n current: number;\n total: number;\n size?: number;\n strokeWidth?: number;\n}\n\nexport default function DefaultCircularProgress({\n current,\n total,\n size = 62,\n strokeWidth = 3,\n}: CircularProgressProps) {\n const translate = useTranslations();\n const isDefaultWl = useIsDefaultWhitelabel();\n const radius = calculateRadius(size, strokeWidth);\n const circumference = calculateCircumference(radius);\n const percentage = calculatePercentage(current, total);\n const offset = calculateCircularProgressOffset(percentage, circumference);\n\n return (\n <div\n className=\"relative flex items-center justify-center\"\n style={{ width: size, height: size }}\n role=\"progressbar\"\n aria-valuenow={current}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-label={translate('common.forms.circularProgress.ariaLabel')}\n >\n <svg width={size} height={size} className=\"absolute\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke=\"var(--color-zinc-200)\"\n strokeWidth={strokeWidth}\n fill=\"none\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n stroke={isDefaultWl ? \"var(--color-cyan-300)\" : \"var(--color-zinc-300)\"}\n strokeWidth={strokeWidth}\n fill=\"none\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className=\"transition-all duration-300 ease-in-out\"\n />\n </svg>\n </div>\n );\n}\n"],"mappings":";AAyCM,SACE,KADF;AAvCN,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AASxB,SAAR,wBAAyC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAChB,GAA0B;AACxB,QAAM,YAAY,gBAAgB;AAClC,QAAM,cAAc,uBAAuB;AAC3C,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,gBAAgB,uBAAuB,MAAM;AACnD,QAAM,aAAa,oBAAoB,SAAS,KAAK;AACrD,QAAM,SAAS,gCAAgC,YAAY,aAAa;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,OAAO,MAAM,QAAQ,KAAK;AAAA,MACnC,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAY,UAAU,yCAAyC;AAAA,MAE/D,+BAAC,SAAI,OAAO,MAAM,QAAQ,MAAM,WAAU,YACxC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,IAAI,OAAO;AAAA,YACX,GAAG;AAAA,YACH,QAAO;AAAA,YACP;AAAA,YACA,MAAK;AAAA;AAAA,QACP;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,IAAI,OAAO;AAAA,YACX,GAAG;AAAA,YACH,QAAQ,cAAc,0BAA0B;AAAA,YAChD;AAAA,YACA,MAAK;AAAA,YACL,iBAAiB;AAAA,YACjB,kBAAkB;AAAA,YAClB,eAAc;AAAA,YACd,WAAW,cAAc,OAAO,CAAC,IAAI,OAAO,CAAC;AAAA,YAC7C,WAAU;AAAA;AAAA,QACZ;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/LoadingOverlay.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { ReactNode } from 'react';\r\n\r\ninterface LoadingOverlayProps {\r\n isLoading: boolean;\r\n message?: string;\r\n icon?: ReactNode;\r\n}\r\n\r\nexport function LoadingOverlay({ isLoading, message, icon }: LoadingOverlayProps) {\r\n if (!isLoading) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-[2px]\">\r\n <div className=\"bg-white rounded-2xl shadow-xl px-16 py-12 flex flex-col items-center gap-6 min-w-[380px]\">\r\n <div className=\"relative flex items-center justify-center w-20 h-20\">\r\n <div className=\"absolute inset-0 border-[5px] border-gray-100 rounded-full\" />\r\n <div className=\"absolute inset-0 border-[5px] border-transparent border-t-black rounded-full animate-spin\" />\r\n {icon && (\r\n <div className=\"relative z-20 flex items-center justify-center w-14 h-14 bg-gray-100 rounded-full\">\r\n {icon}\r\n </div>\r\n )}\r\n </div>\r\n <span className=\"font-bold text-gray-900 text-lg\">{message}</span>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAgBQ,SACE,KADF;AAND,SAAS,eAAe,EAAE,WAAW,SAAS,KAAK,GAAwB;AAChF,MAAI,CAAC,UAAW,QAAO;AAEvB,SACE,oBAAC,SAAI,WAAU,2FACb,+BAAC,SAAI,WAAU,6FACb;AAAA,yBAAC,SAAI,WAAU,uDACb;AAAA,0BAAC,SAAI,WAAU,8DAA6D;AAAA,MAC5E,oBAAC,SAAI,WAAU,6FAA4F;AAAA,MAC1G,QACC,oBAAC,SAAI,WAAU,qFACZ,gBACH;AAAA,OAEJ;AAAA,IACA,oBAAC,UAAK,WAAU,mCAAmC,mBAAQ;AAAA,KAC7D,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/LoadingOverlay.tsx"],"sourcesContent":["'use client';\n\nimport { ReactNode } from 'react';\n\ninterface LoadingOverlayProps {\n isLoading: boolean;\n message?: string;\n icon?: ReactNode;\n}\n\nexport function LoadingOverlay({ isLoading, message, icon }: LoadingOverlayProps) {\n if (!isLoading) return null;\n\n return (\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-[2px]\">\n <div className=\"bg-white rounded-2xl shadow-xl px-16 py-12 flex flex-col items-center gap-6 min-w-[380px]\">\n <div className=\"relative flex items-center justify-center w-20 h-20\">\n <div className=\"absolute inset-0 border-[5px] border-gray-100 rounded-full\" />\n <div className=\"absolute inset-0 border-[5px] border-transparent border-t-black rounded-full animate-spin\" />\n {icon && (\n <div className=\"relative z-20 flex items-center justify-center w-14 h-14 bg-gray-100 rounded-full\">\n {icon}\n </div>\n )}\n </div>\n <span className=\"font-bold text-gray-900 text-lg\">{message}</span>\n </div>\n </div>\n );\n}\n"],"mappings":";AAgBQ,SACE,KADF;AAND,SAAS,eAAe,EAAE,WAAW,SAAS,KAAK,GAAwB;AAChF,MAAI,CAAC,UAAW,QAAO;AAEvB,SACE,oBAAC,SAAI,WAAU,2FACb,+BAAC,SAAI,WAAU,6FACb;AAAA,yBAAC,SAAI,WAAU,uDACb;AAAA,0BAAC,SAAI,WAAU,8DAA6D;AAAA,MAC5E,oBAAC,SAAI,WAAU,6FAA4F;AAAA,MAC1G,QACC,oBAAC,SAAI,WAAU,qFACZ,gBACH;AAAA,OAEJ;AAAA,IACA,oBAAC,UAAK,WAAU,mCAAmC,mBAAQ;AAAA,KAC7D,GACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/Progress.tsx"],"sourcesContent":["'use client';\r\n\r\n\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\ninterface ProgressProps extends React.ComponentProps<typeof ProgressPrimitive.Root> {\r\n indicatorColor?: string\r\n}\r\n\r\nfunction Progress({\r\n className,\r\n value,\r\n indicatorColor,\r\n ...props\r\n}: ProgressProps) {\r\n return (\r\n <ProgressPrimitive.Root\r\n data-slot=\"progress\"\r\n className={cn(\r\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <ProgressPrimitive.Indicator\r\n data-slot=\"progress-indicator\"\r\n className={cn(\r\n \"bg-primary h-full w-full flex-1 transition-all rounded-full\",\r\n indicatorColor\r\n )}\r\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\r\n />\r\n </ProgressPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Progress }\r\n"],"mappings":";AA2BM;AAtBN,YAAY,uBAAuB;AACnC,SAAS,UAAU;AAMnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO,EAAE,WAAW,eAAe,OAAO,SAAS,EAAE,KAAK;AAAA;AAAA,MAC5D;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/Progress.tsx"],"sourcesContent":["'use client';\n\n\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\nimport { cn } from \"../../../infra/utils/clsx\"\n\ninterface ProgressProps extends React.ComponentProps<typeof ProgressPrimitive.Root> {\n indicatorColor?: string\n}\n\nfunction Progress({\n className,\n value,\n indicatorColor,\n ...props\n}: ProgressProps) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\n \"bg-primary h-full w-full flex-1 transition-all rounded-full\",\n indicatorColor\n )}\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n"],"mappings":";AA2BM;AAtBN,YAAY,uBAAuB;AACnC,SAAS,UAAU;AAMnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,OAAO,EAAE,WAAW,eAAe,OAAO,SAAS,EAAE,KAAK;AAAA;AAAA,MAC5D;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/Skeleton.tsx"],"sourcesContent":["import { cn } from '../../../infra/utils/clsx';\r\n\r\nexport function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\r\n return <div className={cn('skeleton rounded-md', className)} {...props} />;\r\n}\r\n"],"mappings":"AAGS;AAHT,SAAS,UAAU;AAEZ,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAyC;AACtF,SAAO,oBAAC,SAAI,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAC1E;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/Skeleton.tsx"],"sourcesContent":["import { cn } from '../../../infra/utils/clsx';\n\nexport function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('skeleton rounded-md', className)} {...props} />;\n}\n"],"mappings":"AAGS;AAHT,SAAS,UAAU;AAEZ,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAyC;AACtF,SAAO,oBAAC,SAAI,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAC1E;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/feedback/Toast.tsx"],"sourcesContent":["'use client';\r\n\r\nimport * as React from \"react\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\nimport { IconCircleCheck, IconCircleX, IconAlertCircle, IconInfoCircle, IconCircle, IconX } from \"@tabler/icons-react\"\r\nimport { toast } from \"sonner\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\nimport { useIsDefaultWhitelabel } from \"../../../providers/whitelabel.provider\"\r\nimport { Button } from \"../buttons/Button\"\r\n\r\nconst toastVariants = cva(\r\n \"w-full bg-white rounded-lg p-4 shadow-lg backdrop-blur-sm transition-all\",\r\n {\r\n variants: {\r\n variant: {\r\n success: \"\",\r\n error: \"\",\r\n warning: \"\",\r\n info: \"\",\r\n default: \"\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nconst toastIconContainerVariants = cva(\r\n \"size-10 rounded-lg flex items-center justify-center shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n success: \"bg-green-50 text-green-500\",\r\n error: \"bg-red-50 text-red-500\",\r\n warning: \"bg-yellow-50 text-yellow-400\",\r\n info: \"\",\r\n default: \"bg-gray-50 text-gray-950\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nconst TOAST_ICONS = {\r\n success: IconCircleCheck,\r\n error: IconCircleX,\r\n warning: IconAlertCircle,\r\n info: IconInfoCircle,\r\n default: IconCircle,\r\n} as const\r\n\r\ninterface ToastProps extends VariantProps<typeof toastIconContainerVariants> {\r\n message?: React.ReactNode\r\n icon?: React.ReactNode\r\n children?: React.ReactNode\r\n className?: string\r\n toastId?: string | number\r\n}\r\n\r\nfunction Toast({\r\n variant = \"default\",\r\n message,\r\n icon,\r\n children,\r\n className,\r\n toastId,\r\n}: ToastProps) {\r\n const isDefaultWl = useIsDefaultWhitelabel();\r\n const Icon = variant ? TOAST_ICONS[variant] : null\r\n\r\n return (\r\n <div data-slot=\"toast\" className={cn(toastVariants({ variant }), className, \"md:min-w-[310px] lg:min-w-[310px]\")}>\r\n {children ? (\r\n children\r\n ) : (\r\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\r\n <div className={cn(\r\n toastIconContainerVariants({ variant }),\r\n variant === \"info\" && (isDefaultWl ? \"bg-zinc-100 text-pages-500\" : \"bg-zinc-100 text-zinc-500\")\r\n )}>\r\n {icon || (Icon && <Icon size={16} />)}\r\n </div>\r\n\r\n <span className=\"w-full text-gray-600 paragraph-small-medium\">\r\n {message}\r\n </span>\r\n <Button\r\n variant={\"ghost\"}\r\n className=\"size-8 rounded-full\"\r\n onClick={() => toastId && toast.dismiss(toastId)}\r\n >\r\n <IconX size={18} />\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nexport { Toast, toastVariants, toastIconContainerVariants }\r\nexport type { ToastProps }\r\n"],"mappings":";AA8EQ,SAKsB,KALtB;AA3ER,SAAS,WAA8B;AACvC,SAAS,iBAAiB,aAAa,iBAAiB,gBAAgB,YAAY,aAAa;AACjG,SAAS,aAAa;AACtB,SAAS,UAAU;AACnB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAEvB,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,MAAM,6BAA6B;AAAA,EACjC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AACX;AAUA,SAAS,MAAM;AAAA,EACb,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,cAAc,uBAAuB;AAC3C,QAAM,OAAO,UAAU,YAAY,OAAO,IAAI;AAE9C,SACE,oBAAC,SAAI,aAAU,SAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,WAAW,mCAAmC,GAC5G,qBACC,WAEA,qBAAC,SAAI,WAAU,0CACb;AAAA,wBAAC,SAAI,WAAW;AAAA,MACd,2BAA2B,EAAE,QAAQ,CAAC;AAAA,MACtC,YAAY,WAAW,cAAc,+BAA+B;AAAA,IACtE,GACG,kBAAS,QAAQ,oBAAC,QAAK,MAAM,IAAI,GACpC;AAAA,IAEA,oBAAC,UAAK,WAAU,+CACb,mBACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QACV,SAAS,MAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,QAE/C,8BAAC,SAAM,MAAM,IAAI;AAAA;AAAA,IACnB;AAAA,KACF,GAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/feedback/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { IconCircleCheck, IconCircleX, IconAlertCircle, IconInfoCircle, IconCircle, IconX } from \"@tabler/icons-react\"\nimport { toast } from \"sonner\"\nimport { cn } from \"../../../infra/utils/clsx\"\nimport { useIsDefaultWhitelabel } from \"../../../providers/whitelabel.provider\"\nimport { Button } from \"../buttons/Button\"\n\nconst toastVariants = cva(\n \"w-full bg-white rounded-lg p-4 shadow-lg backdrop-blur-sm transition-all\",\n {\n variants: {\n variant: {\n success: \"\",\n error: \"\",\n warning: \"\",\n info: \"\",\n default: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst toastIconContainerVariants = cva(\n \"size-10 rounded-lg flex items-center justify-center shrink-0\",\n {\n variants: {\n variant: {\n success: \"bg-green-50 text-green-500\",\n error: \"bg-red-50 text-red-500\",\n warning: \"bg-yellow-50 text-yellow-400\",\n info: \"\",\n default: \"bg-gray-50 text-gray-950\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst TOAST_ICONS = {\n success: IconCircleCheck,\n error: IconCircleX,\n warning: IconAlertCircle,\n info: IconInfoCircle,\n default: IconCircle,\n} as const\n\ninterface ToastProps extends VariantProps<typeof toastIconContainerVariants> {\n message?: React.ReactNode\n icon?: React.ReactNode\n children?: React.ReactNode\n className?: string\n toastId?: string | number\n}\n\nfunction Toast({\n variant = \"default\",\n message,\n icon,\n children,\n className,\n toastId,\n}: ToastProps) {\n const isDefaultWl = useIsDefaultWhitelabel();\n const Icon = variant ? TOAST_ICONS[variant] : null\n\n return (\n <div data-slot=\"toast\" className={cn(toastVariants({ variant }), className, \"md:min-w-[310px] lg:min-w-[310px]\")}>\n {children ? (\n children\n ) : (\n <div className=\"flex items-center gap-3 flex-1 min-w-0\">\n <div className={cn(\n toastIconContainerVariants({ variant }),\n variant === \"info\" && (isDefaultWl ? \"bg-zinc-100 text-pages-500\" : \"bg-zinc-100 text-zinc-500\")\n )}>\n {icon || (Icon && <Icon size={16} />)}\n </div>\n\n <span className=\"w-full text-gray-600 paragraph-small-medium\">\n {message}\n </span>\n <Button\n variant={\"ghost\"}\n className=\"size-8 rounded-full\"\n onClick={() => toastId && toast.dismiss(toastId)}\n >\n <IconX size={18} />\n </Button>\n </div>\n )}\n </div>\n )\n}\n\nexport { Toast, toastVariants, toastIconContainerVariants }\nexport type { ToastProps }\n"],"mappings":";AA8EQ,SAKsB,KALtB;AA3ER,SAAS,WAA8B;AACvC,SAAS,iBAAiB,aAAa,iBAAiB,gBAAgB,YAAY,aAAa;AACjG,SAAS,aAAa;AACtB,SAAS,UAAU;AACnB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AAEvB,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,MAAM,6BAA6B;AAAA,EACjC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AACX;AAUA,SAAS,MAAM;AAAA,EACb,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,cAAc,uBAAuB;AAC3C,QAAM,OAAO,UAAU,YAAY,OAAO,IAAI;AAE9C,SACE,oBAAC,SAAI,aAAU,SAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,WAAW,mCAAmC,GAC5G,qBACC,WAEA,qBAAC,SAAI,WAAU,0CACb;AAAA,wBAAC,SAAI,WAAW;AAAA,MACd,2BAA2B,EAAE,QAAQ,CAAC;AAAA,MACtC,YAAY,WAAW,cAAc,+BAA+B;AAAA,IACtE,GACG,kBAAS,QAAQ,oBAAC,QAAK,MAAM,IAAI,GACpC;AAAA,IAEA,oBAAC,UAAK,WAAU,+CACb,mBACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QACV,SAAS,MAAM,WAAW,MAAM,QAAQ,OAAO;AAAA,QAE/C,8BAAC,SAAM,MAAM,IAAI;AAAA;AAAA,IACnB;AAAA,KACF,GAEJ;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Calendar.tsx"],"sourcesContent":["'use client';\r\n\r\n\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ptBR } from \"date-fns/locale\"\r\nimport {\r\n IconChevronDown,\r\n IconChevronLeft,\r\n IconChevronRight,\r\n} from \"@tabler/icons-react\"\r\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\r\nimport { Button, buttonVariants } from \"../buttons/Button\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nfunction Calendar({\r\n className,\r\n classNames,\r\n showOutsideDays = true,\r\n captionLayout = \"label\",\r\n buttonVariant = \"ghost\",\r\n formatters,\r\n components,\r\n ...props\r\n}: React.ComponentProps<typeof DayPicker> & {\r\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\r\n}) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n return (\r\n <DayPicker\r\n locale={ptBR}\r\n showOutsideDays={showOutsideDays}\r\n className={cn(\r\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent\",\r\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\r\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\r\n className\r\n )}\r\n captionLayout={captionLayout}\r\n formatters={{\r\n formatWeekdayName: (date) => {\r\n const weekdays = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];\r\n return weekdays[date.getDay()];\r\n },\r\n formatCaption: (date) => {\r\n const month = date.toLocaleDateString('pt-BR', { month: 'long' });\r\n const year = date.getFullYear();\r\n return `${month.charAt(0).toUpperCase() + month.slice(1)} / ${year}`;\r\n },\r\n formatMonthDropdown: (date) =>\r\n date.toLocaleString(\"default\", { month: \"short\" }),\r\n ...formatters,\r\n }}\r\n classNames={{\r\n root: cn(\"w-fit\", defaultClassNames.root),\r\n months: cn(\r\n \"flex gap-4 flex-col md:flex-row relative\",\r\n defaultClassNames.months\r\n ),\r\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\r\n nav: cn(\r\n \"flex items-center gap-1 w-auto absolute top-0 right-0\",\r\n defaultClassNames.nav\r\n ),\r\n button_previous: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\r\n defaultClassNames.button_previous\r\n ),\r\n button_next: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\r\n defaultClassNames.button_next\r\n ),\r\n month_caption: cn(\r\n \"flex items-center justify-start h-(--cell-size) w-full pr-(--cell-size)\",\r\n defaultClassNames.month_caption\r\n ),\r\n dropdowns: cn(\r\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\r\n defaultClassNames.dropdowns\r\n ),\r\n dropdown_root: cn(\r\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\r\n defaultClassNames.dropdown_root\r\n ),\r\n dropdown: cn(\r\n \"absolute bg-popover inset-0 opacity-0\",\r\n defaultClassNames.dropdown\r\n ),\r\n caption_label: cn(\r\n \"select-none font-medium\",\r\n captionLayout === \"label\"\r\n ? \"text-sm\"\r\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\r\n defaultClassNames.caption_label\r\n ),\r\n table: \"w-full border-collapse\",\r\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\r\n weekday: cn(\r\n \"text-gray-500 font-medium text-sm w-10 h-10 flex items-center justify-center uppercase\",\r\n defaultClassNames.weekday\r\n ),\r\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\r\n week_number_header: cn(\r\n \"select-none w-(--cell-size)\",\r\n defaultClassNames.week_number_header\r\n ),\r\n week_number: cn(\r\n \"text-[0.8rem] select-none text-muted-foreground\",\r\n defaultClassNames.week_number\r\n ),\r\n day: cn(\r\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\r\n props.showWeekNumber\r\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\r\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\r\n defaultClassNames.day\r\n ),\r\n range_start: cn(\r\n \"rounded-l-md bg-accent\",\r\n defaultClassNames.range_start\r\n ),\r\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\r\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\r\n today: cn(\r\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\r\n defaultClassNames.today\r\n ),\r\n outside: cn(\r\n \"text-muted-foreground aria-selected:text-muted-foreground\",\r\n defaultClassNames.outside\r\n ),\r\n disabled: cn(\r\n \"text-muted-foreground opacity-50\",\r\n defaultClassNames.disabled\r\n ),\r\n hidden: cn(\"invisible\", defaultClassNames.hidden),\r\n ...classNames,\r\n }}\r\n components={{\r\n Root: ({ className, rootRef, ...props }) => {\r\n return (\r\n <div\r\n data-slot=\"calendar\"\r\n ref={rootRef}\r\n className={cn(className)}\r\n {...props}\r\n />\r\n )\r\n },\r\n Chevron: ({ className, orientation, ...props }) => {\r\n if (orientation === \"left\") {\r\n return (\r\n <IconChevronLeft className={cn(\"size-4\", className)} {...props} />\r\n )\r\n }\r\n\r\n if (orientation === \"right\") {\r\n return (\r\n <IconChevronRight\r\n className={cn(\"size-4\", className)}\r\n {...props}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <IconChevronDown className={cn(\"size-4\", className)} {...props} />\r\n )\r\n },\r\n DayButton: CalendarDayButton,\r\n WeekNumber: ({ children, ...props }) => {\r\n return (\r\n <td {...props}>\r\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\r\n {children}\r\n </div>\r\n </td>\r\n )\r\n },\r\n ...components,\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CalendarDayButton({\r\n className,\r\n day,\r\n modifiers,\r\n ...props\r\n}: React.ComponentProps<typeof DayButton>) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n const ref = React.useRef<HTMLButtonElement>(null)\r\n React.useEffect(() => {\r\n if (modifiers.focused) ref.current?.focus()\r\n }, [modifiers.focused])\r\n\r\n return (\r\n <Button\r\n ref={ref}\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n data-day={day.date.toLocaleDateString()}\r\n data-selected-single={\r\n modifiers.selected &&\r\n !modifiers.range_start &&\r\n !modifiers.range_end &&\r\n !modifiers.range_middle\r\n }\r\n data-range-start={modifiers.range_start}\r\n data-range-end={modifiers.range_end}\r\n data-range-middle={modifiers.range_middle}\r\n className={cn(\r\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\r\n defaultClassNames.day,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Calendar, CalendarDayButton }\r\n"],"mappings":"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","names":["className","props"]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Calendar.tsx"],"sourcesContent":["'use client';\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { ptBR } from \"date-fns/locale\"\nimport {\n IconChevronDown,\n IconChevronLeft,\n IconChevronRight,\n} from \"@tabler/icons-react\"\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\"\nimport { Button, buttonVariants } from \"../buttons/Button\"\nimport { cn } from \"../../../infra/utils/clsx\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n locale={ptBR}\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatWeekdayName: (date) => {\n const weekdays = ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'];\n return weekdays[date.getDay()];\n },\n formatCaption: (date) => {\n const month = date.toLocaleDateString('pt-BR', { month: 'long' });\n const year = date.getFullYear();\n return `${month.charAt(0).toUpperCase() + month.slice(1)} / ${year}`;\n },\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-auto absolute top-0 right-0\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-start h-(--cell-size) w-full pr-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-gray-500 font-medium text-sm w-10 h-10 flex items-center justify-center uppercase\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <IconChevronLeft className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <IconChevronRight\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <IconChevronDown className={cn(\"size-4\", className)} {...props} />\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n"],"mappings":"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","names":["className","props"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Checkbox.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { IconCheck } from '@tabler/icons-react';\r\nimport { cn } from \"../../../infra/utils/clsx\";\r\n\r\nfunction Checkbox({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\r\n return (\r\n <CheckboxPrimitive.Root\r\n data-slot=\"checkbox\"\r\n className={cn(\r\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary-hover data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary-hover data-[state=checked]:border-primary-hover focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4.5 shrink-0 rounded-[4px] border-[1.6px] shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 hover:border-gray-950 cursor-pointer\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator\r\n data-slot=\"checkbox-indicator\"\r\n className=\"grid place-content-center text-current transition-none\"\r\n >\r\n <IconCheck className=\"size-3 text-current\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n );\r\n}\r\n\r\nexport { Checkbox };\r\n"],"mappings":";AAwBQ;AArBR,YAAY,uBAAuB;AACnC,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAEnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,8BAAC,aAAU,WAAU,uBAAsB;AAAA;AAAA,MAC7C;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Checkbox.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { IconCheck } from '@tabler/icons-react';\nimport { cn } from \"../../../infra/utils/clsx\";\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary-hover data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary-hover data-[state=checked]:border-primary-hover focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4.5 shrink-0 rounded-[4px] border-[1.6px] shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 hover:border-gray-950 cursor-pointer\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <IconCheck className=\"size-3 text-current\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n"],"mappings":";AAwBQ;AArBR,YAAY,uBAAuB;AACnC,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAEnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,8BAAC,aAAU,WAAU,uBAAsB;AAAA;AAAA,MAC7C;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/ComboboxField.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useMemo } from 'react';\r\nimport { useTranslations } from 'next-intl';\r\nimport { IconCheck, IconChevronDown, IconSearch } from '@tabler/icons-react';\r\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\r\nimport { cn } from '../../../infra/utils/clsx';\r\n\r\nexport type ComboboxOption = {\r\n value: string;\r\n label: string;\r\n displayValue?: string;\r\n};\r\n\r\ninterface ComboboxFieldProps {\r\n options: ComboboxOption[];\r\n label?: string;\r\n placeholder?: string;\r\n searchPlaceholder?: string;\r\n emptyMessage?: string;\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n disabled?: boolean;\r\n icon?: React.ReactNode;\r\n className?: string;\r\n containerClassName?: string;\r\n}\r\n\r\nexport function ComboboxField({\r\n options,\r\n label,\r\n placeholder,\r\n searchPlaceholder,\r\n emptyMessage,\r\n value,\r\n onChange,\r\n disabled = false,\r\n icon,\r\n className,\r\n containerClassName,\r\n}: ComboboxFieldProps) {\r\n const translate = useTranslations();\r\n const resolvedPlaceholder = placeholder ?? translate('common.forms.combobox.placeholder');\r\n const resolvedSearchPlaceholder = searchPlaceholder ?? translate('common.forms.combobox.searchPlaceholder');\r\n const resolvedEmptyMessage = emptyMessage ?? translate('common.forms.combobox.emptyMessage');\r\n const [open, setOpen] = useState(false);\r\n const [search, setSearch] = useState('');\r\n\r\n const selectedOption = useMemo(\r\n () => options.find((o) => o.value === value),\r\n [options, value]\r\n );\r\n\r\n const filteredOptions = useMemo(() => {\r\n const q = search.trim().toLowerCase();\r\n if (!q) return options;\r\n return options.filter((o) => o.label.toLowerCase().includes(q));\r\n }, [options, search]);\r\n\r\n const handleSelect = (optionValue: string) => {\r\n onChange?.(optionValue);\r\n setOpen(false);\r\n setSearch('');\r\n };\r\n\r\n return (\r\n <div className={cn('flex flex-col gap-1.5', containerClassName)}>\r\n {label && (\r\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold\">\r\n <span className=\"text-gray-600\">{label}</span>\r\n </div>\r\n )}\r\n\r\n <Popover\r\n open={open}\r\n onOpenChange={(v) => {\r\n if (!disabled) {\r\n setOpen(v);\r\n if (!v) setSearch('');\r\n }\r\n }}\r\n >\r\n <PopoverTrigger asChild>\r\n <button\r\n type=\"button\"\r\n disabled={disabled}\r\n className={cn(\r\n 'paragraph-small-medium w-full h-10 text-gray-950 px-4 transition-colors',\r\n 'flex items-center justify-between gap-2 rounded-md border bg-transparent',\r\n 'border-gray-200 hover:border-gray-400 focus:border-gray-950 focus:outline-none',\r\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\r\n className\r\n )}\r\n >\r\n <span className={cn('truncate text-left', !selectedOption && 'text-gray-400')}>\r\n {selectedOption\r\n ? (selectedOption.displayValue ?? selectedOption.label)\r\n : resolvedPlaceholder}\r\n </span>\r\n {icon ?? (\r\n <IconChevronDown\r\n className={cn(\r\n 'size-4 opacity-50 shrink-0 transition-all duration-200',\r\n open && 'rotate-180 opacity-100 text-gray-950'\r\n )}\r\n />\r\n )}\r\n </button>\r\n </PopoverTrigger>\r\n\r\n <PopoverContent\r\n className=\"p-0 overflow-hidden rounded-md border shadow-md\"\r\n align=\"start\"\r\n sideOffset={4}\r\n style={{ width: 'var(--radix-popover-trigger-width)' }}\r\n onWheel={(e) => e.stopPropagation()}\r\n >\r\n <div className=\"flex items-center gap-2 border-b border-gray-100 px-3 h-9\">\r\n <IconSearch className=\"size-4 shrink-0 opacity-50 text-gray-500\" />\r\n <input\r\n autoFocus\r\n placeholder={resolvedSearchPlaceholder}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n className=\"flex h-full w-full bg-transparent text-sm outline-none placeholder:text-gray-400 paragraph-small-medium text-gray-950\"\r\n />\r\n </div>\r\n\r\n <div className=\"overflow-y-auto max-h-[280px] p-1\">\r\n {filteredOptions.length === 0 ? (\r\n <p className=\"py-6 text-center paragraph-small-medium text-gray-500\">{resolvedEmptyMessage}</p>\r\n ) : (\r\n filteredOptions.map((option) => {\r\n const isSelected = value === option.value;\r\n return (\r\n <div\r\n key={option.value}\r\n className={cn(\r\n 'flex items-center gap-2 rounded-sm px-2 h-9 cursor-pointer select-none',\r\n 'paragraph-small-medium text-gray-950',\r\n 'hover:bg-gray-100',\r\n isSelected && 'bg-gray-50'\r\n )}\r\n onClick={() => handleSelect(option.value)}\r\n >\r\n <span className=\"flex-1 truncate\">{option.label}</span>\r\n {isSelected && <IconCheck className=\"size-4 shrink-0 text-pages-600\" />}\r\n </div>\r\n );\r\n })\r\n )}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ComboboxField;\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/ComboboxField.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useMemo } from 'react';\nimport { useTranslations } from 'next-intl';\nimport { IconCheck, IconChevronDown, IconSearch } from '@tabler/icons-react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../overlay/Popover';\nimport { cn } from '../../../infra/utils/clsx';\n\nexport type ComboboxOption = {\n value: string;\n label: string;\n displayValue?: string;\n};\n\ninterface ComboboxFieldProps {\n options: ComboboxOption[];\n label?: string;\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n icon?: React.ReactNode;\n className?: string;\n containerClassName?: string;\n}\n\nexport function ComboboxField({\n options,\n label,\n placeholder,\n searchPlaceholder,\n emptyMessage,\n value,\n onChange,\n disabled = false,\n icon,\n className,\n containerClassName,\n}: ComboboxFieldProps) {\n const translate = useTranslations();\n const resolvedPlaceholder = placeholder ?? translate('common.forms.combobox.placeholder');\n const resolvedSearchPlaceholder = searchPlaceholder ?? translate('common.forms.combobox.searchPlaceholder');\n const resolvedEmptyMessage = emptyMessage ?? translate('common.forms.combobox.emptyMessage');\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === value),\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return options;\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, search]);\n\n const handleSelect = (optionValue: string) => {\n onChange?.(optionValue);\n setOpen(false);\n setSearch('');\n };\n\n return (\n <div className={cn('flex flex-col gap-1.5', containerClassName)}>\n {label && (\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold\">\n <span className=\"text-gray-600\">{label}</span>\n </div>\n )}\n\n <Popover\n open={open}\n onOpenChange={(v) => {\n if (!disabled) {\n setOpen(v);\n if (!v) setSearch('');\n }\n }}\n >\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'paragraph-small-medium w-full h-10 text-gray-950 px-4 transition-colors',\n 'flex items-center justify-between gap-2 rounded-md border bg-transparent',\n 'border-gray-200 hover:border-gray-400 focus:border-gray-950 focus:outline-none',\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n className\n )}\n >\n <span className={cn('truncate text-left', !selectedOption && 'text-gray-400')}>\n {selectedOption\n ? (selectedOption.displayValue ?? selectedOption.label)\n : resolvedPlaceholder}\n </span>\n {icon ?? (\n <IconChevronDown\n className={cn(\n 'size-4 opacity-50 shrink-0 transition-all duration-200',\n open && 'rotate-180 opacity-100 text-gray-950'\n )}\n />\n )}\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"p-0 overflow-hidden rounded-md border shadow-md\"\n align=\"start\"\n sideOffset={4}\n style={{ width: 'var(--radix-popover-trigger-width)' }}\n onWheel={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-2 border-b border-gray-100 px-3 h-9\">\n <IconSearch className=\"size-4 shrink-0 opacity-50 text-gray-500\" />\n <input\n autoFocus\n placeholder={resolvedSearchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"flex h-full w-full bg-transparent text-sm outline-none placeholder:text-gray-400 paragraph-small-medium text-gray-950\"\n />\n </div>\n\n <div className=\"overflow-y-auto max-h-[280px] p-1\">\n {filteredOptions.length === 0 ? (\n <p className=\"py-6 text-center paragraph-small-medium text-gray-500\">{resolvedEmptyMessage}</p>\n ) : (\n filteredOptions.map((option) => {\n const isSelected = value === option.value;\n return (\n <div\n key={option.value}\n className={cn(\n 'flex items-center gap-2 rounded-sm px-2 h-9 cursor-pointer select-none',\n 'paragraph-small-medium text-gray-950',\n 'hover:bg-gray-100',\n isSelected && 'bg-gray-50'\n )}\n onClick={() => handleSelect(option.value)}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && <IconCheck className=\"size-4 shrink-0 text-pages-600\" />}\n </div>\n );\n })\n )}\n </div>\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n\nexport default ComboboxField;\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/DatePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, forwardRef, useEffect } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar } from \"./Calendar\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/Popover\";\r\nimport { cn } from \"../../../infra/utils/clsx\";\r\n\r\n// Converte string ISO (yyyy-MM-dd) para Date no fuso horário local\r\n// Evita bug de timezone onde new Date(\"2025-08-02\") interpreta como UTC\r\nconst isoParaDataLocal = (iso: string): Date => {\r\n const [ano, mes, dia] = iso.split(\"-\").map(Number);\r\n return new Date(ano, mes - 1, dia);\r\n};\r\n\r\ninterface DatePickerProps {\r\n value?: string;\r\n onChange?: (date: string | undefined) => void;\r\n placeholder?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(\r\n (\r\n { value, onChange, placeholder, className, disabled },\r\n ref,\r\n ) => {\r\n const translate = useTranslations();\r\n const resolvedPlaceholder = placeholder ?? translate('common.forms.datePicker.placeholder');\r\n const [open, setOpen] = useState(false);\r\n const [date, setDate] = useState<Date | undefined>(() => {\r\n return value ? isoParaDataLocal(value) : undefined;\r\n });\r\n\r\n // Sincroniza estado interno quando value mudar externamente\r\n useEffect(() => {\r\n if (value) {\r\n setDate(isoParaDataLocal(value));\r\n } else {\r\n setDate(undefined);\r\n }\r\n }, [value]);\r\n\r\n const handleDateSelect = (selectedDate: Date | undefined) => {\r\n setDate(selectedDate);\r\n\r\n if (selectedDate) {\r\n onChange?.(format(selectedDate, \"yyyy-MM-dd\"));\r\n setOpen(false); // Fecha o popover após seleção\r\n } else {\r\n onChange?.(undefined);\r\n }\r\n };\r\n\r\n const displayText = date ? format(date, \"dd/MM/yyyy\") : resolvedPlaceholder;\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <button\r\n ref={ref}\r\n disabled={disabled}\r\n className={cn(\r\n \"flex items-center gap-2 px-4 h-10 border rounded-lg transition-colors w-full justify-start\",\r\n \"border-gray-200 hover:border-gray-400 focus-within:border-gray-950\",\r\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\r\n className,\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"paragraph-small-medium\",\r\n date ? \"text-gray-950\" : \"text-gray-500\",\r\n )}\r\n >\r\n {displayText}\r\n </span>\r\n </button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className=\"w-auto p-0 bg-white rounded-2xl shadow-md border border-gray-200\"\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <div className=\"p-3\">\r\n <Calendar\r\n mode=\"single\"\r\n selected={date}\r\n onSelect={handleDateSelect}\r\n />\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n },\r\n);\r\n\r\nDatePicker.displayName = \"DatePicker\";\r\n"],"mappings":";AA2DM,SAYM,KAZN;AAzDN,SAAS,UAAU,YAAY,iBAAiB;AAChD,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,UAAU;AAInB,MAAM,mBAAmB,CAAC,QAAsB;AAC9C,QAAM,CAAC,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACjD,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG;AACnC;AAUO,MAAM,aAAa;AAAA,EACxB,CACE,EAAE,OAAO,UAAU,aAAa,WAAW,SAAS,GACpD,QACG;AACH,UAAM,YAAY,gBAAgB;AAClC,UAAM,sBAAsB,eAAe,UAAU,qCAAqC;AAC1F,UAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,UAAM,CAAC,MAAM,OAAO,IAAI,SAA2B,MAAM;AACvD,aAAO,QAAQ,iBAAiB,KAAK,IAAI;AAAA,IAC3C,CAAC;AAGD,cAAU,MAAM;AACd,UAAI,OAAO;AACT,gBAAQ,iBAAiB,KAAK,CAAC;AAAA,MACjC,OAAO;AACL,gBAAQ,MAAS;AAAA,MACnB;AAAA,IACF,GAAG,CAAC,KAAK,CAAC;AAEV,UAAM,mBAAmB,CAAC,iBAAmC;AAC3D,cAAQ,YAAY;AAEpB,UAAI,cAAc;AAChB,mBAAW,OAAO,cAAc,YAAY,CAAC;AAC7C,gBAAQ,KAAK;AAAA,MACf,OAAO;AACL,mBAAW,MAAS;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,OAAO,MAAM,YAAY,IAAI;AAExD,WACE,qBAAC,WAAQ,MAAY,cAAc,SACjC;AAAA,0BAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO,kBAAkB;AAAA,cAC3B;AAAA,cAEC;AAAA;AAAA,UACH;AAAA;AAAA,MACF,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,YAAY;AAAA,UAEZ,8BAAC,SAAI,WAAU,OACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA;AAAA,UACZ,GACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/DatePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, forwardRef, useEffect } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport { format } from \"date-fns\";\nimport { Calendar } from \"./Calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/Popover\";\nimport { cn } from \"../../../infra/utils/clsx\";\n\n// Converte string ISO (yyyy-MM-dd) para Date no fuso horário local\n// Evita bug de timezone onde new Date(\"2025-08-02\") interpreta como UTC\nconst isoParaDataLocal = (iso: string): Date => {\n const [ano, mes, dia] = iso.split(\"-\").map(Number);\n return new Date(ano, mes - 1, dia);\n};\n\ninterface DatePickerProps {\n value?: string;\n onChange?: (date: string | undefined) => void;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(\n (\n { value, onChange, placeholder, className, disabled },\n ref,\n ) => {\n const translate = useTranslations();\n const resolvedPlaceholder = placeholder ?? translate('common.forms.datePicker.placeholder');\n const [open, setOpen] = useState(false);\n const [date, setDate] = useState<Date | undefined>(() => {\n return value ? isoParaDataLocal(value) : undefined;\n });\n\n // Sincroniza estado interno quando value mudar externamente\n useEffect(() => {\n if (value) {\n setDate(isoParaDataLocal(value));\n } else {\n setDate(undefined);\n }\n }, [value]);\n\n const handleDateSelect = (selectedDate: Date | undefined) => {\n setDate(selectedDate);\n\n if (selectedDate) {\n onChange?.(format(selectedDate, \"yyyy-MM-dd\"));\n setOpen(false); // Fecha o popover após seleção\n } else {\n onChange?.(undefined);\n }\n };\n\n const displayText = date ? format(date, \"dd/MM/yyyy\") : resolvedPlaceholder;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-2 px-4 h-10 border rounded-lg transition-colors w-full justify-start\",\n \"border-gray-200 hover:border-gray-400 focus-within:border-gray-950\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n className,\n )}\n >\n <span\n className={cn(\n \"paragraph-small-medium\",\n date ? \"text-gray-950\" : \"text-gray-500\",\n )}\n >\n {displayText}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto p-0 bg-white rounded-2xl shadow-md border border-gray-200\"\n align=\"start\"\n sideOffset={8}\n >\n <div className=\"p-3\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={handleDateSelect}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"mappings":";AA2DM,SAYM,KAZN;AAzDN,SAAS,UAAU,YAAY,iBAAiB;AAChD,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,UAAU;AAInB,MAAM,mBAAmB,CAAC,QAAsB;AAC9C,QAAM,CAAC,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACjD,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG;AACnC;AAUO,MAAM,aAAa;AAAA,EACxB,CACE,EAAE,OAAO,UAAU,aAAa,WAAW,SAAS,GACpD,QACG;AACH,UAAM,YAAY,gBAAgB;AAClC,UAAM,sBAAsB,eAAe,UAAU,qCAAqC;AAC1F,UAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,UAAM,CAAC,MAAM,OAAO,IAAI,SAA2B,MAAM;AACvD,aAAO,QAAQ,iBAAiB,KAAK,IAAI;AAAA,IAC3C,CAAC;AAGD,cAAU,MAAM;AACd,UAAI,OAAO;AACT,gBAAQ,iBAAiB,KAAK,CAAC;AAAA,MACjC,OAAO;AACL,gBAAQ,MAAS;AAAA,MACnB;AAAA,IACF,GAAG,CAAC,KAAK,CAAC;AAEV,UAAM,mBAAmB,CAAC,iBAAmC;AAC3D,cAAQ,YAAY;AAEpB,UAAI,cAAc;AAChB,mBAAW,OAAO,cAAc,YAAY,CAAC;AAC7C,gBAAQ,KAAK;AAAA,MACf,OAAO;AACL,mBAAW,MAAS;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,OAAO,MAAM,YAAY,IAAI;AAExD,WACE,qBAAC,WAAQ,MAAY,cAAc,SACjC;AAAA,0BAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO,kBAAkB;AAAA,cAC3B;AAAA,cAEC;AAAA;AAAA,UACH;AAAA;AAAA,MACF,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,YAAY;AAAA,UAEZ,8BAAC,SAAI,WAAU,OACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA;AAAA,UACZ,GACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,WAAW,cAAc;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/DateRangePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, forwardRef, useEffect } from \"react\";\r\nimport { useTranslations } from \"next-intl\";\r\nimport { format } from \"date-fns\";\r\nimport { IconCalendar } from '@tabler/icons-react';\r\nimport { DateRange } from \"react-day-picker\";\r\nimport { Calendar } from \"./Calendar\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/Popover\";\r\nimport { cn } from \"../../../infra/utils/clsx\";\r\n\r\n// Converte string ISO (yyyy-MM-dd) para Date no fuso horário local\r\n// Evita bug de timezone onde new Date(\"2025-08-02\") interpreta como UTC\r\nconst isoParaDataLocal = (iso: string): Date => {\r\n const [ano, mes, dia] = iso.split(\"-\").map(Number);\r\n return new Date(ano, mes - 1, dia);\r\n};\r\n\r\ninterface DateRangePickerProps {\r\n value?: { from: string; to: string };\r\n onChange?: (range: { from: string; to: string } | undefined) => void;\r\n placeholder?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\r\n ({ value, onChange, placeholder, className, disabled }, ref) => {\r\n const translate = useTranslations();\r\n const resolvedPlaceholder = placeholder ?? translate('common.forms.dateRangePicker.placeholder');\r\n const [open, setOpen] = useState(false);\r\n const [range, setRange] = useState<DateRange | undefined>(() => {\r\n if (value?.from && value?.to) {\r\n return {\r\n from: isoParaDataLocal(value.from),\r\n to: isoParaDataLocal(value.to)\r\n };\r\n }\r\n return undefined;\r\n });\r\n\r\n useEffect(() => {\r\n if (value?.from && value?.to) {\r\n setRange({\r\n from: isoParaDataLocal(value.from),\r\n to: isoParaDataLocal(value.to)\r\n });\r\n } else {\r\n setRange(undefined);\r\n }\r\n }, [value]);\r\n\r\n const handleRangeSelect = (newRange: DateRange | undefined) => {\r\n setRange(newRange);\r\n\r\n if (newRange?.from && newRange?.to) {\r\n onChange?.({\r\n from: format(newRange.from, \"yyyy-MM-dd\"),\r\n to: format(newRange.to, \"yyyy-MM-dd\")\r\n });\r\n } else {\r\n onChange?.(undefined);\r\n }\r\n };\r\n\r\n const displayText = range?.from && range?.to\r\n ? `${format(range.from, \"dd/MM/yyyy\")} - ${format(range.to, \"dd/MM/yyyy\")}`\r\n : resolvedPlaceholder;\r\n\r\n return (\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <button\r\n ref={ref}\r\n disabled={disabled}\r\n className={cn(\r\n \"flex items-center gap-2 px-4 h-10 border rounded-lg transition-colors w-full justify-start\",\r\n \"border-gray-200 hover:border-gray-400 focus-within:border-gray-950\",\r\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\r\n className\r\n )}\r\n >\r\n <IconCalendar size={20} className=\"text-gray-400\" />\r\n <span className={cn(\r\n \"paragraph-small-medium\",\r\n range?.from && range?.to ? \"text-gray-950\" : \"text-gray-500\"\r\n )}>\r\n {displayText}\r\n </span>\r\n </button>\r\n </PopoverTrigger>\r\n <PopoverContent\r\n className=\"w-auto p-0 bg-white rounded-2xl shadow-md border border-gray-200\"\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <div className=\"p-3\">\r\n <Calendar\r\n mode=\"range\"\r\n selected={range}\r\n onSelect={handleRangeSelect}\r\n numberOfMonths={1}\r\n />\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n }\r\n);\r\n\r\nDateRangePicker.displayName = \"DateRangePicker\";\r\n"],"mappings":";AAwEU,SAUE,KAVF;AAtEV,SAAS,UAAU,YAAY,iBAAiB;AAChD,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AACzB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,UAAU;AAInB,MAAM,mBAAmB,CAAC,QAAsB;AAC9C,QAAM,CAAC,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACjD,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG;AACnC;AAUO,MAAM,kBAAkB;AAAA,EAC7B,CAAC,EAAE,OAAO,UAAU,aAAa,WAAW,SAAS,GAAG,QAAQ;AAC9D,UAAM,YAAY,gBAAgB;AAClC,UAAM,sBAAsB,eAAe,UAAU,0CAA0C;AAC/F,UAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,UAAM,CAAC,OAAO,QAAQ,IAAI,SAAgC,MAAM;AAC9D,UAAI,OAAO,QAAQ,OAAO,IAAI;AAC5B,eAAO;AAAA,UACL,MAAM,iBAAiB,MAAM,IAAI;AAAA,UACjC,IAAI,iBAAiB,MAAM,EAAE;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAED,cAAU,MAAM;AACd,UAAI,OAAO,QAAQ,OAAO,IAAI;AAC5B,iBAAS;AAAA,UACP,MAAM,iBAAiB,MAAM,IAAI;AAAA,UACjC,IAAI,iBAAiB,MAAM,EAAE;AAAA,QAC/B,CAAC;AAAA,MACH,OAAO;AACL,iBAAS,MAAS;AAAA,MACpB;AAAA,IACF,GAAG,CAAC,KAAK,CAAC;AAEV,UAAM,oBAAoB,CAAC,aAAoC;AAC7D,eAAS,QAAQ;AAEjB,UAAI,UAAU,QAAQ,UAAU,IAAI;AAClC,mBAAW;AAAA,UACT,MAAM,OAAO,SAAS,MAAM,YAAY;AAAA,UACxC,IAAI,OAAO,SAAS,IAAI,YAAY;AAAA,QACtC,CAAC;AAAA,MACH,OAAO;AACL,mBAAW,MAAS;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,QAAQ,OAAO,KACtC,GAAG,OAAO,MAAM,MAAM,YAAY,CAAC,MAAM,OAAO,MAAM,IAAI,YAAY,CAAC,KACvE;AAEJ,WACE,qBAAC,WAAQ,MAAY,cAAc,SACjC;AAAA,0BAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,gCAAC,gBAAa,MAAM,IAAI,WAAU,iBAAgB;AAAA,YAClD,oBAAC,UAAK,WAAW;AAAA,cACf;AAAA,cACA,OAAO,QAAQ,OAAO,KAAK,kBAAkB;AAAA,YAC/C,GACG,uBACH;AAAA;AAAA;AAAA,MACF,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,YAAY;AAAA,UAEZ,8BAAC,SAAI,WAAU,OACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA,cACV,gBAAgB;AAAA;AAAA,UAClB,GACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/DateRangePicker.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, forwardRef, useEffect } from \"react\";\nimport { useTranslations } from \"next-intl\";\nimport { format } from \"date-fns\";\nimport { IconCalendar } from '@tabler/icons-react';\nimport { DateRange } from \"react-day-picker\";\nimport { Calendar } from \"./Calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlay/Popover\";\nimport { cn } from \"../../../infra/utils/clsx\";\n\n// Converte string ISO (yyyy-MM-dd) para Date no fuso horário local\n// Evita bug de timezone onde new Date(\"2025-08-02\") interpreta como UTC\nconst isoParaDataLocal = (iso: string): Date => {\n const [ano, mes, dia] = iso.split(\"-\").map(Number);\n return new Date(ano, mes - 1, dia);\n};\n\ninterface DateRangePickerProps {\n value?: { from: string; to: string };\n onChange?: (range: { from: string; to: string } | undefined) => void;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n ({ value, onChange, placeholder, className, disabled }, ref) => {\n const translate = useTranslations();\n const resolvedPlaceholder = placeholder ?? translate('common.forms.dateRangePicker.placeholder');\n const [open, setOpen] = useState(false);\n const [range, setRange] = useState<DateRange | undefined>(() => {\n if (value?.from && value?.to) {\n return {\n from: isoParaDataLocal(value.from),\n to: isoParaDataLocal(value.to)\n };\n }\n return undefined;\n });\n\n useEffect(() => {\n if (value?.from && value?.to) {\n setRange({\n from: isoParaDataLocal(value.from),\n to: isoParaDataLocal(value.to)\n });\n } else {\n setRange(undefined);\n }\n }, [value]);\n\n const handleRangeSelect = (newRange: DateRange | undefined) => {\n setRange(newRange);\n\n if (newRange?.from && newRange?.to) {\n onChange?.({\n from: format(newRange.from, \"yyyy-MM-dd\"),\n to: format(newRange.to, \"yyyy-MM-dd\")\n });\n } else {\n onChange?.(undefined);\n }\n };\n\n const displayText = range?.from && range?.to\n ? `${format(range.from, \"dd/MM/yyyy\")} - ${format(range.to, \"dd/MM/yyyy\")}`\n : resolvedPlaceholder;\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-2 px-4 h-10 border rounded-lg transition-colors w-full justify-start\",\n \"border-gray-200 hover:border-gray-400 focus-within:border-gray-950\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n className\n )}\n >\n <IconCalendar size={20} className=\"text-gray-400\" />\n <span className={cn(\n \"paragraph-small-medium\",\n range?.from && range?.to ? \"text-gray-950\" : \"text-gray-500\"\n )}>\n {displayText}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto p-0 bg-white rounded-2xl shadow-md border border-gray-200\"\n align=\"start\"\n sideOffset={8}\n >\n <div className=\"p-3\">\n <Calendar\n mode=\"range\"\n selected={range}\n onSelect={handleRangeSelect}\n numberOfMonths={1}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n"],"mappings":";AAwEU,SAUE,KAVF;AAtEV,SAAS,UAAU,YAAY,iBAAiB;AAChD,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AACzB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,UAAU;AAInB,MAAM,mBAAmB,CAAC,QAAsB;AAC9C,QAAM,CAAC,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACjD,SAAO,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG;AACnC;AAUO,MAAM,kBAAkB;AAAA,EAC7B,CAAC,EAAE,OAAO,UAAU,aAAa,WAAW,SAAS,GAAG,QAAQ;AAC9D,UAAM,YAAY,gBAAgB;AAClC,UAAM,sBAAsB,eAAe,UAAU,0CAA0C;AAC/F,UAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,UAAM,CAAC,OAAO,QAAQ,IAAI,SAAgC,MAAM;AAC9D,UAAI,OAAO,QAAQ,OAAO,IAAI;AAC5B,eAAO;AAAA,UACL,MAAM,iBAAiB,MAAM,IAAI;AAAA,UACjC,IAAI,iBAAiB,MAAM,EAAE;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAED,cAAU,MAAM;AACd,UAAI,OAAO,QAAQ,OAAO,IAAI;AAC5B,iBAAS;AAAA,UACP,MAAM,iBAAiB,MAAM,IAAI;AAAA,UACjC,IAAI,iBAAiB,MAAM,EAAE;AAAA,QAC/B,CAAC;AAAA,MACH,OAAO;AACL,iBAAS,MAAS;AAAA,MACpB;AAAA,IACF,GAAG,CAAC,KAAK,CAAC;AAEV,UAAM,oBAAoB,CAAC,aAAoC;AAC7D,eAAS,QAAQ;AAEjB,UAAI,UAAU,QAAQ,UAAU,IAAI;AAClC,mBAAW;AAAA,UACT,MAAM,OAAO,SAAS,MAAM,YAAY;AAAA,UACxC,IAAI,OAAO,SAAS,IAAI,YAAY;AAAA,QACtC,CAAC;AAAA,MACH,OAAO;AACL,mBAAW,MAAS;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,cAAc,OAAO,QAAQ,OAAO,KACtC,GAAG,OAAO,MAAM,MAAM,YAAY,CAAC,MAAM,OAAO,MAAM,IAAI,YAAY,CAAC,KACvE;AAEJ,WACE,qBAAC,WAAQ,MAAY,cAAc,SACjC;AAAA,0BAAC,kBAAe,SAAO,MACrB;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,gCAAC,gBAAa,MAAM,IAAI,WAAU,iBAAgB;AAAA,YAClD,oBAAC,UAAK,WAAW;AAAA,cACf;AAAA,cACA,OAAO,QAAQ,OAAO,KAAK,kBAAkB;AAAA,YAC/C,GACG,uBACH;AAAA;AAAA;AAAA,MACF,GACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,YAAY;AAAA,UAEZ,8BAAC,SAAI,WAAU,OACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,UAAU;AAAA,cACV,gBAAgB;AAAA;AAAA,UAClB,GACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEA,gBAAgB,cAAc;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/FormField.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { forwardRef, type ComponentPropsWithoutRef } from 'react';\r\nimport { IconLock, IconEye, IconEyeOff } from '@tabler/icons-react';\r\nimport type { TablerIcon } from '@tabler/icons-react';\r\nimport { Input } from './Input';\r\nimport { cn } from '../../../infra/utils/clsx';\r\n\r\ntype FormFieldSize = 'default' | 'large';\r\n\r\ninterface FormFieldProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\r\n label?: string;\r\n optional?: boolean;\r\n required?: boolean;\r\n leftIcon?: TablerIcon;\r\n rightIcon?: TablerIcon;\r\n rightIconColor?: string;\r\n hintMessage?: string;\r\n classnameContainer?: string;\r\n size?: FormFieldSize;\r\n error?: boolean;\r\n errorMessage?: string;\r\n showCharCount?: boolean;\r\n showPassword?: boolean;\r\n onTogglePassword?: () => void;\r\n}\r\n\r\nexport const FormField = forwardRef<HTMLInputElement, FormFieldProps>(\r\n (\r\n {\r\n label,\r\n optional = false,\r\n required = false,\r\n leftIcon: LeftIcon,\r\n rightIcon: RightIcon,\r\n rightIconColor = 'var(--color-gray-400)',\r\n hintMessage,\r\n size = 'default',\r\n type = 'text',\r\n error = false,\r\n errorMessage,\r\n className,\r\n classnameContainer,\r\n showCharCount = false,\r\n showPassword = false,\r\n onTogglePassword,\r\n ...inputProps\r\n },\r\n ref\r\n ) => {\r\n const isPasswordField = type === 'password';\r\n const inputType = isPasswordField && showPassword ? 'text' : type;\r\n const containerHeight = size === 'large' ? 'h-12' : 'h-10';\r\n\r\n const FinalLeftIcon = isPasswordField ? IconLock : LeftIcon;\r\n const FinalRightIcon = isPasswordField ? (!showPassword ? IconEyeOff : IconEye) : RightIcon;\r\n\r\n const finalMessage = error && errorMessage ? errorMessage : hintMessage;\r\n const messageColor = error ? 'text-red-600' : 'text-gray-600';\r\n\r\n const currentLength = typeof inputProps.value === 'string' ? inputProps.value.length : 0;\r\n const shouldShowCharCount = showCharCount && inputProps.maxLength;\r\n\r\n return (\r\n <div className=\"flex flex-col gap-1.5 w-full\">\r\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold truncate\">\r\n {label && <span className=\"text-gray-600\">{label}</span>}\r\n {optional && <span className=\"text-gray-500\">(Opcional)</span>}\r\n {required && <span className=\"text-red-600\">*</span>}\r\n </div>\r\n\r\n <div\r\n className={cn(\r\n 'flex gap-2 px-4 items-center border rounded-lg transition-color',\r\n containerHeight,\r\n classnameContainer,\r\n error\r\n ? 'border-red-600 hover:border-red-700'\r\n : inputProps.disabled\r\n ? 'border-transparent'\r\n : 'border-gray-200 hover:border-gray-400 focus-within:border-gray-950'\r\n )}\r\n >\r\n {FinalLeftIcon && <FinalLeftIcon size={20} className=\"text-gray-400\" />}\r\n\r\n <Input\r\n ref={ref}\r\n type={inputType}\r\n className={cn(\r\n 'paragraph-small-medium w-full h-full text-gray-950',\r\n error && 'placeholder:text-red-400',\r\n className\r\n )}\r\n {...inputProps}\r\n />\r\n\r\n {FinalRightIcon && (\r\n <button\r\n type=\"button\"\r\n onClick={isPasswordField ? onTogglePassword : undefined}\r\n className={cn(\r\n 'flex items-center justify-center',\r\n isPasswordField && 'cursor-pointer hover:opacity-70 transition-opacity'\r\n )}\r\n aria-label={\r\n isPasswordField ? (showPassword ? 'Ocultar senha' : 'Mostrar senha') : undefined\r\n }\r\n >\r\n <FinalRightIcon\r\n size={20}\r\n color={isPasswordField ? 'var(--color-gray-950)' : rightIconColor}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n\r\n {finalMessage && (\r\n <span className={cn('paragraph-xsmall-medium', messageColor)}>{finalMessage}</span>\r\n )}\r\n\r\n {shouldShowCharCount && (\r\n <span className=\"paragraph-xsmall-medium text-gray-600\">\r\n {currentLength}/{inputProps.maxLength}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nFormField.displayName = 'FormField';\r\n\r\nexport default FormField;\r\n"],"mappings":";AAiEQ,SACY,KADZ;AA/DR,SAAS,kBAAiD;AAC1D,SAAS,UAAU,SAAS,kBAAkB;AAE9C,SAAS,aAAa;AACtB,SAAS,UAAU;AAqBZ,MAAM,YAAY;AAAA,EACvB,CACE;AAAA,IACE;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,kBAAkB,SAAS;AACjC,UAAM,YAAY,mBAAmB,eAAe,SAAS;AAC7D,UAAM,kBAAkB,SAAS,UAAU,SAAS;AAEpD,UAAM,gBAAgB,kBAAkB,WAAW;AACnD,UAAM,iBAAiB,kBAAmB,CAAC,eAAe,aAAa,UAAW;AAElF,UAAM,eAAe,SAAS,eAAe,eAAe;AAC5D,UAAM,eAAe,QAAQ,iBAAiB;AAE9C,UAAM,gBAAgB,OAAO,WAAW,UAAU,WAAW,WAAW,MAAM,SAAS;AACvF,UAAM,sBAAsB,iBAAiB,WAAW;AAExD,WACE,qBAAC,SAAI,WAAU,gCACb;AAAA,2BAAC,SAAI,WAAU,8DACZ;AAAA,iBAAS,oBAAC,UAAK,WAAU,iBAAiB,iBAAM;AAAA,QAChD,YAAY,oBAAC,UAAK,WAAU,iBAAgB,wBAAU;AAAA,QACtD,YAAY,oBAAC,UAAK,WAAU,gBAAe,eAAC;AAAA,SAC/C;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,QACI,wCACA,WAAW,WACT,uBACA;AAAA,UACR;AAAA,UAEC;AAAA,6BAAiB,oBAAC,iBAAc,MAAM,IAAI,WAAU,iBAAgB;AAAA,YAErE;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,kBACA,SAAS;AAAA,kBACT;AAAA,gBACF;AAAA,gBACC,GAAG;AAAA;AAAA,YACN;AAAA,YAEC,kBACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,kBAAkB,mBAAmB;AAAA,gBAC9C,WAAW;AAAA,kBACT;AAAA,kBACA,mBAAmB;AAAA,gBACrB;AAAA,gBACA,cACE,kBAAmB,eAAe,kBAAkB,kBAAmB;AAAA,gBAGzE;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM;AAAA,oBACN,OAAO,kBAAkB,0BAA0B;AAAA;AAAA,gBACrD;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ;AAAA,MAEC,gBACC,oBAAC,UAAK,WAAW,GAAG,2BAA2B,YAAY,GAAI,wBAAa;AAAA,MAG7E,uBACC,qBAAC,UAAK,WAAU,yCACb;AAAA;AAAA,QAAc;AAAA,QAAE,WAAW;AAAA,SAC9B;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;AAExB,IAAO,oBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/FormField.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { IconLock, IconEye, IconEyeOff } from '@tabler/icons-react';\nimport type { TablerIcon } from '@tabler/icons-react';\nimport { Input } from './Input';\nimport { cn } from '../../../infra/utils/clsx';\n\ntype FormFieldSize = 'default' | 'large';\n\ninterface FormFieldProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\n label?: string;\n optional?: boolean;\n required?: boolean;\n leftIcon?: TablerIcon;\n rightIcon?: TablerIcon;\n rightIconColor?: string;\n hintMessage?: string;\n classnameContainer?: string;\n size?: FormFieldSize;\n error?: boolean;\n errorMessage?: string;\n showCharCount?: boolean;\n showPassword?: boolean;\n onTogglePassword?: () => void;\n}\n\nexport const FormField = forwardRef<HTMLInputElement, FormFieldProps>(\n (\n {\n label,\n optional = false,\n required = false,\n leftIcon: LeftIcon,\n rightIcon: RightIcon,\n rightIconColor = 'var(--color-gray-400)',\n hintMessage,\n size = 'default',\n type = 'text',\n error = false,\n errorMessage,\n className,\n classnameContainer,\n showCharCount = false,\n showPassword = false,\n onTogglePassword,\n ...inputProps\n },\n ref\n ) => {\n const isPasswordField = type === 'password';\n const inputType = isPasswordField && showPassword ? 'text' : type;\n const containerHeight = size === 'large' ? 'h-12' : 'h-10';\n\n const FinalLeftIcon = isPasswordField ? IconLock : LeftIcon;\n const FinalRightIcon = isPasswordField ? (!showPassword ? IconEyeOff : IconEye) : RightIcon;\n\n const finalMessage = error && errorMessage ? errorMessage : hintMessage;\n const messageColor = error ? 'text-red-600' : 'text-gray-600';\n\n const currentLength = typeof inputProps.value === 'string' ? inputProps.value.length : 0;\n const shouldShowCharCount = showCharCount && inputProps.maxLength;\n\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold truncate\">\n {label && <span className=\"text-gray-600\">{label}</span>}\n {optional && <span className=\"text-gray-500\">(Opcional)</span>}\n {required && <span className=\"text-red-600\">*</span>}\n </div>\n\n <div\n className={cn(\n 'flex gap-2 px-4 items-center border rounded-lg transition-color',\n containerHeight,\n classnameContainer,\n error\n ? 'border-red-600 hover:border-red-700'\n : inputProps.disabled\n ? 'border-transparent'\n : 'border-gray-200 hover:border-gray-400 focus-within:border-gray-950'\n )}\n >\n {FinalLeftIcon && <FinalLeftIcon size={20} className=\"text-gray-400\" />}\n\n <Input\n ref={ref}\n type={inputType}\n className={cn(\n 'paragraph-small-medium w-full h-full text-gray-950',\n error && 'placeholder:text-red-400',\n className\n )}\n {...inputProps}\n />\n\n {FinalRightIcon && (\n <button\n type=\"button\"\n onClick={isPasswordField ? onTogglePassword : undefined}\n className={cn(\n 'flex items-center justify-center',\n isPasswordField && 'cursor-pointer hover:opacity-70 transition-opacity'\n )}\n aria-label={\n isPasswordField ? (showPassword ? 'Ocultar senha' : 'Mostrar senha') : undefined\n }\n >\n <FinalRightIcon\n size={20}\n color={isPasswordField ? 'var(--color-gray-950)' : rightIconColor}\n />\n </button>\n )}\n </div>\n\n {finalMessage && (\n <span className={cn('paragraph-xsmall-medium', messageColor)}>{finalMessage}</span>\n )}\n\n {shouldShowCharCount && (\n <span className=\"paragraph-xsmall-medium text-gray-600\">\n {currentLength}/{inputProps.maxLength}\n </span>\n )}\n </div>\n );\n }\n);\n\nFormField.displayName = 'FormField';\n\nexport default FormField;\n"],"mappings":";AAiEQ,SACY,KADZ;AA/DR,SAAS,kBAAiD;AAC1D,SAAS,UAAU,SAAS,kBAAkB;AAE9C,SAAS,aAAa;AACtB,SAAS,UAAU;AAqBZ,MAAM,YAAY;AAAA,EACvB,CACE;AAAA,IACE;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,kBAAkB,SAAS;AACjC,UAAM,YAAY,mBAAmB,eAAe,SAAS;AAC7D,UAAM,kBAAkB,SAAS,UAAU,SAAS;AAEpD,UAAM,gBAAgB,kBAAkB,WAAW;AACnD,UAAM,iBAAiB,kBAAmB,CAAC,eAAe,aAAa,UAAW;AAElF,UAAM,eAAe,SAAS,eAAe,eAAe;AAC5D,UAAM,eAAe,QAAQ,iBAAiB;AAE9C,UAAM,gBAAgB,OAAO,WAAW,UAAU,WAAW,WAAW,MAAM,SAAS;AACvF,UAAM,sBAAsB,iBAAiB,WAAW;AAExD,WACE,qBAAC,SAAI,WAAU,gCACb;AAAA,2BAAC,SAAI,WAAU,8DACZ;AAAA,iBAAS,oBAAC,UAAK,WAAU,iBAAiB,iBAAM;AAAA,QAChD,YAAY,oBAAC,UAAK,WAAU,iBAAgB,wBAAU;AAAA,QACtD,YAAY,oBAAC,UAAK,WAAU,gBAAe,eAAC;AAAA,SAC/C;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,QACI,wCACA,WAAW,WACT,uBACA;AAAA,UACR;AAAA,UAEC;AAAA,6BAAiB,oBAAC,iBAAc,MAAM,IAAI,WAAU,iBAAgB;AAAA,YAErE;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,kBACA,SAAS;AAAA,kBACT;AAAA,gBACF;AAAA,gBACC,GAAG;AAAA;AAAA,YACN;AAAA,YAEC,kBACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,kBAAkB,mBAAmB;AAAA,gBAC9C,WAAW;AAAA,kBACT;AAAA,kBACA,mBAAmB;AAAA,gBACrB;AAAA,gBACA,cACE,kBAAmB,eAAe,kBAAkB,kBAAmB;AAAA,gBAGzE;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM;AAAA,oBACN,OAAO,kBAAkB,0BAA0B;AAAA;AAAA,gBACrD;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ;AAAA,MAEC,gBACC,oBAAC,UAAK,WAAW,GAAG,2BAA2B,YAAY,GAAI,wBAAa;AAAA,MAG7E,uBACC,qBAAC,UAAK,WAAU,yCACb;AAAA;AAAA,QAAc;AAAA,QAAE,WAAW;AAAA,SAC9B;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;AAExB,IAAO,oBAAQ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Input.tsx"],"sourcesContent":["'use client';\r\n\r\nimport * as React from \"react\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\r\n return (\r\n <input\r\n type={type}\r\n data-slot=\"input\"\r\n className={cn(\r\n \"outline-none disabled:opacity-50 disabled:placeholder:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Input }\r\n"],"mappings":";AAOI;AAJJ,SAAS,UAAU;AAEnB,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Input.tsx"],"sourcesContent":["'use client';\n\nimport * as React from \"react\"\nimport { cn } from \"../../../infra/utils/clsx\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"outline-none disabled:opacity-50 disabled:placeholder:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"],"mappings":";AAOI;AAJJ,SAAS,UAAU;AAEnB,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,GAAkC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/InputOtp.tsx"],"sourcesContent":["'use client';\r\n\r\n\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { OTPInput, OTPInputContext } from \"input-otp\"\r\nimport { IconMinus } from '@tabler/icons-react'\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nfunction InputOTP({\r\n className,\r\n containerClassName,\r\n ...props\r\n}: React.ComponentProps<typeof OTPInput> & {\r\n containerClassName?: string\r\n}) {\r\n return (\r\n <OTPInput\r\n data-slot=\"input-otp\"\r\n containerClassName={cn(\r\n \"flex items-center gap-2 has-disabled:opacity-50\",\r\n containerClassName\r\n )}\r\n className={cn(\"disabled:cursor-not-allowed\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"input-otp-group\"\r\n className={cn(\"flex items-center\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction InputOTPSlot({\r\n index,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & {\r\n index: number\r\n}) {\r\n const inputOTPContext = React.useContext(OTPInputContext)\r\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\r\n\r\n return (\r\n <div\r\n data-slot=\"input-otp-slot\"\r\n data-active={isActive}\r\n className={cn(\r\n \"relative flex h-9 w-9 items-center justify-center border text-sm transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md\",\r\n \"border-gray-200 hover:border-gray-400 data-[active=true]:border-gray-950\",\r\n \"data-[active=true]:z-10\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {char}\r\n {hasFakeCaret && (\r\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\r\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n}\r\n\r\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\r\n <IconMinus />\r\n </div>\r\n )\r\n}\r\n\r\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\r\n"],"mappings":";AAiBI,cAiCA,YAjCA;AAbJ,YAAY,WAAW;AACvB,SAAS,UAAU,uBAAuB;AAC1C,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAEnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,MACF;AAAA,MACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC3C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,QAAM,kBAAkB,MAAM,WAAW,eAAe;AACxD,QAAM,EAAE,MAAM,cAAc,SAAS,IAAI,iBAAiB,MAAM,KAAK,KAAK,CAAC;AAE3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACA,gBACC,oBAAC,SAAI,WAAU,yEACb,8BAAC,SAAI,WAAU,4DAA2D,GAC5E;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,kBAAkB,EAAE,GAAG,MAAM,GAAgC;AACpE,SACE,oBAAC,SAAI,aAAU,uBAAsB,MAAK,aAAa,GAAG,OACxD,8BAAC,aAAU,GACb;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/InputOtp.tsx"],"sourcesContent":["'use client';\n\n\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { IconMinus } from '@tabler/icons-react'\nimport { cn } from \"../../../infra/utils/clsx\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"relative flex h-9 w-9 items-center justify-center border text-sm transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md\",\n \"border-gray-200 hover:border-gray-400 data-[active=true]:border-gray-950\",\n \"data-[active=true]:z-10\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <IconMinus />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n"],"mappings":";AAiBI,cAiCA,YAjCA;AAbJ,YAAY,WAAW;AACvB,SAAS,UAAU,uBAAuB;AAC1C,SAAS,iBAAiB;AAC1B,SAAS,UAAU;AAEnB,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,MACF;AAAA,MACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC3C,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEG;AACD,QAAM,kBAAkB,MAAM,WAAW,eAAe;AACxD,QAAM,EAAE,MAAM,cAAc,SAAS,IAAI,iBAAiB,MAAM,KAAK,KAAK,CAAC;AAE3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACA,gBACC,oBAAC,SAAI,WAAU,yEACb,8BAAC,SAAI,WAAU,4DAA2D,GAC5E;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,kBAAkB,EAAE,GAAG,MAAM,GAAgC;AACpE,SACE,oBAAC,SAAI,aAAU,uBAAsB,MAAK,aAAa,GAAG,OACxD,8BAAC,aAAU,GACb;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/PhoneInput.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport { useTranslations } from 'next-intl';\r\nimport { AsYouType, CountryCode } from 'libphonenumber-js';\r\nimport { Input, Separator, Popover, PopoverTrigger, PopoverContent, cn } from '@greatapps/common';\r\nimport { IconChevronDown, IconSearch } from '@tabler/icons-react';\r\nimport { COUNTRIES, Country, flagUrl, parsePhoneValue } from '../../../utils/countries';\r\n\r\nfunction formatNational(digits: string, iso: string): string {\r\n const raw = digits.replace(/\\D/g, '');\r\n if (!raw) return '';\r\n return new AsYouType(iso as CountryCode).input(raw);\r\n}\r\n\r\ninterface PhoneInputProps {\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n label?: string;\r\n optional?: boolean;\r\n required?: boolean;\r\n hintMessage?: string;\r\n error?: boolean;\r\n errorMessage?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n classnameContainer?: string;\r\n className?: string;\r\n}\r\n\r\nexport default function PhoneInput({\r\n value,\r\n onChange,\r\n label,\r\n optional = false,\r\n required = false,\r\n hintMessage,\r\n error = false,\r\n errorMessage,\r\n placeholder,\r\n disabled = false,\r\n classnameContainer,\r\n className,\r\n}: PhoneInputProps) {\r\n const translate = useTranslations();\r\n const parsed = parsePhoneValue(value ?? '');\r\n const [selectedCountry, setSelectedCountry] = useState<Country>(parsed.country);\r\n const [phoneNumber, setPhoneNumber] = useState(parsed.number);\r\n const [search, setSearch] = useState('');\r\n const [open, setOpen] = useState(false);\r\n const prevValueRef = useRef(value);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n if (value !== prevValueRef.current) {\r\n prevValueRef.current = value;\r\n const p = parsePhoneValue(value ?? '');\r\n setSelectedCountry(p.country);\r\n setPhoneNumber(formatNational(p.number, p.country.iso));\r\n }\r\n }, [value]);\r\n\r\n const emit = (country: Country, number: string) => {\r\n onChange?.(`${country.dial} ${number}`);\r\n };\r\n\r\n const handleCountrySelect = (country: Country) => {\r\n const reformatted = formatNational(phoneNumber, country.iso);\r\n setSelectedCountry(country);\r\n setPhoneNumber(reformatted);\r\n setOpen(false);\r\n setSearch('');\r\n emit(country, reformatted);\r\n };\r\n\r\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const rawInput = e.target.value;\r\n const digits = rawInput.replace(/\\D/g, '');\r\n if (digits.length > 15) return;\r\n\r\n const cursorPos = e.target.selectionStart ?? rawInput.length;\r\n const digitsBeforeCursor = rawInput.slice(0, cursorPos).replace(/\\D/g, '').length;\r\n\r\n const formatted = formatNational(rawInput, selectedCountry.iso);\r\n setPhoneNumber(formatted);\r\n emit(selectedCountry, formatted);\r\n\r\n requestAnimationFrame(() => {\r\n if (!inputRef.current) return;\r\n let digitCount = 0;\r\n let newPos = formatted.length;\r\n for (let i = 0; i < formatted.length; i++) {\r\n if (/\\d/.test(formatted[i])) {\r\n digitCount++;\r\n if (digitCount === digitsBeforeCursor) {\r\n newPos = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n inputRef.current.setSelectionRange(newPos, newPos);\r\n });\r\n };\r\n\r\n const filtered = COUNTRIES.filter(\r\n (c) =>\r\n c.name.toLowerCase().includes(search.toLowerCase()) ||\r\n c.dial.includes(search) ||\r\n c.iso.toLowerCase().includes(search.toLowerCase())\r\n );\r\n\r\n const finalMessage = error && errorMessage ? errorMessage : hintMessage;\r\n const showMessage = finalMessage && finalMessage.trim() !== '';\r\n\r\n return (\r\n <div className=\"flex flex-col gap-1.5\">\r\n {label && (\r\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold\">\r\n <span className=\"text-zinc-600\">{label}</span>\r\n {optional && <span className=\"text-zinc-500\">{translate('common.forms.phoneInput.optional')}</span>}\r\n {required && <span className=\"text-red-600\">*</span>}\r\n </div>\r\n )}\r\n\r\n <div\r\n className={cn(\r\n 'flex gap-2 items-center border rounded-lg h-10 transition-colors',\r\n error\r\n ? 'border-red-600 hover:border-red-700'\r\n : 'border-zinc-200 hover:border-zinc-400 focus-within:border-zinc-950',\r\n disabled && 'cursor-not-allowed',\r\n classnameContainer\r\n )}\r\n >\r\n <Popover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n <button\r\n type=\"button\"\r\n className=\"flex items-center gap-1.5 px-3 h-full shrink-0 focus:outline-none\"\r\n disabled={disabled}\r\n >\r\n <img src={flagUrl(selectedCountry.iso)} alt={selectedCountry.iso} className=\"w-5 h-5 rounded-full\" />\r\n <span className=\"paragraph-small-regular text-zinc-950\">{selectedCountry.dial}</span>\r\n <IconChevronDown size={14} className={cn(\"text-zinc-500 transition-transform duration-200\", open && \"rotate-180\")} />\r\n </button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-72 p-0 z-[1010]\" align=\"start\" side=\"top\">\r\n <div className=\"flex items-center gap-2 p-2 border-b border-zinc-100\">\r\n <IconSearch size={14} className=\"text-zinc-400 shrink-0\" />\r\n <input\r\n type=\"text\"\r\n className=\"flex-1 text-sm outline-none placeholder:text-zinc-400\"\r\n placeholder={translate('common.forms.phoneInput.searchPlaceholder')}\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n autoFocus\r\n />\r\n </div>\r\n <div className=\"max-h-60 overflow-y-auto overscroll-contain\" onTouchMove={(e) => e.stopPropagation()} onWheel={(e) => e.stopPropagation()}>\r\n {filtered.map((country) => (\r\n <button\r\n key={country.iso}\r\n type=\"button\"\r\n className={cn(\r\n 'flex items-center gap-2.5 w-full px-3 py-2 text-left hover:bg-zinc-50 transition-colors',\r\n selectedCountry.iso === country.iso && 'bg-zinc-100'\r\n )}\r\n onClick={() => handleCountrySelect(country)}\r\n >\r\n <img src={flagUrl(country.iso)} alt={country.iso} className=\"w-5 h-5 rounded-full shrink-0\" />\r\n <span className=\"paragraph-small-regular text-zinc-950 flex-1 truncate\">\r\n {country.name}\r\n </span>\r\n <span className=\"paragraph-small-regular text-zinc-500 shrink-0\">\r\n {country.dial}\r\n </span>\r\n </button>\r\n ))}\r\n {filtered.length === 0 && (\r\n <p className=\"text-sm text-zinc-500 p-3 text-center\">{translate('common.forms.phoneInput.emptyMessage')}</p>\r\n )}\r\n </div>\r\n </PopoverContent>\r\n </Popover>\r\n\r\n <Separator orientation=\"vertical\" />\r\n\r\n <Input\r\n ref={inputRef}\r\n type=\"tel\"\r\n value={phoneNumber}\r\n onChange={handleNumberChange}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n className={cn(\r\n 'paragraph-small-medium w-full h-full text-zinc-950 border-0 focus-visible:ring-0 focus-visible:ring-offset-0',\r\n disabled && 'cursor-not-allowed',\r\n className\r\n )}\r\n />\r\n </div>\r\n\r\n {showMessage && (\r\n <span className={cn('paragraph-xsmall-medium', error ? 'text-red-600' : 'text-zinc-600')}>\r\n {finalMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/PhoneInput.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useEffect, useRef } from 'react';\nimport { useTranslations } from 'next-intl';\nimport { AsYouType, CountryCode } from 'libphonenumber-js';\nimport { Input, Separator, Popover, PopoverTrigger, PopoverContent, cn } from '@greatapps/common';\nimport { IconChevronDown, IconSearch } from '@tabler/icons-react';\nimport { COUNTRIES, Country, flagUrl, parsePhoneValue } from '../../../utils/countries';\n\nfunction formatNational(digits: string, iso: string): string {\n const raw = digits.replace(/\\D/g, '');\n if (!raw) return '';\n return new AsYouType(iso as CountryCode).input(raw);\n}\n\ninterface PhoneInputProps {\n value?: string;\n onChange?: (value: string) => void;\n label?: string;\n optional?: boolean;\n required?: boolean;\n hintMessage?: string;\n error?: boolean;\n errorMessage?: string;\n placeholder?: string;\n disabled?: boolean;\n classnameContainer?: string;\n className?: string;\n}\n\nexport default function PhoneInput({\n value,\n onChange,\n label,\n optional = false,\n required = false,\n hintMessage,\n error = false,\n errorMessage,\n placeholder,\n disabled = false,\n classnameContainer,\n className,\n}: PhoneInputProps) {\n const translate = useTranslations();\n const parsed = parsePhoneValue(value ?? '');\n const [selectedCountry, setSelectedCountry] = useState<Country>(parsed.country);\n const [phoneNumber, setPhoneNumber] = useState(parsed.number);\n const [search, setSearch] = useState('');\n const [open, setOpen] = useState(false);\n const prevValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (value !== prevValueRef.current) {\n prevValueRef.current = value;\n const p = parsePhoneValue(value ?? '');\n setSelectedCountry(p.country);\n setPhoneNumber(formatNational(p.number, p.country.iso));\n }\n }, [value]);\n\n const emit = (country: Country, number: string) => {\n onChange?.(`${country.dial} ${number}`);\n };\n\n const handleCountrySelect = (country: Country) => {\n const reformatted = formatNational(phoneNumber, country.iso);\n setSelectedCountry(country);\n setPhoneNumber(reformatted);\n setOpen(false);\n setSearch('');\n emit(country, reformatted);\n };\n\n const handleNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const rawInput = e.target.value;\n const digits = rawInput.replace(/\\D/g, '');\n if (digits.length > 15) return;\n\n const cursorPos = e.target.selectionStart ?? rawInput.length;\n const digitsBeforeCursor = rawInput.slice(0, cursorPos).replace(/\\D/g, '').length;\n\n const formatted = formatNational(rawInput, selectedCountry.iso);\n setPhoneNumber(formatted);\n emit(selectedCountry, formatted);\n\n requestAnimationFrame(() => {\n if (!inputRef.current) return;\n let digitCount = 0;\n let newPos = formatted.length;\n for (let i = 0; i < formatted.length; i++) {\n if (/\\d/.test(formatted[i])) {\n digitCount++;\n if (digitCount === digitsBeforeCursor) {\n newPos = i + 1;\n break;\n }\n }\n }\n inputRef.current.setSelectionRange(newPos, newPos);\n });\n };\n\n const filtered = COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(search.toLowerCase()) ||\n c.dial.includes(search) ||\n c.iso.toLowerCase().includes(search.toLowerCase())\n );\n\n const finalMessage = error && errorMessage ? errorMessage : hintMessage;\n const showMessage = finalMessage && finalMessage.trim() !== '';\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <div className=\"flex items-center gap-1 paragraph-xsmall-semibold\">\n <span className=\"text-zinc-600\">{label}</span>\n {optional && <span className=\"text-zinc-500\">{translate('common.forms.phoneInput.optional')}</span>}\n {required && <span className=\"text-red-600\">*</span>}\n </div>\n )}\n\n <div\n className={cn(\n 'flex gap-2 items-center border rounded-lg h-10 transition-colors',\n error\n ? 'border-red-600 hover:border-red-700'\n : 'border-zinc-200 hover:border-zinc-400 focus-within:border-zinc-950',\n disabled && 'cursor-not-allowed',\n classnameContainer\n )}\n >\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex items-center gap-1.5 px-3 h-full shrink-0 focus:outline-none\"\n disabled={disabled}\n >\n <img src={flagUrl(selectedCountry.iso)} alt={selectedCountry.iso} className=\"w-5 h-5 rounded-full\" />\n <span className=\"paragraph-small-regular text-zinc-950\">{selectedCountry.dial}</span>\n <IconChevronDown size={14} className={cn(\"text-zinc-500 transition-transform duration-200\", open && \"rotate-180\")} />\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"w-72 p-0 z-[1010]\" align=\"start\" side=\"top\">\n <div className=\"flex items-center gap-2 p-2 border-b border-zinc-100\">\n <IconSearch size={14} className=\"text-zinc-400 shrink-0\" />\n <input\n type=\"text\"\n className=\"flex-1 text-sm outline-none placeholder:text-zinc-400\"\n placeholder={translate('common.forms.phoneInput.searchPlaceholder')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n autoFocus\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto overscroll-contain\" onTouchMove={(e) => e.stopPropagation()} onWheel={(e) => e.stopPropagation()}>\n {filtered.map((country) => (\n <button\n key={country.iso}\n type=\"button\"\n className={cn(\n 'flex items-center gap-2.5 w-full px-3 py-2 text-left hover:bg-zinc-50 transition-colors',\n selectedCountry.iso === country.iso && 'bg-zinc-100'\n )}\n onClick={() => handleCountrySelect(country)}\n >\n <img src={flagUrl(country.iso)} alt={country.iso} className=\"w-5 h-5 rounded-full shrink-0\" />\n <span className=\"paragraph-small-regular text-zinc-950 flex-1 truncate\">\n {country.name}\n </span>\n <span className=\"paragraph-small-regular text-zinc-500 shrink-0\">\n {country.dial}\n </span>\n </button>\n ))}\n {filtered.length === 0 && (\n <p className=\"text-sm text-zinc-500 p-3 text-center\">{translate('common.forms.phoneInput.emptyMessage')}</p>\n )}\n </div>\n </PopoverContent>\n </Popover>\n\n <Separator orientation=\"vertical\" />\n\n <Input\n ref={inputRef}\n type=\"tel\"\n value={phoneNumber}\n onChange={handleNumberChange}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'paragraph-small-medium w-full h-full text-zinc-950 border-0 focus-visible:ring-0 focus-visible:ring-offset-0',\n disabled && 'cursor-not-allowed',\n className\n )}\n />\n </div>\n\n {showMessage && (\n <span className={cn('paragraph-xsmall-medium', error ? 'text-red-600' : 'text-zinc-600')}>\n {finalMessage}\n </span>\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/RadioGroup.tsx"],"sourcesContent":["'use client';\r\n\r\n\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\r\nimport { IconCircle } from '@tabler/icons-react'\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nconst RadioGroup = React.forwardRef<\r\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\r\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <RadioGroupPrimitive.Root\r\n className={cn(\"grid gap-2\", className)}\r\n {...props}\r\n ref={ref}\r\n />\r\n )\r\n})\r\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\r\n\r\nconst RadioGroupItem = React.forwardRef<\r\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\r\n>(({ className, ...props }, ref) => {\r\n return (\r\n <RadioGroupPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"aspect-square h-4 w-4 rounded-full border border-gray-300 text-gray-950 ring-offset-white focus:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\r\n <IconCircle className=\"h-2.5 w-2.5 fill-current text-current\" />\r\n </RadioGroupPrimitive.Indicator>\r\n </RadioGroupPrimitive.Item>\r\n )\r\n})\r\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\r\n\r\nexport { RadioGroup, RadioGroupItem }\r\n"],"mappings":";AAcI;AAVJ,YAAY,WAAW;AACvB,YAAY,yBAAyB;AACrC,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAEnB,MAAM,aAAa,MAAM,WAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ;AAClC,SACE;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,WAAW,GAAG,cAAc,SAAS;AAAA,MACpC,GAAG;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,WAAW,cAAc,oBAAoB,KAAK;AAElD,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ;AAClC,SACE;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,8BAAC,oBAAoB,WAApB,EAA8B,WAAU,oCACvC,8BAAC,cAAW,WAAU,yCAAwC,GAChE;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,eAAe,cAAc,oBAAoB,KAAK;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/RadioGroup.tsx"],"sourcesContent":["'use client';\n\n\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { IconCircle } from '@tabler/icons-react'\nimport { cn } from \"../../../infra/utils/clsx\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-gray-300 text-gray-950 ring-offset-white focus:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <IconCircle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n"],"mappings":";AAcI;AAVJ,YAAY,WAAW;AACvB,YAAY,yBAAyB;AACrC,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAEnB,MAAM,aAAa,MAAM,WAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ;AAClC,SACE;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,WAAW,GAAG,cAAc,SAAS;AAAA,MACpC,GAAG;AAAA,MACJ;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,WAAW,cAAc,oBAAoB,KAAK;AAElD,MAAM,iBAAiB,MAAM,WAG3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ;AAClC,SACE;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,8BAAC,oBAAoB,WAApB,EAA8B,WAAU,oCACvC,8BAAC,cAAW,WAAU,yCAAwC,GAChE;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,eAAe,cAAc,oBAAoB,KAAK;","names":[]}
@@ -40,7 +40,7 @@ function SelectTrigger({
40
40
  /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: icon ?? /* @__PURE__ */ jsx(
41
41
  IconChevronDown,
42
42
  {
43
- className: "\r\n size-4 opacity-50 transition-all duration-200\r\n group-data-[state=open]/data-select:rotate-180\r\n group-data-[state=open]/data-select:opacity-100\r\n group-data-[state=open]/data-select:text-gray-950!\r\n "
43
+ className: "\n size-4 opacity-50 transition-all duration-200\n group-data-[state=open]/data-select:rotate-180\n group-data-[state=open]/data-select:opacity-100\n group-data-[state=open]/data-select:text-gray-950!\n "
44
44
  }
45
45
  ) })
46
46
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Select.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\r\nimport { IconCheck, IconChevronDown, IconChevronUp } from '@tabler/icons-react';\r\nimport { cn } from \"../../../infra/utils/clsx\";\r\n\r\nfunction Select({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\r\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\r\n}\r\n\r\nfunction SelectGroup({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\r\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\r\n}\r\n\r\nfunction SelectValue({\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\r\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\r\n}\r\n\r\nfunction SelectTrigger({\r\n className,\r\n size = \"default\",\r\n children,\r\n icon,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\r\n size?: \"sm\" | \"default\";\r\n icon?: React.ReactNode;\r\n}) {\r\n return (\r\n <SelectPrimitive.Trigger\r\n data-slot=\"select-trigger\"\r\n data-size={size}\r\n className={cn(\r\n \"group/data-select border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n\r\n <SelectPrimitive.Icon asChild>\r\n {icon ?? (\r\n <IconChevronDown\r\n className=\"\r\n size-4 opacity-50 transition-all duration-200\r\n group-data-[state=open]/data-select:rotate-180\r\n group-data-[state=open]/data-select:opacity-100\r\n group-data-[state=open]/data-select:text-gray-950!\r\n \"\r\n />\r\n )}\r\n </SelectPrimitive.Icon>\r\n </SelectPrimitive.Trigger>\r\n );\r\n}\r\n\r\nfunction SelectContent({\r\n className,\r\n children,\r\n position = \"popper\",\r\n align = \"center\",\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\r\n return (\r\n <SelectPrimitive.Portal>\r\n <SelectPrimitive.Content\r\n data-slot=\"select-content\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-[1002] max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\r\n position === \"popper\" &&\r\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\r\n className,\r\n )}\r\n position={position}\r\n align={align}\r\n {...props}\r\n >\r\n <SelectScrollUpButton />\r\n <SelectPrimitive.Viewport\r\n className={cn(\r\n \"p-1\",\r\n position === \"popper\" &&\r\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1\",\r\n )}\r\n >\r\n {children}\r\n </SelectPrimitive.Viewport>\r\n <SelectScrollDownButton />\r\n </SelectPrimitive.Content>\r\n </SelectPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction SelectLabel({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\r\n return (\r\n <SelectPrimitive.Label\r\n data-slot=\"select-label\"\r\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction SelectItem({\r\n className,\r\n children,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\r\n return (\r\n <SelectPrimitive.Item\r\n data-slot=\"select-item\"\r\n className={cn(\r\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 cursor-pointer\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\r\n <SelectPrimitive.ItemIndicator>\r\n <IconCheck className=\"size-4\" />\r\n </SelectPrimitive.ItemIndicator>\r\n </span>\r\n <SelectPrimitive.ItemText className=\"cursor-pointer\">\r\n {children}\r\n </SelectPrimitive.ItemText>\r\n </SelectPrimitive.Item>\r\n );\r\n}\r\n\r\nfunction SelectSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\r\n return (\r\n <SelectPrimitive.Separator\r\n data-slot=\"select-separator\"\r\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction SelectScrollUpButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\r\n return (\r\n <SelectPrimitive.ScrollUpButton\r\n data-slot=\"select-scroll-up-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <IconChevronUp className=\"size-4\" />\r\n </SelectPrimitive.ScrollUpButton>\r\n );\r\n}\r\n\r\nfunction SelectScrollDownButton({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\r\n return (\r\n <SelectPrimitive.ScrollDownButton\r\n data-slot=\"select-scroll-down-button\"\r\n className={cn(\r\n \"flex cursor-default items-center justify-center py-1\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n <IconChevronDown className=\"size-4\" />\r\n </SelectPrimitive.ScrollDownButton>\r\n );\r\n}\r\n\r\nexport {\r\n Select,\r\n SelectContent,\r\n SelectGroup,\r\n SelectItem,\r\n SelectLabel,\r\n SelectScrollDownButton,\r\n SelectScrollUpButton,\r\n SelectSeparator,\r\n SelectTrigger,\r\n SelectValue,\r\n};\r\n"],"mappings":";AAUS,cA0BL,YA1BK;AAPT,YAAY,qBAAqB;AACjC,SAAS,WAAW,iBAAiB,qBAAqB;AAC1D,SAAS,UAAU;AAEnB,SAAS,OAAO;AAAA,EACd,GAAG;AACL,GAAsD;AACpD,SAAO,oBAAC,gBAAgB,MAAhB,EAAqB,aAAU,UAAU,GAAG,OAAO;AAC7D;AAEA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAAuD;AACrD,SAAO,oBAAC,gBAAgB,OAAhB,EAAsB,aAAU,gBAAgB,GAAG,OAAO;AACpE;AAEA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAAuD;AACrD,SAAO,oBAAC,gBAAgB,OAAhB,EAAsB,aAAU,gBAAgB,GAAG,OAAO;AACpE;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAGG;AACD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QAED,oBAAC,gBAAgB,MAAhB,EAAqB,SAAO,MAC1B,kBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA;AAAA,QAMZ,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,GAAyD;AACvD,SACE,oBAAC,gBAAgB,QAAhB,EACC;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,aAAa,YACX;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,4BAAC,wBAAqB;AAAA,QACtB;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,aAAa,YACX;AAAA,YACJ;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,oBAAC,0BAAuB;AAAA;AAAA;AAAA,EAC1B,GACF;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA,GAAG;AACL,GAAuD;AACrD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,MACnE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,4BAAC,UAAK,WAAU,8DACd,8BAAC,gBAAgB,eAAhB,EACC,8BAAC,aAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACA,oBAAC,gBAAgB,UAAhB,EAAyB,WAAU,kBACjC,UACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA,GAAG;AACL,GAA2D;AACzD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iDAAiD,SAAS;AAAA,MACvE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,GAAgE;AAC9D,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,8BAAC,iBAAc,WAAU,UAAS;AAAA;AAAA,EACpC;AAEJ;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA,GAAG;AACL,GAAkE;AAChE,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,8BAAC,mBAAgB,WAAU,UAAS;AAAA;AAAA,EACtC;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Select.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { IconCheck, IconChevronDown, IconChevronUp } from '@tabler/icons-react';\nimport { cn } from \"../../../infra/utils/clsx\";\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n icon,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n icon?: React.ReactNode;\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"group/data-select border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children}\n\n <SelectPrimitive.Icon asChild>\n {icon ?? (\n <IconChevronDown\n className=\"\n size-4 opacity-50 transition-all duration-200\n group-data-[state=open]/data-select:rotate-180\n group-data-[state=open]/data-select:opacity-100\n group-data-[state=open]/data-select:text-gray-950!\n \"\n />\n )}\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-[1002] max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 cursor-pointer\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <IconCheck className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText className=\"cursor-pointer\">\n {children}\n </SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <IconChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <IconChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Switch.tsx"],"sourcesContent":["'use client';\r\n\r\n\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nfunction Switch({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\r\n return (\r\n <SwitchPrimitive.Root\r\n data-slot=\"switch\"\r\n className={cn(\r\n \"peer data-[state=checked]:bg-primary-hover data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 cursor-pointer dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <SwitchPrimitive.Thumb\r\n data-slot=\"switch-thumb\"\r\n className={cn(\r\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\r\n )}\r\n />\r\n </SwitchPrimitive.Root>\r\n )\r\n}\r\n\r\nexport { Switch }\r\n"],"mappings":";AAqBM;AAhBN,YAAY,qBAAqB;AACjC,SAAS,UAAU;AAEnB,SAAS,OAAO;AAAA,EACd;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Switch.tsx"],"sourcesContent":["'use client';\n\n\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { cn } from \"../../../infra/utils/clsx\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary-hover data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 cursor-pointer dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n"],"mappings":";AAqBM;AAhBN,YAAY,qBAAqB;AACjC,SAAS,UAAU;AAEnB,SAAS,OAAO;AAAA,EACd;AAAA,EACA,GAAG;AACL,GAAsD;AACpD,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ui/form/Textarea.tsx"],"sourcesContent":["'use client';\r\n\r\nimport * as React from \"react\"\r\nimport { cn } from \"../../../infra/utils/clsx\"\r\n\r\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\r\n return (\r\n <textarea\r\n data-slot=\"textarea\"\r\n className={cn(\r\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport { Textarea }\r\n"],"mappings":";AAOI;AAJJ,SAAS,UAAU;AAEnB,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAqC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/ui/form/Textarea.tsx"],"sourcesContent":["'use client';\n\nimport * as React from \"react\"\nimport { cn } from \"../../../infra/utils/clsx\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n"],"mappings":";AAOI;AAJJ,SAAS,UAAU;AAEnB,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAqC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}