@greatapps/common 1.1.85 → 1.1.87

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.
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ function useDebounce(value, delay = 400, onDebounce) {
4
+ const [debouncedValue, setDebouncedValue] = useState(value);
5
+ useEffect(() => {
6
+ const handler = setTimeout(() => {
7
+ setDebouncedValue(value);
8
+ onDebounce?.();
9
+ }, delay);
10
+ return () => {
11
+ clearTimeout(handler);
12
+ };
13
+ }, [value, delay, onDebounce]);
14
+ return debouncedValue;
15
+ }
16
+ export {
17
+ useDebounce
18
+ };
19
+ //# sourceMappingURL=useDebounce.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Hook para aplicar debounce em valores\n * @param value - Valor a ser debounced\n * @param delay - Delay em milissegundos (padrão: 400ms)\n * @returns Valor debounced\n */\nexport function useDebounce<T>(value: T, delay: number = 400, onDebounce?: () => void): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n onDebounce?.();\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay, onDebounce]);\n\n return debouncedValue;\n}\n"],"mappings":";AAEA,SAAS,WAAW,gBAAgB;AAQ7B,SAAS,YAAe,OAAU,QAAgB,KAAK,YAA4B;AACxF,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAY,KAAK;AAE7D,YAAU,MAAM;AACd,UAAM,UAAU,WAAW,MAAM;AAC/B,wBAAkB,KAAK;AACvB,mBAAa;AAAA,IACf,GAAG,KAAK;AAER,WAAO,MAAM;AACX,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,OAAO,OAAO,UAAU,CAAC;AAE7B,SAAO;AACT;","names":[]}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { useState } from "react";
3
+ import { useDebounce } from "./useDebounce";
4
+ function useDebounceState(initialValue, delay = 400) {
5
+ const [rawValue, setRawValue] = useState(initialValue);
6
+ const debouncedValue = useDebounce(rawValue, delay);
7
+ return [debouncedValue, setRawValue];
8
+ }
9
+ export {
10
+ useDebounceState
11
+ };
12
+ //# sourceMappingURL=useDebounceState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useDebounceState.ts"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { useDebounce } from './useDebounce';\n\nexport function useDebounceState<T>(initialValue: T, delay: number = 400): [T, (newValue: T) => void] {\n const [rawValue, setRawValue] = useState<T>(initialValue);\n const debouncedValue = useDebounce(rawValue, delay);\n return [debouncedValue, setRawValue];\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAErB,SAAS,iBAAoB,cAAiB,QAAgB,KAAiC;AACpG,QAAM,CAAC,UAAU,WAAW,IAAI,SAAY,YAAY;AACxD,QAAM,iBAAiB,YAAY,UAAU,KAAK;AAClD,SAAO,CAAC,gBAAgB,WAAW;AACrC;","names":[]}
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { useEffect, useRef, useState, useCallback } from "react";
3
+ function useDebouncedEffect({
4
+ effect,
5
+ debouncedDeps,
6
+ immediateDeps = [],
7
+ delay = 500
8
+ }) {
9
+ const [isDebouncing, setIsDebouncing] = useState(false);
10
+ const timerRef = useRef(null);
11
+ const effectRef = useRef(effect);
12
+ effectRef.current = effect;
13
+ const hasMounted = useRef(false);
14
+ const clearTimer = useCallback(() => {
15
+ if (timerRef.current) {
16
+ clearTimeout(timerRef.current);
17
+ timerRef.current = null;
18
+ }
19
+ }, []);
20
+ useEffect(() => {
21
+ clearTimer();
22
+ setIsDebouncing(false);
23
+ effectRef.current();
24
+ }, immediateDeps);
25
+ useEffect(() => {
26
+ if (!hasMounted.current) {
27
+ hasMounted.current = true;
28
+ return;
29
+ }
30
+ clearTimer();
31
+ setIsDebouncing(true);
32
+ timerRef.current = setTimeout(() => {
33
+ setIsDebouncing(false);
34
+ effectRef.current();
35
+ }, delay);
36
+ return clearTimer;
37
+ }, [...debouncedDeps, delay]);
38
+ useEffect(() => clearTimer, [clearTimer]);
39
+ return { isDebouncing };
40
+ }
41
+ export {
42
+ useDebouncedEffect
43
+ };
44
+ //# sourceMappingURL=useDebouncedEffect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useDebouncedEffect.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState, useCallback } from 'react';\n\ninterface UseDebouncedEffectOptions {\n effect: () => void;\n debouncedDeps: React.DependencyList;\n immediateDeps?: React.DependencyList;\n delay?: number;\n}\n\n/**\n * Executes an effect with two trigger modes:\n * - `debouncedDeps`: triggers the effect after a delay (resets on each change)\n * - `immediateDeps`: triggers the effect immediately (also cancels any pending debounce)\n *\n * On mount, the effect fires once immediately via `immediateDeps`.\n * The effect callback always uses the latest closure values via a ref.\n *\n * @returns `{ isDebouncing }` — true while waiting for a debounced trigger to fire\n */\nexport function useDebouncedEffect({\n effect,\n debouncedDeps,\n immediateDeps = [],\n delay = 500,\n}: UseDebouncedEffectOptions) {\n const [isDebouncing, setIsDebouncing] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const effectRef = useRef(effect);\n effectRef.current = effect;\n const hasMounted = useRef(false);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n clearTimer();\n setIsDebouncing(false);\n effectRef.current();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, immediateDeps);\n\n useEffect(() => {\n if (!hasMounted.current) {\n hasMounted.current = true;\n return;\n }\n\n clearTimer();\n setIsDebouncing(true);\n\n timerRef.current = setTimeout(() => {\n setIsDebouncing(false);\n effectRef.current();\n }, delay);\n\n return clearTimer;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...debouncedDeps, delay]);\n\n useEffect(() => clearTimer, [clearTimer]);\n\n return { isDebouncing };\n}\n"],"mappings":";AAEA,SAAS,WAAW,QAAQ,UAAU,mBAAmB;AAmBlD,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,QAAQ;AACV,GAA8B;AAC5B,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,WAAW,OAA6C,IAAI;AAClE,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,aAAa,OAAO,KAAK;AAE/B,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,SAAS,SAAS;AACpB,mBAAa,SAAS,OAAO;AAC7B,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,eAAW;AACX,oBAAgB,KAAK;AACrB,cAAU,QAAQ;AAAA,EAEpB,GAAG,aAAa;AAEhB,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB;AAAA,IACF;AAEA,eAAW;AACX,oBAAgB,IAAI;AAEpB,aAAS,UAAU,WAAW,MAAM;AAClC,sBAAgB,KAAK;AACrB,gBAAU,QAAQ;AAAA,IACpB,GAAG,KAAK;AAER,WAAO;AAAA,EAET,GAAG,CAAC,GAAG,eAAe,KAAK,CAAC;AAE5B,YAAU,MAAM,YAAY,CAAC,UAAU,CAAC;AAExC,SAAO,EAAE,aAAa;AACxB;","names":[]}
package/dist/index.mjs CHANGED
@@ -191,6 +191,9 @@ import { AccountSectionType } from "./enums/AccountSectionType";
191
191
  import { default as default6 } from "./hooks/usePasswordVisibility";
