react-native-timer-picker 1.2.7 → 1.2.9

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.
Files changed (110) hide show
  1. package/dist/commonjs/components/Modal/Modal.styles.js +32 -0
  2. package/dist/commonjs/components/Modal/Modal.styles.js.map +1 -0
  3. package/dist/commonjs/components/Modal/index.js +108 -0
  4. package/dist/commonjs/components/Modal/index.js.map +1 -0
  5. package/dist/commonjs/components/TimerPicker/DurationScroll.js +210 -0
  6. package/dist/commonjs/components/TimerPicker/DurationScroll.js.map +1 -0
  7. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js +67 -0
  8. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js.map +1 -0
  9. package/dist/commonjs/components/TimerPicker/index.js +130 -0
  10. package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
  11. package/dist/commonjs/components/TimerPickerModal.styles.js +69 -0
  12. package/dist/commonjs/components/TimerPickerModal.styles.js.map +1 -0
  13. package/dist/commonjs/components/index.js +156 -0
  14. package/dist/commonjs/components/index.js.map +1 -0
  15. package/dist/commonjs/index.js +21 -0
  16. package/dist/commonjs/index.js.map +1 -0
  17. package/dist/commonjs/tests/DurationScroll.test.js +56 -0
  18. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
  19. package/dist/commonjs/tests/Modal.test.js +40 -0
  20. package/dist/commonjs/tests/Modal.test.js.map +1 -0
  21. package/dist/commonjs/tests/TimerPicker.test.js +37 -0
  22. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
  23. package/dist/commonjs/tests/TimerPickerModal.test.js +73 -0
  24. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
  25. package/dist/commonjs/utils/colorToRgba.js +51 -0
  26. package/dist/commonjs/utils/colorToRgba.js.map +1 -0
  27. package/dist/commonjs/utils/generateNumbers.js +32 -0
  28. package/dist/commonjs/utils/generateNumbers.js.map +1 -0
  29. package/dist/commonjs/utils/getAdjustedLimit.js +32 -0
  30. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
  31. package/dist/commonjs/utils/getScrollIndex.js +17 -0
  32. package/dist/commonjs/utils/getScrollIndex.js.map +1 -0
  33. package/dist/commonjs/utils/padWithZero.js +15 -0
  34. package/dist/commonjs/utils/padWithZero.js.map +1 -0
  35. package/dist/module/components/Modal/Modal.styles.js +26 -0
  36. package/dist/module/components/Modal/Modal.styles.js.map +1 -0
  37. package/dist/module/components/Modal/index.js +100 -0
  38. package/dist/module/components/Modal/index.js.map +1 -0
  39. package/dist/module/components/TimerPicker/DurationScroll.js +202 -0
  40. package/dist/module/components/TimerPicker/DurationScroll.js.map +1 -0
  41. package/dist/module/components/TimerPicker/TimerPicker.styles.js +59 -0
  42. package/dist/module/components/TimerPicker/TimerPicker.styles.js.map +1 -0
  43. package/dist/module/components/TimerPicker/index.js +121 -0
  44. package/dist/module/components/TimerPicker/index.js.map +1 -0
  45. package/dist/module/components/TimerPickerModal.styles.js +61 -0
  46. package/dist/module/components/TimerPickerModal.styles.js.map +1 -0
  47. package/dist/module/components/index.js +147 -0
  48. package/dist/module/components/index.js.map +1 -0
  49. package/dist/module/index.js +3 -0
  50. package/dist/module/index.js.map +1 -0
  51. package/dist/module/tests/DurationScroll.test.js +53 -0
  52. package/dist/module/tests/DurationScroll.test.js.map +1 -0
  53. package/dist/module/tests/Modal.test.js +37 -0
  54. package/dist/module/tests/Modal.test.js.map +1 -0
  55. package/dist/module/tests/TimerPicker.test.js +34 -0
  56. package/dist/module/tests/TimerPicker.test.js.map +1 -0
  57. package/dist/module/tests/TimerPickerModal.test.js +70 -0
  58. package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
  59. package/dist/module/utils/colorToRgba.js +44 -0
  60. package/dist/module/utils/colorToRgba.js.map +1 -0
  61. package/dist/module/utils/generateNumbers.js +25 -0
  62. package/dist/module/utils/generateNumbers.js.map +1 -0
  63. package/dist/module/utils/getAdjustedLimit.js +25 -0
  64. package/dist/module/utils/getAdjustedLimit.js.map +1 -0
  65. package/dist/module/utils/getScrollIndex.js +10 -0
  66. package/dist/module/utils/getScrollIndex.js.map +1 -0
  67. package/dist/module/utils/padWithZero.js +8 -0
  68. package/dist/module/utils/padWithZero.js.map +1 -0
  69. package/dist/typescript/index.d.ts +4 -0
  70. package/dist/{utils → typescript/utils}/colorToRgba.d.ts +1 -1
  71. package/dist/{utils → typescript/utils}/getScrollIndex.d.ts +1 -1
  72. package/package.json +29 -12
  73. package/{dist/components/Modal/Modal.styles.js → src/components/Modal/Modal.styles.ts} +4 -6
  74. package/src/components/Modal/index.tsx +134 -0
  75. package/src/components/TimerPicker/DurationScroll.tsx +337 -0
  76. package/src/components/TimerPicker/TimerPicker.styles.ts +87 -0
  77. package/src/components/TimerPicker/index.tsx +216 -0
  78. package/src/components/TimerPickerModal.styles.ts +87 -0
  79. package/src/components/index.tsx +243 -0
  80. package/src/index.ts +14 -0
  81. package/src/tests/DurationScroll.test.tsx +57 -0
  82. package/src/tests/Modal.test.tsx +34 -0
  83. package/src/tests/TimerPicker.test.tsx +27 -0
  84. package/src/tests/TimerPickerModal.test.tsx +70 -0
  85. package/{dist/utils/colorToRgba.js → src/utils/colorToRgba.ts} +18 -17
  86. package/src/utils/generateNumbers.ts +34 -0
  87. package/{dist/utils/getAdjustedLimit.js → src/utils/getAdjustedLimit.ts} +14 -7
  88. package/src/utils/getScrollIndex.ts +15 -0
  89. package/src/utils/padWithZero.ts +7 -0
  90. package/dist/components/Modal/index.js +0 -109
  91. package/dist/components/TimerPicker/DurationScroll.js +0 -211
  92. package/dist/components/TimerPicker/TimerPicker.styles.js +0 -41
  93. package/dist/components/TimerPicker/index.js +0 -81
  94. package/dist/components/TimerPickerModal.styles.js +0 -37
  95. package/dist/components/index.js +0 -118
  96. package/dist/index.d.ts +0 -4
  97. package/dist/index.js +0 -10
  98. package/dist/utils/generateNumbers.js +0 -30
  99. package/dist/utils/getScrollIndex.js +0 -10
  100. package/dist/utils/padWithZero.js +0 -12
  101. /package/dist/{components → typescript/components}/Modal/Modal.styles.d.ts +0 -0
  102. /package/dist/{components → typescript/components}/Modal/index.d.ts +0 -0
  103. /package/dist/{components → typescript/components}/TimerPicker/DurationScroll.d.ts +0 -0
  104. /package/dist/{components → typescript/components}/TimerPicker/TimerPicker.styles.d.ts +0 -0
  105. /package/dist/{components → typescript/components}/TimerPicker/index.d.ts +0 -0
  106. /package/dist/{components → typescript/components}/TimerPickerModal.styles.d.ts +0 -0
  107. /package/dist/{components → typescript/components}/index.d.ts +0 -0
  108. /package/dist/{utils → typescript/utils}/generateNumbers.d.ts +0 -0
  109. /package/dist/{utils → typescript/utils}/getAdjustedLimit.d.ts +0 -0
  110. /package/dist/{utils → typescript/utils}/padWithZero.d.ts +0 -0
