@umituz/react-native-design-system 1.3.6 → 1.4.0
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.
- package/README.md +1 -2
- package/lib/domains/icons/presentation/components/Icon.d.ts.map +1 -1
- package/lib/domains/icons/presentation/components/Icon.js.map +1 -1
- package/lib/index.d.ts +2 -6
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -9
- package/lib/index.js.map +1 -1
- package/lib/presentation/atoms/AtomicBadge.js.map +1 -1
- package/lib/presentation/atoms/AtomicButton.d.ts +0 -1
- package/lib/presentation/atoms/AtomicButton.d.ts.map +1 -1
- package/lib/presentation/atoms/AtomicButton.js +6 -9
- package/lib/presentation/atoms/AtomicButton.js.map +1 -1
- package/lib/presentation/atoms/AtomicDatePicker.js +1 -1
- package/lib/presentation/atoms/AtomicDatePicker.js.map +1 -1
- package/lib/presentation/atoms/AtomicFab.d.ts +0 -1
- package/lib/presentation/atoms/AtomicFab.d.ts.map +1 -1
- package/lib/presentation/atoms/AtomicFab.js +4 -5
- package/lib/presentation/atoms/AtomicFab.js.map +1 -1
- package/lib/presentation/atoms/AtomicImage.js.map +1 -1
- package/lib/presentation/atoms/AtomicPicker.js +1 -1
- package/lib/presentation/atoms/AtomicPicker.js.map +1 -1
- package/lib/presentation/atoms/AtomicProgress.d.ts +0 -3
- package/lib/presentation/atoms/AtomicProgress.d.ts.map +1 -1
- package/lib/presentation/atoms/AtomicProgress.js +1 -2
- package/lib/presentation/atoms/AtomicProgress.js.map +1 -1
- package/lib/presentation/atoms/AtomicSkeleton.d.ts +4 -10
- package/lib/presentation/atoms/AtomicSkeleton.d.ts.map +1 -1
- package/lib/presentation/atoms/AtomicSkeleton.js +7 -38
- package/lib/presentation/atoms/AtomicSkeleton.js.map +1 -1
- package/lib/presentation/atoms/AtomicSwitch.js.map +1 -1
- package/lib/presentation/atoms/AtomicTouchable.d.ts +1 -11
- package/lib/presentation/atoms/AtomicTouchable.d.ts.map +1 -1
- package/lib/presentation/atoms/AtomicTouchable.js +6 -19
- package/lib/presentation/atoms/AtomicTouchable.js.map +1 -1
- package/lib/presentation/atoms/fab/types/index.d.ts +0 -5
- package/lib/presentation/atoms/fab/types/index.d.ts.map +1 -1
- package/lib/presentation/atoms/touchable/styles/touchableStyles.d.ts +0 -5
- package/lib/presentation/atoms/touchable/styles/touchableStyles.d.ts.map +1 -1
- package/lib/presentation/atoms/touchable/styles/touchableStyles.js +0 -8
- package/lib/presentation/atoms/touchable/styles/touchableStyles.js.map +1 -1
- package/lib/presentation/atoms/touchable/types/index.d.ts +1 -7
- package/lib/presentation/atoms/touchable/types/index.d.ts.map +1 -1
- package/lib/presentation/molecules/AtomicConfirmationModal.d.ts.map +1 -1
- package/lib/presentation/molecules/AtomicConfirmationModal.js +2 -1
- package/lib/presentation/molecules/AtomicConfirmationModal.js.map +1 -1
- package/lib/presentation/molecules/languageswitcher/hooks/useLanguageNavigation.d.ts +1 -1
- package/lib/presentation/molecules/languageswitcher/hooks/useLanguageNavigation.d.ts.map +1 -1
- package/lib/presentation/molecules/languageswitcher/hooks/useLanguageNavigation.js +2 -0
- package/lib/presentation/molecules/languageswitcher/hooks/useLanguageNavigation.js.map +1 -1
- package/lib/presentation/organisms/ScreenLayout.d.ts +0 -15
- package/lib/presentation/organisms/ScreenLayout.d.ts.map +1 -1
- package/lib/presentation/organisms/ScreenLayout.js +1 -10
- package/lib/presentation/organisms/ScreenLayout.js.map +1 -1
- package/lib/presentation/tokens/AppDesignTokens.d.ts +1 -1
- package/lib/presentation/tokens/AppDesignTokens.d.ts.map +1 -1
- package/lib/presentation/tokens/AppDesignTokens.js +1 -1
- package/lib/presentation/tokens/AppDesignTokens.js.map +1 -1
- package/lib/presentation/tokens/commonStyles.d.ts +1 -1
- package/lib/presentation/tokens/commonStyles.js +1 -1
- package/lib/presentation/tokens/core/BaseTokens.d.ts +0 -25
- package/lib/presentation/tokens/core/BaseTokens.d.ts.map +1 -1
- package/lib/presentation/tokens/core/BaseTokens.js +0 -18
- package/lib/presentation/tokens/core/BaseTokens.js.map +1 -1
- package/lib/presentation/tokens/core/TokenFactory.d.ts +2 -15
- package/lib/presentation/tokens/core/TokenFactory.d.ts.map +1 -1
- package/lib/presentation/tokens/core/TokenFactory.js +1 -2
- package/lib/presentation/tokens/core/TokenFactory.js.map +1 -1
- package/package.json +1 -3
- package/src/domains/icons/presentation/components/Icon.tsx +3 -3
- package/src/index.ts +1 -27
- package/src/presentation/atoms/AtomicBadge.tsx +3 -3
- package/src/presentation/atoms/AtomicButton.tsx +5 -16
- package/src/presentation/atoms/AtomicDatePicker.tsx +1 -1
- package/src/presentation/atoms/AtomicFab.tsx +6 -12
- package/src/presentation/atoms/AtomicImage.tsx +2 -2
- package/src/presentation/atoms/AtomicPicker.tsx +1 -1
- package/src/presentation/atoms/AtomicProgress.tsx +0 -4
- package/src/presentation/atoms/AtomicSkeleton.tsx +6 -57
- package/src/presentation/atoms/AtomicSwitch.tsx +2 -2
- package/src/presentation/atoms/AtomicTouchable.tsx +4 -28
- package/src/presentation/atoms/fab/types/index.ts +0 -6
- package/src/presentation/atoms/touchable/styles/touchableStyles.ts +0 -9
- package/src/presentation/atoms/touchable/types/index.ts +1 -8
- package/src/presentation/molecules/AtomicConfirmationModal.tsx +3 -2
- package/src/presentation/molecules/languageswitcher/hooks/useLanguageNavigation.ts +2 -0
- package/src/presentation/organisms/ScreenLayout.tsx +0 -40
- package/src/presentation/tokens/AppDesignTokens.ts +0 -2
- package/src/presentation/tokens/commonStyles.ts +1 -1
- package/src/presentation/tokens/core/BaseTokens.ts +0 -22
- package/src/presentation/tokens/core/TokenFactory.ts +2 -4
- package/lib/presentation/loading/index.d.ts +0 -23
- package/lib/presentation/loading/index.d.ts.map +0 -1
- package/lib/presentation/loading/index.js +0 -26
- package/lib/presentation/loading/index.js.map +0 -1
- package/lib/presentation/loading/presentation/components/LoadingSpinner.d.ts +0 -28
- package/lib/presentation/loading/presentation/components/LoadingSpinner.d.ts.map +0 -1
- package/lib/presentation/loading/presentation/components/LoadingSpinner.js +0 -77
- package/lib/presentation/loading/presentation/components/LoadingSpinner.js.map +0 -1
- package/lib/presentation/loading/presentation/components/LoadingState.d.ts +0 -39
- package/lib/presentation/loading/presentation/components/LoadingState.d.ts.map +0 -1
- package/lib/presentation/loading/presentation/components/LoadingState.js +0 -123
- package/lib/presentation/loading/presentation/components/LoadingState.js.map +0 -1
- package/lib/presentation/loading/presentation/hooks/useLoading.d.ts +0 -50
- package/lib/presentation/loading/presentation/hooks/useLoading.d.ts.map +0 -1
- package/lib/presentation/loading/presentation/hooks/useLoading.js +0 -49
- package/lib/presentation/loading/presentation/hooks/useLoading.js.map +0 -1
- package/src/presentation/loading/index.ts +0 -40
- package/src/presentation/loading/presentation/components/LoadingSpinner.tsx +0 -116
- package/src/presentation/loading/presentation/components/LoadingState.tsx +0 -200
- package/src/presentation/loading/presentation/hooks/useLoading.ts +0 -100
|
@@ -35,15 +35,6 @@ export const getDisabledStyle = (): ViewStyle => ({
|
|
|
35
35
|
opacity: 0.5,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
/**
|
|
39
|
-
* Get loading container style
|
|
40
|
-
* Centers the loading indicator
|
|
41
|
-
*/
|
|
42
|
-
export const getLoadingContainerStyle = (): ViewStyle => ({
|
|
43
|
-
justifyContent: 'center',
|
|
44
|
-
alignItems: 'center',
|
|
45
|
-
});
|
|
46
|
-
|
|
47
38
|
/**
|
|
48
39
|
* Convert number to HitSlop object
|
|
49
40
|
* If hitSlop is a number, apply it to all sides
|
|
@@ -40,8 +40,7 @@ export interface HitSlop {
|
|
|
40
40
|
* onPress={handlePress}
|
|
41
41
|
* feedback="opacity"
|
|
42
42
|
* strength="normal"
|
|
43
|
-
* disabled={
|
|
44
|
-
* loading={isLoading}
|
|
43
|
+
* disabled={isDisabled}
|
|
45
44
|
* hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}
|
|
46
45
|
* style={styles.touchable}
|
|
47
46
|
* >
|
|
@@ -93,12 +92,6 @@ export interface AtomicTouchableProps {
|
|
|
93
92
|
*/
|
|
94
93
|
disabled?: boolean;
|
|
95
94
|
|
|
96
|
-
/**
|
|
97
|
-
* Show loading indicator (disables touch)
|
|
98
|
-
* @default false
|
|
99
|
-
*/
|
|
100
|
-
loading?: boolean;
|
|
101
|
-
|
|
102
95
|
/**
|
|
103
96
|
* Hit slop - extends touchable area
|
|
104
97
|
* Useful for small touch targets
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
import React from 'react';
|
|
41
41
|
import { View, Modal, TouchableOpacity } from 'react-native';
|
|
42
42
|
import { useAppDesignTokens } from '../hooks/useAppDesignTokens';
|
|
43
|
+
// @ts-ignore - Optional peer dependency
|
|
43
44
|
import { useLocalization } from '@umituz/react-native-localization';
|
|
44
45
|
import { AtomicText } from '../atoms/AtomicText';
|
|
45
46
|
import { AtomicButton } from '../atoms/AtomicButton';
|
|
@@ -82,7 +83,7 @@ export const AtomicConfirmationModal: React.FC<AtomicConfirmationModalProps> = (
|
|
|
82
83
|
const { t } = useLocalization();
|
|
83
84
|
|
|
84
85
|
// Get variant-specific configuration (icon and color only)
|
|
85
|
-
const variantConfig = getVariantConfig(variant, tokens);
|
|
86
|
+
const variantConfig = getVariantConfig(variant as 'default' | 'destructive' | 'warning' | 'success', tokens);
|
|
86
87
|
|
|
87
88
|
// Get locale-aware default text based on variant
|
|
88
89
|
const getDefaultConfirmText = (): string => {
|
|
@@ -116,7 +117,7 @@ export const AtomicConfirmationModal: React.FC<AtomicConfirmationModalProps> = (
|
|
|
116
117
|
<Modal
|
|
117
118
|
visible={visible}
|
|
118
119
|
transparent
|
|
119
|
-
animationType="
|
|
120
|
+
animationType="none"
|
|
120
121
|
onRequestClose={onCancel}
|
|
121
122
|
statusBarTranslucent
|
|
122
123
|
testID={testID}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
// @ts-ignore - Optional peer dependency
|
|
1
2
|
import { useNavigation } from '@react-navigation/native';
|
|
3
|
+
// @ts-ignore - Optional peer dependency
|
|
2
4
|
import { useLocalization, getLanguageByCode, getDefaultLanguage } from '@umituz/react-native-localization';
|
|
3
5
|
|
|
4
6
|
export const useLanguageNavigation = (navigationScreen: string) => {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Provides consistent layout structure for all screens:
|
|
5
5
|
* - SafeAreaView with configurable edges
|
|
6
6
|
* - Optional ScrollView for content
|
|
7
|
-
* - Loading state support
|
|
8
7
|
* - Theme-aware background colors
|
|
9
8
|
* - Optional header/footer slots
|
|
10
9
|
* - Consistent spacing and padding
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
* Advanced:
|
|
18
17
|
* <ScreenLayout
|
|
19
18
|
* scrollable={false}
|
|
20
|
-
* loading={isLoading}
|
|
21
19
|
* edges={['top', 'bottom']}
|
|
22
20
|
* header={<CustomHeader />}
|
|
23
21
|
* >
|
|
@@ -29,7 +27,6 @@ import React, { useMemo } from 'react';
|
|
|
29
27
|
import { View, ScrollView, StyleSheet, ViewStyle } from 'react-native';
|
|
30
28
|
import { SafeAreaView, Edge } from 'react-native-safe-area-context';
|
|
31
29
|
import { useAppDesignTokens } from '../hooks/useAppDesignTokens';
|
|
32
|
-
import { LoadingState } from '../loading/presentation/components/LoadingState';
|
|
33
30
|
|
|
34
31
|
export interface ScreenLayoutProps {
|
|
35
32
|
/**
|
|
@@ -52,22 +49,6 @@ export interface ScreenLayoutProps {
|
|
|
52
49
|
*/
|
|
53
50
|
edges?: Edge[];
|
|
54
51
|
|
|
55
|
-
/**
|
|
56
|
-
* Show loading state
|
|
57
|
-
* When true, displays LoadingState component
|
|
58
|
-
*/
|
|
59
|
-
loading?: boolean;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Loading icon name (default: 'settings')
|
|
63
|
-
*/
|
|
64
|
-
loadingIcon?: string;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Loading message (default: 'Loading...')
|
|
68
|
-
*/
|
|
69
|
-
loadingMessage?: string;
|
|
70
|
-
|
|
71
52
|
/**
|
|
72
53
|
* Optional header component
|
|
73
54
|
* Rendered above scrollable content
|
|
@@ -118,9 +99,6 @@ export const ScreenLayout: React.FC<ScreenLayoutProps> = ({
|
|
|
118
99
|
children,
|
|
119
100
|
scrollable = true,
|
|
120
101
|
edges = ['top'],
|
|
121
|
-
loading = false,
|
|
122
|
-
loadingIcon = 'settings',
|
|
123
|
-
loadingMessage = 'Loading...',
|
|
124
102
|
header,
|
|
125
103
|
footer,
|
|
126
104
|
backgroundColor,
|
|
@@ -136,24 +114,6 @@ export const ScreenLayout: React.FC<ScreenLayoutProps> = ({
|
|
|
136
114
|
|
|
137
115
|
const bgColor = backgroundColor || tokens.colors.backgroundPrimary;
|
|
138
116
|
|
|
139
|
-
// Show loading state
|
|
140
|
-
if (loading) {
|
|
141
|
-
return (
|
|
142
|
-
<SafeAreaView
|
|
143
|
-
style={[styles.container, { backgroundColor: bgColor }, containerStyle]}
|
|
144
|
-
edges={edges}
|
|
145
|
-
testID={testID}
|
|
146
|
-
>
|
|
147
|
-
<LoadingState
|
|
148
|
-
icon={loadingIcon}
|
|
149
|
-
message={loadingMessage}
|
|
150
|
-
size="large"
|
|
151
|
-
fullScreen
|
|
152
|
-
/>
|
|
153
|
-
</SafeAreaView>
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
117
|
// Non-scrollable layout
|
|
158
118
|
if (!scrollable) {
|
|
159
119
|
return (
|
|
@@ -219,26 +219,6 @@ export const typography = {
|
|
|
219
219
|
} as TextStyle,
|
|
220
220
|
} as const;
|
|
221
221
|
|
|
222
|
-
// =============================================================================
|
|
223
|
-
// ANIMATION TOKENS
|
|
224
|
-
// =============================================================================
|
|
225
|
-
|
|
226
|
-
export const animations = {
|
|
227
|
-
// Duration scale (milliseconds)
|
|
228
|
-
fastest: 150,
|
|
229
|
-
fast: 150,
|
|
230
|
-
normal: 300,
|
|
231
|
-
slow: 500,
|
|
232
|
-
slower: 750,
|
|
233
|
-
slowest: 1000,
|
|
234
|
-
|
|
235
|
-
// Easing functions
|
|
236
|
-
easeInOut: 'ease-in-out' as const,
|
|
237
|
-
easeIn: 'ease-in' as const,
|
|
238
|
-
easeOut: 'ease-out' as const,
|
|
239
|
-
linear: 'linear' as const,
|
|
240
|
-
} as const;
|
|
241
|
-
|
|
242
222
|
// =============================================================================
|
|
243
223
|
// OPACITY TOKENS
|
|
244
224
|
// =============================================================================
|
|
@@ -371,7 +351,6 @@ export const avatarSizes = {
|
|
|
371
351
|
export const BASE_TOKENS = {
|
|
372
352
|
spacing,
|
|
373
353
|
typography,
|
|
374
|
-
animations,
|
|
375
354
|
opacity,
|
|
376
355
|
borders,
|
|
377
356
|
sizes,
|
|
@@ -385,7 +364,6 @@ export const BASE_TOKENS = {
|
|
|
385
364
|
|
|
386
365
|
export type Spacing = typeof spacing;
|
|
387
366
|
export type Typography = typeof typography;
|
|
388
|
-
export type Animations = typeof animations;
|
|
389
367
|
export type Opacity = typeof opacity;
|
|
390
368
|
export type Borders = typeof borders;
|
|
391
369
|
export type Sizes = typeof sizes;
|
|
@@ -18,13 +18,12 @@ import { getColorPalette, withAlpha, type ThemeMode, type ColorPalette } from '.
|
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Complete design tokens shape
|
|
21
|
-
* Combines static tokens (spacing, typography,
|
|
21
|
+
* Combines static tokens (spacing, typography, borders) + dynamic colors
|
|
22
22
|
*/
|
|
23
23
|
export type DesignTokens = {
|
|
24
24
|
colors: ColorPalette;
|
|
25
25
|
spacing: typeof BASE_TOKENS.spacing;
|
|
26
26
|
typography: typeof BASE_TOKENS.typography;
|
|
27
|
-
animations: typeof BASE_TOKENS.animations;
|
|
28
27
|
iconSizes: typeof BASE_TOKENS.iconSizes;
|
|
29
28
|
opacity: typeof BASE_TOKENS.opacity;
|
|
30
29
|
avatarSizes: typeof BASE_TOKENS.avatarSizes;
|
|
@@ -67,7 +66,6 @@ export const createDesignTokens = (mode: ThemeMode): DesignTokens => {
|
|
|
67
66
|
// ✅ STATIC: These don't change with theme
|
|
68
67
|
spacing: BASE_TOKENS.spacing,
|
|
69
68
|
typography: BASE_TOKENS.typography,
|
|
70
|
-
animations: BASE_TOKENS.animations,
|
|
71
69
|
iconSizes: BASE_TOKENS.iconSizes,
|
|
72
70
|
opacity: BASE_TOKENS.opacity,
|
|
73
71
|
avatarSizes: BASE_TOKENS.avatarSizes,
|
|
@@ -107,7 +105,7 @@ export const createDesignTokens = (mode: ThemeMode): DesignTokens => {
|
|
|
107
105
|
export const STATIC_DESIGN_TOKENS = createDesignTokens('light');
|
|
108
106
|
|
|
109
107
|
/**
|
|
110
|
-
* STATIC TOKENS (spacing, typography,
|
|
108
|
+
* STATIC TOKENS (spacing, typography, borders)
|
|
111
109
|
* These DON'T change with theme - safe to use anywhere
|
|
112
110
|
*/
|
|
113
111
|
export const STATIC_TOKENS = BASE_TOKENS;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loading Domain - Public API
|
|
3
|
-
*
|
|
4
|
-
* Domain-Driven Design (DDD) Architecture
|
|
5
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
6
|
-
*
|
|
7
|
-
* This is the SINGLE SOURCE OF TRUTH for the Loading domain.
|
|
8
|
-
* ALL imports from this domain MUST go through this file.
|
|
9
|
-
*
|
|
10
|
-
* Architecture:
|
|
11
|
-
* - presentation/components: UI components (LoadingState, LoadingSpinner)
|
|
12
|
-
* - presentation/hooks: React hooks (useLoading)
|
|
13
|
-
*
|
|
14
|
-
* Usage:
|
|
15
|
-
* import { LoadingState, LoadingSpinner, useLoading } from '@domains/design-system';
|
|
16
|
-
*/
|
|
17
|
-
export { LoadingState } from './presentation/components/LoadingState';
|
|
18
|
-
export type { LoadingStateProps, LoadingStateSize } from './presentation/components/LoadingState';
|
|
19
|
-
export { LoadingSpinner } from './presentation/components/LoadingSpinner';
|
|
20
|
-
export type { LoadingSpinnerProps, LoadingSpinnerSize, LoadingSpinnerColor, } from './presentation/components/LoadingSpinner';
|
|
21
|
-
export { useLoading } from './presentation/hooks/useLoading';
|
|
22
|
-
export type { LoadingConfig, UseLoadingReturn, } from './presentation/hooks/useLoading';
|
|
23
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/presentation/loading/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAElG,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAMlD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loading Domain - Public API
|
|
3
|
-
*
|
|
4
|
-
* Domain-Driven Design (DDD) Architecture
|
|
5
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
6
|
-
*
|
|
7
|
-
* This is the SINGLE SOURCE OF TRUTH for the Loading domain.
|
|
8
|
-
* ALL imports from this domain MUST go through this file.
|
|
9
|
-
*
|
|
10
|
-
* Architecture:
|
|
11
|
-
* - presentation/components: UI components (LoadingState, LoadingSpinner)
|
|
12
|
-
* - presentation/hooks: React hooks (useLoading)
|
|
13
|
-
*
|
|
14
|
-
* Usage:
|
|
15
|
-
* import { LoadingState, LoadingSpinner, useLoading } from '@domains/design-system';
|
|
16
|
-
*/
|
|
17
|
-
// =============================================================================
|
|
18
|
-
// PRESENTATION LAYER - Components
|
|
19
|
-
// =============================================================================
|
|
20
|
-
export { LoadingState } from './presentation/components/LoadingState';
|
|
21
|
-
export { LoadingSpinner } from './presentation/components/LoadingSpinner';
|
|
22
|
-
// =============================================================================
|
|
23
|
-
// PRESENTATION LAYER - Hooks
|
|
24
|
-
// =============================================================================
|
|
25
|
-
export { useLoading } from './presentation/hooks/useLoading';
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/presentation/loading/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAO1E,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LoadingSpinner - Theme-Aware Activity Indicator
|
|
3
|
-
*
|
|
4
|
-
* Refactored from AtomicLoadingSpinner - now part of Loading domain
|
|
5
|
-
* Uses central useAppDesignTokens() hook for automatic theme switching
|
|
6
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - ✅ AUTOMATIC theme switching via useAppDesignTokens()
|
|
10
|
-
* - ✅ Multiple size variants (small, medium, large)
|
|
11
|
-
* - ✅ Dynamic color customization
|
|
12
|
-
* - ✅ Overlay support
|
|
13
|
-
* - ✅ Message display
|
|
14
|
-
*/
|
|
15
|
-
import React from 'react';
|
|
16
|
-
import { ViewStyle } from 'react-native';
|
|
17
|
-
export type LoadingSpinnerSize = 'small' | 'medium' | 'large';
|
|
18
|
-
export type LoadingSpinnerColor = 'primary' | 'secondary' | 'white';
|
|
19
|
-
export interface LoadingSpinnerProps {
|
|
20
|
-
size?: LoadingSpinnerSize;
|
|
21
|
-
color?: LoadingSpinnerColor;
|
|
22
|
-
message?: string;
|
|
23
|
-
overlay?: boolean;
|
|
24
|
-
style?: ViewStyle;
|
|
25
|
-
}
|
|
26
|
-
export declare const LoadingSpinner: React.FC<LoadingSpinnerProps>;
|
|
27
|
-
export default LoadingSpinner;
|
|
28
|
-
//# sourceMappingURL=LoadingSpinner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingSpinner.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/loading/presentation/components/LoadingSpinner.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAA2B,SAAS,EAAE,MAAM,cAAc,CAAC;AASlE,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAgBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+DxD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LoadingSpinner - Theme-Aware Activity Indicator
|
|
3
|
-
*
|
|
4
|
-
* Refactored from AtomicLoadingSpinner - now part of Loading domain
|
|
5
|
-
* Uses central useAppDesignTokens() hook for automatic theme switching
|
|
6
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - ✅ AUTOMATIC theme switching via useAppDesignTokens()
|
|
10
|
-
* - ✅ Multiple size variants (small, medium, large)
|
|
11
|
-
* - ✅ Dynamic color customization
|
|
12
|
-
* - ✅ Overlay support
|
|
13
|
-
* - ✅ Message display
|
|
14
|
-
*/
|
|
15
|
-
import React from 'react';
|
|
16
|
-
import { View, ActivityIndicator } from 'react-native';
|
|
17
|
-
import { useAppDesignTokens } from '../../../hooks/useAppDesignTokens';
|
|
18
|
-
import { withAlpha } from '../../../tokens/AppDesignTokens';
|
|
19
|
-
import { AtomicText } from '../../../atoms/AtomicText';
|
|
20
|
-
// =============================================================================
|
|
21
|
-
// SIZE VARIANTS
|
|
22
|
-
// =============================================================================
|
|
23
|
-
const sizeVariants = {
|
|
24
|
-
small: 'small',
|
|
25
|
-
medium: 'large',
|
|
26
|
-
large: 'large',
|
|
27
|
-
};
|
|
28
|
-
// =============================================================================
|
|
29
|
-
// COMPONENT IMPLEMENTATION
|
|
30
|
-
// =============================================================================
|
|
31
|
-
export const LoadingSpinner = ({ size = 'medium', color = 'primary', message, overlay = false, style, }) => {
|
|
32
|
-
// ✅ DYNAMIC tokens from central hook
|
|
33
|
-
const tokens = useAppDesignTokens();
|
|
34
|
-
const spinnerSize = sizeVariants[size];
|
|
35
|
-
/**
|
|
36
|
-
* Get spinner color from dynamic theme
|
|
37
|
-
* ✅ Automatically updates when theme changes
|
|
38
|
-
*/
|
|
39
|
-
const getSpinnerColor = () => {
|
|
40
|
-
switch (color) {
|
|
41
|
-
case 'primary':
|
|
42
|
-
return tokens.colors.primary;
|
|
43
|
-
case 'secondary':
|
|
44
|
-
return tokens.colors.secondary;
|
|
45
|
-
case 'white':
|
|
46
|
-
return tokens.colors.textInverse;
|
|
47
|
-
default:
|
|
48
|
-
return tokens.colors.primary;
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
const spinnerColor = getSpinnerColor();
|
|
52
|
-
const containerStyle = overlay
|
|
53
|
-
? {
|
|
54
|
-
position: 'absolute',
|
|
55
|
-
top: 0,
|
|
56
|
-
left: 0,
|
|
57
|
-
right: 0,
|
|
58
|
-
bottom: 0,
|
|
59
|
-
backgroundColor: withAlpha(tokens.colors.black, 0.5),
|
|
60
|
-
justifyContent: 'center',
|
|
61
|
-
alignItems: 'center',
|
|
62
|
-
zIndex: 9999,
|
|
63
|
-
}
|
|
64
|
-
: {
|
|
65
|
-
justifyContent: 'center',
|
|
66
|
-
alignItems: 'center',
|
|
67
|
-
padding: tokens.spacing.lg,
|
|
68
|
-
};
|
|
69
|
-
return (<View style={[containerStyle, style]}>
|
|
70
|
-
<ActivityIndicator size={spinnerSize} color={spinnerColor}/>
|
|
71
|
-
{message && (<AtomicText type="bodyMedium" color={overlay ? 'inverse' : 'primary'} style={{ marginTop: tokens.spacing.md, textAlign: 'center' }}>
|
|
72
|
-
{message}
|
|
73
|
-
</AtomicText>)}
|
|
74
|
-
</View>);
|
|
75
|
-
};
|
|
76
|
-
export default LoadingSpinner;
|
|
77
|
-
//# sourceMappingURL=LoadingSpinner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingSpinner.js","sourceRoot":"","sources":["../../../../../src/presentation/loading/presentation/components/LoadingSpinner.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAa,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAiBvD,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,MAAM,YAAY,GAAkD;IAClE,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,SAAS,EACjB,OAAO,EACP,OAAO,GAAG,KAAK,EACf,KAAK,GACN,EAAE,EAAE;IACH,qCAAqC;IACrC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,MAAM,eAAe,GAAG,GAAW,EAAE;QACnC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC/B,KAAK,WAAW;gBACd,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACjC,KAAK,OAAO;gBACV,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACnC;gBACE,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,cAAc,GAAc,OAAO;QACvC,CAAC,CAAC;YACE,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YACpD,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,IAAI;SACb;QACH,CAAC,CAAC;YACE,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;SAC3B,CAAC;IAEN,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CACnC;MAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAC1D;MAAA,CAAC,OAAO,IAAI,CACV,CAAC,UAAU,CACT,IAAI,CAAC,YAAY,CACjB,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CACvC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAE7D;UAAA,CAAC,OAAO,CACV;QAAA,EAAE,UAAU,CAAC,CACd,CACH;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LoadingState - Dynamic Icon-Based Loading Component
|
|
3
|
-
*
|
|
4
|
-
* Universal loading component with configurable emoji/icon support
|
|
5
|
-
* Inspired by meditation_timer's breathing animation pattern
|
|
6
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - ✅ Dynamic emoji/icon per screen (🏠 Home, ⚙️ Settings, 💪 Workout, etc.)
|
|
10
|
-
* - ✅ Breathing animation effect (scale 1 → 1.15 → 1)
|
|
11
|
-
* - ✅ Size variants (small, medium, large)
|
|
12
|
-
* - ✅ Full screen or inline modes
|
|
13
|
-
* - ✅ Optional loading message
|
|
14
|
-
* - ✅ Theme-aware styling
|
|
15
|
-
*/
|
|
16
|
-
import React from 'react';
|
|
17
|
-
export type LoadingStateSize = 'small' | 'medium' | 'large';
|
|
18
|
-
export interface LoadingStateProps {
|
|
19
|
-
/**
|
|
20
|
-
* Emoji/icon to display (changes per screen context)
|
|
21
|
-
* Examples: 🏠 Home, ⚙️ Settings, 💪 Workout, 🧘 Meditation, 📊 Analytics
|
|
22
|
-
*/
|
|
23
|
-
icon?: string;
|
|
24
|
-
/**
|
|
25
|
-
* Optional loading message
|
|
26
|
-
*/
|
|
27
|
-
message?: string;
|
|
28
|
-
/**
|
|
29
|
-
* Size variant
|
|
30
|
-
*/
|
|
31
|
-
size?: LoadingStateSize;
|
|
32
|
-
/**
|
|
33
|
-
* Full screen overlay mode
|
|
34
|
-
*/
|
|
35
|
-
fullScreen?: boolean;
|
|
36
|
-
}
|
|
37
|
-
export declare const LoadingState: React.FC<LoadingStateProps>;
|
|
38
|
-
export default LoadingState;
|
|
39
|
-
//# sourceMappingURL=LoadingState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingState.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/loading/presentation/components/LoadingState.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAqC,MAAM,OAAO,CAAC;AAe1D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAExB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkCD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4EpD,CAAC;AAmCF,eAAe,YAAY,CAAC"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LoadingState - Dynamic Icon-Based Loading Component
|
|
3
|
-
*
|
|
4
|
-
* Universal loading component with configurable emoji/icon support
|
|
5
|
-
* Inspired by meditation_timer's breathing animation pattern
|
|
6
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - ✅ Dynamic emoji/icon per screen (🏠 Home, ⚙️ Settings, 💪 Workout, etc.)
|
|
10
|
-
* - ✅ Breathing animation effect (scale 1 → 1.15 → 1)
|
|
11
|
-
* - ✅ Size variants (small, medium, large)
|
|
12
|
-
* - ✅ Full screen or inline modes
|
|
13
|
-
* - ✅ Optional loading message
|
|
14
|
-
* - ✅ Theme-aware styling
|
|
15
|
-
*/
|
|
16
|
-
import React, { useRef, useEffect, useMemo } from 'react';
|
|
17
|
-
import { View, StyleSheet, Animated, Easing, } from 'react-native';
|
|
18
|
-
import { useAppDesignTokens } from '../../../hooks/useAppDesignTokens';
|
|
19
|
-
import { AtomicText } from '../../../atoms/AtomicText';
|
|
20
|
-
const SIZE_CONFIG = {
|
|
21
|
-
small: {
|
|
22
|
-
iconSize: 32,
|
|
23
|
-
showMessage: false,
|
|
24
|
-
containerPadding: 16,
|
|
25
|
-
},
|
|
26
|
-
medium: {
|
|
27
|
-
iconSize: 48,
|
|
28
|
-
showMessage: true,
|
|
29
|
-
containerPadding: 24,
|
|
30
|
-
},
|
|
31
|
-
large: {
|
|
32
|
-
iconSize: 64,
|
|
33
|
-
showMessage: true,
|
|
34
|
-
containerPadding: 32,
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
// =============================================================================
|
|
38
|
-
// COMPONENT IMPLEMENTATION
|
|
39
|
-
// =============================================================================
|
|
40
|
-
export const LoadingState = ({ icon = '⏳', // Default hourglass icon
|
|
41
|
-
message, size = 'large', fullScreen = false, }) => {
|
|
42
|
-
// ✅ Dynamic theme tokens
|
|
43
|
-
const tokens = useAppDesignTokens();
|
|
44
|
-
// Animation ref for breathing effect
|
|
45
|
-
const scaleAnim = useRef(new Animated.Value(1)).current;
|
|
46
|
-
// Size configuration
|
|
47
|
-
const config = SIZE_CONFIG[size];
|
|
48
|
-
/**
|
|
49
|
-
* Breathing Animation Effect
|
|
50
|
-
* Smoothly scales icon from 1 → 1.15 → 1 in continuous loop
|
|
51
|
-
* Creates calming, natural breathing sensation
|
|
52
|
-
*/
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
const breathingAnimation = Animated.loop(Animated.sequence([
|
|
55
|
-
// Expand (inhale)
|
|
56
|
-
Animated.timing(scaleAnim, {
|
|
57
|
-
toValue: 1.15,
|
|
58
|
-
duration: tokens.animations.slowest,
|
|
59
|
-
easing: Easing.inOut(Easing.ease),
|
|
60
|
-
useNativeDriver: true,
|
|
61
|
-
}),
|
|
62
|
-
// Contract (exhale)
|
|
63
|
-
Animated.timing(scaleAnim, {
|
|
64
|
-
toValue: 1,
|
|
65
|
-
duration: tokens.animations.slowest,
|
|
66
|
-
easing: Easing.inOut(Easing.ease),
|
|
67
|
-
useNativeDriver: true,
|
|
68
|
-
}),
|
|
69
|
-
]));
|
|
70
|
-
breathingAnimation.start();
|
|
71
|
-
return () => {
|
|
72
|
-
breathingAnimation.stop();
|
|
73
|
-
};
|
|
74
|
-
}, [scaleAnim]);
|
|
75
|
-
// Dynamic styles based on theme
|
|
76
|
-
const styles = useMemo(() => getStyles(tokens, config, fullScreen), [tokens, config, fullScreen]);
|
|
77
|
-
return (<View style={styles.container}>
|
|
78
|
-
{/* Animated Icon/Emoji */}
|
|
79
|
-
<Animated.Text style={[
|
|
80
|
-
styles.icon,
|
|
81
|
-
{
|
|
82
|
-
fontSize: config.iconSize,
|
|
83
|
-
transform: [{ scale: scaleAnim }],
|
|
84
|
-
},
|
|
85
|
-
]}>
|
|
86
|
-
{icon}
|
|
87
|
-
</Animated.Text>
|
|
88
|
-
|
|
89
|
-
{/* Optional Loading Message */}
|
|
90
|
-
{config.showMessage && message && (<AtomicText type="bodyMedium" style={styles.message}>
|
|
91
|
-
{message}
|
|
92
|
-
</AtomicText>)}
|
|
93
|
-
</View>);
|
|
94
|
-
};
|
|
95
|
-
// =============================================================================
|
|
96
|
-
// STYLES
|
|
97
|
-
// =============================================================================
|
|
98
|
-
const getStyles = (tokens, config, fullScreen) => StyleSheet.create({
|
|
99
|
-
container: {
|
|
100
|
-
...(fullScreen ? {
|
|
101
|
-
flex: 1,
|
|
102
|
-
justifyContent: 'center',
|
|
103
|
-
alignItems: 'center',
|
|
104
|
-
backgroundColor: tokens.colors.backgroundPrimary,
|
|
105
|
-
} : {
|
|
106
|
-
justifyContent: 'center',
|
|
107
|
-
alignItems: 'center',
|
|
108
|
-
padding: config.containerPadding,
|
|
109
|
-
}),
|
|
110
|
-
},
|
|
111
|
-
icon: {
|
|
112
|
-
textAlign: 'center',
|
|
113
|
-
marginBottom: tokens.spacing.md,
|
|
114
|
-
},
|
|
115
|
-
message: {
|
|
116
|
-
color: tokens.colors.textSecondary,
|
|
117
|
-
textAlign: 'center',
|
|
118
|
-
marginTop: tokens.spacing.sm,
|
|
119
|
-
maxWidth: 300,
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
export default LoadingState;
|
|
123
|
-
//# sourceMappingURL=LoadingState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingState.js","sourceRoot":"","sources":["../../../../../src/presentation/loading/presentation/components/LoadingState.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useLoading - Loading State Management Hook
|
|
3
|
-
*
|
|
4
|
-
* Centralized hook for managing loading states across the application
|
|
5
|
-
* Theme: {{THEME_NAME}} ({{CATEGORY}} category)
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - ✅ Simple boolean loading state
|
|
9
|
-
* - ✅ Message management
|
|
10
|
-
* - ✅ Icon configuration per context
|
|
11
|
-
* - ✅ Type-safe loading control
|
|
12
|
-
*/
|
|
13
|
-
export interface LoadingConfig {
|
|
14
|
-
isLoading: boolean;
|
|
15
|
-
message?: string;
|
|
16
|
-
icon?: string;
|
|
17
|
-
}
|
|
18
|
-
export interface UseLoadingReturn {
|
|
19
|
-
/**
|
|
20
|
-
* Current loading state
|
|
21
|
-
*/
|
|
22
|
-
isLoading: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Current loading message
|
|
25
|
-
*/
|
|
26
|
-
message: string | undefined;
|
|
27
|
-
/**
|
|
28
|
-
* Current loading icon
|
|
29
|
-
*/
|
|
30
|
-
icon: string | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* Start loading with optional message and icon
|
|
33
|
-
*/
|
|
34
|
-
startLoading: (message?: string, icon?: string) => void;
|
|
35
|
-
/**
|
|
36
|
-
* Stop loading and clear message
|
|
37
|
-
*/
|
|
38
|
-
stopLoading: () => void;
|
|
39
|
-
/**
|
|
40
|
-
* Update loading message without affecting state
|
|
41
|
-
*/
|
|
42
|
-
setMessage: (message: string | undefined) => void;
|
|
43
|
-
/**
|
|
44
|
-
* Update loading icon without affecting state
|
|
45
|
-
*/
|
|
46
|
-
setIcon: (icon: string | undefined) => void;
|
|
47
|
-
}
|
|
48
|
-
export declare const useLoading: (initialConfig?: LoadingConfig) => UseLoadingReturn;
|
|
49
|
-
export default useLoading;
|
|
50
|
-
//# sourceMappingURL=useLoading.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLoading.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/loading/presentation/hooks/useLoading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzB;;OAEG;IACH,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAExD;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAElD;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAC7C;AAMD,eAAO,MAAM,UAAU,GAAI,gBAAgB,aAAa,KAAG,gBA+B1D,CAAC;AAEF,eAAe,UAAU,CAAC"}
|