@xsolla/xui-date-picker 0.117.0 → 0.118.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,89 +5,22 @@
5
5
  * @flow
6
6
  */
7
7
 
8
+ import { CalendarProps, CalendarLocaleType } from "@xsolla/xui-calendar";
9
+ declare export {
10
+ Calendar,
11
+ CalendarChipOption,
12
+ CalendarChips,
13
+ CalendarChipsProps,
14
+ CalendarGrid,
15
+ CalendarGridProps,
16
+ CalendarHeader,
17
+ CalendarHeaderProps,
18
+ CalendarLocaleType,
19
+ CalendarProps,
20
+ DualCalendar,
21
+ DualCalendarProps,
22
+ } from "@xsolla/xui-calendar";
8
23
  import * as react from "react";
9
- import { Node } from "react";
10
- import * as locales from "date-fns/locale";
11
- declare type CalendarLocaleType = $Keys<typeof locales>;
12
- declare interface CalendarProps {
13
- locale?: CalendarLocaleType;
14
-
15
- /**
16
- * The day to use as first day of the week, starting from 0 (Sunday) to 6 (Saturday).
17
- */
18
- firstDayOfWeek?: number;
19
-
20
- /**
21
- * The month to display in the calendar at first render.
22
- */
23
- initialMonth?: Date;
24
-
25
- /**
26
- * The month to display in the calendar.
27
- */
28
- month?: Date;
29
-
30
- /**
31
- * Select in range mode for calendar
32
- */
33
- selectsRange?: boolean;
34
-
35
- /**
36
- * The minimum selectable date
37
- */
38
- minDate?: Date | null;
39
-
40
- /**
41
- * The maximum selectable date
42
- */
43
- maxDate?: Date | null;
44
-
45
- /**
46
- * For range mode. Start date in selected period
47
- */
48
- startDate?: Date | null;
49
-
50
- /**
51
- * For range mode. End date in selected period
52
- */
53
- endDate?: Date | null;
54
-
55
- /**
56
- * The selected date
57
- */
58
- selectedDate?: Date | null;
59
-
60
- /**
61
- * Property sets the maximum height of a context menus for selecting month and year.
62
- */
63
- contextMenuMaxHeight?: number;
64
-
65
- /**
66
- * Returns custom content to display above the calendar's date picker.
67
- */
68
- topContent?: (datePicker: {
69
- close: () => void,
70
- ...
71
- }) => Node;
72
-
73
- /**
74
- * Returns custom content to display beneath the calendar's date picker.
75
- */
76
- bottomContent?: (datePicker: {
77
- close: () => void,
78
- ...
79
- }) => Node;
80
-
81
- /**
82
- * Test ID for testing frameworks
83
- */
84
- testID?: string;
85
-
86
- /**
87
- * Callback fired when the date changes
88
- */
89
- onChange?: (date: Date | [Date | null, Date | null]) => void;
90
- }
91
24
  declare type DateRangeType = [Date | null, Date | null];