@@ -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","options","_customStyles$pickerI","_customStyles$pickerI2","_customStyles$pickerI3","create","pickerContainer","flexDirection","marginRight","backgroundColor","theme","pickerLabelContainer","position","right","top","bottom","justifyContent","pickerLabel","fontSize","fontWeight","marginTop","pickerItem","color","text","pickerItemContainer","height","alignItems","width","textAlignVertical","disabledPickerItem","opacity","pickerGradientOverlay","left","padWithNItems"],"sources":["TimerPicker.styles.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StyleSheet } from \"react-native\";\n\nexport interface CustomTimerPickerStyles {\n theme?: \"light\" | \"dark\";\n backgroundColor?: string;\n text?: any;\n pickerContainer?: any;\n pickerLabelContainer?: any;\n pickerLabel?: any;\n pickerItemContainer?: any;\n pickerItem?: any;\n disabledPickerItem?: any;\n pickerGradientOverlay?: any;\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: CustomTimerPickerStyles | undefined,\n options: { padWithNItems: number }\n) =>\n StyleSheet.create({\n pickerContainer: {\n flexDirection: \"row\",\n marginRight: \"8%\",\n backgroundColor:\n customStyles?.backgroundColor ??\n (customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR),\n ...customStyles?.pickerContainer,\n },\n pickerLabelContainer: {\n position: \"absolute\",\n right: 4,\n top: 0,\n bottom: 0,\n justifyContent: \"center\",\n ...customStyles?.pickerLabelContainer,\n },\n pickerLabel: {\n fontSize: 18,\n fontWeight: \"bold\",\n marginTop: (customStyles?.pickerItem?.fontSize ?? 25) / 6,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.pickerLabel,\n },\n pickerItemContainer: {\n height: 50,\n justifyContent: \"center\",\n alignItems: \"center\",\n width: (customStyles?.pickerItem?.fontSize ?? 25) * 3.6,\n ...customStyles?.pickerItemContainer,\n },\n pickerItem: {\n textAlignVertical: \"center\",\n fontSize: 25,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.pickerItem,\n },\n disabledPickerItem: {\n opacity: 0.2,\n ...customStyles?.disabledPickerItem,\n },\n pickerGradientOverlay: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height:\n options.padWithNItems === 0\n ? \"30%\"\n : (customStyles?.pickerItemContainer?.height ?? 50) * 0.8,\n ...customStyles?.pickerGradientOverlay,\n },\n });\n"],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
3
+ import { View } from "react-native";
4
+ import DurationScroll from "./DurationScroll";
5
+ import { generateStyles } from "./TimerPicker.styles";
6
+ const TimerPicker = /*#__PURE__*/forwardRef((_ref, ref) => {
7
+ let {
8
+ onDurationChange,
9
+ initialHours = 0,
10
+ initialMinutes = 0,
11
+ initialSeconds = 0,
12
+ hideHours = false,
13
+ hideMinutes = false,
14
+ hideSeconds = false,
15
+ hourLimit,
16
+ minuteLimit,
17
+ secondLimit,
18
+ hourLabel = "h",
19
+ minuteLabel = "m",
20
+ secondLabel = "s",
21
+ padWithNItems = 1,
22
+ disableInfiniteScroll = false,
23
+ LinearGradient,
24
+ pickerContainerProps,
25
+ pickerGradientOverlayProps,
26
+ topPickerGradientOverlayProps,
27
+ bottomPickerGradientOverlayProps,
28
+ styles: customStyles
29
+ } = _ref;
30
+ const checkedPadWithNItems = padWithNItems >= 0 ? Math.round(padWithNItems) : 0;
31
+ const styles = useMemo(() => generateStyles(customStyles, {
32
+ padWithNItems: checkedPadWithNItems
33
+ }), [checkedPadWithNItems, customStyles]);
34
+ const [selectedHours, setSelectedHours] = useState(initialHours);
35
+ const [selectedMinutes, setSelectedMinutes] = useState(initialMinutes);
36
+ const [selectedSeconds, setSelectedSeconds] = useState(initialSeconds);
37
+ useEffect(() => {
38
+ onDurationChange === null || onDurationChange === void 0 || onDurationChange({
39
+ hours: selectedHours,
40
+ minutes: selectedMinutes,
41
+ seconds: selectedSeconds
42
+ });
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ }, [selectedHours, selectedMinutes, selectedSeconds]);
45
+ const hoursDurationScrollRef = useRef(null);
46
+ const minutesDurationScrollRef = useRef(null);
47
+ const secondsDurationScrollRef = useRef(null);
48
+ useImperativeHandle(ref, () => ({
49
+ reset: options => {
50
+ var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
51
+ setSelectedHours(initialHours);
52
+ setSelectedMinutes(initialMinutes);
53
+ setSelectedSeconds(initialSeconds);
54
+ (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
55
+ (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
56
+ (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
57
+ },
58
+ setValue: (value, options) => {
59
+ var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
60
+ setSelectedHours(value.hours);
61
+ setSelectedMinutes(value.minutes);
62
+ setSelectedSeconds(value.seconds);
63
+ (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
64
+ (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
65
+ (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
66
+ }
67
+ }));
68
+ return /*#__PURE__*/React.createElement(View, _extends({}, pickerContainerProps, {
69
+ style: styles.pickerContainer,
70
+ testID: "timer-picker"
71
+ }), !hideHours ? /*#__PURE__*/React.createElement(DurationScroll, {
72
+ ref: hoursDurationScrollRef,
73
+ numberOfItems: 23,
74
+ label: hourLabel,
75
+ initialValue: initialHours,
76
+ onDurationChange: setSelectedHours,
77
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
78
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
79
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
80
+ disableInfiniteScroll: disableInfiniteScroll,
81
+ padWithNItems: checkedPadWithNItems,
82
+ limit: hourLimit,
83
+ LinearGradient: LinearGradient,
84
+ styles: styles,
85
+ testID: "duration-scroll-hour"
86
+ }) : null, !hideMinutes ? /*#__PURE__*/React.createElement(DurationScroll, {
87
+ ref: minutesDurationScrollRef,
88
+ numberOfItems: 59,
89
+ label: minuteLabel,
90
+ initialValue: initialMinutes,
91
+ onDurationChange: setSelectedMinutes,
92
+ padNumbersWithZero: true,
93
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
94
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
95
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
96
+ disableInfiniteScroll: disableInfiniteScroll,
97
+ padWithNItems: checkedPadWithNItems,
98
+ limit: minuteLimit,
99
+ LinearGradient: LinearGradient,
100
+ styles: styles,
101
+ testID: "duration-scroll-minute"
102
+ }) : null, !hideSeconds ? /*#__PURE__*/React.createElement(DurationScroll, {
103
+ ref: secondsDurationScrollRef,
104
+ numberOfItems: 59,
105
+ label: secondLabel,
106
+ initialValue: initialSeconds,
107
+ onDurationChange: setSelectedSeconds,
108
+ padNumbersWithZero: true,
109
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
110
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
111
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
112
+ disableInfiniteScroll: disableInfiniteScroll,
113
+ padWithNItems: checkedPadWithNItems,
114
+ limit: secondLimit,
115
+ LinearGradient: LinearGradient,
116
+ styles: styles,
117
+ testID: "duration-scroll-second"
118
+ }) : null);
119
+ });
120
+ export default /*#__PURE__*/React.memo(TimerPicker);
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","_ref","ref","onDurationChange","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","LinearGradient","pickerContainerProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","checkedPadWithNItems","Math","round","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","hours","minutes","seconds","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","createElement","_extends","style","pickerContainer","testID","numberOfItems","label","initialValue","limit","padNumbersWithZero","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { View } from \"react-native\";\n\nimport DurationScroll, { DurationScrollRef, LimitType } from \"./DurationScroll\";\n\nimport { generateStyles, CustomTimerPickerStyles } from \"./TimerPicker.styles\";\nimport { LinearGradientProps } from \"./DurationScroll\";\n\nexport interface TimerPickerRef {\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerProps {\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n initialHours?: number;\n initialMinutes?: number;\n initialSeconds?: number;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourLimit?: LimitType;\n minuteLimit?: LimitType;\n secondLimit?: LimitType;\n hourLabel?: string | React.ReactElement;\n minuteLabel?: string | React.ReactElement;\n secondLabel?: string | React.ReactElement;\n padWithNItems?: number;\n disableInfiniteScroll?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n styles?: CustomTimerPickerStyles;\n}\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>(\n (\n {\n onDurationChange,\n initialHours = 0,\n initialMinutes = 0,\n initialSeconds = 0,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLimit,\n minuteLimit,\n secondLimit,\n hourLabel = \"h\",\n minuteLabel = \"m\",\n secondLabel = \"s\",\n padWithNItems = 1,\n disableInfiniteScroll = false,\n LinearGradient,\n pickerContainerProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const checkedPadWithNItems =\n padWithNItems >= 0 ? Math.round(padWithNItems) : 0;\n\n const styles = useMemo(\n () =>\n generateStyles(customStyles, {\n padWithNItems: checkedPadWithNItems,\n }),\n\n [checkedPadWithNItems, customStyles]\n );\n\n const [selectedHours, setSelectedHours] = useState(initialHours);\n const [selectedMinutes, setSelectedMinutes] = useState(initialMinutes);\n const [selectedSeconds, setSelectedSeconds] = useState(initialSeconds);\n\n useEffect(() => {\n onDurationChange?.({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedHours, selectedMinutes, selectedSeconds]);\n\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n setSelectedHours(initialHours);\n setSelectedMinutes(initialMinutes);\n setSelectedSeconds(initialSeconds);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedHours(value.hours);\n setSelectedMinutes(value.minutes);\n setSelectedSeconds(value.seconds);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n minutesDurationScrollRef.current?.setValue(\n value.minutes,\n options\n );\n secondsDurationScrollRef.current?.setValue(\n value.seconds,\n options\n );\n },\n }));\n\n return (\n <View\n {...pickerContainerProps}\n style={styles.pickerContainer}\n testID=\"timer-picker\">\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n numberOfItems={23}\n label={hourLabel}\n initialValue={initialHours}\n onDurationChange={setSelectedHours}\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={hourLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-hour\"\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n numberOfItems={59}\n label={minuteLabel}\n initialValue={initialMinutes}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={minuteLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-minute\"\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n numberOfItems={59}\n label={secondLabel}\n initialValue={initialSeconds}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero\n pickerGradientOverlayProps={pickerGradientOverlayProps}\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n disableInfiniteScroll={disableInfiniteScroll}\n padWithNItems={checkedPadWithNItems}\n limit={secondLimit}\n LinearGradient={LinearGradient}\n styles={styles}\n testID=\"duration-scroll-second\"\n />\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(TimerPicker);\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { StyleSheet } from "react-native";
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 => StyleSheet.create({
8
+ container: {
9
+ justifyContent: "center",
10
+ alignItems: "center",
11
+ overflow: "hidden",
12
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.container)
13
+ },
14
+ contentContainer: {
15
+ 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,
16
+ justifyContent: "center",
17
+ alignItems: "center",
18
+ borderRadius: 20,
19
+ padding: 20,
20
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.contentContainer)
21
+ },
22
+ buttonContainer: {
23
+ flexDirection: "row",
24
+ marginTop: 25,
25
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.buttonContainer)
26
+ },
27
+ button: {
28
+ marginHorizontal: 12,
29
+ paddingVertical: 10,
30
+ paddingHorizontal: 20,
31
+ borderWidth: 1,
32
+ borderRadius: 10,
33
+ fontSize: 16,
34
+ overflow: "hidden",
35
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
36
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.button)
37
+ },
38
+ cancelButton: {
39
+ borderColor: "gray",
40
+ color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : "gray",
41
+ backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? "gray" : undefined,
42
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
43
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.cancelButton)
44
+ },
45
+ confirmButton: {
46
+ borderColor: "green",
47
+ color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : "green",
48
+ backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? "green" : undefined,
49
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
50
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.confirmButton)
51
+ },
52
+ modalTitle: {
53
+ fontSize: 24,
54
+ fontWeight: "bold",
55
+ marginBottom: 15,
56
+ color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
57
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
58
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.modalTitle)
59
+ }
60
+ });
61
+ //# sourceMappingURL=TimerPickerModal.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","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom"],"sources":["TimerPickerModal.styles.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StyleSheet } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"./TimerPicker/TimerPicker.styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n container?: any;\n contentContainer?: any;\n buttonContainer?: any;\n button?: any;\n cancelButton?: any;\n confirmButton?: any;\n modalTitle?: any;\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) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ?? customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR,\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"bold\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":"AAAA;AACA,SAASA,UAAU,QAAQ,cAAc;AAczC,MAAMC,0BAA0B,GAAG,SAAS;AAC5C,MAAMC,oBAAoB,GAAG,SAAS;AACtC,MAAMC,2BAA2B,GAAG,SAAS;AAC7C,MAAMC,qBAAqB,GAAG,SAAS;AAEvC,OAAO,MAAMC,cAAc,GACvBC,YAAsD,IAEtDN,UAAU,CAACO,MAAM,CAAC;EACdC,SAAS,EAAE;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,QAAQ,EAAE,QAAQ;IAClB,IAAGL,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEE,SAAS;EAC9B,CAAC;EACDI,gBAAgB,EAAE;IACdC,eAAe,EACX,CAAAP,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEO,eAAe,KAAI,CAAAP,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GACzDb,0BAA0B,GAC1BE,2BAA2B;IACrCM,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBK,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE,EAAE;IACX,IAAGV,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEM,gBAAgB;EACrC,CAAC;EACDK,eAAe,EAAE;IACbC,aAAa,EAAE,KAAK;IACpBC,SAAS,EAAE,EAAE;IACb,IAAGb,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEW,eAAe;EACpC,CAAC;EACDG,MAAM,EAAE;IACJC,gBAAgB,EAAE,EAAE;IACpBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,WAAW,EAAE,CAAC;IACdT,YAAY,EAAE,EAAE;IAChBU,QAAQ,EAAE,EAAE;IACZd,QAAQ,EAAE,QAAQ;IAClB,IAAGL,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEoB,IAAI;IACrB,IAAGpB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEc,MAAM;EAC3B,CAAC;EACDO,YAAY,EAAE;IACVC,WAAW,EAAE,MAAM;IACnBC,KAAK,EACD,CAAAvB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GAAGZ,oBAAoB,GAAG,MAAM;IAClEW,eAAe,EACX,CAAAP,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GAAG,MAAM,GAAGgB,SAAS;IACvD,IAAGxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEoB,IAAI;IACrB,IAAGpB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,YAAY;EACjC,CAAC;EACDI,aAAa,EAAE;IACXH,WAAW,EAAE,OAAO;IACpBC,KAAK,EACD,CAAAvB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GAAGZ,oBAAoB,GAAG,OAAO;IACnEW,eAAe,EACX,CAAAP,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GAAG,OAAO,GAAGgB,SAAS;IACxD,IAAGxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEoB,IAAI;IACrB,IAAGpB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEyB,aAAa;EAClC,CAAC;EACDC,UAAU,EAAE;IACRP,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE,MAAM;IAClBC,YAAY,EAAE,EAAE;IAChBL,KAAK,EACD,CAAAvB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,KAAK,MAAK,MAAM,GACxBZ,oBAAoB,GACpBE,qBAAqB;IAC/B,IAAGE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEoB,IAAI;IACrB,IAAGpB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE0B,UAAU;EAC/B;AACJ,CAAC,CAAC"}
@@ -0,0 +1,147 @@
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+ import React, { forwardRef, useCallback, useImperativeHandle, useRef, useState } from "react";
3
+ import { View, Text, TouchableOpacity } from "react-native";
4
+ import TimerPicker from "./TimerPicker";
5
+ import Modal from "./Modal";
6
+ import { generateStyles } from "./TimerPickerModal.styles";
7
+ const TimerPickerModal = /*#__PURE__*/forwardRef((_ref, ref) => {
8
+ let {
9
+ visible,
10
+ setIsVisible,
11
+ onConfirm,
12
+ onCancel,
13
+ onDurationChange,
14
+ closeOnOverlayPress,
15
+ initialHours = 0,
16
+ initialMinutes = 0,
17
+ initialSeconds = 0,
18
+ hideHours = false,
19
+ hideMinutes = false,
20
+ hideSeconds = false,
21
+ hourLimit,
22
+ minuteLimit,
23
+ secondLimit,
24
+ hourLabel = "h",
25
+ minuteLabel = "m",
26
+ secondLabel = "s",
27
+ padWithNItems = 1,
28
+ disableInfiniteScroll = false,
29
+ hideCancelButton = false,
30
+ confirmButtonText = "Confirm",
31
+ cancelButtonText = "Cancel",
32
+ modalTitle,
33
+ LinearGradient,
34
+ modalProps,
35
+ containerProps,
36
+ contentContainerProps,
37
+ pickerContainerProps,
38
+ buttonContainerProps,
39
+ buttonTouchableOpacityProps,
40
+ modalTitleProps,
41
+ pickerGradientOverlayProps,
42
+ topPickerGradientOverlayProps,
43
+ bottomPickerGradientOverlayProps,
44
+ styles: customStyles
45
+ } = _ref;
46
+ const styles = generateStyles(customStyles);
47
+ const [selectedDuration, setSelectedDuration] = useState({
48
+ hours: initialHours,
49
+ minutes: initialMinutes,
50
+ seconds: initialSeconds
51
+ });
52
+ const [confirmedDuration, setConfirmedDuration] = useState({
53
+ hours: initialHours,
54
+ minutes: initialMinutes,
55
+ seconds: initialSeconds
56
+ });
57
+ const hideModal = () => {
58
+ setSelectedDuration({
59
+ hours: confirmedDuration.hours,
60
+ minutes: confirmedDuration.minutes,
61
+ seconds: confirmedDuration.seconds
62
+ });
63
+ setIsVisible(false);
64
+ };
65
+ const confirm = () => {
66
+ setConfirmedDuration(selectedDuration);
67
+ onConfirm(selectedDuration);
68
+ };
69
+ const cancel = () => {
70
+ setIsVisible(false);
71
+ setSelectedDuration(confirmedDuration);
72
+ onCancel === null || onCancel === void 0 || onCancel();
73
+ };
74
+
75
+ // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker
76
+ const durationChange = useCallback(duration => {
77
+ setSelectedDuration(duration);
78
+ onDurationChange === null || onDurationChange === void 0 || onDurationChange(duration);
79
+ }, [onDurationChange]);
80
+ const timerPickerRef = useRef(null);
81
+ useImperativeHandle(ref, () => ({
82
+ reset: options => {
83
+ var _timerPickerRef$curre;
84
+ const initialDuration = {
85
+ hours: initialHours,
86
+ minutes: initialMinutes,
87
+ seconds: initialSeconds
88
+ };
89
+ setSelectedDuration(initialDuration);
90
+ setConfirmedDuration(initialDuration);
91
+ (_timerPickerRef$curre = timerPickerRef.current) === null || _timerPickerRef$curre === void 0 || _timerPickerRef$curre.reset(options);
92
+ },
93
+ setValue: (value, options) => {
94
+ var _timerPickerRef$curre2;
95
+ setSelectedDuration(value);
96
+ setConfirmedDuration(value);
97
+ (_timerPickerRef$curre2 = timerPickerRef.current) === null || _timerPickerRef$curre2 === void 0 || _timerPickerRef$curre2.setValue(value, options);
98
+ }
99
+ }));
100
+ return /*#__PURE__*/React.createElement(Modal, _extends({
101
+ isVisible: visible,
102
+ onOverlayPress: closeOnOverlayPress ? hideModal : undefined
103
+ }, modalProps, {
104
+ testID: "timer-picker-modal"
105
+ }), /*#__PURE__*/React.createElement(View, _extends({}, containerProps, {
106
+ style: styles.container
107
+ }), /*#__PURE__*/React.createElement(View, _extends({}, contentContainerProps, {
108
+ style: styles.contentContainer
109
+ }), modalTitle ? /*#__PURE__*/React.createElement(Text, _extends({}, modalTitleProps, {
110
+ style: styles.modalTitle
111
+ }), modalTitle) : null, /*#__PURE__*/React.createElement(TimerPicker, {
112
+ ref: timerPickerRef,
113
+ onDurationChange: durationChange,
114
+ initialHours: confirmedDuration.hours,
115
+ initialMinutes: confirmedDuration.minutes,
116
+ initialSeconds: confirmedDuration.seconds,
117
+ hideHours: hideHours,
118
+ hideMinutes: hideMinutes,
119
+ hideSeconds: hideSeconds,
120
+ hourLimit: hourLimit,
121
+ minuteLimit: minuteLimit,
122
+ secondLimit: secondLimit,
123
+ hourLabel: hourLabel,
124
+ minuteLabel: minuteLabel,
125
+ secondLabel: secondLabel,
126
+ padWithNItems: padWithNItems,
127
+ disableInfiniteScroll: disableInfiniteScroll,
128
+ LinearGradient: LinearGradient,
129
+ pickerContainerProps: pickerContainerProps,
130
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
131
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
132
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
133
+ styles: customStyles
134
+ }), /*#__PURE__*/React.createElement(View, _extends({}, buttonContainerProps, {
135
+ style: styles.buttonContainer
136
+ }), !hideCancelButton ? /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
137
+ onPress: cancel
138
+ }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
139
+ style: [styles.button, styles.cancelButton]
140
+ }, cancelButtonText)) : null, /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
141
+ onPress: confirm
142
+ }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
143
+ style: [styles.button, styles.confirmButton]
144
+ }, confirmButtonText))))));
145
+ });
146
+ export default /*#__PURE__*/React.memo(TimerPickerModal);
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","forwardRef","useCallback","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","TimerPicker","Modal","generateStyles","TimerPickerModal","_ref","ref","visible","setIsVisible","onConfirm","onCancel","onDurationChange","closeOnOverlayPress","initialHours","initialMinutes","initialSeconds","hideHours","hideMinutes","hideSeconds","hourLimit","minuteLimit","secondLimit","hourLabel","minuteLabel","secondLabel","padWithNItems","disableInfiniteScroll","hideCancelButton","confirmButtonText","cancelButtonText","modalTitle","LinearGradient","modalProps","containerProps","contentContainerProps","pickerContainerProps","buttonContainerProps","buttonTouchableOpacityProps","modalTitleProps","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","styles","customStyles","selectedDuration","setSelectedDuration","hours","minutes","seconds","confirmedDuration","setConfirmedDuration","hideModal","confirm","cancel","durationChange","duration","timerPickerRef","reset","options","_timerPickerRef$curre","initialDuration","current","setValue","value","_timerPickerRef$curre2","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","buttonContainer","onPress","button","cancelButton","confirmButton","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport TimerPicker, { TimerPickerProps, TimerPickerRef } from \"./TimerPicker\";\nimport Modal from \"./Modal\";\n\nimport {\n generateStyles,\n CustomTimerPickerModalStyles,\n} from \"./TimerPickerModal.styles\";\n\nexport interface TimerPickerModalRef {\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerModalProps extends TimerPickerProps {\n visible: boolean;\n setIsVisible: (isVisible: boolean) => void;\n onConfirm: ({\n hours,\n minutes,\n seconds,\n }: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n onCancel?: () => void;\n closeOnOverlayPress?: boolean;\n hideCancelButton?: boolean;\n confirmButtonText?: string;\n cancelButtonText?: string;\n modalTitle?: string;\n modalProps?: React.ComponentProps<typeof Modal>;\n containerProps?: React.ComponentProps<typeof View>;\n contentContainerProps?: React.ComponentProps<typeof View>;\n buttonContainerProps?: React.ComponentProps<typeof View>;\n buttonTouchableOpacityProps?: React.ComponentProps<typeof TouchableOpacity>;\n modalTitleProps?: React.ComponentProps<typeof Text>;\n styles?: CustomTimerPickerModalStyles;\n}\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (\n {\n visible,\n setIsVisible,\n onConfirm,\n onCancel,\n onDurationChange,\n closeOnOverlayPress,\n initialHours = 0,\n initialMinutes = 0,\n initialSeconds = 0,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLimit,\n minuteLimit,\n secondLimit,\n hourLabel = \"h\",\n minuteLabel = \"m\",\n secondLabel = \"s\",\n padWithNItems = 1,\n disableInfiniteScroll = false,\n hideCancelButton = false,\n confirmButtonText = \"Confirm\",\n cancelButtonText = \"Cancel\",\n modalTitle,\n LinearGradient,\n modalProps,\n containerProps,\n contentContainerProps,\n pickerContainerProps,\n buttonContainerProps,\n buttonTouchableOpacityProps,\n modalTitleProps,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n styles: customStyles,\n },\n ref\n ): React.ReactElement => {\n const styles = generateStyles(customStyles);\n\n const [selectedDuration, setSelectedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n const [confirmedDuration, setConfirmedDuration] = useState({\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n });\n\n const hideModal = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirm = () => {\n setConfirmedDuration(selectedDuration);\n onConfirm(selectedDuration);\n };\n\n const cancel = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChange = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n const initialDuration = {\n hours: initialHours,\n minutes: initialMinutes,\n seconds: initialSeconds,\n };\n setSelectedDuration(initialDuration);\n setConfirmedDuration(initialDuration);\n timerPickerRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={closeOnOverlayPress ? hideModal : undefined}\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n onDurationChange={durationChange}\n initialHours={confirmedDuration.hours}\n initialMinutes={confirmedDuration.minutes}\n initialSeconds={confirmedDuration.seconds}\n hideHours={hideHours}\n hideMinutes={hideMinutes}\n hideSeconds={hideSeconds}\n hourLimit={hourLimit}\n minuteLimit={minuteLimit}\n secondLimit={secondLimit}\n hourLabel={hourLabel}\n minuteLabel={minuteLabel}\n secondLabel={secondLabel}\n padWithNItems={padWithNItems}\n disableInfiniteScroll={disableInfiniteScroll}\n LinearGradient={LinearGradient}\n pickerContainerProps={pickerContainerProps}\n pickerGradientOverlayProps={\n pickerGradientOverlayProps\n }\n topPickerGradientOverlayProps={\n topPickerGradientOverlayProps\n }\n bottomPickerGradientOverlayProps={\n bottomPickerGradientOverlayProps\n }\n styles={customStyles}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n onPress={cancel}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n onPress={confirm}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { default as TimerPickerModal } from "./components";
2
+ export { default as TimerPicker } from "./components/TimerPicker";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default","TimerPickerModal","TimerPicker"],"sources":["index.ts"],"sourcesContent":["export {\n default as TimerPickerModal,\n type TimerPickerModalProps,\n type TimerPickerModalRef,\n} from \"./components\";\n\nexport {\n default as TimerPicker,\n type TimerPickerProps,\n type TimerPickerRef,\n} from \"./components/TimerPicker\";\n\nexport { type CustomTimerPickerModalStyles } from \"./components/TimerPickerModal.styles\";\nexport { type CustomTimerPickerStyles } from \"./components/TimerPicker/TimerPicker.styles\";\n"],"mappings":"AAAA,SACIA,OAAO,IAAIC,gBAAgB,QAGxB,cAAc;AAErB,SACID,OAAO,IAAIE,WAAW,QAGnB,0BAA0B"}
@@ -0,0 +1,53 @@
1
+ import React from "react";
2
+ import { render } from "@testing-library/react-native";
3
+ import DurationScroll from "../components/TimerPicker/DurationScroll";
4
+ describe("DurationScroll", () => {
5
+ const onDurationChangeMock = jest.fn();
6
+ const emptyStyles = {
7
+ pickerContainer: {},
8
+ pickerLabelContainer: {},
9
+ pickerLabel: {},
10
+ pickerItemContainer: {},
11
+ pickerItem: {},
12
+ pickerGradientOverlay: {}
13
+ };
14
+ it("renders without crashing", () => {
15
+ const {
16
+ getByTestId
17
+ } = render( /*#__PURE__*/React.createElement(DurationScroll, {
18
+ numberOfItems: 1,
19
+ onDurationChange: onDurationChangeMock,
20
+ padWithNItems: 0,
21
+ styles: emptyStyles,
22
+ testID: "duration-scroll"
23
+ }));
24
+ const component = getByTestId("duration-scroll");
25
+ expect(component).toBeDefined();
26
+ });
27
+ it("renders the correct number of items", () => {
28
+ const {
29
+ getAllByTestId
30
+ } = render( /*#__PURE__*/React.createElement(DurationScroll, {
31
+ numberOfItems: 2,
32
+ onDurationChange: onDurationChangeMock,
33
+ padWithNItems: 1,
34
+ styles: emptyStyles
35
+ }));
36
+ const items = getAllByTestId("picker-item");
37
+ expect(items).toHaveLength(7);
38
+ });
39
+ it("renders the label if provided", () => {
40
+ const {
41
+ getByText
42
+ } = render( /*#__PURE__*/React.createElement(DurationScroll, {
43
+ numberOfItems: 59,
44
+ label: "Duration",
45
+ onDurationChange: onDurationChangeMock,
46
+ padWithNItems: 1,
47
+ styles: emptyStyles
48
+ }));
49
+ const label = getByText("Duration");
50
+ expect(label).toBeDefined();
51
+ });
52
+ });
53
+ //# sourceMappingURL=DurationScroll.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","render","DurationScroll","describe","onDurationChangeMock","jest","fn","emptyStyles","pickerContainer","pickerLabelContainer","pickerLabel","pickerItemContainer","pickerItem","pickerGradientOverlay","it","getByTestId","createElement","numberOfItems","onDurationChange","padWithNItems","styles","testID","component","expect","toBeDefined","getAllByTestId","items","toHaveLength","getByText","label"],"sources":["DurationScroll.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { render } from \"@testing-library/react-native\";\nimport DurationScroll from \"../components/TimerPicker/DurationScroll\";\n\ndescribe(\"DurationScroll\", () => {\n const onDurationChangeMock = jest.fn();\n const emptyStyles = {\n pickerContainer: {},\n pickerLabelContainer: {},\n pickerLabel: {},\n pickerItemContainer: {},\n pickerItem: {},\n pickerGradientOverlay: {},\n };\n\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(\n <DurationScroll\n numberOfItems={1}\n onDurationChange={onDurationChangeMock}\n padWithNItems={0}\n styles={emptyStyles}\n testID=\"duration-scroll\"\n />\n );\n const component = getByTestId(\"duration-scroll\");\n expect(component).toBeDefined();\n });\n\n it(\"renders the correct number of items\", () => {\n const { getAllByTestId } = render(\n <DurationScroll\n numberOfItems={2}\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n styles={emptyStyles}\n />\n );\n const items = getAllByTestId(\"picker-item\");\n expect(items).toHaveLength(7);\n });\n\n it(\"renders the label if provided\", () => {\n const { getByText } = render(\n <DurationScroll\n numberOfItems={59}\n label=\"Duration\"\n onDurationChange={onDurationChangeMock}\n padWithNItems={1}\n styles={emptyStyles}\n />\n );\n const label = getByText(\"Duration\");\n expect(label).toBeDefined();\n });\n\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,+BAA+B;AACtD,OAAOC,cAAc,MAAM,0CAA0C;AAErEC,QAAQ,CAAC,gBAAgB,EAAE,MAAM;EAC7B,MAAMC,oBAAoB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;EACtC,MAAMC,WAAW,GAAG;IAChBC,eAAe,EAAE,CAAC,CAAC;IACnBC,oBAAoB,EAAE,CAAC,CAAC;IACxBC,WAAW,EAAE,CAAC,CAAC;IACfC,mBAAmB,EAAE,CAAC,CAAC;IACvBC,UAAU,EAAE,CAAC,CAAC;IACdC,qBAAqB,EAAE,CAAC;EAC5B,CAAC;EAEDC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGd,MAAM,eAC1BD,KAAA,CAAAgB,aAAA,CAACd,cAAc;MACXe,aAAa,EAAE,CAAE;MACjBC,gBAAgB,EAAEd,oBAAqB;MACvCe,aAAa,EAAE,CAAE;MACjBC,MAAM,EAAEb,WAAY;MACpBc,MAAM,EAAC;IAAiB,CAC3B,CACL,CAAC;IACD,MAAMC,SAAS,GAAGP,WAAW,CAAC,iBAAiB,CAAC;IAChDQ,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFV,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC5C,MAAM;MAAEW;IAAe,CAAC,GAAGxB,MAAM,eAC7BD,KAAA,CAAAgB,aAAA,CAACd,cAAc;MACXe,aAAa,EAAE,CAAE;MACjBC,gBAAgB,EAAEd,oBAAqB;MACvCe,aAAa,EAAE,CAAE;MACjBC,MAAM,EAAEb;IAAY,CACvB,CACL,CAAC;IACD,MAAMmB,KAAK,GAAGD,cAAc,CAAC,aAAa,CAAC;IAC3CF,MAAM,CAACG,KAAK,CAAC,CAACC,YAAY,CAAC,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFb,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEc;IAAU,CAAC,GAAG3B,MAAM,eACxBD,KAAA,CAAAgB,aAAA,CAACd,cAAc;MACXe,aAAa,EAAE,EAAG;MAClBY,KAAK,EAAC,UAAU;MAChBX,gBAAgB,EAAEd,oBAAqB;MACvCe,aAAa,EAAE,CAAE;MACjBC,MAAM,EAAEb;IAAY,CACvB,CACL,CAAC;IACD,MAAMsB,KAAK,GAAGD,SAAS,CAAC,UAAU,CAAC;IACnCL,MAAM,CAACM,KAAK,CAAC,CAACL,WAAW,CAAC,CAAC;EAC/B,CAAC,CAAC;AAEN,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { Text } from "react-native";
3
+ import { render, fireEvent } from "@testing-library/react-native";
4
+ import Modal from "../components/Modal";
5
+ describe("Modal", () => {
6
+ it("renders without crashing", () => {
7
+ const {
8
+ getByTestId
9
+ } = render( /*#__PURE__*/React.createElement(Modal, null));
10
+ const component = getByTestId("modal");
11
+ expect(component).toBeDefined();
12
+ });
13
+ it("renders children when visible", () => {
14
+ const {
15
+ getByText
16
+ } = render( /*#__PURE__*/React.createElement(Modal, {
17
+ isVisible: true
18
+ }, /*#__PURE__*/React.createElement(Text, null, "Modal Content")));
19
+ const content = getByText("Modal Content");
20
+ expect(content).toBeDefined();
21
+ });
22
+ it("calls onOverlayPress when overlay is pressed", () => {
23
+ const onOverlayPressMock = jest.fn();
24
+ const {
25
+ getByTestId
26
+ } = render( /*#__PURE__*/React.createElement(Modal, {
27
+ isVisible: true,
28
+ onOverlayPress: onOverlayPressMock
29
+ }));
30
+ const overlay = getByTestId("modal-backdrop");
31
+ fireEvent.press(overlay);
32
+ expect(onOverlayPressMock).toHaveBeenCalled();
33
+ });
34
+
35
+ // Add more test cases to cover different interactions, scenarios, and edge cases
36
+ });
37
+ //# sourceMappingURL=Modal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Text","render","fireEvent","Modal","describe","it","getByTestId","createElement","component","expect","toBeDefined","getByText","isVisible","content","onOverlayPressMock","jest","fn","onOverlayPress","overlay","press","toHaveBeenCalled"],"sources":["Modal.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { Text } from \"react-native\";\nimport { render, fireEvent } from \"@testing-library/react-native\";\nimport Modal from \"../components/Modal\";\n\ndescribe(\"Modal\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<Modal />);\n const component = getByTestId(\"modal\");\n expect(component).toBeDefined();\n });\n\n it(\"renders children when visible\", () => {\n const { getByText } = render(\n <Modal isVisible>\n <Text>{\"Modal Content\"}</Text>\n </Modal>\n );\n const content = getByText(\"Modal Content\");\n expect(content).toBeDefined();\n });\n\n it(\"calls onOverlayPress when overlay is pressed\", () => {\n const onOverlayPressMock = jest.fn();\n const { getByTestId } = render(\n <Modal isVisible onOverlayPress={onOverlayPressMock} />\n );\n const overlay = getByTestId(\"modal-backdrop\");\n fireEvent.press(overlay);\n expect(onOverlayPressMock).toHaveBeenCalled();\n });\n\n // Add more test cases to cover different interactions, scenarios, and edge cases\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,MAAM,EAAEC,SAAS,QAAQ,+BAA+B;AACjE,OAAOC,KAAK,MAAM,qBAAqB;AAEvCC,QAAQ,CAAC,OAAO,EAAE,MAAM;EACpBC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGL,MAAM,eAACF,KAAA,CAAAQ,aAAA,CAACJ,KAAK,MAAE,CAAC,CAAC;IACzC,MAAMK,SAAS,GAAGF,WAAW,CAAC,OAAO,CAAC;IACtCG,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFL,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACtC,MAAM;MAAEM;IAAU,CAAC,GAAGV,MAAM,eACxBF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACS,SAAS;IAAA,gBACZb,KAAA,CAAAQ,aAAA,CAACP,IAAI,QAAE,eAAsB,CAC1B,CACX,CAAC;IACD,MAAMa,OAAO,GAAGF,SAAS,CAAC,eAAe,CAAC;IAC1CF,MAAM,CAACI,OAAO,CAAC,CAACH,WAAW,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFL,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACrD,MAAMS,kBAAkB,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IACpC,MAAM;MAAEV;IAAY,CAAC,GAAGL,MAAM,eAC1BF,KAAA,CAAAQ,aAAA,CAACJ,KAAK;MAACS,SAAS;MAACK,cAAc,EAAEH;IAAmB,CAAE,CAC1D,CAAC;IACD,MAAMI,OAAO,GAAGZ,WAAW,CAAC,gBAAgB,CAAC;IAC7CJ,SAAS,CAACiB,KAAK,CAACD,OAAO,CAAC;IACxBT,MAAM,CAACK,kBAAkB,CAAC,CAACM,gBAAgB,CAAC,CAAC;EACjD,CAAC,CAAC;;EAEF;AACJ,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+ import { render } from "@testing-library/react-native";
3
+ import TimerPicker from "../components/TimerPicker";
4
+ describe("TimerPicker", () => {
5
+ it("renders without crashing", () => {
6
+ const {
7
+ getByTestId
8
+ } = render( /*#__PURE__*/React.createElement(TimerPicker, null));
9
+ const component = getByTestId("timer-picker");
10
+ expect(component).toBeDefined();
11
+ });
12
+ it("renders without crashing with negative padWithNItems", () => {
13
+ const {
14
+ getByTestId
15
+ } = render( /*#__PURE__*/React.createElement(TimerPicker, {
16
+ padWithNItems: -1
17
+ }));
18
+ const component = getByTestId("timer-picker");
19
+ expect(component).toBeDefined();
20
+ });
21
+ it("hides minutes and seconds when respective hide props are provided", () => {
22
+ const {
23
+ queryByTestId
24
+ } = render( /*#__PURE__*/React.createElement(TimerPicker, {
25
+ hideMinutes: true,
26
+ hideSeconds: true
27
+ }));
28
+ const minutePicker = queryByTestId("duration-scroll-minute");
29
+ const secondPicker = queryByTestId("duration-scroll-second");
30
+ expect(minutePicker).toBeNull();
31
+ expect(secondPicker).toBeNull();
32
+ });
33
+ });
34
+ //# sourceMappingURL=TimerPicker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","render","TimerPicker","describe","it","getByTestId","createElement","component","expect","toBeDefined","padWithNItems","queryByTestId","hideMinutes","hideSeconds","minutePicker","secondPicker","toBeNull"],"sources":["TimerPicker.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { render } from \"@testing-library/react-native\";\nimport TimerPicker from \"../components/TimerPicker\";\n\ndescribe(\"TimerPicker\", () => {\n it(\"renders without crashing\", () => {\n const { getByTestId } = render(<TimerPicker />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"renders without crashing with negative padWithNItems\", () => {\n const { getByTestId } = render(<TimerPicker padWithNItems={-1} />);\n const component = getByTestId(\"timer-picker\");\n expect(component).toBeDefined();\n });\n\n it(\"hides minutes and seconds when respective hide props are provided\", () => {\n const { queryByTestId } = render(\n <TimerPicker hideMinutes hideSeconds />\n );\n const minutePicker = queryByTestId(\"duration-scroll-minute\");\n const secondPicker = queryByTestId(\"duration-scroll-second\");\n expect(minutePicker).toBeNull();\n expect(secondPicker).toBeNull();\n });\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,+BAA+B;AACtD,OAAOC,WAAW,MAAM,2BAA2B;AAEnDC,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC1BC,EAAE,CAAC,0BAA0B,EAAE,MAAM;IACjC,MAAM;MAAEC;IAAY,CAAC,GAAGJ,MAAM,eAACD,KAAA,CAAAM,aAAA,CAACJ,WAAW,MAAE,CAAC,CAAC;IAC/C,MAAMK,SAAS,GAAGF,WAAW,CAAC,cAAc,CAAC;IAC7CG,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFL,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC7D,MAAM;MAAEC;IAAY,CAAC,GAAGJ,MAAM,eAACD,KAAA,CAAAM,aAAA,CAACJ,WAAW;MAACQ,aAAa,EAAE,CAAC;IAAE,CAAE,CAAC,CAAC;IAClE,MAAMH,SAAS,GAAGF,WAAW,CAAC,cAAc,CAAC;IAC7CG,MAAM,CAACD,SAAS,CAAC,CAACE,WAAW,CAAC,CAAC;EACnC,CAAC,CAAC;EAEFL,EAAE,CAAC,mEAAmE,EAAE,MAAM;IAC1E,MAAM;MAAEO;IAAc,CAAC,GAAGV,MAAM,eAC5BD,KAAA,CAAAM,aAAA,CAACJ,WAAW;MAACU,WAAW;MAACC,WAAW;IAAA,CAAE,CAC1C,CAAC;IACD,MAAMC,YAAY,GAAGH,aAAa,CAAC,wBAAwB,CAAC;IAC5D,MAAMI,YAAY,GAAGJ,aAAa,CAAC,wBAAwB,CAAC;IAC5DH,MAAM,CAACM,YAAY,CAAC,CAACE,QAAQ,CAAC,CAAC;IAC/BR,MAAM,CAACO,YAAY,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnC,CAAC,CAAC;AACN,CAAC,CAAC"}