@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 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, ViewStyle, TextProps as TextProps$1, TextStyle, ImageProps, AccessibilityRole, RefreshControl } from 'react-native';
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<ViewStyle>;
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: __assign(__assign({ aspectRatio: 1, position: 'relative', overflow: 'hidden' }, getDirectionalMargin(useResponsiveValue(theme.sizes.xxl, theme.sizes.xxs, isDesktop, isTablet))), { maxHeight: useResponsiveValue(253, 120, isDesktop, isTablet), minHeight: 120 }),
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 = __assign({ flexBasis: isArtworkOnly ? '100%' : '50%' }, (isArtworkOnly && { aspectRatio: 1 }));
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: [