@umituz/react-native-subscription 2.37.68 → 2.37.69

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 (39) hide show
  1. package/package.json +1 -1
  2. package/src/domains/credits/presentation/deduct-credit/mutationConfig.ts +2 -2
  3. package/src/domains/credits/presentation/deduct-credit/useDeductCredit.ts +1 -1
  4. package/src/domains/credits/presentation/useCredits.ts +1 -1
  5. package/src/domains/paywall/components/PaywallFeatures.tsx +2 -1
  6. package/src/domains/paywall/components/PaywallFooter.tsx +2 -1
  7. package/src/domains/paywall/components/PaywallModal.tsx +4 -1
  8. package/src/domains/paywall/components/PlanCard.tsx +2 -1
  9. package/src/domains/subscription/core/SubscriptionStatus.ts +1 -1
  10. package/src/domains/subscription/infrastructure/hooks/usePurchasePackage.ts +2 -2
  11. package/src/domains/subscription/infrastructure/hooks/useRestorePurchase.ts +2 -2
  12. package/src/domains/subscription/infrastructure/hooks/useSubscriptionPackages.ts +1 -1
  13. package/src/domains/subscription/presentation/components/details/CreditRow.tsx +2 -1
  14. package/src/domains/subscription/presentation/components/details/DetailRow.tsx +2 -1
  15. package/src/domains/subscription/presentation/components/details/PremiumDetailsCard.tsx +2 -1
  16. package/src/domains/subscription/presentation/components/details/PremiumDetailsCardActions.tsx +2 -1
  17. package/src/domains/subscription/presentation/components/details/PremiumDetailsCardHeader.tsx +2 -1
  18. package/src/domains/subscription/presentation/components/details/PremiumStatusBadge.tsx +2 -1
  19. package/src/domains/subscription/presentation/components/feedback/FeedbackOption.tsx +2 -1
  20. package/src/domains/subscription/presentation/components/feedback/FeedbackRadioButton.tsx +1 -1
  21. package/src/domains/subscription/presentation/components/feedback/FeedbackTextInput.tsx +1 -1
  22. package/src/domains/subscription/presentation/components/feedback/PaywallFeedbackModal.tsx +3 -1
  23. package/src/domains/subscription/presentation/components/feedback/paywallFeedbackStyles.ts +1 -1
  24. package/src/domains/subscription/presentation/components/overlay/PurchaseLoadingOverlay.tsx +2 -1
  25. package/src/domains/subscription/presentation/screens/SubscriptionDetailScreen.tsx +3 -1
  26. package/src/domains/subscription/presentation/screens/components/CreditsList.tsx +2 -1
  27. package/src/domains/subscription/presentation/screens/components/SubscriptionHeader.styles.ts +1 -1
  28. package/src/domains/subscription/presentation/screens/components/SubscriptionHeader.tsx +2 -1
  29. package/src/domains/subscription/presentation/screens/components/UpgradePrompt.tsx +2 -1
  30. package/src/domains/subscription/presentation/useSubscriptionStatus.ts +1 -1
  31. package/src/domains/wallet/presentation/components/BalanceCard.tsx +2 -5
  32. package/src/domains/wallet/presentation/components/TransactionItem.tsx +2 -1
  33. package/src/domains/wallet/presentation/components/TransactionList.tsx +2 -1
  34. package/src/domains/wallet/presentation/components/TransactionListStates.tsx +2 -1
  35. package/src/domains/wallet/presentation/components/transactionItemHelpers.ts +1 -1
  36. package/src/domains/wallet/presentation/hooks/useTransactionHistory.ts +1 -1
  37. package/src/domains/wallet/presentation/screens/WalletScreen.tsx +2 -1
  38. package/src/shared/infrastructure/react-query/hooks/usePreviousUserCleanup.ts +1 -1
  39. package/src/shared/presentation/layouts/ScreenLayout.tsx +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-subscription",
3
- "version": "2.37.68",
3
+ "version": "2.37.69",
4
4
  "description": "Complete subscription management with RevenueCat, paywall UI, and credits system for React Native apps",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,5 +1,5 @@
1
- import type { QueryClient } from "@umituz/react-native-design-system";
2
- import { timezoneService } from "@umituz/react-native-design-system";
1
+ import type { QueryClient } from "@umituz/react-native-design-system/tanstack";
2
+ import { timezoneService } from "@umituz/react-native-design-system/timezone";
3
3
  import type { UserCredits, DeductCreditsResult } from "../../core/Credits";
