@televet/kibble-ui 5.0.21-alpha.hunter.20 → 5.0.21-alpha.hunter.21

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 (28) hide show
  1. package/dist/chunks/{dateTimePicker.component-CMgeWt7K.js → dateTimePicker.component-CBrEZ9lO.js} +2 -2
  2. package/dist/chunks/{dateTimePicker.component-CMgeWt7K.js.map → dateTimePicker.component-CBrEZ9lO.js.map} +1 -1
  3. package/dist/chunks/{dateTimePicker.component-CIS9ZyKy.js → dateTimePicker.component-D5Rp7cVf.js} +2 -2
  4. package/dist/chunks/{dateTimePicker.component-CIS9ZyKy.js.map → dateTimePicker.component-D5Rp7cVf.js.map} +1 -1
  5. package/dist/chunks/timePicker.component-BsgIeTaf.js +239 -0
  6. package/dist/chunks/timePicker.component-BsgIeTaf.js.map +1 -0
  7. package/dist/chunks/timePicker.component-Dm5Vh7bB.js +2 -0
  8. package/dist/chunks/timePicker.component-Dm5Vh7bB.js.map +1 -0
  9. package/dist/chunks/{timeRange.component-BHeqvo_T.js → timeRange.component-CRz8EP7Y.js} +2 -2
  10. package/dist/chunks/{timeRange.component-BHeqvo_T.js.map → timeRange.component-CRz8EP7Y.js.map} +1 -1
  11. package/dist/chunks/{timeRange.component-CPm6V6L8.js → timeRange.component-DC8bj7nQ.js} +2 -2
  12. package/dist/chunks/{timeRange.component-CPm6V6L8.js.map → timeRange.component-DC8bj7nQ.js.map} +1 -1
  13. package/dist/cjs/components/DateTimePicker/index.cjs +1 -1
  14. package/dist/cjs/components/TimePicker/index.cjs +1 -1
  15. package/dist/cjs/components/TimeRange/index.cjs +1 -1
  16. package/dist/cjs/components/index.cjs +1 -1
  17. package/dist/cjs/index.cjs +1 -1
  18. package/dist/esm/components/DateTimePicker/index.js +1 -1
  19. package/dist/esm/components/TimePicker/index.js +1 -1
  20. package/dist/esm/components/TimeRange/index.js +1 -1
  21. package/dist/esm/components/index.js +3 -3
  22. package/dist/esm/index.js +3 -3
  23. package/dist/types/shared/utils/convertToTimezoneOverride.d.ts +0 -1
  24. package/package.json +5 -4
  25. package/dist/chunks/timePicker.component-B_DWeTKM.js +0 -259
  26. package/dist/chunks/timePicker.component-B_DWeTKM.js.map +0 -1
  27. package/dist/chunks/timePicker.component-CikJ3IyR.js +0 -2
  28. package/dist/chunks/timePicker.component-CikJ3IyR.js.map +0 -1
