aport-tools 4.1.28 → 4.1.29

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 CHANGED
@@ -12,6 +12,12 @@ To install the latest version of aport-tools, run the following command:
12
12
  npm i aport-tools
13
13
  ```
14
14
 
15
+ requires:
16
+
17
+ ```bash
18
+ npm i aport-themes
19
+ ```
20
+
15
21
  Happy to receive help and advice; siixsixer@gmail.com
16
22
 
17
23
  License
@@ -1,6 +1,6 @@
1
+ import { ThemeColors } from 'aport-themes';
1
2
  import React from 'react';
2
3
  import { TextProps, TextStyle } from 'react-native';
3
- import { ThemeColors } from '../styles/colors';
4
4
  interface CustomTextProps extends TextProps {
5
5
  /**
6
6
  * Content to be displayed inside the Text component.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from './theme';
2
1
  export * from './buttons';
3
2
  export * from './cards';
4
3
  export * from './fonts';
package/dist/index.esm.js CHANGED
@@ -1,7 +1,6 @@
1
- /*! aport-tools v4.1.28 | ISC */
2
- import React, { createContext, useState, useEffect, useContext, useMemo } from 'react';
3
- import { Appearance, StyleSheet, View, Text as Text$1, Switch, TextInput, TouchableOpacity, ActivityIndicator, Platform } from 'react-native';
4
- import { useAsyncStorage } from '@react-native-async-storage/async-storage';
1
+ /*! aport-tools v4.1.29 | ISC */
2
+ import React, { useContext, useState, createContext, useMemo } from 'react';
3
+ import require$$1, { StyleSheet, Text as Text$1, View, TextInput, TouchableOpacity, ActivityIndicator, Platform } from 'react-native';
5
4
 
6
5
  /******************************************************************************
7
6
  Copyright (c) Microsoft Corporation.
@@ -86,283 +85,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
86
85
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
87
86
  };
88
87
 
89
- // src/styles/colors.ts
90
- var lightTheme = {
91
- primary: {
92
- hex: "#1A73E8",
93
- rgb: {
94
- r: 26,
95
- g: 115,
96
- b: 232
97
- }
98
- },
99
- secondary: {
100
- hex: "#F0F6FF",
101
- rgb: {
102
- r: 240,
103
- g: 246,
104
- b: 255
105
- }
106
- },
107
- background: {
108
- hex: "#FFFFFF",
109
- rgb: {
110
- r: 255,
111
- g: 255,
112
- b: 255
113
- }
114
- },
115
- text: {
116
- hex: "#000000",
117
- rgb: {
118
- r: 0,
119
- g: 0,
120
- b: 0
121
- }
122
- },
123
- textButton: {
124
- hex: "#FFFFFF",
125
- rgb: {
126
- r: 255,
127
- g: 255,
128
- b: 255
129
- }
130
- },
131
- error: {
132
- hex: "#FF5252",
133
- rgb: {
134
- r: 255,
135
- g: 82,
136
- b: 82
137
- }
138
- },
139
- success: {
140
- hex: "#4CAF50",
141
- rgb: {
142
- r: 76,
143
- g: 175,
144
- b: 80
145
- }
146
- },
147
- warning: {
148
- hex: "#FFC107",
149
- rgb: {
150
- r: 255,
151
- g: 193,
152
- b: 7
153
- }
154
- },
155
- body: {
156
- // Body color is the same as background in the light theme
157
- hex: '#FFFFFF',
158
- rgb: {
159
- r: 255,
160
- g: 255,
161
- b: 255
162
- }
163
- }
164
- };
165
- var darkTheme = {
166
- primary: {
167
- hex: "#BB86FC",
168
- rgb: {
169
- r: 187,
170
- g: 134,
171
- b: 252
172
- }
173
- },
174
- secondary: {
175
- hex: "#03DAC6",
176
- rgb: {
177
- r: 3,
178
- g: 218,
179
- b: 198
180
- }
181
- },
182
- background: {
183
- hex: "#121212",
184
- rgb: {
185
- r: 18,
186
- g: 18,
187
- b: 18
188
- }
189
- },
190
- text: {
191
- hex: "#FFFFFF",
192
- rgb: {
193
- r: 255,
194
- g: 255,
195
- b: 255
196
- }
197
- },
198
- textButton: {
199
- hex: "#FFFFFF",
200
- rgb: {
201
- r: 255,
202
- g: 255,
203
- b: 255
204
- }
205
- },
206
- error: {
207
- hex: "#CF6679",
208
- rgb: {
209
- r: 207,
210
- g: 102,
211
- b: 121
212
- }
213
- },
214
- success: {
215
- hex: "#03DAC6",
216
- rgb: {
217
- r: 3,
218
- g: 218,
219
- b: 198
220
- }
221
- },
222
- warning: {
223
- hex: "#FFB74D",
224
- rgb: {
225
- r: 255,
226
- g: 183,
227
- b: 77
228
- }
229
- },
230
- body: {
231
- hex: '#1C1C1E',
232
- rgb: {
233
- r: 28,
234
- g: 28,
235
- b: 30
236
- }
237
- }
238
- };
239
-
240
- /**
241
- * React context for managing theme-related data and functions.
242
- */
243
- var ThemeContext = /*#__PURE__*/createContext({
244
- theme: {
245
- colors: lightTheme
246
- },
247
- toggleTheme: function toggleTheme() {}
248
- });
249
- /**
250
- * ThemeProvider component that manages and provides theme data to its children.
251
- *
252
- * @param children - The child components that will consume the theme context.
253
- * @param initialTheme - Optional prop to set the initial theme.
254
- */
255
- var ThemeProvider = function ThemeProvider(_a) {
256
- var children = _a.children,
257
- initialTheme = _a.initialTheme;
258
- var _b = useState(null),
259
- colorScheme = _b[0],
260
- setColorScheme = _b[1];
261
- // Use useAsyncStorage hook for managing the theme storage
262
- var _c = useAsyncStorage('theme'),
263
- getItem = _c.getItem,
264
- setItem = _c.setItem;
265
- useEffect(function () {
266
- var loadTheme = function loadTheme() {
267
- return __awaiter(void 0, void 0, void 0, function () {
268
- var systemTheme;
269
- return __generator(this, function (_a) {
270
- try {
271
- // const storedTheme = await getItem();
272
- // if (storedTheme === 'dark' || storedTheme === 'light') {
273
- // setColorScheme(storedTheme);
274
- //}
275
- if (initialTheme) {
276
- setColorScheme(initialTheme);
277
- } else {
278
- systemTheme = Appearance.getColorScheme();
279
- setColorScheme(systemTheme);
280
- }
281
- } catch (error) {
282
- console.error('Failed to load theme.', error);
283
- setColorScheme(Appearance.getColorScheme());
284
- }
285
- return [2 /*return*/];
286
- });
287
- });
288
- };
289
- loadTheme();
290
- var subscription = Appearance.addChangeListener(function (_a) {
291
- var colorScheme = _a.colorScheme;
292
- if (!colorScheme) return; // Prevent setting null
293
- setColorScheme(colorScheme);
294
- });
295
- return function () {
296
- return subscription.remove();
297
- };
298
- }, [initialTheme, getItem]);
299
- var toggleTheme = function toggleTheme() {
300
- return __awaiter(void 0, void 0, void 0, function () {
301
- var newTheme, error_1;
302
- return __generator(this, function (_a) {
303
- switch (_a.label) {
304
- case 0:
305
- _a.trys.push([0, 2,, 3]);
306
- newTheme = colorScheme === 'dark' ? 'light' : 'dark';
307
- setColorScheme(newTheme);
308
- return [4 /*yield*/, setItem(newTheme)];
309
- case 1:
310
- _a.sent(); // Use setItem from useAsyncStorage
311
- return [3 /*break*/, 3];
312
- case 2:
313
- error_1 = _a.sent();
314
- console.error('Failed to toggle theme.', error_1);
315
- return [3 /*break*/, 3];
316
- case 3:
317
- return [2 /*return*/];
318
- }
319
- });
320
- });
321
- };
322
- var theme = {
323
- colors: colorScheme === 'dark' ? darkTheme : lightTheme
324
- };
325
- return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
326
- value: {
327
- theme: theme,
328
- toggleTheme: toggleTheme
329
- }
330
- }, children);
331
- };
332
-
333
- var ThemeToggle = function ThemeToggle() {
334
- var _a = useContext(ThemeContext),
335
- theme = _a.theme,
336
- toggleTheme = _a.toggleTheme;
337
- var isDarkMode = theme.colors === darkTheme;
338
- return /*#__PURE__*/React.createElement(View, {
339
- style: styles$6.container
340
- }, /*#__PURE__*/React.createElement(Text$1, {
341
- style: [styles$6.text, {
342
- color: theme.colors.text.hex
343
- }]
344
- }, "Dark Mode"), /*#__PURE__*/React.createElement(Switch, {
345
- value: isDarkMode,
346
- onValueChange: toggleTheme,
347
- trackColor: {
348
- "false": lightTheme.secondary.hex,
349
- "true": darkTheme.primary.hex
350
- },
351
- thumbColor: isDarkMode ? darkTheme.secondary.hex : lightTheme.primary.hex
352
- }));
353
- };
354
- var styles$6 = StyleSheet.create({
355
- container: {
356
- marginTop: 20,
357
- flexDirection: 'row',
358
- alignItems: 'center'
359
- },
360
- text: {
361
- marginRight: 10,
362
- fontSize: 16
363
- }
364
- });
365
-
366
88
  // src/forms/FormContext.tsx
367
89
  var FormContext = /*#__PURE__*/createContext(undefined);
368
90
  var useFormContext = function useFormContext() {
@@ -418,6 +140,302 @@ var Form = function Form(_a) {
418
140
  }, children);
419
141
  };
420
142
 
143
+ var dist = {};
144
+
145
+ /*! aport-themes v1.0.1 | ISC */
146
+
147
+ var hasRequiredDist;
148
+
149
+ function requireDist () {
150
+ if (hasRequiredDist) return dist;
151
+ hasRequiredDist = 1;
152
+
153
+ var React$1 = React;
154
+ var reactNative = require$$1;
155
+
156
+ // src/styles/colors.ts
157
+ var lightTheme = {
158
+ primary: {
159
+ hex: "#1A73E8",
160
+ rgb: {
161
+ r: 26,
162
+ g: 115,
163
+ b: 232
164
+ }
165
+ },
166
+ secondary: {
167
+ hex: "#F0F6FF",
168
+ rgb: {
169
+ r: 240,
170
+ g: 246,
171
+ b: 255
172
+ }
173
+ },
174
+ background: {
175
+ hex: "#FFFFFF",
176
+ rgb: {
177
+ r: 255,
178
+ g: 255,
179
+ b: 255
180
+ }
181
+ },
182
+ text: {
183
+ hex: "#000000",
184
+ rgb: {
185
+ r: 0,
186
+ g: 0,
187
+ b: 0
188
+ }
189
+ },
190
+ textButton: {
191
+ hex: "#FFFFFF",
192
+ rgb: {
193
+ r: 255,
194
+ g: 255,
195
+ b: 255
196
+ }
197
+ },
198
+ error: {
199
+ hex: "#FF5252",
200
+ rgb: {
201
+ r: 255,
202
+ g: 82,
203
+ b: 82
204
+ }
205
+ },
206
+ success: {
207
+ hex: "#4CAF50",
208
+ rgb: {
209
+ r: 76,
210
+ g: 175,
211
+ b: 80
212
+ }
213
+ },
214
+ warning: {
215
+ hex: "#FFC107",
216
+ rgb: {
217
+ r: 255,
218
+ g: 193,
219
+ b: 7
220
+ }
221
+ },
222
+ body: {
223
+ hex: '#F5F5F5',
224
+ rgb: {
225
+ r: 245,
226
+ g: 245,
227
+ b: 245
228
+ }
229
+ },
230
+ placeHolder: {
231
+ hex: '#A8A8A8',
232
+ rgb: {
233
+ r: 168,
234
+ g: 168,
235
+ b: 168
236
+ }
237
+ }
238
+ };
239
+ var darkTheme = {
240
+ primary: {
241
+ hex: "#BB86FC",
242
+ rgb: {
243
+ r: 187,
244
+ g: 134,
245
+ b: 252
246
+ }
247
+ },
248
+ secondary: {
249
+ hex: "#03DAC6",
250
+ rgb: {
251
+ r: 3,
252
+ g: 218,
253
+ b: 198
254
+ }
255
+ },
256
+ background: {
257
+ hex: "#121212",
258
+ rgb: {
259
+ r: 18,
260
+ g: 18,
261
+ b: 18
262
+ }
263
+ },
264
+ text: {
265
+ hex: "#FFFFFF",
266
+ rgb: {
267
+ r: 255,
268
+ g: 255,
269
+ b: 255
270
+ }
271
+ },
272
+ textButton: {
273
+ hex: "#FFFFFF",
274
+ rgb: {
275
+ r: 255,
276
+ g: 255,
277
+ b: 255
278
+ }
279
+ },
280
+ error: {
281
+ hex: "#CF6679",
282
+ rgb: {
283
+ r: 207,
284
+ g: 102,
285
+ b: 121
286
+ }
287
+ },
288
+ success: {
289
+ hex: "#03DAC6",
290
+ rgb: {
291
+ r: 3,
292
+ g: 218,
293
+ b: 198
294
+ }
295
+ },
296
+ warning: {
297
+ hex: "#FFB74D",
298
+ rgb: {
299
+ r: 255,
300
+ g: 183,
301
+ b: 77
302
+ }
303
+ },
304
+ body: {
305
+ hex: '#1C1C1E',
306
+ rgb: {
307
+ r: 28,
308
+ g: 28,
309
+ b: 30
310
+ }
311
+ },
312
+ placeHolder: {
313
+ hex: '#6C6C6E',
314
+ rgb: {
315
+ r: 108,
316
+ g: 108,
317
+ b: 110
318
+ }
319
+ }
320
+ };
321
+
322
+ // Utility to detect if running on React Native
323
+ var isReactNative = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
324
+ // Platform-specific imports
325
+ var Appearance = isReactNative ? require$$1.Appearance : null;
326
+ /**
327
+ * React context for managing theme-related data and functions.
328
+ */
329
+ var ThemeContext = /*#__PURE__*/React$1.createContext({
330
+ theme: {
331
+ colors: lightTheme
332
+ },
333
+ toggleTheme: function toggleTheme() {}
334
+ });
335
+ /**
336
+ * ThemeProvider component that manages and provides theme data to its children.
337
+ *
338
+ * @param children - The child components that will consume the theme context.
339
+ * @param initialTheme - Optional prop to set the initial theme.
340
+ */
341
+ var ThemeProvider = function ThemeProvider(_a) {
342
+ var children = _a.children,
343
+ initialTheme = _a.initialTheme;
344
+ var _b = React$1.useState(initialTheme || null),
345
+ colorScheme = _b[0],
346
+ setColorScheme = _b[1];
347
+ React$1.useEffect(function () {
348
+ var loadTheme = function loadTheme() {
349
+ if (initialTheme) {
350
+ setColorScheme(initialTheme);
351
+ } else {
352
+ if (isReactNative) {
353
+ var systemTheme = Appearance.getColorScheme();
354
+ setColorScheme(systemTheme);
355
+ } else {
356
+ var systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
357
+ setColorScheme(systemTheme);
358
+ }
359
+ }
360
+ };
361
+ loadTheme();
362
+ if (isReactNative) {
363
+ var subscription_1 = Appearance.addChangeListener(function (_a) {
364
+ var colorScheme = _a.colorScheme;
365
+ setColorScheme(colorScheme);
366
+ });
367
+ return function () {
368
+ return subscription_1.remove();
369
+ };
370
+ } else {
371
+ var mediaQuery_1 = window.matchMedia('(prefers-color-scheme: dark)');
372
+ var mediaChangeHandler_1 = function mediaChangeHandler_1(e) {
373
+ setColorScheme(e.matches ? 'dark' : 'light');
374
+ };
375
+ mediaQuery_1.addEventListener('change', mediaChangeHandler_1);
376
+ return function () {
377
+ return mediaQuery_1.removeEventListener('change', mediaChangeHandler_1);
378
+ };
379
+ }
380
+ }, [initialTheme]);
381
+ var toggleTheme = function toggleTheme() {
382
+ setColorScheme(function (prevScheme) {
383
+ return prevScheme === 'dark' ? 'light' : 'dark';
384
+ });
385
+ };
386
+ var theme = {
387
+ colors: colorScheme === 'dark' ? darkTheme : lightTheme
388
+ };
389
+ return /*#__PURE__*/React$1.createElement(ThemeContext.Provider, {
390
+ value: {
391
+ theme: theme,
392
+ toggleTheme: toggleTheme
393
+ }
394
+ }, children);
395
+ };
396
+
397
+ var ThemeToggle = function ThemeToggle() {
398
+ var _a = React$1.useContext(ThemeContext),
399
+ theme = _a.theme,
400
+ toggleTheme = _a.toggleTheme;
401
+ var isDarkMode = theme.colors === darkTheme;
402
+ return /*#__PURE__*/React$1.createElement(reactNative.View, {
403
+ style: styles.container
404
+ }, /*#__PURE__*/React$1.createElement(reactNative.Text, {
405
+ style: [styles.text, {
406
+ color: theme.colors.text.hex
407
+ }]
408
+ }, "Dark Mode"), /*#__PURE__*/React$1.createElement(reactNative.Switch, {
409
+ value: isDarkMode,
410
+ onValueChange: toggleTheme,
411
+ trackColor: {
412
+ "false": lightTheme.secondary.hex,
413
+ "true": darkTheme.primary.hex
414
+ },
415
+ thumbColor: isDarkMode ? darkTheme.secondary.hex : lightTheme.primary.hex
416
+ }));
417
+ };
418
+ var styles = reactNative.StyleSheet.create({
419
+ container: {
420
+ marginTop: 20,
421
+ flexDirection: 'row',
422
+ alignItems: 'center'
423
+ },
424
+ text: {
425
+ marginRight: 10,
426
+ fontSize: 16
427
+ }
428
+ });
429
+
430
+ dist.ThemeContext = ThemeContext;
431
+ dist.ThemeProvider = ThemeProvider;
432
+ dist.ThemeToggle = ThemeToggle;
433
+
434
+ return dist;
435
+ }
436
+
437
+ var distExports = requireDist();
438
+
421
439
  // src/fonts/Text.tsx
422
440
  /**
423
441
  * A dynamic Text component that supports HTML-like formatting.
@@ -450,7 +468,7 @@ var Text = function Text(_a) {
450
468
  _j = _a.h,
451
469
  h = _j === void 0 ? 0 : _j,
452
470
  style = _a.style;
453
- var theme = useContext(ThemeContext).theme;
471
+ var theme = useContext(distExports.ThemeContext).theme;
454
472
  var colors = theme.colors;
455
473
  // Calculate header size based on 'h' prop
456
474
  var fontSize = size;
@@ -485,7 +503,7 @@ StyleSheet.create({
485
503
  // src/forms/ErrorList.tsx
486
504
  var ErrorList = function ErrorList(_a) {
487
505
  var errors = _a.errors;
488
- var theme = useContext(ThemeContext).theme;
506
+ var theme = useContext(distExports.ThemeContext).theme;
489
507
  var colors = theme.colors;
490
508
  return /*#__PURE__*/React.createElement(View, {
491
509
  style: styles$5.container
@@ -548,7 +566,7 @@ var Input = function Input(_a) {
548
566
  formValues = _b.formValues,
549
567
  setFormValue = _b.setFormValue,
550
568
  formErrors = _b.errors;
551
- var theme = useContext(ThemeContext).theme;
569
+ var theme = useContext(distExports.ThemeContext).theme;
552
570
  var colors = theme.colors;
553
571
  /**
554
572
  * Handles text changes in the input field, applying formatting based on the inputType.
@@ -596,7 +614,7 @@ var Input = function Input(_a) {
596
614
  value: formValues[name] || "",
597
615
  onChangeText: handleChange,
598
616
  placeholder: label,
599
- placeholderTextColor: colors.text.hex
617
+ placeholderTextColor: colors.placeHolder.hex
600
618
  }, rest)), formErrors[name] && formErrors[name].length > 0 && (/*#__PURE__*/React.createElement(ErrorList, {
601
619
  errors: formErrors[name]
602
620
  })));
@@ -675,7 +693,7 @@ var styles$3 = StyleSheet.create({
675
693
  var Label = function Label(_a) {
676
694
  var text = _a.text,
677
695
  style = _a.style;
678
- var theme = useContext(ThemeContext).theme;
696
+ var theme = useContext(distExports.ThemeContext).theme;
679
697
  var colors = theme.colors;
680
698
  return /*#__PURE__*/React.createElement(Text, {
681
699
  style: [styles$2.label, style, {
@@ -750,7 +768,7 @@ var Button = function Button(_a) {
750
768
  _g = _a.loading,
751
769
  loading = _g === void 0 ? false : _g,
752
770
  onPress = _a.onPress;
753
- var theme = useContext(ThemeContext).theme;
771
+ var theme = useContext(distExports.ThemeContext).theme;
754
772
  var colors = theme.colors;
755
773
  var handleSubmit = useFormContext().handleSubmit;
756
774
  var computedStyles = useMemo(function () {
@@ -761,7 +779,9 @@ var Button = function Button(_a) {
761
779
  }, (disabled || loading) && styles$1.disabled]);
762
780
  }, [type, disabled, loading, rounded, borderRadius, isFullWidth, colors]);
763
781
  var textColor = useMemo(function () {
764
- return {
782
+ return type === "cancel" ? {
783
+ color: colors.text.hex
784
+ } : {
765
785
  color: colors.textButton.hex
766
786
  };
767
787
  }, [type, colors]);
@@ -824,7 +844,7 @@ var Card = function Card(_a) {
824
844
  elevation = _d === void 0 ? 4 : _d,
825
845
  _e = _a.shadowProps,
826
846
  shadowProps = _e === void 0 ? {} : _e;
827
- var theme = useContext(ThemeContext).theme;
847
+ var theme = useContext(distExports.ThemeContext).theme;
828
848
  var colors = theme.colors;
829
849
  // Animation state for pressable effect
830
850
  // Default shadow styles (improved platform-specific handling)
@@ -845,7 +865,7 @@ var Card = function Card(_a) {
845
865
  });
846
866
  var cardStyles = [styles.container, {
847
867
  borderRadius: borderRadius,
848
- backgroundColor: colors.body.hex
868
+ backgroundColor: colors.background.hex
849
869
  }, defaultShadow,
850
870
  // Dynamic shadows based on platform
851
871
  style // External styles
@@ -866,5 +886,5 @@ var styles = StyleSheet.create({
866
886
  }
867
887
  });
868
888
 
869
- export { Button, Card, ErrorList, Form, Input, Label, Text, TextArea, ThemeContext, ThemeProvider, ThemeToggle, useFormContext };
889
+ export { Button, Card, ErrorList, Form, Input, Label, Text, TextArea, useFormContext };
870
890
  //# sourceMappingURL=index.esm.js.map