@umituz/react-native-design-system 2.6.61 → 2.6.64

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 (68) hide show
  1. package/package.json +1 -1
  2. package/src/atoms/AtomicButton.tsx +6 -257
  3. package/src/atoms/AtomicChip.tsx +4 -224
  4. package/src/atoms/AtomicIcon.tsx +2 -6
  5. package/src/atoms/AtomicIcon.types.ts +5 -0
  6. package/src/atoms/AtomicInput.tsx +34 -154
  7. package/src/atoms/AtomicPicker.tsx +31 -123
  8. package/src/atoms/button/AtomicButton.tsx +108 -0
  9. package/src/atoms/button/configs/buttonSizeConfig.ts +37 -0
  10. package/src/atoms/button/index.ts +6 -0
  11. package/src/atoms/button/styles/buttonStyles.ts +36 -0
  12. package/src/atoms/button/styles/buttonVariantStyles.ts +88 -0
  13. package/src/atoms/button/types/index.ts +40 -0
  14. package/src/atoms/chip/AtomicChip.tsx +112 -0
  15. package/src/atoms/chip/configs/chipColorConfig.ts +47 -0
  16. package/src/atoms/chip/configs/chipSizeConfig.ts +34 -0
  17. package/src/atoms/chip/index.ts +6 -0
  18. package/src/atoms/chip/styles/chipStyles.ts +28 -0
  19. package/src/atoms/chip/types/index.ts +42 -0
  20. package/src/atoms/index.ts +6 -4
  21. package/src/atoms/input/components/InputHelper.tsx +49 -0
  22. package/src/atoms/input/components/InputIcon.tsx +44 -0
  23. package/src/atoms/input/components/InputLabel.tsx +20 -0
  24. package/src/atoms/input/styles/inputStylesHelper.ts +1 -1
  25. package/src/atoms/input/types.ts +72 -0
  26. package/src/atoms/picker/hooks/usePickerState.ts +139 -0
  27. package/src/exports/atoms.ts +69 -0
  28. package/src/exports/device.ts +58 -0
  29. package/src/exports/layouts.ts +19 -0
  30. package/src/exports/molecules.ts +166 -0
  31. package/src/exports/organisms.ts +9 -0
  32. package/src/exports/responsive.ts +36 -0
  33. package/src/exports/safe-area.ts +6 -0
  34. package/src/exports/theme.ts +47 -0
  35. package/src/exports/typography.ts +22 -0
  36. package/src/exports/utilities.ts +6 -0
  37. package/src/exports/variants.ts +22 -0
  38. package/src/index.ts +11 -417
  39. package/src/layouts/ScreenLayout/ScreenLayout.tsx +17 -181
  40. package/src/layouts/ScreenLayout/components/ContentWrapper.tsx +31 -0
  41. package/src/layouts/ScreenLayout/components/index.ts +6 -0
  42. package/src/layouts/ScreenLayout/styles/screenLayoutStyles.ts +47 -0
  43. package/src/layouts/ScreenLayout/types/index.ts +27 -0
  44. package/src/molecules/avatar/Avatar.constants.ts +103 -0
  45. package/src/molecules/avatar/Avatar.types.ts +64 -0
  46. package/src/molecules/avatar/Avatar.utils.ts +8 -160
  47. package/src/molecules/calendar/index.ts +4 -9
  48. package/src/molecules/calendar/infrastructure/storage/CalendarStore.ts +103 -302
  49. package/src/molecules/calendar/infrastructure/storage/CalendarStore.ts.bak +116 -0
  50. package/src/molecules/calendar/infrastructure/storage/CalendarStore.types.ts +64 -0
  51. package/src/molecules/calendar/infrastructure/storage/CalendarStore.utils.ts +56 -0
  52. package/src/molecules/calendar/infrastructure/storage/EventActions.ts +140 -0
  53. package/src/molecules/calendar/infrastructure/storage/NavigationActions.ts +118 -0
  54. package/src/molecules/calendar/infrastructure/stores/storageAdapter.ts +34 -0
  55. package/src/molecules/calendar/infrastructure/stores/useCalendarEvents.ts +168 -0
  56. package/src/molecules/calendar/infrastructure/stores/useCalendarNavigation.ts +47 -0
  57. package/src/molecules/calendar/infrastructure/stores/useCalendarView.ts +24 -0
  58. package/src/molecules/calendar/presentation/hooks/useCalendar.ts +7 -11
  59. package/src/responsive/compute/computeDeviceInfo.ts +22 -0
  60. package/src/responsive/compute/computeResponsivePositioning.ts +42 -0
  61. package/src/responsive/compute/computeResponsiveSizes.ts +48 -0
  62. package/src/responsive/padding/paddingUtils.ts +65 -0
  63. package/src/responsive/positioning/positioningUtils.ts +61 -0
  64. package/src/responsive/responsiveLayout.ts +11 -264
  65. package/src/responsive/screen/screenLayoutConfig.ts +38 -0
  66. package/src/responsive/tabbar/tabBarConfig.ts +88 -0
  67. package/src/responsive/types/responsiveTypes.ts +69 -0
  68. package/src/responsive/useResponsive.ts +69 -158
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ContentWrapper Component
3
+ * Conditionally wraps content with KeyboardAvoidingView
4
+ */
5
+
6
+ import React from 'react';
7
+ import { View } from 'react-native';
8
+ import type { ViewStyle } from 'react-native';
9
+ import { AtomicKeyboardAvoidingView } from '../../../atoms';
10
+
11
+ export interface ContentWrapperProps {
12
+ readonly children: React.ReactNode;
13
+ readonly keyboardAvoiding?: boolean;
14
+ readonly style?: ViewStyle;
15
+ }
16
+
17
+ export const ContentWrapper: React.FC<ContentWrapperProps> = ({
18
+ children,
19
+ keyboardAvoiding = false,
20
+ style,
21
+ }) => {
22
+ if (keyboardAvoiding) {
23
+ return (
24
+ <AtomicKeyboardAvoidingView style={style}>
25
+ {children}
26
+ </AtomicKeyboardAvoidingView>
27
+ );
28
+ }
29
+
30
+ return <View style={style}>{children}</View>;
31
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * ScreenLayout Components Export
3
+ */
4
+
5
+ export { ContentWrapper } from './ContentWrapper';
6
+ export type { ContentWrapperProps } from './ContentWrapper';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * ScreenLayout Styles
3
+ */
4
+
5
+ import { StyleSheet } from 'react-native';
6
+ import type { DesignTokens } from '../../../theme';
7
+
8
+ export interface ScreenLayoutStylesConfig {
9
+ readonly maxWidth?: number;
10
+ readonly horizontalPadding: number;
11
+ readonly verticalPadding: number;
12
+ }
13
+
14
+ export const getScreenLayoutStyles = (
15
+ tokens: DesignTokens,
16
+ config: ScreenLayoutStylesConfig,
17
+ ) => {
18
+ const { maxWidth, horizontalPadding, verticalPadding } = config;
19
+
20
+ return StyleSheet.create({
21
+ container: {
22
+ flex: 1,
23
+ },
24
+ keyboardAvoidingView: {
25
+ flex: 1,
26
+ },
27
+ responsiveWrapper: {
28
+ flex: 1,
29
+ width: '100%',
30
+ ...(maxWidth ? { maxWidth, alignSelf: 'center' as const } : {}),
31
+ },
32
+ content: {
33
+ flex: 1,
34
+ paddingTop: verticalPadding,
35
+ paddingHorizontal: horizontalPadding,
36
+ },
37
+ scrollView: {
38
+ flex: 1,
39
+ },
40
+ scrollContent: {
41
+ flexGrow: 1,
42
+ paddingTop: verticalPadding,
43
+ paddingHorizontal: horizontalPadding,
44
+ paddingBottom: verticalPadding,
45
+ },
46
+ });
47
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ScreenLayout Type Definitions
3
+ */
4
+
5
+ import type { ViewStyle } from 'react-native';
6
+ import type { Edge } from 'react-native-safe-area-context';
7
+ import type { RefreshControlProps } from 'react-native';
8
+
9
+ export interface ScreenLayoutProps {
10
+ readonly children: React.ReactNode;
11
+ readonly scrollable?: boolean;
12
+ readonly edges?: Edge[];
13
+ readonly header?: React.ReactNode;
14
+ readonly footer?: React.ReactNode;
15
+ readonly backgroundColor?: string;
16
+ readonly containerStyle?: ViewStyle;
17
+ readonly contentContainerStyle?: ViewStyle;
18
+ readonly testID?: string;
19
+ readonly hideScrollIndicator?: boolean;
20
+ readonly keyboardAvoiding?: boolean;
21
+ readonly accessibilityLabel?: string;
22
+ readonly accessibilityHint?: string;
23
+ readonly accessible?: boolean;
24
+ readonly responsiveEnabled?: boolean;
25
+ readonly maxWidth?: number;
26
+ readonly refreshControl?: React.ReactElement<RefreshControlProps>;
27
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Avatar Constants
3
+ * Configuration constants for avatar component
4
+ */
5
+
6
+ import type { AvatarSize, AvatarShape, AvatarType, SizeConfig } from './Avatar.types';
7
+
8
+ /**
9
+ * Size configurations (px)
10
+ */
11
+ export const SIZE_CONFIGS: Record<AvatarSize, SizeConfig> = {
12
+ xs: {
13
+ size: 24,
14
+ fontSize: 10,
15
+ iconSize: 12,
16
+ statusSize: 6,
17
+ borderWidth: 1,
18
+ },
19
+ sm: {
20
+ size: 32,
21
+ fontSize: 12,
22
+ iconSize: 16,
23
+ statusSize: 8,
24
+ borderWidth: 1.5,
25
+ },
26
+ md: {
27
+ size: 40,
28
+ fontSize: 14,
29
+ iconSize: 20,
30
+ statusSize: 10,
31
+ borderWidth: 2,
32
+ },
33
+ lg: {
34
+ size: 56,
35
+ fontSize: 18,
36
+ iconSize: 28,
37
+ statusSize: 12,
38
+ borderWidth: 2,
39
+ },
40
+ xl: {
41
+ size: 80,
42
+ fontSize: 24,
43
+ iconSize: 40,
44
+ statusSize: 16,
45
+ borderWidth: 2.5,
46
+ },
47
+ xxl: {
48
+ size: 120,
49
+ fontSize: 36,
50
+ iconSize: 60,
51
+ statusSize: 20,
52
+ borderWidth: 3,
53
+ },
54
+ };
55
+
56
+ /**
57
+ * Avatar background colors
58
+ * Vibrant, accessible colors with good contrast
59
+ */
60
+ export const AVATAR_COLORS = [
61
+ '#EF4444', // Red
62
+ '#F59E0B', // Orange
63
+ '#10B981', // Green
64
+ '#3B82F6', // Blue
65
+ '#8B5CF6', // Purple
66
+ '#EC4899', // Pink
67
+ '#14B8A6', // Teal
68
+ '#F97316', // Orange-Red
69
+ '#06B6D4', // Cyan
70
+ '#84CC16', // Lime
71
+ ] as const;
72
+
73
+ /**
74
+ * Status indicator colors
75
+ */
76
+ export const STATUS_COLORS = {
77
+ online: '#10B981', // Green
78
+ offline: '#9CA3AF', // Gray
79
+ away: '#F59E0B', // Orange
80
+ busy: '#EF4444', // Red
81
+ } as const;
82
+
83
+ /**
84
+ * Border radius configurations
85
+ */
86
+ export const SHAPE_CONFIGS = {
87
+ circle: 9999, // Full circle
88
+ square: 0, // No radius
89
+ rounded: 8, // Rounded corners
90
+ } as const;
91
+
92
+ /**
93
+ * Avatar constants
94
+ */
95
+ export const AVATAR_CONSTANTS = {
96
+ DEFAULT_SIZE: 'md' as AvatarSize,
97
+ DEFAULT_SHAPE: 'circle' as AvatarShape,
98
+ DEFAULT_TYPE: 'initials' as AvatarType,
99
+ DEFAULT_ICON: 'user',
100
+ MAX_GROUP_VISIBLE: 3,
101
+ GROUP_SPACING: -8, // Negative for overlap
102
+ FALLBACK_INITIALS: '?',
103
+ } as const;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Avatar Types
3
+ * Type definitions for avatar component
4
+ */
5
+
6
+ /**
7
+ * Avatar size preset
8
+ */
9
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
10
+
11
+ /**
12
+ * Avatar shape
13
+ */
14
+ export type AvatarShape = 'circle' | 'square' | 'rounded';
15
+
16
+ /**
17
+ * Avatar type
18
+ */
19
+ export type AvatarType = 'image' | 'initials' | 'icon';
20
+
21
+ /**
22
+ * Avatar configuration
23
+ */
24
+ export interface AvatarConfig {
25
+ /** Avatar type */
26
+ type: AvatarType;
27
+ /** Size preset */
28
+ size: AvatarSize;
29
+ /** Shape */
30
+ shape: AvatarShape;
31
+ /** Image URI */
32
+ uri?: string;
33
+ /** User name for initials */
34
+ name?: string;
35
+ /** Icon name (if type is icon) */
36
+ icon?: string;
37
+ /** Custom background color */
38
+ backgroundColor?: string;
39
+ /** Show status indicator */
40
+ showStatus?: boolean;
41
+ /** Status (online/offline) */
42
+ status?: 'online' | 'offline' | 'away' | 'busy';
43
+ }
44
+
45
+ /**
46
+ * Size configuration
47
+ */
48
+ export interface SizeConfig {
49
+ size: number;
50
+ fontSize: number;
51
+ iconSize: number;
52
+ statusSize: number;
53
+ borderWidth: number;
54
+ }
55
+
56
+ /**
57
+ * Avatar group configuration
58
+ */
59
+ export interface AvatarGroupConfig {
60
+ maxVisible: number;
61
+ spacing: number;
62
+ size: AvatarSize;
63
+ shape: AvatarShape;
64
+ }
@@ -1,153 +1,11 @@
1
1
  /**
2
- * Avatar Domain - Entity Definitions
3
- *
4
- * Core types and interfaces for user avatars.
5
- * Supports images, initials, icons with Turkish character support.
2
+ * Avatar Utilities
3
+ * Utility class for avatar operations
4
+ * Supports images, initials, icons with Turkish character support
6
5
  */
7
6
 
8
- /**
9
- * Avatar size preset
10
- */
11
- export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
12
-
13
- /**
14
- * Avatar shape
15
- */
16
- export type AvatarShape = 'circle' | 'square' | 'rounded';
17
-
18
- /**
19
- * Avatar type
20
- */
21
- export type AvatarType = 'image' | 'initials' | 'icon';
22
-
23
- /**
24
- * Avatar configuration
25
- */
26
- export interface AvatarConfig {
27
- /** Avatar type */
28
- type: AvatarType;
29
- /** Size preset */
30
- size: AvatarSize;
31
- /** Shape */
32
- shape: AvatarShape;
33
- /** Image URI */
34
- uri?: string;
35
- /** User name for initials */
36
- name?: string;
37
- /** Icon name (if type is icon) */
38
- icon?: string;
39
- /** Custom background color */
40
- backgroundColor?: string;
41
- /** Show status indicator */
42
- showStatus?: boolean;
43
- /** Status (online/offline) */
44
- status?: 'online' | 'offline' | 'away' | 'busy';
45
- }
46
-
47
- /**
48
- * Size configuration
49
- */
50
- export interface SizeConfig {
51
- size: number;
52
- fontSize: number;
53
- iconSize: number;
54
- statusSize: number;
55
- borderWidth: number;
56
- }
57
-
58
- /**
59
- * Avatar group configuration
60
- */
61
- export interface AvatarGroupConfig {
62
- maxVisible: number;
63
- spacing: number;
64
- size: AvatarSize;
65
- shape: AvatarShape;
66
- }
67
-
68
- /**
69
- * Size configurations (px)
70
- */
71
- export const SIZE_CONFIGS: Record<AvatarSize, SizeConfig> = {
72
- xs: {
73
- size: 24,
74
- fontSize: 10,
75
- iconSize: 12,
76
- statusSize: 6,
77
- borderWidth: 1,
78
- },
79
- sm: {
80
- size: 32,
81
- fontSize: 12,
82
- iconSize: 16,
83
- statusSize: 8,
84
- borderWidth: 1.5,
85
- },
86
- md: {
87
- size: 40,
88
- fontSize: 14,
89
- iconSize: 20,
90
- statusSize: 10,
91
- borderWidth: 2,
92
- },
93
- lg: {
94
- size: 56,
95
- fontSize: 18,
96
- iconSize: 28,
97
- statusSize: 12,
98
- borderWidth: 2,
99
- },
100
- xl: {
101
- size: 80,
102
- fontSize: 24,
103
- iconSize: 40,
104
- statusSize: 16,
105
- borderWidth: 2.5,
106
- },
107
- xxl: {
108
- size: 120,
109
- fontSize: 36,
110
- iconSize: 60,
111
- statusSize: 20,
112
- borderWidth: 3,
113
- },
114
- };
115
-
116
- /**
117
- * Avatar background colors
118
- * Vibrant, accessible colors with good contrast
119
- */
120
- export const AVATAR_COLORS = [
121
- '#EF4444', // Red
122
- '#F59E0B', // Orange
123
- '#10B981', // Green
124
- '#3B82F6', // Blue
125
- '#8B5CF6', // Purple
126
- '#EC4899', // Pink
127
- '#14B8A6', // Teal
128
- '#F97316', // Orange-Red
129
- '#06B6D4', // Cyan
130
- '#84CC16', // Lime
131
- ] as const;
132
-
133
- /**
134
- * Status indicator colors
135
- */
136
- export const STATUS_COLORS = {
137
- online: '#10B981', // Green
138
- offline: '#9CA3AF', // Gray
139
- away: '#F59E0B', // Orange
140
- busy: '#EF4444', // Red
141
- } as const;
142
-
143
- /**
144
- * Border radius configurations
145
- */
146
- export const SHAPE_CONFIGS = {
147
- circle: 9999, // Full circle
148
- square: 0, // No radius
149
- rounded: 8, // Rounded corners
150
- } as const;
7
+ import type { AvatarSize, AvatarShape, AvatarConfig, SizeConfig } from './Avatar.types';
8
+ import { AVATAR_COLORS, STATUS_COLORS, SHAPE_CONFIGS, SIZE_CONFIGS } from './Avatar.constants';
151
9
 
152
10
  /**
153
11
  * Avatar utility class
@@ -275,16 +133,6 @@ export class AvatarUtils {
275
133
  }
276
134
  }
277
135
 
278
- /**
279
- * Avatar constants
280
- */
281
- export const AVATAR_CONSTANTS = {
282
- DEFAULT_SIZE: 'md' as AvatarSize,
283
- DEFAULT_SHAPE: 'circle' as AvatarShape,
284
- DEFAULT_TYPE: 'initials' as AvatarType,
285
- DEFAULT_ICON: 'user',
286
- MAX_GROUP_VISIBLE: 3,
287
- GROUP_SPACING: -8, // Negative for overlap
288
- FALLBACK_INITIALS: '?',
289
- } as const;
290
-
136
+ // Re-export types and constants for convenience
137
+ export type { AvatarSize, AvatarShape, AvatarType, AvatarConfig, SizeConfig } from './Avatar.types';
138
+ export { AVATAR_COLORS, STATUS_COLORS, SHAPE_CONFIGS, SIZE_CONFIGS, AVATAR_CONSTANTS } from './Avatar.constants';
@@ -54,18 +54,13 @@ export { CalendarGeneration } from './infrastructure/services/CalendarGeneration
54
54
  export { DateUtilities } from './infrastructure/utils/DateUtilities';
55
55
 
56
56
  // Infrastructure Storage
57
- export {
58
- useCalendarStore,
59
- type CalendarViewMode,
60
- } from './infrastructure/storage/CalendarStore';
61
-
62
- // Presentation Hooks
63
57
  export {
64
58
  useCalendar,
65
- useCalendarNavigation,
66
59
  useCalendarEvents,
67
- type UseCalendarReturn,
68
- } from './presentation/hooks/useCalendar';
60
+ useCalendarNavigation,
61
+ useCalendarView,
62
+ type CalendarViewMode,
63
+ } from './infrastructure/storage/CalendarStore';
69
64
 
70
65
  // Presentation Components
71
66
  export {