@xsolla/xui-calendar 0.173.2 → 0.174.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Calendar.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/CalendarHeader.tsx","../../src/utils.ts","../../src/CalendarGrid.tsx","../../src/CalendarChips.tsx","../../src/DualCalendar.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { addMonths, subDays, subMonths, startOfDay } from \"date-fns\";\nimport { CalendarHeader } from \"./CalendarHeader\";\nimport { CalendarGrid } from \"./CalendarGrid\";\nimport { CalendarChips } from \"./CalendarChips\";\nimport type { CalendarProps } from \"./types\";\n\nexport const Calendar = forwardRef<any, CalendarProps>(\n (\n {\n locale = \"enUS\",\n onChange,\n startDate,\n endDate,\n selectedDate,\n selectsRange = false,\n contextMenuMaxHeight,\n topContent,\n bottomContent,\n chips,\n activeChip,\n onChipSelect,\n testID,\n minDate,\n maxDate,\n firstDayOfWeek = 0,\n month,\n initialMonth,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const [currentMonth, setCurrentMonth] = useState<Date>(\n (month || initialMonth || selectedDate || startDate || new Date()) as Date\n );\n const [selectedStartDate, setSelectedStartDate] = useState<\n Date | null | undefined\n >(startDate);\n const [selectedEndDate, setSelectedEndDate] = useState<\n Date | null | undefined\n >(endDate);\n const [locSelectedDate, setLocSelectedDate] = useState<\n Date | null | undefined\n >(selectedDate);\n const [selectingRange, setSelectingRange] = useState<Date | null>(null);\n\n useEffect(() => {\n setSelectedStartDate(startDate);\n setSelectedEndDate(endDate);\n setLocSelectedDate(selectedDate);\n if (month !== undefined) {\n setCurrentMonth(month);\n }\n }, [startDate, endDate, selectedDate, month]);\n\n const handleChange = useCallback(\n (date: Date) => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n\n if (!selectsRange) {\n setLocSelectedDate(newDate);\n onChange?.(newDate);\n } else {\n if (!selectedStartDate || (selectedStartDate && selectedEndDate)) {\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n setSelectingRange(newDate);\n onChange?.([newDate, null]);\n } else {\n const start =\n selectedStartDate < newDate ? selectedStartDate : newDate;\n const end =\n selectedStartDate < newDate ? newDate : selectedStartDate;\n setSelectedStartDate(start);\n setSelectedEndDate(end);\n setSelectingRange(null);\n onChange?.([start, end]);\n }\n }\n },\n [onChange, selectsRange, selectedStartDate, selectedEndDate]\n );\n\n const decreaseMonth = useCallback(\n () => setCurrentMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseMonth = useCallback(\n () => setCurrentMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeMonth = useCallback(\n (m: number) =>\n setCurrentMonth((prev) => new Date(prev.getFullYear(), m, 1)),\n []\n );\n const changeYear = useCallback(\n (y: number) => setCurrentMonth((prev) => new Date(y, prev.getMonth(), 1)),\n []\n );\n\n const handleChipSelect = useCallback(\n (value: string | null) => {\n onChipSelect?.(value);\n\n const chip = chips?.find((c) => c.value === value);\n if (!chip || chip.days === undefined) return;\n\n const today = startOfDay(new Date());\n\n if (chip.days === 0) {\n if (selectsRange) {\n setSelectedStartDate(today);\n setSelectedEndDate(today);\n setSelectingRange(null);\n onChange?.([today, today]);\n } else {\n setLocSelectedDate(today);\n onChange?.(today);\n }\n setCurrentMonth(today);\n return;\n }\n\n const start = subDays(today, chip.days);\n if (selectsRange) {\n setSelectedStartDate(start);\n setSelectedEndDate(today);\n setSelectingRange(null);\n onChange?.([start, today]);\n } else {\n setLocSelectedDate(start);\n onChange?.(start);\n }\n setCurrentMonth(start);\n },\n [chips, selectsRange, onChange, onChipSelect]\n );\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={theme.shape.contextMenu.md.borderRadius}\n padding={16}\n overflow=\"hidden\"\n style={{\n boxShadow:\n \"0px 2px 3px 0px rgba(7, 7, 8, 0.2), 0px 6px 10px 4px rgba(7, 7, 8, 0.1)\",\n width: 312,\n }}\n >\n {topContent?.({ close: () => {} })}\n\n {chips && chips.length > 0 && (\n <CalendarChips\n chips={chips}\n activeChip={activeChip}\n onChipSelect={handleChipSelect}\n />\n )}\n\n <CalendarHeader\n monthDate={currentMonth}\n decreaseMonth={decreaseMonth}\n increaseMonth={increaseMonth}\n changeYear={changeYear}\n changeMonth={changeMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n />\n\n <CalendarGrid\n currentMonth={currentMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange={selectsRange}\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectedDate={locSelectedDate}\n selectingRange={selectingRange}\n onDayPress={handleChange}\n />\n\n {bottomContent?.({ close: () => {} })}\n </Box>\n );\n }\n);\n\nCalendar.displayName = \"Calendar\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { useCallback, useMemo } from \"react\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport { Select } from \"@xsolla/xui-select\";\nimport { ArrowLeft, ArrowRight } from \"@xsolla/xui-icons-base\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { getMonthInLocale } from \"./utils\";\nimport type { CalendarHeaderProps } from \"./types\";\n\nconst months = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n];\n\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\n monthDate,\n decreaseMonth,\n increaseMonth,\n changeYear,\n changeMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n locale,\n minDate,\n maxDate,\n testID,\n}) => {\n const handleChangeMonth = useCallback(\n (value: any) => {\n changeMonth(months.indexOf(value as string));\n },\n [changeMonth]\n );\n\n const handleChangeYear = useCallback(\n (value: any) => {\n changeYear(parseInt(value as string, 10));\n },\n [changeYear]\n );\n\n const monthOptions = useMemo(() => {\n return months.map((month, index) => ({\n label: getMonthInLocale(index, locale),\n value: month,\n }));\n }, [locale]);\n\n const yearOptions = useMemo(() => {\n const options = [];\n const yearStart = minDate ? minDate.getFullYear() : 1900;\n const yearEnd = maxDate\n ? maxDate.getFullYear()\n : new Date().getFullYear() + 100;\n for (let i = yearEnd; i >= yearStart; i--) {\n options.push({ value: i.toString(), label: i.toString() });\n }\n return options;\n }, [minDate, maxDate]);\n\n return (\n <Box\n testID={testID}\n width=\"100%\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n marginBottom={16}\n gap={8}\n >\n <IconButton\n size=\"xs\"\n tone=\"mono\"\n variant=\"tertiary\"\n onPress={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n icon={<ArrowLeft size={16} />}\n aria-label=\"Previous month\"\n />\n\n <Box flexDirection=\"row\" flex={1} gap={4}>\n <Box flex={1.5}>\n <Select\n value={months[monthDate.getMonth()]}\n onChange={handleChangeMonth}\n options={monthOptions}\n size=\"sm\"\n />\n </Box>\n <Box flex={1}>\n <Select\n value={monthDate.getFullYear().toString()}\n onChange={handleChangeYear}\n options={yearOptions}\n size=\"sm\"\n />\n </Box>\n </Box>\n\n <IconButton\n size=\"xs\"\n tone=\"mono\"\n variant=\"tertiary\"\n onPress={increaseMonth}\n disabled={nextMonthButtonDisabled}\n icon={<ArrowRight size={16} />}\n aria-label=\"Next month\"\n />\n </Box>\n );\n};\n","import { format, setMonth } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport type { CalendarLocaleType } from \"./types\";\n\nconst defaultLocale = \"enUS\";\n\nexport function formatDate(\n date: Date,\n formatStr: string,\n locale: CalendarLocaleType = defaultLocale\n) {\n const localeObj = locales[locale] || locales[defaultLocale];\n\n return format(date, formatStr, {\n locale: localeObj,\n });\n}\n\nexport function getMonthInLocale(\n month: number,\n locale: CalendarLocaleType = defaultLocale\n) {\n return formatDate(setMonth(new Date(), month), \"LLLL\", locale);\n}\n","import React, { useMemo, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport {\n addDays,\n eachDayOfInterval,\n endOfDay,\n endOfMonth,\n endOfWeek,\n format,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isToday,\n isWithinInterval,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport type { CalendarGridProps } from \"./types\";\n\nexport const CalendarGrid: React.FC<CalendarGridProps> = ({\n currentMonth,\n locale = \"enUS\",\n firstDayOfWeek = 0,\n selectsRange = false,\n minDate,\n maxDate,\n startDate,\n endDate,\n selectedDate,\n selectingRange,\n onDayPress,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const localeObj = (locales as any)[locale] || locales.enUS;\n\n const monthStart = startOfMonth(currentMonth);\n const monthEnd = endOfMonth(currentMonth);\n const weekStartsOn = (firstDayOfWeek ?? 0) as any;\n const calendarStart = startOfWeek(monthStart, { weekStartsOn });\n const calendarEnd = endOfWeek(monthEnd, { weekStartsOn });\n\n const days = eachDayOfInterval({ start: calendarStart, end: calendarEnd });\n\n const weekDays = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => {\n const day = addDays(calendarStart, i);\n return format(day, \"EEEEEE\", { locale: localeObj });\n });\n }, [calendarStart, localeObj]);\n\n const weeks = useMemo(() => {\n const weekArray: Date[][] = [];\n for (let i = 0; i < days.length; i += 7) {\n weekArray.push(days.slice(i, i + 7));\n }\n return weekArray;\n }, [days]);\n\n const isDateDisabled = useCallback(\n (date: Date) => {\n if (minDate && isBefore(date, startOfDay(minDate))) return true;\n if (maxDate && isAfter(date, endOfDay(maxDate))) return true;\n return false;\n },\n [minDate, maxDate]\n );\n\n const isDateInRange = useCallback(\n (date: Date) => {\n if (!selectsRange || !startDate) return false;\n const rangeEnd = endDate || selectingRange;\n if (!rangeEnd) return false;\n const start = startDate < rangeEnd ? startDate : rangeEnd;\n const end = startDate < rangeEnd ? rangeEnd : startDate;\n return isWithinInterval(date, {\n start: startOfDay(start),\n end: endOfDay(end),\n });\n },\n [selectsRange, startDate, endDate, selectingRange]\n );\n\n return (\n <Box testID={testID}>\n <Box flexDirection=\"row\" justifyContent=\"space-between\" marginBottom={8}>\n {weekDays.map((day, i) => (\n <Box key={i} width={40} alignItems=\"center\">\n <Text\n fontSize={12}\n fontWeight=\"600\"\n color={theme.colors.content.tertiary}\n >\n {day.toUpperCase()}\n </Text>\n </Box>\n ))}\n </Box>\n\n <Box gap={2}>\n {weeks.map((week, i) => (\n <Box key={i} flexDirection=\"row\" justifyContent=\"space-between\">\n {week.map((day, j) => {\n const isOutsideMonth = !isSameMonth(day, currentMonth);\n const isSelected =\n (!selectsRange &&\n selectedDate &&\n isSameDay(day, selectedDate)) ||\n (selectsRange &&\n startDate &&\n endDate &&\n isSameDay(day, startDate) &&\n isSameDay(day, endDate));\n const isRangeStart =\n selectsRange && startDate && isSameDay(day, startDate);\n const isRangeEnd =\n selectsRange && endDate && isSameDay(day, endDate);\n const inRange = isDateInRange(day);\n const today = isToday(day);\n const disabled = isDateDisabled(day);\n\n let bgColor = \"transparent\";\n let textColor = theme.colors.content.primary;\n\n if (isSelected || isRangeStart || isRangeEnd) {\n bgColor = theme.colors.background.brand.primary;\n textColor = theme.colors.content.on.brand;\n } else if (inRange) {\n bgColor = theme.colors.overlay.brand;\n } else if (today) {\n bgColor = theme.colors.overlay.mono;\n }\n\n if (isOutsideMonth || disabled) {\n textColor = theme.colors.content.tertiary;\n }\n\n return (\n <Box\n key={j}\n width={40}\n height={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius={\n isSelected || isRangeStart || isRangeEnd ? 4 : 0\n }\n backgroundColor={bgColor}\n cursor={disabled || isOutsideMonth ? \"default\" : \"pointer\"}\n onPress={() =>\n !disabled && !isOutsideMonth && onDayPress?.(day)\n }\n hoverStyle={\n !disabled && !isOutsideMonth && !isSelected\n ? { backgroundColor: theme.colors.overlay.mono }\n : undefined\n }\n >\n <Text\n color={textColor}\n fontSize={14}\n fontWeight={\n isSelected || isRangeStart || isRangeEnd ? \"600\" : \"400\"\n }\n >\n {format(day, \"d\")}\n </Text>\n </Box>\n );\n })}\n </Box>\n ))}\n </Box>\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Tag } from \"@xsolla/xui-tag\";\nimport type { CalendarChipsProps } from \"./types\";\n\nexport const CalendarChips: React.FC<CalendarChipsProps> = ({\n chips,\n activeChip,\n onChipSelect,\n testID,\n}) => {\n if (!chips || chips.length === 0) return null;\n\n return (\n <Box\n testID={testID}\n flexDirection=\"row\"\n flexWrap=\"wrap\"\n gap={8}\n marginBottom={16}\n >\n {chips.map((chip) => {\n const isActive = activeChip === chip.value;\n return (\n <Box\n key={chip.value}\n onPress={() => onChipSelect?.(chip.value)}\n cursor=\"pointer\"\n >\n <Tag\n size=\"sm\"\n tone={isActive ? \"brand\" : \"primary\"}\n type={isActive ? \"solid\" : \"outlined\"}\n >\n {chip.label}\n </Tag>\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { forwardRef, useCallback, useEffect, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { addMonths, subDays, subMonths, startOfDay } from \"date-fns\";\nimport { CalendarHeader } from \"./CalendarHeader\";\nimport { CalendarGrid } from \"./CalendarGrid\";\nimport { CalendarChips } from \"./CalendarChips\";\nimport type { DualCalendarProps } from \"./types\";\n\nexport const DualCalendar = forwardRef<any, DualCalendarProps>(\n (\n {\n locale = \"enUS\",\n onChange,\n startDate,\n endDate,\n contextMenuMaxHeight,\n topContent,\n bottomContent,\n chips,\n activeChip,\n onChipSelect,\n testID,\n minDate,\n maxDate,\n firstDayOfWeek = 0,\n month,\n initialMonth,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const [leftMonth, setLeftMonth] = useState<Date>(\n (month || initialMonth || startDate || new Date()) as Date\n );\n const [selectedStartDate, setSelectedStartDate] = useState<\n Date | null | undefined\n >(startDate);\n const [selectedEndDate, setSelectedEndDate] = useState<\n Date | null | undefined\n >(endDate);\n const [selectingRange, setSelectingRange] = useState<Date | null>(null);\n\n const rightMonth = addMonths(leftMonth, 1);\n\n useEffect(() => {\n setSelectedStartDate(startDate);\n setSelectedEndDate(endDate);\n if (month !== undefined) {\n setLeftMonth(month);\n }\n }, [startDate, endDate, month]);\n\n const handleDayPress = useCallback(\n (date: Date) => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n\n if (!selectedStartDate || (selectedStartDate && selectedEndDate)) {\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n setSelectingRange(newDate);\n onChange?.([newDate, null]);\n } else {\n const start =\n selectedStartDate < newDate ? selectedStartDate : newDate;\n const end = selectedStartDate < newDate ? newDate : selectedStartDate;\n setSelectedStartDate(start);\n setSelectedEndDate(end);\n setSelectingRange(null);\n onChange?.([start, end]);\n }\n },\n [onChange, selectedStartDate, selectedEndDate]\n );\n\n const decreaseLeftMonth = useCallback(\n () => setLeftMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseLeftMonth = useCallback(\n () => setLeftMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeLeftMonth = useCallback(\n (m: number) => setLeftMonth((prev) => new Date(prev.getFullYear(), m, 1)),\n []\n );\n const changeLeftYear = useCallback(\n (y: number) => setLeftMonth((prev) => new Date(y, prev.getMonth(), 1)),\n []\n );\n\n const decreaseRightMonth = useCallback(\n () => setLeftMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseRightMonth = useCallback(\n () => setLeftMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeRightMonth = useCallback(\n (m: number) => setLeftMonth(new Date(rightMonth.getFullYear(), m - 1, 1)),\n [rightMonth]\n );\n const changeRightYear = useCallback(\n (y: number) => setLeftMonth(new Date(y, rightMonth.getMonth() - 1, 1)),\n [rightMonth]\n );\n\n const handleChipSelect = useCallback(\n (value: string | null) => {\n onChipSelect?.(value);\n\n const chip = chips?.find((c) => c.value === value);\n if (!chip || chip.days === undefined) return;\n\n const today = startOfDay(new Date());\n\n if (chip.days === 0) {\n setSelectedStartDate(today);\n setSelectedEndDate(today);\n setSelectingRange(null);\n setLeftMonth(today);\n onChange?.([today, today]);\n return;\n }\n\n const start = subDays(today, chip.days);\n setSelectedStartDate(start);\n setSelectedEndDate(today);\n setSelectingRange(null);\n setLeftMonth(start);\n onChange?.([start, today]);\n },\n [chips, onChange, onChipSelect]\n );\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={theme.shape.contextMenu.md.borderRadius}\n padding={16}\n overflow=\"hidden\"\n style={{\n boxShadow:\n \"0px 2px 3px 0px rgba(7, 7, 8, 0.2), 0px 6px 10px 4px rgba(7, 7, 8, 0.1)\",\n width: 624,\n }}\n >\n {topContent?.({ close: () => {} })}\n\n {chips && chips.length > 0 && (\n <CalendarChips\n chips={chips}\n activeChip={activeChip}\n onChipSelect={handleChipSelect}\n />\n )}\n\n <Box flexDirection=\"row\" gap={16}>\n <Box flex={1}>\n <CalendarHeader\n monthDate={leftMonth}\n decreaseMonth={decreaseLeftMonth}\n increaseMonth={increaseLeftMonth}\n changeYear={changeLeftYear}\n changeMonth={changeLeftMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n />\n\n <CalendarGrid\n currentMonth={leftMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectingRange={selectingRange}\n onDayPress={handleDayPress}\n />\n </Box>\n\n <Box flex={1}>\n <CalendarHeader\n monthDate={rightMonth}\n decreaseMonth={decreaseRightMonth}\n increaseMonth={increaseRightMonth}\n changeYear={changeRightYear}\n changeMonth={changeRightMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n />\n\n <CalendarGrid\n currentMonth={rightMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectingRange={selectingRange}\n onDayPress={handleDayPress}\n />\n </Box>\n </Box>\n\n {bottomContent?.({ close: () => {} })}\n </Box>\n );\n }\n);\n\nDualCalendar.displayName = \"DualCalendar\";\n"],"mappings":"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","names":["useCallback","jsx","useResolvedTheme","startOfDay","jsx","useMemo","useCallback","format","locales","jsx","jsxs","useMemo","useCallback","jsx","jsx","jsxs","useResolvedTheme","useCallback","startOfDay","forwardRef","useCallback","useEffect","useState","useResolvedTheme","addMonths","subDays","subMonths","startOfDay","jsx","jsxs","forwardRef","useResolvedTheme","useState","addMonths","useEffect","useCallback","subMonths","startOfDay","subDays"]}
1
+ {"version":3,"sources":["../../src/Calendar.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/CalendarHeader.tsx","../../src/utils.ts","../../src/CalendarGrid.tsx","../../src/CalendarChips.tsx","../../src/DualCalendar.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { addMonths, subDays, subMonths, startOfDay } from \"date-fns\";\nimport { CalendarHeader } from \"./CalendarHeader\";\nimport { CalendarGrid } from \"./CalendarGrid\";\nimport { CalendarChips } from \"./CalendarChips\";\nimport type { CalendarProps } from \"./types\";\n\nexport const Calendar = forwardRef<any, CalendarProps>(\n (\n {\n locale = \"enUS\",\n onChange,\n startDate,\n endDate,\n selectedDate,\n selectsRange = false,\n contextMenuMaxHeight,\n topContent,\n bottomContent,\n chips,\n activeChip,\n onChipSelect,\n testID,\n minDate,\n maxDate,\n firstDayOfWeek = 0,\n month,\n initialMonth,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const [currentMonth, setCurrentMonth] = useState<Date>(\n (month || initialMonth || selectedDate || startDate || new Date()) as Date\n );\n const [selectedStartDate, setSelectedStartDate] = useState<\n Date | null | undefined\n >(startDate);\n const [selectedEndDate, setSelectedEndDate] = useState<\n Date | null | undefined\n >(endDate);\n const [locSelectedDate, setLocSelectedDate] = useState<\n Date | null | undefined\n >(selectedDate);\n const [selectingRange, setSelectingRange] = useState<Date | null>(null);\n\n useEffect(() => {\n setSelectedStartDate(startDate);\n setSelectedEndDate(endDate);\n setLocSelectedDate(selectedDate);\n if (month !== undefined) {\n setCurrentMonth(month);\n }\n }, [startDate, endDate, selectedDate, month]);\n\n const handleChange = useCallback(\n (date: Date) => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n\n if (!selectsRange) {\n setLocSelectedDate(newDate);\n onChange?.(newDate);\n } else {\n if (!selectedStartDate || (selectedStartDate && selectedEndDate)) {\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n setSelectingRange(newDate);\n onChange?.([newDate, null]);\n } else {\n const start =\n selectedStartDate < newDate ? selectedStartDate : newDate;\n const end =\n selectedStartDate < newDate ? newDate : selectedStartDate;\n setSelectedStartDate(start);\n setSelectedEndDate(end);\n setSelectingRange(null);\n onChange?.([start, end]);\n }\n }\n },\n [onChange, selectsRange, selectedStartDate, selectedEndDate]\n );\n\n const decreaseMonth = useCallback(\n () => setCurrentMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseMonth = useCallback(\n () => setCurrentMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeMonth = useCallback(\n (m: number) =>\n setCurrentMonth((prev) => new Date(prev.getFullYear(), m, 1)),\n []\n );\n const changeYear = useCallback(\n (y: number) => setCurrentMonth((prev) => new Date(y, prev.getMonth(), 1)),\n []\n );\n\n const handleChipSelect = useCallback(\n (value: string | null) => {\n onChipSelect?.(value);\n\n const chip = chips?.find((c) => c.value === value);\n if (!chip || chip.days === undefined) return;\n\n const today = startOfDay(new Date());\n\n if (chip.days === 0) {\n if (selectsRange) {\n setSelectedStartDate(today);\n setSelectedEndDate(today);\n setSelectingRange(null);\n onChange?.([today, today]);\n } else {\n setLocSelectedDate(today);\n onChange?.(today);\n }\n setCurrentMonth(today);\n return;\n }\n\n const start = subDays(today, chip.days);\n if (selectsRange) {\n setSelectedStartDate(start);\n setSelectedEndDate(today);\n setSelectingRange(null);\n onChange?.([start, today]);\n } else {\n setLocSelectedDate(start);\n onChange?.(start);\n }\n setCurrentMonth(start);\n },\n [chips, selectsRange, onChange, onChipSelect]\n );\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={theme.shape.contextMenu.md.borderRadius}\n padding={16}\n overflow=\"hidden\"\n style={{\n boxShadow:\n \"0px 2px 3px 0px rgba(7, 7, 8, 0.2), 0px 6px 10px 4px rgba(7, 7, 8, 0.1)\",\n width: 312,\n }}\n >\n {topContent?.({ close: () => {} })}\n\n {chips && chips.length > 0 && (\n <CalendarChips\n chips={chips}\n activeChip={activeChip}\n onChipSelect={handleChipSelect}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n )}\n\n <CalendarHeader\n monthDate={currentMonth}\n decreaseMonth={decreaseMonth}\n increaseMonth={increaseMonth}\n changeYear={changeYear}\n changeMonth={changeMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n\n <CalendarGrid\n currentMonth={currentMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange={selectsRange}\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectedDate={locSelectedDate}\n selectingRange={selectingRange}\n onDayPress={handleChange}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n\n {bottomContent?.({ close: () => {} })}\n </Box>\n );\n }\n);\n\nCalendar.displayName = \"Calendar\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { useCallback, useMemo } from \"react\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport { Select } from \"@xsolla/xui-select\";\nimport { ArrowLeft, ArrowRight } from \"@xsolla/xui-icons-base\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { getMonthInLocale } from \"./utils\";\nimport type { CalendarHeaderProps } from \"./types\";\n\nconst months = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n];\n\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\n monthDate,\n decreaseMonth,\n increaseMonth,\n changeYear,\n changeMonth,\n prevMonthButtonDisabled,\n nextMonthButtonDisabled,\n locale,\n minDate,\n maxDate,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const handleChangeMonth = useCallback(\n (value: any) => {\n changeMonth(months.indexOf(value as string));\n },\n [changeMonth]\n );\n\n const handleChangeYear = useCallback(\n (value: any) => {\n changeYear(parseInt(value as string, 10));\n },\n [changeYear]\n );\n\n const monthOptions = useMemo(() => {\n return months.map((month, index) => ({\n label: getMonthInLocale(index, locale),\n value: month,\n }));\n }, [locale]);\n\n const yearOptions = useMemo(() => {\n const options = [];\n const yearStart = minDate ? minDate.getFullYear() : 1900;\n const yearEnd = maxDate\n ? maxDate.getFullYear()\n : new Date().getFullYear() + 100;\n for (let i = yearEnd; i >= yearStart; i--) {\n options.push({ value: i.toString(), label: i.toString() });\n }\n return options;\n }, [minDate, maxDate]);\n\n return (\n <Box\n testID={testID}\n width=\"100%\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n marginBottom={16}\n gap={8}\n >\n <IconButton\n size=\"xs\"\n tone=\"mono\"\n variant=\"tertiary\"\n onPress={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n icon={<ArrowLeft size={16} />}\n aria-label=\"Previous month\"\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n\n <Box flexDirection=\"row\" flex={1} gap={4}>\n <Box flex={1.5}>\n <Select\n value={months[monthDate.getMonth()]}\n onChange={handleChangeMonth}\n options={monthOptions}\n size=\"sm\"\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n <Box flex={1}>\n <Select\n value={monthDate.getFullYear().toString()}\n onChange={handleChangeYear}\n options={yearOptions}\n size=\"sm\"\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n </Box>\n\n <IconButton\n size=\"xs\"\n tone=\"mono\"\n variant=\"tertiary\"\n onPress={increaseMonth}\n disabled={nextMonthButtonDisabled}\n icon={<ArrowRight size={16} />}\n aria-label=\"Next month\"\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n );\n};\n","import { format, setMonth } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport type { CalendarLocaleType } from \"./types\";\n\nconst defaultLocale = \"enUS\";\n\nexport function formatDate(\n date: Date,\n formatStr: string,\n locale: CalendarLocaleType = defaultLocale\n) {\n const localeObj = locales[locale] || locales[defaultLocale];\n\n return format(date, formatStr, {\n locale: localeObj,\n });\n}\n\nexport function getMonthInLocale(\n month: number,\n locale: CalendarLocaleType = defaultLocale\n) {\n return formatDate(setMonth(new Date(), month), \"LLLL\", locale);\n}\n","import React, { useMemo, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport {\n addDays,\n eachDayOfInterval,\n endOfDay,\n endOfMonth,\n endOfWeek,\n format,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isToday,\n isWithinInterval,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport type { CalendarGridProps } from \"./types\";\n\nexport const CalendarGrid: React.FC<CalendarGridProps> = ({\n currentMonth,\n locale = \"enUS\",\n firstDayOfWeek = 0,\n selectsRange = false,\n minDate,\n maxDate,\n startDate,\n endDate,\n selectedDate,\n selectingRange,\n onDayPress,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const localeObj = (locales as any)[locale] || locales.enUS;\n\n const monthStart = startOfMonth(currentMonth);\n const monthEnd = endOfMonth(currentMonth);\n const weekStartsOn = (firstDayOfWeek ?? 0) as any;\n const calendarStart = startOfWeek(monthStart, { weekStartsOn });\n const calendarEnd = endOfWeek(monthEnd, { weekStartsOn });\n\n const days = eachDayOfInterval({ start: calendarStart, end: calendarEnd });\n\n const weekDays = useMemo(() => {\n return Array.from({ length: 7 }, (_, i) => {\n const day = addDays(calendarStart, i);\n return format(day, \"EEEEEE\", { locale: localeObj });\n });\n }, [calendarStart, localeObj]);\n\n const weeks = useMemo(() => {\n const weekArray: Date[][] = [];\n for (let i = 0; i < days.length; i += 7) {\n weekArray.push(days.slice(i, i + 7));\n }\n return weekArray;\n }, [days]);\n\n const isDateDisabled = useCallback(\n (date: Date) => {\n if (minDate && isBefore(date, startOfDay(minDate))) return true;\n if (maxDate && isAfter(date, endOfDay(maxDate))) return true;\n return false;\n },\n [minDate, maxDate]\n );\n\n const isDateInRange = useCallback(\n (date: Date) => {\n if (!selectsRange || !startDate) return false;\n const rangeEnd = endDate || selectingRange;\n if (!rangeEnd) return false;\n const start = startDate < rangeEnd ? startDate : rangeEnd;\n const end = startDate < rangeEnd ? rangeEnd : startDate;\n return isWithinInterval(date, {\n start: startOfDay(start),\n end: endOfDay(end),\n });\n },\n [selectsRange, startDate, endDate, selectingRange]\n );\n\n return (\n <Box testID={testID}>\n <Box flexDirection=\"row\" justifyContent=\"space-between\" marginBottom={8}>\n {weekDays.map((day, i) => (\n <Box key={i} width={40} alignItems=\"center\">\n <Text\n fontSize={12}\n fontWeight=\"600\"\n color={theme.colors.content.tertiary}\n >\n {day.toUpperCase()}\n </Text>\n </Box>\n ))}\n </Box>\n\n <Box gap={2}>\n {weeks.map((week, i) => (\n <Box key={i} flexDirection=\"row\" justifyContent=\"space-between\">\n {week.map((day, j) => {\n const isOutsideMonth = !isSameMonth(day, currentMonth);\n const isSelected =\n (!selectsRange &&\n selectedDate &&\n isSameDay(day, selectedDate)) ||\n (selectsRange &&\n startDate &&\n endDate &&\n isSameDay(day, startDate) &&\n isSameDay(day, endDate));\n const isRangeStart =\n selectsRange && startDate && isSameDay(day, startDate);\n const isRangeEnd =\n selectsRange && endDate && isSameDay(day, endDate);\n const inRange = isDateInRange(day);\n const today = isToday(day);\n const disabled = isDateDisabled(day);\n\n let bgColor = \"transparent\";\n let textColor = theme.colors.content.primary;\n\n if (isSelected || isRangeStart || isRangeEnd) {\n bgColor = theme.colors.background.brand.primary;\n textColor = theme.colors.content.on.brand;\n } else if (inRange) {\n bgColor = theme.colors.overlay.brand;\n } else if (today) {\n bgColor = theme.colors.overlay.mono;\n }\n\n if (isOutsideMonth || disabled) {\n textColor = theme.colors.content.tertiary;\n }\n\n return (\n <Box\n key={j}\n width={40}\n height={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n borderRadius={\n isSelected || isRangeStart || isRangeEnd ? 4 : 0\n }\n backgroundColor={bgColor}\n cursor={disabled || isOutsideMonth ? \"default\" : \"pointer\"}\n onPress={() =>\n !disabled && !isOutsideMonth && onDayPress?.(day)\n }\n hoverStyle={\n !disabled && !isOutsideMonth && !isSelected\n ? { backgroundColor: theme.colors.overlay.mono }\n : undefined\n }\n >\n <Text\n color={textColor}\n fontSize={14}\n fontWeight={\n isSelected || isRangeStart || isRangeEnd ? \"600\" : \"400\"\n }\n >\n {format(day, \"d\")}\n </Text>\n </Box>\n );\n })}\n </Box>\n ))}\n </Box>\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Tag } from \"@xsolla/xui-tag\";\nimport type { CalendarChipsProps } from \"./types\";\n\nexport const CalendarChips: React.FC<CalendarChipsProps> = ({\n chips,\n activeChip,\n onChipSelect,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n if (!chips || chips.length === 0) return null;\n\n return (\n <Box\n testID={testID}\n flexDirection=\"row\"\n flexWrap=\"wrap\"\n gap={8}\n marginBottom={16}\n >\n {chips.map((chip) => {\n const isActive = activeChip === chip.value;\n return (\n <Box\n key={chip.value}\n onPress={() => onChipSelect?.(chip.value)}\n cursor=\"pointer\"\n >\n <Tag\n size=\"sm\"\n tone={isActive ? \"brand\" : \"primary\"}\n type={isActive ? \"solid\" : \"outlined\"}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n >\n {chip.label}\n </Tag>\n </Box>\n );\n })}\n </Box>\n );\n};\n","import { forwardRef, useCallback, useEffect, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { addMonths, subDays, subMonths, startOfDay } from \"date-fns\";\nimport { CalendarHeader } from \"./CalendarHeader\";\nimport { CalendarGrid } from \"./CalendarGrid\";\nimport { CalendarChips } from \"./CalendarChips\";\nimport type { DualCalendarProps } from \"./types\";\n\nexport const DualCalendar = forwardRef<any, DualCalendarProps>(\n (\n {\n locale = \"enUS\",\n onChange,\n startDate,\n endDate,\n contextMenuMaxHeight,\n topContent,\n bottomContent,\n chips,\n activeChip,\n onChipSelect,\n testID,\n minDate,\n maxDate,\n firstDayOfWeek = 0,\n month,\n initialMonth,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const [leftMonth, setLeftMonth] = useState<Date>(\n (month || initialMonth || startDate || new Date()) as Date\n );\n const [selectedStartDate, setSelectedStartDate] = useState<\n Date | null | undefined\n >(startDate);\n const [selectedEndDate, setSelectedEndDate] = useState<\n Date | null | undefined\n >(endDate);\n const [selectingRange, setSelectingRange] = useState<Date | null>(null);\n\n const rightMonth = addMonths(leftMonth, 1);\n\n useEffect(() => {\n setSelectedStartDate(startDate);\n setSelectedEndDate(endDate);\n if (month !== undefined) {\n setLeftMonth(month);\n }\n }, [startDate, endDate, month]);\n\n const handleDayPress = useCallback(\n (date: Date) => {\n const newDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n );\n\n if (!selectedStartDate || (selectedStartDate && selectedEndDate)) {\n setSelectedStartDate(newDate);\n setSelectedEndDate(null);\n setSelectingRange(newDate);\n onChange?.([newDate, null]);\n } else {\n const start =\n selectedStartDate < newDate ? selectedStartDate : newDate;\n const end = selectedStartDate < newDate ? newDate : selectedStartDate;\n setSelectedStartDate(start);\n setSelectedEndDate(end);\n setSelectingRange(null);\n onChange?.([start, end]);\n }\n },\n [onChange, selectedStartDate, selectedEndDate]\n );\n\n const decreaseLeftMonth = useCallback(\n () => setLeftMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseLeftMonth = useCallback(\n () => setLeftMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeLeftMonth = useCallback(\n (m: number) => setLeftMonth((prev) => new Date(prev.getFullYear(), m, 1)),\n []\n );\n const changeLeftYear = useCallback(\n (y: number) => setLeftMonth((prev) => new Date(y, prev.getMonth(), 1)),\n []\n );\n\n const decreaseRightMonth = useCallback(\n () => setLeftMonth((prev) => subMonths(prev, 1)),\n []\n );\n const increaseRightMonth = useCallback(\n () => setLeftMonth((prev) => addMonths(prev, 1)),\n []\n );\n const changeRightMonth = useCallback(\n (m: number) => setLeftMonth(new Date(rightMonth.getFullYear(), m - 1, 1)),\n [rightMonth]\n );\n const changeRightYear = useCallback(\n (y: number) => setLeftMonth(new Date(y, rightMonth.getMonth() - 1, 1)),\n [rightMonth]\n );\n\n const handleChipSelect = useCallback(\n (value: string | null) => {\n onChipSelect?.(value);\n\n const chip = chips?.find((c) => c.value === value);\n if (!chip || chip.days === undefined) return;\n\n const today = startOfDay(new Date());\n\n if (chip.days === 0) {\n setSelectedStartDate(today);\n setSelectedEndDate(today);\n setSelectingRange(null);\n setLeftMonth(today);\n onChange?.([today, today]);\n return;\n }\n\n const start = subDays(today, chip.days);\n setSelectedStartDate(start);\n setSelectedEndDate(today);\n setSelectingRange(null);\n setLeftMonth(start);\n onChange?.([start, today]);\n },\n [chips, onChange, onChipSelect]\n );\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={theme.shape.contextMenu.md.borderRadius}\n padding={16}\n overflow=\"hidden\"\n style={{\n boxShadow:\n \"0px 2px 3px 0px rgba(7, 7, 8, 0.2), 0px 6px 10px 4px rgba(7, 7, 8, 0.1)\",\n width: 624,\n }}\n >\n {topContent?.({ close: () => {} })}\n\n {chips && chips.length > 0 && (\n <CalendarChips\n chips={chips}\n activeChip={activeChip}\n onChipSelect={handleChipSelect}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n )}\n\n <Box flexDirection=\"row\" gap={16}>\n <Box flex={1}>\n <CalendarHeader\n monthDate={leftMonth}\n decreaseMonth={decreaseLeftMonth}\n increaseMonth={increaseLeftMonth}\n changeYear={changeLeftYear}\n changeMonth={changeLeftMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n\n <CalendarGrid\n currentMonth={leftMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectingRange={selectingRange}\n onDayPress={handleDayPress}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n\n <Box flex={1}>\n <CalendarHeader\n monthDate={rightMonth}\n decreaseMonth={decreaseRightMonth}\n increaseMonth={increaseRightMonth}\n changeYear={changeRightYear}\n changeMonth={changeRightMonth}\n locale={locale}\n minDate={minDate}\n maxDate={maxDate}\n contextMenuMaxHeight={contextMenuMaxHeight}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n\n <CalendarGrid\n currentMonth={rightMonth}\n locale={locale}\n firstDayOfWeek={firstDayOfWeek}\n selectsRange\n minDate={minDate}\n maxDate={maxDate}\n startDate={selectedStartDate}\n endDate={selectedEndDate}\n selectingRange={selectingRange}\n onDayPress={handleDayPress}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n </Box>\n\n {bottomContent?.({ close: () => {} })}\n </Box>\n );\n }\n);\n\nDualCalendar.displayName = \"DualCalendar\";\n"],"mappings":"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","names":["useCallback","jsx","useResolvedTheme","startOfDay","jsx","useMemo","useCallback","format","locales","jsx","jsxs","useMemo","useCallback","jsx","jsx","jsxs","useResolvedTheme","useCallback","startOfDay","forwardRef","useCallback","useEffect","useState","useResolvedTheme","addMonths","subDays","subMonths","startOfDay","jsx","jsxs","forwardRef","useResolvedTheme","useState","addMonths","useEffect","useCallback","subMonths","startOfDay","subDays"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-calendar",
3
- "version": "0.173.2",
3
+ "version": "0.174.1",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -13,12 +13,12 @@
13
13
  "test:coverage": "vitest run --coverage"
14
14
  },
15
15
  "dependencies": {
16
- "@xsolla/xui-button": "0.173.2",
17
- "@xsolla/xui-core": "0.173.2",
18
- "@xsolla/xui-icons-base": "0.173.2",
19
- "@xsolla/xui-primitives-core": "0.173.2",
20
- "@xsolla/xui-select": "0.173.2",
21
- "@xsolla/xui-tag": "0.173.2",
16
+ "@xsolla/xui-button": "0.174.1",
17
+ "@xsolla/xui-core": "0.174.1",
18
+ "@xsolla/xui-icons-base": "0.174.1",
19
+ "@xsolla/xui-primitives-core": "0.174.1",
20
+ "@xsolla/xui-select": "0.174.1",
21
+ "@xsolla/xui-tag": "0.174.1",
22
22
  "date-fns": "^3.0.0"
23
23
  },
24
24
  "peerDependencies": {
package/web/index.d.mts CHANGED
@@ -13,7 +13,7 @@ interface CalendarChipOption {
13
13
  */
14
14
  days?: number;
15
15
  }
16
- interface CalendarChipsProps {
16
+ interface CalendarChipsProps extends ThemeOverrideProps {
17
17
  /**
18
18
  * Array of chip options to display.
19
19
  */
@@ -45,7 +45,7 @@ interface CalendarGridProps extends ThemeOverrideProps {
45
45
  onDayPress?: (date: Date) => void;
46
46
  testID?: string;
47
47
  }
48
- interface CalendarHeaderProps {
48
+ interface CalendarHeaderProps extends ThemeOverrideProps {
49
49
  monthDate: Date;
50
50
  decreaseMonth: () => void;
51
51
  increaseMonth: () => void;
package/web/index.d.ts CHANGED
@@ -13,7 +13,7 @@ interface CalendarChipOption {
13
13
  */
14
14
  days?: number;
15
15
  }
16
- interface CalendarChipsProps {
16
+ interface CalendarChipsProps extends ThemeOverrideProps {
17
17
  /**
18
18
  * Array of chip options to display.
19
19
  */
@@ -45,7 +45,7 @@ interface CalendarGridProps extends ThemeOverrideProps {
45
45
  onDayPress?: (date: Date) => void;
46
46
  testID?: string;
47
47
  }
48
- interface CalendarHeaderProps {
48
+ interface CalendarHeaderProps extends ThemeOverrideProps {
49
49
  monthDate: Date;
50
50
  decreaseMonth: () => void;
51
51
  increaseMonth: () => void;
package/web/index.js CHANGED
@@ -382,7 +382,9 @@ var CalendarHeader = ({
382
382
  locale,
383
383
  minDate,
384
384
  maxDate,
385
- testID
385
+ testID,
386
+ themeMode,
387
+ themeProductContext
386
388
  }) => {
387
389
  const handleChangeMonth = (0, import_react3.useCallback)(
388
390
  (value) => {
@@ -431,7 +433,9 @@ var CalendarHeader = ({
431
433
  onPress: decreaseMonth,
432
434
  disabled: prevMonthButtonDisabled,
433
435
  icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_xui_icons_base.ArrowLeft, { size: 16 }),
434
- "aria-label": "Previous month"
436
+ "aria-label": "Previous month",
437
+ themeMode,
438
+ themeProductContext
435
439
  }
436
440
  ),
437
441
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box, { flexDirection: "row", flex: 1, gap: 4, children: [
@@ -441,7 +445,9 @@ var CalendarHeader = ({
441
445
  value: months[monthDate.getMonth()],
442
446
  onChange: handleChangeMonth,
443
447
  options: monthOptions,
444
- size: "sm"
448
+ size: "sm",
449
+ themeMode,
450
+ themeProductContext
445
451
  }
446
452
  ) }),
447
453
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Box, { flex: 1, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
@@ -450,7 +456,9 @@ var CalendarHeader = ({
450
456
  value: monthDate.getFullYear().toString(),
451
457
  onChange: handleChangeYear,
452
458
  options: yearOptions,
453
- size: "sm"
459
+ size: "sm",
460
+ themeMode,
461
+ themeProductContext
454
462
  }
455
463
  ) })
456
464
  ] }),
@@ -463,7 +471,9 @@ var CalendarHeader = ({
463
471
  onPress: increaseMonth,
464
472
  disabled: nextMonthButtonDisabled,
465
473
  icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_xui_icons_base.ArrowRight, { size: 16 }),
466
- "aria-label": "Next month"
474
+ "aria-label": "Next month",
475
+ themeMode,
476
+ themeProductContext
467
477
  }
468
478
  )
469
479
  ]
@@ -602,7 +612,9 @@ var CalendarChips = ({
602
612
  chips,
603
613
  activeChip,
604
614
  onChipSelect,
605
- testID
615
+ testID,
616
+ themeMode,
617
+ themeProductContext
606
618
  }) => {
607
619
  if (!chips || chips.length === 0) return null;
608
620
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
@@ -626,6 +638,8 @@ var CalendarChips = ({
626
638
  size: "sm",
627
639
  tone: isActive ? "brand" : "primary",
628
640
  type: isActive ? "solid" : "outlined",
641
+ themeMode,
642
+ themeProductContext,
629
643
  children: chip.label
630
644
  }
631
645
  )
@@ -776,7 +790,9 @@ var Calendar = (0, import_react5.forwardRef)(
776
790
  {
777
791
  chips,
778
792
  activeChip,
779
- onChipSelect: handleChipSelect
793
+ onChipSelect: handleChipSelect,
794
+ themeMode,
795
+ themeProductContext
780
796
  }
781
797
  ),
782
798
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
@@ -790,7 +806,9 @@ var Calendar = (0, import_react5.forwardRef)(
790
806
  locale,
791
807
  minDate,
792
808
  maxDate,
793
- contextMenuMaxHeight
809
+ contextMenuMaxHeight,
810
+ themeMode,
811
+ themeProductContext
794
812
  }
795
813
  ),
796
814
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
@@ -806,7 +824,9 @@ var Calendar = (0, import_react5.forwardRef)(
806
824
  endDate: selectedEndDate,
807
825
  selectedDate: locSelectedDate,
808
826
  selectingRange,
809
- onDayPress: handleChange
827
+ onDayPress: handleChange,
828
+ themeMode,
829
+ themeProductContext
810
830
  }
811
831
  ),
812
832
  bottomContent?.({ close: () => {
@@ -958,7 +978,9 @@ var DualCalendar = (0, import_react6.forwardRef)(
958
978
  {
959
979
  chips,
960
980
  activeChip,
961
- onChipSelect: handleChipSelect
981
+ onChipSelect: handleChipSelect,
982
+ themeMode,
983
+ themeProductContext
962
984
  }
963
985
  ),
964
986
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Box, { flexDirection: "row", gap: 16, children: [
@@ -974,7 +996,9 @@ var DualCalendar = (0, import_react6.forwardRef)(
974
996
  locale,
975
997
  minDate,
976
998
  maxDate,
977
- contextMenuMaxHeight
999
+ contextMenuMaxHeight,
1000
+ themeMode,
1001
+ themeProductContext
978
1002
  }
979
1003
  ),
980
1004
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -989,7 +1013,9 @@ var DualCalendar = (0, import_react6.forwardRef)(
989
1013
  startDate: selectedStartDate,
990
1014
  endDate: selectedEndDate,
991
1015
  selectingRange,
992
- onDayPress: handleDayPress
1016
+ onDayPress: handleDayPress,
1017
+ themeMode,
1018
+ themeProductContext
993
1019
  }
994
1020
  )
995
1021
  ] }),
@@ -1005,7 +1031,9 @@ var DualCalendar = (0, import_react6.forwardRef)(
1005
1031
  locale,
1006
1032
  minDate,
1007
1033
  maxDate,
1008
- contextMenuMaxHeight
1034
+ contextMenuMaxHeight,
1035
+ themeMode,
1036
+ themeProductContext
1009
1037
  }
1010
1038
  ),
1011
1039
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
@@ -1020,7 +1048,9 @@ var DualCalendar = (0, import_react6.forwardRef)(
1020
1048
  startDate: selectedStartDate,
1021
1049
  endDate: selectedEndDate,
1022
1050
  selectingRange,
1023
- onDayPress: handleDayPress
1051
+ onDayPress: handleDayPress,
1052
+ themeMode,
1053
+ themeProductContext
1024
1054
  }
1025
1055
  )
1026
1056
  ] })