@@ -1,259 +0,0 @@
1
- import { j as r } from "./jsx-runtime-C5mzlN2N.js";
2
- import { useCallback as k, useRef as X, useEffect as I, useState as S, useMemo as $ } from "react";
3
- import { W as ee } from "./textInput.component-BeiTxTkS.js";
4
- import { P as te } from "./popover.component-DIYT1Lc0.js";
5
- import { I as re } from "./icon.component-PV_nHBId.js";
6
- import { u as oe } from "./useIconTextSizeMap-BK-pUrQv.js";
7
- import { f as se } from "./format-CqTHHSak.js";
8
- import { B as E } from "./index-9BerxEcw.js";
9
- import { a as ie, d as ne } from "./config-Djkl1N81.js";
10
- import { u as ce } from "./use-recipe-d63ABaZ3.js";
11
- import { u as W } from "./create-slot-recipe-context-D_FXDJGp.js";
12
- import { add as ae } from "date-fns";
13
- import { getTimezoneOffset as O } from "date-fns-tz";
14
- import { W as me } from "./text.component-DhuUgP3j.js";
15
- import { H as le } from "./h-stack-8q5nAOg0.js";
16
- const de = ie({
17
- base: {
18
- borderRadius: "4px",
19
- cursor: "pointer",
20
- fontSize: "sm",
21
- px: 3,
22
- py: 1,
23
- textAlign: "center"
24
- },
25
- variants: {
26
- selected: {
27
- true: {
28
- background: "background.secondary",
29
- color: "text.contrast",
30
- _hover: {
31
- background: "background.secondary.hover"
32
- }
33
- },
34
- false: {
35
- background: "background",
36
- color: "text.subtle",
37
- _hover: {
38
- background: "background.secondaryAlpha.hover"
39
- }
40
- }
41
- }
42
- },
43
- defaultVariants: {
44
- selected: !1
45
- }
46
- }), ue = ({
47
- value: t,
48
- innerRef: s,
49
- onClick: i,
50
- selected: a,
51
- ["data-testid"]: m = "kibble-timepicker-option"
52
- }) => {
53
- const n = ce({ recipe: de })({ selected: a }), T = k(
54
- (o) => {
55
- const l = o.currentTarget.textContent || "";
56
- i(l);
57
- },
58
- [i]
59
- );
60
- return /* @__PURE__ */ r.jsx(E, { className: "TimePicker__Option", "data-testid": m, ref: s, onClick: T, css: n, children: t });
61
- }, B = ne({
62
- slots: ["trigger", "container", "list"],
63
- base: {
64
- trigger: {
65
- width: "100%"
66
- },
67
- container: {
68
- display: "flex",
69
- gap: 1.5,
70
- height: "186px",
71
- overflow: "hidden"
72
- },
73
- list: {
74
- display: "flex",
75
- flexDirection: "column",
76
- gap: 1,
77
- overflowY: "auto",
78
- "&::webkit-scrollbar": {
79
- display: "none"
80
- }
81
- }
82
- }
83
- }), w = ({
84
- options: t,
85
- optionType: s,
86
- selectedValue: i,
87
- onClick: a,
88
- open: m = !1,
89
- ["data-testid"]: d = "kibble-timepicker-list"
90
- }) => {
91
- const T = W({ recipe: B })(), o = X(null);
92
- return I(() => {
93
- m && o.current && requestAnimationFrame(() => {
94
- o.current && o.current.scrollIntoView({ block: "center" });
95
- });
96
- }, [m, i]), /* @__PURE__ */ r.jsx(E, { className: "TimePicker__List", "data-testid": `${d}-${s}-list`, css: T.list, children: t.map((l) => {
97
- const x = l === i;
98
- return /* @__PURE__ */ r.jsx(
99
- ue,
100
- {
101
- innerRef: x ? o : null,
102
- value: l,
103
- selected: l === i,
104
- onClick: a,
105
- "data-testid": `${d}-${s}-option-${l}`
106
- },
107
- `${s}-option-${l}`
108
- );
109
- }) });
110
- };
111
- var u = /* @__PURE__ */ ((t) => (t.AM = "AM", t.PM = "PM", t))(u || {});
112
- const V = ({
113
- date: t,
114
- timezoneOverride: s,
115
- reverse: i
116
- }) => {
117
- const a = O(Intl.DateTimeFormat().resolvedOptions().timeZone), m = O(s), d = i ? m - a : a - m;
118
- return ae(t, { minutes: d / 1e3 / 60 });
119
- }, pe = {
120
- "America/Phoenix": "MST",
121
- "Pacific/Honolulu": "HST",
122
- "America/Puerto_Rico": "AST",
123
- "America/New_York": "EST/EDT",
124
- "America/Anchorage": "AKST/AKDT",
125
- "America/Regina": "CST",
126
- "America/Boise": "MST/MDT",
127
- "America/Los_Angeles": "PST/PDT",
128
- "America/Chicago": "CST/CDT",
129
- "America/Toronto": "EST/EDT",
130
- "America/Indiana/Vincennes": "EST/EDT",
131
- "America/Edmonton": "MST/MDT",
132
- "America/Denver": "MST/MDT",
133
- "Europe/Amsterdam": "CET/CEST",
134
- "America/Indianapolis": "EST/EDT",
135
- "America/St_Johns": "NST/NDT",
136
- "America/Detroit": "EST/EDT",
137
- "America/Indiana/Indianapolis": "EST/EDT",
138
- "Atlantic/Bermuda": "AST/ADT",
139
- "America/Whitehorse": "MST"
140
- }, Ce = ({
141
- initialTime: t,
142
- inputProps: s,
143
- minuteInterval: i = 5,
144
- onTimeChange: a,
145
- onClose: m,
146
- placement: d = "bottom",
147
- timezoneOverride: n,
148
- showTimezoneAbr: T,
149
- ["data-testid"]: o = "kibble-timepicker"
150
- }) => {
151
- const x = W({ recipe: B })(), [h, L] = S(!1), [b, y] = S(t), [A, j] = S(), [p, P] = S(), [g, _] = S(), z = $(() => b ? se(b, "h:mm aa") : "", [b]), N = (e) => {
152
- const c = e.toString();
153
- return c.length === 1 ? `0${c}` : c;
154
- }, F = $(() => [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((e) => e.toString()), []), K = $(() => {
155
- const e = [];
156
- for (let c = 0; c < 60; c += i)
157
- e.push(c);
158
- return e.map(N);
159
- }, [i]), Y = [u.AM, u.PM], f = k(
160
- (e, c, M) => {
161
- const C = e || "12", G = c || "00", H = M || "AM";
162
- let R = 0;
163
- e || j("12"), c || P("00"), M || _("AM"), H === u.PM && Number(C) < 12 && (R = 12), H === u.AM && Number(C) === 12 && (R = -12);
164
- const Q = Number(C) + R, U = (/* @__PURE__ */ new Date()).setHours(Q, Number(G), 0, 0), D = new Date(U);
165
- let v = D;
166
- y(D), a && (n && (v = V({ date: D, timezoneOverride: n })), a(n ? v : D));
167
- },
168
- [a, n]
169
- ), q = k(
170
- (e) => {
171
- j(e), f(e, p, g);
172
- },
173
- [f, g, p]
174
- ), J = k(
175
- (e) => {
176
- P(e), f(A, e, g);
177
- },
178
- [f, A, g]
179
- ), Z = k(
180
- (e) => {
181
- _(e), f(A, p, e);
182
- },
183
- [f, A, p]
184
- );
185
- return I(() => {
186
- if (t) {
187
- const e = n ? V({ date: t, timezoneOverride: n, reverse: !0 }) : new Date(t), M = e.getHours() % 12 || 12;
188
- y(e), j(M.toString()), P(e.getMinutes().toString()), _(e.getHours() > 11 ? u.PM : u.AM);
189
- }
190
- }, [t]), /* @__PURE__ */ r.jsx(
191
- te,
192
- {
193
- open: h,
194
- onOpenChange: ({ open: e }) => {
195
- L(e), !e && m && m(b);
196
- },
197
- anchor: /* @__PURE__ */ r.jsx(E, { className: "TimePicker__Trigger", "data-testid": `${o}-trigger`, css: x.trigger, children: /* @__PURE__ */ r.jsxs(le, { children: [
198
- /* @__PURE__ */ r.jsx(
199
- ee,
200
- {
201
- placeholder: "12:00 AM",
202
- rightElement: /* @__PURE__ */ r.jsx(re, { size: oe(s?.size || "md"), name: "clock" }),
203
- value: z,
204
- readOnly: !0,
205
- cursor: "pointer",
206
- ...s,
207
- ...h && { "data-focus": "true" }
208
- }
209
- ),
210
- T && n && /* @__PURE__ */ r.jsx(me, { children: pe[n] })
211
- ] }) }),
212
- contentProps: { w: "max-content" },
213
- placement: d,
214
- variant: s?.onContrast ? "contrast" : "default",
215
- showArrow: !1,
216
- children: /* @__PURE__ */ r.jsxs(E, { className: "TimePicker__Container", "data-testid": `${o}-container`, css: x.container, children: [
217
- /* @__PURE__ */ r.jsx(
218
- w,
219
- {
220
- options: F,
221
- optionType: "hour",
222
- selectedValue: A,
223
- onClick: q,
224
- open: h,
225
- "data-testid": `${o}-hour-list`
226
- }
227
- ),
228
- /* @__PURE__ */ r.jsx(
229
- w,
230
- {
231
- options: K,
232
- optionType: "minute",
233
- selectedValue: p ? N(p) : void 0,
234
- onClick: J,
235
- open: h,
236
- "data-testid": `${o}-minute-list`
237
- }
238
- ),
239
- /* @__PURE__ */ r.jsx(
240
- w,
241
- {
242
- options: Y,
243
- optionType: "meridiem",
244
- selectedValue: g,
245
- onClick: Z,
246
- open: h,
247
- "data-testid": `${o}-meridiem-list`
248
- }
249
- )
250
- ] })
251
- }
252
- );
253
- };
254
- export {
255
- u as M,
256
- Ce as T,
257
- V as c
258
- };
259
- //# sourceMappingURL=timePicker.component-B_DWeTKM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timePicker.component-B_DWeTKM.js","sources":["../../src/components/TimePicker/components/TimeOption/timeOption.recipe.ts","../../src/components/TimePicker/components/TimeOption/timeOption.component.tsx","../../src/components/TimePicker/timePicker.recipe.ts","../../src/components/TimePicker/components/TimeList/timeList.component.tsx","../../src/components/TimePicker/timePicker.types.ts","../../src/shared/utils/convertToTimezoneOverride.ts","../../src/components/TimePicker/timePicker.component.tsx"],"sourcesContent":["import { defineRecipe } from '@chakra-ui/react/styled-system';\n\nexport const timeOptionRecipe = defineRecipe({\n base: {\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: 'sm',\n px: 3,\n py: 1,\n textAlign: 'center',\n },\n variants: {\n selected: {\n true: {\n background: 'background.secondary',\n color: 'text.contrast',\n _hover: {\n background: 'background.secondary.hover',\n },\n },\n false: {\n background: 'background',\n color: 'text.subtle',\n _hover: {\n background: 'background.secondaryAlpha.hover',\n },\n },\n },\n },\n defaultVariants: {\n selected: false,\n },\n});\n","import React, { useCallback } from 'react';\nimport { Box } from '@chakra-ui/react/box';\nimport { useRecipe } from '@chakra-ui/react/styled-system';\nimport { timeOptionRecipe } from './timeOption.recipe';\n\ninterface TimeOptionProps {\n /** Ref to the option component. */\n innerRef?: React.Ref<HTMLDivElement | null> | null;\n /** Callback function to be called when the option is clicked. */\n onClick: (selectedValue: string) => void;\n /** If true, the option will be selected. */\n selected: boolean;\n /** Value of the option. */\n value: string;\n /** Data test id for the option.\n * @default kibble-timepicker-option\n */\n 'data-testid'?: string;\n}\n\nexport const TimeOption = ({\n value,\n innerRef,\n onClick,\n selected,\n ['data-testid']: dataTestId = 'kibble-timepicker-option',\n}: TimeOptionProps): React.JSX.Element => {\n const recipe = useRecipe({ recipe: timeOptionRecipe });\n const styles = recipe({ selected });\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const selectedValue = event.currentTarget.textContent || '';\n onClick(selectedValue);\n },\n [onClick],\n );\n\n return (\n <Box className=\"TimePicker__Option\" data-testid={dataTestId} ref={innerRef} onClick={handleClick} css={styles}>\n {value}\n </Box>\n );\n};\n","import { defineSlotRecipe } from '@chakra-ui/react/styled-system';\n\nexport const timePickerRecipe = defineSlotRecipe({\n slots: ['trigger', 'container', 'list'],\n base: {\n trigger: {\n width: '100%',\n },\n container: {\n display: 'flex',\n gap: 1.5,\n height: '186px',\n overflow: 'hidden',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n overflowY: 'auto',\n '&::webkit-scrollbar': {\n display: 'none',\n },\n },\n },\n});\n","import React, { useEffect, useRef } from 'react';\nimport { Box } from '@chakra-ui/react/box';\nimport { TimeOption } from '../TimeOption/timeOption.component';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { timePickerRecipe } from '../../timePicker.recipe';\n\ninterface ScrollContainerProps {\n /** Options to display in the list. */\n options: string[];\n /** Type of the option. */\n optionType: 'hour' | 'minute' | 'meridiem';\n /** Selected value of the list. */\n selectedValue?: string;\n /** Callback function to be called when the option is clicked. */\n onClick: (value: string) => void;\n /** Determines if the list is open. */\n open: boolean;\n /** Data test id for the list.\n * @default kibble-timepicker-list\n */\n 'data-testid'?: string;\n}\n\nexport const TimeList = ({\n options,\n optionType,\n selectedValue,\n onClick,\n open = false,\n ['data-testid']: dataTestId = 'kibble-timepicker-list',\n}: ScrollContainerProps): React.JSX.Element => {\n const recipe = useSlotRecipe({ recipe: timePickerRecipe });\n const styles = recipe();\n const itemRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (open && itemRef.current) {\n requestAnimationFrame(() => {\n if (itemRef.current) {\n itemRef.current.scrollIntoView({ block: 'center' });\n }\n });\n }\n }, [open, selectedValue]);\n\n return (\n <Box className=\"TimePicker__List\" data-testid={`${dataTestId}-${optionType}-list`} css={styles.list}>\n {options.map((option) => {\n const isSelected = option === selectedValue;\n return (\n <TimeOption\n key={`${optionType}-option-${option}`}\n innerRef={isSelected ? itemRef : null}\n value={option}\n selected={option === selectedValue}\n onClick={onClick}\n data-testid={`${dataTestId}-${optionType}-option-${option}`}\n />\n );\n })}\n </Box>\n );\n};\n","export enum Meridiem {\n AM = 'AM',\n PM = 'PM',\n}\n","import { add } from 'date-fns';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nexport const convertToTimezoneOverride = ({\n date,\n timezoneOverride,\n reverse,\n}: {\n date: Date;\n timezoneOverride: string;\n reverse?: boolean;\n}): Date => {\n const localTzOffset = getTimezoneOffset(Intl.DateTimeFormat().resolvedOptions().timeZone);\n const overrideTzOffset = getTimezoneOffset(timezoneOverride);\n const offsetDiff = reverse ? overrideTzOffset - localTzOffset : localTzOffset - overrideTzOffset;\n return add(date, { minutes: offsetDiff / 1000 / 60 });\n};\n\nexport const timezoneAbbreviations: Record<string, string> = {\n 'America/Phoenix': 'MST',\n 'Pacific/Honolulu': 'HST',\n 'America/Puerto_Rico': 'AST',\n 'America/New_York': 'EST/EDT',\n 'America/Anchorage': 'AKST/AKDT',\n 'America/Regina': 'CST',\n 'America/Boise': 'MST/MDT',\n 'America/Los_Angeles': 'PST/PDT',\n 'America/Chicago': 'CST/CDT',\n 'America/Toronto': 'EST/EDT',\n 'America/Indiana/Vincennes': 'EST/EDT',\n 'America/Edmonton': 'MST/MDT',\n 'America/Denver': 'MST/MDT',\n 'Europe/Amsterdam': 'CET/CEST',\n 'America/Indianapolis': 'EST/EDT',\n 'America/St_Johns': 'NST/NDT',\n 'America/Detroit': 'EST/EDT',\n 'America/Indiana/Indianapolis': 'EST/EDT',\n 'Atlantic/Bermuda': 'AST/ADT',\n 'America/Whitehorse': 'MST',\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TextInput, TextInputProps } from 'components/TextInput/textInput.component';\nimport { Popover } from 'components/Popover/popover.component';\nimport { Icon } from 'components/Icon/icon.component';\nimport { useIconTextSizeMap } from 'hooks/useIconTextSizeMap';\nimport format from 'date-fns/format';\nimport { Box } from '@chakra-ui/react/box';\nimport { TimeList } from './components/TimeList/timeList.component';\nimport { Meridiem } from './timePicker.types';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { timePickerRecipe } from './timePicker.recipe';\nimport { Placement } from 'shared/types/placement';\nimport { convertToTimezoneOverride, timezoneAbbreviations } from 'shared/utils/convertToTimezoneOverride';\nimport { Text } from 'components/Text';\nimport { HStack } from 'chakra';\n\nexport interface TimePickerProps {\n /** Initial time to be displayed in the input field. */\n initialTime?: Date;\n /** Props to customize the input field. See `TextInput` for more information. */\n inputProps?: Omit<TextInputProps, 'onChange' | 'value' | 'isClearable' | 'onClear'>;\n /**\n * Interval of minutes to be displayed in the dropdown.\n * @default 5\n */\n minuteInterval?: number;\n /** Callback function triggered when the time is changed. */\n onTimeChange?: (time: Date) => void;\n /** Callback function triggered when the time picker is closed. */\n onClose?: (time?: Date) => void;\n /**\n * Placement of the dropdown relative to the input field.\n * @default bottom\n */\n placement?: Placement;\n /**\n * If set, displays and processes the time in a specific timezone (typically for impersonation)\n */\n timezoneOverride?: string;\n /**\n * Show the timezone abbreviation (if available) beside the component\n */\n showTimezoneAbr?: boolean;\n /**\n * Data test id for the time picker.\n * @default kibble-timepicker\n */\n 'data-testid'?: string;\n}\n\nexport const TimePicker = ({\n initialTime,\n inputProps,\n minuteInterval = 5,\n onTimeChange,\n onClose,\n placement = 'bottom',\n timezoneOverride,\n showTimezoneAbr,\n ['data-testid']: dataTestId = 'kibble-timepicker',\n}: TimePickerProps): React.JSX.Element => {\n const recipe = useSlotRecipe({ recipe: timePickerRecipe });\n const styles = recipe();\n const [isOpen, setIsOpen] = useState(false);\n const [selectedTime, setSelectedTime] = useState(initialTime);\n const [selectedHour, setSelectedHour] = useState<string | undefined>();\n const [selectedMinute, setSelectedMinute] = useState<string | undefined>();\n const [selectedMeridiem, setSelectedMeridiem] = useState<string | undefined>();\n\n const formattedTime = useMemo(() => {\n if (!selectedTime) return '';\n return format(selectedTime, 'h:mm aa');\n }, [selectedTime]);\n\n const formatNumber = (number: number | string): string => {\n const formattedValue = number.toString();\n if (formattedValue.length === 1) {\n return `0${formattedValue}`;\n }\n\n return formattedValue;\n };\n\n const hourOptions = useMemo(() => {\n return [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((hour) => hour.toString());\n }, []);\n\n const minuteOptions = useMemo(() => {\n const minutes = [];\n for (let i = 0; i < 60; i += minuteInterval) {\n minutes.push(i);\n }\n\n return minutes.map(formatNumber);\n }, [minuteInterval]);\n\n const meridiemOptions = [Meridiem.AM, Meridiem.PM];\n\n const handleTimeChange = useCallback(\n (hour?: string, minute?: string, meridiem?: string) => {\n const _hour = hour || '12';\n const _minute = minute || '00';\n const _meridiem = meridiem || 'AM';\n let meridiemAdjustment = 0;\n\n if (!hour) {\n setSelectedHour('12');\n }\n if (!minute) {\n setSelectedMinute('00');\n }\n if (!meridiem) {\n setSelectedMeridiem('AM');\n }\n\n // set 1-11pm to 13-23. Don't set 12pm to 24\n if (_meridiem === Meridiem.PM && Number(_hour) < 12) {\n meridiemAdjustment = 12;\n }\n\n // set 12am to 00\n if (_meridiem === Meridiem.AM && Number(_hour) === 12) {\n meridiemAdjustment = -12;\n }\n\n const hours = Number(_hour) + meridiemAdjustment;\n const time = new Date().setHours(hours, Number(_minute), 0, 0);\n const date = new Date(time);\n let convertedDate = date;\n\n setSelectedTime(date);\n if (onTimeChange) {\n if (timezoneOverride) {\n convertedDate = convertToTimezoneOverride({ date, timezoneOverride });\n }\n onTimeChange(timezoneOverride ? convertedDate : date);\n }\n },\n [onTimeChange, timezoneOverride],\n );\n\n const handleHourClick = useCallback(\n (value: string) => {\n setSelectedHour(value);\n handleTimeChange(value, selectedMinute, selectedMeridiem);\n },\n [handleTimeChange, selectedMeridiem, selectedMinute],\n );\n\n const handleMinuteClick = useCallback(\n (value: string) => {\n setSelectedMinute(value);\n handleTimeChange(selectedHour, value, selectedMeridiem);\n },\n [handleTimeChange, selectedHour, selectedMeridiem],\n );\n\n const handleMeridiemClick = useCallback(\n (value: string) => {\n setSelectedMeridiem(value);\n handleTimeChange(selectedHour, selectedMinute, value);\n },\n [handleTimeChange, selectedHour, selectedMinute],\n );\n\n useEffect(() => {\n // Set default selections based on value passed in\n // and, to ensure this doesn't re-run while the user is making selections,\n // ignore subsequent calls the parent component might make\n if (initialTime) {\n const localTime = timezoneOverride\n ? convertToTimezoneOverride({ date: initialTime, timezoneOverride, reverse: true })\n : new Date(initialTime);\n\n // calculate hours\n const hours = localTime.getHours();\n const adjustedHours = hours % 12 || 12;\n\n setSelectedTime(localTime);\n setSelectedHour(adjustedHours.toString());\n setSelectedMinute(localTime.getMinutes().toString());\n setSelectedMeridiem(localTime.getHours() > 11 ? Meridiem.PM : Meridiem.AM);\n }\n }, [initialTime]);\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={({ open }) => {\n setIsOpen(open);\n if (!open && onClose) {\n onClose(selectedTime);\n }\n }}\n anchor={\n <Box className=\"TimePicker__Trigger\" data-testid={`${dataTestId}-trigger`} css={styles.trigger}>\n <HStack>\n <TextInput\n placeholder=\"12:00 AM\"\n rightElement={<Icon size={useIconTextSizeMap(inputProps?.size || 'md')} name=\"clock\" />}\n value={formattedTime}\n readOnly\n cursor=\"pointer\"\n {...inputProps}\n {...(isOpen && { 'data-focus': 'true' })}\n />\n {showTimezoneAbr && timezoneOverride && <Text>{timezoneAbbreviations[timezoneOverride]}</Text>}\n </HStack>\n </Box>\n }\n contentProps={{ w: 'max-content' }}\n placement={placement}\n variant={inputProps?.onContrast ? 'contrast' : 'default'}\n showArrow={false}\n >\n <Box className=\"TimePicker__Container\" data-testid={`${dataTestId}-container`} css={styles.container}>\n <TimeList\n options={hourOptions}\n optionType=\"hour\"\n selectedValue={selectedHour}\n onClick={handleHourClick}\n open={isOpen}\n data-testid={`${dataTestId}-hour-list`}\n />\n <TimeList\n options={minuteOptions}\n optionType=\"minute\"\n selectedValue={selectedMinute ? formatNumber(selectedMinute) : undefined}\n onClick={handleMinuteClick}\n open={isOpen}\n data-testid={`${dataTestId}-minute-list`}\n />\n <TimeList\n options={meridiemOptions}\n optionType=\"meridiem\"\n selectedValue={selectedMeridiem}\n onClick={handleMeridiemClick}\n open={isOpen}\n data-testid={`${dataTestId}-meridiem-list`}\n />\n </Box>\n </Popover>\n );\n};\n"],"names":["timeOptionRecipe","defineRecipe","TimeOption","value","innerRef","onClick","selected","dataTestId","styles","useRecipe","handleClick","useCallback","event","selectedValue","jsx","Box","timePickerRecipe","defineSlotRecipe","TimeList","options","optionType","open","useSlotRecipe","itemRef","useRef","useEffect","option","isSelected","Meridiem","convertToTimezoneOverride","date","timezoneOverride","reverse","localTzOffset","getTimezoneOffset","overrideTzOffset","offsetDiff","add","timezoneAbbreviations","TimePicker","initialTime","inputProps","minuteInterval","onTimeChange","onClose","placement","showTimezoneAbr","isOpen","setIsOpen","useState","selectedTime","setSelectedTime","selectedHour","setSelectedHour","selectedMinute","setSelectedMinute","selectedMeridiem","setSelectedMeridiem","formattedTime","useMemo","format","formatNumber","number","formattedValue","hourOptions","hour","minuteOptions","minutes","i","meridiemOptions","handleTimeChange","minute","meridiem","_hour","_minute","_meridiem","meridiemAdjustment","hours","time","convertedDate","handleHourClick","handleMinuteClick","handleMeridiemClick","localTime","adjustedHours","Popover","HStack","TextInput","Icon","useIconTextSizeMap","Text","jsxs"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";const r=require("./jsx-runtime-BjDatQAs.js"),t=require("react"),Q=require("./textInput.component-CwTc0h_F.js"),U=require("./popover.component-DTjA1GSd.js"),X=require("./icon.component-B1hr5lLa.js"),ee=require("./useIconTextSizeMap-BXmABb54.js"),te=require("./format-CK7Imh-5.js"),E=require("./index-BQRnVsAg.js"),H=require("./config-jChwZPSv.js"),se=require("./use-recipe-DaPWl_pL.js"),O=require("./create-slot-recipe-context-HXE1VazG.js"),re=require("date-fns"),N=require("date-fns-tz"),ne=require("./text.component-BDDz5KQP.js"),oe=require("./h-stack-D4MnHHRc.js"),ie=H.defineRecipe({base:{borderRadius:"4px",cursor:"pointer",fontSize:"sm",px:3,py:1,textAlign:"center"},variants:{selected:{true:{background:"background.secondary",color:"text.contrast",_hover:{background:"background.secondary.hover"}},false:{background:"background",color:"text.subtle",_hover:{background:"background.secondaryAlpha.hover"}}}},defaultVariants:{selected:!1}}),ce=({value:s,innerRef:o,onClick:i,selected:u,["data-testid"]:l="kibble-timepicker-option"})=>{const c=se.useRecipe({recipe:ie})({selected:u}),T=t.useCallback(n=>{const m=n.currentTarget.textContent||"";i(m)},[i]);return r.jsxRuntimeExports.jsx(E.Box,{className:"TimePicker__Option","data-testid":l,ref:o,onClick:T,css:c,children:s})},z=H.defineSlotRecipe({slots:["trigger","container","list"],base:{trigger:{width:"100%"},container:{display:"flex",gap:1.5,height:"186px",overflow:"hidden"},list:{display:"flex",flexDirection:"column",gap:1,overflowY:"auto","&::webkit-scrollbar":{display:"none"}}}}),P=({options:s,optionType:o,selectedValue:i,onClick:u,open:l=!1,["data-testid"]:p="kibble-timepicker-list"})=>{const T=O.useSlotRecipe({recipe:z})(),n=t.useRef(null);return t.useEffect(()=>{l&&n.current&&requestAnimationFrame(()=>{n.current&&n.current.scrollIntoView({block:"center"})})},[l,i]),r.jsxRuntimeExports.jsx(E.Box,{className:"TimePicker__List","data-testid":`${p}-${o}-list`,css:T.list,children:s.map(m=>{const g=m===i;return r.jsxRuntimeExports.jsx(ce,{innerRef:g?n:null,value:m,selected:m===i,onClick:u,"data-testid":`${p}-${o}-option-${m}`},`${o}-option-${m}`)})})};var d=(s=>(s.AM="AM",s.PM="PM",s))(d||{});const q=({date:s,timezoneOverride:o,reverse:i})=>{const u=N.getTimezoneOffset(Intl.DateTimeFormat().resolvedOptions().timeZone),l=N.getTimezoneOffset(o),p=i?l-u:u-l;return re.add(s,{minutes:p/1e3/60})},ae={"America/Phoenix":"MST","Pacific/Honolulu":"HST","America/Puerto_Rico":"AST","America/New_York":"EST/EDT","America/Anchorage":"AKST/AKDT","America/Regina":"CST","America/Boise":"MST/MDT","America/Los_Angeles":"PST/PDT","America/Chicago":"CST/CDT","America/Toronto":"EST/EDT","America/Indiana/Vincennes":"EST/EDT","America/Edmonton":"MST/MDT","America/Denver":"MST/MDT","Europe/Amsterdam":"CET/CEST","America/Indianapolis":"EST/EDT","America/St_Johns":"NST/NDT","America/Detroit":"EST/EDT","America/Indiana/Indianapolis":"EST/EDT","Atlantic/Bermuda":"AST/ADT","America/Whitehorse":"MST"},ue=({initialTime:s,inputProps:o,minuteInterval:i=5,onTimeChange:u,onClose:l,placement:p="bottom",timezoneOverride:c,showTimezoneAbr:T,["data-testid"]:n="kibble-timepicker"})=>{const g=O.useSlotRecipe({recipe:z})(),[S,B]=t.useState(!1),[k,v]=t.useState(s),[h,R]=t.useState(),[x,j]=t.useState(),[A,D]=t.useState(),I=t.useMemo(()=>k?te.format(k,"h:mm aa"):"",[k]),$=e=>{const a=e.toString();return a.length===1?`0${a}`:a},V=t.useMemo(()=>[12,1,2,3,4,5,6,7,8,9,10,11].map(e=>e.toString()),[]),F=t.useMemo(()=>{const e=[];for(let a=0;a<60;a+=i)e.push(a);return e.map($)},[i]),L=[d.AM,d.PM],f=t.useCallback((e,a,b)=>{const C=e||"12",J=a||"00",w=b||"AM";let _=0;e||R("12"),a||j("00"),b||D("AM"),w===d.PM&&Number(C)<12&&(_=12),w===d.AM&&Number(C)===12&&(_=-12);const Z=Number(C)+_,G=new Date().setHours(Z,Number(J),0,0),M=new Date(G);let y=M;v(M),u&&(c&&(y=q({date:M,timezoneOverride:c})),u(c?y:M))},[u,c]),W=t.useCallback(e=>{R(e),f(e,x,A)},[f,A,x]),K=t.useCallback(e=>{j(e),f(h,e,A)},[f,h,A]),Y=t.useCallback(e=>{D(e),f(h,x,e)},[f,h,x]);return t.useEffect(()=>{if(s){const e=c?q({date:s,timezoneOverride:c,reverse:!0}):new Date(s),b=e.getHours()%12||12;v(e),R(b.toString()),j(e.getMinutes().toString()),D(e.getHours()>11?d.PM:d.AM)}},[s]),r.jsxRuntimeExports.jsx(U.Popover,{open:S,onOpenChange:({open:e})=>{B(e),!e&&l&&l(k)},anchor:r.jsxRuntimeExports.jsx(E.Box,{className:"TimePicker__Trigger","data-testid":`${n}-trigger`,css:g.trigger,children:r.jsxRuntimeExports.jsxs(oe.HStack,{children:[r.jsxRuntimeExports.jsx(Q.WrappedTextInput,{placeholder:"12:00 AM",rightElement:r.jsxRuntimeExports.jsx(X.Icon,{size:ee.useIconTextSizeMap(o?.size||"md"),name:"clock"}),value:I,readOnly:!0,cursor:"pointer",...o,...S&&{"data-focus":"true"}}),T&&c&&r.jsxRuntimeExports.jsx(ne.WrappedText,{children:ae[c]})]})}),contentProps:{w:"max-content"},placement:p,variant:o?.onContrast?"contrast":"default",showArrow:!1,children:r.jsxRuntimeExports.jsxs(E.Box,{className:"TimePicker__Container","data-testid":`${n}-container`,css:g.container,children:[r.jsxRuntimeExports.jsx(P,{options:V,optionType:"hour",selectedValue:h,onClick:W,open:S,"data-testid":`${n}-hour-list`}),r.jsxRuntimeExports.jsx(P,{options:F,optionType:"minute",selectedValue:x?$(x):void 0,onClick:K,open:S,"data-testid":`${n}-minute-list`}),r.jsxRuntimeExports.jsx(P,{options:L,optionType:"meridiem",selectedValue:A,onClick:Y,open:S,"data-testid":`${n}-meridiem-list`})]})})};exports.Meridiem=d;exports.TimePicker=ue;exports.convertToTimezoneOverride=q;
2
- //# sourceMappingURL=timePicker.component-CikJ3IyR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timePicker.component-CikJ3IyR.js","sources":["../../src/components/TimePicker/components/TimeOption/timeOption.recipe.ts","../../src/components/TimePicker/components/TimeOption/timeOption.component.tsx","../../src/components/TimePicker/timePicker.recipe.ts","../../src/components/TimePicker/components/TimeList/timeList.component.tsx","../../src/components/TimePicker/timePicker.types.ts","../../src/shared/utils/convertToTimezoneOverride.ts","../../src/components/TimePicker/timePicker.component.tsx"],"sourcesContent":["import { defineRecipe } from '@chakra-ui/react/styled-system';\n\nexport const timeOptionRecipe = defineRecipe({\n base: {\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: 'sm',\n px: 3,\n py: 1,\n textAlign: 'center',\n },\n variants: {\n selected: {\n true: {\n background: 'background.secondary',\n color: 'text.contrast',\n _hover: {\n background: 'background.secondary.hover',\n },\n },\n false: {\n background: 'background',\n color: 'text.subtle',\n _hover: {\n background: 'background.secondaryAlpha.hover',\n },\n },\n },\n },\n defaultVariants: {\n selected: false,\n },\n});\n","import React, { useCallback } from 'react';\nimport { Box } from '@chakra-ui/react/box';\nimport { useRecipe } from '@chakra-ui/react/styled-system';\nimport { timeOptionRecipe } from './timeOption.recipe';\n\ninterface TimeOptionProps {\n /** Ref to the option component. */\n innerRef?: React.Ref<HTMLDivElement | null> | null;\n /** Callback function to be called when the option is clicked. */\n onClick: (selectedValue: string) => void;\n /** If true, the option will be selected. */\n selected: boolean;\n /** Value of the option. */\n value: string;\n /** Data test id for the option.\n * @default kibble-timepicker-option\n */\n 'data-testid'?: string;\n}\n\nexport const TimeOption = ({\n value,\n innerRef,\n onClick,\n selected,\n ['data-testid']: dataTestId = 'kibble-timepicker-option',\n}: TimeOptionProps): React.JSX.Element => {\n const recipe = useRecipe({ recipe: timeOptionRecipe });\n const styles = recipe({ selected });\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const selectedValue = event.currentTarget.textContent || '';\n onClick(selectedValue);\n },\n [onClick],\n );\n\n return (\n <Box className=\"TimePicker__Option\" data-testid={dataTestId} ref={innerRef} onClick={handleClick} css={styles}>\n {value}\n </Box>\n );\n};\n","import { defineSlotRecipe } from '@chakra-ui/react/styled-system';\n\nexport const timePickerRecipe = defineSlotRecipe({\n slots: ['trigger', 'container', 'list'],\n base: {\n trigger: {\n width: '100%',\n },\n container: {\n display: 'flex',\n gap: 1.5,\n height: '186px',\n overflow: 'hidden',\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n overflowY: 'auto',\n '&::webkit-scrollbar': {\n display: 'none',\n },\n },\n },\n});\n","import React, { useEffect, useRef } from 'react';\nimport { Box } from '@chakra-ui/react/box';\nimport { TimeOption } from '../TimeOption/timeOption.component';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { timePickerRecipe } from '../../timePicker.recipe';\n\ninterface ScrollContainerProps {\n /** Options to display in the list. */\n options: string[];\n /** Type of the option. */\n optionType: 'hour' | 'minute' | 'meridiem';\n /** Selected value of the list. */\n selectedValue?: string;\n /** Callback function to be called when the option is clicked. */\n onClick: (value: string) => void;\n /** Determines if the list is open. */\n open: boolean;\n /** Data test id for the list.\n * @default kibble-timepicker-list\n */\n 'data-testid'?: string;\n}\n\nexport const TimeList = ({\n options,\n optionType,\n selectedValue,\n onClick,\n open = false,\n ['data-testid']: dataTestId = 'kibble-timepicker-list',\n}: ScrollContainerProps): React.JSX.Element => {\n const recipe = useSlotRecipe({ recipe: timePickerRecipe });\n const styles = recipe();\n const itemRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (open && itemRef.current) {\n requestAnimationFrame(() => {\n if (itemRef.current) {\n itemRef.current.scrollIntoView({ block: 'center' });\n }\n });\n }\n }, [open, selectedValue]);\n\n return (\n <Box className=\"TimePicker__List\" data-testid={`${dataTestId}-${optionType}-list`} css={styles.list}>\n {options.map((option) => {\n const isSelected = option === selectedValue;\n return (\n <TimeOption\n key={`${optionType}-option-${option}`}\n innerRef={isSelected ? itemRef : null}\n value={option}\n selected={option === selectedValue}\n onClick={onClick}\n data-testid={`${dataTestId}-${optionType}-option-${option}`}\n />\n );\n })}\n </Box>\n );\n};\n","export enum Meridiem {\n AM = 'AM',\n PM = 'PM',\n}\n","import { add } from 'date-fns';\nimport { getTimezoneOffset } from 'date-fns-tz';\n\nexport const convertToTimezoneOverride = ({\n date,\n timezoneOverride,\n reverse,\n}: {\n date: Date;\n timezoneOverride: string;\n reverse?: boolean;\n}): Date => {\n const localTzOffset = getTimezoneOffset(Intl.DateTimeFormat().resolvedOptions().timeZone);\n const overrideTzOffset = getTimezoneOffset(timezoneOverride);\n const offsetDiff = reverse ? overrideTzOffset - localTzOffset : localTzOffset - overrideTzOffset;\n return add(date, { minutes: offsetDiff / 1000 / 60 });\n};\n\nexport const timezoneAbbreviations: Record<string, string> = {\n 'America/Phoenix': 'MST',\n 'Pacific/Honolulu': 'HST',\n 'America/Puerto_Rico': 'AST',\n 'America/New_York': 'EST/EDT',\n 'America/Anchorage': 'AKST/AKDT',\n 'America/Regina': 'CST',\n 'America/Boise': 'MST/MDT',\n 'America/Los_Angeles': 'PST/PDT',\n 'America/Chicago': 'CST/CDT',\n 'America/Toronto': 'EST/EDT',\n 'America/Indiana/Vincennes': 'EST/EDT',\n 'America/Edmonton': 'MST/MDT',\n 'America/Denver': 'MST/MDT',\n 'Europe/Amsterdam': 'CET/CEST',\n 'America/Indianapolis': 'EST/EDT',\n 'America/St_Johns': 'NST/NDT',\n 'America/Detroit': 'EST/EDT',\n 'America/Indiana/Indianapolis': 'EST/EDT',\n 'Atlantic/Bermuda': 'AST/ADT',\n 'America/Whitehorse': 'MST',\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TextInput, TextInputProps } from 'components/TextInput/textInput.component';\nimport { Popover } from 'components/Popover/popover.component';\nimport { Icon } from 'components/Icon/icon.component';\nimport { useIconTextSizeMap } from 'hooks/useIconTextSizeMap';\nimport format from 'date-fns/format';\nimport { Box } from '@chakra-ui/react/box';\nimport { TimeList } from './components/TimeList/timeList.component';\nimport { Meridiem } from './timePicker.types';\nimport { useSlotRecipe } from '@chakra-ui/react/styled-system';\nimport { timePickerRecipe } from './timePicker.recipe';\nimport { Placement } from 'shared/types/placement';\nimport { convertToTimezoneOverride, timezoneAbbreviations } from 'shared/utils/convertToTimezoneOverride';\nimport { Text } from 'components/Text';\nimport { HStack } from 'chakra';\n\nexport interface TimePickerProps {\n /** Initial time to be displayed in the input field. */\n initialTime?: Date;\n /** Props to customize the input field. See `TextInput` for more information. */\n inputProps?: Omit<TextInputProps, 'onChange' | 'value' | 'isClearable' | 'onClear'>;\n /**\n * Interval of minutes to be displayed in the dropdown.\n * @default 5\n */\n minuteInterval?: number;\n /** Callback function triggered when the time is changed. */\n onTimeChange?: (time: Date) => void;\n /** Callback function triggered when the time picker is closed. */\n onClose?: (time?: Date) => void;\n /**\n * Placement of the dropdown relative to the input field.\n * @default bottom\n */\n placement?: Placement;\n /**\n * If set, displays and processes the time in a specific timezone (typically for impersonation)\n */\n timezoneOverride?: string;\n /**\n * Show the timezone abbreviation (if available) beside the component\n */\n showTimezoneAbr?: boolean;\n /**\n * Data test id for the time picker.\n * @default kibble-timepicker\n */\n 'data-testid'?: string;\n}\n\nexport const TimePicker = ({\n initialTime,\n inputProps,\n minuteInterval = 5,\n onTimeChange,\n onClose,\n placement = 'bottom',\n timezoneOverride,\n showTimezoneAbr,\n ['data-testid']: dataTestId = 'kibble-timepicker',\n}: TimePickerProps): React.JSX.Element => {\n const recipe = useSlotRecipe({ recipe: timePickerRecipe });\n const styles = recipe();\n const [isOpen, setIsOpen] = useState(false);\n const [selectedTime, setSelectedTime] = useState(initialTime);\n const [selectedHour, setSelectedHour] = useState<string | undefined>();\n const [selectedMinute, setSelectedMinute] = useState<string | undefined>();\n const [selectedMeridiem, setSelectedMeridiem] = useState<string | undefined>();\n\n const formattedTime = useMemo(() => {\n if (!selectedTime) return '';\n return format(selectedTime, 'h:mm aa');\n }, [selectedTime]);\n\n const formatNumber = (number: number | string): string => {\n const formattedValue = number.toString();\n if (formattedValue.length === 1) {\n return `0${formattedValue}`;\n }\n\n return formattedValue;\n };\n\n const hourOptions = useMemo(() => {\n return [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((hour) => hour.toString());\n }, []);\n\n const minuteOptions = useMemo(() => {\n const minutes = [];\n for (let i = 0; i < 60; i += minuteInterval) {\n minutes.push(i);\n }\n\n return minutes.map(formatNumber);\n }, [minuteInterval]);\n\n const meridiemOptions = [Meridiem.AM, Meridiem.PM];\n\n const handleTimeChange = useCallback(\n (hour?: string, minute?: string, meridiem?: string) => {\n const _hour = hour || '12';\n const _minute = minute || '00';\n const _meridiem = meridiem || 'AM';\n let meridiemAdjustment = 0;\n\n if (!hour) {\n setSelectedHour('12');\n }\n if (!minute) {\n setSelectedMinute('00');\n }\n if (!meridiem) {\n setSelectedMeridiem('AM');\n }\n\n // set 1-11pm to 13-23. Don't set 12pm to 24\n if (_meridiem === Meridiem.PM && Number(_hour) < 12) {\n meridiemAdjustment = 12;\n }\n\n // set 12am to 00\n if (_meridiem === Meridiem.AM && Number(_hour) === 12) {\n meridiemAdjustment = -12;\n }\n\n const hours = Number(_hour) + meridiemAdjustment;\n const time = new Date().setHours(hours, Number(_minute), 0, 0);\n const date = new Date(time);\n let convertedDate = date;\n\n setSelectedTime(date);\n if (onTimeChange) {\n if (timezoneOverride) {\n convertedDate = convertToTimezoneOverride({ date, timezoneOverride });\n }\n onTimeChange(timezoneOverride ? convertedDate : date);\n }\n },\n [onTimeChange, timezoneOverride],\n );\n\n const handleHourClick = useCallback(\n (value: string) => {\n setSelectedHour(value);\n handleTimeChange(value, selectedMinute, selectedMeridiem);\n },\n [handleTimeChange, selectedMeridiem, selectedMinute],\n );\n\n const handleMinuteClick = useCallback(\n (value: string) => {\n setSelectedMinute(value);\n handleTimeChange(selectedHour, value, selectedMeridiem);\n },\n [handleTimeChange, selectedHour, selectedMeridiem],\n );\n\n const handleMeridiemClick = useCallback(\n (value: string) => {\n setSelectedMeridiem(value);\n handleTimeChange(selectedHour, selectedMinute, value);\n },\n [handleTimeChange, selectedHour, selectedMinute],\n );\n\n useEffect(() => {\n // Set default selections based on value passed in\n // and, to ensure this doesn't re-run while the user is making selections,\n // ignore subsequent calls the parent component might make\n if (initialTime) {\n const localTime = timezoneOverride\n ? convertToTimezoneOverride({ date: initialTime, timezoneOverride, reverse: true })\n : new Date(initialTime);\n\n // calculate hours\n const hours = localTime.getHours();\n const adjustedHours = hours % 12 || 12;\n\n setSelectedTime(localTime);\n setSelectedHour(adjustedHours.toString());\n setSelectedMinute(localTime.getMinutes().toString());\n setSelectedMeridiem(localTime.getHours() > 11 ? Meridiem.PM : Meridiem.AM);\n }\n }, [initialTime]);\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={({ open }) => {\n setIsOpen(open);\n if (!open && onClose) {\n onClose(selectedTime);\n }\n }}\n anchor={\n <Box className=\"TimePicker__Trigger\" data-testid={`${dataTestId}-trigger`} css={styles.trigger}>\n <HStack>\n <TextInput\n placeholder=\"12:00 AM\"\n rightElement={<Icon size={useIconTextSizeMap(inputProps?.size || 'md')} name=\"clock\" />}\n value={formattedTime}\n readOnly\n cursor=\"pointer\"\n {...inputProps}\n {...(isOpen && { 'data-focus': 'true' })}\n />\n {showTimezoneAbr && timezoneOverride && <Text>{timezoneAbbreviations[timezoneOverride]}</Text>}\n </HStack>\n </Box>\n }\n contentProps={{ w: 'max-content' }}\n placement={placement}\n variant={inputProps?.onContrast ? 'contrast' : 'default'}\n showArrow={false}\n >\n <Box className=\"TimePicker__Container\" data-testid={`${dataTestId}-container`} css={styles.container}>\n <TimeList\n options={hourOptions}\n optionType=\"hour\"\n selectedValue={selectedHour}\n onClick={handleHourClick}\n open={isOpen}\n data-testid={`${dataTestId}-hour-list`}\n />\n <TimeList\n options={minuteOptions}\n optionType=\"minute\"\n selectedValue={selectedMinute ? formatNumber(selectedMinute) : undefined}\n onClick={handleMinuteClick}\n open={isOpen}\n data-testid={`${dataTestId}-minute-list`}\n />\n <TimeList\n options={meridiemOptions}\n optionType=\"meridiem\"\n selectedValue={selectedMeridiem}\n onClick={handleMeridiemClick}\n open={isOpen}\n data-testid={`${dataTestId}-meridiem-list`}\n />\n </Box>\n </Popover>\n );\n};\n"],"names":["timeOptionRecipe","defineRecipe","TimeOption","value","innerRef","onClick","selected","dataTestId","styles","useRecipe","handleClick","useCallback","event","selectedValue","jsx","Box","timePickerRecipe","defineSlotRecipe","TimeList","options","optionType","open","useSlotRecipe","itemRef","useRef","useEffect","option","isSelected","Meridiem","convertToTimezoneOverride","date","timezoneOverride","reverse","localTzOffset","getTimezoneOffset","overrideTzOffset","offsetDiff","add","timezoneAbbreviations","TimePicker","initialTime","inputProps","minuteInterval","onTimeChange","onClose","placement","showTimezoneAbr","isOpen","setIsOpen","useState","selectedTime","setSelectedTime","selectedHour","setSelectedHour","selectedMinute","setSelectedMinute","selectedMeridiem","setSelectedMeridiem","formattedTime","useMemo","format","formatNumber","number","formattedValue","hourOptions","hour","minuteOptions","minutes","i","meridiemOptions","handleTimeChange","minute","meridiem","_hour","_minute","_meridiem","meridiemAdjustment","hours","time","convertedDate","handleHourClick","handleMinuteClick","handleMeridiemClick","localTime","adjustedHours","Popover","HStack","TextInput","Icon","useIconTextSizeMap","Text","jsxs"],"mappings":"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"}