92
25
  declare type DatePickerProps = {
93
26
  /**
@@ -120,23 +53,10 @@ declare var DatePicker: react.ForwardRefExoticComponent<{
120
53
  ...DatePickerProps,
121
54
  ...react.RefAttributes<any>,
122
55
  }>;
123
- declare var Calendar: react.ForwardRefExoticComponent<{
124
- ...CalendarProps,
125
- ...react.RefAttributes<any>,
126
- }>;
127
56
  declare function formatDate(
128
57
  date: Date,
129
58
  formatStr: string,
130
59
  locale?: CalendarLocaleType
131
60
  ): string;
132
- declare function getMonthInLocale(
133
- month: number,
134
- locale?: CalendarLocaleType
135
- ): string;
136
- export type {
137
- CalendarLocaleType,
138
- CalendarProps,
139
- DatePickerProps,
140
- DateRangeType,
141
- };
142
- declare export { Calendar, DatePicker, formatDate, getMonthInLocale };
61
+ export type { DatePickerProps, DateRangeType };
62
+ declare export { DatePicker, formatDate };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../src/DatePicker.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../src/Calendar.tsx","../../src/CalendarHeader.tsx","../../src/utils.ts"],"sourcesContent":["export * from \"./DatePicker\";\nexport * from \"./Calendar\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","import { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Input } from \"@xsolla/xui-input\";\nimport { isWeb, isNative } from \"@xsolla/xui-core\";\nimport { format } from \"date-fns\";\nimport { Calendar } from \"./Calendar\";\nimport type { DatePickerProps, DateRangeType } from \"./types\";\n\nexport const DatePicker = forwardRef<any, DatePickerProps>(\n ({\n onChange,\n size = \"md\",\n locale = \"enUS\",\n selectsRange = false,\n startDate,\n endDate,\n selectedDate,\n placeholder,\n backgroundColor,\n testID,\n ...rest\n }) => {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const containerRef = useRef<any>(null);\n\n const formatDateForDisplay = (date: Date | null | undefined): string => {\n if (!date) return \"\";\n try {\n return format(date, \"MM/dd/yyyy\");\n } catch {\n return \"\";\n }\n };\n\n const getDisplayValue = useCallback((): string => {\n if (selectsRange) {\n if (startDate && endDate) {\n return `${formatDateForDisplay(startDate)} - ${formatDateForDisplay(endDate)}`;\n } else if (startDate) {\n return formatDateForDisplay(startDate);\n }\n return \"\";\n } else {\n return formatDateForDisplay(selectedDate);\n }\n }, [selectsRange, startDate, endDate, selectedDate]);\n\n useEffect(() => {\n setInputValue(getDisplayValue());\n }, [getDisplayValue]);\n\n const handleInputChange = (text: string) => {\n setInputValue(text);\n };\n\n const handleDateChange = (date: Date | [Date | null, Date | null]) => {\n if (!selectsRange) {\n onChange?.(date as Date);\n setOpen(false);\n } else {\n const range = date as DateRangeType;\n onChange?.(range);\n if (range[0] && range[1]) {\n setOpen(false);\n }\n }\n };\n\n useEffect(() => {\n if (isNative) return;\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const renderCalendar = () => (\n <Calendar\n locale={locale}\n startDate={startDate}\n endDate={endDate}\n selectedDate={selectedDate}\n onChange={handleDateChange}\n selectsRange={selectsRange}\n {...rest}\n />\n );\n\n return (\n <Box ref={containerRef} position=\"relative\" width=\"100%\">\n <Input\n {...rest}\n size={size}\n placeholder={\n placeholder ||\n (selectsRange ? \"MM/DD/YYYY - MM/DD/YYYY\" : \"MM/DD/YYYY\")\n }\n value={inputValue}\n onChangeText={handleInputChange}\n onFocus={() => setOpen(true)}\n backgroundColor={backgroundColor}\n testID={testID}\n />\n {open &&\n (isWeb ? (\n <Box\n position=\"absolute\"\n top=\"100%\"\n left={0}\n marginTop={4}\n zIndex={1000}\n >\n {renderCalendar()}\n </Box>\n ) : (\n // Native implementation could use a Modal here\n // For now, we just show it below the input if needed,\n // but usually a bottom sheet or centered modal is better.\n <Box marginTop={4}>{renderCalendar()}</Box>\n ))}\n </Box>\n );\n }\n);\n\nDatePicker.displayName = \"DatePicker\";\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 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 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 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,\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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import { forwardRef, useCallback, useEffect, useMemo, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem } from \"@xsolla/xui-core\";\nimport {\n addDays,\n addMonths,\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 subMonths,\n} from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport { CalendarHeader } from \"./CalendarHeader\";\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 testID,\n minDate,\n maxDate,\n firstDayOfWeek = 0,\n month,\n initialMonth,\n },\n ref\n ) => {\n const { theme } = useDesignSystem();\n const localeObj = (locales as any)[locale] || locales.enUS;\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 currentMonth.getFullYear(),\n currentMonth.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, currentMonth]\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 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 || !selectedStartDate) return false;\n const rangeEnd = selectedEndDate || selectingRange;\n if (!rangeEnd) return false;\n const start =\n selectedStartDate < rangeEnd ? selectedStartDate : rangeEnd;\n const end = selectedStartDate < rangeEnd ? rangeEnd : selectedStartDate;\n return isWithinInterval(date, {\n start: startOfDay(start),\n end: endOfDay(end),\n });\n },\n [selectsRange, selectedStartDate, selectedEndDate, selectingRange]\n );\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={8}\n padding={16}\n overflow=\"hidden\"\n style={{\n boxShadow: \"0px 4px 16px 0px rgba(7, 7, 8, 0.1)\",\n width: 312,\n }}\n >\n {topContent?.({ close: () => {} })}\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 <Box\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginBottom={8}\n >\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 locSelectedDate &&\n isSameDay(day, locSelectedDate)) ||\n (selectsRange &&\n selectedStartDate &&\n selectedEndDate &&\n isSameDay(day, selectedStartDate) &&\n isSameDay(day, selectedEndDate));\n const isRangeStart =\n selectsRange &&\n selectedStartDate &&\n isSameDay(day, selectedStartDate);\n const isRangeEnd =\n selectsRange &&\n selectedEndDate &&\n isSameDay(day, selectedEndDate);\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 && handleChange(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\n {bottomContent?.({ close: () => {} })}\n </Box>\n );\n }\n);\n\nCalendar.displayName = \"Calendar\";\n","import React, { useCallback, useMemo } from \"react\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport { Select } from \"@xsolla/xui-select\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { getMonthInLocale } from \"./utils\";\nimport type { CalendarLocaleType } from \"./types\";\n\nconst ArrowLeft = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={16}\n height={16}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\nconst ArrowRight = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={16}\n height={16}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\ninterface CalendarHeaderProps {\n monthDate: Date;\n decreaseMonth: () => void;\n increaseMonth: () => void;\n changeYear: (year: number) => void;\n changeMonth: (month: number) => void;\n prevMonthButtonDisabled?: boolean;\n nextMonthButtonDisabled?: boolean;\n locale: CalendarLocaleType;\n minDate?: Date | null;\n maxDate?: Date | null;\n contextMenuMaxHeight?: number;\n}\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}) => {\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 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=\"secondary\"\n onPress={decreaseMonth}\n disabled={prevMonthButtonDisabled}\n icon={<ArrowLeft />}\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 // @ts-expect-error - TODO: properly handle types\n onValueChange={handleChangeMonth}\n options={monthOptions}\n size=\"sm\"\n />\n </Box>\n <Box flex={1}>\n <Select\n value={monthDate.getFullYear().toString()}\n // @ts-expect-error - TODO: properly handle types\n onValueChange={handleChangeYear}\n options={yearOptions}\n size=\"sm\"\n />\n </Box>\n </Box>\n\n <IconButton\n size=\"xs\"\n tone=\"mono\"\n variant=\"secondary\"\n onPress={increaseMonth}\n disabled={nextMonthButtonDisabled}\n icon={<ArrowRight />}\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"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_xui_core","import_date_fns","import_react","import_date_fns","locales","import_jsx_runtime","import_jsx_runtime","locales","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/DatePicker.tsx","../../../primitives-native/src/Box.tsx","../../src/utils.ts"],"sourcesContent":["export {\n Calendar,\n DualCalendar,\n CalendarHeader,\n CalendarGrid,\n CalendarChips,\n} from \"@xsolla/xui-calendar\";\nexport type {\n CalendarProps,\n DualCalendarProps,\n CalendarChipOption,\n CalendarChipsProps,\n CalendarGridProps,\n CalendarHeaderProps,\n CalendarLocaleType,\n} from \"@xsolla/xui-calendar\";\nexport * from \"./DatePicker\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","import { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Input } from \"@xsolla/xui-input\";\nimport { isWeb, isNative } from \"@xsolla/xui-core\";\nimport { format } from \"date-fns\";\nimport { Calendar } from \"@xsolla/xui-calendar\";\nimport type { DatePickerProps, DateRangeType } from \"./types\";\n\nexport const DatePicker = forwardRef<any, DatePickerProps>(\n ({\n onChange,\n size = \"md\",\n locale = \"enUS\",\n selectsRange = false,\n startDate,\n endDate,\n selectedDate,\n placeholder,\n backgroundColor,\n testID,\n ...rest\n }) => {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const containerRef = useRef<any>(null);\n\n const formatDateForDisplay = (date: Date | null | undefined): string => {\n if (!date) return \"\";\n try {\n return format(date, \"MM/dd/yyyy\");\n } catch {\n return \"\";\n }\n };\n\n const getDisplayValue = useCallback((): string => {\n if (selectsRange) {\n if (startDate && endDate) {\n return `${formatDateForDisplay(startDate)} - ${formatDateForDisplay(endDate)}`;\n } else if (startDate) {\n return formatDateForDisplay(startDate);\n }\n return \"\";\n } else {\n return formatDateForDisplay(selectedDate);\n }\n }, [selectsRange, startDate, endDate, selectedDate]);\n\n useEffect(() => {\n setInputValue(getDisplayValue());\n }, [getDisplayValue]);\n\n const handleInputChange = (text: string) => {\n setInputValue(text);\n };\n\n const handleDateChange = (date: Date | [Date | null, Date | null]) => {\n if (!selectsRange) {\n onChange?.(date as Date);\n setOpen(false);\n } else {\n const range = date as DateRangeType;\n onChange?.(range);\n if (range[0] && range[1]) {\n setOpen(false);\n }\n }\n };\n\n useEffect(() => {\n if (isNative) return;\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const renderCalendar = () => (\n <Calendar\n locale={locale}\n startDate={startDate}\n endDate={endDate}\n selectedDate={selectedDate}\n onChange={handleDateChange}\n selectsRange={selectsRange}\n {...rest}\n />\n );\n\n return (\n <Box ref={containerRef} position=\"relative\" width=\"100%\">\n <Input\n {...rest}\n size={size}\n placeholder={\n placeholder ||\n (selectsRange ? \"MM/DD/YYYY - MM/DD/YYYY\" : \"MM/DD/YYYY\")\n }\n value={inputValue}\n onChangeText={handleInputChange}\n onFocus={() => setOpen(true)}\n backgroundColor={backgroundColor}\n testID={testID}\n />\n {open &&\n (isWeb ? (\n <Box\n position=\"absolute\"\n top=\"100%\"\n left={0}\n marginTop={4}\n zIndex={1000}\n >\n {renderCalendar()}\n </Box>\n ) : (\n // Native implementation could use a Modal here\n // For now, we just show it below the input if needed,\n // but usually a bottom sheet or centered modal is better.\n <Box marginTop={4}>{renderCalendar()}</Box>\n ))}\n </Box>\n );\n }\n);\n\nDatePicker.displayName = \"DatePicker\";\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 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 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 { format } from \"date-fns\";\nimport * as locales from \"date-fns/locale\";\nimport type { CalendarLocaleType } from \"@xsolla/xui-calendar\";\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"],"mappings":"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","names":["import_xui_calendar","import_jsx_runtime","import_date_fns"]}