4
4
  import type { CreditsRepository } from "../../infrastructure/CreditsRepository";
5
5
  import { creditsQueryKeys } from "../creditsQueryKeys";
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useRef } from "react";
2
- import { useMutation, useQueryClient } from "@umituz/react-native-design-system";
2
+ import { useMutation, useQueryClient } from "@umituz/react-native-design-system/tanstack";
3
3
  import { getCreditsRepository } from "../../infrastructure/CreditsRepositoryManager";
4
4
  import type { UseDeductCreditParams, UseDeductCreditResult } from "./types";
5
5
  import type { DeductCreditsResult } from "../../core/Credits";
@@ -1,4 +1,4 @@
1
- import { useQuery, useQueryClient } from "@umituz/react-native-design-system";
1
+ import { useQuery, useQueryClient } from "@umituz/react-native-design-system/tanstack";
2
2
  import { useCallback, useMemo, useEffect } from "react";
3
3
  import { useAuthStore, selectUserId } from "@umituz/react-native-auth";
4
4
  import { subscriptionEventBus, SUBSCRIPTION_EVENTS } from "../../../shared/infrastructure/SubscriptionEventBus";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- import { AtomicText, AtomicIcon, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import type { SubscriptionFeature } from "../entities/types";
5
6
  import { paywallModalStyles as styles } from "./PaywallModal.styles";
6
7
 
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity } from "react-native";
3
- import { AtomicText, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import type { PaywallTranslations, PaywallLegalUrls } from "../entities/types";
5
6
  import { paywallModalStyles as styles } from "./PaywallModal.styles";
6
7
 
@@ -1,6 +1,9 @@
1
1
  import React, { useCallback, useEffect } from "react";
2
2
  import { View, TouchableOpacity, Linking } from "react-native";
3
- import { BaseModal, useAppDesignTokens, AtomicText, AtomicIcon, useSafeAreaInsets } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { BaseModal } from "@umituz/react-native-design-system/molecules";
5
+ import { useSafeAreaInsets } from "@umituz/react-native-design-system/safe-area";
6
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
7
  import { ScreenLayout } from "../../../shared/presentation";
5
8
  import { Image } from "expo-image";
6
9
  import { PlanCard } from "./PlanCard";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity, StyleSheet } from "react-native";
3
- import { AtomicText, AtomicIcon, AtomicBadge, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon, AtomicBadge } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { formatPriceWithPeriod } from '../../../utils/priceUtils';
5
6
  import { PlanCardProps } from "./PlanCard.types";
6
7
 
