@airxpay/sdk-ui 1.0.0 → 1.0.2

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 (34) hide show
  1. package/README.md +266 -112
  2. package/dist/api/seller.d.ts +9 -0
  3. package/dist/api/seller.js +13 -4
  4. package/dist/components/common/CountryDropdown.d.ts +17 -0
  5. package/dist/components/common/CountryDropdown.js +2 -2
  6. package/dist/components/common/FileUploader.d.ts +16 -0
  7. package/dist/components/common/FileUploader.js +17 -8
  8. package/dist/components/common/StepIndicator.d.ts +11 -0
  9. package/dist/components/steps/BankDetails.d.ts +10 -0
  10. package/dist/components/steps/BankDetails.js +23 -16
  11. package/dist/components/steps/BasicDetailsForm.d.ts +10 -0
  12. package/dist/components/steps/BasicDetailsForm.js +8 -19
  13. package/dist/components/steps/KYCVerification.d.ts +11 -0
  14. package/dist/components/steps/KYCVerification.js +13 -4
  15. package/dist/components/steps/OnboardingComplete.d.ts +16 -0
  16. package/dist/components/ui/SellerOnboard/CustomSegmentedButtons.d.ts +15 -0
  17. package/dist/components/ui/SellerOnboard/SellerOnboarding.d.ts +4 -0
  18. package/dist/components/ui/SellerOnboard/SellerOnboarding.js +10 -23
  19. package/dist/contexts/AirXPayProvider.d.ts +14 -0
  20. package/dist/contexts/AirXPayProvider.js +9 -8
  21. package/dist/hooks/SellerOnboarding.d.ts +3 -0
  22. package/dist/hooks/SellerOnboarding.js +2 -2
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.js +9 -3
  25. package/dist/sdk/airxpay.d.ts +7 -0
  26. package/dist/sdk/airxpay.js +16 -5
  27. package/dist/types/dev.d.ts +1 -0
  28. package/dist/types/dev.js +5 -0
  29. package/dist/types/dev.ts +2 -0
  30. package/dist/types/sellertypes.d.ts +69 -0
  31. package/dist/types/sellertypes.ts +85 -0
  32. package/dist/types/type.d.ts +9 -0
  33. package/dist/types/type.ts +10 -0
  34. package/package.json +7 -15
package/README.md CHANGED
@@ -1,9 +1,38 @@
1
1
  # 📘 AirXPay Initialization UI Components
2
2
 
3
+ <a href="#-typescript">
4
+ <img src="https://img.shields.io/badge/TypeScript-5.0+-blue?style=for-the-badge&logo=typescript" alt="TypeScript" />
5
+ </a>
6
+ <a href="#-react">
7
+ <img src="https://img.shields.io/badge/React-18.0+-61DAFB?style=for-the-badge&logo=react" alt="React" />
8
+ </a>
9
+ <a href="#-react-native">
10
+ <img src="https://img.shields.io/badge/React_Native-0.72+-61DAFB?style=for-the-badge&logo=react" alt="React Native" />
11
+ </a>
12
+ <a href="#-expo">
13
+ <img src="https://img.shields.io/badge/Expo-50+-000020?style=for-the-badge&logo=expo" alt="Expo" />
14
+ </a>
15
+ <a href="#-nextjs">
16
+ <img src="https://img.shields.io/badge/Next.js-14.0+-000000?style=for-the-badge&logo=next.js" alt="Next.js" />
17
+ </a>
18
+ <a href="#-javascript">
19
+ <img src="https://img.shields.io/badge/JavaScript-ES6+-F7DF1E?style=for-the-badge&logo=javascript" alt="JavaScript" />
20
+ </a>
21
+ <a href="#-typescript">
22
+ <img src="https://img.shields.io/badge/TypeScript-5.0+-3178C6?style=for-the-badge&logo=typescript" alt="TypeScript" />
23
+ </a>
24
+ <a href="#-mit-license">
25
+ <img src="https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge&logo=open-source-initiative" alt="MIT License" />
26
+ </a>
27
+
28
+ ---
29
+
3
30
  <div align="center">
