@umituz/react-native-design-system 2.8.5 → 2.8.6

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 (42) hide show
  1. package/package.json +10 -2
  2. package/src/atoms/image/AtomicImage.tsx +0 -1
  3. package/src/device/infrastructure/services/DeviceFeatureService.ts +0 -1
  4. package/src/haptics/infrastructure/services/HapticService.ts +0 -1
  5. package/src/image/infrastructure/services/ImageConversionService.ts +1 -1
  6. package/src/image/infrastructure/services/ImageEditorService.ts +6 -8
  7. package/src/image/infrastructure/services/ImageTransformService.ts +1 -1
  8. package/src/image/infrastructure/utils/BatchProcessor.ts +2 -3
  9. package/src/image/infrastructure/utils/MetadataExtractor.ts +10 -7
  10. package/src/image/presentation/components/GalleryHeader.tsx +1 -3
  11. package/src/image/presentation/components/ImageGallery.tsx +2 -2
  12. package/src/image/presentation/components/editor/FilterPickerSheet.tsx +5 -7
  13. package/src/image/presentation/components/editor/StickerPickerSheet.tsx +4 -6
  14. package/src/image/presentation/components/editor/TextEditorSheet.tsx +5 -7
  15. package/src/image/presentation/components/editor/TextEditorTabs.tsx +7 -6
  16. package/src/image/presentation/components/image/AtomicImage.tsx +0 -1
  17. package/src/infinite-scroll/presentation/hooks/pagination.helper.ts +1 -1
  18. package/src/molecules/bottom-sheet/SafeBottomSheetModalProvider.tsx +0 -1
  19. package/src/offline/infrastructure/events/NetworkEvents.ts +0 -1
  20. package/src/offline/infrastructure/utils/healthCheck.ts +0 -5
  21. package/src/offline/presentation/hooks/useOffline.ts +0 -1
  22. package/src/offline/presentation/hooks/useOfflineWithMutations.ts +0 -2
  23. package/src/onboarding/infrastructure/utils/layouts/screenDimensions.ts +1 -1
  24. package/src/onboarding/presentation/components/BackgroundImageCollage.tsx +1 -1
  25. package/src/onboarding/presentation/components/BaseSlide.tsx +1 -2
  26. package/src/onboarding/presentation/components/OnboardingFooter.tsx +1 -1
  27. package/src/onboarding/presentation/components/OnboardingHeader.tsx +2 -1
  28. package/src/onboarding/presentation/components/OnboardingResetSetting.tsx +3 -1
  29. package/src/onboarding/presentation/components/OnboardingScreenContent.tsx +1 -1
  30. package/src/onboarding/presentation/components/OnboardingSlide.tsx +2 -1
  31. package/src/onboarding/presentation/components/QuestionSlide.tsx +1 -2
  32. package/src/onboarding/presentation/components/QuestionSlideHeader.tsx +2 -1
  33. package/src/onboarding/presentation/components/questions/MultipleChoiceQuestion.tsx +1 -1
  34. package/src/onboarding/presentation/components/questions/QuestionOptionItem.tsx +2 -1
  35. package/src/onboarding/presentation/components/questions/RatingQuestion.tsx +2 -1
  36. package/src/onboarding/presentation/components/questions/SingleChoiceQuestion.tsx +2 -1
  37. package/src/onboarding/presentation/components/questions/TextInputQuestion.tsx +1 -1
  38. package/src/onboarding/presentation/hooks/__tests__/useOnboardingContainerStyle.test.ts +2 -2
  39. package/src/onboarding/presentation/hooks/useOnboardingContainerStyle.ts +1 -1
  40. package/src/onboarding/presentation/screens/OnboardingScreen.tsx +1 -2
  41. package/src/timezone/infrastructure/services/TimezoneProvider.ts +2 -2
  42. package/src/molecules/calendar/infrastructure/storage/CalendarStore.ts.bak +0 -116
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-design-system",
3
- "version": "2.8.5",
3
+ "version": "2.8.6",
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, and onboarding utilities",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -26,7 +26,7 @@
26
26
  "./package.json": "./package.json"
27
27
  },
