dhre-ui-kit 3.0.0 → 3.0.1

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/lib/index.js CHANGED
@@ -222,6 +222,7 @@ var Theme = /* @__PURE__ */ ((Theme2) => {
222
222
  Theme2["STROKE_INFO"] = "STROKE_INFO";
223
223
  Theme2["STROKE_DISABLED_DARK"] = "STROKE_DISABLED_DARK";
224
224
  Theme2["STROKE_DISABLED_DARK2"] = "STROKE_DISABLED_DARK2";
225
+ Theme2["STROKE_ACTIVE"] = "STROKE_ACTIVE";
225
226
  return Theme2;
226
227
  })(Theme || {});
227
228
 
@@ -485,6 +486,14 @@ const DHRE_RED_ERROR = {
485
486
  TRANSPARENT_400_60: "rgba(235, 5, 66, 0.60)",
486
487
  TRANSPARENT_400_10: "rgba(235, 5, 66, 0.10)"
487
488
  };
489
+ const DHRE_CONFIRMATION_ERROR_GRADIENT = {
490
+ light: ["#F0809E", "#FFFFFF"],
491
+ dark: ["#EB0542", "#000A28"]
492
+ };
493
+ const DHRE_CONFIRMATION_BASE_GRADIENT = {
494
+ light: ["rgba(165, 233, 255, 0)", "#52C5E8"],
495
+ dark: ["rgba(165, 233, 255, 0)", "#279DC1"]
496
+ };
488
497
 