4
- <img src="./assets/images/flixora.png" alt="AirXPay Flixora SDK" width="100"/>
31
+ <img src="./assets/images/airxpay.png" alt="AirXPay Flixora SDK" width="120"/>
5
32
  </div>
6
33
 
34
+ ---
35
+
7
36
  ## 🚀 Overview
8
37
 
9
38
  AirXPay Initialization UI is a production-ready React & React Native component library designed to streamline seller onboarding in multi-tenant SaaS applications. Built with TypeScript and enterprise-grade architecture, it provides a seamless, animated, and validated multi-step flow for collecting seller information.
@@ -23,7 +52,7 @@ AirXPay Initialization UI is a production-ready React & React Native component l
23
52
  | 🏦 **Bank Verification** | Country-specific bank details collection |
24
53
  | 📊 **Progress Tracking** | Visual progress indicator with step status |
25
54
  | 🔧 **Configurable** | Customizable via AirXPayProvider |
26
- | 📘 **TypeScript** | Fully typed components and hooks |
55
+ | 📘 **TypeScript** | Fully typed components, hooks, and classes |
27
56
  | 📱 **Cross-platform** | Works with React Native, Expo, and Web |
28
57
 
29
58
  ---
@@ -45,11 +74,11 @@ yarn add react-native-paper react-native-country-picker-modal @react-native-comm
45
74
  ### Install the Package
46
75
 
47
76
  ```bash
48
- # For local development
49
- npm install --save path/to/airxpay-initialization-ui
77
+ # Install the package from npm
78
+ npm install @airxpay/sdk-ui
50
79
 
51
- # Or from npm (when published)
52
- npm install airxpay-initialization-ui
80
+ # Install package from yarn
81
+ yarn add @airxpay/sdk-ui
53
82
  ```
54
83
 
55
84
  ### Requirements
@@ -63,31 +92,30 @@ npm install airxpay-initialization-ui
63
92
  ## 🏗️ Architecture
64
93
 
65
94
  ```
66
- airxpay-initialization-ui/
95
+ @airxpay/sdk-ui/
67
96
  ├── components/
68
97
  │ ├── steps/
69
98
  │ │ ├── BasicDetailsForm.tsx
70
99
  │ │ ├── KYCVerification.tsx
71
100
  │ │ ├── BankDetails.tsx
72
101
  │ │ └── OnboardingComplete.tsx
73
- │ └── SellerOnboardingSheet.tsx
102
+ │ └── ui/
103
+ │ └── SellerOnboard/
104
+ │ └── SellerOnboarding.tsx
74
105
  ├── contexts/
75
106
  │ └── AirXPayProvider.tsx
76
- ├── api/
77
- │ └── seller.ts
78
107
  ├── hooks/
79
- ├── useAirXPay.ts
80
- ├── useAirXPaySafe.ts
81
- │ └── useIsAirXPayReady.ts
82
- └── index.ts
108
+ └── SellerOnboarding.tsx # useAirXPaySheet
109
+ ├── api/
110
+ │ └── seller.ts # verifyPublicKey
111
+ ├── types/
112
+ │ ├── dev.ts # __DEV__
113
+ │ └── type.ts # AirXPayConfig
114
+ └── index.ts # Main exports
83
115
  ```
84
116
 
85
117
  ---
86
118
 
87
- <div align="center">
88
- <img src="./assets/images/airxpay.png" alt="AirXPay Flixora SDK" width="100"/>
89
- </div>
90
-
91
119
  ## 🚀 Quick Start
92
120
 
93
121
  ### 1️⃣ Wrap with Provider