192
192
  import { default as default7 } from "./hooks/useCountdownTimer";
193
193
  import { default as default8 } from "./hooks/useIsMobile";
194
+ import { useDebounce } from "./hooks/useDebounce";
195
+ import { useDebouncedEffect } from "./hooks/useDebouncedEffect";
196
+ import { useDebounceState } from "./hooks/useDebounceState";
194
197
  import {
195
198
  formatPhone,
196
199
  formatTimer,
@@ -414,6 +417,9 @@ export {
414
417
  useAccountModals,
415
418
  useActiveSubscription,
416
419
  default7 as useCountdownTimer,
420
+ useDebounce,
421
+ useDebounceState,
422
+ useDebouncedEffect,
417
423
  useDeleteAccount,
418
424
  useDeleteAccountUser,
419
425
  useIaCredits,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Types\nexport * from \"./modules/auth/schema\";\nexport * from \"./modules/users/schema\";\nexport * from \"./modules/whitelabel/schema\";\nexport * from \"./infra/api/types\";\n\n// Contexts\nexport * from \"./providers/query.provider\";\nexport * from \"./providers/auth.provider\";\nexport * from \"./providers/whitelabel.provider\";\n\n// Hooks\nexport {\n useListProjectUsers,\n LIST_PROJECT_USERS_QUERY_KEY,\n LIST_PROJECT_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-project-users.hook\";\nexport {\n useListAvailableUsers,\n LIST_AVAILABLE_USERS_QUERY_KEY,\n LIST_AVAILABLE_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-available-users.hook\";\nexport type {\n ProjectUser,\n AccountUser,\n AddRemoveProjectUsersParams,\n ListUsersParams,\n UsersPage,\n} from \"./modules/projects/types\";\nexport {\n useUserQuery,\n useUserValidateSession,\n useInvalidateUser,\n useSetUserData,\n useTwoFactorVerify,\n USER_QUERY_KEY,\n} from \"./modules/auth/hooks/useUserQuery\";\nexport {\n useSubscriptions,\n SUBSCRIPTIONS_QUERY_KEY,\n} from \"./modules/subscriptions/hooks/list-subscriptions.hook\";\nexport { useActiveSubscription } from \"./modules/subscriptions/hooks/find-active-subscription.hook\";\nexport { useIaCredits } from \"./modules/ia-credits/hooks/ia-credits.hook\";\nexport type {\n IaCreditsSummary,\n IaCreditOperation,\n} from \"./modules/ia-credits/types\";\nexport type {\n Subscription,\n SubscriptionItem,\n FindSubscriptionsParams,\n} from \"./modules/subscriptions/types\";\nexport {\n SubscriptionSchema,\n SubscriptionItemSchema,\n} from \"./modules/subscriptions/types\";\nexport { ADDON_IDS } from \"./modules/subscriptions/constants/addons.constants\";\nexport type { AddonKindEnum } from \"./modules/subscriptions/constants/addons.constants\";\n\n// Providers\nexport { QueryProvider } from \"./providers/query.provider\";\n\n// Middleware\nexport { createAuthMiddleware } from \"./middlewares/create-auth-middleware\";\nexport { createMiddlewareChain } from \"./middlewares/chain\";\nexport { continueChain, stopChain } from \"./middlewares/types\";\nexport type {\n MiddlewareFunction,\n MiddlewareConfig,\n MiddlewareResult,\n} from \"./middlewares/types\";\n\n// Utils\nexport { cn } from \"./infra/utils/clsx\";\nexport { buildQueryParams } from \"./infra/utils/params\";\nexport { parseSchema, parseResult } from \"./infra/utils/parser\";\n\n// Layout\nexport {\n MainLayout,\n MainLayoutContent,\n MainLayoutSpacer,\n MainLayoutMain,\n} from \"./components/layouts/MainLayout\";\nexport { NavBar } from \"./components/layouts/NavBar\";\nexport type { NavBarProps } from \"./components/layouts/NavBar\";\nexport { AppNavBar } from \"./components/layouts/AppNavBar\";\nexport type { AppNavBarProps } from \"./components/layouts/AppNavBar\";\nexport { AppMobileNavBar } from \"./components/layouts/AppMobileNavBar\";\nexport type { AppMobileNavBarProps } from \"./components/layouts/AppMobileNavBar\";\nexport { SideBarNavigation } from \"./components/layouts/SideBarNavigation\";\nexport { MdSideBarNavigation } from \"./components/layouts/MdSideBarNavigation\";\nexport { default as NotificationCard } from \"./components/widgets/notifications/NotificationCard\";\nexport type { NotificationCardProps } from \"./components/widgets/notifications/NotificationCard\";\nexport { NotificationsPopover } from \"./components/layouts/NotificationsPopover\";\nexport type { NotificationsPopoverProps } from \"./components/layouts/NotificationsPopover\";\nexport { NotificationPageContent } from \"./components/pages/notifications/Notifications\";\nexport { UsersSelectorPopover } from \"./components/layouts/UsersSelectorPopover\";\nexport type { UsersSelectorPopoverProps } from \"./components/layouts/UsersSelectorPopover\";\nexport { ProfilePopover } from \"./components/layouts/ProfilePopover\";\nexport type {\n ProfilePopoverProps,\n ProfileMenuItem,\n} from \"./components/layouts/ProfilePopover\";\nexport { NavBarItem } from \"./components/layouts/NavBarItem\";\nexport type { NavBarItemProps } from \"./components/layouts/NavBarItem\";\n\n// UI - Buttons\nexport { Button, buttonVariants } from \"./components/ui/buttons/Button\";\nexport { CopyButton } from \"./components/ui/buttons/CopyButton\";\nexport { default as CancelButton } from \"./components/ui/buttons/CancelButton\";\n\n// UI - Data Display\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"./components/ui/data-display/Accordion\";\nexport { Badge, badgeVariants } from \"./components/ui/data-display/Badge\";\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n} from \"./components/ui/data-display/Card\";\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./components/ui/data-display/Pagination\";\nexport { ScrollArea, ScrollBar } from \"./components/ui/data-display/ScrollArea\";\nexport { Separator } from \"./components/ui/data-display/Separator\";\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./components/ui/data-display/Table\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"./components/ui/data-display/Tabs\";\nexport { UserAvatar } from \"./components/ui/data-display/UserAvatar\";\nexport type { UserAvatarProps } from \"./components/ui/data-display/UserAvatar\";\n\n// UI - Feedback\nexport { default as CircularProgress } from \"./components/ui/feedback/CircularProgress\";\nexport { default as DefaultCircularProgress } from \"./components/ui/feedback/DefaultCircularProgress\";\nexport { Progress } from \"./components/ui/feedback/Progress\";\nexport { LoadingOverlay } from \"./components/ui/feedback/LoadingOverlay\";\nexport {\n Toast,\n toastVariants,\n toastIconContainerVariants,\n} from \"./components/ui/feedback/Toast\";\nexport type { ToastProps } from \"./components/ui/feedback/Toast\";\n\n// UI - Form\nexport { Calendar, CalendarDayButton } from \"./components/ui/form/Calendar\";\nexport { Checkbox } from \"./components/ui/form/Checkbox\";\nexport { DatePicker } from \"./components/ui/form/DatePicker\";\nexport { DateRangePicker } from \"./components/ui/form/DateRangePicker\";\nexport { Input } from \"./components/ui/form/Input\";\nexport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n InputOTPSeparator,\n} from \"./components/ui/form/InputOtp\";\nexport { RadioGroup, RadioGroupItem } from \"./components/ui/form/RadioGroup\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"./components/ui/form/Select\";\nexport { Switch } from \"./components/ui/form/Switch\";\nexport { Textarea } from \"./components/ui/form/Textarea\";\n\n// UI - Overlay\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n} from \"./components/ui/overlay/Command\";\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from \"./components/ui/overlay/Dialog\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n} from \"./components/ui/overlay/Popover\";\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n} from \"./components/ui/overlay/Sheet\";\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"./components/ui/overlay/Tooltip\";\n\n// Store\nexport { useMdSidebarStore } from \"./store/useMdSidebarStore\";\nexport { useModalManager } from \"./store/useModalManager\";\nexport type { ModalData } from \"./store/useModalManager\";\n\n// Enums\nexport { AccountSectionType } from \"./enums/AccountSectionType\";\n\n// Hooks\nexport { default as usePasswordVisibility } from \"./hooks/usePasswordVisibility\";\nexport { default as useCountdownTimer } from \"./hooks/useCountdownTimer\";\nexport { default as useIsMobile } from \"./hooks/useIsMobile\";\n\n// Utils\nexport {\n formatPhone,\n formatTimer,\n formatFullName,\n formatCPF,\n formatCardNumber,\n} from \"./utils/format/masks\";\nexport { timezoneService } from \"./modules/accounts/services/timezone.service\";\nexport type { TimezoneOption } from \"./modules/accounts/services/timezone.service\";\nexport {\n buildLocaleOptions,\n LANGUAGE_OPTIONS as LOCALE_LANGUAGE_OPTIONS,\n} from \"./utils/intl/locales\";\nexport type { LocaleOption } from \"./utils/intl/locales\";\nexport { copyToClipboard, readFromClipboard } from \"./utils/browser/clipboard\";\n\n// UI - Form (new widgets)\nexport { FormField } from \"./components/ui/form/FormField\";\nexport { SelectField } from \"./components/ui/form/SelectField\";\nexport { ComboboxField } from \"./components/ui/form/ComboboxField\";\nexport type { ComboboxOption } from \"./components/ui/form/ComboboxField\";\nexport { default as PhoneInput } from \"./components/ui/form/PhoneInput\";\nexport { default as SwitchOptionFieldWithIcon } from \"./components/ui/form/SwitchOptionFieldWithIcon\";\nexport { TextAreaField } from \"./components/ui/form/TextAreaField\";\n\n// Account Module - Hooks\nexport {\n useUpdateAccount,\n useUpdateAccountUser,\n useUpdateAccountUserById,\n useDeleteAccountUser,\n useDeleteAccount,\n} from \"./modules/accounts/hooks/useAccountManagement\";\n\n// Account Types\nexport type {\n UpdateAccountRequest,\n UpdateAccountUserRequest,\n ChangePasswordRequest,\n DeleteAccountActionResult,\n DeleteUserActionResult,\n UpdateAccountActionResult,\n UpdateUserActionResult,\n TwoFactorGenerateResult,\n TwoFactorActionResult,\n ContactResetResult,\n} from \"./modules/accounts/types\";\n\nexport { default as AccountModals } from \"./components/account/AccountModals\";\nexport { useAccountModals } from \"./store/useAccountModals\";\nexport type { AccountModalsConfig } from \"./store/useAccountModals\";\n\nexport { ModalManager } from \"./components/modals/ModalManager\";\nexport { Modals } from \"./components/modals/Modals\";\n\nexport { default as TwoFactorAuthModal } from \"./components/account/TwoFactorAuthModal\";\nexport { default as DisableTwoFactorAuthModal } from \"./components/account/DisableTwoFactorAuthModal\";\nexport { default as ConfirmGlobalPreferencesModal } from \"./components/account/ConfirmGlobalPreferencesModal\";\nexport { MyProfileSection } from \"./components/account/sections/MyProfileSection\";\nexport { PreferencesSection } from \"./components/account/sections/PreferencesSection\";\nexport { SecuritySection } from \"./components/account/sections/SecuritySection\";\nexport { ChangePasswordSection } from \"./components/account/sections/ChangePasswordSection\";\nexport { ChangeEmailModal } from \"./components/account/sections/ChangeEmailModal\";\nexport { ChangePhoneModal } from \"./components/account/sections/ChangePhoneModal\";\n\n// Account Constants\nexport {\n GENDER_OPTIONS,\n CURRENCY_OPTIONS,\n TIME_FORMAT_OPTIONS,\n NOTIFICATION_TYPES,\n LANGUAGE_OPTIONS,\n} from \"./components/account/constants\";\n"],"mappings":"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","names":["default","LANGUAGE_OPTIONS"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Types\nexport * from \"./modules/auth/schema\";\nexport * from \"./modules/users/schema\";\nexport * from \"./modules/whitelabel/schema\";\nexport * from \"./infra/api/types\";\n\n// Contexts\nexport * from \"./providers/query.provider\";\nexport * from \"./providers/auth.provider\";\nexport * from \"./providers/whitelabel.provider\";\n\n// Hooks\nexport {\n useListProjectUsers,\n LIST_PROJECT_USERS_QUERY_KEY,\n LIST_PROJECT_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-project-users.hook\";\nexport {\n useListAvailableUsers,\n LIST_AVAILABLE_USERS_QUERY_KEY,\n LIST_AVAILABLE_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-available-users.hook\";\nexport type {\n ProjectUser,\n AccountUser,\n AddRemoveProjectUsersParams,\n ListUsersParams,\n UsersPage,\n} from \"./modules/projects/types\";\nexport {\n useUserQuery,\n useUserValidateSession,\n useInvalidateUser,\n useSetUserData,\n useTwoFactorVerify,\n USER_QUERY_KEY,\n} from \"./modules/auth/hooks/useUserQuery\";\nexport {\n useSubscriptions,\n SUBSCRIPTIONS_QUERY_KEY,\n} from \"./modules/subscriptions/hooks/list-subscriptions.hook\";\nexport { useActiveSubscription } from \"./modules/subscriptions/hooks/find-active-subscription.hook\";\nexport { useIaCredits } from \"./modules/ia-credits/hooks/ia-credits.hook\";\nexport type {\n IaCreditsSummary,\n IaCreditOperation,\n} from \"./modules/ia-credits/types\";\nexport type {\n Subscription,\n SubscriptionItem,\n FindSubscriptionsParams,\n} from \"./modules/subscriptions/types\";\nexport {\n SubscriptionSchema,\n SubscriptionItemSchema,\n} from \"./modules/subscriptions/types\";\nexport { ADDON_IDS } from \"./modules/subscriptions/constants/addons.constants\";\nexport type { AddonKindEnum } from \"./modules/subscriptions/constants/addons.constants\";\n\n// Providers\nexport { QueryProvider } from \"./providers/query.provider\";\n\n// Middleware\nexport { createAuthMiddleware } from \"./middlewares/create-auth-middleware\";\nexport { createMiddlewareChain } from \"./middlewares/chain\";\nexport { continueChain, stopChain } from \"./middlewares/types\";\nexport type {\n MiddlewareFunction,\n MiddlewareConfig,\n MiddlewareResult,\n} from \"./middlewares/types\";\n\n// Utils\nexport { cn } from \"./infra/utils/clsx\";\nexport { buildQueryParams } from \"./infra/utils/params\";\nexport { parseSchema, parseResult } from \"./infra/utils/parser\";\n\n// Layout\nexport {\n MainLayout,\n MainLayoutContent,\n MainLayoutSpacer,\n MainLayoutMain,\n} from \"./components/layouts/MainLayout\";\nexport { NavBar } from \"./components/layouts/NavBar\";\nexport type { NavBarProps } from \"./components/layouts/NavBar\";\nexport { AppNavBar } from \"./components/layouts/AppNavBar\";\nexport type { AppNavBarProps } from \"./components/layouts/AppNavBar\";\nexport { AppMobileNavBar } from \"./components/layouts/AppMobileNavBar\";\nexport type { AppMobileNavBarProps } from \"./components/layouts/AppMobileNavBar\";\nexport { SideBarNavigation } from \"./components/layouts/SideBarNavigation\";\nexport { MdSideBarNavigation } from \"./components/layouts/MdSideBarNavigation\";\nexport { default as NotificationCard } from \"./components/widgets/notifications/NotificationCard\";\nexport type { NotificationCardProps } from \"./components/widgets/notifications/NotificationCard\";\nexport { NotificationsPopover } from \"./components/layouts/NotificationsPopover\";\nexport type { NotificationsPopoverProps } from \"./components/layouts/NotificationsPopover\";\nexport { NotificationPageContent } from \"./components/pages/notifications/Notifications\";\nexport { UsersSelectorPopover } from \"./components/layouts/UsersSelectorPopover\";\nexport type { UsersSelectorPopoverProps } from \"./components/layouts/UsersSelectorPopover\";\nexport { ProfilePopover } from \"./components/layouts/ProfilePopover\";\nexport type {\n ProfilePopoverProps,\n ProfileMenuItem,\n} from \"./components/layouts/ProfilePopover\";\nexport { NavBarItem } from \"./components/layouts/NavBarItem\";\nexport type { NavBarItemProps } from \"./components/layouts/NavBarItem\";\n\n// UI - Buttons\nexport { Button, buttonVariants } from \"./components/ui/buttons/Button\";\nexport { CopyButton } from \"./components/ui/buttons/CopyButton\";\nexport { default as CancelButton } from \"./components/ui/buttons/CancelButton\";\n\n// UI - Data Display\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"./components/ui/data-display/Accordion\";\nexport { Badge, badgeVariants } from \"./components/ui/data-display/Badge\";\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n} from \"./components/ui/data-display/Card\";\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./components/ui/data-display/Pagination\";\nexport { ScrollArea, ScrollBar } from \"./components/ui/data-display/ScrollArea\";\nexport { Separator } from \"./components/ui/data-display/Separator\";\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./components/ui/data-display/Table\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"./components/ui/data-display/Tabs\";\nexport { UserAvatar } from \"./components/ui/data-display/UserAvatar\";\nexport type { UserAvatarProps } from \"./components/ui/data-display/UserAvatar\";\n\n// UI - Feedback\nexport { default as CircularProgress } from \"./components/ui/feedback/CircularProgress\";\nexport { default as DefaultCircularProgress } from \"./components/ui/feedback/DefaultCircularProgress\";\nexport { Progress } from \"./components/ui/feedback/Progress\";\nexport { LoadingOverlay } from \"./components/ui/feedback/LoadingOverlay\";\nexport {\n Toast,\n toastVariants,\n toastIconContainerVariants,\n} from \"./components/ui/feedback/Toast\";\nexport type { ToastProps } from \"./components/ui/feedback/Toast\";\n\n// UI - Form\nexport { Calendar, CalendarDayButton } from \"./components/ui/form/Calendar\";\nexport { Checkbox } from \"./components/ui/form/Checkbox\";\nexport { DatePicker } from \"./components/ui/form/DatePicker\";\nexport { DateRangePicker } from \"./components/ui/form/DateRangePicker\";\nexport { Input } from \"./components/ui/form/Input\";\nexport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n InputOTPSeparator,\n} from \"./components/ui/form/InputOtp\";\nexport { RadioGroup, RadioGroupItem } from \"./components/ui/form/RadioGroup\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"./components/ui/form/Select\";\nexport { Switch } from \"./components/ui/form/Switch\";\nexport { Textarea } from \"./components/ui/form/Textarea\";\n\n// UI - Overlay\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n} from \"./components/ui/overlay/Command\";\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from \"./components/ui/overlay/Dialog\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n} from \"./components/ui/overlay/Popover\";\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n} from \"./components/ui/overlay/Sheet\";\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"./components/ui/overlay/Tooltip\";\n\n// Store\nexport { useMdSidebarStore } from \"./store/useMdSidebarStore\";\nexport { useModalManager } from \"./store/useModalManager\";\nexport type { ModalData } from \"./store/useModalManager\";\n\n// Enums\nexport { AccountSectionType } from \"./enums/AccountSectionType\";\n\n// Hooks\nexport { default as usePasswordVisibility } from \"./hooks/usePasswordVisibility\";\nexport { default as useCountdownTimer } from \"./hooks/useCountdownTimer\";\nexport { default as useIsMobile } from \"./hooks/useIsMobile\";\nexport { useDebounce } from \"./hooks/useDebounce\";\nexport { useDebouncedEffect } from \"./hooks/useDebouncedEffect\";\nexport { useDebounceState } from \"./hooks/useDebounceState\";\n\n// Utils\nexport {\n formatPhone,\n formatTimer,\n formatFullName,\n formatCPF,\n formatCardNumber,\n} from \"./utils/format/masks\";\nexport { timezoneService } from \"./modules/accounts/services/timezone.service\";\nexport type { TimezoneOption } from \"./modules/accounts/services/timezone.service\";\nexport {\n buildLocaleOptions,\n LANGUAGE_OPTIONS as LOCALE_LANGUAGE_OPTIONS,\n} from \"./utils/intl/locales\";\nexport type { LocaleOption } from \"./utils/intl/locales\";\nexport { copyToClipboard, readFromClipboard } from \"./utils/browser/clipboard\";\n\n// UI - Form (new widgets)\nexport { FormField } from \"./components/ui/form/FormField\";\nexport { SelectField } from \"./components/ui/form/SelectField\";\nexport { ComboboxField } from \"./components/ui/form/ComboboxField\";\nexport type { ComboboxOption } from \"./components/ui/form/ComboboxField\";\nexport { default as PhoneInput } from \"./components/ui/form/PhoneInput\";\nexport { default as SwitchOptionFieldWithIcon } from \"./components/ui/form/SwitchOptionFieldWithIcon\";\nexport { TextAreaField } from \"./components/ui/form/TextAreaField\";\n\n// Account Module - Hooks\nexport {\n useUpdateAccount,\n useUpdateAccountUser,\n useUpdateAccountUserById,\n useDeleteAccountUser,\n useDeleteAccount,\n} from \"./modules/accounts/hooks/useAccountManagement\";\n\n// Account Types\nexport type {\n UpdateAccountRequest,\n UpdateAccountUserRequest,\n ChangePasswordRequest,\n DeleteAccountActionResult,\n DeleteUserActionResult,\n UpdateAccountActionResult,\n UpdateUserActionResult,\n TwoFactorGenerateResult,\n TwoFactorActionResult,\n ContactResetResult,\n} from \"./modules/accounts/types\";\n\nexport { default as AccountModals } from \"./components/account/AccountModals\";\nexport { useAccountModals } from \"./store/useAccountModals\";\nexport type { AccountModalsConfig } from \"./store/useAccountModals\";\n\nexport { ModalManager } from \"./components/modals/ModalManager\";\nexport { Modals } from \"./components/modals/Modals\";\n\nexport { default as TwoFactorAuthModal } from \"./components/account/TwoFactorAuthModal\";\nexport { default as DisableTwoFactorAuthModal } from \"./components/account/DisableTwoFactorAuthModal\";\nexport { default as ConfirmGlobalPreferencesModal } from \"./components/account/ConfirmGlobalPreferencesModal\";\nexport { MyProfileSection } from \"./components/account/sections/MyProfileSection\";\nexport { PreferencesSection } from \"./components/account/sections/PreferencesSection\";\nexport { SecuritySection } from \"./components/account/sections/SecuritySection\";\nexport { ChangePasswordSection } from \"./components/account/sections/ChangePasswordSection\";\nexport { ChangeEmailModal } from \"./components/account/sections/ChangeEmailModal\";\nexport { ChangePhoneModal } from \"./components/account/sections/ChangePhoneModal\";\n\n// Account Constants\nexport {\n GENDER_OPTIONS,\n CURRENCY_OPTIONS,\n TIME_FORMAT_OPTIONS,\n NOTIFICATION_TYPES,\n LANGUAGE_OPTIONS,\n} from \"./components/account/constants\";\n"],"mappings":"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","names":["default","LANGUAGE_OPTIONS"]}