489
498
  const theme = {
490
499
  [Theme.SURFACE_PRIMARY]: {
@@ -565,7 +574,7 @@ const theme = {
565
574
  },
566
575
  [Theme.SURFACE_SUCCESS]: {
567
576
  light: "#89C798",
568
- dark: "#347243"
577
+ dark: "#4EAB65"
569
578
  },
570
579
  [Theme.SURFACE_SUCCESS_TRANSPARENT]: {
571
580
  light: "rgba(137, 199, 152, 0.10)",
@@ -573,7 +582,7 @@ const theme = {
573
582
  },
574
583
  [Theme.SURFACE_INFO]: {
575
584
  light: "#52C5E8",
576
- dark: "#07556C"
585
+ dark: "#279DC1"
577
586
  },
578
587
  [Theme.SURFACE_INFO_TRANSPARENT]: {
579
588
  light: "rgba(233, 248, 255, 0.35)",
@@ -588,8 +597,8 @@ const theme = {
588
597
  dark: "rgba(238, 170, 106, 0.60)"
589
598
  },
590
599
  [Theme.SURFACE_ERROR]: {
591
- light: "#FFF2F5",
592
- dark: "#9D032C"
600
+ light: "#F0809E",
601
+ dark: "#EB0542"
593
602
  },
594
603
  [Theme.SURFACE_ERROR_TRANSPARENT]: {
595
604
  light: "rgba(235, 5, 66, 0.10)",
@@ -604,8 +613,8 @@ const theme = {
604
613
  dark: "#BFC7DB"
605
614
  },
606
615
  [Theme.CONTENT_TERTIARY]: {
607
- light: "#4D5F86",
608
- dark: "#8994AF"
616
+ light: "#6F7681",
617
+ dark: "#9FA4AB"
609
618
  },
610
619
  [Theme.CONTENT_SECONDARY_TEXT]: {
611
620
  light: "#686868",
@@ -822,6 +831,11 @@ const theme = {
822
831
  [Theme.STROKE_DISABLED_DARK2]: {
823
832
  dark: DHRE_DEEP_SPACE_BLUE[800],
824
833
  light: DHRE_DEEP_SPACE_BLUE[200]
834
+ },
835
+ [Theme.STROKE_ACTIVE]: {
836
+ dark: "#009db3",
837
+ light: "#009db3"
838
+ // light-theme value pending DHDS Figma spec
825
839
  }
826
840
  };
827
841
 
@@ -853,64 +867,65 @@ const horizontalScale = (size) => width / guidelineBaseWidth * size;
853
867
  const verticalScale = (size) => height / guidelineBaseHeight * size;
854
868
  const moderateScale = (size, factor = 0.5) => size + (horizontalScale(size) - size) * factor;
855
869
 
856
- const createFontStyle = (fontFamily, fontSize, lineHeight) => ({
870
+ const createFontStyle = (fontFamily, fontSize, lineHeight, fontWeight) => ({
857
871
  fontSize: moderateScale(fontSize),
858
872
  lineHeight: verticalScale(lineHeight),
859
- fontFamily
873
+ fontFamily,
874
+ fontWeight
860
875
  });
861
876
  const InterBold = "Inter-Bold";
862
877
  const InterLight = "Inter-Light";
863
878
  const InterMedium = "Inter-Medium";
864
879
  const FONT_STYLES = {
865
- [FontStyle.H1_BOLD]: createFontStyle(InterBold, 48, 56),
866
- [FontStyle.H2_BOLD]: createFontStyle(InterBold, 40, 48),
867
- [FontStyle.H3_BOLD]: createFontStyle(InterBold, 32, 40),
868
- [FontStyle.H4_BOLD]: createFontStyle(InterBold, 24, 32),
869
- [FontStyle.H5_BOLD]: createFontStyle(InterBold, 20, 28),
870
- [FontStyle.H6_BOLD]: createFontStyle(InterBold, 16, 20),
871
- [FontStyle.H7_BOLD]: createFontStyle(InterBold, 20, 28),
872
- [FontStyle.H8_BOLD]: createFontStyle(InterBold, 18, 25.2),
873
- [FontStyle.H1_MEDIUM]: createFontStyle(InterMedium, 48, 56),
874
- [FontStyle.H2_MEDIUM]: createFontStyle(InterMedium, 40, 48),
875
- [FontStyle.H3_MEDIUM]: createFontStyle(InterMedium, 32, 40),
876
- [FontStyle.H4_MEDIUM]: createFontStyle(InterMedium, 24, 32),
877
- [FontStyle.H5_MEDIUM]: createFontStyle(InterMedium, 20, 28),
878
- [FontStyle.H6_MEDIUM]: createFontStyle(InterMedium, 16, 20),
879
- [FontStyle.H7_MEDIUM]: createFontStyle(InterMedium, 20, 28),
880
- [FontStyle.H8_MEDIUM]: createFontStyle(InterMedium, 18, 25.2),
881
- [FontStyle.H1_LIGHT]: createFontStyle(InterLight, 48, 56),
882
- [FontStyle.H2_LIGHT]: createFontStyle(InterLight, 40, 48),
883
- [FontStyle.H3_LIGHT]: createFontStyle(InterLight, 32, 40),
884
- [FontStyle.H4_LIGHT]: createFontStyle(InterLight, 24, 32),
885
- [FontStyle.H5_LIGHT]: createFontStyle(InterLight, 20, 28),
886
- [FontStyle.H6_LIGHT]: createFontStyle(InterLight, 16, 20),
887
- [FontStyle.H7_LIGHT]: createFontStyle(InterLight, 20, 28),
888
- [FontStyle.H8_LIGHT]: createFontStyle(InterLight, 18, 25.2),
889
- [FontStyle.H1_LINK]: createFontStyle(InterLight, 48, 56),
890
- [FontStyle.H2_LINK]: createFontStyle(InterLight, 40, 48),
891
- [FontStyle.H3_LINK]: createFontStyle(InterLight, 32, 40),
892
- [FontStyle.H4_LINK]: createFontStyle(InterLight, 24, 32),
893
- [FontStyle.H5_LINK]: createFontStyle(InterLight, 20, 28),
894
- [FontStyle.H6_LINK]: createFontStyle(InterLight, 16, 20),
895
- [FontStyle.H7_LINK]: createFontStyle(InterLight, 20, 28),
896
- [FontStyle.H8_LINK]: createFontStyle(InterLight, 18, 25.2),
880
+ [FontStyle.H1_BOLD]: createFontStyle(InterBold, 48, 56, "700"),
881
+ [FontStyle.H2_BOLD]: createFontStyle(InterBold, 40, 48, "700"),
882
+ [FontStyle.H3_BOLD]: createFontStyle(InterBold, 32, 40, "700"),
883
+ [FontStyle.H4_BOLD]: createFontStyle(InterBold, 24, 32, "700"),
884
+ [FontStyle.H5_BOLD]: createFontStyle(InterBold, 20, 28, "700"),
885
+ [FontStyle.H6_BOLD]: createFontStyle(InterBold, 16, 20, "700"),
886
+ [FontStyle.H7_BOLD]: createFontStyle(InterBold, 20, 28, "700"),
887
+ [FontStyle.H8_BOLD]: createFontStyle(InterBold, 18, 25.2, "700"),
888
+ [FontStyle.H1_MEDIUM]: createFontStyle(InterMedium, 48, 56, "500"),
889
+ [FontStyle.H2_MEDIUM]: createFontStyle(InterMedium, 40, 48, "500"),
890
+ [FontStyle.H3_MEDIUM]: createFontStyle(InterMedium, 32, 40, "500"),
891
+ [FontStyle.H4_MEDIUM]: createFontStyle(InterMedium, 24, 32, "500"),
892
+ [FontStyle.H5_MEDIUM]: createFontStyle(InterMedium, 20, 28, "500"),
893
+ [FontStyle.H6_MEDIUM]: createFontStyle(InterMedium, 16, 20, "500"),
894
+ [FontStyle.H7_MEDIUM]: createFontStyle(InterMedium, 20, 28, "500"),
895
+ [FontStyle.H8_MEDIUM]: createFontStyle(InterMedium, 18, 25.2, "500"),
896
+ [FontStyle.H1_LIGHT]: createFontStyle(InterLight, 48, 56, "300"),
897
+ [FontStyle.H2_LIGHT]: createFontStyle(InterLight, 40, 48, "300"),
898
+ [FontStyle.H3_LIGHT]: createFontStyle(InterLight, 32, 40, "300"),
899
+ [FontStyle.H4_LIGHT]: createFontStyle(InterLight, 24, 32, "300"),
900
+ [FontStyle.H5_LIGHT]: createFontStyle(InterLight, 20, 28, "300"),
901
+ [FontStyle.H6_LIGHT]: createFontStyle(InterLight, 16, 20, "300"),
902
+ [FontStyle.H7_LIGHT]: createFontStyle(InterLight, 20, 28, "300"),
903
+ [FontStyle.H8_LIGHT]: createFontStyle(InterLight, 18, 25.2, "300"),
904
+ [FontStyle.H1_LINK]: createFontStyle(InterLight, 48, 56, "300"),
905
+ [FontStyle.H2_LINK]: createFontStyle(InterLight, 40, 48, "300"),
906
+ [FontStyle.H3_LINK]: createFontStyle(InterLight, 32, 40, "300"),
907
+ [FontStyle.H4_LINK]: createFontStyle(InterLight, 24, 32, "300"),
908
+ [FontStyle.H5_LINK]: createFontStyle(InterLight, 20, 28, "300"),
909
+ [FontStyle.H6_LINK]: createFontStyle(InterLight, 16, 20, "500"),
910
+ [FontStyle.H7_LINK]: createFontStyle(InterLight, 20, 28, "500"),
911
+ [FontStyle.H8_LINK]: createFontStyle(InterLight, 18, 25.2, "500"),
897
912
  // Lifestyle body styles
898
- [FontStyle.BODY1_BOLD]: createFontStyle(InterBold, 16, 20),
899
- [FontStyle.BODY2_BOLD]: createFontStyle(InterBold, 14, 18),
900
- [FontStyle.BODY3_BOLD]: createFontStyle(InterBold, 12, 16),
901
- [FontStyle.BODY4_BOLD]: createFontStyle(InterBold, 11, 12),
902
- [FontStyle.BODY1_MEDIUM]: createFontStyle(InterMedium, 16, 20),
903
- [FontStyle.BODY2_MEDIUM]: createFontStyle(InterMedium, 14, 18),
904
- [FontStyle.BODY3_MEDIUM]: createFontStyle(InterMedium, 12, 16),
905
- [FontStyle.BODY4_MEDIUM]: createFontStyle(InterMedium, 11, 12),
906
- [FontStyle.BODY1_LIGHT]: createFontStyle(InterLight, 16, 20),
907
- [FontStyle.BODY2_LIGHT]: createFontStyle(InterLight, 14, 18),
908
- [FontStyle.BODY3_LIGHT]: createFontStyle(InterLight, 12, 16),
909
- [FontStyle.BODY4_LIGHT]: createFontStyle(InterLight, 11, 12),
910
- [FontStyle.BODY1_LINK]: createFontStyle(InterLight, 16, 20),
911
- [FontStyle.BODY2_LINK]: createFontStyle(InterLight, 14, 18),
912
- [FontStyle.BODY3_LINK]: createFontStyle(InterLight, 12, 16),
913
- [FontStyle.BODY4_LINK]: createFontStyle(InterLight, 11, 12)
913
+ [FontStyle.BODY1_BOLD]: createFontStyle(InterBold, 16, 20, "700"),
914
+ [FontStyle.BODY2_BOLD]: createFontStyle(InterBold, 14, 18, "700"),
915
+ [FontStyle.BODY3_BOLD]: createFontStyle(InterBold, 12, 16, "700"),
916
+ [FontStyle.BODY4_BOLD]: createFontStyle(InterBold, 11, 12, "700"),
917
+ [FontStyle.BODY1_MEDIUM]: createFontStyle(InterMedium, 16, 20, "500"),
918
+ [FontStyle.BODY2_MEDIUM]: createFontStyle(InterMedium, 14, 18, "500"),
919
+ [FontStyle.BODY3_MEDIUM]: createFontStyle(InterMedium, 12, 16, "500"),
920
+ [FontStyle.BODY4_MEDIUM]: createFontStyle(InterMedium, 11, 12, "500"),
921
+ [FontStyle.BODY1_LIGHT]: createFontStyle(InterLight, 16, 20, "300"),
922
+ [FontStyle.BODY2_LIGHT]: createFontStyle(InterLight, 14, 18, "300"),
923
+ [FontStyle.BODY3_LIGHT]: createFontStyle(InterLight, 12, 16, "300"),
924
+ [FontStyle.BODY4_LIGHT]: createFontStyle(InterLight, 11, 12, "300"),
925
+ [FontStyle.BODY1_LINK]: createFontStyle(InterLight, 16, 20, "500"),
926
+ [FontStyle.BODY2_LINK]: createFontStyle(InterLight, 14, 18, "500"),
927
+ [FontStyle.BODY3_LINK]: createFontStyle(InterLight, 12, 16, "500"),
928
+ [FontStyle.BODY4_LINK]: createFontStyle(InterLight, 11, 12, "500")
914
929
  };
915
930
 
916
931
  const CustomTypography = ({
@@ -2399,7 +2414,7 @@ const CustomTextInput = ({
2399
2414
  const CustomTooltip = (props) => {
2400
2415
  const { triggerElement, contentStyle } = props;
2401
2416
  return /* @__PURE__ */ React__default["default"].createElement(Tooltip__default["default"], { ...props, contentStyle: [contentStyle, {
2402
- borderRadius: 0
2417
+ borderRadius: DHRE_PADDING.MD
2403
2418
  }] }, triggerElement);
2404
2419
  };
2405
2420
 
@@ -3187,12 +3202,13 @@ const Accordion = ({
3187
3202
  return /* @__PURE__ */ React__default["default"].createElement(
3188
3203
  reactNative.View,
3189
3204
  {
3190
- style: [{
3191
- ...styles$l.container,
3192
- borderBottomColor: theme.SURFACE_PRIMARY_TRANSPARENT,
3193
- ...containerStyle,
3194
- borderRadius: 0
3195
- }],
3205
+ style: [
3206
+ {
3207
+ ...styles$l.container,
3208
+ borderRadius: 0,
3209
+ ...containerStyle
3210
+ }
3211
+ ],
3196
3212
  testID: testId
3197
3213
  },
3198
3214
  /* @__PURE__ */ React__default["default"].createElement(
@@ -3220,16 +3236,22 @@ const Accordion = ({
3220
3236
  }) : null
3221
3237
  ),
3222
3238
  optionalElement ? optionalElement() : null,
3223
- isOpen && /* @__PURE__ */ React__default["default"].createElement(reactNative.Animated.View, { style: [styles$l.content, slideAnimation && { height: cardHeight }] }, /* @__PURE__ */ React__default["default"].createElement(
3224
- reactNative.View,
3239
+ isOpen && /* @__PURE__ */ React__default["default"].createElement(
3240
+ reactNative.Animated.View,
3225
3241
  {
3226
- ref: contentRef,
3227
- onLayout: (event) => {
3228
- setContentHeight(event.nativeEvent.layout.height);
3229
- }
3242
+ style: [styles$l.content, slideAnimation && { height: cardHeight }]
3230
3243
  },
3231
- children
3232
- ))
3244
+ /* @__PURE__ */ React__default["default"].createElement(
3245
+ reactNative.View,
3246
+ {
3247
+ ref: contentRef,
3248
+ onLayout: (event) => {
3249
+ setContentHeight(event.nativeEvent.layout.height);
3250
+ }
3251
+ },
3252
+ children
3253
+ )
3254
+ )
3233
3255
  );
3234
3256
  };
3235
3257
  var Accordion$1 = withThemeProvider(Accordion);
@@ -3859,7 +3881,8 @@ const CustomIcon = ({
3859
3881
  titleStyle,
3860
3882
  type,
3861
3883
  size = "large",
3862
- labelPosition
3884
+ labelPosition,
3885
+ outlinedBackgroundColor
3863
3886
  }) => {
3864
3887
  const { theme } = useTheme();
3865
3888
  const sizeSpec = size ? ICON_SIZE_SPEC[size] : null;
@@ -3928,7 +3951,7 @@ const CustomIcon = ({
3928
3951
  {
3929
3952
  width: innerSize,
3930
3953
  height: innerSize,
3931
- backgroundColor: theme[Theme.SURFACE_PRIMARY],
3954
+ backgroundColor: outlinedBackgroundColor ?? theme[Theme.SURFACE_PRIMARY],
3932
3955
  padding
3933
3956
  }
3934
3957
  ]
@@ -10668,25 +10691,75 @@ const styles$d = reactNative.StyleSheet.create({
10668
10691
  var ContactModel = withThemeProvider(ContactModal);
10669
10692
 
10670
10693
  const styles$c = reactNative.StyleSheet.create({
10694
+ // Outer card: wraps Calendar (which includes the custom header via renderHeader)
10695
+ // and provides the dark-blue background + rounded corners.
10696
+ calendarCard: {
10697
+ borderRadius: moderateScale(12),
10698
+ padding: moderateScale(16),
10699
+ overflow: "hidden"
10700
+ },
10701
+ // Rendered via Calendar's renderHeader prop — sits inside the card layout tree.
10702
+ // flex: 1 is required so justifyContent: 'space-between' works across the full row.
10703
+ calendarHeader: {
10704
+ flex: 1,
10705
+ flexDirection: "row",
10706
+ justifyContent: "space-between",
10707
+ alignItems: "center",
10708
+ paddingBottom: verticalScale(16),
10709
+ borderBottomWidth: 1
10710
+ },
10711
+ monthText: {
10712
+ fontSize: 14,
10713
+ fontWeight: "300",
10714
+ lineHeight: 18
10715
+ },
10716
+ arrowsContainer: {
10717
+ flexDirection: "row",
10718
+ gap: horizontalScale(24)
10719
+ },
10671
10720
  applyButton: {
10672
- marginTop: verticalScale(50),
10673
- paddingVertical: verticalScale(14),
10721
+ marginTop: verticalScale(16),
10722
+ height: verticalScale(48),
10723
+ minHeight: verticalScale(48),
10724
+ paddingHorizontal: horizontalScale(24),
10725
+ paddingVertical: verticalScale(12),
10674
10726
  justifyContent: "center",
10675
10727
  alignItems: "center",
10676
- borderRadius: 0
10677
- },
10678
- applyButtonText: {
10679
- ...FONT_STYLES.L1_REGULAR
10728
+ borderRadius: moderateScale(100),
10729
+ borderWidth: 1
10680
10730
  }
10681
10731
  });
10682
10732
 
10683
10733
  const DateRangePicker = (props) => {
10684
- const { onButtonPress, btnTitle = "Apply" } = props;
10734
+ const {
10735
+ onButtonPress,
10736
+ btnTitle = "Apply",
10737
+ style: _consumerStyle,
10738
+ theme: _consumerTheme,
10739
+ ...calendarProps
10740
+ } = props;
10685
10741
  const [selectedRange, setSelectedRange] = React.useState({
10686
10742
  startDate: "",
10687
10743
  endDate: ""
10688
10744
  });
10689
- const { theme, mode } = useTheme();
10745
+ const [currentMonth, setCurrentMonth] = React.useState(/* @__PURE__ */ new Date());
10746
+ const { theme } = useTheme();
10747
+ const prevMonth = () => setCurrentMonth((prev) => {
10748
+ const d = new Date(prev);
10749
+ d.setMonth(d.getMonth() - 1);
10750
+ return d;
10751
+ });
10752
+ const nextMonth = () => setCurrentMonth((prev) => {
10753
+ const d = new Date(prev);
10754
+ d.setMonth(d.getMonth() + 1);
10755
+ return d;
10756
+ });
10757
+ const monthKey = `${currentMonth.getFullYear()}-${currentMonth.getMonth()}`;
10758
+ const currentDateStr = currentMonth.toISOString().split("T")[0];
10759
+ const monthLabel = currentMonth.toLocaleDateString("en-US", {
10760
+ month: "long",
10761
+ year: "numeric"
10762
+ });
10690
10763
  const onDayPress = (day) => {
10691
10764
  const { dateString } = day;
10692
10765
  const { startDate, endDate } = selectedRange;
@@ -10709,65 +10782,168 @@ const DateRangePicker = (props) => {
10709
10782
  while (start < end) {
10710
10783
  start.setDate(start.getDate() + 1);
10711
10784
  markedDates[start.toISOString().split("T")[0]] = {
10712
- color: NAKHEEL_DEFAULT.NAKHEEL_BACKGROUND_SANDY,
10713
- textColor: NAKHEEL_DEFAULT.NAKHEEL_TEXT_COLOR
10785
+ color: theme.SURFACE_PRIMARY_TRANSPARENT,
10786
+ textColor: theme.CONTENT_PRIMARY
10714
10787
  };
10715
10788
  }
10716
10789
  }
10717
10790
  if (startDate) {
10718
10791
  markedDates[startDate] = {
10719
10792
  startingDay: true,
10720
- textColor: theme.SURFACE_SECONDARY,
10721
- customContainerStyle: mode === "dark" ? { backgroundColor: theme.SURFACE_INVERTED } : {
10722
- backgroundColor: theme.SURFACE_INVERTED
10793
+ textColor: theme.CONTENT_INVERTED,
10794
+ customContainerStyle: {
10795
+ backgroundColor: theme.SURFACE_INVERTED,
10796
+ borderWidth: 1,
10797
+ borderColor: theme.NOTIFICATIONS_HIGHLIGHT,
10798
+ borderRadius: 200,
10799
+ width: moderateScale(36),
10800
+ height: moderateScale(36),
10801
+ alignItems: "center",
10802
+ justifyContent: "center"
10723
10803
  }
10724
10804
  };
10725
10805
  }
10726
10806
  if (endDate) {
10727
10807
  markedDates[endDate] = {
10728
10808
  endingDay: true,
10729
- color: NAKHEEL_DEFAULT.NAKHEEL_BACKGROUND_SANDY,
10730
- textColor: theme.SURFACE_SECONDARY,
10731
- customContainerStyle: mode === "dark" ? { backgroundColor: theme.SURFACE_INVERTED } : {
10732
- backgroundColor: theme.SURFACE_INVERTED
10809
+ color: theme.SURFACE_PRIMARY_TRANSPARENT,
10810
+ textColor: theme.CONTENT_INVERTED,
10811
+ customContainerStyle: {
10812
+ backgroundColor: theme.SURFACE_INVERTED,
10813
+ borderWidth: 1,
10814
+ borderColor: theme.NOTIFICATIONS_HIGHLIGHT,
10815
+ borderRadius: 200,
10816
+ width: moderateScale(36),
10817
+ height: moderateScale(36),
10818
+ alignItems: "center",
10819
+ justifyContent: "center"
10733
10820
  }
10734
10821
  };
10735
10822
  markedDates[startDate] = {
10736
10823
  startingDay: true,
10737
- color: NAKHEEL_DEFAULT.NAKHEEL_BACKGROUND_SANDY,
10738
- textColor: theme.SURFACE_SECONDARY,
10739
- customContainerStyle: mode === "dark" ? { backgroundColor: theme.SURFACE_INVERTED } : {
10740
- backgroundColor: theme.SURFACE_INVERTED
10824
+ color: theme.SURFACE_PRIMARY_TRANSPARENT,
10825
+ textColor: theme.CONTENT_INVERTED,
10826
+ customContainerStyle: {
10827
+ backgroundColor: theme.SURFACE_INVERTED,
10828
+ borderWidth: 1,
10829
+ borderColor: theme.NOTIFICATIONS_HIGHLIGHT,
10830
+ borderRadius: 200,
10831
+ width: moderateScale(36),
10832
+ height: moderateScale(36),
10833
+ alignItems: "center",
10834
+ justifyContent: "center"
10741
10835
  }
10742
10836
  };
10743
10837
  }
10744
10838
  return markedDates;
10745
10839
  };
10746
10840
  const isButtonDisabled = !selectedRange.startDate || !selectedRange.endDate;
10747
- return /* @__PURE__ */ React__default["default"].createElement(reactNative.View, null, /* @__PURE__ */ React__default["default"].createElement(
10841
+ const renderCalendarHeader = () => /* @__PURE__ */ React__default["default"].createElement(
10842
+ reactNative.View,
10843
+ {
10844
+ style: [
10845
+ styles$c.calendarHeader,
10846
+ { borderBottomColor: theme.STROKE_TERTIARY }
10847
+ ]
10848
+ },
10849
+ /* @__PURE__ */ React__default["default"].createElement(reactNative.Text, { style: [styles$c.monthText, { color: theme.CONTENT_PRIMARY }] }, monthLabel),
10850
+ /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: styles$c.arrowsContainer }, /* @__PURE__ */ React__default["default"].createElement(
10851
+ reactNative.TouchableOpacity,
10852
+ {
10853
+ onPress: prevMonth,
10854
+ hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }
10855
+ },
10856
+ /* @__PURE__ */ React__default["default"].createElement(Svg.Svg, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ React__default["default"].createElement(
10857
+ Svg.Path,
10858
+ {
10859
+ d: "M15 19.5L7.5 12L15 4.5",
10860
+ stroke: theme.CONTENT_PRIMARY,
10861
+ strokeWidth: 1.5,
10862
+ strokeLinecap: "round",
10863
+ strokeLinejoin: "round"
10864
+ }
10865
+ ))
10866
+ ), /* @__PURE__ */ React__default["default"].createElement(
10867
+ reactNative.TouchableOpacity,
10868
+ {
10869
+ onPress: nextMonth,
10870
+ hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }
10871
+ },
10872
+ /* @__PURE__ */ React__default["default"].createElement(Svg.Svg, { width: 16, height: 16, viewBox: "0 0 18 18", fill: "none" }, /* @__PURE__ */ React__default["default"].createElement(
10873
+ Svg.Path,
10874
+ {
10875
+ d: "M6.75 3.375L12.375 9L6.75 14.625",
10876
+ stroke: theme.CONTENT_PRIMARY,
10877
+ strokeWidth: 1.5,
10878
+ strokeLinecap: "round",
10879
+ strokeLinejoin: "round"
10880
+ }
10881
+ ))
10882
+ ))
10883
+ );
10884
+ return /* @__PURE__ */ React__default["default"].createElement(reactNative.View, null, /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: [styles$c.calendarCard, { backgroundColor: theme.SURFACE_SECONDARY }] }, /* @__PURE__ */ React__default["default"].createElement(
10748
10885
  reactNativeCalendars.Calendar,
10749
10886
  {
10887
+ key: monthKey,
10888
+ current: currentDateStr,
10750
10889
  markedDates: getMarkedDates(),
10751
- mode: "date",
10752
10890
  markingType: "period",
10891
+ hideArrows: true,
10892
+ renderHeader: renderCalendarHeader,
10753
10893
  theme: {
10754
10894
  calendarBackground: "transparent",
10755
- arrowColor: theme.CONTENT_PRIMARY,
10756
- monthTextColor: theme.CONTENT_PRIMARY,
10757
- dayTextColor: theme.CONTENT_SECONDRY,
10758
- todayTextColor: NAKHEEL_DEFAULT.NAKHEEL_BACKGROUND_SANDY,
10759
- textDisabledColor: theme.CONTENT_DISABLE
10760
- },
10761
- style: {
10762
- backgroundColor: theme.SURFACE_SECONDARY,
10763
- color: theme.CONTENT_SECONDRY,
10764
- borderRadius: 0
10895
+ dayTextColor: theme.CONTENT_PRIMARY,
10896
+ textDisabledColor: theme.CONTENT_DISABLE,
10897
+ todayTextColor: theme.CONTENT_PRIMARY,
10898
+ textSectionTitleColor: theme.CONTENT_SECONDRY,
10899
+ textDayFontSize: 16,
10900
+ textDayFontWeight: "500",
10901
+ textDayHeaderFontSize: 11,
10902
+ textDayHeaderFontWeight: "300",
10903
+ // Reduce row gap from default 14px (7+7) to 4px (2+2) to match Figma.
10904
+ weekVerticalMargin: 2,
10905
+ // Remove the calendar body's default 5px horizontal padding so the date
10906
+ // grid aligns flush with the custom renderHeader content.
10907
+ "stylesheet.calendar.main": {
10908
+ container: {
10909
+ paddingLeft: 0,
10910
+ paddingRight: 0,
10911
+ backgroundColor: "transparent"
10912
+ }
10913
+ },
10914
+ // Strip Calendar header container's default padding/margin, zero the
10915
+ // day-names row top margin, and apply uppercase + correct sizing to
10916
+ // each day abbreviation label.
10917
+ "stylesheet.calendar.header": {
10918
+ header: {
10919
+ paddingLeft: 0,
10920
+ paddingRight: 0,
10921
+ marginTop: 0,
10922
+ marginBottom: 0
10923
+ },
10924
+ week: {
10925
+ marginTop: 8,
10926
+ flexDirection: "row",
10927
+ justifyContent: "space-around"
10928
+ },
10929
+ dayHeader: {
10930
+ marginTop: 2,
10931
+ marginBottom: 7,
10932
+ width: 32,
10933
+ textAlign: "center",
10934
+ textTransform: "uppercase",
10935
+ fontSize: 11,
10936
+ fontWeight: "300",
10937
+ color: theme.CONTENT_SECONDRY
10938
+ }
10939
+ }
10765
10940
  },
10941
+ style: { backgroundColor: "transparent", borderRadius: 0 },
10766
10942
  onDayPress,
10767
10943
  firstDay: 1,
10768
- ...props
10944
+ ...calendarProps
10769
10945
  }
10770
- ), /* @__PURE__ */ React__default["default"].createElement(
10946
+ )), /* @__PURE__ */ React__default["default"].createElement(
10771
10947
  Button,
10772
10948
  {
10773
10949
  title: btnTitle,
@@ -10776,7 +10952,8 @@ const DateRangePicker = (props) => {
10776
10952
  },
10777
10953
  containerStyle: {
10778
10954
  ...styles$c.applyButton,
10779
- backgroundColor: theme.SURFACE_INVERTED
10955
+ backgroundColor: theme.SURFACE_INVERTED,
10956
+ borderColor: theme.NOTIFICATIONS_HIGHLIGHT
10780
10957
  },
10781
10958
  textStyle: { color: theme.CONTENT_INVERTED },
10782
10959
  disabled: isButtonDisabled
@@ -11418,7 +11595,7 @@ const CommonTextInput = (props) => {
11418
11595
  const containerBackground = isDisabled ? theme[Theme.SURFACE_PRIMARY] : theme[Theme.SURFACE_TERTIARY_TRANSPARENT];
11419
11596
  const inputTextColor = isDisabled ? theme[Theme.CONTENT_TERTIARY] : theme[Theme.CONTENT_PRIMARY];
11420
11597
  const placeholderColor = theme[Theme.CONTENT_SECONDRY];
11421
- const labelColor = isError ? theme[Theme.ERROR] : isDisabled ? theme[Theme.CONTENT_TERTIARY] : isFocused ? theme[Theme.CONTENT_PRIMARY] : theme[Theme.CONTENT_TERTIARY];
11598
+ const labelColor = isError ? theme[Theme.ERROR] : isDisabled ? theme[Theme.CONTENT_TERTIARY] : theme[Theme.CONTENT_PRIMARY];
11422
11599
  const helperColor = isError ? theme[Theme.ERROR] : isDisabled ? theme[Theme.CONTENT_TERTIARY] : theme[Theme.CONTENT_SECONDRY];
11423
11600
  const helperMessage = errorMessage || helperText;
11424
11601
  return /* @__PURE__ */ React__default["default"].createElement(reactNative.Pressable, { onPress: handlePress, style: styles$8.container }, /* @__PURE__ */ React__default["default"].createElement(
@@ -11584,7 +11761,7 @@ const CustomDropdown = (props) => {
11584
11761
  const valueTextColor = disable ? theme.CONTENT_TERTIARY : hasValue ? theme.CONTENT_PRIMARY : theme.CONTENT_SECONDRY;
11585
11762
  const helperColor = isError ? theme.ERROR : theme.CONTENT_SECONDRY;
11586
11763
  const helperMessage = errorMessage || helperText;
11587
- const fieldBackground = theme.SURFACE_SECONDARY;
11764
+ const fieldBackground = theme.SURFACE_TERTIARY_TRANSPARENT;
11588
11765
  const labelColor = theme.CONTENT_PRIMARY;
11589
11766
  const renderLabel = () => {
11590
11767
  if (value || isFocus) {
@@ -11595,8 +11772,8 @@ const CustomDropdown = (props) => {
11595
11772
  styles$7.label,
11596
11773
  FONT_STYLES[FontStyle.BODY2_LIGHT],
11597
11774
  {
11598
- backgroundColor: fieldBackground,
11599
- color: labelColor
11775
+ color: labelColor,
11776
+ backgroundColor: theme.SURFACE_PRIMARY
11600
11777
  },
11601
11778
  labelStyle,
11602
11779
  isFocus && (labelFocusStyle ?? { color: labelColor })
@@ -11679,7 +11856,7 @@ const CustomDropdown = (props) => {
11679
11856
  containerStyle: [
11680
11857
  {
11681
11858
  marginTop: verticalScale(5),
11682
- backgroundColor: fieldBackground,
11859
+ backgroundColor: theme.SURFACE_SECONDARY,
11683
11860
  borderColor: theme.STROKE_TERTIARY,
11684
11861
  borderWidth: 1,
11685
11862
  borderRadius: DHRE_RADIUS_BASE.RADIUS_8
@@ -13112,21 +13289,32 @@ var index$1 = withThemeProvider(AppointmentCard);
13112
13289
  const styles$1 = reactNative.StyleSheet.create({
13113
13290
  container: {
13114
13291
  flexDirection: "row",
13115
- justifyContent: "space-between",
13116
13292
  alignItems: "center",
13117
- paddingHorizontal: horizontalScale(24),
13118
- paddingVertical: verticalScale(16),
13119
- borderTopWidth: 1,
13120
- borderBottomWidth: 1
13293
+ padding: moderateScale(12),
13294
+ columnGap: horizontalScale(12)
13295
+ },
13296
+ imageWrapper: {
13297
+ width: moderateScale(112),
13298
+ height: moderateScale(112),
13299
+ borderRadius: moderateScale(8),
13300
+ overflow: "hidden"
13301
+ },
13302
+ brandBadge: {
13303
+ position: "absolute",
13304
+ top: moderateScale(8),
13305
+ right: moderateScale(8),
13306
+ // width: moderateScale(40),
13307
+ // height: moderateScale(40),
13308
+ // borderRadius: moderateScale(120),
13309
+ overflow: "hidden",
13310
+ // backgroundColor: '#FFFFFF',
13311
+ alignItems: "center",
13312
+ justifyContent: "center"
13121
13313
  },
13122
13314
  propertyInfo: {
13123
13315
  flex: 1,
13124
- rowGap: verticalScale(4)
13125
- },
13126
- arrowIconContainer: {
13127
- width: moderateScale(32),
13128
- height: moderateScale(32),
13129
- borderRadius: moderateScale(25)
13316
+ justifyContent: "center",
13317
+ rowGap: verticalScale(8)
13130
13318
  },
13131
13319
  propertyNumber: {
13132
13320
  flexDirection: "row",
@@ -13147,57 +13335,60 @@ const PropertyDetails = ({
13147
13335
  subTitleStyle,
13148
13336
  propertyNumberStyle,
13149
13337
  onRightIconPress,
13150
- titleStyle
13338
+ titleStyle,
13339
+ isSelected = false
13151
13340
  }) => {
13152
13341
  const { theme } = useTheme();
13153
13342
  return /* @__PURE__ */ React__default["default"].createElement(
13154
13343
  reactNative.View,
13155
13344
  {
13156
- style: {
13157
- ...styles$1.container,
13158
- backgroundColor: theme.SURFACE_SECONDARY,
13159
- borderColor: theme.BORDER_SEPERATOR_HEADER,
13160
- ...containerStyle,
13161
- ...{ borderRadius: 0 }
13162
- }
13345
+ style: [
13346
+ styles$1.container,
13347
+ {
13348
+ backgroundColor: theme.SURFACE_PRIMARY,
13349
+ borderColor: isSelected ? theme.STROKE_ACTIVE : theme.STROKE_TERTIARY
13350
+ },
13351
+ isSelected && {
13352
+ shadowColor: "rgba(0,157,179,0.1)",
13353
+ shadowOffset: { width: 0, height: 4 },
13354
+ shadowOpacity: 1,
13355
+ shadowRadius: 10,
13356
+ elevation: 4
13357
+ },
13358
+ containerStyle
13359
+ ]
13163
13360
  },
13164
- React__default["default"].cloneElement(icon, {
13165
- width: moderateScale(87),
13166
- height: moderateScale(87),
13167
- borderRadius: 0
13168
- }),
13169
- /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: styles$1.propertyInfo }, brandIcon, /* @__PURE__ */ React__default["default"].createElement(
13361
+ /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: styles$1.imageWrapper }, React__default["default"].cloneElement(icon, {
13362
+ width: "100%",
13363
+ height: "100%",
13364
+ borderRadius: DHRE_RADIUS.MD
13365
+ }), brandIcon && /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: styles$1.brandBadge }, brandIcon)),
13366
+ /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: styles$1.propertyInfo }, propertyNumber && /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: [styles$1.propertyNumber, propertyNumberStyle] }, /* @__PURE__ */ React__default["default"].createElement(
13170
13367
  CustomTypography,
13171
13368
  {
13172
- text: title,
13173
- variant: FontStyle.L2_REGULAR,
13174
- style: [{ color: theme.CONTENT_PRIMARY }, titleStyle]
13369
+ text: propertyNumber,
13370
+ variant: FontStyle.BODY3_LIGHT,
13371
+ style: { color: theme.CONTENT_SECONDRY }
13175
13372
  }
13176
- ), /* @__PURE__ */ React__default["default"].createElement(
13373
+ ), hintIcon), /* @__PURE__ */ React__default["default"].createElement(
13177
13374
  CustomTypography,
13178
13375
  {
13179
13376
  text: subTitle,
13180
- variant: FontStyle.L1_REGULAR,
13377
+ variant: FontStyle.BODY4_LIGHT,
13181
13378
  style: [{ color: theme.CONTENT_PRIMARY }, subTitleStyle]
13182
13379
  }
13183
- ), propertyNumber && /* @__PURE__ */ React__default["default"].createElement(reactNative.View, { style: [styles$1.propertyNumber, propertyNumberStyle] }, /* @__PURE__ */ React__default["default"].createElement(
13380
+ ), /* @__PURE__ */ React__default["default"].createElement(
13184
13381
  CustomTypography,
13185
13382
  {
13186
- text: propertyNumber,
13187
- variant: FontStyle.L2_REGULAR,
13188
- style: {
13189
- color: theme.CONTENT_SECONDRY
13190
- }
13383
+ text: title,
13384
+ variant: FontStyle.BODY1_MEDIUM,
13385
+ style: [{ color: theme.CONTENT_PRIMARY }, titleStyle]
13191
13386
  }
13192
- ), hintIcon)),
13387
+ )),
13193
13388
  btnIcon && /* @__PURE__ */ React__default["default"].createElement(
13194
13389
  CustomIcon$1,
13195
13390
  {
13196
13391
  icon: btnIcon,
13197
- containerStyle: {
13198
- ...styles$1.arrowIconContainer,
13199
- backgroundColor: theme.SURFACE_INVERTED
13200
- },
13201
13392
  onPress: onRightIconPress
13202
13393
  }
13203
13394
  )
@@ -13306,6 +13497,8 @@ exports.DHRE_COLORS_PRIMARY = DHRE_COLORS_PRIMARY;
13306
13497
  exports.DHRE_COLORS_SECONDARY = DHRE_COLORS_SECONDARY;
13307
13498
  exports.DHRE_COLORS_TEXT = DHRE_COLORS_TEXT;
13308
13499
  exports.DHRE_COMPONENT_HEIGHT = DHRE_COMPONENT_HEIGHT;
13500
+ exports.DHRE_CONFIRMATION_BASE_GRADIENT = DHRE_CONFIRMATION_BASE_GRADIENT;
13501
+ exports.DHRE_CONFIRMATION_ERROR_GRADIENT = DHRE_CONFIRMATION_ERROR_GRADIENT;
13309
13502
  exports.DHRE_CORE_BLUE = DHRE_CORE_BLUE;
13310
13503
  exports.DHRE_CYAN_HIGHLIGHT = DHRE_CYAN_HIGHLIGHT;
13311
13504
  exports.DHRE_DEEP_SPACE_BLUE = DHRE_DEEP_SPACE_BLUE;