@umituz/react-native-design-system 4.23.55 → 4.23.56

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 (33) hide show
  1. package/package.json +1 -1
  2. package/src/atoms/EmptyState.tsx +9 -9
  3. package/src/atoms/index.ts +0 -1
  4. package/src/exports/atoms.ts +0 -1
  5. package/src/exports/molecules/bottom-sheet.ts +0 -1
  6. package/src/exports/theme.ts +0 -1
  7. package/src/filesystem/infrastructure/services/file-reader.service.ts +6 -5
  8. package/src/image/presentation/components/editor/FilterPickerSheet.tsx +1 -1
  9. package/src/image/presentation/components/editor/StickerPickerSheet.tsx +1 -1
  10. package/src/molecules/bottom-sheet/index.ts +0 -1
  11. package/src/molecules/navigation/hooks/useAppNavigation.ts +2 -2
  12. package/src/onboarding/domain/entities/OnboardingSlide.ts +1 -1
  13. package/src/onboarding/domain/types/ImageSourceType.ts +8 -0
  14. package/src/onboarding/infrastructure/utils/layouts/layoutTypes.ts +2 -2
  15. package/src/storage/domain/factories/StoreFactory.ts +1 -2
  16. package/src/storage/domain/types/Store.ts +9 -0
  17. package/src/storage/index.ts +2 -4
  18. package/src/storage/infrastructure/adapters/StorageService.ts +1 -9
  19. package/src/tanstack/domain/config/QueryClientAccessor.ts +69 -0
  20. package/src/tanstack/domain/repositories/BaseRepository.ts +1 -1
  21. package/src/tanstack/domain/repositories/RepositoryFactory.ts +1 -1
  22. package/src/tanstack/infrastructure/config/QueryClientSingleton.ts +7 -65
  23. package/src/tanstack/presentation/hooks/usePrefetch.ts +2 -1
  24. package/src/theme/core/themes.ts +0 -16
  25. package/src/theme/core/tokens/BaseTokens.ts +0 -4
  26. package/src/theme/core/tokens/Borders.ts +3 -2
  27. package/src/theme/core/tokens/Sizes.ts +2 -1
  28. package/src/theme/core/tokens/Typography.ts +0 -19
  29. package/src/theme/hooks/commonStyles/textStyles.ts +4 -2
  30. package/src/theme/index.ts +0 -1
  31. package/src/theme/infrastructure/providers/DesignSystemProvider.tsx +4 -4
  32. package/src/theme/infrastructure/stores/themeStore.ts +0 -2
  33. package/src/molecules/bottom-sheet/SafeBottomSheetModalProvider.tsx +0 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-design-system",
3
- "version": "4.23.55",
3
+ "version": "4.23.56",
4
4
  "description": "Universal design system for React Native apps - Consolidated package with atoms, molecules, organisms, theme, typography, responsive, safe area, exception, infinite scroll, UUID, image, timezone, offline, onboarding, and loading utilities",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -11,7 +11,7 @@ import React from 'react';
11
11
  import { View, StyleSheet, TouchableOpacity, ViewStyle } from 'react-native';
12
12
  import { AtomicIcon } from './icon';
13
13
  import { AtomicText } from './AtomicText';
14
- import { useAppDesignTokens, STATIC_TOKENS } from '../theme';
14
+ import { useAppDesignTokens, BASE_TOKENS } from '../theme';
15
15
 
