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

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 (26) hide show
  1. package/dist/chunks/{dateTimePicker.component-CBrEZ9lO.js → dateTimePicker.component-BBFEwtxH.js} +2 -2
  2. package/dist/chunks/{dateTimePicker.component-CBrEZ9lO.js.map → dateTimePicker.component-BBFEwtxH.js.map} +1 -1
  3. package/dist/chunks/{dateTimePicker.component-D5Rp7cVf.js → dateTimePicker.component-CddN5YqV.js} +2 -2
  4. package/dist/chunks/{dateTimePicker.component-D5Rp7cVf.js.map → dateTimePicker.component-CddN5YqV.js.map} +1 -1
  5. package/dist/chunks/{timePicker.component-BsgIeTaf.js → timePicker.component-BjA0Ax6p.js} +70 -70
  6. package/dist/chunks/timePicker.component-BjA0Ax6p.js.map +1 -0
  7. package/dist/chunks/timePicker.component-DvRX0gHU.js +2 -0
  8. package/dist/chunks/timePicker.component-DvRX0gHU.js.map +1 -0
  9. package/dist/chunks/{timeRange.component-CRz8EP7Y.js → timeRange.component-BE5hGSQM.js} +2 -2
  10. package/dist/chunks/{timeRange.component-CRz8EP7Y.js.map → timeRange.component-BE5hGSQM.js.map} +1 -1
  11. package/dist/chunks/{timeRange.component-DC8bj7nQ.js → timeRange.component-BYa0-d6e.js} +2 -2
  12. package/dist/chunks/{timeRange.component-DC8bj7nQ.js.map → timeRange.component-BYa0-d6e.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/package.json +1 -1
  24. package/dist/chunks/timePicker.component-BsgIeTaf.js.map +0 -1
  25. package/dist/chunks/timePicker.component-Dm5Vh7bB.js +0 -2
  26. package/dist/chunks/timePicker.component-Dm5Vh7bB.js.map +0 -1
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "packages/*"
5
5
  ],
6
6
  "description": "Kibble Design System by Otto",
7
- "version": "5.0.21-alpha.hunter.21",
7
+ "version": "5.0.21-alpha.hunter.22",
8
8
  "type": "module",
9
9
  "main": "./dist/cjs/index.cjs",
