@codeleap/mobile 2.3.28 → 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.
- package/dist/components/Image/index.d.ts +5 -1
- package/dist/components/Image/index.js +15 -5
- package/dist/components/Image/index.js.map +1 -1
- package/dist/components/Image/styles.d.ts +2 -1
- package/dist/components/Image/styles.js.map +1 -1
- package/dist/components/LoadingOverlay/index.d.ts +11 -0
- package/dist/components/LoadingOverlay/index.js +60 -0
- package/dist/components/LoadingOverlay/index.js.map +1 -0
- package/dist/components/LoadingOverlay/styles.d.ts +7 -0
- package/dist/components/LoadingOverlay/styles.js +34 -0
- package/dist/components/LoadingOverlay/styles.js.map +1 -0
- package/dist/components/components.d.ts +1 -0
- package/dist/components/components.js +1 -0
- package/dist/components/components.js.map +1 -1
- package/dist/components/defaultStyles.d.ts +3 -0
- package/dist/components/defaultStyles.js +2 -0
- package/dist/components/defaultStyles.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Image/index.tsx +42 -3
- package/src/components/Image/styles.ts +2 -1
- package/src/components/LoadingOverlay/index.tsx +55 -0
- package/src/components/LoadingOverlay/styles.ts +32 -0
- package/src/components/components.ts +1 -0
- package/src/components/defaultStyles.ts +2 -0
|
@@ -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.
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Image/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
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;
|
|
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"}
|
|
@@ -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;
|
|
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
|
@@ -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
|
|
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
|
+
}
|
|
@@ -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
|
}
|