@@ -2,40 +2,112 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import {
4
4
  QueryCache,
5
- QueryClient,
6
- QueryClientProvider
5
+ QueryClient
7
6
  } from "@tanstack/react-query";
8
- import { useState } from "react";
7
+ import { useEffect, useState } from "react";
9
8
  import dynamic from "next/dynamic";
10
9
  import { toast } from "sonner";
10
+ import {
11
+ PersistQueryClientProvider
12
+ } from "@tanstack/react-query-persist-client";
13
+ import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
14
+ import { set, get, del } from "idb-keyval";
11
15
  const ReactQueryDevtools = process.env.NODE_ENV === "development" ? dynamic(
12
16
  () => import("@tanstack/react-query-devtools").then((mod) => ({
13
17
  default: mod.ReactQueryDevtools
14
18
  })),
15
19
  { ssr: false }
16
20
  ) : () => null;
17
- function QueryProvider({ children }) {
21
+ const persister = {
22
+ persistClient: async (client) => {
23
+ try {
24
+ await set("rq-cache", client);
25
+ } catch {
26
+ console.warn("Falha ao persistir cache");
27
+ }
28
+ },
29
+ restoreClient: async () => {
30
+ try {
31
+ return await get("rq-cache");
32
+ } catch {
33
+ await del("rq-cache").catch(() => {
34
+ });
35
+ return void 0;
36
+ }
37
+ },
38
+ removeClient: async () => {
39
+ try {
40
+ await del("rq-cache");
41
+ } catch {
42
+ console.warn("Falha ao remover cache");
43
+ }
44
+ }
45
+ };
46
+ function QueryProvider({
47
+ children,
48
+ persisterVersion = "v1"
49
+ }) {
18
50
  const [queryClient] = useState(
19
51
  () => new QueryClient({
20
52
  defaultOptions: {
21
53
  queries: {
22
- staleTime: 60 * 1e3,
23
- refetchOnWindowFocus: false
54
+ staleTime: 5 * 60 * 1e3,
55
+ gcTime: 4 * 60 * 60 * 1e3,
56
+ refetchOnWindowFocus: false,
57
+ refetchOnReconnect: true,
58
+ retry: 2,
59
+ retryDelay: (attempt) => Math.min(1e3 * 2 ** attempt, 3e4)
60
+ },
61
+ mutations: {
62
+ retry: 1,
63
+ onError: (error) => {
64
+ toast.error(
65
+ error instanceof Error ? error.message : "Erro inesperado na opera\xE7\xE3o."
66
+ );
67
+ }
24
68
  }
25
69
  },
26
70
  queryCache: new QueryCache({
27
71
  onError: (error) => {
28
- toast.error(error.message);
72
+ toast.error(
73
+ error instanceof Error ? error.message : "Ocorreu um erro inesperado. Por favor, tente novamente."
74
+ );
29
75
  }
30
76
  })
31
77
  })
32
78
  );
33
- return /* @__PURE__ */ jsxs(QueryClientProvider, { client: queryClient, children: [
34
- children,
35
- /* @__PURE__ */ jsx(ReactQueryDevtools, { initialIsOpen: false })
36
- ] });
79
+ useEffect(() => {
80
+ broadcastQueryClient({
81
+ queryClient,
82
+ broadcastChannel: "react-query"
83
+ });
84
+ }, [queryClient]);
85
+ return /* @__PURE__ */ jsxs(
86
+ PersistQueryClientProvider,
87
+ {
88
+ client: queryClient,
89
+ persistOptions: {
90
+ persister,
91
+ maxAge: 2 * 60 * 60 * 1e3,
92
+ buster: persisterVersion,
93
+ dehydrateOptions: {
94
+ shouldDehydrateQuery: (query) => {
95
+ if (query.state.status === "error") return false;
96
+ if (query.meta?.persist === false) return false;
97
+ if ((query.state.dataUpdateCount ?? 0) > 10) return false;
98
+ return true;
99
+ }
100
+ }
101
+ },
102
+ children: [
103
+ children,
104
+ /* @__PURE__ */ jsx(ReactQueryDevtools, { initialIsOpen: false })
105
+ ]
106
+ }
107
+ );
37
108
  }
38
109
  export {
39
- QueryProvider
110
+ QueryProvider,
111
+ persister
40
112
  };
41
113
  //# sourceMappingURL=query.provider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function QueryProvider({ children }: QueryProviderProps) {\r\n const [queryClient] = useState(\r\n () =>\r\n new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 60 * 1000,\r\n refetchOnWindowFocus: false,\r\n },\r\n },\r\n queryCache: new QueryCache({\r\n onError: (error) => {\r\n toast.error(error.message);\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n {children}\r\n <ReactQueryDevtools initialIsOpen={false} />\r\n </QueryClientProvider>\r\n );\r\n}\r\n"],"mappings":";AA8CI,SAEE,KAFF;AA5CJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAoB,gBAAgB;AACpC,OAAO,aAAa;AACpB,SAAS,aAAa;AAGtB,MAAM,qBACJ,QAAQ,IAAI,aAAa,gBACrB;AAAA,EACE,MACE,OAAO,gCAAgC,EAAE,KAAK,CAAC,SAAS;AAAA,IACtD,SAAS,IAAI;AAAA,EACf,EAAE;AAAA,EACJ,EAAE,KAAK,MAAM;AACf,IACA,MAAM;AAML,SAAS,cAAc,EAAE,SAAS,GAAuB;AAC9D,QAAM,CAAC,WAAW,IAAI;AAAA,IACpB,MACE,IAAI,YAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS;AAAA,UACP,WAAW,KAAK;AAAA,UAChB,sBAAsB;AAAA,QACxB;AAAA,MACF;AAAA,MACA,YAAY,IAAI,WAAW;AAAA,QACzB,SAAS,CAAC,UAAU;AAClB,gBAAM,MAAM,MAAM,OAAO;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAEA,SACE,qBAAC,uBAAoB,QAAQ,aAC1B;AAAA;AAAA,IACD,oBAAC,sBAAmB,eAAe,OAAO;AAAA,KAC5C;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useEffect, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\nimport {\r\n PersistedClient,\r\n PersistQueryClientProvider,\r\n} from \"@tanstack/react-query-persist-client\";\r\nimport { broadcastQueryClient } from \"@tanstack/query-broadcast-client-experimental\";\r\nimport { set, get, del } from \"idb-keyval\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\nexport const persister = {\r\n persistClient: async (client: PersistedClient) => {\r\n try {\r\n await set(\"rq-cache\", client);\r\n } catch {\r\n console.warn(\"Falha ao persistir cache\");\r\n }\r\n },\r\n restoreClient: async (): Promise<PersistedClient | undefined> => {\r\n try {\r\n return await get(\"rq-cache\");\r\n } catch {\r\n await del(\"rq-cache\").catch(() => {});\r\n return undefined;\r\n }\r\n },\r\n removeClient: async () => {\r\n try {\r\n await del(\"rq-cache\");\r\n } catch {\r\n console.warn(\"Falha ao remover cache\");\r\n }\r\n },\r\n};\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n persisterVersion?: string;\r\n}\r\n\r\nexport function QueryProvider({\r\n children,\r\n persisterVersion = \"v1\",\r\n}: QueryProviderProps) {\r\n const [queryClient] = useState(\r\n () =>\r\n new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 5 * 60 * 1000,\r\n gcTime: 4 * 60 * 60 * 1000,\r\n refetchOnWindowFocus: false,\r\n refetchOnReconnect: true,\r\n retry: 2,\r\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),\r\n },\r\n mutations: {\r\n retry: 1,\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Erro inesperado na operação.\",\r\n );\r\n },\r\n },\r\n },\r\n queryCache: new QueryCache({\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro inesperado. Por favor, tente novamente.\",\r\n );\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n broadcastQueryClient({\r\n queryClient,\r\n broadcastChannel: \"react-query\",\r\n });\r\n }, [queryClient]);\r\n\r\n return (\r\n <PersistQueryClientProvider\r\n client={queryClient}\r\n persistOptions={{\r\n persister,\r\n maxAge: 2 * 60 * 60 * 1000,\r\n buster: persisterVersion,\r\n dehydrateOptions: {\r\n shouldDehydrateQuery: (query) => {\r\n if (query.state.status === \"error\") return false;\r\n if (query.meta?.persist === false) return false;\r\n if ((query.state.dataUpdateCount ?? 0) > 10) return false;\r\n return true;\r\n },\r\n },\r\n }}\r\n >\r\n {children}\r\n <ReactQueryDevtools initialIsOpen={false} />\r\n </PersistQueryClientProvider>\r\n );\r\n}\r\n"],"mappings":";AA0GI,SAiBE,KAjBF;AAxGJ;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAoB,WAAW,gBAAgB;AAC/C,OAAO,aAAa;AACpB,SAAS,aAAa;AACtB;AAAA,EAEE;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,KAAK,KAAK,WAAW;AAG9B,MAAM,qBACJ,QAAQ,IAAI,aAAa,gBACrB;AAAA,EACE,MACE,OAAO,gCAAgC,EAAE,KAAK,CAAC,SAAS;AAAA,IACtD,SAAS,IAAI;AAAA,EACf,EAAE;AAAA,EACJ,EAAE,KAAK,MAAM;AACf,IACA,MAAM;AAEL,MAAM,YAAY;AAAA,EACvB,eAAe,OAAO,WAA4B;AAChD,QAAI;AACF,YAAM,IAAI,YAAY,MAAM;AAAA,IAC9B,QAAQ;AACN,cAAQ,KAAK,0BAA0B;AAAA,IACzC;AAAA,EACF;AAAA,EACA,eAAe,YAAkD;AAC/D,QAAI;AACF,aAAO,MAAM,IAAI,UAAU;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,UAAU,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AACpC,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,cAAc,YAAY;AACxB,QAAI;AACF,YAAM,IAAI,UAAU;AAAA,IACtB,QAAQ;AACN,cAAQ,KAAK,wBAAwB;AAAA,IACvC;AAAA,EACF;AACF;AAOO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,mBAAmB;AACrB,GAAuB;AACrB,QAAM,CAAC,WAAW,IAAI;AAAA,IACpB,MACE,IAAI,YAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS;AAAA,UACP,WAAW,IAAI,KAAK;AAAA,UACpB,QAAQ,IAAI,KAAK,KAAK;AAAA,UACtB,sBAAsB;AAAA,UACtB,oBAAoB;AAAA,UACpB,OAAO;AAAA,UACP,YAAY,CAAC,YAAY,KAAK,IAAI,MAAO,KAAK,SAAS,GAAK;AAAA,QAC9D;AAAA,QACA,WAAW;AAAA,UACT,OAAO;AAAA,UACP,SAAS,CAAC,UAAU;AAClB,kBAAM;AAAA,cACJ,iBAAiB,QACb,MAAM,UACN;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY,IAAI,WAAW;AAAA,QACzB,SAAS,CAAC,UAAU;AAClB,gBAAM;AAAA,YACJ,iBAAiB,QACb,MAAM,UACN;AAAA,UACN;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAEA,YAAU,MAAM;AACd,yBAAqB;AAAA,MACnB;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,CAAC;AAEhB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,gBAAgB;AAAA,QACd;AAAA,QACA,QAAQ,IAAI,KAAK,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,kBAAkB;AAAA,UAChB,sBAAsB,CAAC,UAAU;AAC/B,gBAAI,MAAM,MAAM,WAAW,QAAS,QAAO;AAC3C,gBAAI,MAAM,MAAM,YAAY,MAAO,QAAO;AAC1C,iBAAK,MAAM,MAAM,mBAAmB,KAAK,GAAI,QAAO;AACpD,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACD,oBAAC,sBAAmB,eAAe,OAAO;AAAA;AAAA;AAAA,EAC5C;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greatapps/common",
3
- "version": "1.1.85",
3
+ "version": "1.1.87",
4
4
  "description": "Shared library for GreatApps frontend applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./src/index.ts",
@@ -39,11 +39,14 @@
39
39
  "@radix-ui/react-switch": "^1.2.6",
40
40
  "@radix-ui/react-tabs": "^1.1.13",
41
41
  "@radix-ui/react-tooltip": "^1.2.8",
42
+ "@tanstack/query-broadcast-client-experimental": "^5.90.20",
43
+ "@tanstack/react-query-persist-client": "^5.90.24",
42
44
  "axios": "^1.13.5",
43
45
  "class-variance-authority": "^0.7.1",
44
46
  "clsx": "^2.1.1",
45
47
  "cmdk": "^1.1.1",
46
48
  "date-fns": "^4.1.0",
49
+ "idb-keyval": "^6.2.2",
47
50
  "input-otp": "^1.4.2",
48
51
  "lucide-react": "^0.575.0",
49
52
  "react-day-picker": "^9.14.0",
@@ -60,7 +63,7 @@
60
63
  "@types/react": "^19.2.14",
61
64
  "@types/react-dom": "^19.2.3",
62
65
  "glob": "^13.0.6",
63
- "next": "15.5.9",
66
+ "next": "^15.5.12",
64
67
  "react": "19.1.4",
65
68
  "react-dom": "19.1.4",
66
69
  "react-hook-form": "^7.71.2",
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useState } from 'react';
4
+
5
+ /**
6
+ * Hook para aplicar debounce em valores
7
+ * @param value - Valor a ser debounced
8
+ * @param delay - Delay em milissegundos (padrão: 400ms)
9
+ * @returns Valor debounced
10
+ */
11
+ export function useDebounce<T>(value: T, delay: number = 400, onDebounce?: () => void): T {
12
+ const [debouncedValue, setDebouncedValue] = useState<T>(value);
13
+
14
+ useEffect(() => {
15
+ const handler = setTimeout(() => {
16
+ setDebouncedValue(value);
17
+ onDebounce?.();
18
+ }, delay);
19
+
20
+ return () => {
21
+ clearTimeout(handler);
22
+ };
23
+ }, [value, delay, onDebounce]);
24
+
25
+ return debouncedValue;
26
+ }
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { useDebounce } from './useDebounce';
5
+
6
+ export function useDebounceState<T>(initialValue: T, delay: number = 400): [T, (newValue: T) => void] {
7
+ const [rawValue, setRawValue] = useState<T>(initialValue);
8
+ const debouncedValue = useDebounce(rawValue, delay);
9
+ return [debouncedValue, setRawValue];
10
+ }
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+
3
+ import { useEffect, useRef, useState, useCallback } from 'react';
4
+
5
+ interface UseDebouncedEffectOptions {
6
+ effect: () => void;
7
+ debouncedDeps: React.DependencyList;
8
+ immediateDeps?: React.DependencyList;
9
+ delay?: number;
10
+ }
11
+
12
+ /**
13
+ * Executes an effect with two trigger modes:
14
+ * - `debouncedDeps`: triggers the effect after a delay (resets on each change)
15
+ * - `immediateDeps`: triggers the effect immediately (also cancels any pending debounce)
16
+ *
17
+ * On mount, the effect fires once immediately via `immediateDeps`.
18
+ * The effect callback always uses the latest closure values via a ref.
19
+ *
20
+ * @returns `{ isDebouncing }` — true while waiting for a debounced trigger to fire
21
+ */
22
+ export function useDebouncedEffect({
23
+ effect,
24
+ debouncedDeps,
25
+ immediateDeps = [],
26
+ delay = 500,
27
+ }: UseDebouncedEffectOptions) {
28
+ const [isDebouncing, setIsDebouncing] = useState(false);
29
+ const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
30
+ const effectRef = useRef(effect);
31
+ effectRef.current = effect;
32
+ const hasMounted = useRef(false);
33
+
34
+ const clearTimer = useCallback(() => {
35
+ if (timerRef.current) {
36
+ clearTimeout(timerRef.current);
37
+ timerRef.current = null;
38
+ }
39
+ }, []);
40
+
41
+ useEffect(() => {
42
+ clearTimer();
43
+ setIsDebouncing(false);
44
+ effectRef.current();
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, immediateDeps);
47
+
48
+ useEffect(() => {
49
+ if (!hasMounted.current) {
50
+ hasMounted.current = true;
51
+ return;
52
+ }
53
+
54
+ clearTimer();
55
+ setIsDebouncing(true);
56
+
57
+ timerRef.current = setTimeout(() => {
58
+ setIsDebouncing(false);
59
+ effectRef.current();
60
+ }, delay);
61
+
62
+ return clearTimer;
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
+ }, [...debouncedDeps, delay]);
65
+
66
+ useEffect(() => clearTimer, [clearTimer]);
67
+
68
+ return { isDebouncing };
69
+ }
package/src/index.ts CHANGED
@@ -256,6 +256,9 @@ export { AccountSectionType } from "./enums/AccountSectionType";
256
256
  export { default as usePasswordVisibility } from "./hooks/usePasswordVisibility";
257
257
  export { default as useCountdownTimer } from "./hooks/useCountdownTimer";
258
258
  export { default as useIsMobile } from "./hooks/useIsMobile";
259
+ export { useDebounce } from "./hooks/useDebounce";
260
+ export { useDebouncedEffect } from "./hooks/useDebouncedEffect";
261
+ export { useDebounceState } from "./hooks/useDebounceState";
259
262
 
260
263
  // Utils
261
264
  export {
@@ -5,9 +5,15 @@ import {
5
5
  QueryClient,
6
6
  QueryClientProvider,
7
7
  } from "@tanstack/react-query";
8
- import { ReactNode, useState } from "react";
8
+ import { ReactNode, useEffect, useState } from "react";
9
9
  import dynamic from "next/dynamic";
10
10
  import { toast } from "sonner";
11
+ import {
12
+ PersistedClient,
13
+ PersistQueryClientProvider,
14
+ } from "@tanstack/react-query-persist-client";
15
+ import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
16
+ import { set, get, del } from "idb-keyval";
11
17
 
12
18
  // React Query Devtools só em desenvolvimento - remove do bundle de produção
13
19
  const ReactQueryDevtools =
@@ -21,32 +27,101 @@ const ReactQueryDevtools =
21
27
  )
22
28
  : () => null;
23
29
 
30
+ export const persister = {
31
+ persistClient: async (client: PersistedClient) => {
32
+ try {
33
+ await set("rq-cache", client);
34
+ } catch {
35
+ console.warn("Falha ao persistir cache");
36
+ }
37
+ },
38
+ restoreClient: async (): Promise<PersistedClient | undefined> => {
39
+ try {
40
+ return await get("rq-cache");
41
+ } catch {
42
+ await del("rq-cache").catch(() => {});
43
+ return undefined;
44
+ }
45
+ },
46
+ removeClient: async () => {
47
+ try {
48
+ await del("rq-cache");
49
+ } catch {
50
+ console.warn("Falha ao remover cache");
51
+ }
52
+ },
53
+ };
54
+
24
55
  interface QueryProviderProps {
25
56
  children: ReactNode;
57
+ persisterVersion?: string;
26
58
  }
27
59
 
28
- export function QueryProvider({ children }: QueryProviderProps) {
60
+ export function QueryProvider({
61
+ children,
62
+ persisterVersion = "v1",
63
+ }: QueryProviderProps) {
29
64
  const [queryClient] = useState(
30
65
  () =>
31
66
  new QueryClient({
32
67
  defaultOptions: {
33
68
  queries: {
34
- staleTime: 60 * 1000,
69
+ staleTime: 5 * 60 * 1000,
70
+ gcTime: 4 * 60 * 60 * 1000,
35
71
  refetchOnWindowFocus: false,
72
+ refetchOnReconnect: true,
73
+ retry: 2,
74
+ retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),
75
+ },
76
+ mutations: {
77
+ retry: 1,
78
+ onError: (error) => {
79
+ toast.error(
80
+ error instanceof Error
81
+ ? error.message
82
+ : "Erro inesperado na operação.",
83
+ );
84
+ },
36
85
  },
37
86
  },
38
87
  queryCache: new QueryCache({
39
88
  onError: (error) => {
40
- toast.error(error.message);
89
+ toast.error(
90
+ error instanceof Error
91
+ ? error.message
92
+ : "Ocorreu um erro inesperado. Por favor, tente novamente.",
93
+ );
41
94
  },
42
95
  }),
43
96
  }),
44
97
  );
45
98
 
99
+ useEffect(() => {
100
+ broadcastQueryClient({
101
+ queryClient,
102
+ broadcastChannel: "react-query",
103
+ });
104
+ }, [queryClient]);
105
+
46
106
  return (
47
- <QueryClientProvider client={queryClient}>
107
+ <PersistQueryClientProvider
108
+ client={queryClient}
109
+ persistOptions={{
110
+ persister,
111
+ maxAge: 2 * 60 * 60 * 1000,
112
+ buster: persisterVersion,
113
+ dehydrateOptions: {
114
+ shouldDehydrateQuery: (query) => {
115
+ if (query.state.status === "error") return false;
116
+ if (query.meta?.persist === false) return false;
117
+ if ((query.state.dataUpdateCount ?? 0) > 10) return false;
118
+ return true;
119
+ },
120
+ },
121
+ }}
122
+ >
48
123
  {children}
49
124
  <ReactQueryDevtools initialIsOpen={false} />
50
- </QueryClientProvider>
125
+ </PersistQueryClientProvider>
51
126
  );
52
127
  }