10
10
  "module": "./dist/esm/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"timePicker.component-BsgIeTaf.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","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 } from 'shared/utils/convertToTimezoneOverride';\nimport { Text } from 'components/Text';\nimport { HStack } from 'chakra';\nimport { tzName } from '@date-fns/tz';\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>{tzName(timezoneOverride, new Date(), 'short')}</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","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","tzName","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"),T=require("./index-BQRnVsAg.js"),D=require("./config-jChwZPSv.js"),se=require("./use-recipe-DaPWl_pL.js"),H=require("./create-slot-recipe-context-HXE1VazG.js"),re=require("date-fns"),O=require("date-fns-tz"),oe=require("./text.component-BDDz5KQP.js"),ne=require("@date-fns/tz"),ce=require("./h-stack-D4MnHHRc.js"),ie=D.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}}),ae=({value:s,innerRef:n,onClick:c,selected:u,["data-testid"]:l="kibble-timepicker-option"})=>{const i=se.useRecipe({recipe:ie})({selected:u}),k=t.useCallback(o=>{const d=o.currentTarget.textContent||"";c(d)},[c]);return r.jsxRuntimeExports.jsx(T.Box,{className:"TimePicker__Option","data-testid":l,ref:n,onClick:k,css:i,children:s})},z=D.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"}}}}),$=({options:s,optionType:n,selectedValue:c,onClick:u,open:l=!1,["data-testid"]:p="kibble-timepicker-list"})=>{const k=H.useSlotRecipe({recipe:z})(),o=t.useRef(null);return t.useEffect(()=>{l&&o.current&&requestAnimationFrame(()=>{o.current&&o.current.scrollIntoView({block:"center"})})},[l,c]),r.jsxRuntimeExports.jsx(T.Box,{className:"TimePicker__List","data-testid":`${p}-${n}-list`,css:k.list,children:s.map(d=>{const j=d===c;return r.jsxRuntimeExports.jsx(ae,{innerRef:j?o:null,value:d,selected:d===c,onClick:u,"data-testid":`${p}-${n}-option-${d}`},`${n}-option-${d}`)})})};var m=(s=>(s.AM="AM",s.PM="PM",s))(m||{});const w=({date:s,timezoneOverride:n,reverse:c})=>{const u=O.getTimezoneOffset(Intl.DateTimeFormat().resolvedOptions().timeZone),l=O.getTimezoneOffset(n),p=c?l-u:u-l;return re.add(s,{minutes:p/1e3/60})},ue=({initialTime:s,inputProps:n,minuteInterval:c=5,onTimeChange:u,onClose:l,placement:p="bottom",timezoneOverride:i,showTimezoneAbr:k,["data-testid"]:o="kibble-timepicker"})=>{const j=H.useSlotRecipe({recipe:z})(),[h,V]=t.useState(!1),[R,y]=t.useState(s),[g,q]=t.useState(),[x,_]=t.useState(),[b,E]=t.useState(),B=t.useMemo(()=>R?te.format(R,"h:mm aa"):"",[R]),P=e=>{const a=e.toString();return a.length===1?`0${a}`:a},F=t.useMemo(()=>[12,1,2,3,4,5,6,7,8,9,10,11].map(e=>e.toString()),[]),I=t.useMemo(()=>{const e=[];for(let a=0;a<60;a+=c)e.push(a);return e.map(P)},[c]),L=[m.AM,m.PM],f=t.useCallback((e,a,M)=>{const C=e||"12",G=a||"00",v=M||"AM";let A=0;e||q("12"),a||_("00"),M||E("AM"),v===m.PM&&Number(C)<12&&(A=12),v===m.AM&&Number(C)===12&&(A=-12);const J=Number(C)+A,K=new Date().setHours(J,Number(G),0,0),S=new Date(K);let N=S;y(S),u&&(i&&(N=w({date:S,timezoneOverride:i})),u(i?N:S))},[u,i]),W=t.useCallback(e=>{q(e),f(e,x,b)},[f,b,x]),Y=t.useCallback(e=>{_(e),f(g,e,b)},[f,g,b]),Z=t.useCallback(e=>{E(e),f(g,x,e)},[f,g,x]);return t.useEffect(()=>{if(s){const e=i?w({date:s,timezoneOverride:i,reverse:!0}):new Date(s),M=e.getHours()%12||12;y(e),q(M.toString()),_(e.getMinutes().toString()),E(e.getHours()>11?m.PM:m.AM)}},[s]),r.jsxRuntimeExports.jsx(U.Popover,{open:h,onOpenChange:({open:e})=>{V(e),!e&&l&&l(R)},anchor:r.jsxRuntimeExports.jsx(T.Box,{className:"TimePicker__Trigger","data-testid":`${o}-trigger`,css:j.trigger,children:r.jsxRuntimeExports.jsxs(ce.HStack,{children:[r.jsxRuntimeExports.jsx(Q.WrappedTextInput,{placeholder:"12:00 AM",rightElement:r.jsxRuntimeExports.jsx(X.Icon,{size:ee.useIconTextSizeMap(n?.size||"md"),name:"clock"}),value:B,readOnly:!0,cursor:"pointer",...n,...h&&{"data-focus":"true"}}),k&&i&&r.jsxRuntimeExports.jsx(oe.WrappedText,{children:ne.tzName(i,new Date,"short")})]})}),contentProps:{w:"max-content"},placement:p,variant:n?.onContrast?"contrast":"default",showArrow:!1,children:r.jsxRuntimeExports.jsxs(T.Box,{className:"TimePicker__Container","data-testid":`${o}-container`,css:j.container,children:[r.jsxRuntimeExports.jsx($,{options:F,optionType:"hour",selectedValue:g,onClick:W,open:h,"data-testid":`${o}-hour-list`}),r.jsxRuntimeExports.jsx($,{options:I,optionType:"minute",selectedValue:x?P(x):void 0,onClick:Y,open:h,"data-testid":`${o}-minute-list`}),r.jsxRuntimeExports.jsx($,{options:L,optionType:"meridiem",selectedValue:b,onClick:Z,open:h,"data-testid":`${o}-meridiem-list`})]})})};exports.Meridiem=m;exports.TimePicker=ue;exports.convertToTimezoneOverride=w;
2
- //# sourceMappingURL=timePicker.component-Dm5Vh7bB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timePicker.component-Dm5Vh7bB.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","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 } from 'shared/utils/convertToTimezoneOverride';\nimport { Text } from 'components/Text';\nimport { HStack } from 'chakra';\nimport { tzName } from '@date-fns/tz';\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>{tzName(timezoneOverride, new Date(), 'short')}</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","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","tzName","jsxs"],"mappings":"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"}