@codeleap/mobile 2.3.27 → 2.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.
@@ -3,12 +3,15 @@ import { ComponentVariants, FormTypes } from '@codeleap/common';
3
3
  import { ComponentPropsWithoutRef } from 'react';
4
4
  import { Image as NativeImage, ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';
5
5
  import { FastImage } from '../../modules/fastImage';
6
- import { ImageStyles } from './styles';
6
+ import { ImageComposition, ImageStyles } from './styles';
7
+ import { LoadingOverlayProps } from '../LoadingOverlay';
8
+ import { StylesOf } from '../../types';
7
9
  export * from './styles';
8
10
  declare type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>;
9
11
  export declare type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
10
12
  variants?: ComponentVariants<typeof ImageStyles>['variants'];
11
13
  fast?: boolean;
14
+ styles?: StylesOf<ImageComposition>;
12
15
  style?: StyleProp<ImageStyle | TextStyle | ViewStyle>;
13
16
  source: (NativeImageProps['source'] & {
14
17
  priority?: keyof typeof FastImage.priority;
@@ -16,6 +19,7 @@ export declare type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
16
19
  resizeMode?: keyof typeof FastImage.resizeMode;
17
20
  spotlight?: string;
18
21
  maintainAspectRatioFrom?: 'width' | 'height' | 'none';
22
+ withLoadingOverlay?: boolean | React.FC<LoadingOverlayProps>;
19
23
  };
20
24
  export declare const ImageComponent: React.FC<ImageProps>;
21
25
  export declare const Image: React.NamedExoticComponent<ImageProps>;
@@ -41,10 +41,12 @@ var fastImage_1 = require("../../modules/fastImage");
41
41
  var Spotlight_1 = require("../ImageView/Spotlight");
42
42
  var Touchable_1 = require("../Touchable");
43
43
  var utils_1 = require("../../utils");
44
+ var LoadingOverlay_1 = require("../LoadingOverlay");
44
45
  __exportStar(require("./styles"), exports);
45
46
  var ImageComponent = function (props) {
46
- var variants = props.variants, style = props.style, _a = props.fast, fast = _a === void 0 ? true : _a, _b = props.spotlight, spotlight = _b === void 0 ? null : _b, _c = props.resizeMode, resizeMode = _c === void 0 ? 'contain' : _c, source = props.source, _d = props.maintainAspectRatioFrom, maintainAspectRatioFrom = _d === void 0 ? 'height' : _d, imageProps = __rest(props, ["variants", "style", "fast", "spotlight", "resizeMode", "source", "maintainAspectRatioFrom"]);
47
- var variantStyles = (0, common_1.useDefaultComponentStyle)('u:Image', { variants: variants });
47
+ var variants = props.variants, style = props.style, _a = props.styles, componentStyleSheet = _a === void 0 ? {} : _a, _b = props.fast, fast = _b === void 0 ? true : _b, _c = props.spotlight, spotlight = _c === void 0 ? null : _c, _d = props.resizeMode, resizeMode = _d === void 0 ? 'contain' : _d, source = props.source, _e = props.withLoadingOverlay, withLoadingOverlay = _e === void 0 ? false : _e, _f = props.maintainAspectRatioFrom, maintainAspectRatioFrom = _f === void 0 ? 'height' : _f, imageProps = __rest(props, ["variants", "style", "styles", "fast", "spotlight", "resizeMode", "source", "withLoadingOverlay", "maintainAspectRatioFrom"]);
48
+ var variantStyles = (0, common_1.useDefaultComponentStyle)('u:Image', { variants: variants, styles: componentStyleSheet, transform: react_native_1.StyleSheet.flatten });
49
+ var _g = React.useState(false), loading = _g[0], setLoading = _g[1];
48
50
  var styles = react_native_1.StyleSheet.flatten([variantStyles.wrapper, style]);
49
51
  var imSource = source;
50
52
  if ((0, utils_1.isFile)(imSource)) {
@@ -82,17 +84,25 @@ var ImageComponent = function (props) {
82
84
  return null;
83
85
  }
84
86
  }, [maintainAspectRatioFrom, imSource]);
87
+ var loadProps = {
88
+ onLoadStart: function () { return setLoading(true); }, onLoadEnd: function () { return setLoading(false); }
89
+ };
90
+ var Loading = common_1.TypeGuards.isFunction(withLoadingOverlay) ? withLoadingOverlay : LoadingOverlay_1.LoadingOverlay;
91
+ var showLoading = !!withLoadingOverlay;
92
+ var overlayStyle = React.useMemo(function () { return (0, common_1.getNestedStylesByKey)('overlay', variantStyles); }, [variantStyles]);
93
+ var loadingElement = showLoading ? (<Loading visible={loading} styles={overlayStyle}/>) : null;
85
94
  if (fast) {
86
95
  return (<Wrapper {...wrapperProps}>
87
96
 
88
97
  <fastImage_1.FastImage style={[aspectRatioStyle, styles]}
89
98
  // @ts-ignore
90
- tintColor={styles === null || styles === void 0 ? void 0 : styles.tintColor} source={imSource} resizeMode={fastImage_1.FastImage.resizeMode[resizeMode || 'contain']} {...imageProps}/>
99
+ tintColor={styles === null || styles === void 0 ? void 0 : styles.tintColor} source={imSource} resizeMode={fastImage_1.FastImage.resizeMode[resizeMode || 'contain']} {...loadProps} {...imageProps}/>
100
+ {loadingElement}
91
101
  </Wrapper>);
92
102
  }
93
103
  return <Wrapper {...wrapperProps}>
94
- <react_native_1.Image style={[aspectRatioStyle, styles]} resizeMode={resizeMode} source={imSource} {...imageProps}/>
95
-
104
+ <react_native_1.Image style={[aspectRatioStyle, styles]} resizeMode={resizeMode} source={imSource} {...imageProps} {...loadProps}/>
105
+ {loadingElement}
96
106
  </Wrapper>;
97
107
  };
98
108
  exports.ImageComponent = ImageComponent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Image/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Image/index.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- export declare type ImageComposition = 'wrapper' | 'touchable';
1
+ import { LoadingOverlayComposition } from '../LoadingOverlay/styles';
2
+ export declare type ImageComposition = 'wrapper' | 'touchable' | `overlay${Capitalize<LoadingOverlayComposition>}`;
2
3
  export declare const ImageStyles: {
3
4
  default: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<ImageComposition, any>>;
4
5
  round: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<ImageComposition, any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/Image/styles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAA8E;AAG9E,IAAM,gBAAgB,GAAG,IAAA,oCAA2B,GAAoB,CAAA;AAExE,IAAM,OAAO,GAAG,IAAA,uBAAc,EAAC,UAAC,MAAM,IAAK,OAAA,gBAAgB,CAAC,cAAM,OAAA,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAxC,CAAwC,CAAC,EAAhE,CAAgE,CAC1G,CAAA;AAEY,QAAA,WAAW,yBACnB,OAAO,KACV,OAAO,EAAE,gBAAgB,CAAC,cAAM,OAAA,CAAC;QAC/B,OAAO,EAAE,EAAE;KACZ,CAAC,EAF8B,CAE9B,CAAC,EAEH,KAAK,EAAE,gBAAgB,CAAC,cAAM,OAAA,CAAC;QAC7B,OAAO,EAAE;YACP,YAAY,EAAE,GAAG;SAClB;KACF,CAAC,EAJ4B,CAI5B,CAAC,IACJ"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/Image/styles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAA8E;AAI9E,IAAM,gBAAgB,GAAG,IAAA,oCAA2B,GAAoB,CAAA;AAExE,IAAM,OAAO,GAAG,IAAA,uBAAc,EAAC,UAAC,MAAM,IAAK,OAAA,gBAAgB,CAAC,cAAM,OAAA,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAxC,CAAwC,CAAC,EAAhE,CAAgE,CAC1G,CAAA;AAEY,QAAA,WAAW,yBACnB,OAAO,KACV,OAAO,EAAE,gBAAgB,CAAC,cAAM,OAAA,CAAC;QAC/B,OAAO,EAAE,EAAE;KACZ,CAAC,EAF8B,CAE9B,CAAC,EAEH,KAAK,EAAE,gBAAgB,CAAC,cAAM,OAAA,CAAC;QAC7B,OAAO,EAAE;YACP,YAAY,EAAE,GAAG;SAClB;KACF,CAAC,EAJ4B,CAI5B,CAAC,IACJ"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ComponentVariants } from "@codeleap/common";
3
+ import { StylesOf } from "../../types";
4
+ import { LoadingOverlayComposition, LoadingOverlayStyles } from "./styles";
5
+ export * from './styles';
6
+ export declare type LoadingOverlayProps = React.PropsWithChildren<{
7
+ variants?: ComponentVariants<typeof LoadingOverlayStyles>['variants'];
8
+ styles?: StylesOf<LoadingOverlayComposition>;
9
+ visible?: boolean;
10
+ }>;
11
+ export declare const LoadingOverlay: (props: LoadingOverlayProps) => JSX.Element;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.LoadingOverlay = void 0;
26
+ var react_1 = __importStar(require("react"));
27
+ var common_1 = require("@codeleap/common");
28
+ var moti_1 = require("moti");
29
+ var react_native_1 = require("react-native");
30
+ var ActivityIndicator_1 = require("../ActivityIndicator");
31
+ var View_1 = require("../View");
32
+ var utils_1 = require("../../utils");
33
+ __exportStar(require("./styles"), exports);
34
+ var LoadingOverlay = function (props) {
35
+ var children = props.children, styles = props.styles, variants = props.variants, visible = props.visible;
36
+ var variantStyles = (0, common_1.useDefaultComponentStyle)('u:LoadingOverlay', {
37
+ variants: variants,
38
+ rootElement: 'wrapper',
39
+ styles: styles,
40
+ transform: react_native_1.StyleSheet.flatten,
41
+ });
42
+ var loaderStyles = (0, common_1.useMemo)(function () { return (0, common_1.getNestedStylesByKey)('loader', variantStyles); }, [variantStyles]);
43
+ var wrapperAnimationStates = (0, utils_1.useStaticAnimationStyles)(variantStyles, ['wrapper:hidden', 'wrapper:visible']);
44
+ var wrapperAnimation = (0, moti_1.useDynamicAnimation)(function () {
45
+ return visible ? wrapperAnimationStates["wrapper:visible"] : wrapperAnimationStates["wrapper:hidden"];
46
+ });
47
+ (0, common_1.onUpdate)(function () {
48
+ wrapperAnimation.animateTo(visible ? wrapperAnimationStates["wrapper:visible"] : wrapperAnimationStates["wrapper:hidden"]);
49
+ }, [visible]);
50
+ var transition = (0, react_1.useRef)(null);
51
+ if (!transition.current) {
52
+ transition.current = JSON.parse(JSON.stringify(variantStyles["wrapper:transition"]));
53
+ }
54
+ return <View_1.View style={variantStyles.wrapper} animated state={wrapperAnimation} transition={transition.current}>
55
+ <ActivityIndicator_1.ActivityIndicator styles={loaderStyles}/>
56
+ {children}
57
+ </View_1.View>;
58
+ };
59
+ exports.LoadingOverlay = LoadingOverlay;
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/LoadingOverlay/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAqC;AACrC,2CAAuH;AACvH,6BAA0C;AAC1C,6CAAyC;AAEzC,0DAAwD;AACxD,gCAA8B;AAE9B,qCAAoD;AAEpD,2CAAwB;AASjB,IAAM,cAAc,GAAG,UAAC,KAA0B;IAEjD,IAAA,QAAQ,GAIR,KAAK,SAJG,EACR,MAAM,GAGN,KAAK,OAHC,EACN,QAAQ,GAER,KAAK,SAFG,EACR,OAAO,GACP,KAAK,QADE,CACF;IAET,IAAM,aAAa,GAAG,IAAA,iCAAwB,EAAkD,kBAAkB,EAAE;QAChH,QAAQ,UAAA;QACR,WAAW,EAAE,SAAS;QACtB,MAAM,QAAA;QACN,SAAS,EAAE,yBAAU,CAAC,OAAO;KAChC,CAAC,CAAA;IAGF,IAAM,YAAY,GAAG,IAAA,gBAAO,EAAC,cAAM,OAAA,IAAA,6BAAoB,EAAC,QAAQ,EAAE,aAAa,CAAC,EAA7C,CAA6C,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAElG,IAAM,sBAAsB,GAAG,IAAA,gCAAwB,EAAC,aAAa,EAAE,CAAC,gBAAgB,EAAC,iBAAiB,CAAC,CAAC,CAAA;IAC5G,IAAM,gBAAgB,GAAG,IAAA,0BAAmB,EAAC;QACzC,OAAO,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;IAEF,IAAA,iBAAQ,EAAC;QACL,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC9H,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,IAAM,UAAU,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAA;IAC/B,IAAG,CAAC,UAAU,CAAC,OAAO,EAAC;QACnB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;KACvF;IACD,OAAO,CAAC,WAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CACxG;QAAA,CAAC,qCAAiB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EACxC;QAAA,CAAC,QAAQ,CACb;IAAA,EAAE,WAAI,CAAC,CAAA;AACX,CAAC,CAAA;AAnCY,QAAA,cAAc,kBAmC1B"}
@@ -0,0 +1,7 @@
1
+ import { ActivityIndicatorComposition } from "../ActivityIndicator";
2
+ declare type WrapperStates = 'hidden' | 'visible';
3
+ export declare type LoadingOverlayComposition = 'wrapper' | `wrapper:${WrapperStates}` | 'wrapper:transition' | `loader${Capitalize<ActivityIndicatorComposition>}`;
4
+ export declare const LoadingOverlayStyles: {
5
+ default: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<LoadingOverlayComposition, any>>;
6
+ };
7
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.LoadingOverlayStyles = void 0;
15
+ var common_1 = require("@codeleap/common");
16
+ var createLoadingOverlayStyle = (0, common_1.createDefaultVariantFactory)();
17
+ exports.LoadingOverlayStyles = {
18
+ default: createLoadingOverlayStyle(function (theme) { return ({
19
+ wrapper: __assign(__assign(__assign(__assign({}, theme.presets.center), theme.presets.whole), theme.presets.absolute), { backgroundColor: theme.colors.background }),
20
+ 'wrapper:visible': {
21
+ opacity: 1
22
+ },
23
+ 'wrapper:hidden': {
24
+ opacity: 0
25
+ },
26
+ 'wrapper:transition': {
27
+ opacity: {
28
+ duration: 900,
29
+ type: 'timing',
30
+ },
31
+ }
32
+ }); })
33
+ };
34
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/LoadingOverlay/styles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAA0E;AAO1E,IAAM,yBAAyB,GAAG,IAAA,oCAA2B,GAA6B,CAAA;AAE7E,QAAA,oBAAoB,GAAG;IAChC,OAAO,EAAE,yBAAyB,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC;QACzC,OAAO,0CACA,KAAK,CAAC,OAAO,CAAC,MAAM,GACpB,KAAK,CAAC,OAAO,CAAC,KAAK,GACnB,KAAK,CAAC,OAAO,CAAC,QAAQ,KACzB,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,GAC3C;QACD,iBAAiB,EAAE;YACf,OAAO,EAAE,CAAC;SACb;QACD,gBAAgB,EAAE;YACd,OAAO,EAAE,CAAC;SACb;QACD,oBAAoB,EAAE;YAClB,OAAO,EAAE;gBACL,QAAQ,EAAE,GAAG;gBACb,IAAI,EAAE,QAAQ;aACjB;SAEJ;KACJ,CAAC,EApB0C,CAoB1C,CAAC;CACN,CAAA"}
@@ -32,5 +32,6 @@ export * from './MultiSelect';
32
32
  export * from './AutoComplete';
33
33
  export * from './Grid';
34
34
  export * from './InputLabel';
35
+ export * from './LoadingOverlay';
35
36
  export * from './ActionIcon';
36
37
  export * from './defaultStyles';
@@ -44,6 +44,7 @@ __exportStar(require("./MultiSelect"), exports);
44
44
  __exportStar(require("./AutoComplete"), exports);
45
45
  __exportStar(require("./Grid"), exports);
46
46
  __exportStar(require("./InputLabel"), exports);
47
+ __exportStar(require("./LoadingOverlay"), exports);
47
48
  __exportStar(require("./ActionIcon"), exports);
48
49
  __exportStar(require("./defaultStyles"), exports);
49
50
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,6CAA0B;AAC1B,yCAAsB;AACtB,8CAA2B;AAC3B,yCAAsB;AACtB,0CAAuB;AACvB,6CAA0B;AAC1B,8CAA2B;AAC3B,+CAA4B;AAC5B,2CAAwB;AACxB,gDAA6B;AAC7B,6CAA0B;AAC1B,2CAAwB;AACxB,8CAA2B;AAC3B,2CAAwB;AACxB,qDAAkC;AAClC,+CAA4B;AAC5B,2CAAwB;AACxB,yCAAsB;AACtB,sDAAmC;AACnC,2CAAwB;AACxB,gDAA6B;AAC7B,0CAAuB;AACvB,6CAA0B;AAC1B,8CAA2B;AAC3B,+CAA4B;AAC5B,0CAAuB;AACvB,qDAAkC;AAClC,6CAA0B;AAC1B,2CAAwB;AACxB,gDAA6B;AAC7B,iDAA8B;AAC9B,yCAAsB;AACtB,+CAA4B;AAC5B,+CAA4B;AAI5B,kDAA+B"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsB;AACtB,6CAA0B;AAC1B,yCAAsB;AACtB,8CAA2B;AAC3B,yCAAsB;AACtB,0CAAuB;AACvB,6CAA0B;AAC1B,8CAA2B;AAC3B,+CAA4B;AAC5B,2CAAwB;AACxB,gDAA6B;AAC7B,6CAA0B;AAC1B,2CAAwB;AACxB,8CAA2B;AAC3B,2CAAwB;AACxB,qDAAkC;AAClC,+CAA4B;AAC5B,2CAAwB;AACxB,yCAAsB;AACtB,sDAAmC;AACnC,2CAAwB;AACxB,gDAA6B;AAC7B,0CAAuB;AACvB,6CAA0B;AAC1B,8CAA2B;AAC3B,+CAA4B;AAC5B,0CAAuB;AACvB,qDAAkC;AAClC,6CAA0B;AAC1B,2CAAwB;AACxB,gDAA6B;AAC7B,iDAA8B;AAC9B,yCAAsB;AACtB,+CAA4B;AAC5B,mDAAgC;AAChC,+CAA4B;AAI5B,kDAA+B"}
@@ -1459,6 +1459,9 @@ export declare const defaultStyles: {
1459
1459
  debBlue: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<import("./List").ListComposition, any>>;
1460
1460
  debYellow: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<import("./List").ListComposition, any>>;
1461
1461
  };