@@ -95,7 +123,7 @@ airxpay-initialization-ui/
95
123
  ```tsx
96
124
  // Root.tsx
97
125
  import React from 'react';
98
- import { AirXPayProvider } from 'airxpay-initialization-ui';
126
+ import { AirXPayProvider } from '@airxpay/sdk-ui';
99
127
  import App from './App';
100
128
 
101
129
  export default function Root() {
@@ -105,6 +133,7 @@ export default function Root() {
105
133
  baseUrl: 'https://api.airxpay.com',
106
134
  publicKey: 'YOUR_PUBLIC_KEY_HERE',
107
135
  }}
136
+ enableLogging={__DEV__} // Optional: enables detailed logs in development
108
137
  >
109
138
  <App />
110
139
  </AirXPayProvider>
@@ -117,11 +146,11 @@ export default function Root() {
117
146
  ```tsx
118
147
  // SellerOnboardingScreen.tsx
119
148
  import React from 'react';
120
- import { SellerOnboardingSheet } from 'airxpay-initialization-ui';
149
+ import { useAirXPaySheet } from '@airxpay/sdk-ui';
121
150
 
122
151
  const MySellerOnboarding = () => {
123
152
  return (
124
- <SellerOnboardingSheet
153
+ <useAirXPaySheet
125
154
  sellerId="seller_12345"
126
155
  mode="live"
127
156
  isKycCompleted={false}
@@ -148,7 +177,7 @@ export default MySellerOnboarding;
148
177
 
149
178
  ## 📋 Component API
150
179
 
151
- ### SellerOnboardingSheet Props
180
+ ### useAirXPaySheet Props
152
181
 
153
182
  | Prop | Type | Required | Default | Description |
154
183
  |------|------|----------|---------|-------------|
@@ -167,35 +196,78 @@ export default MySellerOnboarding;
167
196
 
168
197
  ### AirXPayProvider Props
169
198
 
170
- | Prop | Type | Required | Description |
171
- |------|------|----------|-------------|
172
- | config.baseUrl | string | ✅ | API base URL |
173
- | config.publicKey | string | ✅ | API public key |
174
- | children | ReactNode | ✅ | Child components |
199
+ | Prop | Type | Required | Default | Description |
200
+ |------|------|----------|---------|-------------|
201
+ | config.baseUrl | string | ✅ | - | API base URL (must be valid URL) |
202
+ | config.publicKey | string | ✅ | - | API public key (min 20 chars) |
203
+ | children | ReactNode | ✅ | - | Child components |
204
+ | enableLogging | boolean | ❌ | \_\_DEV\_\_ | Enable/disable console logs |
175
205
 
176
206
  ---
177
207
 
178
- ## 🎣 Hooks
208
+ ## 🎣 Hooks & Utilities
179
209
 
180
210
  ```tsx
181
211
  import {
182
- useAirXPay,
183
- useAirXPaySafe,
184
- useIsAirXPayReady,
185
- useAirXPayConfig
186
- } from 'airxpay-initialization-ui';
187
-
188
- // Access config (throws if no provider)
212
+ useAirXPay, // Access config (throws if no provider)
213
+ useAirXPaySafe, // Safe access (returns null if no provider)
214
+ useProviderReady, // Hook: checks if provider is ready
215
+ useAirXPayConfig, // Access specific config value
216
+ AirXPayConsumer // Context consumer for advanced use
217
+ } from '@airxpay/sdk-ui';
218
+
219
+ // Example usage
189
220
  const { baseUrl, publicKey } = useAirXPay();
190
-
191
- // Safe access (returns null if no provider)
192
221
  const config = useAirXPaySafe();
222
+ const isReady = useProviderReady();
223
+ const baseUrl = useAirXPayConfig('baseUrl');
224
+ ```
193
225
 
194
- // Check if provider is ready
195
- const isReady = useIsAirXPayReady();
226
+ ### Class-based Initialization
196
227
 
197
- // Access specific config value
198
- const baseUrl = useAirXPayConfig('baseUrl');
228
+ The package also provides a class-based approach for scenarios where you need to initialize the SDK asynchronously:
229
+
230
+ ```tsx
231
+ import { useIsAirXPayReady } from '@airxpay/sdk-ui';
232
+
233
+ // Initialize with config
234
+ const airxpay = new useIsAirXPayReady({
235
+ baseUrl: 'https://api.airxpay.com',
236
+ publicKey: 'your_public_key_here'
237
+ });
238
+
239
+ // Verify credentials asynchronously
240
+ async function initializeSDK() {
241
+ try {
242
+ const result = await airxpay.initialize();
243
+ console.log('SDK initialized successfully:', result);
244
+ } catch (error) {
245
+ console.error('Initialization failed:', error);
246
+ }
247
+ }
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 🔧 Configuration Validation
253
+
254
+ The `AirXPayProvider` includes built-in validation that throws clear, actionable errors:
255
+
256
+ ```tsx
257
+ // ❌ This will throw a detailed error
258
+ <AirXPayProvider
259
+ config={{
260
+ baseUrl: 'not-a-url',
261
+ publicKey: 'short'
262
+ }}
263
+ >
264
+ <App />
265
+ </AirXPayProvider>
266
+
267
+ // Error message:
268
+ // AirXPayProvider Configuration Error:
269
+ // • baseUrl must be a valid URL
270
+ // • publicKey appears to be invalid
199
271
  ```
200
272
 
201
273
  ---
@@ -205,8 +277,7 @@ const baseUrl = useAirXPayConfig('baseUrl');
205
277
  ### Styling
206
278
 
207
279
  ```tsx
208
- // Override default styles
209
- <SellerOnboardingSheet
280
+ <useAirXPaySheet
210
281
  // ... props
211
282
  styles={{
212
283
  container: { backgroundColor: '#f5f5f5' },
@@ -215,27 +286,14 @@ const baseUrl = useAirXPayConfig('baseUrl');
215
286
  />
216
287
  ```
217
288
 
218
- ### Icons & Branding
219
-
220
- ```tsx
221
- // Custom logo
222
- <SellerOnboardingSheet
223
- // ... props
224
- logo={require('./assets/custom-logo.png')}
225
- />
226
-
227
- // Custom step icons via STEPS array modification
228
- ```
229
-
230
289
  ### Theme Support
231
290
 
232
291
  ```tsx
233
- // Using with React Native Paper
234
292
  import { Provider as PaperProvider } from 'react-native-paper';
235
293
 
236
294
  <PaperProvider theme={yourTheme}>
237
295
  <AirXPayProvider config={config}>
238
- <SellerOnboardingSheet {...props} />
296
+ <useAirXPaySheet {...props} />
239
297
  </AirXPayProvider>
240
298
  </PaperProvider>
241
299
  ```
@@ -270,62 +328,38 @@ Step 4: Completion
270
328
 
271
329
  ---
272
330
 
273
- ## Advanced Usage
274
-
275
- ### Custom Step Implementation
276
-
277
- ```tsx
278
- import { useStepContext } from 'airxpay-initialization-ui';
279
-
280
- const CustomStep = () => {
281
- const { stepData, updateStepData, goToNextStep } = useStepContext();
282
-
283
- const handleSubmit = () => {
284
- updateStepData({ customField: 'value' });
285
- goToNextStep();
286
- };
287
-
288
- return (
289
- // Your custom UI
290
- );
291
- };
292
- ```
293
-
294
- ### Error Handling
331
+ ## 📝 Exports Reference
295
332
 
296
333
  ```tsx
297
- <SellerOnboardingSheet
298
- onError={(error, step) => {
299
- switch(error.code) {
300
- case 'KYC_FAILED':
301
- showNotification('KYC verification failed');
302
- break;
303
- case 'BANK_INVALID':
304
- showNotification('Invalid bank details');
305
- break;
306
- }
307
- }}
308
- />
334
+ // Main exports from index.ts
335
+ export { useIsAirXPayReady } from "./sdk/airxpay"; // Class for async init
336
+ export { AirXPayProvider, useProviderReady, useAirXPayConfig, useAirXPaySafe, useAirXPay } from "./contexts/AirXPayProvider";
337
+ export { default as useAirXPaySheet } from "./hooks/SellerOnboarding";
338
+ export { __DEV__ } from './types/dev';
339
+
340
+ // Also available via context
341
+ export {
342
+ useAirXPay,
343
+ useAirXPaySafe,
344
+ useAirXPayConfig,
345
+ AirXPayConsumer
346
+ } from './contexts/AirXPayProvider';
309
347
  ```
310
348
 
311
349
  ---
312
350
 
313
- ## 🧪 Testing
314
-
315
- ```bash
316
- # Run tests
317
- npm test
318
-
319
- # Run with coverage
320
- npm test -- --coverage
351
+ ## 🧪 Development Utilities
321
352
 
322
- # Lint code
323
- npm run lint
353
+ ```tsx
354
+ import { __DEV__ } from '@airxpay/sdk-ui';
324
355
 
325
- # Type check
326
- npm run type-check
356
+ if (__DEV__) {
357
+ console.log('Running in development mode');
358
+ }
327
359
  ```
328
360
 
361
+ The `__DEV__` flag helps you conditionally run code only in development environments.
362
+
329
363
  ---
330
364
 
331
365
  ## 📈 Performance
@@ -333,7 +367,7 @@ npm run type-check
333
367
  - **Memoized Components:** All step components are memoized
334
368
  - **Optimized Re-renders:** Context splitting prevents unnecessary renders
335
369
  - **Lazy Loading:** Steps load on-demand
336
- - **Animation Optimizations:** Native driver for smooth 60fps transitions
370
+ - **Development Logging:** Auto-disabled in production via `__DEV__`
337
371
 
338
372
  ---
339
373
 
@@ -351,22 +385,142 @@ npm run type-check
351
385
 
352
386
  | Issue | Solution |
353
387
  |-------|----------|
354
- | Provider not found | Wrap components in `<AirXPayProvider>` |
388
+ | "useAirXPay must be used within AirXPayProvider" | Wrap your component tree with provider |
389
+ | "Public key appears to be invalid" | Check if publicKey is at least 20 chars |
390
+ | "baseUrl must be a valid URL" | Include protocol (https://) in baseUrl |
355
391
  | Images not uploading | Check Expo ImagePicker permissions |
356
- | Animation lag | Enable useNativeDriver in config |
357
392
  | TypeScript errors | Update to latest version |
358
- | Bank validation fails | Check country code format |
393
+
394
+ ---
395
+
396
+ # 🎣 Available Hooks
397
+
398
+ The **@airxpay/sdk-ui** package provides several utility hooks for accessing configuration, managing initialization state, **and safely interacting with the AirXPayProvider.**
399
+
400
+ ```
401
+ import {
402
+ useAirXPay,
403
+ useAirXPaySafe,
404
+ useProviderReady,
405
+ useAirXPayConfig
406
+ } from '@airxpay/sdk-ui';
407
+
408
+ 1️⃣ useAirXPay()
409
+ const { baseUrl, publicKey } = useAirXPay();
410
+ ```
411
+
412
+ **Provides direct access to the full AirXPay configuration.**
413
+
414
+ **Behavior**
415
+
416
+ Must be used inside AirXPayProvider.
417
+
418
+ Throws an error if the provider is not found.
419
+
420
+ Ensures strict enforcement of provider usage.
421
+
422
+ When to Use
423
+
424
+ Use this hook when you require guaranteed access to configuration values such as baseUrl or publicKey for:
425
+
426
+ API requests
427
+
428
+ Dynamic endpoint handling
429
+
430
+ **Advanced integrations**
431
+
432
+ # Recommended for: Production components where the provider is always present.
433
+
434
+ ```
435
+ 2️⃣ useAirXPaySafe()
436
+ const safeConfig = useAirXPaySafe();
437
+ ```
438
+
439
+ A safe alternative to ```useAirXPay().```
440
+
441
+ Behavior
442
+
443
+ Returns null if the provider is not available.
444
+
445
+ Does not throw an error.
446
+
447
+ When to Use
448
+
449
+ Component testing in isolation
450
+
451
+ Optional integrations
452
+
453
+ Shared UI components that may or may not be wrapped in the provider
454
+
455
+ Recommended for: Flexible usage scenarios where provider presence is not guaranteed.
456
+
457
+ ```
458
+ 3️⃣ useProviderReady()
459
+ const isReady = useProviderReady();
460
+ ```
461
+
462
+ Checks whether the SDK has been fully initialized.
463
+
464
+ Behavior
465
+
466
+ Returns a boolean indicating initialization state.
467
+
468
+ Useful for asynchronous setup workflows.
469
+
470
+ When to Use
471
+
472
+ Conditional rendering
473
+
474
+ Showing loaders before initialization
475
+
476
+ Delaying onboarding UI until SDK is ready
477
+
478
+ Recommended for: Applications using async initialization or class-based setup.
479
+
480
+ ```
481
+ 4️⃣ useAirXPayConfig(key)
482
+ const apiUrl = useAirXPayConfig('baseUrl');
483
+ ```
484
+
485
+ Retrieves a specific configuration value from the provider.
486
+
487
+ Behavior
488
+
489
+ Accepts a configuration key ```(e.g., 'baseUrl', 'publicKey').```
490
+
491
+ Returns only the requested value.
492
+
493
+ When to Use
494
+
495
+ Accessing a single configuration property
496
+
497
+ Avoiding full object destructuring
498
+
499
+ Cleaner and more focused component logic
500
+
501
+ Recommended for: Minimal, targeted configuration access.
502
+
503
+ ```📌 Hook Comparison```
504
+ **Hook Throws Error Safe Fallback Primary Purpose**
505
+
506
+ ```
507
+ useAirXPay ✅ Yes ❌ No Direct access to full configuration
508
+ useAirXPaySafe ❌ No ✅ Yes Optional/safe configuration access
509
+ useProviderReady ❌ No ✅ Yes Initialization state check
510
+ useAirXPayConfig ❌ No ✅ Yes Access a single configuration value
511
+ ```
512
+
359
513
 
360
514
  ---
361
515
 
362
516
  ## 📝 Changelog
363
517
 
364
518
  ### v1.0.5 (Latest)
365
- - Added React 18 support
366
- - Fixed animation performance issues
519
+ - Added class-based `useIsAirXPayReady` for async initialization
520
+ - Enhanced error messages with stack traces
521
+ - Added `__DEV__` flag for environment detection
367
522
  - Improved TypeScript types
368
- - Added Expo SDK 50+ compatibility
369
- - Enhanced error handling
523
+ - Added `enableLogging` prop to provider
370
524
 
371
525
  ### v1.0.3
372
526
  - Initial release
@@ -397,4 +551,4 @@ MIT License © 2026 Flixora Technologies
397
551
  <p><strong>Your Smile, Our Simplicity 😊</strong></p>
398
552
  <p><sub>Version 1.0.5 | Part of AirXPay, TizzyGo, TizzyOS, and TizzyChat</sub></p>
399
553
  <p><i>We upgraded from v1.0.3 to v1.0.5 to maintain version consistency across our ecosystem. Thanks for your understanding!</i></p>
400
- </div>
554
+ </div>
@@ -0,0 +1,9 @@
1
+ export interface SellerInitResponse {
2
+ mode: "live" | "test";
3
+ userId: string;
4
+ isKycCompleted: boolean;
5
+ isBankDetailsCompleted: boolean;
6
+ kycStatus: string;
7
+ status: string;
8
+ }
9
+ export declare const verifyPublicKey: (baseUrl: string, publicKey: string) => Promise<SellerInitResponse>;
@@ -1,8 +1,17 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.verifyPublicKey = void 0;
4
- const verifyPublicKey = async (baseUrl, publicKey) => {
5
- const response = await fetch(`${baseUrl}/api/verify-public-key`, {
13
+ const verifyPublicKey = (baseUrl, publicKey) => __awaiter(void 0, void 0, void 0, function* () {
14
+ const response = yield fetch(`${baseUrl}/api/verify-public-key`, {
6
15
  method: "POST",
7
16
  headers: {
8
17
  "Content-Type": "application/json",
@@ -12,6 +21,6 @@ const verifyPublicKey = async (baseUrl, publicKey) => {
12
21
  if (!response.ok) {
13
22
  throw new Error("Invalid public key or server error");
14
23
  }
15
- return await response.json();
16
- };
24
+ return yield response.json();
25
+ });
17
26
  exports.verifyPublicKey = verifyPublicKey;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { CountryCode } from 'react-native-country-picker-modal';
3
+ interface CountryDropdownProps {
4
+ value: string;
5
+ onChange: (country: string, countryCode?: CountryCode) => void;
6
+ withFlag?: boolean;
7
+ withCallingCode?: boolean;
8
+ withCountryNameButton?: boolean;
9
+ withAlphaFilter?: boolean;
10
+ withFilter?: boolean;
11
+ placeholder?: string;
12
+ label?: string;
13
+ error?: string;
14
+ disabled?: boolean;
15
+ }
16
+ declare const CountryDropdown: React.FC<CountryDropdownProps>;
17
+ export default CountryDropdown;
@@ -54,7 +54,7 @@ const CountryDropdown = ({ value, onChange, withFlag = true, withCallingCode = f
54
54
  return <react_native_1.Text style={styles.placeholder}>{placeholder}</react_native_1.Text>;
55
55
  }
56
56
  return (<react_native_1.View style={styles.selectedCountry}>
57
- {selectedCountry?.cca2 && withFlag && (<react_native_country_picker_modal_1.default countryCode={selectedCountry.cca2} withFlag={true} withCountryNameButton={false} withCallingCode={false} withFilter={false} withAlphaFilter={false} visible={false}/>)}
57
+ {(selectedCountry === null || selectedCountry === void 0 ? void 0 : selectedCountry.cca2) && withFlag && (<react_native_country_picker_modal_1.default countryCode={selectedCountry.cca2} withFlag={true} withCountryNameButton={false} withCallingCode={false} withFilter={false} withAlphaFilter={false} visible={false}/>)}
58
58
  <react_native_1.Text style={styles.selectedCountryName} numberOfLines={1}>
59
59
  {value}
60
60
  </react_native_1.Text>
@@ -75,7 +75,7 @@ const CountryDropdown = ({ value, onChange, withFlag = true, withCallingCode = f
75
75
 
76
76
  {error ? <react_native_1.Text style={styles.errorText}>{error}</react_native_1.Text> : null}
77
77
 
78
- <react_native_country_picker_modal_1.default countryCode={(selectedCountry?.cca2 || 'US')} withFlag={withFlag} withCallingCode={withCallingCode} withCountryNameButton={withCountryNameButton} withAlphaFilter={withAlphaFilter} withFilter={withFilter} withEmoji={true} withModal={true} visible={modalVisible} onSelect={onSelect} onClose={() => setModalVisible(false)} containerButtonStyle={styles.hiddenPicker} preferredCountries={['IN', 'US', 'GB', 'CA', 'AU', 'SG', 'AE']} modalProps={{
78
+ <react_native_country_picker_modal_1.default countryCode={((selectedCountry === null || selectedCountry === void 0 ? void 0 : selectedCountry.cca2) || 'US')} withFlag={withFlag} withCallingCode={withCallingCode} withCountryNameButton={withCountryNameButton} withAlphaFilter={withAlphaFilter} withFilter={withFilter} withEmoji={true} withModal={true} visible={modalVisible} onSelect={onSelect} onClose={() => setModalVisible(false)} containerButtonStyle={styles.hiddenPicker} preferredCountries={['IN', 'US', 'GB', 'CA', 'AU', 'SG', 'AE']} modalProps={{
79
79
  animationType: 'slide',
80
80
  presentationStyle: react_native_1.Platform.OS === 'ios' ? 'pageSheet' : 'overFullScreen',
81
81
  }}/>
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { Mode } from '../../types/sellertypes';
3
+ interface FileUploaderProps {
4
+ label: string;
5
+ required?: boolean;
6
+ description?: string;
7
+ icon?: string;
8
+ value?: string;
9
+ onUpload: (file: any) => void;
10
+ onRemove: () => void;
11
+ uploading?: boolean;
12
+ mode?: Mode;
13
+ accept?: string;
14
+ }
15
+ declare const FileUploader: React.FC<FileUploaderProps>;
16
+ export default FileUploader;
@@ -33,6 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  return result;
34
34
  };
35
35
  })();
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
36
45
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
47
  };
@@ -42,14 +51,14 @@ const react_native_1 = require("react-native");
42
51
  const react_native_paper_1 = require("react-native-paper");
43
52
  const ImagePicker = __importStar(require("expo-image-picker"));
44
53
  const FileUploader = ({ label, required = false, description, value, onUpload, onRemove, uploading = false, mode = 'test', accept = 'image/*', }) => {
45
- const pickImage = async () => {
54
+ const pickImage = () => __awaiter(void 0, void 0, void 0, function* () {
46
55
  try {
47
- const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
56
+ const { status } = yield ImagePicker.requestMediaLibraryPermissionsAsync();
48
57
  if (status !== 'granted') {
49
58
  react_native_1.Alert.alert('Permission needed', 'Please grant camera roll permissions');
50
59
  return;
51
60
  }
52
- const result = await ImagePicker.launchImageLibraryAsync({
61
+ const result = yield ImagePicker.launchImageLibraryAsync({
53
62
  mediaTypes: ImagePicker.MediaTypeOptions.Images,
54
63
  allowsEditing: true,
55
64
  aspect: [4, 3],
@@ -62,15 +71,15 @@ const FileUploader = ({ label, required = false, description, value, onUpload, o
62
71
  catch (error) {
63
72
  react_native_1.Alert.alert('Error', 'Failed to pick image');
64
73
  }
65
- };
66
- const takePhoto = async () => {
74
+ });
75
+ const takePhoto = () => __awaiter(void 0, void 0, void 0, function* () {
67
76
  try {
68
- const { status } = await ImagePicker.requestCameraPermissionsAsync();
77
+ const { status } = yield ImagePicker.requestCameraPermissionsAsync();
69
78
  if (status !== 'granted') {
70
79
  react_native_1.Alert.alert('Permission needed', 'Please grant camera permissions');
71
80
  return;
72
81
  }
73
- const result = await ImagePicker.launchCameraAsync({
82
+ const result = yield ImagePicker.launchCameraAsync({
74
83
  allowsEditing: true,
75
84
  aspect: [4, 3],
76
85
  quality: 0.8,
@@ -82,7 +91,7 @@ const FileUploader = ({ label, required = false, description, value, onUpload, o
82
91
  catch (error) {
83
92
  react_native_1.Alert.alert('Error', 'Failed to take photo');
84
93
  }
85
- };
94
+ });
86
95
  const showOptions = () => {
87
96
  react_native_1.Alert.alert(`Upload ${label}`, 'Choose an option', [
88
97
  { text: 'Take Photo', onPress: takePhoto },