@@ -1,4 +1,4 @@
1
- import { timezoneService } from "@umituz/react-native-design-system";
1
+ import { timezoneService } from "@umituz/react-native-design-system/timezone";
2
2
  import {
3
3
  SUBSCRIPTION_STATUS,
4
4
  type SubscriptionStatusType
@@ -1,6 +1,6 @@
1
- import { useMutation, useQueryClient } from "@umituz/react-native-design-system";
1
+ import { useMutation, useQueryClient } from "@umituz/react-native-design-system/tanstack";
2
2
  import type { PurchasesPackage } from "react-native-purchases";
3
- import { useAlert } from "@umituz/react-native-design-system";
3
+ import { useAlert } from "@umituz/react-native-design-system/molecules";
4
4
  import {
5
5
  useAuthStore,
6
6
  selectUserId,
@@ -1,5 +1,5 @@
1
- import { useMutation, useQueryClient } from "@umituz/react-native-design-system";
2
- import { useAlert } from "@umituz/react-native-design-system";
1
+ import { useMutation, useQueryClient } from "@umituz/react-native-design-system/tanstack";
2
+ import { useAlert } from "@umituz/react-native-design-system/molecules";
3
3
  import {
4
4
  useAuthStore,
5
5
  selectUserId,
@@ -1,4 +1,4 @@
1
- import { useQuery, useQueryClient } from "@umituz/react-native-design-system";
1
+ import { useQuery, useQueryClient } from "@umituz/react-native-design-system/tanstack";
2
2
  import { useEffect, useRef, useSyncExternalStore } from "react";
3
3
  import {
4
4
  useAuthStore,
@@ -1,6 +1,7 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { View, StyleSheet } from "react-native";
3
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
 
5
6
  interface CreditRowProps {
6
7
  label: string;
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, StyleSheet, type ViewStyle, type TextStyle } from "react-native";
8
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
9
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
9
10
 
10
11
  interface DetailRowProps {
11
12
  label: string;
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { DetailRow } from "./DetailRow";
5
6
  import { CreditRow } from "./CreditRow";
6
7
  import { styles } from "./PremiumDetailsCard.styles";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity } from "react-native";
3
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { styles } from "./PremiumDetailsCard.styles";
5
6
  import type { PremiumDetailsTranslations } from "./PremiumDetailsCardTypes";
6
7
 
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { PremiumStatusBadge } from "./PremiumStatusBadge";
5
6
  import { styles } from "./PremiumDetailsCard.styles";
6
7
  import type { SubscriptionStatusType } from "../../../core/SubscriptionConstants";
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React, { useMemo } from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
9
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
9
10
  import {
10
11
  SUBSCRIPTION_STATUS,
11
12
  type SubscriptionStatusType
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity } from "react-native";
3
- import { AtomicText, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import type { FeedbackOptionProps } from "./FeedbackOption.types";
5
6
  import { feedbackOptionStyles } from "./FeedbackOption.styles";
6
7
  import { FEEDBACK_OPTION_OPACITY } from "./feedbackOptionConstants";
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
4
  import { feedbackOptionStyles } from "./FeedbackOption.styles";
5
5
 
6
6
  interface FeedbackRadioButtonProps {
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { View, TextInput } from "react-native";
3
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
4
  import { feedbackOptionStyles } from "./FeedbackOption.styles";
5
5
  import { FEEDBACK_INPUT_MAX_LENGTH, FEEDBACK_INPUT_MIN_HEIGHT } from "./feedbackOptionConstants";
6
6
 
@@ -1,6 +1,8 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { View, TouchableOpacity } from "react-native";
3
- import { AtomicText, BaseModal, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { BaseModal } from "@umituz/react-native-design-system/molecules";
5
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
6
  import { usePaywallFeedback } from "../../../../../presentation/hooks/feedback/usePaywallFeedback";
5
7
  import { createPaywallFeedbackStyles } from "./paywallFeedbackStyles";
6
8
  import { FeedbackOption } from "./FeedbackOption";
@@ -1,5 +1,5 @@
1
1
  import { StyleSheet } from "react-native";
2
- import type { DesignTokens } from "@umituz/react-native-design-system";
2
+ import type { DesignTokens } from "@umituz/react-native-design-system/theme";
3
3
 
4
4
  export const createPaywallFeedbackStyles = (
5
5
  tokens: DesignTokens,
@@ -6,7 +6,8 @@
6
6
 
7
7
  import React from "react";
8
8
  import { View, Modal, StyleSheet } from "react-native";
9
- import { AtomicSpinner, AtomicText, useAppDesignTokens } from "@umituz/react-native-design-system";
9
+ import { AtomicSpinner, AtomicText } from "@umituz/react-native-design-system/atoms";
10
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
10
11
  import { usePurchaseLoadingStore, selectIsPurchasing } from "../../stores";
11
12
 
12
13
  export interface PurchaseLoadingOverlayProps {
@@ -1,6 +1,8 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { StyleSheet, View, Pressable } from "react-native";
3
- import { useAppDesignTokens, NavigationHeader, AtomicIcon } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { NavigationHeader } from "@umituz/react-native-design-system/molecules";
5
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
6
  import { ScreenLayout } from "../../../../shared/presentation";
5
7
  import { SubscriptionHeader } from "./components/SubscriptionHeader";
6
8
  import { CreditsList } from "./components/CreditsList";
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React, { useMemo } from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
9
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
9
10
  import { CreditRow } from "../../components/details/CreditRow";
10
11
 
11
12
  interface CreditItem {
@@ -1,5 +1,5 @@
1
1
  import { StyleSheet } from "react-native";
2
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
2
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
3
3
 
4
4
  export const createSubscriptionHeaderStyles = (tokens: ReturnType<typeof useAppDesignTokens>) =>
5
5
  StyleSheet.create({
@@ -1,6 +1,7 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { PremiumStatusBadge } from "../../components/details/PremiumStatusBadge";
5
6
  import type { SubscriptionHeaderProps } from "./SubscriptionHeader.types";
6
7
  import { createSubscriptionHeaderStyles } from "./SubscriptionHeader.styles";
@@ -1,6 +1,7 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { View, StyleSheet, TouchableOpacity } from "react-native";
3
- import { useAppDesignTokens, AtomicText, AtomicIcon } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { UpgradePromptProps } from "./UpgradePrompt.types";
5
6
 
6
7
  export const UpgradePrompt: React.FC<UpgradePromptProps> = ({ title, subtitle, benefits, upgradeButtonLabel, onUpgrade }) => {
@@ -1,4 +1,4 @@
1
- import { useQuery, useQueryClient } from "@umituz/react-native-design-system";
1
+ import { useQuery, useQueryClient } from "@umituz/react-native-design-system/tanstack";
2
2
  import { useEffect, useSyncExternalStore } from "react";
3
3
  import { useAuthStore, selectUserId, selectIsAnonymous } from "@umituz/react-native-auth";
4
4
  import { SubscriptionManager } from "../infrastructure/managers/SubscriptionManager";
@@ -8,11 +8,8 @@
8
8
  import React from "react";
9
9
  import { View, StyleSheet } from "react-native";
10
10
 
11
- import {
12
- useAppDesignTokens,
13
- AtomicText,
14
- AtomicIcon,
15
- } from "@umituz/react-native-design-system";
11
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
12
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
16
13
 
17
14
  export interface BalanceCardTranslations {
18
15
  balanceLabel: string;
@@ -1,6 +1,7 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens, AtomicText, AtomicIcon } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { getTransactionIcon } from "../../utils/transactionIconMap";
5
6
  import { transactionItemStyles } from "./TransactionItem.styles";
6
7
  import type { TransactionItemProps } from "./TransactionItem.types";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, ScrollView } from "react-native";
3
- import { useAppDesignTokens, AtomicText, AtomicIcon } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import type { CreditLog } from "../../domain/types/transaction.types";
5
6
  import { TransactionItem } from "./TransactionItem";
6
7
  import type { TransactionItemTranslations } from "./TransactionItem.types";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View } from "react-native";
3
- import { useAppDesignTokens, AtomicText, AtomicIcon, AtomicSpinner } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon, AtomicSpinner } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { transactionListStyles } from "./TransactionList.styles";
5
6
 
6
7
  interface LoadingStateProps {
@@ -1,4 +1,4 @@
1
- import { timezoneService } from "@umituz/react-native-design-system";
1
+ import { timezoneService } from "@umituz/react-native-design-system/timezone";
2
2
  import type { TransactionItemTranslations } from "./TransactionItem.types";
3
3
 
4
4
  export const defaultDateFormatter = (timestamp: number): string => {
@@ -1,4 +1,4 @@
1
- import { useQuery } from "@umituz/react-native-design-system";
1
+ import { useQuery } from "@umituz/react-native-design-system/tanstack";
2
2
  import { useMemo } from "react";
3
3
  import { useAuthStore, selectUserId, selectIsAnonymous } from "@umituz/react-native-auth";
4
4
  import { NO_CACHE_QUERY_CONFIG } from "../../../../shared/infrastructure/react-query/queryConfig";
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, StyleSheet, TouchableOpacity } from "react-native";
3
- import { useAppDesignTokens, AtomicText, AtomicIcon, AtomicSpinner } from "@umituz/react-native-design-system";
3
+ import { AtomicText, AtomicIcon, AtomicSpinner } from "@umituz/react-native-design-system/atoms";
4
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
4
5
  import { ScreenLayout } from "../../../../shared/presentation";
5
6
  import { useNavigation } from "@react-navigation/native";
6
7
  import { useWallet } from "../hooks/useWallet";
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef } from "react";
2
- import type { QueryClient } from "@umituz/react-native-design-system";
2
+ import type { QueryClient } from "@umituz/react-native-design-system/tanstack";
3
3
  import { isAuthenticated } from "../../../../domains/subscription/utils/authGuards";
4
4
 
5
5
  export function usePreviousUserCleanup(
@@ -5,7 +5,7 @@
5
5
  import React from "react";
6
6
  import { StyleSheet, View, ScrollView, type ViewStyle, type ColorValue } from "react-native";
7
7
  import { useSafeAreaInsets, type Edge } from "react-native-safe-area-context";
8
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
8
+ import { useAppDesignTokens } from "@umituz/react-native-design-system/theme";
9
9
 
10
10
  interface ScreenLayoutProps {
11
11
  children: React.ReactNode;