@wlloyalty/wll-react-sdk 1.6.15 → 1.6.16
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/index.d.ts +2 -2
- package/dist/native.js +220 -205
- package/dist/native.js.map +1 -1
- package/dist/types/components/atoms/BaseTile/index.d.ts +4 -0
- package/dist/types/components/atoms/BaseTile/styles.d.ts +1 -0
- package/dist/types/components/atoms/ProgressiveImage/ProgressiveImage.stories.d.ts +1 -1
- package/dist/types/components/atoms/ProgressiveImage/index.d.ts +2 -2
- package/dist/types/components/molecules/Grid/Grid.stories.d.ts +3 -0
- package/dist/web.js +272 -254
- package/dist/web.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as React$1 from 'react';
|
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import * as LucideReactIcons from 'lucide-react';
|
|
4
4
|
import * as react_native from 'react-native';
|
|
5
|
-
import { ViewProps, ImageSourcePropType, StyleProp,
|
|
5
|
+
import { ViewProps, ImageSourcePropType, StyleProp, TextProps as TextProps$1, TextStyle, ViewStyle, ImageProps, AccessibilityRole, RefreshControl } from 'react-native';
|
|
6
6
|
|
|
7
7
|
declare const sizes: {
|
|
8
8
|
readonly borderRadiusSm: 15;
|
|
@@ -383,7 +383,7 @@ declare const ProgressBar: ({ percentage, variant, height, animationDuration, }:
|
|
|
383
383
|
|
|
384
384
|
type ProgressiveImageProps = {
|
|
385
385
|
source: ImageSourcePropType;
|
|
386
|
-
style?: StyleProp<
|
|
386
|
+
style?: StyleProp<any>;
|
|
387
387
|
isDesaturated?: boolean;
|
|
388
388
|
alt?: string;
|
|
389
389
|
[key: string]: any;
|
package/dist/native.js
CHANGED
|
@@ -2343,150 +2343,6 @@ var ProgressBar = function (_a) {
|
|
|
2343
2343
|
return (jsxRuntimeExports.jsx(reactNative.View, { style: containerStyle, children: jsxRuntimeExports.jsx(reactNative.Animated.View, { style: [styles.progress, progressStyles, progressWidth] }) }));
|
|
2344
2344
|
};
|
|
2345
2345
|
|
|
2346
|
-
var ProgressiveImage = function (_a) {
|
|
2347
|
-
var source = _a.source, style = _a.style, _b = _a.isDesaturated, isDesaturated = _b === void 0 ? false : _b, alt = _a.alt, props = __rest(_a, ["source", "style", "isDesaturated", "alt"]);
|
|
2348
|
-
var imageAnimated = React.useRef(new reactNative.Animated.Value(0)).current;
|
|
2349
|
-
var theme = useWllSdk().theme;
|
|
2350
|
-
var onImageLoad = function () {
|
|
2351
|
-
requestAnimationFrame(function () {
|
|
2352
|
-
reactNative.Animated.timing(imageAnimated, {
|
|
2353
|
-
toValue: 1,
|
|
2354
|
-
useNativeDriver: true,
|
|
2355
|
-
duration: 300,
|
|
2356
|
-
}).start();
|
|
2357
|
-
});
|
|
2358
|
-
};
|
|
2359
|
-
var baseColor = theme.alphaDerivedPrimary[20];
|
|
2360
|
-
var desaturatedColor = desaturateColor(baseColor);
|
|
2361
|
-
var backgroundColor = isDesaturated ? desaturatedColor : baseColor;
|
|
2362
|
-
var baseImage = (jsxRuntimeExports.jsx(reactNative.Animated.Image, __assign({}, props, { source: source, style: [
|
|
2363
|
-
styles$7.imageOverlay,
|
|
2364
|
-
__assign({ opacity: imageAnimated }, (IS_WEB && {
|
|
2365
|
-
filter: isDesaturated ? 'grayscale(100%)' : undefined,
|
|
2366
|
-
})),
|
|
2367
|
-
], onLoad: onImageLoad, accessibilityLabel: alt, accessible: true, role: "img" })));
|
|
2368
|
-
return (jsxRuntimeExports.jsxs(reactNative.View, { style: [styles$7.container, style, { backgroundColor: backgroundColor }], children: [jsxRuntimeExports.jsx(reactNative.Animated.View, { style: [
|
|
2369
|
-
styles$7.imageOverlay,
|
|
2370
|
-
{
|
|
2371
|
-
backgroundColor: backgroundColor,
|
|
2372
|
-
opacity: imageAnimated.interpolate({
|
|
2373
|
-
inputRange: [0, 1],
|
|
2374
|
-
outputRange: [1, 0],
|
|
2375
|
-
}),
|
|
2376
|
-
},
|
|
2377
|
-
] }), IS_WEB ? (baseImage) : (
|
|
2378
|
-
// For React Native, use the overlay technique
|
|
2379
|
-
jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [baseImage, isDesaturated && (jsxRuntimeExports.jsx(reactNative.Animated.Image, __assign({}, props, { source: source, style: [
|
|
2380
|
-
styles$7.imageOverlay,
|
|
2381
|
-
{
|
|
2382
|
-
opacity: imageAnimated.interpolate({
|
|
2383
|
-
inputRange: [0, 1],
|
|
2384
|
-
outputRange: [0, 0.8],
|
|
2385
|
-
}),
|
|
2386
|
-
tintColor: 'gray',
|
|
2387
|
-
},
|
|
2388
|
-
] })))] }))] }));
|
|
2389
|
-
};
|
|
2390
|
-
var styles$7 = reactNative.StyleSheet.create({
|
|
2391
|
-
imageOverlay: {
|
|
2392
|
-
position: 'absolute',
|
|
2393
|
-
left: 0,
|
|
2394
|
-
right: 0,
|
|
2395
|
-
bottom: 0,
|
|
2396
|
-
top: 0,
|
|
2397
|
-
},
|
|
2398
|
-
container: {
|
|
2399
|
-
position: 'relative',
|
|
2400
|
-
alignItems: 'center',
|
|
2401
|
-
justifyContent: 'center',
|
|
2402
|
-
width: '100%',
|
|
2403
|
-
height: '100%',
|
|
2404
|
-
minHeight: 130,
|
|
2405
|
-
},
|
|
2406
|
-
});
|
|
2407
|
-
|
|
2408
|
-
var Text = function (_a) {
|
|
2409
|
-
var _b = _a.variant, variant = _b === void 0 ? 'body' : _b, style = _a.style; _a.isSurface; var props = __rest(_a, ["variant", "style", "isSurface"]);
|
|
2410
|
-
var theme = useWllSdk().theme;
|
|
2411
|
-
var _d = useResponsive(), isDesktop = _d.isDesktop, isTablet = _d.isTablet;
|
|
2412
|
-
var getVariantStyle = function (variant) {
|
|
2413
|
-
var baseStyle = {
|
|
2414
|
-
color: theme.surfaceText,
|
|
2415
|
-
};
|
|
2416
|
-
switch (variant) {
|
|
2417
|
-
case 'eyebrow':
|
|
2418
|
-
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.md, theme.sizes.sm, isDesktop, isTablet), marginBottom: useResponsiveValue(theme.sizes.xxs, theme.sizes.xxxs, isDesktop, isTablet) });
|
|
2419
|
-
case 'title':
|
|
2420
|
-
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.xl, theme.sizes.md, isDesktop, isTablet), fontWeight: 'bold' });
|
|
2421
|
-
case 'body':
|
|
2422
|
-
return {
|
|
2423
|
-
color: theme.derivedSurfaceText[20],
|
|
2424
|
-
fontSize: useResponsiveValue(theme.sizes.md, theme.sizes.sm, isDesktop, isTablet),
|
|
2425
|
-
};
|
|
2426
|
-
case 'caption':
|
|
2427
|
-
return __assign(__assign({}, baseStyle), { fontWeight: 'bold', fontSize: useResponsiveValue(theme.sizes.xxl, theme.sizes.xl, isDesktop, isTablet), color: theme.primary });
|
|
2428
|
-
case 'description':
|
|
2429
|
-
case 'label':
|
|
2430
|
-
default:
|
|
2431
|
-
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.sm, theme.sizes.xxs, isDesktop, isTablet) });
|
|
2432
|
-
}
|
|
2433
|
-
};
|
|
2434
|
-
var variantStyle = getVariantStyle(variant);
|
|
2435
|
-
// NOTE: React Native Web has different style resolution rules compared to CSS.
|
|
2436
|
-
// 1. We create styles using StyleSheet.create for better performance
|
|
2437
|
-
// 2. Base styles set the initial fontFamily
|
|
2438
|
-
// 3. variantStyle contains responsive fontSize and other variant-specific styles
|
|
2439
|
-
// 4. webOverrides ensures fontFamily is correctly applied on web platform
|
|
2440
|
-
// (prevents system font stack from being incorrectly applied)
|
|
2441
|
-
// 5. custom style prop has highest precedence
|
|
2442
|
-
// The order matters because RN Web resolves styles by specific properties
|
|
2443
|
-
// rather than last-declaration-wins like in CSS
|
|
2444
|
-
// https://necolas.github.io/react-native-web/docs/styling/#how-it-works
|
|
2445
|
-
var styles = reactNative.StyleSheet.create({
|
|
2446
|
-
base: {
|
|
2447
|
-
fontFamily: theme.fontFamily,
|
|
2448
|
-
},
|
|
2449
|
-
webOverrides: IS_WEB
|
|
2450
|
-
? {
|
|
2451
|
-
fontFamily: theme.fontFamily,
|
|
2452
|
-
}
|
|
2453
|
-
: {},
|
|
2454
|
-
});
|
|
2455
|
-
// Determine appropriate accessibility role based on variant
|
|
2456
|
-
// This helps screen readers understand the semantic meaning
|
|
2457
|
-
var accessibilityRole;
|
|
2458
|
-
switch (variant) {
|
|
2459
|
-
case 'title':
|
|
2460
|
-
accessibilityRole = IS_MOBILE ? 'heading' : 'header';
|
|
2461
|
-
break;
|
|
2462
|
-
case 'caption':
|
|
2463
|
-
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2464
|
-
break;
|
|
2465
|
-
case 'eyebrow':
|
|
2466
|
-
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2467
|
-
break;
|
|
2468
|
-
case 'description':
|
|
2469
|
-
accessibilityRole = IS_MOBILE ? 'article' : 'paragraph';
|
|
2470
|
-
break;
|
|
2471
|
-
case 'label':
|
|
2472
|
-
accessibilityRole = IS_MOBILE ? 'option' : 'text';
|
|
2473
|
-
break;
|
|
2474
|
-
default:
|
|
2475
|
-
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2476
|
-
}
|
|
2477
|
-
var combinedStyles = [
|
|
2478
|
-
styles.base,
|
|
2479
|
-
variantStyle,
|
|
2480
|
-
styles.webOverrides,
|
|
2481
|
-
style,
|
|
2482
|
-
];
|
|
2483
|
-
return (jsxRuntimeExports.jsx(reactNative.Text, __assign({ style: combinedStyles }, props, { accessible: true, role: accessibilityRole })));
|
|
2484
|
-
};
|
|
2485
|
-
|
|
2486
|
-
var MAX_WIDTH = 1080;
|
|
2487
|
-
var SLIDE_WIDTH = MAX_WIDTH;
|
|
2488
|
-
var BUTTON_SIZE = 42;
|
|
2489
|
-
|
|
2490
2346
|
exports.CTALinkTarget = void 0;
|
|
2491
2347
|
(function (CTALinkTarget) {
|
|
2492
2348
|
CTALinkTarget["sameWindow"] = "SAME_FRAME";
|
|
@@ -2677,47 +2533,6 @@ var useHandleTilePress = function (tile, ctaLink, ctaLinkTarget) {
|
|
|
2677
2533
|
}, [tile, ctaLink, ctaLinkTarget, handleNavigation]);
|
|
2678
2534
|
};
|
|
2679
2535
|
|
|
2680
|
-
var BannerContext = React.createContext(null);
|
|
2681
|
-
var useBannerContext = function () {
|
|
2682
|
-
var context = React.useContext(BannerContext);
|
|
2683
|
-
if (!context) {
|
|
2684
|
-
throw new Error('Banner components must be used within a BaseBanner');
|
|
2685
|
-
}
|
|
2686
|
-
return context;
|
|
2687
|
-
};
|
|
2688
|
-
var BaseBanner = function (_a) {
|
|
2689
|
-
var tile = _a.tile, children = _a.children, style = _a.style, testID = _a.testID, accessibilityLabel = _a.accessibilityLabel;
|
|
2690
|
-
var theme = useWllSdk().theme;
|
|
2691
|
-
var _b = tile.configuration, ctaLink = _b.ctaLink, ctaLinkTarget = _b.ctaLinkTarget, title = _b.title, ctaText = _b.ctaText;
|
|
2692
|
-
var handlePress = useHandleTilePress(tile, ctaLink, ctaLinkTarget);
|
|
2693
|
-
var hasCTA = Boolean(ctaText);
|
|
2694
|
-
var isInteractive = Boolean(ctaLink && !hasCTA);
|
|
2695
|
-
var commonStyles = [
|
|
2696
|
-
styles$6.container,
|
|
2697
|
-
style,
|
|
2698
|
-
{
|
|
2699
|
-
backgroundColor: theme.surface,
|
|
2700
|
-
borderRadius: theme.sizes.borderRadiusLg,
|
|
2701
|
-
},
|
|
2702
|
-
];
|
|
2703
|
-
return jsxRuntimeExports.jsx(BannerContext.Provider, { value: tile, children: isInteractive ? (jsxRuntimeExports.jsx(reactNative.Pressable, { testID: testID || 'banner-tile', style: function (_a) {
|
|
2704
|
-
var pressed = _a.pressed;
|
|
2705
|
-
return __spreadArray(__spreadArray([], commonStyles, true), [
|
|
2706
|
-
{ opacity: pressed ? 0.7 : 1 },
|
|
2707
|
-
], false);
|
|
2708
|
-
}, onPress: handlePress, accessible: true, role: "button", accessibilityLabel: accessibilityLabel || "".concat(title, " - Click to open"), children: children })) : (jsxRuntimeExports.jsx(reactNative.View, { testID: testID || 'banner-tile', style: commonStyles, accessible: true, role: "article", accessibilityLabel: accessibilityLabel || title || 'Banner', children: children })) });
|
|
2709
|
-
};
|
|
2710
|
-
var styles$6 = reactNative.StyleSheet.create({
|
|
2711
|
-
container: {
|
|
2712
|
-
width: '100%',
|
|
2713
|
-
maxWidth: MAX_WIDTH,
|
|
2714
|
-
flexDirection: 'row',
|
|
2715
|
-
alignItems: 'center',
|
|
2716
|
-
justifyContent: 'space-between',
|
|
2717
|
-
overflow: 'hidden',
|
|
2718
|
-
},
|
|
2719
|
-
});
|
|
2720
|
-
|
|
2721
2536
|
var useTileSize = function (tile) {
|
|
2722
2537
|
return React.useMemo(function () { return ({
|
|
2723
2538
|
isFullSize: tile.tileHeight === exports.TileHeight.Full,
|
|
@@ -2725,6 +2540,84 @@ var useTileSize = function (tile) {
|
|
|
2725
2540
|
}); }, [tile.tileHeight]);
|
|
2726
2541
|
};
|
|
2727
2542
|
|
|
2543
|
+
var Text = function (_a) {
|
|
2544
|
+
var _b = _a.variant, variant = _b === void 0 ? 'body' : _b, style = _a.style; _a.isSurface; var props = __rest(_a, ["variant", "style", "isSurface"]);
|
|
2545
|
+
var theme = useWllSdk().theme;
|
|
2546
|
+
var _d = useResponsive(), isDesktop = _d.isDesktop, isTablet = _d.isTablet;
|
|
2547
|
+
var getVariantStyle = function (variant) {
|
|
2548
|
+
var baseStyle = {
|
|
2549
|
+
color: theme.surfaceText,
|
|
2550
|
+
};
|
|
2551
|
+
switch (variant) {
|
|
2552
|
+
case 'eyebrow':
|
|
2553
|
+
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.md, theme.sizes.sm, isDesktop, isTablet), marginBottom: useResponsiveValue(theme.sizes.xxs, theme.sizes.xxxs, isDesktop, isTablet) });
|
|
2554
|
+
case 'title':
|
|
2555
|
+
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.xl, theme.sizes.md, isDesktop, isTablet), fontWeight: 'bold' });
|
|
2556
|
+
case 'body':
|
|
2557
|
+
return {
|
|
2558
|
+
color: theme.derivedSurfaceText[20],
|
|
2559
|
+
fontSize: useResponsiveValue(theme.sizes.md, theme.sizes.sm, isDesktop, isTablet),
|
|
2560
|
+
};
|
|
2561
|
+
case 'caption':
|
|
2562
|
+
return __assign(__assign({}, baseStyle), { fontWeight: 'bold', fontSize: useResponsiveValue(theme.sizes.xxl, theme.sizes.xl, isDesktop, isTablet), color: theme.primary });
|
|
2563
|
+
case 'description':
|
|
2564
|
+
case 'label':
|
|
2565
|
+
default:
|
|
2566
|
+
return __assign(__assign({}, baseStyle), { fontSize: useResponsiveValue(theme.sizes.sm, theme.sizes.xxs, isDesktop, isTablet) });
|
|
2567
|
+
}
|
|
2568
|
+
};
|
|
2569
|
+
var variantStyle = getVariantStyle(variant);
|
|
2570
|
+
// NOTE: React Native Web has different style resolution rules compared to CSS.
|
|
2571
|
+
// 1. We create styles using StyleSheet.create for better performance
|
|
2572
|
+
// 2. Base styles set the initial fontFamily
|
|
2573
|
+
// 3. variantStyle contains responsive fontSize and other variant-specific styles
|
|
2574
|
+
// 4. webOverrides ensures fontFamily is correctly applied on web platform
|
|
2575
|
+
// (prevents system font stack from being incorrectly applied)
|
|
2576
|
+
// 5. custom style prop has highest precedence
|
|
2577
|
+
// The order matters because RN Web resolves styles by specific properties
|
|
2578
|
+
// rather than last-declaration-wins like in CSS
|
|
2579
|
+
// https://necolas.github.io/react-native-web/docs/styling/#how-it-works
|
|
2580
|
+
var styles = reactNative.StyleSheet.create({
|
|
2581
|
+
base: {
|
|
2582
|
+
fontFamily: theme.fontFamily,
|
|
2583
|
+
},
|
|
2584
|
+
webOverrides: IS_WEB
|
|
2585
|
+
? {
|
|
2586
|
+
fontFamily: theme.fontFamily,
|
|
2587
|
+
}
|
|
2588
|
+
: {},
|
|
2589
|
+
});
|
|
2590
|
+
// Determine appropriate accessibility role based on variant
|
|
2591
|
+
// This helps screen readers understand the semantic meaning
|
|
2592
|
+
var accessibilityRole;
|
|
2593
|
+
switch (variant) {
|
|
2594
|
+
case 'title':
|
|
2595
|
+
accessibilityRole = IS_MOBILE ? 'heading' : 'header';
|
|
2596
|
+
break;
|
|
2597
|
+
case 'caption':
|
|
2598
|
+
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2599
|
+
break;
|
|
2600
|
+
case 'eyebrow':
|
|
2601
|
+
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2602
|
+
break;
|
|
2603
|
+
case 'description':
|
|
2604
|
+
accessibilityRole = IS_MOBILE ? 'article' : 'paragraph';
|
|
2605
|
+
break;
|
|
2606
|
+
case 'label':
|
|
2607
|
+
accessibilityRole = IS_MOBILE ? 'option' : 'text';
|
|
2608
|
+
break;
|
|
2609
|
+
default:
|
|
2610
|
+
accessibilityRole = IS_MOBILE ? 'contentinfo' : 'text';
|
|
2611
|
+
}
|
|
2612
|
+
var combinedStyles = [
|
|
2613
|
+
styles.base,
|
|
2614
|
+
variantStyle,
|
|
2615
|
+
styles.webOverrides,
|
|
2616
|
+
style,
|
|
2617
|
+
];
|
|
2618
|
+
return (jsxRuntimeExports.jsx(reactNative.Text, __assign({ style: combinedStyles }, props, { accessible: true, role: accessibilityRole })));
|
|
2619
|
+
};
|
|
2620
|
+
|
|
2728
2621
|
/**
|
|
2729
2622
|
* Renders the body text of a BaseTile component.
|
|
2730
2623
|
*
|
|
@@ -2781,6 +2674,7 @@ var shouldHideContentForHalfTile = function (sizeInfo, artworkUrl) {
|
|
|
2781
2674
|
|
|
2782
2675
|
var baseStyles = reactNative.StyleSheet.create({
|
|
2783
2676
|
imageContainer: {
|
|
2677
|
+
width: '100%',
|
|
2784
2678
|
position: 'relative',
|
|
2785
2679
|
},
|
|
2786
2680
|
container: {
|
|
@@ -3057,6 +2951,122 @@ var BaseTile = Object.assign(BaseTileRoot, {
|
|
|
3057
2951
|
Body: BaseTileBody,
|
|
3058
2952
|
});
|
|
3059
2953
|
|
|
2954
|
+
var ProgressiveImage = function (_a) {
|
|
2955
|
+
var source = _a.source, style = _a.style, _b = _a.isDesaturated, isDesaturated = _b === void 0 ? false : _b, alt = _a.alt, props = __rest(_a, ["source", "style", "isDesaturated", "alt"]);
|
|
2956
|
+
var imageAnimated = React.useRef(new reactNative.Animated.Value(0)).current;
|
|
2957
|
+
var theme = useWllSdk().theme;
|
|
2958
|
+
var tileContext = React.useContext(TileContext);
|
|
2959
|
+
var isHalfHeight = (tileContext === null || tileContext === void 0 ? void 0 : tileContext.tileHeight) === exports.TileHeight.Half;
|
|
2960
|
+
var onImageLoad = function () {
|
|
2961
|
+
requestAnimationFrame(function () {
|
|
2962
|
+
reactNative.Animated.timing(imageAnimated, {
|
|
2963
|
+
toValue: 1,
|
|
2964
|
+
useNativeDriver: true,
|
|
2965
|
+
duration: 300,
|
|
2966
|
+
}).start();
|
|
2967
|
+
});
|
|
2968
|
+
};
|
|
2969
|
+
var baseColor = theme.alphaDerivedPrimary[20];
|
|
2970
|
+
var desaturatedColor = desaturateColor(baseColor);
|
|
2971
|
+
var backgroundColor = isDesaturated ? desaturatedColor : baseColor;
|
|
2972
|
+
var baseImage = (jsxRuntimeExports.jsx(reactNative.Animated.Image, __assign({}, props, { source: source, style: [
|
|
2973
|
+
styles$7.imageOverlay,
|
|
2974
|
+
style,
|
|
2975
|
+
__assign({ opacity: imageAnimated }, (IS_WEB && {
|
|
2976
|
+
filter: isDesaturated ? 'grayscale(100%)' : undefined,
|
|
2977
|
+
})),
|
|
2978
|
+
], onLoad: onImageLoad, accessibilityLabel: alt, accessible: true, role: "img" })));
|
|
2979
|
+
return (jsxRuntimeExports.jsxs(reactNative.View, { style: [
|
|
2980
|
+
styles$7.container,
|
|
2981
|
+
isHalfHeight && { minHeight: 0 },
|
|
2982
|
+
style,
|
|
2983
|
+
{ backgroundColor: backgroundColor },
|
|
2984
|
+
], children: [jsxRuntimeExports.jsx(reactNative.Animated.View, { style: [
|
|
2985
|
+
styles$7.imageOverlay,
|
|
2986
|
+
{
|
|
2987
|
+
backgroundColor: backgroundColor,
|
|
2988
|
+
opacity: imageAnimated.interpolate({
|
|
2989
|
+
inputRange: [0, 1],
|
|
2990
|
+
outputRange: [1, 0],
|
|
2991
|
+
}),
|
|
2992
|
+
},
|
|
2993
|
+
] }), IS_WEB ? (baseImage) : (
|
|
2994
|
+
// For React Native, use the overlay technique
|
|
2995
|
+
jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [baseImage, isDesaturated && (jsxRuntimeExports.jsx(reactNative.Animated.Image, __assign({}, props, { source: source, style: [
|
|
2996
|
+
styles$7.imageOverlay,
|
|
2997
|
+
style,
|
|
2998
|
+
{
|
|
2999
|
+
opacity: imageAnimated.interpolate({
|
|
3000
|
+
inputRange: [0, 1],
|
|
3001
|
+
outputRange: [0, 0.8],
|
|
3002
|
+
}),
|
|
3003
|
+
tintColor: 'gray',
|
|
3004
|
+
},
|
|
3005
|
+
] })))] }))] }));
|
|
3006
|
+
};
|
|
3007
|
+
var styles$7 = reactNative.StyleSheet.create({
|
|
3008
|
+
imageOverlay: {
|
|
3009
|
+
position: 'absolute',
|
|
3010
|
+
left: 0,
|
|
3011
|
+
right: 0,
|
|
3012
|
+
bottom: 0,
|
|
3013
|
+
top: 0,
|
|
3014
|
+
},
|
|
3015
|
+
container: {
|
|
3016
|
+
position: 'relative',
|
|
3017
|
+
alignItems: 'center',
|
|
3018
|
+
justifyContent: 'center',
|
|
3019
|
+
width: '100%',
|
|
3020
|
+
height: '100%',
|
|
3021
|
+
minHeight: 130,
|
|
3022
|
+
},
|
|
3023
|
+
});
|
|
3024
|
+
|
|
3025
|
+
var MAX_WIDTH = 1080;
|
|
3026
|
+
var SLIDE_WIDTH = MAX_WIDTH;
|
|
3027
|
+
var BUTTON_SIZE = 42;
|
|
3028
|
+
|
|
3029
|
+
var BannerContext = React.createContext(null);
|
|
3030
|
+
var useBannerContext = function () {
|
|
3031
|
+
var context = React.useContext(BannerContext);
|
|
3032
|
+
if (!context) {
|
|
3033
|
+
throw new Error('Banner components must be used within a BaseBanner');
|
|
3034
|
+
}
|
|
3035
|
+
return context;
|
|
3036
|
+
};
|
|
3037
|
+
var BaseBanner = function (_a) {
|
|
3038
|
+
var tile = _a.tile, children = _a.children, style = _a.style, testID = _a.testID, accessibilityLabel = _a.accessibilityLabel;
|
|
3039
|
+
var theme = useWllSdk().theme;
|
|
3040
|
+
var _b = tile.configuration, ctaLink = _b.ctaLink, ctaLinkTarget = _b.ctaLinkTarget, title = _b.title, ctaText = _b.ctaText;
|
|
3041
|
+
var handlePress = useHandleTilePress(tile, ctaLink, ctaLinkTarget);
|
|
3042
|
+
var hasCTA = Boolean(ctaText);
|
|
3043
|
+
var isInteractive = Boolean(ctaLink && !hasCTA);
|
|
3044
|
+
var commonStyles = [
|
|
3045
|
+
styles$6.container,
|
|
3046
|
+
style,
|
|
3047
|
+
{
|
|
3048
|
+
backgroundColor: theme.surface,
|
|
3049
|
+
borderRadius: theme.sizes.borderRadiusLg,
|
|
3050
|
+
},
|
|
3051
|
+
];
|
|
3052
|
+
return jsxRuntimeExports.jsx(BannerContext.Provider, { value: tile, children: isInteractive ? (jsxRuntimeExports.jsx(reactNative.Pressable, { testID: testID || 'banner-tile', style: function (_a) {
|
|
3053
|
+
var pressed = _a.pressed;
|
|
3054
|
+
return __spreadArray(__spreadArray([], commonStyles, true), [
|
|
3055
|
+
{ opacity: pressed ? 0.7 : 1 },
|
|
3056
|
+
], false);
|
|
3057
|
+
}, onPress: handlePress, accessible: true, role: "button", accessibilityLabel: accessibilityLabel || "".concat(title, " - Click to open"), children: children })) : (jsxRuntimeExports.jsx(reactNative.View, { testID: testID || 'banner-tile', style: commonStyles, accessible: true, role: "article", accessibilityLabel: accessibilityLabel || title || 'Banner', children: children })) });
|
|
3058
|
+
};
|
|
3059
|
+
var styles$6 = reactNative.StyleSheet.create({
|
|
3060
|
+
container: {
|
|
3061
|
+
width: '100%',
|
|
3062
|
+
maxWidth: MAX_WIDTH,
|
|
3063
|
+
flexDirection: 'row',
|
|
3064
|
+
alignItems: 'center',
|
|
3065
|
+
justifyContent: 'space-between',
|
|
3066
|
+
overflow: 'hidden',
|
|
3067
|
+
},
|
|
3068
|
+
});
|
|
3069
|
+
|
|
3060
3070
|
var Indicator = function () {
|
|
3061
3071
|
var _a = useResponsive$1(), isDesktop = _a.isDesktop, isTablet = _a.isTablet;
|
|
3062
3072
|
var getCurrentLayout = function () {
|
|
@@ -3404,12 +3414,7 @@ var useBadgeTileStyles = function () {
|
|
|
3404
3414
|
fontSize: 14,
|
|
3405
3415
|
fontWeight: 'bold',
|
|
3406
3416
|
},
|
|
3407
|
-
header: {
|
|
3408
|
-
alignItems: 'center',
|
|
3409
|
-
justifyContent: 'center',
|
|
3410
|
-
position: 'relative',
|
|
3411
|
-
marginBottom: useResponsiveValue(theme.sizes.lg, theme.sizes.xxs, isDesktop, isTablet),
|
|
3412
|
-
},
|
|
3417
|
+
header: __assign(__assign({ width: '100%' }, (!IS_WEB && { flexBasis: '50%' })), { alignItems: 'center', justifyContent: 'center', position: 'relative', marginBottom: useResponsiveValue(theme.sizes.lg, theme.sizes.xxs, isDesktop, isTablet) }),
|
|
3413
3418
|
image: {
|
|
3414
3419
|
width: '100%',
|
|
3415
3420
|
height: '100%',
|
|
@@ -3546,7 +3551,14 @@ var useBannerTileStyles = function () {
|
|
|
3546
3551
|
slideContent: {
|
|
3547
3552
|
flex: 1,
|
|
3548
3553
|
},
|
|
3549
|
-
mediaContainer:
|
|
3554
|
+
mediaContainer: {
|
|
3555
|
+
aspectRatio: 1,
|
|
3556
|
+
position: 'relative',
|
|
3557
|
+
overflow: 'hidden',
|
|
3558
|
+
marginRight: useResponsiveValue(theme.sizes.xxl, theme.sizes.xxs, isDesktop, isTablet),
|
|
3559
|
+
maxHeight: useResponsiveValue(253, 120, isDesktop, isTablet),
|
|
3560
|
+
minHeight: 120,
|
|
3561
|
+
},
|
|
3550
3562
|
media: {
|
|
3551
3563
|
position: 'absolute',
|
|
3552
3564
|
width: '100%',
|
|
@@ -3687,6 +3699,7 @@ var useContentTileStyles = function (hasArtwork) {
|
|
|
3687
3699
|
overflow: 'hidden',
|
|
3688
3700
|
},
|
|
3689
3701
|
image: {
|
|
3702
|
+
width: '100%',
|
|
3690
3703
|
resizeMode: 'cover',
|
|
3691
3704
|
},
|
|
3692
3705
|
content: {
|
|
@@ -3708,7 +3721,9 @@ var ContentTileMedia = function (_a) {
|
|
|
3708
3721
|
return null;
|
|
3709
3722
|
var hasArtwork = Boolean(artworkUrl);
|
|
3710
3723
|
var styles = useContentTileStyles(hasArtwork);
|
|
3711
|
-
var containerStyle =
|
|
3724
|
+
var containerStyle = {
|
|
3725
|
+
flexBasis: isArtworkOnly ? '100%' : '50%',
|
|
3726
|
+
};
|
|
3712
3727
|
return (jsxRuntimeExports.jsx(reactNative.View, { style: [styles.imageContainer, containerStyle], testID: "content-tile-media", role: "img", accessibilityLabel: "Image for ".concat(title), children: jsxRuntimeExports.jsx(ProgressiveImage, { source: { uri: artworkUrl }, style: styles.image, alt: "Image for ".concat(title) }) }));
|
|
3713
3728
|
};
|
|
3714
3729
|
|
|
@@ -4717,15 +4732,17 @@ var Column = function (_a) {
|
|
|
4717
4732
|
*/
|
|
4718
4733
|
var FullFlex = function (_a) {
|
|
4719
4734
|
var children = _a.children, style = _a.style, rest = __rest(_a, ["children", "style"]);
|
|
4735
|
+
var _b = useResponsive$1(), isDesktop = _b.isDesktop, isTablet = _b.isTablet;
|
|
4736
|
+
var theme = useWllSdk().theme;
|
|
4720
4737
|
var isRTL = IS_WEB &&
|
|
4721
4738
|
typeof document !== 'undefined' &&
|
|
4722
4739
|
document.documentElement.dir === 'rtl';
|
|
4723
4740
|
return (jsxRuntimeExports.jsx(reactNative.View, __assign({ style: [
|
|
4724
|
-
{
|
|
4725
|
-
flex: 1,
|
|
4741
|
+
__assign({ flex: 1,
|
|
4726
4742
|
// If the language is Arabic (RTL), use 'rtl', otherwise 'ltr'.
|
|
4727
|
-
direction: isRTL ? 'rtl' : 'ltr',
|
|
4728
|
-
|
|
4743
|
+
direction: isRTL ? 'rtl' : 'ltr' }, (isRTL && {
|
|
4744
|
+
marginRight: useResponsiveValue(theme.sizes.xxl, theme.sizes.xxs, isDesktop, isTablet),
|
|
4745
|
+
})),
|
|
4729
4746
|
style,
|
|
4730
4747
|
] }, rest, { children: children })));
|
|
4731
4748
|
};
|
|
@@ -4984,9 +5001,9 @@ var useRewardCategoryTileStyles = function () {
|
|
|
4984
5001
|
* @returns React.ReactElement or null if showName is false or name is not present
|
|
4985
5002
|
*/
|
|
4986
5003
|
var RewardCategoryHeader = function () {
|
|
5004
|
+
var tileContext = useTileContext();
|
|
4987
5005
|
var styles = useRewardCategoryTileStyles();
|
|
4988
5006
|
var theme = useWllSdk().theme;
|
|
4989
|
-
var tileContext = useTileContext();
|
|
4990
5007
|
if (!isContextValid(tileContext))
|
|
4991
5008
|
return null;
|
|
4992
5009
|
var _a = tileContext.configuration, _b = _a.showName, showName = _b === void 0 ? true : _b, _c = _a.name, name = _c === void 0 ? '' : _c;
|
|
@@ -5001,8 +5018,8 @@ var RewardCategoryHeader = function () {
|
|
|
5001
5018
|
* @returns React.ReactElement or null if no artwork URL is present
|
|
5002
5019
|
*/
|
|
5003
5020
|
var RewardCategoryMedia = function () {
|
|
5004
|
-
var styles = useRewardCategoryTileStyles();
|
|
5005
5021
|
var tileContext = useTileContext();
|
|
5022
|
+
var styles = useRewardCategoryTileStyles();
|
|
5006
5023
|
if (!isContextValid(tileContext))
|
|
5007
5024
|
return null;
|
|
5008
5025
|
var _a = tileContext.configuration, artworkUrl = _a.artworkUrl, _b = _a.name, name = _b === void 0 ? 'Reward' : _b;
|
|
@@ -5022,7 +5039,7 @@ var RewardCategoryTileRoot = function (_a) {
|
|
|
5022
5039
|
var tile = _a.tile;
|
|
5023
5040
|
if (!tile || !tile.active || !tile.configuration)
|
|
5024
5041
|
return null;
|
|
5025
|
-
return (jsxRuntimeExports.jsx(BaseTile, { tile: tile, children: jsxRuntimeExports.jsxs(reactNative.View, { style: { aspectRatio: 1 }, children: [jsxRuntimeExports.jsx(RewardCategoryTile.Header, {}), jsxRuntimeExports.jsx(RewardCategoryTile.Media, {})] }) }));
|
|
5042
|
+
return (jsxRuntimeExports.jsx(BaseTile, { tile: tile, children: jsxRuntimeExports.jsxs(reactNative.View, { style: { aspectRatio: tile.tileHeight === exports.TileHeight.Half ? 2 : 1 }, children: [jsxRuntimeExports.jsx(RewardCategoryTile.Header, {}), jsxRuntimeExports.jsx(RewardCategoryTile.Media, {})] }) }));
|
|
5026
5043
|
};
|
|
5027
5044
|
/**
|
|
5028
5045
|
* The RewardCategoryTile component with subcomponents attached.
|
|
@@ -5134,11 +5151,9 @@ var RewardTileMedia = function (_a) {
|
|
|
5134
5151
|
height: '100%',
|
|
5135
5152
|
marginBottom: 0,
|
|
5136
5153
|
minHeight: 0,
|
|
5137
|
-
aspectRatio: 1,
|
|
5154
|
+
aspectRatio: tileContext.tileHeight === exports.TileHeight.Half ? 2 : 1,
|
|
5138
5155
|
}
|
|
5139
|
-
: {
|
|
5140
|
-
flexBasis: '50%',
|
|
5141
|
-
};
|
|
5156
|
+
: __assign({ flexBasis: '50%' }, (tileContext.tileHeight === exports.TileHeight.Half && { minHeight: 0 }));
|
|
5142
5157
|
return (jsxRuntimeExports.jsxs(reactNative.View, { style: [styles.imageContainer, containerStyle], testID: "reward-tile-media", role: "img", accessibilityLabel: "Reward image for ".concat(name), children: [jsxRuntimeExports.jsx(ProgressiveImage, { source: { uri: artworkUrl }, style: styles.image, alt: "Reward image for ".concat(name) }), isLocked && (jsxRuntimeExports.jsx(reactNative.View, { style: styles.lockOverlay, testID: "lock-overlay", children: jsxRuntimeExports.jsx(Icon, { name: "LockKeyhole", size: 48, color: "white" }) }))] }));
|
|
5143
5158
|
};
|
|
5144
5159
|
|
|
@@ -5656,7 +5671,7 @@ var TileContainer = function (_a) {
|
|
|
5656
5671
|
var allHalfHeight = tiles.length > 0 &&
|
|
5657
5672
|
tiles.every(function (tile) { return tile.tileHeight === exports.TileHeight.Half; });
|
|
5658
5673
|
var halfHeightGap = allHalfHeight ? GRID_GAP / 2 : GRID_GAP;
|
|
5659
|
-
return (jsxRuntimeExports.jsx(reactNative.View, { style: styles.container, testID: "tile-container", children: tiles.map(function (tile, index) {
|
|
5674
|
+
return (jsxRuntimeExports.jsx(reactNative.View, { style: [styles.container, allHalfHeight && { aspectRatio: 1 }], testID: "tile-container", children: tiles.map(function (tile, index) {
|
|
5660
5675
|
var TileComponent = TILE_COMPONENTS[tile.type];
|
|
5661
5676
|
var isHalfHeight = tile.tileHeight === exports.TileHeight.Half;
|
|
5662
5677
|
return (jsxRuntimeExports.jsx(reactNative.View, { style: [
|