react-native-timer-picker 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/components/DurationScroll/DurationScroll.js +426 -0
- package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +1 -0
- package/dist/commonjs/components/DurationScroll/index.js +27 -0
- package/dist/commonjs/components/DurationScroll/index.js.map +1 -0
- package/dist/commonjs/components/DurationScroll/types.js +6 -0
- package/dist/commonjs/components/DurationScroll/types.js.map +1 -0
- package/dist/commonjs/components/Modal/Modal.js +107 -0
- package/dist/commonjs/components/Modal/Modal.js.map +1 -0
- package/dist/commonjs/components/Modal/index.js +27 -0
- package/dist/commonjs/components/Modal/index.js.map +1 -0
- package/dist/commonjs/components/Modal/styles.js +25 -0
- package/dist/commonjs/components/Modal/styles.js.map +1 -0
- package/dist/commonjs/components/Modal/types.js +6 -0
- package/dist/commonjs/components/Modal/types.js.map +1 -0
- package/dist/commonjs/components/PickerItem/PickerItem.js +48 -0
- package/dist/commonjs/components/PickerItem/PickerItem.js.map +1 -0
- package/dist/commonjs/components/PickerItem/index.js +14 -0
- package/dist/commonjs/components/PickerItem/index.js.map +1 -0
- package/dist/commonjs/components/TimerPicker/TimerPicker.js +266 -0
- package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +1 -0
- package/dist/commonjs/components/TimerPicker/index.js +39 -0
- package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
- package/dist/commonjs/components/TimerPicker/styles.js +140 -0
- package/dist/commonjs/components/TimerPicker/styles.js.map +1 -0
- package/dist/commonjs/components/TimerPicker/types.js +6 -0
- package/dist/commonjs/components/TimerPicker/types.js.map +1 -0
- package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +173 -0
- package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
- package/dist/commonjs/components/TimerPickerModal/index.js +39 -0
- package/dist/commonjs/components/TimerPickerModal/index.js.map +1 -0
- package/dist/commonjs/components/TimerPickerModal/styles.js +95 -0
- package/dist/commonjs/components/TimerPickerModal/styles.js.map +1 -0
- package/dist/commonjs/components/TimerPickerModal/types.js +6 -0
- package/dist/commonjs/components/TimerPickerModal/types.js.map +1 -0
- package/dist/commonjs/index.js +21 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/tests/DurationScroll.test.js +163 -0
- package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
- package/dist/commonjs/tests/Modal.test.js +99 -0
- package/dist/commonjs/tests/Modal.test.js.map +1 -0
- package/dist/commonjs/tests/TimerPicker.test.js +161 -0
- package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
- package/dist/commonjs/tests/TimerPickerModal.test.js +276 -0
- package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
- package/dist/commonjs/tests/colorToRgba.test.js +176 -0
- package/dist/commonjs/tests/colorToRgba.test.js.map +1 -0
- package/dist/commonjs/tests/generateNumbers.test.js +350 -0
- package/dist/commonjs/tests/generateNumbers.test.js.map +1 -0
- package/dist/commonjs/tests/getAdjustedLimit.test.js +324 -0
- package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -0
- package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +424 -0
- package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
- package/dist/commonjs/tests/getInitialScrollIndex.test.js +396 -0
- package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -0
- package/dist/commonjs/tests/getSafeInitialValue.test.js +499 -0
- package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -0
- package/dist/commonjs/tests/padNumber.test.js +301 -0
- package/dist/commonjs/tests/padNumber.test.js.map +1 -0
- package/dist/commonjs/utils/colorToRgba.js +87 -0
- package/dist/commonjs/utils/colorToRgba.js.map +1 -0
- package/dist/commonjs/utils/generateNumbers.js +124 -0
- package/dist/commonjs/utils/generateNumbers.js.map +1 -0
- package/dist/commonjs/utils/getAdjustedLimit.js +58 -0
- package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +62 -0
- package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js +57 -0
- package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/commonjs/utils/getSafeInitialValue.js +41 -0
- package/dist/commonjs/utils/getSafeInitialValue.js.map +1 -0
- package/dist/commonjs/utils/padNumber.js +40 -0
- package/dist/commonjs/utils/padNumber.js.map +1 -0
- package/dist/module/components/DurationScroll/DurationScroll.js +418 -0
- package/dist/module/components/DurationScroll/DurationScroll.js.map +1 -0
- package/dist/module/components/DurationScroll/index.js +3 -0
- package/dist/module/components/DurationScroll/index.js.map +1 -0
- package/dist/module/components/DurationScroll/types.js +2 -0
- package/dist/module/components/DurationScroll/types.js.map +1 -0
- package/dist/module/components/Modal/Modal.js +99 -0
- package/dist/module/components/Modal/Modal.js.map +1 -0
- package/dist/module/components/Modal/index.js +3 -0
- package/dist/module/components/Modal/index.js.map +1 -0
- package/dist/module/components/Modal/styles.js +19 -0
- package/dist/module/components/Modal/styles.js.map +1 -0
- package/dist/module/components/Modal/types.js +2 -0
- package/dist/module/components/Modal/types.js.map +1 -0
- package/dist/module/components/PickerItem/PickerItem.js +41 -0
- package/dist/module/components/PickerItem/PickerItem.js.map +1 -0
- package/dist/module/components/PickerItem/index.js +2 -0
- package/dist/module/components/PickerItem/index.js.map +1 -0
- package/dist/module/components/TimerPicker/TimerPicker.js +258 -0
- package/dist/module/components/TimerPicker/TimerPicker.js.map +1 -0
- package/dist/module/components/TimerPicker/index.js +4 -0
- package/dist/module/components/TimerPicker/index.js.map +1 -0
- package/dist/module/components/TimerPicker/styles.js +133 -0
- package/dist/module/components/TimerPicker/styles.js.map +1 -0
- package/dist/module/components/TimerPicker/types.js +2 -0
- package/dist/module/components/TimerPicker/types.js.map +1 -0
- package/dist/module/components/TimerPickerModal/TimerPickerModal.js +165 -0
- package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
- package/dist/module/components/TimerPickerModal/index.js +4 -0
- package/dist/module/components/TimerPickerModal/index.js.map +1 -0
- package/dist/module/components/TimerPickerModal/styles.js +88 -0
- package/dist/module/components/TimerPickerModal/styles.js.map +1 -0
- package/dist/module/components/TimerPickerModal/types.js +2 -0
- package/dist/module/components/TimerPickerModal/types.js.map +1 -0
- package/dist/module/index.js +3 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/tests/DurationScroll.test.js +160 -0
- package/dist/module/tests/DurationScroll.test.js.map +1 -0
- package/dist/module/tests/Modal.test.js +96 -0
- package/dist/module/tests/Modal.test.js.map +1 -0
- package/dist/module/tests/TimerPicker.test.js +159 -0
- package/dist/module/tests/TimerPicker.test.js.map +1 -0
- package/dist/module/tests/TimerPickerModal.test.js +273 -0
- package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
- package/dist/module/tests/colorToRgba.test.js +174 -0
- package/dist/module/tests/colorToRgba.test.js.map +1 -0
- package/dist/module/tests/generateNumbers.test.js +348 -0
- package/dist/module/tests/generateNumbers.test.js.map +1 -0
- package/dist/module/tests/getAdjustedLimit.test.js +322 -0
- package/dist/module/tests/getAdjustedLimit.test.js.map +1 -0
- package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +422 -0
- package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
- package/dist/module/tests/getInitialScrollIndex.test.js +394 -0
- package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -0
- package/dist/module/tests/getSafeInitialValue.test.js +496 -0
- package/dist/module/tests/getSafeInitialValue.test.js.map +1 -0
- package/dist/module/tests/padNumber.test.js +299 -0
- package/dist/module/tests/padNumber.test.js.map +1 -0
- package/dist/module/utils/colorToRgba.js +80 -0
- package/dist/module/utils/colorToRgba.js.map +1 -0
- package/dist/module/utils/generateNumbers.js +117 -0
- package/dist/module/utils/generateNumbers.js.map +1 -0
- package/dist/module/utils/getAdjustedLimit.js +51 -0
- package/dist/module/utils/getAdjustedLimit.js.map +1 -0
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +55 -0
- package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
- package/dist/module/utils/getInitialScrollIndex.js +50 -0
- package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
- package/dist/module/utils/getSafeInitialValue.js +34 -0
- package/dist/module/utils/getSafeInitialValue.js.map +1 -0
- package/dist/module/utils/padNumber.js +33 -0
- package/dist/module/utils/padNumber.js.map +1 -0
- package/dist/typescript/components/DurationScroll/DurationScroll.d.ts +4 -0
- package/dist/typescript/components/DurationScroll/index.d.ts +2 -0
- package/dist/typescript/components/DurationScroll/types.d.ts +70 -0
- package/dist/typescript/components/Modal/Modal.d.ts +5 -0
- package/dist/typescript/components/Modal/index.d.ts +2 -0
- package/dist/typescript/components/Modal/styles.d.ts +17 -0
- package/dist/typescript/components/Modal/types.d.ts +16 -0
- package/dist/typescript/components/PickerItem/PickerItem.d.ts +19 -0
- package/dist/typescript/components/PickerItem/index.d.ts +1 -0
- package/dist/typescript/components/TimerPicker/TimerPicker.d.ts +4 -0
- package/dist/typescript/components/TimerPicker/index.d.ts +3 -0
- package/dist/typescript/components/TimerPicker/styles.d.ts +1583 -0
- package/dist/typescript/components/TimerPicker/types.d.ts +91 -0
- package/dist/typescript/components/TimerPickerModal/TimerPickerModal.d.ts +4 -0
- package/dist/typescript/components/TimerPickerModal/index.d.ts +3 -0
- package/dist/typescript/components/TimerPickerModal/styles.d.ts +952 -0
- package/dist/typescript/components/TimerPickerModal/types.d.ts +56 -0
- package/dist/typescript/index.d.ts +4 -0
- package/dist/typescript/tests/DurationScroll.test.d.ts +1 -0
- package/dist/typescript/tests/Modal.test.d.ts +1 -0
- package/dist/typescript/tests/TimerPicker.test.d.ts +1 -0
- package/dist/typescript/tests/TimerPickerModal.test.d.ts +1 -0
- package/dist/typescript/tests/colorToRgba.test.d.ts +1 -0
- package/dist/typescript/tests/generateNumbers.test.d.ts +1 -0
- package/dist/typescript/tests/getAdjustedLimit.test.d.ts +1 -0
- package/dist/typescript/tests/getDurationAndIndexFromScrollOffset.test.d.ts +1 -0
- package/dist/typescript/tests/getInitialScrollIndex.test.d.ts +1 -0
- package/dist/typescript/tests/getSafeInitialValue.test.d.ts +1 -0
- package/dist/typescript/tests/padNumber.test.d.ts +1 -0
- package/dist/typescript/utils/colorToRgba.d.ts +38 -0
- package/dist/typescript/utils/generateNumbers.d.ts +80 -0
- package/dist/typescript/utils/getAdjustedLimit.d.ts +30 -0
- package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +49 -0
- package/dist/typescript/utils/getInitialScrollIndex.d.ts +46 -0
- package/dist/typescript/utils/getSafeInitialValue.d.ts +38 -0
- package/dist/typescript/utils/padNumber.d.ts +28 -0
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","getSafeInitialValue","DurationScroll","generateStyles","resolvePerColumn","value","column","undefined","TimerPicker","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","dayInterval","dayLabel","dayLimit","daysPickerIsDisabled","decelerationRate","disableInfiniteScroll","hideDays","hideHours","hideMinutes","hideSeconds","hourInterval","hourLabel","hourLimit","hoursPickerIsDisabled","initialValue","maximumDays","maximumHours","maximumMinutes","maximumSeconds","minuteInterval","minuteLabel","minuteLimit","minutesPickerIsDisabled","onDurationChange","padDaysWithZero","padHoursWithZero","padMinutesWithZero","padSecondsWithZero","padWithNItems","pickerContainerProps","pmLabel","repeatDayNumbersNTimes","repeatHourNumbersNTimes","repeatMinuteNumbersNTimes","repeatSecondNumbersNTimes","secondInterval","secondLabel","secondLimit","secondsPickerIsDisabled","styles","customStyles","use12HourPicker","otherProps","Audio","console","warn","Haptics","clickSoundAsset","labelOffsetPercentage","pickerLabelGap","safePadWithNItems","isNaN","maxPadWithNItems","Math","round","safeInitialValue","days","hours","minutes","seconds","pickerColumnWidth","selectedDays","setSelectedDays","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","daysDurationScrollRef","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","_daysDurationScrollRe","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","latestDuration","current","reset","options","_daysDurationScrollRe2","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","setValue","_daysDurationScrollRe3","_hoursDurationScrollR3","_minutesDurationScrol3","_secondsDurationScrol3","createElement","_extends","style","pickerContainer","testID","interval","isDisabled","label","limit","maximumValue","padNumbersWithZero","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","selectedValue","is12HourPicker","memo"],"sources":["TimerPicker.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { View } from \"react-native\";\n\nimport { getSafeInitialValue } from \"../../utils/getSafeInitialValue\";\nimport DurationScroll from \"../DurationScroll\";\nimport type { DurationScrollRef } from \"../DurationScroll\";\nimport { generateStyles } from \"./styles\";\nimport type { PerColumnValue, PickerColumn } from \"./styles\";\nimport type { TimerPickerProps, TimerPickerRef } from \"./types\";\n\nconst resolvePerColumn = (\n value: PerColumnValue | undefined,\n column: PickerColumn\n): number | undefined => {\n if (value == null) {\n return undefined;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n return value[column];\n};\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>((props, ref) => {\n const {\n aggressivelyGetLatestDuration = false,\n allowFontScaling = false,\n amLabel = \"am\",\n dayInterval = 1,\n dayLabel,\n dayLimit,\n daysPickerIsDisabled = false,\n decelerationRate = 0.88,\n disableInfiniteScroll = false,\n hideDays = true,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourInterval = 1,\n hourLabel,\n hourLimit,\n hoursPickerIsDisabled = false,\n initialValue,\n maximumDays = 30,\n maximumHours = 23,\n maximumMinutes = 59,\n maximumSeconds = 59,\n minuteInterval = 1,\n minuteLabel,\n minuteLimit,\n minutesPickerIsDisabled = false,\n onDurationChange,\n padDaysWithZero = false,\n padHoursWithZero = false,\n padMinutesWithZero = true,\n padSecondsWithZero = true,\n padWithNItems = 1,\n pickerContainerProps,\n pmLabel = \"pm\",\n repeatDayNumbersNTimes = 3,\n repeatHourNumbersNTimes = 8,\n repeatMinuteNumbersNTimes = 3,\n repeatSecondNumbersNTimes = 3,\n secondInterval = 1,\n secondLabel,\n secondLimit,\n secondsPickerIsDisabled = false,\n styles: customStyles,\n use12HourPicker = false,\n ...otherProps\n } = props;\n\n useEffect(() => {\n if (otherProps.Audio) {\n console.warn(\n 'The \"Audio\" prop is deprecated and will be removed in a future version. Please use the \"pickerFeedback\" prop instead.'\n );\n }\n if (otherProps.Haptics) {\n console.warn(\n 'The \"Haptics\" prop is deprecated and will be removed in a future version. Please use the \"pickerFeedback\" prop instead.'\n );\n }\n if (otherProps.clickSoundAsset) {\n console.warn(\n 'The \"clickSoundAsset\" prop is deprecated and will be removed in a future version. Please use the \"pickerFeedback\" prop instead.'\n );\n }\n if (customStyles?.labelOffsetPercentage != null) {\n if (customStyles?.pickerLabelGap != null) {\n console.warn(\n \"labelOffsetPercentage is ignored when pickerLabelGap is set. Please remove labelOffsetPercentage.\"\n );\n } else {\n console.warn(\n 'The \"labelOffsetPercentage\" style prop is deprecated and will be removed in a future version. Please use the \"pickerLabelGap\" style prop instead.'\n );\n }\n }\n }, [\n otherProps.Audio,\n otherProps.Haptics,\n otherProps.clickSoundAsset,\n customStyles?.labelOffsetPercentage,\n customStyles?.pickerLabelGap,\n ]);\n\n const safePadWithNItems = useMemo(() => {\n if (padWithNItems < 0 || isNaN(padWithNItems)) {\n return 0;\n }\n\n const maxPadWithNItems = hideHours ? 15 : 6;\n\n if (padWithNItems > maxPadWithNItems) {\n return maxPadWithNItems;\n }\n\n return Math.round(padWithNItems);\n }, [hideHours, padWithNItems]);\n\n const safeInitialValue = useMemo(\n () =>\n getSafeInitialValue({\n days: initialValue?.days,\n hours: initialValue?.hours,\n minutes: initialValue?.minutes,\n seconds: initialValue?.seconds,\n }),\n [initialValue?.days, initialValue?.hours, initialValue?.minutes, initialValue?.seconds]\n );\n\n const pickerLabelGap = customStyles?.pickerLabelGap;\n const pickerColumnWidth = customStyles?.pickerColumnWidth;\n\n const styles = useMemo(\n () => generateStyles(customStyles),\n\n [customStyles]\n );\n\n const [selectedDays, setSelectedDays] = useState(safeInitialValue.days);\n const [selectedHours, setSelectedHours] = useState(safeInitialValue.hours);\n const [selectedMinutes, setSelectedMinutes] = useState(safeInitialValue.minutes);\n const [selectedSeconds, setSelectedSeconds] = useState(safeInitialValue.seconds);\n\n useEffect(() => {\n onDurationChange?.({\n days: selectedDays,\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedDays, selectedHours, selectedMinutes, selectedSeconds]);\n\n const daysDurationScrollRef = useRef<DurationScrollRef>(null);\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n latestDuration: {\n days: daysDurationScrollRef.current?.latestDuration,\n hours: hoursDurationScrollRef.current?.latestDuration,\n minutes: minutesDurationScrollRef.current?.latestDuration,\n seconds: secondsDurationScrollRef.current?.latestDuration,\n },\n reset: (options) => {\n setSelectedDays(safeInitialValue.days);\n setSelectedHours(safeInitialValue.hours);\n setSelectedMinutes(safeInitialValue.minutes);\n setSelectedSeconds(safeInitialValue.seconds);\n daysDurationScrollRef.current?.reset(options);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n if (value.days !== undefined) {\n setSelectedDays(value.days);\n daysDurationScrollRef.current?.setValue(value.days, options);\n }\n if (value.hours !== undefined) {\n setSelectedHours(value.hours);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n }\n if (value.minutes !== undefined) {\n setSelectedMinutes(value.minutes);\n minutesDurationScrollRef.current?.setValue(value.minutes, options);\n }\n if (value.seconds !== undefined) {\n setSelectedSeconds(value.seconds);\n secondsDurationScrollRef.current?.setValue(value.seconds, options);\n }\n },\n }));\n\n return (\n <View {...pickerContainerProps} style={styles.pickerContainer} testID=\"timer-picker\">\n {!hideDays ? (\n <DurationScroll\n ref={daysDurationScrollRef}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n allowFontScaling={allowFontScaling}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.days}\n interval={dayInterval}\n isDisabled={daysPickerIsDisabled}\n label={dayLabel ?? \"d\"}\n limit={dayLimit}\n maximumValue={maximumDays}\n onDurationChange={setSelectedDays}\n padNumbersWithZero={padDaysWithZero}\n padWithNItems={safePadWithNItems}\n pickerColumnWidth={resolvePerColumn(pickerColumnWidth, \"days\")}\n pickerLabelGap={resolvePerColumn(pickerLabelGap, \"days\")}\n repeatNumbersNTimes={repeatDayNumbersNTimes}\n repeatNumbersNTimesNotExplicitlySet={props?.repeatDayNumbersNTimes === undefined}\n selectedValue={selectedDays}\n styles={styles}\n testID=\"duration-scroll-day\"\n {...otherProps}\n />\n ) : null}\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n decelerationRate={decelerationRate}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.hours}\n interval={hourInterval}\n is12HourPicker={use12HourPicker}\n isDisabled={hoursPickerIsDisabled}\n label={hourLabel ?? (!use12HourPicker ? \"h\" : undefined)}\n limit={hourLimit}\n maximumValue={maximumHours}\n onDurationChange={setSelectedHours}\n padNumbersWithZero={padHoursWithZero}\n padWithNItems={safePadWithNItems}\n pickerColumnWidth={resolvePerColumn(pickerColumnWidth, \"hours\")}\n pickerLabelGap={resolvePerColumn(pickerLabelGap, \"hours\")}\n pmLabel={pmLabel}\n repeatNumbersNTimes={repeatHourNumbersNTimes}\n repeatNumbersNTimesNotExplicitlySet={props?.repeatHourNumbersNTimes === undefined}\n selectedValue={selectedHours}\n styles={styles}\n testID=\"duration-scroll-hour\"\n {...otherProps}\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n allowFontScaling={allowFontScaling}\n decelerationRate={decelerationRate}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.minutes}\n interval={minuteInterval}\n isDisabled={minutesPickerIsDisabled}\n label={minuteLabel ?? \"m\"}\n limit={minuteLimit}\n maximumValue={maximumMinutes}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero={padMinutesWithZero}\n padWithNItems={safePadWithNItems}\n pickerColumnWidth={resolvePerColumn(pickerColumnWidth, \"minutes\")}\n pickerLabelGap={resolvePerColumn(pickerLabelGap, \"minutes\")}\n repeatNumbersNTimes={repeatMinuteNumbersNTimes}\n repeatNumbersNTimesNotExplicitlySet={props?.repeatMinuteNumbersNTimes === undefined}\n selectedValue={selectedMinutes}\n styles={styles}\n testID=\"duration-scroll-minute\"\n {...otherProps}\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n aggressivelyGetLatestDuration={aggressivelyGetLatestDuration}\n allowFontScaling={allowFontScaling}\n decelerationRate={decelerationRate}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.seconds}\n interval={secondInterval}\n isDisabled={secondsPickerIsDisabled}\n label={secondLabel ?? \"s\"}\n limit={secondLimit}\n maximumValue={maximumSeconds}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero={padSecondsWithZero}\n padWithNItems={safePadWithNItems}\n pickerColumnWidth={resolvePerColumn(pickerColumnWidth, \"seconds\")}\n pickerLabelGap={resolvePerColumn(pickerLabelGap, \"seconds\")}\n repeatNumbersNTimes={repeatSecondNumbersNTimes}\n repeatNumbersNTimesNotExplicitlySet={props?.repeatSecondNumbersNTimes === undefined}\n selectedValue={selectedSeconds}\n styles={styles}\n testID=\"duration-scroll-second\"\n {...otherProps}\n />\n ) : null}\n </View>\n );\n});\n\nexport default React.memo(TimerPicker);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./TimerPicker\";\n\nexport * from \"./types\";\n\nexport * from \"./styles\";\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,eAAe;AAEvC,cAAc,SAAS;AAEvB,cAAc,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
const DARK_MODE_BACKGROUND_COLOR = "#232323";
|
|
3
|
+
const DARK_MODE_TEXT_COLOR = "#E9E9E9";
|
|
4
|
+
const LIGHT_MODE_BACKGROUND_COLOR = "#F1F1F1";
|
|
5
|
+
const LIGHT_MODE_TEXT_COLOR = "#1B1B1B";
|
|
6
|
+
export const generateStyles = customStyles => {
|
|
7
|
+
var _customStyles$pickerL, _customStyles$text, _customStyles$pickerA, _customStyles$pickerL2, _customStyles$text2, _customStyles$pickerI, _customStyles$text3;
|
|
8
|
+
const backgroundColor = (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR);
|
|
9
|
+
const textColor = (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR;
|
|
10
|
+
const pickerLabelFontSize = (customStyles === null || customStyles === void 0 || (_customStyles$pickerL = customStyles.pickerLabel) === null || _customStyles$pickerL === void 0 ? void 0 : _customStyles$pickerL.fontSize) ?? (customStyles === null || customStyles === void 0 || (_customStyles$text = customStyles.text) === null || _customStyles$text === void 0 ? void 0 : _customStyles$text.fontSize) ?? 18;
|
|
11
|
+
const pickerAmPmFontSize = (customStyles === null || customStyles === void 0 || (_customStyles$pickerA = customStyles.pickerAmPmLabel) === null || _customStyles$pickerA === void 0 ? void 0 : _customStyles$pickerA.fontSize) ?? (customStyles === null || customStyles === void 0 || (_customStyles$pickerL2 = customStyles.pickerLabel) === null || _customStyles$pickerL2 === void 0 ? void 0 : _customStyles$pickerL2.fontSize) ?? (customStyles === null || customStyles === void 0 || (_customStyles$text2 = customStyles.text) === null || _customStyles$text2 === void 0 ? void 0 : _customStyles$text2.fontSize) ?? 18;
|
|
12
|
+
const pickerItemFontSize = (customStyles === null || customStyles === void 0 || (_customStyles$pickerI = customStyles.pickerItem) === null || _customStyles$pickerI === void 0 ? void 0 : _customStyles$pickerI.fontSize) ?? (customStyles === null || customStyles === void 0 || (_customStyles$text3 = customStyles.text) === null || _customStyles$text3 === void 0 ? void 0 : _customStyles$text3.fontSize) ?? 25;
|
|
13
|
+
|
|
14
|
+
// This offset makes the picker label appear to be aligned with the picker item
|
|
15
|
+
// despite them having different font sizes
|
|
16
|
+
const pickerLabelVerticalOffset = pickerItemFontSize - pickerLabelFontSize - 1;
|
|
17
|
+
const pickerAmPmVerticalOffset = pickerItemFontSize - pickerAmPmFontSize - 1;
|
|
18
|
+
|
|
19
|
+
// Determine whether to use the legacy percentage-based label positioning.
|
|
20
|
+
// The new pixel-based system (pickerLabelGap) is the default.
|
|
21
|
+
// The old system is only used when labelOffsetPercentage is explicitly set
|
|
22
|
+
// without pickerLabelGap.
|
|
23
|
+
const useLegacyLabelPosition = (customStyles === null || customStyles === void 0 ? void 0 : customStyles.labelOffsetPercentage) != null && (customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelGap) == null;
|
|
24
|
+
const extraLabelOffsetPercentage = (customStyles === null || customStyles === void 0 ? void 0 : customStyles.labelOffsetPercentage) ?? 8;
|
|
25
|
+
const baseLeftOffsetPercentage = 70;
|
|
26
|
+
const labelOffsetPercentage = baseLeftOffsetPercentage + extraLabelOffsetPercentage;
|
|
27
|
+
return StyleSheet.create({
|
|
28
|
+
disabledPickerContainer: {
|
|
29
|
+
opacity: 0.4,
|
|
30
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.disabledPickerContainer)
|
|
31
|
+
},
|
|
32
|
+
disabledPickerItem: {
|
|
33
|
+
opacity: 0.2,
|
|
34
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.disabledPickerItem)
|
|
35
|
+
},
|
|
36
|
+
durationScrollFlatList: {
|
|
37
|
+
marginRight: "-25%",
|
|
38
|
+
// These paddings allow the inner am/pm label to
|
|
39
|
+
// spill out of the flatlist
|
|
40
|
+
paddingRight: "25%",
|
|
41
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.durationScrollFlatList)
|
|
42
|
+
},
|
|
43
|
+
durationScrollFlatListContainer: {
|
|
44
|
+
flex: 1,
|
|
45
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.durationScrollFlatListContainer)
|
|
46
|
+
},
|
|
47
|
+
durationScrollFlatListContentContainer: {
|
|
48
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.durationScrollFlatListContentContainer)
|
|
49
|
+
},
|
|
50
|
+
maskedView: {
|
|
51
|
+
flex: 1
|
|
52
|
+
},
|
|
53
|
+
pickerAmPmContainer: {
|
|
54
|
+
bottom: 0,
|
|
55
|
+
justifyContent: "center",
|
|
56
|
+
marginTop: pickerAmPmVerticalOffset,
|
|
57
|
+
position: "absolute",
|
|
58
|
+
top: 0,
|
|
59
|
+
// Only apply percentage-based left when using legacy positioning.
|
|
60
|
+
// The new pixel-based positioning is applied per-column in PickerItem.
|
|
61
|
+
...(useLegacyLabelPosition ? {
|
|
62
|
+
left: `${labelOffsetPercentage}%`
|
|
63
|
+
} : undefined),
|
|
64
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelContainer),
|
|
65
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerAmPmContainer)
|
|
66
|
+
},
|
|
67
|
+
pickerAmPmLabel: {
|
|
68
|
+
color: textColor,
|
|
69
|
+
fontSize: 18,
|
|
70
|
+
fontWeight: "bold",
|
|
71
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
|
|
72
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabel),
|
|
73
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerAmPmLabel)
|
|
74
|
+
},
|
|
75
|
+
pickerContainer: {
|
|
76
|
+
backgroundColor,
|
|
77
|
+
flexDirection: "row",
|
|
78
|
+
width: "100%",
|
|
79
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerContainer)
|
|
80
|
+
},
|
|
81
|
+
pickerGradientOverlay: {
|
|
82
|
+
height: "100%",
|
|
83
|
+
position: "absolute",
|
|
84
|
+
width: "100%",
|
|
85
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerGradientOverlay)
|
|
86
|
+
},
|
|
87
|
+
pickerItem: {
|
|
88
|
+
color: textColor,
|
|
89
|
+
fontSize: 25,
|
|
90
|
+
overflow: "visible",
|
|
91
|
+
textAlignVertical: "center",
|
|
92
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
|
|
93
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerItem)
|
|
94
|
+
},
|
|
95
|
+
pickerItemContainer: {
|
|
96
|
+
alignItems: "center",
|
|
97
|
+
flexDirection: "row",
|
|
98
|
+
height: 50,
|
|
99
|
+
justifyContent: "center",
|
|
100
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerItemContainer)
|
|
101
|
+
},
|
|
102
|
+
pickerLabel: {
|
|
103
|
+
color: textColor,
|
|
104
|
+
fontSize: 18,
|
|
105
|
+
fontWeight: "bold",
|
|
106
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
|
|
107
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabel)
|
|
108
|
+
},
|
|
109
|
+
pickerLabelContainer: {
|
|
110
|
+
bottom: 0,
|
|
111
|
+
justifyContent: "center",
|
|
112
|
+
marginTop: pickerLabelVerticalOffset,
|
|
113
|
+
position: "absolute",
|
|
114
|
+
top: 0,
|
|
115
|
+
// Only apply percentage-based left when using legacy positioning.
|
|
116
|
+
// The new pixel-based positioning is applied per-column in DurationScroll.
|
|
117
|
+
...(useLegacyLabelPosition ? {
|
|
118
|
+
left: `${labelOffsetPercentage}%`
|
|
119
|
+
} : undefined),
|
|
120
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelContainer)
|
|
121
|
+
},
|
|
122
|
+
selectedPickerItem: {
|
|
123
|
+
color: textColor,
|
|
124
|
+
fontSize: 25,
|
|
125
|
+
overflow: "visible",
|
|
126
|
+
textAlignVertical: "center",
|
|
127
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
|
|
128
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerItem),
|
|
129
|
+
...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.selectedPickerItem)
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","_customStyles$pickerL","_customStyles$text","_customStyles$pickerA","_customStyles$pickerL2","_customStyles$text2","_customStyles$pickerI","_customStyles$text3","backgroundColor","theme","textColor","pickerLabelFontSize","pickerLabel","fontSize","text","pickerAmPmFontSize","pickerAmPmLabel","pickerItemFontSize","pickerItem","pickerLabelVerticalOffset","pickerAmPmVerticalOffset","useLegacyLabelPosition","labelOffsetPercentage","pickerLabelGap","extraLabelOffsetPercentage","baseLeftOffsetPercentage","create","disabledPickerContainer","opacity","disabledPickerItem","durationScrollFlatList","marginRight","paddingRight","durationScrollFlatListContainer","flex","durationScrollFlatListContentContainer","maskedView","pickerAmPmContainer","bottom","justifyContent","marginTop","position","top","left","undefined","pickerLabelContainer","color","fontWeight","pickerContainer","flexDirection","width","pickerGradientOverlay","height","overflow","textAlignVertical","pickerItemContainer","alignItems","selectedPickerItem"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { TextStyle, ViewStyle } from \"react-native\";\n\nexport type PickerColumn = \"days\" | \"hours\" | \"minutes\" | \"seconds\";\n\nexport type PerColumnValue = number | Partial<Record<PickerColumn, number>>;\n\nexport interface CustomTimerPickerStyles {\n backgroundColor?: string;\n disabledPickerContainer?: ViewStyle;\n disabledPickerItem?: TextStyle;\n durationScrollFlatList?: ViewStyle;\n durationScrollFlatListContainer?: ViewStyle;\n durationScrollFlatListContentContainer?: ViewStyle;\n /** @deprecated Use pickerLabelGap instead. Will be removed in a future version. */\n labelOffsetPercentage?: number;\n pickerAmPmContainer?: ViewStyle;\n pickerAmPmLabel?: TextStyle;\n pickerColumnWidth?: PerColumnValue;\n pickerContainer?: ViewStyle & { backgroundColor?: string };\n pickerGradientOverlay?: ViewStyle;\n pickerItem?: TextStyle;\n pickerItemContainer?: ViewStyle & { height?: number };\n pickerLabel?: TextStyle;\n pickerLabelContainer?: ViewStyle;\n pickerLabelGap?: PerColumnValue;\n selectedPickerItem?: TextStyle;\n text?: TextStyle;\n theme?: \"light\" | \"dark\";\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (customStyles: CustomTimerPickerStyles | undefined) => {\n const backgroundColor =\n customStyles?.backgroundColor ??\n (customStyles?.theme === \"dark\" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR);\n\n const textColor = customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR;\n\n const pickerLabelFontSize =\n customStyles?.pickerLabel?.fontSize ?? customStyles?.text?.fontSize ?? 18;\n const pickerAmPmFontSize =\n customStyles?.pickerAmPmLabel?.fontSize ??\n customStyles?.pickerLabel?.fontSize ??\n customStyles?.text?.fontSize ??\n 18;\n const pickerItemFontSize =\n customStyles?.pickerItem?.fontSize ?? customStyles?.text?.fontSize ?? 25;\n\n // This offset makes the picker label appear to be aligned with the picker item\n // despite them having different font sizes\n const pickerLabelVerticalOffset = pickerItemFontSize - pickerLabelFontSize - 1;\n const pickerAmPmVerticalOffset = pickerItemFontSize - pickerAmPmFontSize - 1;\n\n // Determine whether to use the legacy percentage-based label positioning.\n // The new pixel-based system (pickerLabelGap) is the default.\n // The old system is only used when labelOffsetPercentage is explicitly set\n // without pickerLabelGap.\n const useLegacyLabelPosition =\n customStyles?.labelOffsetPercentage != null && customStyles?.pickerLabelGap == null;\n\n const extraLabelOffsetPercentage = customStyles?.labelOffsetPercentage ?? 8;\n const baseLeftOffsetPercentage = 70;\n const labelOffsetPercentage = baseLeftOffsetPercentage + extraLabelOffsetPercentage;\n\n return StyleSheet.create({\n disabledPickerContainer: {\n opacity: 0.4,\n ...customStyles?.disabledPickerContainer,\n },\n disabledPickerItem: {\n opacity: 0.2,\n ...customStyles?.disabledPickerItem,\n },\n durationScrollFlatList: {\n marginRight: \"-25%\",\n // These paddings allow the inner am/pm label to\n // spill out of the flatlist\n paddingRight: \"25%\",\n ...customStyles?.durationScrollFlatList,\n },\n durationScrollFlatListContainer: {\n flex: 1,\n ...customStyles?.durationScrollFlatListContainer,\n },\n durationScrollFlatListContentContainer: {\n ...customStyles?.durationScrollFlatListContentContainer,\n },\n maskedView: {\n flex: 1,\n },\n pickerAmPmContainer: {\n bottom: 0,\n justifyContent: \"center\",\n marginTop: pickerAmPmVerticalOffset,\n position: \"absolute\",\n top: 0,\n // Only apply percentage-based left when using legacy positioning.\n // The new pixel-based positioning is applied per-column in PickerItem.\n ...(useLegacyLabelPosition ? { left: `${labelOffsetPercentage}%` } : undefined),\n ...customStyles?.pickerLabelContainer,\n ...customStyles?.pickerAmPmContainer,\n },\n pickerAmPmLabel: {\n color: textColor,\n fontSize: 18,\n fontWeight: \"bold\",\n ...customStyles?.text,\n ...customStyles?.pickerLabel,\n ...customStyles?.pickerAmPmLabel,\n },\n pickerContainer: {\n backgroundColor,\n flexDirection: \"row\",\n width: \"100%\",\n ...customStyles?.pickerContainer,\n },\n pickerGradientOverlay: {\n height: \"100%\",\n position: \"absolute\",\n width: \"100%\",\n ...customStyles?.pickerGradientOverlay,\n },\n pickerItem: {\n color: textColor,\n fontSize: 25,\n overflow: \"visible\",\n textAlignVertical: \"center\",\n ...customStyles?.text,\n ...customStyles?.pickerItem,\n },\n pickerItemContainer: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 50,\n justifyContent: \"center\",\n ...customStyles?.pickerItemContainer,\n },\n pickerLabel: {\n color: textColor,\n fontSize: 18,\n fontWeight: \"bold\",\n ...customStyles?.text,\n ...customStyles?.pickerLabel,\n },\n pickerLabelContainer: {\n bottom: 0,\n justifyContent: \"center\",\n marginTop: pickerLabelVerticalOffset,\n position: \"absolute\",\n top: 0,\n // Only apply percentage-based left when using legacy positioning.\n // The new pixel-based positioning is applied per-column in DurationScroll.\n ...(useLegacyLabelPosition ? { left: `${labelOffsetPercentage}%` } : undefined),\n ...customStyles?.pickerLabelContainer,\n },\n selectedPickerItem: {\n color: textColor,\n fontSize: 25,\n overflow: \"visible\",\n textAlignVertical: \"center\",\n ...customStyles?.text,\n ...customStyles?.pickerItem,\n ...customStyles?.selectedPickerItem,\n },\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from \"react\";\nimport { type RefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type { LinearGradientProps, SoundAsset, Limit } from \"../DurationScroll/types\";\nimport type { CustomTimerPickerStyles } from \"./styles\";\n\nexport interface TimerPickerRef {\n latestDuration: {\n days: RefObject<number> | undefined;\n hours: RefObject<number> | undefined;\n minutes: RefObject<number> | undefined;\n seconds: RefObject<number> | undefined;\n };\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerProps {\n aggressivelyGetLatestDuration?: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n /** @deprecated Use pickerFeedback prop instead. Will be removed in a future version. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Audio?: any;\n /** @deprecated Use pickerFeedback prop instead. Will be removed in a future version. */\n clickSoundAsset?: SoundAsset;\n dayInterval?: number;\n dayLabel?: string | React.ReactElement;\n dayLimit?: Limit;\n daysPickerIsDisabled?: boolean;\n decelerationRate?: number | \"normal\" | \"fast\";\n disableInfiniteScroll?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FlatList?: any;\n /** @deprecated Use pickerFeedback prop instead. Will be removed in a future version. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Haptics?: any;\n hideDays?: boolean;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourInterval?: number;\n hourLabel?: string | React.ReactElement;\n hourLimit?: Limit;\n hoursPickerIsDisabled?: boolean;\n initialValue?: {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MaskedView?: any;\n maximumDays?: number;\n maximumHours?: number;\n maximumMinutes?: number;\n maximumSeconds?: number;\n minuteInterval?: number;\n minuteLabel?: string | React.ReactElement;\n minuteLimit?: Limit;\n minutesPickerIsDisabled?: boolean;\n onDurationChange?: (duration: {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n padDaysWithZero?: boolean;\n padHoursWithZero?: boolean;\n padMinutesWithZero?: boolean;\n padSecondsWithZero?: boolean;\n padWithNItems?: number;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatDayNumbersNTimes?: number;\n repeatHourNumbersNTimes?: number;\n repeatMinuteNumbersNTimes?: number;\n repeatSecondNumbersNTimes?: number;\n secondInterval?: number;\n secondLabel?: string | React.ReactElement;\n secondLimit?: Limit;\n secondsPickerIsDisabled?: boolean;\n styles?: CustomTimerPickerStyles;\n use12HourPicker?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
3
|
+
import { View, Text, TouchableOpacity } from "react-native";
|
|
4
|
+
import { getSafeInitialValue } from "../../utils/getSafeInitialValue";
|
|
5
|
+
import Modal from "../Modal";
|
|
6
|
+
import TimerPicker from "../TimerPicker";
|
|
7
|
+
import { DEFAULT_COLUMN_WIDTH, generateStyles } from "./styles";
|
|
8
|
+
const resolveColumnWidth = (pickerColumnWidth, column) => {
|
|
9
|
+
if (pickerColumnWidth == null) {
|
|
10
|
+
return DEFAULT_COLUMN_WIDTH;
|
|
11
|
+
}
|
|
12
|
+
if (typeof pickerColumnWidth === "number") {
|
|
13
|
+
return pickerColumnWidth;
|
|
14
|
+
}
|
|
15
|
+
return pickerColumnWidth[column] ?? DEFAULT_COLUMN_WIDTH;
|
|
16
|
+
};
|
|
17
|
+
const TimerPickerModal = /*#__PURE__*/forwardRef((props, ref) => {
|
|
18
|
+
const {
|
|
19
|
+
buttonContainerProps,
|
|
20
|
+
buttonTouchableOpacityProps,
|
|
21
|
+
cancelButtonText = "Cancel",
|
|
22
|
+
closeOnOverlayPress,
|
|
23
|
+
confirmButtonText = "Confirm",
|
|
24
|
+
containerProps,
|
|
25
|
+
contentContainerProps,
|
|
26
|
+
hideCancelButton = false,
|
|
27
|
+
hideDays = true,
|
|
28
|
+
hideHours = false,
|
|
29
|
+
hideMinutes = false,
|
|
30
|
+
hideSeconds = false,
|
|
31
|
+
initialValue,
|
|
32
|
+
modalProps,
|
|
33
|
+
modalTitle,
|
|
34
|
+
modalTitleProps,
|
|
35
|
+
onCancel,
|
|
36
|
+
onConfirm,
|
|
37
|
+
onDurationChange,
|
|
38
|
+
setIsVisible,
|
|
39
|
+
styles: customStyles,
|
|
40
|
+
visible,
|
|
41
|
+
...otherProps
|
|
42
|
+
} = props;
|
|
43
|
+
const pickerColumnWidth = customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerColumnWidth;
|
|
44
|
+
const totalColumnWidth = (!hideDays ? resolveColumnWidth(pickerColumnWidth, "days") : 0) + (!hideHours ? resolveColumnWidth(pickerColumnWidth, "hours") : 0) + (!hideMinutes ? resolveColumnWidth(pickerColumnWidth, "minutes") : 0) + (!hideSeconds ? resolveColumnWidth(pickerColumnWidth, "seconds") : 0);
|
|
45
|
+
const styles = generateStyles(customStyles, {
|
|
46
|
+
hasModalTitle: Boolean(modalTitle),
|
|
47
|
+
totalColumnWidth
|
|
48
|
+
});
|
|
49
|
+
const timerPickerRef = useRef(null);
|
|
50
|
+
const safeInitialValue = getSafeInitialValue({
|
|
51
|
+
days: initialValue === null || initialValue === void 0 ? void 0 : initialValue.days,
|
|
52
|
+
hours: initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours,
|
|
53
|
+
minutes: initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes,
|
|
54
|
+
seconds: initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds
|
|
55
|
+
});
|
|
56
|
+
const [selectedDuration, setSelectedDuration] = useState(safeInitialValue);
|
|
57
|
+
const [confirmedDuration, setConfirmedDuration] = useState(safeInitialValue);
|
|
58
|
+
const reset = options => {
|
|
59
|
+
var _timerPickerRef$curre;
|
|
60
|
+
setSelectedDuration(safeInitialValue);
|
|
61
|
+
setConfirmedDuration(safeInitialValue);
|
|
62
|
+
(_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// reset state if the initial value changes
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
reset();
|
|
68
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
|
+
}, [safeInitialValue.days, safeInitialValue.hours, safeInitialValue.minutes, safeInitialValue.seconds]);
|
|
70
|
+
const hideModalHandler = () => {
|
|
71
|
+
setSelectedDuration({
|
|
72
|
+
days: confirmedDuration.days,
|
|
73
|
+
hours: confirmedDuration.hours,
|
|
74
|
+
minutes: confirmedDuration.minutes,
|
|
75
|
+
seconds: confirmedDuration.seconds
|
|
76
|
+
});
|
|
77
|
+
setIsVisible(false);
|
|
78
|
+
};
|
|
79
|
+
const confirmHandler = () => {
|
|
80
|
+
var _timerPickerRef$curre2, _latestDuration$days, _latestDuration$hours, _latestDuration$minut, _latestDuration$secon;
|
|
81
|
+
const latestDuration = (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 ? void 0 : _timerPickerRef$curre2.latestDuration;
|
|
82
|
+
const newDuration = {
|
|
83
|
+
days: (latestDuration === null || latestDuration === void 0 || (_latestDuration$days = latestDuration.days) === null || _latestDuration$days === void 0 ? void 0 : _latestDuration$days.current) ?? selectedDuration.days,
|
|
84
|
+
hours: (latestDuration === null || latestDuration === void 0 || (_latestDuration$hours = latestDuration.hours) === null || _latestDuration$hours === void 0 ? void 0 : _latestDuration$hours.current) ?? selectedDuration.hours,
|
|
85
|
+
minutes: (latestDuration === null || latestDuration === void 0 || (_latestDuration$minut = latestDuration.minutes) === null || _latestDuration$minut === void 0 ? void 0 : _latestDuration$minut.current) ?? selectedDuration.minutes,
|
|
86
|
+
seconds: (latestDuration === null || latestDuration === void 0 || (_latestDuration$secon = latestDuration.seconds) === null || _latestDuration$secon === void 0 ? void 0 : _latestDuration$secon.current) ?? selectedDuration.seconds
|
|
87
|
+
};
|
|
88
|
+
setConfirmedDuration(newDuration);
|
|
89
|
+
onConfirm(newDuration);
|
|
90
|
+
};
|
|
91
|
+
const cancelHandler = () => {
|
|
92
|
+
setIsVisible(false);
|
|
93
|
+
setSelectedDuration(confirmedDuration);
|
|
94
|
+
onCancel === null || onCancel === void 0 || onCancel();
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// wrapped in useCallback to avoid unnecessary re-renders of TimerPicker
|
|
98
|
+
const durationChangeHandler = useCallback(duration => {
|
|
99
|
+
setSelectedDuration(duration);
|
|
100
|
+
onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
|
|
101
|
+
}, [onDurationChange]);
|
|
102
|
+
useImperativeHandle(ref, () => {
|
|
103
|
+
var _timerPickerRef$curre3, _timerPickerRef$curre4, _timerPickerRef$curre5, _timerPickerRef$curre6;
|
|
104
|
+
return {
|
|
105
|
+
latestDuration: {
|
|
106
|
+
days: (_timerPickerRef$curre3 = timerPickerRef.current) === null || _timerPickerRef$curre3 === void 0 || (_timerPickerRef$curre3 = _timerPickerRef$curre3.latestDuration) === null || _timerPickerRef$curre3 === void 0 ? void 0 : _timerPickerRef$curre3.days,
|
|
107
|
+
hours: (_timerPickerRef$curre4 = timerPickerRef.current) === null || _timerPickerRef$curre4 === void 0 || (_timerPickerRef$curre4 = _timerPickerRef$curre4.latestDuration) === null || _timerPickerRef$curre4 === void 0 ? void 0 : _timerPickerRef$curre4.hours,
|
|
108
|
+
minutes: (_timerPickerRef$curre5 = timerPickerRef.current) === null || _timerPickerRef$curre5 === void 0 || (_timerPickerRef$curre5 = _timerPickerRef$curre5.latestDuration) === null || _timerPickerRef$curre5 === void 0 ? void 0 : _timerPickerRef$curre5.minutes,
|
|
109
|
+
seconds: (_timerPickerRef$curre6 = timerPickerRef.current) === null || _timerPickerRef$curre6 === void 0 || (_timerPickerRef$curre6 = _timerPickerRef$curre6.latestDuration) === null || _timerPickerRef$curre6 === void 0 ? void 0 : _timerPickerRef$curre6.seconds
|
|
110
|
+
},
|
|
111
|
+
reset,
|
|
112
|
+
setValue: (value, options) => {
|
|
113
|
+
var _timerPickerRef$curre7;
|
|
114
|
+
setSelectedDuration(prev => ({
|
|
115
|
+
...prev,
|
|
116
|
+
...value
|
|
117
|
+
}));
|
|
118
|
+
setConfirmedDuration(prev => ({
|
|
119
|
+
...prev,
|
|
120
|
+
...value
|
|
121
|
+
}));
|
|
122
|
+
(_timerPickerRef$curre7 = timerPickerRef.current) === null || _timerPickerRef$curre7 === void 0 || _timerPickerRef$curre7.setValue(value, options);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
return /*#__PURE__*/React.createElement(Modal, _extends({
|
|
127
|
+
isVisible: visible,
|
|
128
|
+
onOverlayPress: closeOnOverlayPress ? hideModalHandler : undefined
|
|
129
|
+
}, modalProps, {
|
|
130
|
+
testID: "timer-picker-modal"
|
|
131
|
+
}), /*#__PURE__*/React.createElement(View, _extends({}, containerProps, {
|
|
132
|
+
style: styles.container
|
|
133
|
+
}), /*#__PURE__*/React.createElement(View, _extends({}, contentContainerProps, {
|
|
134
|
+
style: styles.contentContainer
|
|
135
|
+
}), modalTitle ? /*#__PURE__*/React.createElement(Text, _extends({}, modalTitleProps, {
|
|
136
|
+
style: styles.modalTitle
|
|
137
|
+
}), modalTitle) : null, /*#__PURE__*/React.createElement(TimerPicker, _extends({
|
|
138
|
+
ref: timerPickerRef,
|
|
139
|
+
hideDays: hideDays,
|
|
140
|
+
hideHours: hideHours,
|
|
141
|
+
hideMinutes: hideMinutes,
|
|
142
|
+
hideSeconds: hideSeconds,
|
|
143
|
+
initialValue: confirmedDuration
|
|
144
|
+
}, otherProps, {
|
|
145
|
+
aggressivelyGetLatestDuration: true,
|
|
146
|
+
onDurationChange: durationChangeHandler,
|
|
147
|
+
styles: styles.timerPickerStyles
|
|
148
|
+
})), /*#__PURE__*/React.createElement(View, _extends({}, buttonContainerProps, {
|
|
149
|
+
style: styles.buttonContainer
|
|
150
|
+
}), !hideCancelButton ? /*#__PURE__*/React.isValidElement(props.cancelButton) ? (/*#__PURE__*/React.cloneElement(props.cancelButton, {
|
|
151
|
+
onPress: cancelHandler
|
|
152
|
+
})) : /*#__PURE__*/React.createElement(TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
|
|
153
|
+
onPress: cancelHandler
|
|
154
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
155
|
+
style: [styles.button, styles.cancelButton]
|
|
156
|
+
}, cancelButtonText)) : null, /*#__PURE__*/React.isValidElement(props.confirmButton) ? (/*#__PURE__*/React.cloneElement(props.confirmButton, {
|
|
157
|
+
onPress: confirmHandler
|
|
158
|
+
})) : /*#__PURE__*/React.createElement(TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
|
|
159
|
+
onPress: confirmHandler
|
|
160
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
161
|
+
style: [styles.button, styles.confirmButton]
|
|
162
|
+
}, confirmButtonText))))));
|
|
163
|
+
});
|
|
164
|
+
export default /*#__PURE__*/React.memo(TimerPickerModal);
|
|
165
|
+
//# sourceMappingURL=TimerPickerModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","getSafeInitialValue","Modal","TimerPicker","DEFAULT_COLUMN_WIDTH","generateStyles","resolveColumnWidth","pickerColumnWidth","column","TimerPickerModal","props","ref","buttonContainerProps","buttonTouchableOpacityProps","cancelButtonText","closeOnOverlayPress","confirmButtonText","containerProps","contentContainerProps","hideCancelButton","hideDays","hideHours","hideMinutes","hideSeconds","initialValue","modalProps","modalTitle","modalTitleProps","onCancel","onConfirm","onDurationChange","setIsVisible","styles","customStyles","visible","otherProps","totalColumnWidth","hasModalTitle","Boolean","timerPickerRef","safeInitialValue","days","hours","minutes","seconds","selectedDuration","setSelectedDuration","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","current","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$days","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","duration","_timerPickerRef$curre3","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre7","prev","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","aggressivelyGetLatestDuration","timerPickerStyles","buttonContainer","isValidElement","cancelButton","cloneElement","onPress","button","confirmButton","memo"],"sources":["TimerPickerModal.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport { getSafeInitialValue } from \"../../utils/getSafeInitialValue\";\nimport Modal from \"../Modal\";\nimport TimerPicker from \"../TimerPicker\";\nimport type { TimerPickerRef } from \"../TimerPicker\";\nimport type { PerColumnValue, PickerColumn } from \"../TimerPicker/styles\";\nimport { DEFAULT_COLUMN_WIDTH, generateStyles } from \"./styles\";\nimport type { TimerPickerModalRef, TimerPickerModalProps } from \"./types\";\n\nconst resolveColumnWidth = (\n pickerColumnWidth: PerColumnValue | undefined,\n column: PickerColumn\n): number => {\n if (pickerColumnWidth == null) {\n return DEFAULT_COLUMN_WIDTH;\n }\n\n if (typeof pickerColumnWidth === \"number\") {\n return pickerColumnWidth;\n }\n\n return pickerColumnWidth[column] ?? DEFAULT_COLUMN_WIDTH;\n};\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>((props, ref) => {\n const {\n buttonContainerProps,\n buttonTouchableOpacityProps,\n cancelButtonText = \"Cancel\",\n closeOnOverlayPress,\n confirmButtonText = \"Confirm\",\n containerProps,\n contentContainerProps,\n hideCancelButton = false,\n hideDays = true,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n initialValue,\n modalProps,\n modalTitle,\n modalTitleProps,\n onCancel,\n onConfirm,\n onDurationChange,\n setIsVisible,\n styles: customStyles,\n visible,\n ...otherProps\n } = props;\n\n const pickerColumnWidth = customStyles?.pickerColumnWidth;\n\n const totalColumnWidth =\n (!hideDays ? resolveColumnWidth(pickerColumnWidth, \"days\") : 0) +\n (!hideHours ? resolveColumnWidth(pickerColumnWidth, \"hours\") : 0) +\n (!hideMinutes ? resolveColumnWidth(pickerColumnWidth, \"minutes\") : 0) +\n (!hideSeconds ? resolveColumnWidth(pickerColumnWidth, \"seconds\") : 0);\n\n const styles = generateStyles(customStyles, {\n hasModalTitle: Boolean(modalTitle),\n totalColumnWidth,\n });\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const safeInitialValue = getSafeInitialValue({\n days: initialValue?.days,\n hours: initialValue?.hours,\n minutes: initialValue?.minutes,\n seconds: initialValue?.seconds,\n });\n\n const [selectedDuration, setSelectedDuration] = useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] = useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.days,\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\n ]);\n\n const hideModalHandler = () => {\n setSelectedDuration({\n days: confirmedDuration.days,\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n\n const newDuration = {\n days: latestDuration?.days?.current ?? selectedDuration.days,\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes: latestDuration?.minutes?.current ?? selectedDuration.minutes,\n seconds: latestDuration?.seconds?.current ?? selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { days: number; hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n latestDuration: {\n days: timerPickerRef.current?.latestDuration?.days,\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n reset,\n setValue: (value, options) => {\n setSelectedDuration((prev) => ({\n ...prev,\n ...value,\n }));\n setConfirmedDuration((prev) => ({\n ...prev,\n ...value,\n }));\n timerPickerRef.current?.setValue(value, options);\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={closeOnOverlayPress ? hideModalHandler : undefined}\n {...modalProps}\n testID=\"timer-picker-modal\"\n >\n <View {...containerProps} style={styles.container}>\n <View {...contentContainerProps} style={styles.contentContainer}>\n {modalTitle ? (\n <Text {...modalTitleProps} style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n hideDays={hideDays}\n hideHours={hideHours}\n hideMinutes={hideMinutes}\n hideSeconds={hideSeconds}\n initialValue={confirmedDuration}\n {...otherProps}\n aggressivelyGetLatestDuration\n onDurationChange={durationChangeHandler}\n styles={styles.timerPickerStyles}\n />\n <View {...buttonContainerProps} style={styles.buttonContainer}>\n {!hideCancelButton ? (\n React.isValidElement(props.cancelButton) ? (\n React.cloneElement(props.cancelButton, {\n onPress: cancelHandler,\n })\n ) : (\n <TouchableOpacity {...buttonTouchableOpacityProps} onPress={cancelHandler}>\n <Text style={[styles.button, styles.cancelButton]}>{cancelButtonText}</Text>\n </TouchableOpacity>\n )\n ) : null}\n {React.isValidElement(props.confirmButton) ? (\n React.cloneElement(props.confirmButton, {\n onPress: confirmHandler,\n })\n ) : (\n <TouchableOpacity {...buttonTouchableOpacityProps} onPress={confirmHandler}>\n <Text style={[styles.button, styles.confirmButton]}>{confirmButtonText}</Text>\n </TouchableOpacity>\n )}\n </View>\n </View>\n </View>\n </Modal>\n );\n});\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./TimerPickerModal\";\n\nexport * from \"./types\";\n\nexport * from \"./styles\";\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,oBAAoB;AAE5C,cAAc,SAAS;AAEvB,cAAc,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
export const DEFAULT_COLUMN_WIDTH = 70;
|
|
3
|
+
const DARK_MODE_BACKGROUND_COLOR = "#232323";
|
|
4
|
+
const DARK_MODE_TEXT_COLOR = "#E9E9E9";
|
|
5
|
+
const LIGHT_MODE_BACKGROUND_COLOR = "#F1F1F1";
|
|
6
|
+
const LIGHT_MODE_TEXT_COLOR = "#1B1B1B";
|
|
7
|
+
export const generateStyles = (customStyles, variables) => {
|
|
8
|
+
const {
|
|
9
|
+
button: customButtonStyle,
|
|
10
|
+
buttonContainer: customButtonContainerStyle,
|
|
11
|
+
cancelButton: customCancelButtonStyle,
|
|
12
|
+
confirmButton: customConfirmButtonStyle,
|
|
13
|
+
container: customContainerStyle,
|
|
14
|
+
contentContainer: customContentContainerStyle,
|
|
15
|
+
modalTitle: customModalTitleStyle,
|
|
16
|
+
...customTimerPickerStyles
|
|
17
|
+
} = customStyles ?? {};
|
|
18
|
+
const totalColumnWidth = variables.totalColumnWidth;
|
|
19
|
+
const modalPadding = (customContentContainerStyle === null || customContentContainerStyle === void 0 ? void 0 : customContentContainerStyle.paddingHorizontal) ?? 20;
|
|
20
|
+
const labelOverhang = 20;
|
|
21
|
+
const computedWidth = Math.max(DEFAULT_COLUMN_WIDTH * 2, totalColumnWidth + modalPadding * 2 + labelOverhang);
|
|
22
|
+
return StyleSheet.create({
|
|
23
|
+
button: {
|
|
24
|
+
borderRadius: 10,
|
|
25
|
+
borderWidth: 1,
|
|
26
|
+
fontSize: 16,
|
|
27
|
+
marginHorizontal: 12,
|
|
28
|
+
overflow: "hidden",
|
|
29
|
+
paddingHorizontal: 20,
|
|
30
|
+
paddingVertical: 10,
|
|
31
|
+
...(customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.text),
|
|
32
|
+
...customButtonStyle
|
|
33
|
+
},
|
|
34
|
+
buttonContainer: {
|
|
35
|
+
flexDirection: "row",
|
|
36
|
+
marginBottom: 20,
|
|
37
|
+
marginTop: 25,
|
|
38
|
+
...customButtonContainerStyle
|
|
39
|
+
},
|
|
40
|
+
cancelButton: {
|
|
41
|
+
backgroundColor: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? "gray" : undefined,
|
|
42
|
+
borderColor: "gray",
|
|
43
|
+
color: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : "gray",
|
|
44
|
+
...(customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.text),
|
|
45
|
+
...customCancelButtonStyle
|
|
46
|
+
},
|
|
47
|
+
confirmButton: {
|
|
48
|
+
backgroundColor: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? "green" : undefined,
|
|
49
|
+
borderColor: "green",
|
|
50
|
+
color: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : "green",
|
|
51
|
+
...(customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.text),
|
|
52
|
+
...customConfirmButtonStyle
|
|
53
|
+
},
|
|
54
|
+
container: {
|
|
55
|
+
justifyContent: "center",
|
|
56
|
+
overflow: "hidden",
|
|
57
|
+
...customContainerStyle
|
|
58
|
+
},
|
|
59
|
+
contentContainer: {
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
backgroundColor: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.backgroundColor) ?? ((customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR),
|
|
62
|
+
borderRadius: 20,
|
|
63
|
+
justifyContent: "center",
|
|
64
|
+
overflow: "hidden",
|
|
65
|
+
paddingHorizontal: 20,
|
|
66
|
+
width: computedWidth,
|
|
67
|
+
...customContentContainerStyle
|
|
68
|
+
},
|
|
69
|
+
modalTitle: {
|
|
70
|
+
color: (customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
|
|
71
|
+
fontSize: 24,
|
|
72
|
+
fontWeight: "600",
|
|
73
|
+
marginBottom: 15,
|
|
74
|
+
marginTop: 20,
|
|
75
|
+
...(customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.text),
|
|
76
|
+
...customModalTitleStyle
|
|
77
|
+
},
|
|
78
|
+
timerPickerStyles: {
|
|
79
|
+
...customTimerPickerStyles,
|
|
80
|
+
pickerContainer: {
|
|
81
|
+
marginRight: "8%",
|
|
82
|
+
paddingTop: !(variables !== null && variables !== void 0 && variables.hasModalTitle) ? 20 : 0,
|
|
83
|
+
...((customTimerPickerStyles === null || customTimerPickerStyles === void 0 ? void 0 : customTimerPickerStyles.pickerContainer) ?? {})
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","DEFAULT_COLUMN_WIDTH","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","variables","button","customButtonStyle","buttonContainer","customButtonContainerStyle","cancelButton","customCancelButtonStyle","confirmButton","customConfirmButtonStyle","container","customContainerStyle","contentContainer","customContentContainerStyle","modalTitle","customModalTitleStyle","customTimerPickerStyles","totalColumnWidth","modalPadding","paddingHorizontal","labelOverhang","computedWidth","Math","max","create","borderRadius","borderWidth","fontSize","marginHorizontal","overflow","paddingVertical","text","flexDirection","marginBottom","marginTop","backgroundColor","theme","undefined","borderColor","color","justifyContent","alignItems","width","fontWeight","timerPickerStyles","pickerContainer","marginRight","paddingTop","hasModalTitle"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { DimensionValue, TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"../TimerPicker/styles\";\n\nexport const DEFAULT_COLUMN_WIDTH = 70;\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n button?: TextStyle;\n buttonContainer?: ViewStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined,\n variables: {\n hasModalTitle: boolean;\n totalColumnWidth: number;\n }\n) => {\n const {\n button: customButtonStyle,\n buttonContainer: customButtonContainerStyle,\n cancelButton: customCancelButtonStyle,\n confirmButton: customConfirmButtonStyle,\n container: customContainerStyle,\n contentContainer: customContentContainerStyle,\n modalTitle: customModalTitleStyle,\n ...customTimerPickerStyles\n } = customStyles ?? {};\n\n const totalColumnWidth = variables.totalColumnWidth;\n const modalPadding = (customContentContainerStyle?.paddingHorizontal as number) ?? 20;\n const labelOverhang = 20;\n const computedWidth = Math.max(\n DEFAULT_COLUMN_WIDTH * 2,\n totalColumnWidth + modalPadding * 2 + labelOverhang\n );\n\n return StyleSheet.create({\n button: {\n borderRadius: 10,\n borderWidth: 1,\n fontSize: 16,\n marginHorizontal: 12,\n overflow: \"hidden\",\n paddingHorizontal: 20,\n paddingVertical: 10,\n ...customTimerPickerStyles?.text,\n ...customButtonStyle,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginBottom: 20,\n marginTop: 25,\n ...customButtonContainerStyle,\n },\n cancelButton: {\n backgroundColor: customTimerPickerStyles?.theme === \"dark\" ? \"gray\" : undefined,\n borderColor: \"gray\",\n color: customTimerPickerStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n ...customTimerPickerStyles?.text,\n ...customCancelButtonStyle,\n },\n confirmButton: {\n backgroundColor: customTimerPickerStyles?.theme === \"dark\" ? \"green\" : undefined,\n borderColor: \"green\",\n color: customTimerPickerStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n ...customTimerPickerStyles?.text,\n ...customConfirmButtonStyle,\n },\n container: {\n justifyContent: \"center\",\n overflow: \"hidden\",\n ...customContainerStyle,\n },\n contentContainer: {\n alignItems: \"center\",\n backgroundColor:\n customTimerPickerStyles?.backgroundColor ??\n (customTimerPickerStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR),\n borderRadius: 20,\n justifyContent: \"center\",\n overflow: \"hidden\",\n paddingHorizontal: 20,\n width: computedWidth,\n ...customContentContainerStyle,\n },\n modalTitle: {\n color:\n customTimerPickerStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,\n fontSize: 24,\n fontWeight: \"600\",\n marginBottom: 15,\n marginTop: 20,\n ...customTimerPickerStyles?.text,\n ...customModalTitleStyle,\n },\n timerPickerStyles: {\n ...customTimerPickerStyles,\n pickerContainer: {\n marginRight: \"8%\" as DimensionValue,\n paddingTop: !variables?.hasModalTitle ? 20 : 0,\n ...(customTimerPickerStyles?.pickerContainer ?? {}),\n },\n },\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from \"react\";\nimport { type RefObject, type ReactElement } from \"react\";\n\nimport type { View, TouchableOpacity, Text } from \"react-native\";\n\nimport type Modal from \"../Modal\";\nimport type { TimerPickerProps } from \"../TimerPicker/types\";\nimport type { CustomTimerPickerModalStyles } from \"./styles\";\n\nexport interface TimerPickerModalRef {\n latestDuration: {\n days: RefObject<number> | undefined;\n hours: RefObject<number> | undefined;\n minutes: RefObject<number> | undefined;\n seconds: RefObject<number> | undefined;\n };\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerModalProps extends TimerPickerProps {\n buttonContainerProps?: React.ComponentProps<typeof View>;\n buttonTouchableOpacityProps?: React.ComponentProps<typeof TouchableOpacity>;\n /** Custom cancel button component. If provided, replaces the default cancel button. */\n cancelButton?: ReactElement<{ onPress?: () => void }>;\n cancelButtonText?: string;\n closeOnOverlayPress?: boolean;\n /** Custom confirm button component. If provided, replaces the default confirm button. */\n confirmButton?: ReactElement<{ onPress?: () => void }>;\n confirmButtonText?: string;\n containerProps?: React.ComponentProps<typeof View>;\n contentContainerProps?: React.ComponentProps<typeof View>;\n hideCancelButton?: boolean;\n modalProps?: React.ComponentProps<typeof Modal>;\n modalTitle?: string;\n modalTitleProps?: React.ComponentProps<typeof Text>;\n onCancel?: () => void;\n onConfirm: ({\n days,\n hours,\n minutes,\n seconds,\n }: {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n setIsVisible: (isVisible: boolean) => void;\n styles?: CustomTimerPickerModalStyles;\n visible: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default","TimerPickerModal","TimerPicker"],"sources":["index.ts"],"sourcesContent":["export { default as TimerPickerModal } from \"./components/TimerPickerModal\";\nexport type {\n TimerPickerModalProps,\n TimerPickerModalRef,\n CustomTimerPickerModalStyles,\n} from \"./components/TimerPickerModal\";\n\nexport { default as TimerPicker } from \"./components/TimerPicker\";\nexport type {\n TimerPickerProps,\n TimerPickerRef,\n CustomTimerPickerStyles,\n} from \"./components/TimerPicker\";\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,gBAAgB,QAAQ,+BAA+B;AAO3E,SAASD,OAAO,IAAIE,WAAW,QAAQ,0BAA0B","ignoreList":[]}
|