28
28
  "scripts": {
29
- "typecheck": "tsc --noEmit",
29
+ "typecheck": "tsc --noEmit --skipLibCheck",
30
30
  "lint": "eslint . --ext .ts,.tsx",
31
31
  "version:patch": "npm version patch -m 'chore: release v%s'",
32
32
  "version:minor": "npm version minor -m 'chore: release v%s'",
@@ -58,6 +58,7 @@
58
58
  "peerDependencies": {
59
59
  "@expo/vector-icons": ">=15.0.0",
60
60
  "@react-native-community/datetimepicker": ">=8.0.0",
61
+ "@react-native-community/slider": ">=4.0.0",
61
62
  "@react-navigation/bottom-tabs": ">=7.0.0",
62
63
  "@react-navigation/native": ">=7.0.0",
63
64
  "@react-navigation/stack": ">=7.0.0",
@@ -72,6 +73,7 @@
72
73
  "expo-device": ">=5.0.0",
73
74
  "expo-font": ">=12.0.0",
74
75
  "expo-image": ">=3.0.0",
76
+ "expo-image-manipulator": ">=12.0.0",
75
77
  "expo-network": ">=8.0.0",
76
78
  "expo-secure-store": ">=14.0.0",
77
79
  "expo-sharing": ">=12.0.0",
@@ -98,6 +100,7 @@
98
100
  "@expo/vector-icons": "^15.0.0",
99
101
  "@react-native-async-storage/async-storage": "^2.2.0",
100
102
  "@react-native-community/datetimepicker": "^8.5.1",
103
+ "@react-native-community/slider": "^4.5.5",
101
104
  "@react-navigation/bottom-tabs": "^7.9.0",
102
105
  "@react-navigation/native": "^7.1.26",
103
106
  "@react-navigation/stack": "^7.6.13",
@@ -123,10 +126,15 @@
123
126
  "expo-device": "~7.0.2",
124
127
  "expo-file-system": "^19.0.21",
125
128
  "expo-font": "~13.0.0",
129
+ "expo-network": "~8.0.0",
130
+ "expo-video": "~3.0.0",
126
131
  "expo-haptics": "~14.0.0",
132
+ "expo-image-manipulator": "~13.0.0",
127
133
  "expo-image": "~3.0.11",
128
134
  "expo-localization": "~16.0.1",
129
135
  "expo-secure-store": "~14.0.0",
136
+ "i18next": "^25.0.0",
137
+ "react-i18next": "^16.0.0",
130
138
  "expo-sharing": "~14.0.8",
131
139
  "react": "19.1.0",
132
140
  "react-native": "0.81.5",
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import { Image as ExpoImage, ImageProps as ExpoImageProps } from 'expo-image';
3
- import { StyleSheet, ViewStyle } from 'react-native';
4
3
 
5
4
  export type AtomicImageProps = ExpoImageProps & {
6
5
  rounded?: boolean;
@@ -13,7 +13,6 @@ import type {
13
13
  DeviceFeatureConfig,
14
14
  DeviceFeatureUsage,
15
15
  DeviceFeatureAccess,
16
- FeatureLimit,
17
16
  ResetPeriod,
18
17
  } from '../../domain/entities/DeviceFeatureConfig';
19
18
  import { PersistentDeviceIdService } from './PersistentDeviceIdService';
@@ -10,7 +10,6 @@
10
10
 
11
11
  import * as Haptics from 'expo-haptics';
12
12
  import type { ImpactStyle, NotificationType, HapticPattern } from '../../domain/entities/Haptic';
13
- import { isImpactStyle, isNotificationType, isHapticPattern } from '../../domain/entities/Haptic';
14
13
 
15
14
  /**
16
15
  * Log error in development mode only
@@ -13,7 +13,7 @@ import type {
13
13
  import { IMAGE_CONSTANTS } from '../../domain/entities/ImageConstants';
14
14
  import { ImageTransformService } from './ImageTransformService';
15
15
  import { ImageValidator } from '../utils/ImageValidator';
16
- import { ImageErrorHandler, IMAGE_ERROR_CODES } from '../utils/ImageErrorHandler';
16
+ import { ImageErrorHandler } from '../utils/ImageErrorHandler';
17
17
  import { ImageTransformUtils } from '../utils/ImageTransformUtils';
18
18
 
19
19
  export class ImageConversionService {
@@ -4,12 +4,11 @@
4
4
  * Core editing functionality with layer and tool management
5
5
  */
6
6
 
7
- import {
8
- EditorTool,
9
- type EditorState,
10
- type EditorLayer,
11
- type EditorHistory,
12
- type EditorOptions
7
+ import {
8
+ EditorTool,
9
+ type EditorState,
10
+ type EditorLayer,
11
+ type EditorHistory
13
12
  } from '../../domain/entities/EditorTypes';
14
13
  import { ImageErrorHandler, IMAGE_ERROR_CODES } from '../utils/ImageErrorHandler';
15
14
  import { ImageEditorHistoryUtils } from '../utils/ImageEditorHistoryUtils';
@@ -21,8 +20,7 @@ export class ImageEditorService {
21
20
 
22
21
  static createInitialState(
23
22
  uri: string,
24
- dimensions: { width: number; height: number },
25
- options: EditorOptions = {}
23
+ dimensions: { width: number; height: number }
26
24
  ): EditorState {
27
25
  const defaultLayer: EditorLayer = {
28
26
  id: 'background',
@@ -14,7 +14,7 @@ import type {
14
14
  } from '../../domain/entities/ImageTypes';
15
15
  import { ImageUtils } from '../../domain/utils/ImageUtils';
16
16
  import { ImageValidator } from '../utils/ImageValidator';
17
- import { ImageErrorHandler, IMAGE_ERROR_CODES } from '../utils/ImageErrorHandler';
17
+ import { ImageErrorHandler } from '../utils/ImageErrorHandler';
18
18
  import { ImageTransformUtils } from '../utils/ImageTransformUtils';
19
19
 
20
20
  export class ImageTransformService {
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import type { ImageManipulationResult, ImageCropArea, SaveFormat } from '../../domain/entities/ImageTypes';
8
- import type { BatchOperation, BatchProcessingOptions } from '../services/ImageBatchService';
8
+ import type { BatchOperation } from '../services/ImageBatchService';
9
9
  import { ImageTransformService } from '../services/ImageTransformService';
10
10
  import { ImageConversionService } from '../services/ImageConversionService';
11
11
  import { ImageValidator } from './ImageValidator';
@@ -13,8 +13,7 @@ import { ImageErrorHandler, IMAGE_ERROR_CODES } from './ImageErrorHandler';
13
13
 
14
14
  export class BatchProcessor {
15
15
  static async processBatchItem(
16
- operation: BatchOperation,
17
- options: BatchProcessingOptions = {}
16
+ operation: BatchOperation
18
17
  ): Promise<{ uri: string; result: ImageManipulationResult | null; error?: Error }> {
19
18
  try {
20
19
  const uriValidation = ImageValidator.validateUri(operation.uri);
@@ -4,11 +4,11 @@
4
4
  * Helper functions for extracting metadata from images
5
5
  */
6
6
 
7
- import type { ImageMetadataExtractionOptions } from '../../infrastructure/services/ImageMetadataService';
8
7
  import { ImageErrorHandler } from './ImageErrorHandler';
9
8
 
10
9
  export class MetadataExtractor {
11
- static async getImageDimensions(uri: string): Promise<{ width: number; height: number }> {
10
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
+ static async getImageDimensions(_uri: string): Promise<{ width: number; height: number }> {
12
12
  try {
13
13
  // In a real implementation, we would use:
14
14
  // - expo-image-manipulator for basic dimensions
@@ -25,7 +25,8 @@ export class MetadataExtractor {
25
25
  }
26
26
  }
27
27
 
28
- static async getFileSize(uri: string): Promise<number> {
28
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
+ static async getFileSize(_uri: string): Promise<number> {
29
30
  try {
30
31
  // In real implementation, use expo-file-system or similar
31
32
  return Math.floor(Math.random() * 5000000) + 10000; // Random size between 10KB-5MB
@@ -34,7 +35,8 @@ export class MetadataExtractor {
34
35
  }
35
36
  }
36
37
 
37
- static async extractExifData(uri: string): Promise<any> {
38
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
+ static async extractExifData(_uri: string): Promise<any> {
38
40
  try {
39
41
  // Mock EXIF data extraction
40
42
  return {
@@ -47,19 +49,20 @@ export class MetadataExtractor {
47
49
  ExposureTime: `1/${Math.floor(Math.random() * 1000) + 100}`,
48
50
  FNumber: Math.random() * 8 + 1.4,
49
51
  };
50
- } catch (error) {
52
+ } catch {
51
53
  return null;
52
54
  }
53
55
  }
54
56
 
55
- static async extractGPSData(uri: string): Promise<{ latitude: number; longitude: number } | null> {
57
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
58
+ static async extractGPSData(_uri: string): Promise<{ latitude: number; longitude: number } | null> {
56
59
  try {
57
60
  // Mock GPS data extraction
58
61
  return Math.random() > 0.7 ? {
59
62
  latitude: Math.random() * 180 - 90,
60
63
  longitude: Math.random() * 360 - 180,
61
64
  } : null;
62
- } catch (error) {
65
+ } catch {
63
66
  return null;
64
67
  }
65
68
  }
@@ -8,8 +8,7 @@
8
8
  import React from 'react';
9
9
  import { View, TouchableOpacity, StyleSheet } from 'react-native';
10
10
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
11
- import { useAppDesignTokens } from '@umituz/react-native-design-system';
12
- import { AtomicText } from '@umituz/react-native-design-system';
11
+ import { AtomicText } from '../../../atoms/AtomicText';
13
12
 
14
13
  interface GalleryHeaderProps {
15
14
  onEdit?: () => void;
@@ -19,7 +18,6 @@ interface GalleryHeaderProps {
19
18
 
20
19
  export function GalleryHeader({ onEdit, onClose, title }: GalleryHeaderProps) {
21
20
  const insets = useSafeAreaInsets();
22
- const tokens = useAppDesignTokens();
23
21
 
24
22
  return (
25
23
  <View style={[
@@ -5,8 +5,8 @@
5
5
  * Replaces slow standard image components for instant loading.
6
6
  */
7
7
 
8
- import React, { useCallback, useMemo, useState, useEffect } from 'react';
9
- import { Modal, View, StyleSheet, FlatList, Dimensions, TouchableOpacity } from 'react-native';
8
+ import React, { useCallback, useState, useEffect } from 'react';
9
+ import { Modal, View, StyleSheet, FlatList, Dimensions } from 'react-native';
10
10
  import { Image } from 'expo-image';
11
11
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
12
12
  import type { ImageViewerItem, ImageGalleryOptions } from '../../domain/entities/ImageTypes';
@@ -4,13 +4,11 @@
4
4
 
5
5
  import React, { forwardRef } from 'react';
6
6
  import { View, TouchableOpacity, ScrollView } from 'react-native';
7
- import {
8
- BottomSheetModal,
9
- AtomicText,
10
- AtomicIcon,
11
- useAppDesignTokens,
12
- BottomSheetModalRef
13
- } from '@umituz/react-native-design-system';
7
+ import { BottomSheetModal } from '../../../../molecules/bottom-sheet/components/BottomSheetModal';
8
+ import type { BottomSheetModalRef } from '../../../../molecules/bottom-sheet/types/BottomSheet';
9
+ import { AtomicText } from '../../../../atoms/AtomicText';
10
+ import { AtomicIcon } from '../../../../atoms/AtomicIcon';
11
+ import { useAppDesignTokens } from '../../../../theme/hooks/useAppDesignTokens';
14
12
  import { FilterProcessor, type FilterPreset } from '../../../infrastructure/utils/FilterProcessor';
15
13
 
16
14
  export interface FilterPickerSheetProps {
@@ -4,12 +4,10 @@
4
4
 
5
5
  import React, { forwardRef } from 'react';
6
6
  import { View, TouchableOpacity, ScrollView, Image, Dimensions } from 'react-native';
7
- import {
8
- BottomSheetModal,
9
- AtomicText,
10
- useAppDesignTokens,
11
- BottomSheetModalRef
12
- } from '@umituz/react-native-design-system';
7
+ import { BottomSheetModal } from '../../../../molecules/bottom-sheet/components/BottomSheetModal';
8
+ import type { BottomSheetModalRef } from '../../../../molecules/bottom-sheet/types/BottomSheet';
9
+ import { AtomicText } from '../../../../atoms/AtomicText';
10
+ import { useAppDesignTokens } from '../../../../theme/hooks/useAppDesignTokens';
13
11
 
14
12
  const { width: SCREEN_WIDTH } = Dimensions.get('window');
15
13
 
@@ -4,13 +4,11 @@
4
4
 
5
5
  import React, { forwardRef, useState } from 'react';
6
6
  import { View, TouchableOpacity, ScrollView } from 'react-native';
7
- import {
8
- BottomSheetModal,
9
- AtomicText,
10
- AtomicIcon,
11
- useAppDesignTokens,
12
- BottomSheetModalRef
13
- } from '@umituz/react-native-design-system';
7
+ import { BottomSheetModal } from '../../../../molecules/bottom-sheet/components/BottomSheetModal';
8
+ import type { BottomSheetModalRef } from '../../../../molecules/bottom-sheet/types/BottomSheet';
9
+ import { AtomicText } from '../../../../atoms/AtomicText';
10
+ import { AtomicIcon } from '../../../../atoms/AtomicIcon';
11
+ import { useAppDesignTokens } from '../../../../theme/hooks/useAppDesignTokens';
14
12
  import { TextContentTab, TextStyleTab, TextTransformTab } from './TextEditorTabs';
15
13
 
16
14
  export interface TextEditorSheetProps {
@@ -5,20 +5,22 @@
5
5
  import React from 'react';
6
6
  import { View, TextInput, ScrollView, TouchableOpacity } from 'react-native';
7
7
  import Slider from '@react-native-community/slider';
8
- import { AtomicText, AtomicIcon, useAppDesignTokens } from '@umituz/react-native-design-system';
8
+ import { AtomicText } from '../../../../atoms/AtomicText';
9
+ import { AtomicIcon } from '../../../../atoms/AtomicIcon';
10
+ import { useAppDesignTokens } from '../../../../theme/hooks/useAppDesignTokens';
9
11
 
10
12
  interface TabProps {
11
13
  t: (key: string) => string;
12
14
  }
13
15
 
14
- export const TextContentTab: React.FC<TabProps & { text: string; onTextChange: (t: string) => void }> = ({ text, onTextChange, t }) => {
16
+ export const TextContentTab: React.FC<TabProps & { text: string; onTextChange: (t: string) => void }> = ({ text, onTextChange, t: translate }) => {
15
17
  const tokens = useAppDesignTokens();
16
18
  return (
17
19
  <View style={{ gap: tokens.spacing.lg }}>
18
20
  <TextInput
19
21
  value={text}
20
22
  onChangeText={onTextChange}
21
- placeholder={t('editor.text_placeholder')}
23
+ placeholder={translate('editor.text_placeholder')}
22
24
  style={{
23
25
  ...tokens.typography.bodyLarge,
24
26
  borderWidth: 1,
@@ -38,7 +40,7 @@ export const TextStyleTab: React.FC<TabProps & {
38
40
  fontSize: number; setFontSize: (s: number) => void;
39
41
  color: string; setColor: (c: string) => void;
40
42
  fontFamily: string; setFontFamily: (f: string) => void;
41
- }> = ({ fontSize, setFontSize, color, setColor, fontFamily, setFontFamily, t }) => {
43
+ }> = ({ fontSize, setFontSize, color, setColor, fontFamily, setFontFamily }) => {
42
44
  const tokens = useAppDesignTokens();
43
45
  const colors = ['#FFFFFF', '#000000', '#FF0000', '#FFFF00', '#0000FF', '#00FF00', '#FF00FF', '#FFA500'];
44
46
  const fonts = ['System', 'serif', 'sans-serif', 'monospace'];
@@ -83,9 +85,8 @@ export const TextStyleTab: React.FC<TabProps & {
83
85
  export const TextTransformTab: React.FC<TabProps & {
84
86
  scale: number; setScale: (s: number) => void;
85
87
  rotation: number; setRotation: (r: number) => void;
86
- opacity: number; setOpacity: (o: number) => void;
87
88
  onDelete?: () => void;
88
- }> = ({ scale, setScale, rotation, setRotation, opacity, setOpacity, onDelete, t }) => {
89
+ }> = ({ scale, setScale, rotation, setRotation, onDelete }) => {
89
90
  const tokens = useAppDesignTokens();
90
91
  return (
91
92
  <View style={{ gap: tokens.spacing.xl }}>
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import { Image as ExpoImage, ImageProps as ExpoImageProps } from 'expo-image';
3
- import { StyleSheet, ViewStyle } from 'react-native';
4
3
 
5
4
  export type AtomicImageProps = ExpoImageProps & {
6
5
  rounded?: boolean;
@@ -3,7 +3,7 @@
3
3
  * SOLID: Single Responsibility - Handle pagination operations
4
4
  */
5
5
 
6
- import type { InfiniteScrollConfig, PaginatedResult } from "../../domain/types/infinite-scroll-config";
6
+ import type { InfiniteScrollConfig } from "../../domain/types/infinite-scroll-config";
7
7
  import type { InfiniteScrollState } from "../../domain/types/infinite-scroll-state";
8
8
 
9
9
  export function isCursorMode<T>(
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import { View } from 'react-native';
3
2
 
4
3
  /**
5
4
  * SafeBottomSheetModalProvider
@@ -37,7 +37,6 @@ class NetworkEventEmitter implements NetworkEvents {
37
37
  listener(state);
38
38
  } catch (error) {
39
39
  if (__DEV__) {
40
- // eslint-disable-next-line no-console
41
40
  console.error(`[NetworkEventEmitter] Error in ${event} listener:`, error);
42
41
  }
43
42
  }
@@ -48,14 +48,12 @@ export class HealthCheck {
48
48
  const isHealthy = response.ok;
49
49
 
50
50
  if (this.config.debug) {
51
- // eslint-disable-next-line no-console
52
51
  console.log('[HealthCheck] Result:', isHealthy ? 'HEALTHY' : 'UNHEALTHY');
53
52
  }
54
53
 
55
54
  return isHealthy;
56
55
  } catch (error) {
57
56
  if (this.config.debug) {
58
- // eslint-disable-next-line no-console
59
57
  console.warn('[HealthCheck] Failed:', error);
60
58
  }
61
59
 
@@ -71,7 +69,6 @@ export class HealthCheck {
71
69
  start(callback: (isHealthy: boolean) => void): void {
72
70
  if (this.config.healthCheckInterval === 0) {
73
71
  if (this.config.debug) {
74
- // eslint-disable-next-line no-console
75
72
  console.log('[HealthCheck] Disabled (interval = 0)');
76
73
  }
77
74
  return;
@@ -82,7 +79,6 @@ export class HealthCheck {
82
79
  }
83
80
 
84
81
  if (this.config.debug) {
85
- // eslint-disable-next-line no-console
86
82
  console.log('[HealthCheck] Starting (interval:', this.config.healthCheckInterval + 'ms)');
87
83
  }
88
84
 
@@ -101,7 +97,6 @@ export class HealthCheck {
101
97
  this.intervalId = null;
102
98
 
103
99
  if (this.config.debug) {
104
- // eslint-disable-next-line no-console
105
100
  console.log('[HealthCheck] Stopped');
106
101
  }
107
102
  }
@@ -62,7 +62,6 @@ export const useOffline = (config?: OfflineConfig) => {
62
62
  })
63
63
  .catch((error: Error) => {
64
64
  if (__DEV__ || mergedConfig.debug) {
65
- // eslint-disable-next-line no-console
66
65
  console.error('[react-native-offline] Failed to fetch network state:', error);
67
66
  }
68
67
  });
@@ -18,13 +18,11 @@ export const useOfflineWithMutations = (onOnline: () => Promise<void>) => {
18
18
  isProcessingRef.current = true;
19
19
  try {
20
20
  if (__DEV__) {
21
- // eslint-disable-next-line no-console
22
21
  console.log('[react-native-offline] Executing online callback');
23
22
  }
24
23
  await onOnline();
25
24
  } catch (error) {
26
25
  if (__DEV__) {
27
- // eslint-disable-next-line no-console
28
26
  console.error('[react-native-offline] Online callback failed:', error);
29
27
  }
30
28
  } finally {
@@ -3,7 +3,7 @@
3
3
  * Centralized screen dimension values using design system utilities
4
4
  */
5
5
 
6
- import { getScreenDimensions } from "@umituz/react-native-design-system";
6
+ import { getScreenDimensions } from "../../../../device/detection/deviceDetection";
7
7
 
8
8
  const dimensions = getScreenDimensions();
9
9
 
@@ -6,7 +6,7 @@
6
6
  import React, { useMemo } from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
8
  import { Image } from "expo-image";
9
- import { useSafeAreaInsets } from "@umituz/react-native-design-system";
9
+ import { useSafeAreaInsets } from "../../../safe-area/hooks/useSafeAreaInsets";
10
10
  import {
11
11
  generateGridLayout,
12
12
  generateDenseGridLayout,
@@ -5,7 +5,7 @@
5
5
 
6
6
  import React, { useMemo } from "react";
7
7
  import { View, ScrollView } from "react-native";
8
- import { useAppDesignTokens, useResponsive } from "@umituz/react-native-design-system";
8
+ import { useResponsive } from "../../../responsive/useResponsive";
9
9
  import type { ContentPosition } from "../../domain/entities/OnboardingSlide";
10
10
 
11
11
  export interface BaseSlideProps {
@@ -17,7 +17,6 @@ export const BaseSlide = ({
17
17
  children,
18
18
  contentPosition = "center",
19
19
  }: BaseSlideProps) => {
20
- const tokens = useAppDesignTokens();
21
20
  const { verticalPadding, horizontalPadding } = useResponsive();
22
21
  const isBottom = contentPosition === "bottom";
23
22
 
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { View, StyleSheet, TouchableOpacity } from "react-native";
3
3
  import { useSafeAreaInsets } from "react-native-safe-area-context";
4
4
  import { useLocalization } from "@umituz/react-native-localization";
5
- import { AtomicText } from "@umituz/react-native-design-system";
5
+ import { AtomicText } from "../../../atoms/AtomicText";
6
6
  import { useOnboardingProvider } from "../providers/OnboardingProvider";
7
7
 
8
8
  export interface OnboardingFooterProps {
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity, StyleSheet } from "react-native";
3
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "../../../atoms/AtomicIcon";
4
+ import { AtomicText } from "../../../atoms/AtomicText";
4
5
  import { useLocalization } from "@umituz/react-native-localization";
5
6
  import { useOnboardingProvider } from "../providers/OnboardingProvider";
6
7
 
@@ -1,6 +1,8 @@
1
1
  import React, { useCallback } from "react";
2
2
  import { View, TouchableOpacity, StyleSheet } from "react-native";
3
- import { AtomicIcon, AtomicText, useAppDesignTokens } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "../../../atoms/AtomicIcon";
4
+ import { AtomicText } from "../../../atoms/AtomicText";
5
+ import { useAppDesignTokens } from "../../../theme/hooks/useAppDesignTokens";
4
6
 
5
7
  export interface OnboardingResetSettingProps {
6
8
  onReset: () => void | Promise<void>;
@@ -5,7 +5,7 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, StyleSheet, StatusBar } from "react-native";
8
- import { useTheme } from "@umituz/react-native-design-system";
8
+ import { useTheme } from "../../../theme/infrastructure/stores/themeStore";
9
9
  import { OnboardingHeader } from "./OnboardingHeader";
10
10
  import { OnboardingSlide as OnboardingSlideComponent } from "./OnboardingSlide";
11
11
  import { QuestionSlide } from "./QuestionSlide";
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicIcon } from "../../../atoms/AtomicIcon";
9
+ import { AtomicText } from "../../../atoms/AtomicText";
9
10
  import type { OnboardingSlide as OnboardingSlideType } from "../../domain/entities/OnboardingSlide";
10
11
  import { BaseSlide } from "./BaseSlide";
11
12
  import { useOnboardingProvider } from "../providers/OnboardingProvider";
@@ -5,7 +5,7 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
- import { AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicText } from "../../../atoms/AtomicText";
9
9
  import type { OnboardingSlide } from "../../domain/entities/OnboardingSlide";
10
10
  import { QuestionSlideHeader } from "./QuestionSlideHeader";
11
11
  import { QuestionRenderer } from "./QuestionRenderer";
@@ -24,7 +24,6 @@ export const QuestionSlide = ({
24
24
  slide,
25
25
  value,
26
26
  onChange,
27
- variant: _variant = "default",
28
27
  }: QuestionSlideProps) => {
29
28
  const {
30
29
  theme: { colors },
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, StyleSheet } from "react-native";
3
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "../../../atoms/AtomicIcon";
4
+ import { AtomicText } from "../../../atoms/AtomicText";
4
5
  import type { OnboardingSlide } from "../../domain/entities/OnboardingSlide";
5
6
  import { useOnboardingProvider } from "../providers/OnboardingProvider";
6
7
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, StyleSheet } from "react-native";
8
- import { AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicText } from "../../../../atoms/AtomicText";
9
9
  import { useOnboardingProvider } from "../../providers/OnboardingProvider";
10
10
  import { ensureArray } from "../../../infrastructure/utils/arrayUtils";
11
11
  import type { OnboardingQuestion } from "../../../domain/entities/OnboardingQuestion";
@@ -5,7 +5,8 @@
5
5
 
6
6
  import React from "react";
7
7
  import { View, TouchableOpacity, StyleSheet } from "react-native";
8
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
8
+ import { AtomicIcon } from "../../../../atoms/AtomicIcon";
9
+ import { AtomicText } from "../../../../atoms/AtomicText";
9
10
  import type { QuestionOption } from "../../../domain/entities/OnboardingQuestion";
10
11
  import type { OnboardingColors } from "../../types/OnboardingTheme";
11
12
 
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity, StyleSheet } from "react-native";
3
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "../../../../atoms/AtomicIcon";
4
+ import { AtomicText } from "../../../../atoms/AtomicText";
4
5
  import { useOnboardingProvider } from "../../providers/OnboardingProvider";
5
6
  import type { OnboardingQuestion } from "../../../domain/entities/OnboardingQuestion";
6
7
 
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { View, TouchableOpacity, StyleSheet } from "react-native";
3
- import { AtomicIcon, AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicIcon } from "../../../../atoms/AtomicIcon";
4
+ import { AtomicText } from "../../../../atoms/AtomicText";
4
5
  import { useOnboardingProvider } from "../../providers/OnboardingProvider";
5
6
  import type { OnboardingQuestion, QuestionOption } from "../../../domain/entities/OnboardingQuestion";
6
7
 
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { View, TextInput, StyleSheet } from "react-native";
3
- import { AtomicText } from "@umituz/react-native-design-system";
3
+ import { AtomicText } from "../../../../atoms/AtomicText";
4
4
  import { useOnboardingProvider } from "../../providers/OnboardingProvider";
5
5
  import type { OnboardingQuestion } from "../../../domain/entities/OnboardingQuestion";
6
6
 
@@ -6,7 +6,7 @@ import { renderHook } from '@testing-library/react-native';
6
6
  import { useOnboardingContainerStyle } from '../useOnboardingContainerStyle';
7
7
 
8
8
  // Mock theme hook
9
- jest.mock('@umituz/react-native-design-system', () => ({
9
+ jest.mock('../../../../theme/hooks/useAppDesignTokens', () => ({
10
10
  useAppDesignTokens: jest.fn(),
11
11
  }));
12
12
 
@@ -15,7 +15,7 @@ jest.mock('react-native-safe-area-context', () => ({
15
15
  useSafeAreaInsets: jest.fn(),
16
16
  }));
17
17
 
18
- import { useAppDesignTokens } from '@umituz/react-native-design-system';
18
+ import { useAppDesignTokens } from '../../../../theme/hooks/useAppDesignTokens';
19
19
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
20
20
 
21
21
  const mockUseAppDesignTokens = useAppDesignTokens as jest.MockedFunction<typeof useAppDesignTokens>;
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { useMemo } from "react";
7
7
  import { useSafeAreaInsets } from "react-native-safe-area-context";
8
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
8
+ import { useAppDesignTokens } from "../../../theme/hooks/useAppDesignTokens";
9
9
 
10
10
  export interface UseOnboardingContainerStyleProps {
11
11
  useCustomBackground: boolean;
@@ -9,7 +9,7 @@
9
9
 
10
10
  import React, { useMemo } from "react";
11
11
  import { StyleSheet } from "react-native";
12
- import { useAppDesignTokens } from "@umituz/react-native-design-system";
12
+ import { useAppDesignTokens } from "../../../theme/hooks/useAppDesignTokens";
13
13
  import type { OnboardingOptions } from "../../domain/entities/OnboardingOptions";
14
14
  import { useOnboardingScreenState } from "../hooks/useOnboardingScreenState";
15
15
  import { OnboardingScreenContent } from "../components/OnboardingScreenContent";
@@ -74,7 +74,6 @@ export const OnboardingScreen = ({
74
74
  showDots = true,
75
75
  showProgressText = true,
76
76
  storageKey,
77
- autoComplete: _autoComplete = false,
78
77
  renderHeader,
79
78
  renderFooter,
80
79
  renderSlide,
@@ -84,7 +84,7 @@ export class TimezoneProvider {
84
84
  displayName: namePart?.value || zone,
85
85
  offset,
86
86
  };
87
- } catch (e) {
87
+ } catch {
88
88
  return {
89
89
  timezone: zone,
90
90
  displayName: zone,
@@ -108,7 +108,7 @@ export class TimezoneProvider {
108
108
  const tzDate = new Date(d.toLocaleString('en-US', { timeZone: timezone }));
109
109
 
110
110
  return (tzDate.getTime() - utcDate.getTime()) / (1000 * 60);
111
- } catch (e) {
111
+ } catch {
112
112
  return 0;
113
113
  }
114
114
  }
@@ -1,116 +0,0 @@
1
- /**
2
- * Calendar Store - Combined Hook
3
- * Convenience hook that combines all calendar stores
4
- */
5
-
6
- import { useMemo } from 'react';
7
- import { useCalendarEvents } from '../stores/useCalendarEvents';
8
- import { useCalendarNavigation } from '../stores/useCalendarNavigation';
9
- import { useCalendarView } from '../stores/useCalendarView';
10
- import { CalendarService } from '../../services/CalendarService';
11
- import type { CalendarDay } from '../../../domain/entities/CalendarDay.entity';
12
-
13
- // Export individual stores
14
- export { useCalendarEvents } from '../stores/useCalendarEvents';
15
- export { useCalendarNavigation } from '../stores/useCalendarNavigation';
16
- export { useCalendarView } from '../stores/useCalendarView';
17
-
18
- // Export types
19
- export type { CalendarViewMode } from '../stores/useCalendarView';
20
-
21
- /**
22
- * Combined calendar hook
23
- * Use this for convenience, or use individual stores for fine-grained control
24
- */
25
- export const useCalendar = () => {
26
- const events = useCalendarEvents();
27
- const navigation = useCalendarNavigation();
28
- const view = useCalendarView();
29
-
30
- // Utility functions for backward compatibility
31
- const getEventsForDate = (date: Date) => {
32
- return events.events.filter(event => {
33
- const eventDate = new Date(event.date);
34
- return eventDate.toDateString() === date.toDateString();
35
- });
36
- };
37
-
38
- const getEventsForMonth = (year: number, month: number) => {
39
- return events.events.filter(event => {
40
- const eventDate = new Date(event.date);
41
- return eventDate.getFullYear() === year && eventDate.getMonth() === month;
42
- });
43
- };
44
-
45
- return {
46
- // Events state and actions
47
- events: events.events,
48
- isLoading: events.isLoading,
49
- error: events.error,
50
- loadEvents: events.loadEvents,
51
- addEvent: events.addEvent,
52
- updateEvent: events.updateEvent,
53
- deleteEvent: events.deleteEvent,
54
- completeEvent: events.completeEvent,
55
- uncompleteEvent: events.uncompleteEvent,
56
- clearError: events.clearError,
57
- clearAllEvents: events.clearAllEvents,
58
-
59
- // Navigation state and actions
60
- selectedDate: navigation.selectedDate,
61
- currentMonth: navigation.currentMonth,
62
- setSelectedDate: navigation.setSelectedDate,
63
- goToToday: navigation.goToToday,
64
- navigateMonth: navigation.navigateMonth,
65
- setCurrentMonth: navigation.setCurrentMonth,
66
-
67
- // View state and actions
68
- viewMode: view.viewMode,
69
- setViewMode: view.setViewMode,
70
-
71
- // Utility functions
72
- getEventsForDate,
73
- getEventsForMonth,
74
- };
75
- };
76
-
77
- /**
78
- * Legacy alias for backward compatibility
79
- * @deprecated Use useCalendar instead
80
- */
81
- export const useCalendarStore = () => {
82
- const calendar = useCalendar();
83
-
84
- const days = useMemo(() => {
85
- const year = calendar.currentMonth.getFullYear();
86
- const month = calendar.currentMonth.getMonth();
87
- return CalendarService.getMonthDays(year, month, calendar.events);
88
- }, [calendar.currentMonth, calendar.events]);
89
-
90
- return {
91
- events: calendar.events,
92
- selectedDate: calendar.selectedDate,
93
- currentMonth: calendar.currentMonth,
94
- viewMode: calendar.viewMode,
95
- isLoading: calendar.isLoading,
96
- error: calendar.error,
97
- actions: {
98
- loadEvents: calendar.loadEvents,
99
- addEvent: calendar.addEvent,
100
- updateEvent: calendar.updateEvent,
101
- deleteEvent: calendar.deleteEvent,
102
- completeEvent: calendar.completeEvent,
103
- uncompleteEvent: calendar.uncompleteEvent,
104
- setSelectedDate: calendar.setSelectedDate,
105
- goToToday: calendar.goToToday,
106
- navigateMonth: calendar.navigateMonth,
107
- setCurrentMonth: calendar.setCurrentMonth,
108
- setViewMode: calendar.setViewMode,
109
- getEventsForDate: calendar.getEventsForDate,
110
- getEventsForMonth: calendar.getEventsForMonth,
111
- clearError: calendar.clearError,
112
- clearAllEvents: calendar.clearAllEvents,
113
- },
114
- days,
115
- };
116
- };