16
16
  export interface EmptyStateProps {
17
17
  icon?: string;
@@ -95,7 +95,7 @@ const styles = StyleSheet.create({
95
95
  flex: 1,
96
96
  alignItems: 'flex-start',
97
97
  justifyContent: 'flex-start',
98
- padding: STATIC_TOKENS.spacing.xl,
98
+ padding: BASE_TOKENS.spacing.xl,
99
99
  },
100
100
  iconContainer: {
101
101
  width: 120,
@@ -103,18 +103,18 @@ const styles = StyleSheet.create({
103
103
  borderRadius: 60,
104
104
  alignItems: 'flex-start',
105
105
  justifyContent: 'flex-start',
106
- marginBottom: STATIC_TOKENS.spacing.lg,
106
+ marginBottom: BASE_TOKENS.spacing.lg,
107
107
  },
108
108
  title: {
109
- marginBottom: STATIC_TOKENS.spacing.sm,
109
+ marginBottom: BASE_TOKENS.spacing.sm,
110
110
  },
111
111
  description: {
112
- marginBottom: STATIC_TOKENS.spacing.lg,
112
+ marginBottom: BASE_TOKENS.spacing.lg,
113
113
  },
114
114
  actionButton: {
115
- paddingHorizontal: STATIC_TOKENS.spacing.lg,
116
- paddingVertical: STATIC_TOKENS.spacing.md,
117
- borderRadius: STATIC_TOKENS.borders.radius.md,
118
- marginTop: STATIC_TOKENS.spacing.sm,
115
+ paddingHorizontal: BASE_TOKENS.spacing.lg,
116
+ paddingVertical: BASE_TOKENS.spacing.md,
117
+ borderRadius: BASE_TOKENS.borders.radius.md,
118
+ marginTop: BASE_TOKENS.spacing.sm,
119
119
  },
120
120
  });
@@ -106,7 +106,6 @@ export {
106
106
  // Spinner
107
107
  export {
108
108
  AtomicSpinner,
109
- AtomicSpinner as LoadingSpinner,
110
109
  type AtomicSpinnerProps,
111
110
  type SpinnerSize,
112
111
  type SpinnerColor,
@@ -18,7 +18,6 @@ export {
18
18
  AtomicSkeleton,
19
19
  AtomicBadge,
20
20
  AtomicSpinner,
21
- LoadingSpinner,
22
21
  EmptyState,
23
22
  type IconName,
24
23
  type IconSize,
@@ -10,7 +10,6 @@ export {
10
10
  useBottomSheet,
11
11
  useBottomSheetModal,
12
12
  useListFilters,
13
- SafeBottomSheetModalProvider,
14
13
  type BottomSheetProps,
15
14
  type BottomSheetModalProps,
16
15
  type BottomSheetRef,
@@ -16,7 +16,6 @@ export {
16
16
  getColorPalette,
17
17
  withAlpha,
18
18
  BASE_TOKENS,
19
- BASE_TOKENS as STATIC_TOKENS,
20
19
  spacing,
21
20
  typography,
22
21
  borders,
@@ -3,7 +3,7 @@
3
3
  * Single Responsibility: Read files from device storage
4
4
  */
5
5
 
6
- import * as FileSystem from "expo-file-system/legacy";
6
+ import { File } from "expo-file-system";
7
7
  import type { FileEncoding } from "../../domain/entities/File";
8
8
 
9
9
  /**
@@ -14,10 +14,11 @@ export async function readFile(
14
14
  encoding: FileEncoding = "utf8",
15
15
  ): Promise<string | null> {
16
16
  try {
17
- const content = await FileSystem.readAsStringAsync(uri, {
18
- encoding: encoding === "base64" ? FileSystem.EncodingType.Base64 : FileSystem.EncodingType.UTF8,
19
- });
20
- return content;
17
+ const file = new File(uri);
18
+ if (encoding === "base64") {
19
+ return await file.base64();
20
+ }
21
+ return await file.text();
21
22
  } catch {
22
23
  return null;
23
24
  }
@@ -28,7 +28,7 @@ export const FilterPickerSheet = forwardRef<BottomSheetModalRef, FilterPickerShe
28
28
  return (
29
29
  <BottomSheetModal ref={ref} snapPoints={snapPoints} onDismiss={onDismiss}>
30
30
  <View style={{ padding: tokens.spacing.lg, flex: 1 }}>
31
- <AtomicText style={{ ...tokens.typography.headingSmall, marginBottom: tokens.spacing.md }}>
31
+ <AtomicText style={{ ...tokens.typography.titleLarge, fontWeight: tokens.typography.semibold, marginBottom: tokens.spacing.md }}>
32
32
  {title}
33
33
  </AtomicText>
34
34
 
@@ -26,7 +26,7 @@ export const StickerPickerSheet = forwardRef<BottomSheetModalRef, StickerPickerS
26
26
  return (
27
27
  <BottomSheetModal ref={ref} snapPoints={snapPoints} onDismiss={onDismiss}>
28
28
  <View style={{ padding: tokens.spacing.lg, flex: 1 }}>
29
- <AtomicText style={{ ...tokens.typography.headingSmall, marginBottom: tokens.spacing.md }}>
29
+ <AtomicText style={{ ...tokens.typography.titleLarge, fontWeight: tokens.typography.semibold, marginBottom: tokens.spacing.md }}>
30
30
  {title}
31
31
  </AtomicText>
32
32
 
@@ -8,4 +8,3 @@ export * from './hooks/useBottomSheetModal';
8
8
  export * from './hooks/useListFilters';
9
9
  export * from './types/BottomSheet';
10
10
  export * from './types/Filter';
11
- export * from './SafeBottomSheetModalProvider';
@@ -1,4 +1,4 @@
1
- import { useNavigation } from "@react-navigation/native";
1
+ import { useNavigation, CommonActions } from "@react-navigation/native";
2
2
  import type { NavigationProp, ParamListBase } from "@react-navigation/native";
3
3
  import { useCallback, useMemo } from "react";
4
4
 
@@ -30,7 +30,7 @@ export function useAppNavigation(): AppNavigationResult {
30
30
 
31
31
  const navigate = useCallback(
32
32
  (screen: string, params?: Record<string, unknown>) => {
33
- (navigation.navigate as unknown as (name: string, params?: object) => void)(screen, params);
33
+ navigation.dispatch(CommonActions.navigate({ name: screen, params }));
34
34
  },
35
35
  [navigation]
36
36
  );
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import type { VideoSource } from "expo-video";
8
- import type { ImageSourceType } from "../../infrastructure/utils/layouts/layoutTypes";
8
+ import type { ImageSourceType } from "../types/ImageSourceType";
9
9
  import type { OnboardingQuestion, OnboardingAnswerValue } from "./OnboardingQuestion";
10
10
 
11
11
  /**
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Image Source Type
3
+ * Domain type for image sources used in onboarding slides
4
+ */
5
+
6
+ import type { ImageSource } from "expo-image";
7
+
8
+ export type ImageSourceType = ImageSource | number | string;
@@ -3,9 +3,9 @@
3
3
  * Type definitions for image layout generators
4
4
  */
5
5
 
6
- import type { ImageSource } from "expo-image";
6
+ import type { ImageSourceType } from "../../../domain/types/ImageSourceType";
7
7
 
8
- export type ImageSourceType = ImageSource | number | string;
8
+ export type { ImageSourceType };
9
9
 
10
10
  export interface SafeAreaInsets {
11
11
  top: number;
@@ -7,7 +7,6 @@ import { create } from 'zustand';
7
7
  import { persist, createJSONStorage } from 'zustand/middleware';
8
8
  import type { StoreApi } from 'zustand';
9
9
  import type { StoreConfig } from '../types/Store';
10
- import { storageService } from '../../infrastructure/adapters/StorageService';
11
10
 
12
11
  /**
13
12
  * Create a Zustand store with optional persistence and actions
@@ -35,7 +34,7 @@ export function createStore<
35
34
  return create<Store>()(
36
35
  persist<Store>(stateCreator, {
37
36
  name: config.name,
38
- storage: createJSONStorage(() => storageService),
37
+ storage: config.storage ? createJSONStorage(() => config.storage!) : undefined,
39
38
  version: config.version || 1,
40
39
  partialize: (config.partialize
41
40
  ? (state: Store) => config.partialize!(state)
@@ -5,6 +5,13 @@
5
5
 
6
6
  import type { StoreApi } from 'zustand';
7
7
 
8
+ /** StateStorage interface for Zustand persist middleware */
9
+ export interface StateStorage {
10
+ getItem: (name: string) => string | null | Promise<string | null>;
11
+ setItem: (name: string, value: string) => void | Promise<void>;
12
+ removeItem: (name: string) => void | Promise<void>;
13
+ }
14
+
8
15
  /** Set function type for Zustand */
9
16
  export type SetState<T> = StoreApi<T>['setState'];
10
17
 
@@ -35,6 +42,8 @@ export interface StoreConfig<TState extends object, TActions extends object = ob
35
42
  onRehydrate?: (state: TState & TActions) => void;
36
43
  /** Migration function for version changes */
37
44
  migrate?: (persistedState: unknown, version: number) => TState;
45
+ /** Custom storage adapter (required when persist is true) */
46
+ storage?: StateStorage;
38
47
  }
39
48
 
40
49
  /** Persisted state wrapper */
@@ -124,10 +124,8 @@ export {
124
124
  storageRepository,
125
125
  } from './infrastructure/repositories/AsyncStorageRepository';
126
126
 
127
- export {
128
- storageService,
129
- type StateStorage,
130
- } from './infrastructure/adapters/StorageService';
127
+ export { storageService } from './infrastructure/adapters/StorageService';
128
+ export type { StateStorage } from './domain/types/Store';
131
129
 
132
130
  // =============================================================================
133
131
  // PRESENTATION LAYER - Hooks
@@ -7,15 +7,7 @@
7
7
 
8
8
  import AsyncStorage from '@react-native-async-storage/async-storage';
9
9
  import { devWarn } from '../../domain/utils/devUtils';
10
-
11
- /**
12
- * StateStorage interface for Zustand persist middleware
13
- */
14
- export interface StateStorage {
15
- getItem: (name: string) => string | null | Promise<string | null>;
16
- setItem: (name: string, value: string) => void | Promise<void>;
17
- removeItem: (name: string) => void | Promise<void>;
18
- }
10
+ import type { StateStorage } from '../../domain/types/Store';
19
11
 
20
12
  /**
21
13
  * Storage service for Zustand persist middleware
@@ -0,0 +1,69 @@
1
+ /**
2
+ * QueryClient Accessor
3
+ * Domain layer - Global QueryClient access
4
+ *
5
+ * Provides access to QueryClient instance outside of React component tree.
6
+ * Useful for services, utilities, and callbacks that need to invalidate cache.
7
+ *
8
+ * IMPORTANT: setGlobalQueryClient must be called before using getGlobalQueryClient.
9
+ * This is typically done in TanstackProvider.
10
+ */
11
+
12
+ import type { QueryClient } from '@tanstack/react-query';
13
+
14
+ let globalQueryClient: QueryClient | null = null;
15
+
16
+ /**
17
+ * Set the global QueryClient instance.
18
+ * Called automatically by TanstackProvider.
19
+ */
20
+ export function setGlobalQueryClient(client: QueryClient): void {
21
+ if (globalQueryClient && globalQueryClient !== client) {
22
+ if (__DEV__) {
23
+
24
+ console.warn(
25
+ '[TanStack] QueryClient instance changed. Ensure you are not creating multiple instances.',
26
+ );
27
+ }
28
+ }
29
+ globalQueryClient = client;
30
+ }
31
+
32
+ /**
33
+ * Get the global QueryClient instance.
34
+ * Use this in non-React contexts (services, utilities, callbacks).
35
+ *
36
+ * @throws Error if QueryClient has not been set
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { getGlobalQueryClient, creditsQueryKeys } from '@umituz/react-native-tanstack';
41
+ *
42
+ * const queryClient = getGlobalQueryClient();
43
+ * queryClient.invalidateQueries({ queryKey: creditsQueryKeys.user(userId) });
44
+ * ```
45
+ */
46
+ export function getGlobalQueryClient(): QueryClient {
47
+ if (!globalQueryClient) {
48
+ throw new Error(
49
+ '[TanStack] QueryClient not initialized. Ensure TanstackProvider is rendered before calling getGlobalQueryClient.',
50
+ );
51
+ }
52
+ return globalQueryClient;
53
+ }
54
+
55
+ /**
56
+ * Check if global QueryClient is available.
57
+ * Use this before calling getGlobalQueryClient to avoid throwing.
58
+ */
59
+ export function hasGlobalQueryClient(): boolean {
60
+ return globalQueryClient !== null;
61
+ }
62
+
63
+ /**
64
+ * Clear the global QueryClient reference.
65
+ * Useful for cleanup in tests.
66
+ */
67
+ export function clearGlobalQueryClient(): void {
68
+ globalQueryClient = null;
69
+ }
@@ -36,7 +36,7 @@
36
36
  */
37
37
 
38
38
  import type { QueryClient, QueryKey } from '@tanstack/react-query';
39
- import { getGlobalQueryClient } from '../../infrastructure/config/QueryClientSingleton';
39
+ import { getGlobalQueryClient } from '../config/QueryClientAccessor';
40
40
  import { CacheStrategies } from '../../infrastructure/config/QueryClientConfig';
41
41
  import { createQueryKeyFactory } from '../utils/QueryKeyFactory';
42
42
  import type {
@@ -24,7 +24,7 @@
24
24
  */
25
25
 
26
26
  import type { BaseRepository } from './BaseRepository';
27
- import { getGlobalQueryClient } from '../../infrastructure/config/QueryClientSingleton';
27
+ import { getGlobalQueryClient } from '../config/QueryClientAccessor';
28
28
 
29
29
  type RepositoryMap = Map<string, BaseRepository<unknown, unknown, unknown>>;
30
30
 
@@ -1,69 +1,11 @@
1
1
  /**
2
2
  * QueryClient Singleton
3
- * Infrastructure layer - Global QueryClient access
4
- *
5
- * Provides access to QueryClient instance outside of React component tree.
6
- * Useful for services, utilities, and callbacks that need to invalidate cache.
7
- *
8
- * IMPORTANT: setGlobalQueryClient must be called before using getGlobalQueryClient.
9
- * This is typically done in TanstackProvider.
3
+ * Infrastructure layer re-export from domain accessor
10
4
  */
11
5
 
12
- import type { QueryClient } from '@tanstack/react-query';
13
-
14
- let globalQueryClient: QueryClient | null = null;
15
-
16
- /**
17
- * Set the global QueryClient instance.
18
- * Called automatically by TanstackProvider.
19
- */
20
- export function setGlobalQueryClient(client: QueryClient): void {
21
- if (globalQueryClient && globalQueryClient !== client) {
22
- if (__DEV__) {
23
-
24
- console.warn(
25
- '[TanStack] QueryClient instance changed. Ensure you are not creating multiple instances.',
26
- );
27
- }
28
- }
29
- globalQueryClient = client;
30
- }
31
-
32
- /**
33
- * Get the global QueryClient instance.
34
- * Use this in non-React contexts (services, utilities, callbacks).
35
- *
36
- * @throws Error if QueryClient has not been set
37
- *
38
- * @example
39
- * ```typescript
40
- * import { getGlobalQueryClient, creditsQueryKeys } from '@umituz/react-native-tanstack';
41
- *
42
- * const queryClient = getGlobalQueryClient();
43
- * queryClient.invalidateQueries({ queryKey: creditsQueryKeys.user(userId) });
44
- * ```
45
- */
46
- export function getGlobalQueryClient(): QueryClient {
47
- if (!globalQueryClient) {
48
- throw new Error(
49
- '[TanStack] QueryClient not initialized. Ensure TanstackProvider is rendered before calling getGlobalQueryClient.',
50
- );
51
- }
52
- return globalQueryClient;
53
- }
54
-
55
- /**
56
- * Check if global QueryClient is available.
57
- * Use this before calling getGlobalQueryClient to avoid throwing.
58
- */
59
- export function hasGlobalQueryClient(): boolean {
60
- return globalQueryClient !== null;
61
- }
62
-
63
- /**
64
- * Clear the global QueryClient reference.
65
- * Useful for cleanup in tests.
66
- */
67
- export function clearGlobalQueryClient(): void {
68
- globalQueryClient = null;
69
- }
6
+ export {
7
+ getGlobalQueryClient,
8
+ setGlobalQueryClient,
9
+ hasGlobalQueryClient,
10
+ clearGlobalQueryClient,
11
+ } from '../../domain/config/QueryClientAccessor';
@@ -115,6 +115,7 @@ export function usePrefetchInfiniteQuery<
115
115
  >(
116
116
  queryKey: QueryKey,
117
117
  queryFn: QueryFunction<TQueryFnData, QueryKey, TPageParam>,
118
+ initialPageParam: TPageParam,
118
119
  options: PrefetchOptions = {},
119
120
  ) {
120
121
  const queryClient = useQueryClient();
@@ -133,7 +134,7 @@ export function usePrefetchInfiniteQuery<
133
134
  queryFn,
134
135
  staleTime: options.staleTime,
135
136
  gcTime: options.gcTime,
136
- initialPageParam: undefined as unknown as TPageParam,
137
+ initialPageParam,
137
138
  });
138
139
 
139
140
  if (__DEV__) {
@@ -17,13 +17,6 @@ export interface Theme {
17
17
  spacing: typeof BASE_TOKENS.spacing;
18
18
  typography: typeof BASE_TOKENS.typography;
19
19
  borders: typeof BASE_TOKENS.borders;
20
- borderRadius: {
21
- sm: number;
22
- md: number;
23
- lg: number;
24
- xl: number;
25
- full: number;
26
- };
27
20
  iconSizes: {
28
21
  xs: number;
29
22
  sm: number;
@@ -54,15 +47,6 @@ export const lightTheme: Theme = {
54
47
  typography: BASE_TOKENS.typography,
55
48
  borders: BASE_TOKENS.borders,
56
49
 
57
- // Legacy compatibility mappings
58
- borderRadius: {
59
- sm: BASE_TOKENS.borders.radius.sm,
60
- md: BASE_TOKENS.borders.radius.md,
61
- lg: BASE_TOKENS.borders.radius.lg,
62
- xl: BASE_TOKENS.borders.radius.xl,
63
- full: BASE_TOKENS.borders.radius.full,
64
- },
65
-
66
50
  // Icon sizes from spacing
67
51
  iconSizes: {
68
52
  xs: BASE_TOKENS.spacing.iconSizeSmall,
@@ -56,10 +56,6 @@ export type Typography = {
56
56
  button: TextStyle;
57
57
  caption: TextStyle;
58
58
  overline: TextStyle;
59
- // Legacy compatibility
60
- headingLarge: TextStyle;
61
- headingMedium: TextStyle;
62
- headingSmall: TextStyle;
63
59
  // Font weight helpers (for inline fontWeight usage)
64
60
  semibold: '600';
65
61
  medium: '500';
@@ -6,6 +6,7 @@
6
6
 
7
7
  import type { ViewStyle } from 'react-native';
8
8
  import type { Borders } from './BaseTokens';
9
+ import { DESIGN_CONSTANTS } from '../constants/DesignConstants';
9
10
 
10
11
  export const borders: Borders = {
11
12
  radius: {
@@ -16,7 +17,7 @@ export const borders: Borders = {
16
17
  lg: 12,
17
18
  xl: 16,
18
19
  xxl: 24,
19
- full: 9999, // TODO: Use DESIGN_CONSTANTS.FULL_BORDER_RADIUS
20
+ full: DESIGN_CONSTANTS.FULL_BORDER_RADIUS,
20
21
  },
21
22
  width: {
22
23
  none: 0,
@@ -37,7 +38,7 @@ export const borders: Borders = {
37
38
  borderWidth: 1,
38
39
  } as ViewStyle,
39
40
  pill: {
40
- borderRadius: 9999,
41
+ borderRadius: DESIGN_CONSTANTS.FULL_BORDER_RADIUS,
41
42
  borderWidth: 0,
42
43
  } as ViewStyle,
43
44
  };
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import type { IconSizes, Opacity, AvatarSizes, ComponentSizes } from './BaseTokens';
8
+ import { DESIGN_CONSTANTS } from '../constants/DesignConstants';
8
9
 
9
10
  export const iconSizes: IconSizes = {
10
11
  xs: 16,
@@ -34,7 +35,7 @@ export const avatarSizes: AvatarSizes = {
34
35
  };
35
36
 
36
37
  export const sizes: ComponentSizes = {
37
- touchTarget: 44, // TODO: Use DESIGN_CONSTANTS.MINIMUM_TOUCH_TARGET
38
+ touchTarget: DESIGN_CONSTANTS.MINIMUM_TOUCH_TARGET,
38
39
  progressBar: {
39
40
  normal: 4,
40
41
  thick: 8,
@@ -116,25 +116,6 @@ export const typography: Typography = {
116
116
  lineHeight: 16,
117
117
  letterSpacing: 1.5,
118
118
  textTransform: 'uppercase',
119
- } as TextStyle,
120
- // Legacy compatibility aliases
121
- headingLarge: {
122
- fontSize: 32,
123
- fontWeight: '700',
124
- lineHeight: 40,
125
- letterSpacing: 0,
126
- } as TextStyle,
127
- headingMedium: {
128
- fontSize: 24,
129
- fontWeight: '600',
130
- lineHeight: 32,
131
- letterSpacing: 0,
132
- } as TextStyle,
133
- headingSmall: {
134
- fontSize: 20,
135
- fontWeight: '600',
136
- lineHeight: 28,
137
- letterSpacing: 0,
138
119
  } as TextStyle,
139
120
  // Font weight helpers (for inline fontWeight usage)
140
121
  semibold: '600' as const,
@@ -7,13 +7,15 @@ import type { DesignTokens } from '../../types/ThemeTypes';
7
7
 
8
8
  export const createTextStyles = (tokens: DesignTokens) => ({
9
9
  screenTitle: {
10
- ...tokens.typography.headingLarge,
10
+ ...tokens.typography.headlineLarge,
11
+ fontWeight: tokens.typography.bold,
11
12
  color: tokens.colors.textPrimary,
12
13
  marginBottom: tokens.spacing.sm,
13
14
  } as TextStyle,
14
15
 
15
16
  sectionTitle: {
16
- ...tokens.typography.headingMedium,
17
+ ...tokens.typography.headlineSmall,
18
+ fontWeight: tokens.typography.semibold,
17
19
  color: tokens.colors.textPrimary,
18
20
  marginBottom: tokens.spacing.md,
19
21
  } as TextStyle,
@@ -32,7 +32,6 @@ export {
32
32
 
33
33
  export {
34
34
  BASE_TOKENS,
35
- BASE_TOKENS as STATIC_TOKENS,
36
35
  spacing,
37
36
  typography,
38
37
  borders,
@@ -3,7 +3,7 @@ import { ActivityIndicator, View, StyleSheet } from 'react-native';
3
3
  import { GestureHandlerRootView } from 'react-native-gesture-handler';
4
4
  import { useFonts } from 'expo-font';
5
5
  import { SafeAreaProvider, initialWindowMetrics } from '../../../safe-area';
6
- import { useThemeStore } from '../stores/themeStore';
6
+ import { useTheme } from '../stores/themeStore';
7
7
  import { useDesignSystemTheme, type ThemeMode } from '../globalThemeStore';
8
8
  import type { CustomThemeColors } from '../../core/CustomColors';
9
9
  import { SplashScreen } from '../../../molecules/splash';
@@ -43,9 +43,9 @@ export const DesignSystemProvider: React.FC<DesignSystemProviderProps> = ({
43
43
  const [isInitialized, setIsInitialized] = useState(false);
44
44
  const [fontsLoaded, fontError] = fonts ? useFonts(fonts) : [true, null];
45
45
 
46
- const initialize = useThemeStore((state) => state.initialize);
47
- const setCustomColors = useThemeStore((state) => state.setCustomColors);
48
- const setDefaultColors = useThemeStore((state) => state.setDefaultColors);
46
+ const initialize = useTheme((state) => state.initialize);
47
+ const setCustomColors = useTheme((state) => state.setCustomColors);
48
+ const setDefaultColors = useTheme((state) => state.setDefaultColors);
49
49
  const setGlobalCustomColors = useDesignSystemTheme((state) => state.setCustomColors);
50
50
  const setGlobalThemeMode = useDesignSystemTheme((state) => state.setThemeMode);
51
51
 
@@ -124,7 +124,5 @@ export const useTheme = createStore<ThemeState, ThemeActions>({
124
124
  }),
125
125
  });
126
126
 
127
- export const useThemeStore = useTheme;
128
-
129
127
 
130
128
 
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
-
3
- /**
4
- * SafeBottomSheetModalProvider
5
- * A wrapper provider that was previously used for bottom sheet modals.
6
- * Currently serves as a pass-through to maintain compatibility with other packages.
7
- */
8
- export const SafeBottomSheetModalProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
9
- return <>{children}</>;
10
- };