1462
+ LoadingOverlay: {
1463
+ default: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<import("./LoadingOverlay").LoadingOverlayComposition, any>>;
1464
+ };
1462
1465
  InputLabel: {
1463
1466
  default: (theme: import("@codeleap/common").ThemeColorScheme<import("@codeleap/common").AppTheme>, variant?: string) => Partial<Record<import("./InputLabel").InputLabelComposition, any>>;
1464
1467
  };
@@ -30,6 +30,7 @@ var Scroll_1 = require("./Scroll");
30
30
  var ActionIcon_1 = require("./ActionIcon");
31
31
  var Grid_1 = require("./Grid");
32
32
  var InputLabel_1 = require("./InputLabel");
33
+ var LoadingOverlay_1 = require("./LoadingOverlay");
33
34
  exports.defaultStyles = {
34
35
  View: View_1.ViewStyles,
35
36
  Icon: Icon_1.IconStyles,
@@ -60,6 +61,7 @@ exports.defaultStyles = {
60
61
  PaginationIndicator: List_1.PaginationIndicatorStyles,
61
62
  ActionIcon: ActionIcon_1.ActionIconStyles,
62
63
  Grid: Grid_1.GridStyles,
64
+ LoadingOverlay: LoadingOverlay_1.LoadingOverlayStyles,
63
65
  InputLabel: InputLabel_1.InputLabelStyles,
64
66
  };
65
67
  //# sourceMappingURL=defaultStyles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultStyles.js","sourceRoot":"","sources":["../../src/components/defaultStyles.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AACnC,+BAAmC;AACnC,yCAA6C;AAC7C,+BAAmC;AACnC,iCAAqC;AACrC,uCAA2C;AAC3C,yCAA6C;AAC7C,2CAA+C;AAC/C,mCAAuC;AACvC,mCAAuC;AACvC,yCAA6C;AAC7C,mCAAuC;AACvC,uDAA2D;AAC3D,yDAA6D;AAC7D,mCAAuC;AACvC,6CAAiD;AACjD,iCAAqC;AACrC,uDAA2D;AAC3D,uCAA2C;AAC3C,iCAAqC;AACrC,uCAA2C;AAC3C,0CAA8C;AAC9C,+BAA8D;AAC9D,+CAAmD;AACnD,6CAAiD;AACjD,mCAAuC;AACvC,2CAA+C;AAC/C,+BAAmC;AACnC,2CAA+C;AAElC,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,iBAAU;IAChB,SAAS,EAAE,2BAAe;IAC1B,IAAI,EAAE,iBAAU;IAChB,KAAK,EAAE,mBAAW;IAClB,QAAQ,EAAE,yBAAc;IACxB,SAAS,EAAE,2BAAe;IAC1B,UAAU,EAAE,6BAAgB;IAC5B,MAAM,EAAE,qBAAY;IACpB,MAAM,EAAE,qBAAY;IACpB,SAAS,EAAE,2BAAe;IAC1B,IAAI,EAAE,iBAAU;IAChB,MAAM,EAAE,qBAAY;IACpB,gBAAgB,EAAE,yCAAsB;IACxC,iBAAiB,EAAE,2CAAuB;IAC1C,MAAM,EAAE,qBAAY;IACpB,WAAW,EAAE,+BAAiB;IAC9B,KAAK,EAAE,mBAAW;IAClB,gBAAgB,EAAE,yCAAsB;IACxC,QAAQ,EAAE,yBAAc;IACxB,QAAQ,EAAE,yBAAc;IACxB,KAAK,EAAE,mBAAW;IAClB,MAAM,EAAE,qBAAY;IACpB,YAAY,EAAE,iCAAkB;IAChC,WAAW,EAAE,+BAAiB;IAC9B,MAAM,EAAE,qBAAY;IACpB,mBAAmB,EAAE,gCAAyB;IAC9C,UAAU,EAAE,6BAAgB;IAC5B,IAAI,EAAE,iBAAU;IAChB,UAAU,EAAE,6BAAgB;CAC7B,CAAA"}
1
+ {"version":3,"file":"defaultStyles.js","sourceRoot":"","sources":["../../src/components/defaultStyles.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AACnC,+BAAmC;AACnC,yCAA6C;AAC7C,+BAAmC;AACnC,iCAAqC;AACrC,uCAA2C;AAC3C,yCAA6C;AAC7C,2CAA+C;AAC/C,mCAAuC;AACvC,mCAAuC;AACvC,yCAA6C;AAC7C,mCAAuC;AACvC,uDAA2D;AAC3D,yDAA6D;AAC7D,mCAAuC;AACvC,6CAAiD;AACjD,iCAAqC;AACrC,uDAA2D;AAC3D,uCAA2C;AAC3C,iCAAqC;AACrC,uCAA2C;AAC3C,0CAA8C;AAC9C,+BAA8D;AAC9D,+CAAmD;AACnD,6CAAiD;AACjD,mCAAuC;AACvC,2CAA+C;AAC/C,+BAAmC;AACnC,2CAA+C;AAC/C,mDAAuD;AAE1C,QAAA,aAAa,GAAG;IAC3B,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,iBAAU;IAChB,SAAS,EAAE,2BAAe;IAC1B,IAAI,EAAE,iBAAU;IAChB,KAAK,EAAE,mBAAW;IAClB,QAAQ,EAAE,yBAAc;IACxB,SAAS,EAAE,2BAAe;IAC1B,UAAU,EAAE,6BAAgB;IAC5B,MAAM,EAAE,qBAAY;IACpB,MAAM,EAAE,qBAAY;IACpB,SAAS,EAAE,2BAAe;IAC1B,IAAI,EAAE,iBAAU;IAChB,MAAM,EAAE,qBAAY;IACpB,gBAAgB,EAAE,yCAAsB;IACxC,iBAAiB,EAAE,2CAAuB;IAC1C,MAAM,EAAE,qBAAY;IACpB,WAAW,EAAE,+BAAiB;IAC9B,KAAK,EAAE,mBAAW;IAClB,gBAAgB,EAAE,yCAAsB;IACxC,QAAQ,EAAE,yBAAc;IACxB,QAAQ,EAAE,yBAAc;IACxB,KAAK,EAAE,mBAAW;IAClB,MAAM,EAAE,qBAAY;IACpB,YAAY,EAAE,iCAAkB;IAChC,WAAW,EAAE,+BAAiB;IAC9B,MAAM,EAAE,qBAAY;IACpB,mBAAmB,EAAE,gCAAyB;IAC9C,UAAU,EAAE,6BAAgB;IAC5B,IAAI,EAAE,iBAAU;IAChB,cAAc,EAAE,qCAAoB;IACpC,UAAU,EAAE,6BAAgB;CAC7B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/mobile",
3
- "version": "2.3.27",
3
+ "version": "2.4.0",
4
4
  "main": "src/index.ts",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -6,6 +6,8 @@ import {
6
6
  arePropsEqual,
7
7
  FormTypes,
8
8
  TypeGuards,
9
+ useBooleanToggle,
10
+ getNestedStylesByKey,
9
11
  } from '@codeleap/common'
10
12
  import { ComponentPropsWithoutRef } from 'react'
11
13
  import {
@@ -18,16 +20,20 @@ import {
18
20
  } from 'react-native'
19
21
  import { FastImage } from '../../modules/fastImage'
20
22
  import {
23
+ ImageComposition,
21
24
  ImageStyles,
22
25
  } from './styles'
23
26
  import { useImageSpotlight } from '../ImageView/Spotlight'
24
27
  import { Touchable } from '../Touchable'
25
28
  import { isFile, toMultipartFile } from '../../utils'
29
+ import { LoadingOverlay, LoadingOverlayProps } from '../LoadingOverlay'
30
+ import { StylesOf } from '../../types'
26
31
  export * from './styles'
27
32
  type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
28
33
  export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
29
34
  variants?: ComponentVariants<typeof ImageStyles>['variants']
30
35
  fast?: boolean
36
+ styles?: StylesOf<ImageComposition>
31
37
  style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
32
38
  source:
33
39
  | (NativeImageProps['source'] & {
@@ -39,23 +45,31 @@ export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
39
45
  resizeMode?: keyof typeof FastImage.resizeMode
40
46
  spotlight?: string
41
47
  maintainAspectRatioFrom?: 'width' | 'height' | 'none'
48
+ withLoadingOverlay?: boolean | React.FC<LoadingOverlayProps>
42
49
  }
43
50
 
51
+
52
+
53
+
44
54
  export const ImageComponent: React.FC<ImageProps> = (props) => {
45
55
  const {
46
56
  variants,
47
57
  style,
58
+ styles: componentStyleSheet = {},
48
59
  fast = true,
49
60
  spotlight = null,
50
61
  resizeMode = 'contain',
51
62
  source,
63
+ withLoadingOverlay = false,
52
64
  maintainAspectRatioFrom = 'height',
53
65
  ...imageProps
54
66
  } = props
55
67
 
56
- const variantStyles = useDefaultComponentStyle<'u:Image', typeof ImageStyles>('u:Image', { variants })
68
+ const variantStyles = useDefaultComponentStyle<'u:Image', typeof ImageStyles>('u:Image', { variants, styles: componentStyleSheet,transform: StyleSheet.flatten })
69
+ const [loading, setLoading] = React.useState(false)
57
70
 
58
71
  const styles = StyleSheet.flatten([variantStyles.wrapper, style])
72
+
59
73
  let imSource = source
60
74
  if (isFile(imSource)) {
61
75
  imSource = toMultipartFile(imSource)
@@ -90,6 +104,22 @@ export const ImageComponent: React.FC<ImageProps> = (props) => {
90
104
 
91
105
  }, [maintainAspectRatioFrom, imSource])
92
106
 
107
+
108
+ const loadProps = {
109
+ onLoadStart: () => setLoading(true), onLoadEnd: () => setLoading(false)
110
+ }
111
+
112
+ const Loading = TypeGuards.isFunction(withLoadingOverlay) ? withLoadingOverlay : LoadingOverlay
113
+ const showLoading = !!withLoadingOverlay
114
+
115
+ const overlayStyle = React.useMemo(() => getNestedStylesByKey('overlay', variantStyles), [variantStyles])
116
+
117
+ const loadingElement = showLoading ? (
118
+ <Loading visible={loading} styles={overlayStyle}/>
119
+
120
+ ) : null
121
+
122
+
93
123
  if (fast) {
94
124
  return (
95
125
  <Wrapper {...wrapperProps}>
@@ -100,14 +130,23 @@ export const ImageComponent: React.FC<ImageProps> = (props) => {
100
130
  tintColor={styles?.tintColor}
101
131
  source={imSource}
102
132
  resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
133
+ {...loadProps}
103
134
  {...imageProps}
104
135
  />
136
+ {loadingElement}
105
137
  </Wrapper>
106
138
  )
107
139
  }
108
140
  return <Wrapper {...wrapperProps}>
109
- <NativeImage style={[aspectRatioStyle, styles]} resizeMode={resizeMode} source={imSource} {...(imageProps as any)} />
110
-
141
+ <NativeImage
142
+ style={[aspectRatioStyle, styles]}
143
+ resizeMode={resizeMode}
144
+ source={imSource} {...(imageProps as any)}
145
+ {...loadProps}
146
+ />
147
+ {
148
+ loadingElement
149
+ }
111
150
  </Wrapper>
112
151
  }
113
152
 
@@ -1,6 +1,7 @@
1
1
  import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+ import { LoadingOverlayComposition } from '../LoadingOverlay/styles'
2
3
 
3
- export type ImageComposition = 'wrapper' | 'touchable'
4
+ export type ImageComposition = 'wrapper' | 'touchable' | `overlay${Capitalize<LoadingOverlayComposition>}`
4
5
  const createImageStyle = createDefaultVariantFactory<ImageComposition>()
5
6
 
6
7
  const presets = includePresets((styles) => createImageStyle(() => ({ wrapper: styles, touchable: styles })),
@@ -0,0 +1,55 @@
1
+ import React, { useRef } from 'react'
2
+ import { ComponentVariants, getNestedStylesByKey, onUpdate, useDefaultComponentStyle, useMemo } from "@codeleap/common"
3
+ import { useDynamicAnimation } from "moti"
4
+ import { StyleSheet } from "react-native"
5
+ import { StylesOf } from "../../types"
6
+ import { ActivityIndicator } from "../ActivityIndicator"
7
+ import { View } from "../View"
8
+ import { LoadingOverlayComposition, LoadingOverlayStyles } from "./styles"
9
+ import {useStaticAnimationStyles} from '../../utils'
10
+
11
+ export * from './styles'
12
+
13
+ export type LoadingOverlayProps = React.PropsWithChildren<{
14
+ variants?: ComponentVariants<typeof LoadingOverlayStyles>['variants']
15
+ styles?: StylesOf<LoadingOverlayComposition>
16
+ visible?: boolean
17
+ } >
18
+
19
+
20
+ export const LoadingOverlay = (props: LoadingOverlayProps) => {
21
+ const {
22
+ children,
23
+ styles,
24
+ variants,
25
+ visible
26
+ } = props
27
+
28
+ const variantStyles = useDefaultComponentStyle<'u:LoadingOverlay', typeof LoadingOverlayStyles>('u:LoadingOverlay', {
29
+ variants,
30
+ rootElement: 'wrapper',
31
+ styles,
32
+ transform: StyleSheet.flatten,
33
+ })
34
+
35
+
36
+ const loaderStyles = useMemo(() => getNestedStylesByKey('loader', variantStyles), [variantStyles])
37
+
38
+ const wrapperAnimationStates = useStaticAnimationStyles(variantStyles, ['wrapper:hidden','wrapper:visible'])
39
+ const wrapperAnimation = useDynamicAnimation(() => {
40
+ return visible ? wrapperAnimationStates["wrapper:visible"] : wrapperAnimationStates["wrapper:hidden"]
41
+ })
42
+
43
+ onUpdate(() => {
44
+ wrapperAnimation.animateTo(visible ? wrapperAnimationStates["wrapper:visible"] : wrapperAnimationStates["wrapper:hidden"])
45
+ }, [visible])
46
+
47
+ const transition = useRef(null)
48
+ if(!transition.current){
49
+ transition.current = JSON.parse(JSON.stringify(variantStyles["wrapper:transition"]))
50
+ }
51
+ return <View style={variantStyles.wrapper} animated state={wrapperAnimation} transition={transition.current}>
52
+ <ActivityIndicator styles={loaderStyles}/>
53
+ {children}
54
+ </View>
55
+ }
@@ -0,0 +1,32 @@
1
+ import { createDefaultVariantFactory, shadeColor } from "@codeleap/common"
2
+ import { ActivityIndicatorComposition } from "../ActivityIndicator"
3
+
4
+ type WrapperStates = 'hidden'| 'visible'
5
+
6
+ export type LoadingOverlayComposition = 'wrapper' | `wrapper:${WrapperStates}` | 'wrapper:transition' | `loader${Capitalize<ActivityIndicatorComposition>}`
7
+
8
+ const createLoadingOverlayStyle = createDefaultVariantFactory<LoadingOverlayComposition>()
9
+
10
+ export const LoadingOverlayStyles = {
11
+ default: createLoadingOverlayStyle(theme => ({
12
+ wrapper: {
13
+ ...theme.presets.center,
14
+ ...theme.presets.whole,
15
+ ...theme.presets.absolute,
16
+ backgroundColor: theme.colors.background
17
+ },
18
+ 'wrapper:visible': {
19
+ opacity: 1
20
+ },
21
+ 'wrapper:hidden': {
22
+ opacity: 0
23
+ },
24
+ 'wrapper:transition': {
25
+ opacity: {
26
+ duration: 900,
27
+ type: 'timing',
28
+ },
29
+
30
+ }
31
+ }))
32
+ }
@@ -32,6 +32,7 @@ export * from './MultiSelect'
32
32
  export * from './AutoComplete'
33
33
  export * from './Grid'
34
34
  export * from './InputLabel'
35
+ export * from './LoadingOverlay'
35
36
  export * from './ActionIcon'
36
37
 
37
38
 
@@ -27,6 +27,7 @@ import { ScrollStyles } from './Scroll'
27
27
  import { ActionIconStyles } from './ActionIcon'
28
28
  import { GridStyles } from './Grid'
29
29
  import { InputLabelStyles } from './InputLabel'
30
+ import { LoadingOverlayStyles } from './LoadingOverlay'
30
31
 
31
32
  export const defaultStyles = {
32
33
  View: ViewStyles,
@@ -58,5 +59,6 @@ export const defaultStyles = {
58
59
  PaginationIndicator: PaginationIndicatorStyles,
59
60
  ActionIcon: ActionIconStyles,
60
61
  Grid: GridStyles,
62
+ LoadingOverlay: LoadingOverlayStyles,
61
63
  InputLabel: InputLabelStyles,
62
64
  }