@razorpay/blade 12.53.0 → 12.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/native/components/Box/BaseBox/types/propsTypes.js.map +1 -1
- package/build/lib/native/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/native/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/native/components/Input/BaseInput/BaseInput.js +1 -1
- package/build/lib/native/components/Input/BaseInput/BaseInput.js.map +1 -1
- package/build/lib/native/components/Input/DropdownInputTriggers/AutoComplete.js +1 -1
- package/build/lib/native/components/Input/DropdownInputTriggers/AutoComplete.js.map +1 -1
- package/build/lib/native/components/TimePicker/TimePicker.native.js +7 -0
- package/build/lib/native/components/TimePicker/TimePicker.native.js.map +1 -0
- package/build/lib/native/components/index.js +1 -0
- package/build/lib/native/components/index.js.map +1 -1
- package/build/lib/native/tokens/global/size.js +1 -1
- package/build/lib/native/tokens/global/size.js.map +1 -1
- package/build/lib/native/utils/metaAttribute/metaConstants.js +1 -1
- package/build/lib/native/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/lib/web/development/components/BottomSheet/BottomSheet.web.js +14 -1
- package/build/lib/web/development/components/BottomSheet/BottomSheet.web.js.map +1 -1
- package/build/lib/web/development/components/Box/BaseBox/types/propsTypes.js.map +1 -1
- package/build/lib/web/development/components/DatePicker/usePopup.js.map +1 -1
- package/build/lib/web/development/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/web/development/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/web/development/components/Input/BaseInput/BaseInput.js +4 -2
- package/build/lib/web/development/components/Input/BaseInput/BaseInput.js.map +1 -1
- package/build/lib/web/development/components/Input/BaseInput/StyledBaseInput.web.js +41 -2
- package/build/lib/web/development/components/Input/BaseInput/StyledBaseInput.web.js.map +1 -1
- package/build/lib/web/development/components/Input/DropdownInputTriggers/AutoComplete.js +1 -1
- package/build/lib/web/development/components/Input/DropdownInputTriggers/AutoComplete.js.map +1 -1
- package/build/lib/web/development/components/TimePicker/BaseTimePicker.web.js +262 -0
- package/build/lib/web/development/components/TimePicker/BaseTimePicker.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/SpinWheel.web.js +188 -0
- package/build/lib/web/development/components/TimePicker/SpinWheel.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/TimeInput.web.js +256 -0
- package/build/lib/web/development/components/TimePicker/TimeInput.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/TimePicker.web.js +13 -0
- package/build/lib/web/development/components/TimePicker/TimePicker.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/TimePickerContent.web.js +200 -0
- package/build/lib/web/development/components/TimePicker/TimePickerContent.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/TimePickerFooter.web.js +49 -0
- package/build/lib/web/development/components/TimePicker/TimePickerFooter.web.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/index.js +2 -0
- package/build/lib/web/development/components/TimePicker/index.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/useTimePickerState.js +146 -0
- package/build/lib/web/development/components/TimePicker/useTimePickerState.js.map +1 -0
- package/build/lib/web/development/components/TimePicker/utils.js +252 -0
- package/build/lib/web/development/components/TimePicker/utils.js.map +1 -0
- package/build/lib/web/development/components/index.js +2 -0
- package/build/lib/web/development/components/index.js.map +1 -1
- package/build/lib/web/development/tokens/global/size.js +16 -0
- package/build/lib/web/development/tokens/global/size.js.map +1 -1
- package/build/lib/web/development/utils/metaAttribute/metaConstants.js +2 -1
- package/build/lib/web/development/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/lib/web/production/components/BottomSheet/BottomSheet.web.js +14 -1
- package/build/lib/web/production/components/BottomSheet/BottomSheet.web.js.map +1 -1
- package/build/lib/web/production/components/Box/BaseBox/types/propsTypes.js.map +1 -1
- package/build/lib/web/production/components/DatePicker/usePopup.js.map +1 -1
- package/build/lib/web/production/components/Dropdown/dropdownUtils.js +1 -1
- package/build/lib/web/production/components/Dropdown/dropdownUtils.js.map +1 -1
- package/build/lib/web/production/components/Input/BaseInput/BaseInput.js +4 -2
- package/build/lib/web/production/components/Input/BaseInput/BaseInput.js.map +1 -1
- package/build/lib/web/production/components/Input/BaseInput/StyledBaseInput.web.js +41 -2
- package/build/lib/web/production/components/Input/BaseInput/StyledBaseInput.web.js.map +1 -1
- package/build/lib/web/production/components/Input/DropdownInputTriggers/AutoComplete.js +1 -1
- package/build/lib/web/production/components/Input/DropdownInputTriggers/AutoComplete.js.map +1 -1
- package/build/lib/web/production/components/TimePicker/BaseTimePicker.web.js +262 -0
- package/build/lib/web/production/components/TimePicker/BaseTimePicker.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/SpinWheel.web.js +188 -0
- package/build/lib/web/production/components/TimePicker/SpinWheel.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/TimeInput.web.js +256 -0
- package/build/lib/web/production/components/TimePicker/TimeInput.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/TimePicker.web.js +13 -0
- package/build/lib/web/production/components/TimePicker/TimePicker.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/TimePickerContent.web.js +200 -0
- package/build/lib/web/production/components/TimePicker/TimePickerContent.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/TimePickerFooter.web.js +49 -0
- package/build/lib/web/production/components/TimePicker/TimePickerFooter.web.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/index.js +2 -0
- package/build/lib/web/production/components/TimePicker/index.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/useTimePickerState.js +146 -0
- package/build/lib/web/production/components/TimePicker/useTimePickerState.js.map +1 -0
- package/build/lib/web/production/components/TimePicker/utils.js +252 -0
- package/build/lib/web/production/components/TimePicker/utils.js.map +1 -0
- package/build/lib/web/production/components/index.js +2 -0
- package/build/lib/web/production/components/index.js.map +1 -1
- package/build/lib/web/production/tokens/global/size.js +16 -0
- package/build/lib/web/production/tokens/global/size.js.map +1 -1
- package/build/lib/web/production/utils/metaAttribute/metaConstants.js +2 -1
- package/build/lib/web/production/utils/metaAttribute/metaConstants.js.map +1 -1
- package/build/types/components/index.d.ts +426 -242
- package/build/types/components/index.native.d.ts +148 -144
- package/build/types/tokens/index.d.ts +16 -0
- package/build/types/tokens/index.native.d.ts +16 -0
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n optionValue.toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n String(optionValue).toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","String","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
+
import React__default, { useRef } from 'react';
|
|
4
|
+
import { FloatingPortal, FloatingFocusManager } from '@floating-ui/react';
|
|
5
|
+
import { TimeInput } from './TimeInput.web.js';
|
|
6
|
+
import { useTimePickerState } from './useTimePickerState.js';
|
|
7
|
+
import { TimePickerContent } from './TimePickerContent.web.js';
|
|
8
|
+
import '../BottomSheet/index.js';
|
|
9
|
+
import '../Box/BaseBox/index.js';
|
|
10
|
+
import '../../utils/assignWithoutSideEffects/index.js';
|
|
11
|
+
import '../../utils/makeAccessible/index.js';
|
|
12
|
+
import { useId } from '../../utils/useId.js';
|
|
13
|
+
import { useIsMobile } from '../../utils/useIsMobile.js';
|
|
14
|
+
import '../../utils/index.js';
|
|
15
|
+
import { usePopup } from '../DatePicker/usePopup.js';
|
|
16
|
+
import '../Box/styledProps/index.js';
|
|
17
|
+
import '../../utils/metaAttribute/index.js';
|
|
18
|
+
import '../../tokens/global/index.js';
|
|
19
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
20
|
+
import useTheme from '../BladeProvider/useTheme.js';
|
|
21
|
+
import { size } from '../../tokens/global/size.js';
|
|
22
|
+
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
23
|
+
import { getStyledProps } from '../Box/styledProps/getStyledProps.js';
|
|
24
|
+
import { metaAttribute } from '../../utils/metaAttribute/metaAttribute.web.js';
|
|
25
|
+
import { MetaConstants } from '../../utils/metaAttribute/metaConstants.js';
|
|
26
|
+
import { makeAccessible } from '../../utils/makeAccessible/makeAccessible.web.js';
|
|
27
|
+
import { BottomSheet } from '../BottomSheet/BottomSheet.web.js';
|
|
28
|
+
import { BottomSheetHeader } from '../BottomSheet/BottomSheetHeader.web.js';
|
|
29
|
+
import { BottomSheetBody } from '../BottomSheet/BottomSheetBody.web.js';
|
|
30
|
+
import { assignWithoutSideEffects } from '../../utils/assignWithoutSideEffects/assignWithoutSideEffects.js';
|
|
31
|
+
|
|
32
|
+
var _excluded = ["value", "defaultValue", "onChange", "onApply", "isOpen", "defaultIsOpen", "onOpenChange", "label", "labelPosition", "accessibilityLabel", "errorText", "helpText", "isDisabled", "isRequired", "successText", "validationState", "size", "autoFocus", "necessityIndicator", "name", "placeholder", "showFooterActions", "timeFormat", "minuteStep", "labelSuffix", "labelTrailing", "testID"];
|
|
33
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
34
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
35
|
+
var _BaseTimePicker = function _BaseTimePicker(_ref) {
|
|
36
|
+
var value = _ref.value,
|
|
37
|
+
defaultValue = _ref.defaultValue,
|
|
38
|
+
onChange = _ref.onChange,
|
|
39
|
+
onApply = _ref.onApply,
|
|
40
|
+
isOpen = _ref.isOpen,
|
|
41
|
+
defaultIsOpen = _ref.defaultIsOpen,
|
|
42
|
+
onOpenChange = _ref.onOpenChange,
|
|
43
|
+
label = _ref.label,
|
|
44
|
+
_ref$labelPosition = _ref.labelPosition,
|
|
45
|
+
labelPosition = _ref$labelPosition === void 0 ? 'top' : _ref$labelPosition,
|
|
46
|
+
accessibilityLabel = _ref.accessibilityLabel,
|
|
47
|
+
errorText = _ref.errorText,
|
|
48
|
+
helpText = _ref.helpText,
|
|
49
|
+
isDisabled = _ref.isDisabled,
|
|
50
|
+
isRequired = _ref.isRequired,
|
|
51
|
+
successText = _ref.successText,
|
|
52
|
+
validationState = _ref.validationState,
|
|
53
|
+
_ref$size = _ref.size,
|
|
54
|
+
size$1 = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
55
|
+
autoFocus = _ref.autoFocus,
|
|
56
|
+
necessityIndicator = _ref.necessityIndicator,
|
|
57
|
+
name = _ref.name,
|
|
58
|
+
placeholder = _ref.placeholder,
|
|
59
|
+
_ref$showFooterAction = _ref.showFooterActions,
|
|
60
|
+
showFooterActions = _ref$showFooterAction === void 0 ? true : _ref$showFooterAction,
|
|
61
|
+
_ref$timeFormat = _ref.timeFormat,
|
|
62
|
+
timeFormat = _ref$timeFormat === void 0 ? '12h' : _ref$timeFormat,
|
|
63
|
+
_ref$minuteStep = _ref.minuteStep,
|
|
64
|
+
minuteStep = _ref$minuteStep === void 0 ? 1 : _ref$minuteStep,
|
|
65
|
+
labelSuffix = _ref.labelSuffix,
|
|
66
|
+
labelTrailing = _ref.labelTrailing,
|
|
67
|
+
testID = _ref.testID,
|
|
68
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
69
|
+
var referenceRef = useRef(null);
|
|
70
|
+
var isMobile = useIsMobile();
|
|
71
|
+
var _useTheme = useTheme(),
|
|
72
|
+
theme = _useTheme.theme;
|
|
73
|
+
var titleId = useId('timepicker-title');
|
|
74
|
+
var _useTimePickerState = useTimePickerState({
|
|
75
|
+
value: value,
|
|
76
|
+
defaultValue: defaultValue,
|
|
77
|
+
onChange: onChange,
|
|
78
|
+
isOpen: isOpen,
|
|
79
|
+
defaultIsOpen: defaultIsOpen,
|
|
80
|
+
onOpenChange: onOpenChange,
|
|
81
|
+
timeFormat: timeFormat,
|
|
82
|
+
showFooterActions: showFooterActions,
|
|
83
|
+
onApply: onApply
|
|
84
|
+
}),
|
|
85
|
+
timeValue = _useTimePickerState.timeValue,
|
|
86
|
+
setTimeValue = _useTimePickerState.setTimeValue,
|
|
87
|
+
internalTimeValue = _useTimePickerState.internalTimeValue,
|
|
88
|
+
setInternalTimeValue = _useTimePickerState.setInternalTimeValue,
|
|
89
|
+
selectedHour = _useTimePickerState.selectedHour,
|
|
90
|
+
selectedMinute = _useTimePickerState.selectedMinute,
|
|
91
|
+
selectedPeriod = _useTimePickerState.selectedPeriod,
|
|
92
|
+
isDropdownOpen = _useTimePickerState.isOpen,
|
|
93
|
+
setIsDropdownOpen = _useTimePickerState.setIsOpen,
|
|
94
|
+
handleApply = _useTimePickerState.onApply,
|
|
95
|
+
handleCancel = _useTimePickerState.onCancel,
|
|
96
|
+
createCompleteTime = _useTimePickerState.createCompleteTime;
|
|
97
|
+
var _usePopup = usePopup({
|
|
98
|
+
enabled: !isMobile,
|
|
99
|
+
placement: 'bottom-start',
|
|
100
|
+
open: isDropdownOpen,
|
|
101
|
+
onOpenChange: function onOpenChange(isOpen, _, reason) {
|
|
102
|
+
if (isDisabled) return;
|
|
103
|
+
setIsDropdownOpen(isOpen);
|
|
104
|
+
if (reason === 'escape-key') {
|
|
105
|
+
handleCancel();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
referenceRef: referenceRef,
|
|
109
|
+
// crossAxisOffset calculation for left label positioning:
|
|
110
|
+
// Medium: 120px (label width) + 12px (padding) = 132px
|
|
111
|
+
// Large: 176px (label width) + 16px (padding) = 192px
|
|
112
|
+
crossAxisOffset: labelPosition === 'left' ? size$1 === 'large' ? size[192] : size[132] : 0
|
|
113
|
+
}),
|
|
114
|
+
refs = _usePopup.refs,
|
|
115
|
+
context = _usePopup.context,
|
|
116
|
+
isMounted = _usePopup.isMounted,
|
|
117
|
+
floatingStyles = _usePopup.floatingStyles,
|
|
118
|
+
animationStyles = _usePopup.animationStyles,
|
|
119
|
+
getReferenceProps = _usePopup.getReferenceProps,
|
|
120
|
+
getFloatingProps = _usePopup.getFloatingProps;
|
|
121
|
+
|
|
122
|
+
// Fix for React Aria contentEditable focus issue with Floating UI
|
|
123
|
+
// React Aria's contentEditable segments don't properly trigger Floating UI's dismiss
|
|
124
|
+
// See: https://github.com/adobe/react-spectrum/issues/3164
|
|
125
|
+
React__default.useEffect(function () {
|
|
126
|
+
var handleClick = function handleClick(e) {
|
|
127
|
+
var _referenceRef$current, _refs$floating$curren, _closest, _ref2;
|
|
128
|
+
var target = e.target;
|
|
129
|
+
var isClickOnInput = (_referenceRef$current = referenceRef.current) === null || _referenceRef$current === void 0 ? void 0 : _referenceRef$current.contains(target);
|
|
130
|
+
var isClickOnDropdown = (_refs$floating$curren = refs.floating.current) === null || _refs$floating$curren === void 0 ? void 0 : _refs$floating$curren.contains(target);
|
|
131
|
+
|
|
132
|
+
// On mobile, also check if click is inside TimePicker content (BottomSheet)
|
|
133
|
+
var isClickOnTimePickerContent = (_closest = (_ref2 = target).closest) === null || _closest === void 0 ? void 0 : _closest.call(_ref2, '.timepicker-content');
|
|
134
|
+
|
|
135
|
+
// Only close dropdown if click is outside input, dropdown, and TimePicker content
|
|
136
|
+
// This ensures clicking different segments within the input keeps dropdown open
|
|
137
|
+
if (isDropdownOpen && !isClickOnInput && !isClickOnDropdown) {
|
|
138
|
+
if (isClickOnTimePickerContent && showFooterActions) {
|
|
139
|
+
// Inside TimePicker with footer actions - don't close
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
handleApply();
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
if (isDropdownOpen) {
|
|
146
|
+
document.addEventListener('click', handleClick);
|
|
147
|
+
return function () {
|
|
148
|
+
return document.removeEventListener('click', handleClick);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
}, [isDropdownOpen, showFooterActions, handleCancel, handleApply]);
|
|
153
|
+
|
|
154
|
+
// Mobile: Blur input when bottom sheet opens
|
|
155
|
+
React__default.useEffect(function () {
|
|
156
|
+
if (isMobile && isDropdownOpen) {
|
|
157
|
+
// Find the currently focused time segment and blur it
|
|
158
|
+
|
|
159
|
+
var activeElement = document.activeElement;
|
|
160
|
+
if (activeElement && 'blur' in activeElement && typeof activeElement.blur === 'function') {
|
|
161
|
+
setTimeout(function () {
|
|
162
|
+
activeElement.blur();
|
|
163
|
+
}, 0);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}, [isMobile, isDropdownOpen]);
|
|
167
|
+
var content = /*#__PURE__*/jsx(TimePickerContent, {
|
|
168
|
+
selectedTime: timeValue,
|
|
169
|
+
setSelectedTime: setTimeValue,
|
|
170
|
+
selectedHour: selectedHour,
|
|
171
|
+
selectedMinute: selectedMinute,
|
|
172
|
+
selectedPeriod: selectedPeriod,
|
|
173
|
+
timeFormat: timeFormat,
|
|
174
|
+
minuteStep: minuteStep,
|
|
175
|
+
showFooterActions: showFooterActions,
|
|
176
|
+
onApply: handleApply,
|
|
177
|
+
onCancel: handleCancel
|
|
178
|
+
});
|
|
179
|
+
return /*#__PURE__*/jsxs(BaseBox, _objectSpread(_objectSpread(_objectSpread({
|
|
180
|
+
width: "100%"
|
|
181
|
+
}, getStyledProps(props)), metaAttribute({
|
|
182
|
+
name: MetaConstants.TimePicker
|
|
183
|
+
})), {}, {
|
|
184
|
+
children: [/*#__PURE__*/jsx(TimeInput, _objectSpread({
|
|
185
|
+
ref: referenceRef,
|
|
186
|
+
inputRef: refs.setReference,
|
|
187
|
+
referenceProps: getReferenceProps(),
|
|
188
|
+
timeValue: timeValue,
|
|
189
|
+
internalTimeValue: internalTimeValue,
|
|
190
|
+
onChange: setTimeValue,
|
|
191
|
+
onTimeValueChange: function onTimeValueChange(timeValue) {
|
|
192
|
+
if (timeValue) {
|
|
193
|
+
setInternalTimeValue(timeValue);
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
createCompleteTime: createCompleteTime,
|
|
197
|
+
label: label,
|
|
198
|
+
helpText: helpText,
|
|
199
|
+
errorText: errorText,
|
|
200
|
+
successText: successText,
|
|
201
|
+
validationState: validationState,
|
|
202
|
+
isDisabled: isDisabled,
|
|
203
|
+
isRequired: isRequired,
|
|
204
|
+
necessityIndicator: necessityIndicator,
|
|
205
|
+
autoFocus: autoFocus // eslint-disable-line jsx-a11y/no-autofocus
|
|
206
|
+
,
|
|
207
|
+
name: name,
|
|
208
|
+
placeholder: placeholder,
|
|
209
|
+
size: size$1,
|
|
210
|
+
labelPosition: labelPosition,
|
|
211
|
+
labelSuffix: labelSuffix,
|
|
212
|
+
labelTrailing: labelTrailing,
|
|
213
|
+
timeFormat: timeFormat,
|
|
214
|
+
isDropdownOpen: isDropdownOpen,
|
|
215
|
+
setIsDropdownOpen: setIsDropdownOpen,
|
|
216
|
+
testID: testID,
|
|
217
|
+
accessibilityLabel: accessibilityLabel
|
|
218
|
+
}, props)), !isMobile && isMounted && /*#__PURE__*/jsx(FloatingPortal, {
|
|
219
|
+
children: /*#__PURE__*/jsx(FloatingFocusManager, {
|
|
220
|
+
initialFocus: -1,
|
|
221
|
+
context: context,
|
|
222
|
+
guards: false,
|
|
223
|
+
order: ['reference', 'content'],
|
|
224
|
+
children: /*#__PURE__*/jsx(BaseBox, _objectSpread(_objectSpread(_objectSpread({
|
|
225
|
+
ref: refs.setFloating,
|
|
226
|
+
style: floatingStyles
|
|
227
|
+
}, getFloatingProps()), makeAccessible({
|
|
228
|
+
labelledBy: titleId
|
|
229
|
+
})), {}, {
|
|
230
|
+
children: /*#__PURE__*/jsx(BaseBox, {
|
|
231
|
+
backgroundColor: "popup.background.subtle",
|
|
232
|
+
borderColor: "popup.border.subtle",
|
|
233
|
+
borderWidth: "thin",
|
|
234
|
+
borderStyle: "solid",
|
|
235
|
+
borderRadius: "large",
|
|
236
|
+
overflow: "hidden",
|
|
237
|
+
style: _objectSpread(_objectSpread({}, animationStyles), {}, {
|
|
238
|
+
boxShadow: "".concat(theme.elevation.midRaised)
|
|
239
|
+
}),
|
|
240
|
+
children: content
|
|
241
|
+
})
|
|
242
|
+
}))
|
|
243
|
+
})
|
|
244
|
+
}), isMobile && !isDisabled && /*#__PURE__*/jsxs(BottomSheet, {
|
|
245
|
+
snapPoints: [0.6, 0.6, 1],
|
|
246
|
+
isOpen: isDropdownOpen,
|
|
247
|
+
onDismiss: handleCancel,
|
|
248
|
+
children: [/*#__PURE__*/jsx(BottomSheetHeader, {
|
|
249
|
+
title: "Select Time"
|
|
250
|
+
}), /*#__PURE__*/jsx(BottomSheetBody, {
|
|
251
|
+
children: content
|
|
252
|
+
})]
|
|
253
|
+
})]
|
|
254
|
+
}));
|
|
255
|
+
};
|
|
256
|
+
var BaseTimePicker = /*#__PURE__*/assignWithoutSideEffects(_BaseTimePicker, {
|
|
257
|
+
displayName: 'BaseTimePicker',
|
|
258
|
+
componentId: 'BaseTimePicker'
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
export { BaseTimePicker };
|
|
262
|
+
//# sourceMappingURL=BaseTimePicker.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTimePicker.web.js","sources":["../../../../../../src/components/TimePicker/BaseTimePicker.web.tsx"],"sourcesContent":["import React, { useRef } from 'react';\nimport { FloatingFocusManager, FloatingPortal } from '@floating-ui/react';\nimport type { TimePickerProps } from './types';\nimport { TimeInput } from './TimeInput.web';\nimport { useTimePickerState } from './useTimePickerState';\nimport { TimePickerContent } from './TimePickerContent';\nimport type { DataAnalyticsAttribute } from '~utils/types';\nimport type { StyledPropsBlade } from '~components/Box/styledProps';\nimport { BottomSheet, BottomSheetBody, BottomSheetHeader } from '~components/BottomSheet';\nimport BaseBox from '~components/Box/BaseBox';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { useId } from '~utils/useId';\nimport { useIsMobile } from '~utils/useIsMobile';\nimport { useTheme } from '~utils';\nimport { usePopup } from '~components/DatePicker/usePopup';\nimport { getStyledProps } from '~components/Box/styledProps';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { size as sizeTokens } from '~tokens/global';\n\nconst _BaseTimePicker = ({\n value,\n defaultValue,\n onChange,\n onApply,\n isOpen,\n defaultIsOpen,\n onOpenChange,\n label,\n labelPosition = 'top',\n accessibilityLabel,\n errorText,\n helpText,\n isDisabled,\n isRequired,\n successText,\n validationState,\n size = 'medium',\n autoFocus,\n necessityIndicator,\n name,\n placeholder,\n showFooterActions = true,\n timeFormat = '12h',\n minuteStep = 1,\n labelSuffix,\n labelTrailing,\n testID,\n ...props\n}: TimePickerProps & StyledPropsBlade & DataAnalyticsAttribute): React.ReactElement => {\n const referenceRef = useRef<HTMLElement>(null);\n const isMobile = useIsMobile();\n const { theme } = useTheme();\n const titleId = useId('timepicker-title');\n\n const {\n timeValue,\n setTimeValue,\n internalTimeValue,\n setInternalTimeValue,\n selectedHour,\n selectedMinute,\n selectedPeriod,\n isOpen: isDropdownOpen,\n setIsOpen: setIsDropdownOpen,\n onApply: handleApply,\n onCancel: handleCancel,\n createCompleteTime,\n } = useTimePickerState({\n value,\n defaultValue,\n onChange,\n isOpen,\n defaultIsOpen,\n onOpenChange,\n timeFormat,\n showFooterActions,\n onApply,\n });\n\n const {\n refs,\n context,\n isMounted,\n floatingStyles,\n animationStyles,\n getReferenceProps,\n getFloatingProps,\n } = usePopup({\n enabled: !isMobile,\n placement: 'bottom-start',\n open: isDropdownOpen,\n onOpenChange: (isOpen, _, reason) => {\n if (isDisabled) return;\n setIsDropdownOpen(isOpen);\n if (reason === 'escape-key') {\n handleCancel();\n }\n },\n referenceRef,\n // crossAxisOffset calculation for left label positioning:\n // Medium: 120px (label width) + 12px (padding) = 132px\n // Large: 176px (label width) + 16px (padding) = 192px\n crossAxisOffset:\n labelPosition === 'left' ? (size === 'large' ? sizeTokens[192] : sizeTokens[132]) : 0,\n });\n\n // Fix for React Aria contentEditable focus issue with Floating UI\n // React Aria's contentEditable segments don't properly trigger Floating UI's dismiss\n // See: https://github.com/adobe/react-spectrum/issues/3164\n React.useEffect(() => {\n const handleClick = (e: MouseEvent): void => {\n const target = e.target as Node;\n const isClickOnInput = referenceRef.current?.contains(target);\n const isClickOnDropdown = refs.floating.current?.contains(target);\n\n // On mobile, also check if click is inside TimePicker content (BottomSheet)\n const isClickOnTimePickerContent = (target as Element).closest?.('.timepicker-content');\n\n // Only close dropdown if click is outside input, dropdown, and TimePicker content\n // This ensures clicking different segments within the input keeps dropdown open\n if (isDropdownOpen && !isClickOnInput && !isClickOnDropdown) {\n if (isClickOnTimePickerContent && showFooterActions) {\n // Inside TimePicker with footer actions - don't close\n return;\n }\n handleApply();\n }\n };\n\n if (isDropdownOpen) {\n document.addEventListener('click', handleClick);\n return () => document.removeEventListener('click', handleClick);\n }\n return undefined;\n }, [isDropdownOpen, showFooterActions, handleCancel, handleApply]);\n\n // Mobile: Blur input when bottom sheet opens\n React.useEffect(() => {\n if (isMobile && isDropdownOpen) {\n // Find the currently focused time segment and blur it\n\n const activeElement = document.activeElement as HTMLElement | null;\n if (activeElement && 'blur' in activeElement && typeof activeElement.blur === 'function') {\n setTimeout(() => {\n activeElement.blur();\n }, 0);\n }\n }\n }, [isMobile, isDropdownOpen]);\n\n const content = (\n <TimePickerContent\n selectedTime={timeValue}\n setSelectedTime={setTimeValue}\n selectedHour={selectedHour}\n selectedMinute={selectedMinute}\n selectedPeriod={selectedPeriod}\n timeFormat={timeFormat}\n minuteStep={minuteStep}\n showFooterActions={showFooterActions}\n onApply={handleApply}\n onCancel={handleCancel}\n />\n );\n\n return (\n <BaseBox\n width=\"100%\"\n {...getStyledProps(props)}\n {...metaAttribute({ name: MetaConstants.TimePicker })}\n >\n <TimeInput\n ref={referenceRef}\n inputRef={refs.setReference}\n referenceProps={getReferenceProps()}\n timeValue={timeValue}\n internalTimeValue={internalTimeValue}\n onChange={setTimeValue}\n onTimeValueChange={(timeValue) => {\n if (timeValue) {\n setInternalTimeValue(timeValue);\n }\n }}\n createCompleteTime={createCompleteTime}\n label={label}\n helpText={helpText}\n errorText={errorText}\n successText={successText}\n validationState={validationState}\n isDisabled={isDisabled}\n isRequired={isRequired}\n necessityIndicator={necessityIndicator}\n autoFocus={autoFocus} // eslint-disable-line jsx-a11y/no-autofocus\n name={name}\n placeholder={placeholder}\n size={size}\n labelPosition={labelPosition}\n labelSuffix={labelSuffix}\n labelTrailing={labelTrailing}\n timeFormat={timeFormat}\n isDropdownOpen={isDropdownOpen}\n setIsDropdownOpen={setIsDropdownOpen}\n testID={testID}\n accessibilityLabel={accessibilityLabel}\n {...props}\n />\n\n {!isMobile && isMounted && (\n <FloatingPortal>\n <FloatingFocusManager\n initialFocus={-1}\n context={context}\n guards={false}\n order={['reference', 'content']}\n >\n <BaseBox\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n {...makeAccessible({ labelledBy: titleId })}\n >\n <BaseBox\n backgroundColor=\"popup.background.subtle\"\n borderColor=\"popup.border.subtle\"\n borderWidth=\"thin\"\n borderStyle=\"solid\"\n borderRadius=\"large\"\n overflow=\"hidden\"\n style={{\n ...animationStyles,\n boxShadow: `${theme.elevation.midRaised}`,\n }}\n >\n {content}\n </BaseBox>\n </BaseBox>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n\n {/* Mobile Bottom Sheet */}\n {isMobile && !isDisabled && (\n <BottomSheet snapPoints={[0.6, 0.6, 1]} isOpen={isDropdownOpen} onDismiss={handleCancel}>\n <BottomSheetHeader title=\"Select Time\" />\n <BottomSheetBody>{content}</BottomSheetBody>\n </BottomSheet>\n )}\n </BaseBox>\n );\n};\n\nconst BaseTimePicker = assignWithoutSideEffects(_BaseTimePicker, {\n displayName: 'BaseTimePicker',\n componentId: 'BaseTimePicker',\n});\n\nexport { BaseTimePicker };\n"],"names":["_BaseTimePicker","_ref","value","defaultValue","onChange","onApply","isOpen","defaultIsOpen","onOpenChange","label","_ref$labelPosition","labelPosition","accessibilityLabel","errorText","helpText","isDisabled","isRequired","successText","validationState","_ref$size","size","autoFocus","necessityIndicator","name","placeholder","_ref$showFooterAction","showFooterActions","_ref$timeFormat","timeFormat","_ref$minuteStep","minuteStep","labelSuffix","labelTrailing","testID","props","_objectWithoutProperties","_excluded","referenceRef","useRef","isMobile","useIsMobile","_useTheme","useTheme","theme","titleId","useId","_useTimePickerState","useTimePickerState","timeValue","setTimeValue","internalTimeValue","setInternalTimeValue","selectedHour","selectedMinute","selectedPeriod","isDropdownOpen","setIsDropdownOpen","setIsOpen","handleApply","handleCancel","onCancel","createCompleteTime","_usePopup","usePopup","enabled","placement","open","_","reason","crossAxisOffset","sizeTokens","refs","context","isMounted","floatingStyles","animationStyles","getReferenceProps","getFloatingProps","React","useEffect","handleClick","e","_referenceRef$current","_refs$floating$curren","_closest","_ref2","target","isClickOnInput","current","contains","isClickOnDropdown","floating","isClickOnTimePickerContent","closest","call","document","addEventListener","removeEventListener","undefined","activeElement","blur","setTimeout","content","_jsx","TimePickerContent","selectedTime","setSelectedTime","_jsxs","BaseBox","_objectSpread","width","getStyledProps","metaAttribute","MetaConstants","TimePicker","children","TimeInput","ref","inputRef","setReference","referenceProps","onTimeValueChange","FloatingPortal","FloatingFocusManager","initialFocus","guards","order","setFloating","style","makeAccessible","labelledBy","backgroundColor","borderColor","borderWidth","borderStyle","borderRadius","overflow","boxShadow","concat","elevation","midRaised","BottomSheet","snapPoints","onDismiss","BottomSheetHeader","title","BottomSheetBody","BaseTimePicker","assignWithoutSideEffects","displayName","componentId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAMA,eAAe,GAAG,SAAlBA,eAAeA,CAAAC,IAAA,EA6BkE;AAAA,EAAA,IA5BrFC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,YAAY,GAAAF,IAAA,CAAZE,YAAY;IACZC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IACPC,MAAM,GAAAL,IAAA,CAANK,MAAM;IACNC,aAAa,GAAAN,IAAA,CAAbM,aAAa;IACbC,YAAY,GAAAP,IAAA,CAAZO,YAAY;IACZC,KAAK,GAAAR,IAAA,CAALQ,KAAK;IAAAC,kBAAA,GAAAT,IAAA,CACLU,aAAa;AAAbA,IAAAA,aAAa,GAAAD,kBAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,kBAAA;IACrBE,kBAAkB,GAAAX,IAAA,CAAlBW,kBAAkB;IAClBC,SAAS,GAAAZ,IAAA,CAATY,SAAS;IACTC,QAAQ,GAAAb,IAAA,CAARa,QAAQ;IACRC,UAAU,GAAAd,IAAA,CAAVc,UAAU;IACVC,UAAU,GAAAf,IAAA,CAAVe,UAAU;IACVC,WAAW,GAAAhB,IAAA,CAAXgB,WAAW;IACXC,eAAe,GAAAjB,IAAA,CAAfiB,eAAe;IAAAC,SAAA,GAAAlB,IAAA,CACfmB,IAAI;AAAJA,IAAAA,MAAI,GAAAD,SAAA,KAAG,KAAA,CAAA,GAAA,QAAQ,GAAAA,SAAA;IACfE,SAAS,GAAApB,IAAA,CAAToB,SAAS;IACTC,kBAAkB,GAAArB,IAAA,CAAlBqB,kBAAkB;IAClBC,IAAI,GAAAtB,IAAA,CAAJsB,IAAI;IACJC,WAAW,GAAAvB,IAAA,CAAXuB,WAAW;IAAAC,qBAAA,GAAAxB,IAAA,CACXyB,iBAAiB;AAAjBA,IAAAA,iBAAiB,GAAAD,qBAAA,KAAG,KAAA,CAAA,GAAA,IAAI,GAAAA,qBAAA;IAAAE,eAAA,GAAA1B,IAAA,CACxB2B,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,eAAA;IAAAE,eAAA,GAAA5B,IAAA,CAClB6B,UAAU;AAAVA,IAAAA,UAAU,GAAAD,eAAA,KAAG,KAAA,CAAA,GAAA,CAAC,GAAAA,eAAA;IACdE,WAAW,GAAA9B,IAAA,CAAX8B,WAAW;IACXC,aAAa,GAAA/B,IAAA,CAAb+B,aAAa;IACbC,MAAM,GAAAhC,IAAA,CAANgC,MAAM;AACHC,IAAAA,KAAK,GAAAC,wBAAA,CAAAlC,IAAA,EAAAmC,SAAA,CAAA,CAAA;AAER,EAAA,IAAMC,YAAY,GAAGC,MAAM,CAAc,IAAI,CAAC,CAAA;AAC9C,EAAA,IAAMC,QAAQ,GAAGC,WAAW,EAAE,CAAA;AAC9B,EAAA,IAAAC,SAAA,GAAkBC,QAAQ,EAAE;IAApBC,KAAK,GAAAF,SAAA,CAALE,KAAK,CAAA;AACb,EAAA,IAAMC,OAAO,GAAGC,KAAK,CAAC,kBAAkB,CAAC,CAAA;EAEzC,IAAAC,mBAAA,GAaIC,kBAAkB,CAAC;AACrB7C,MAAAA,KAAK,EAALA,KAAK;AACLC,MAAAA,YAAY,EAAZA,YAAY;AACZC,MAAAA,QAAQ,EAARA,QAAQ;AACRE,MAAAA,MAAM,EAANA,MAAM;AACNC,MAAAA,aAAa,EAAbA,aAAa;AACbC,MAAAA,YAAY,EAAZA,YAAY;AACZoB,MAAAA,UAAU,EAAVA,UAAU;AACVF,MAAAA,iBAAiB,EAAjBA,iBAAiB;AACjBrB,MAAAA,OAAO,EAAPA,OAAAA;AACF,KAAC,CAAC;IAtBA2C,SAAS,GAAAF,mBAAA,CAATE,SAAS;IACTC,YAAY,GAAAH,mBAAA,CAAZG,YAAY;IACZC,iBAAiB,GAAAJ,mBAAA,CAAjBI,iBAAiB;IACjBC,oBAAoB,GAAAL,mBAAA,CAApBK,oBAAoB;IACpBC,YAAY,GAAAN,mBAAA,CAAZM,YAAY;IACZC,cAAc,GAAAP,mBAAA,CAAdO,cAAc;IACdC,cAAc,GAAAR,mBAAA,CAAdQ,cAAc;IACNC,cAAc,GAAAT,mBAAA,CAAtBxC,MAAM;IACKkD,iBAAiB,GAAAV,mBAAA,CAA5BW,SAAS;IACAC,WAAW,GAAAZ,mBAAA,CAApBzC,OAAO;IACGsD,YAAY,GAAAb,mBAAA,CAAtBc,QAAQ;IACRC,kBAAkB,GAAAf,mBAAA,CAAlBe,kBAAkB,CAAA;EAapB,IAAAC,SAAA,GAQIC,QAAQ,CAAC;MACXC,OAAO,EAAE,CAACzB,QAAQ;AAClB0B,MAAAA,SAAS,EAAE,cAAc;AACzBC,MAAAA,IAAI,EAAEX,cAAc;MACpB/C,YAAY,EAAE,SAAdA,YAAYA,CAAGF,MAAM,EAAE6D,CAAC,EAAEC,MAAM,EAAK;AACnC,QAAA,IAAIrD,UAAU,EAAE,OAAA;QAChByC,iBAAiB,CAAClD,MAAM,CAAC,CAAA;QACzB,IAAI8D,MAAM,KAAK,YAAY,EAAE;AAC3BT,UAAAA,YAAY,EAAE,CAAA;AAChB,SAAA;OACD;AACDtB,MAAAA,YAAY,EAAZA,YAAY;AACZ;AACA;AACA;AACAgC,MAAAA,eAAe,EACb1D,aAAa,KAAK,MAAM,GAAIS,MAAI,KAAK,OAAO,GAAGkD,IAAU,CAAC,GAAG,CAAC,GAAGA,IAAU,CAAC,GAAG,CAAC,GAAI,CAAA;AACxF,KAAC,CAAC;IAxBAC,IAAI,GAAAT,SAAA,CAAJS,IAAI;IACJC,OAAO,GAAAV,SAAA,CAAPU,OAAO;IACPC,SAAS,GAAAX,SAAA,CAATW,SAAS;IACTC,cAAc,GAAAZ,SAAA,CAAdY,cAAc;IACdC,eAAe,GAAAb,SAAA,CAAfa,eAAe;IACfC,iBAAiB,GAAAd,SAAA,CAAjBc,iBAAiB;IACjBC,gBAAgB,GAAAf,SAAA,CAAhBe,gBAAgB,CAAA;;AAoBlB;AACA;AACA;EACAC,cAAK,CAACC,SAAS,CAAC,YAAM;AACpB,IAAA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,CAAa,EAAW;AAAA,MAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,QAAA,EAAAC,KAAA,CAAA;AAC3C,MAAA,IAAMC,MAAM,GAAGL,CAAC,CAACK,MAAc,CAAA;AAC/B,MAAA,IAAMC,cAAc,GAAA,CAAAL,qBAAA,GAAG7C,YAAY,CAACmD,OAAO,MAAAN,IAAAA,IAAAA,qBAAA,uBAApBA,qBAAA,CAAsBO,QAAQ,CAACH,MAAM,CAAC,CAAA;AAC7D,MAAA,IAAMI,iBAAiB,GAAAP,CAAAA,qBAAA,GAAGZ,IAAI,CAACoB,QAAQ,CAACH,OAAO,MAAA,IAAA,IAAAL,qBAAA,KAArBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAA,CAAuBM,QAAQ,CAACH,MAAM,CAAC,CAAA;;AAEjE;MACA,IAAMM,0BAA0B,IAAAR,QAAA,GAAG,CAAAC,KAAA,GAACC,MAAM,EAAaO,OAAO,cAAAT,QAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA3BA,QAAA,CAAAU,IAAA,CAAAT,KAAA,EAA8B,qBAAqB,CAAC,CAAA;;AAEvF;AACA;AACA,MAAA,IAAI9B,cAAc,IAAI,CAACgC,cAAc,IAAI,CAACG,iBAAiB,EAAE;QAC3D,IAAIE,0BAA0B,IAAIlE,iBAAiB,EAAE;AACnD;AACA,UAAA,OAAA;AACF,SAAA;AACAgC,QAAAA,WAAW,EAAE,CAAA;AACf,OAAA;KACD,CAAA;AAED,IAAA,IAAIH,cAAc,EAAE;AAClBwC,MAAAA,QAAQ,CAACC,gBAAgB,CAAC,OAAO,EAAEhB,WAAW,CAAC,CAAA;MAC/C,OAAO,YAAA;AAAA,QAAA,OAAMe,QAAQ,CAACE,mBAAmB,CAAC,OAAO,EAAEjB,WAAW,CAAC,CAAA;AAAA,OAAA,CAAA;AACjE,KAAA;AACA,IAAA,OAAOkB,SAAS,CAAA;GACjB,EAAE,CAAC3C,cAAc,EAAE7B,iBAAiB,EAAEiC,YAAY,EAAED,WAAW,CAAC,CAAC,CAAA;;AAElE;EACAoB,cAAK,CAACC,SAAS,CAAC,YAAM;IACpB,IAAIxC,QAAQ,IAAIgB,cAAc,EAAE;AAC9B;;AAEA,MAAA,IAAM4C,aAAa,GAAGJ,QAAQ,CAACI,aAAmC,CAAA;AAClE,MAAA,IAAIA,aAAa,IAAI,MAAM,IAAIA,aAAa,IAAI,OAAOA,aAAa,CAACC,IAAI,KAAK,UAAU,EAAE;AACxFC,QAAAA,UAAU,CAAC,YAAM;UACfF,aAAa,CAACC,IAAI,EAAE,CAAA;SACrB,EAAE,CAAC,CAAC,CAAA;AACP,OAAA;AACF,KAAA;AACF,GAAC,EAAE,CAAC7D,QAAQ,EAAEgB,cAAc,CAAC,CAAC,CAAA;AAE9B,EAAA,IAAM+C,OAAO,gBACXC,GAAA,CAACC,iBAAiB,EAAA;AAChBC,IAAAA,YAAY,EAAEzD,SAAU;AACxB0D,IAAAA,eAAe,EAAEzD,YAAa;AAC9BG,IAAAA,YAAY,EAAEA,YAAa;AAC3BC,IAAAA,cAAc,EAAEA,cAAe;AAC/BC,IAAAA,cAAc,EAAEA,cAAe;AAC/B1B,IAAAA,UAAU,EAAEA,UAAW;AACvBE,IAAAA,UAAU,EAAEA,UAAW;AACvBJ,IAAAA,iBAAiB,EAAEA,iBAAkB;AACrCrB,IAAAA,OAAO,EAAEqD,WAAY;AACrBE,IAAAA,QAAQ,EAAED,YAAAA;AAAa,GACxB,CACF,CAAA;EAED,oBACEgD,IAAA,CAACC,OAAO,EAAAC,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAA;AACNC,IAAAA,KAAK,EAAC,MAAA;AAAM,GAAA,EACRC,cAAc,CAAC7E,KAAK,CAAC,CAAA,EACrB8E,aAAa,CAAC;IAAEzF,IAAI,EAAE0F,aAAa,CAACC,UAAAA;AAAW,GAAC,CAAC,CAAA,EAAA,EAAA,EAAA;AAAAC,IAAAA,QAAA,EAErDZ,cAAAA,GAAA,CAACa,SAAS,EAAAP,aAAA,CAAA;AACRQ,MAAAA,GAAG,EAAEhF,YAAa;MAClBiF,QAAQ,EAAE/C,IAAI,CAACgD,YAAa;MAC5BC,cAAc,EAAE5C,iBAAiB,EAAG;AACpC5B,MAAAA,SAAS,EAAEA,SAAU;AACrBE,MAAAA,iBAAiB,EAAEA,iBAAkB;AACrC9C,MAAAA,QAAQ,EAAE6C,YAAa;AACvBwE,MAAAA,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGzE,SAAS,EAAK;AAChC,QAAA,IAAIA,SAAS,EAAE;UACbG,oBAAoB,CAACH,SAAS,CAAC,CAAA;AACjC,SAAA;OACA;AACFa,MAAAA,kBAAkB,EAAEA,kBAAmB;AACvCpD,MAAAA,KAAK,EAAEA,KAAM;AACbK,MAAAA,QAAQ,EAAEA,QAAS;AACnBD,MAAAA,SAAS,EAAEA,SAAU;AACrBI,MAAAA,WAAW,EAAEA,WAAY;AACzBC,MAAAA,eAAe,EAAEA,eAAgB;AACjCH,MAAAA,UAAU,EAAEA,UAAW;AACvBC,MAAAA,UAAU,EAAEA,UAAW;AACvBM,MAAAA,kBAAkB,EAAEA,kBAAmB;MACvCD,SAAS,EAAEA,SAAU;AAAC;AACtBE,MAAAA,IAAI,EAAEA,IAAK;AACXC,MAAAA,WAAW,EAAEA,WAAY;AACzBJ,MAAAA,IAAI,EAAEA,MAAK;AACXT,MAAAA,aAAa,EAAEA,aAAc;AAC7BoB,MAAAA,WAAW,EAAEA,WAAY;AACzBC,MAAAA,aAAa,EAAEA,aAAc;AAC7BJ,MAAAA,UAAU,EAAEA,UAAW;AACvB2B,MAAAA,cAAc,EAAEA,cAAe;AAC/BC,MAAAA,iBAAiB,EAAEA,iBAAkB;AACrCvB,MAAAA,MAAM,EAAEA,MAAO;AACfrB,MAAAA,kBAAkB,EAAEA,kBAAAA;KAChBsB,EAAAA,KAAK,CACV,CAAC,EAED,CAACK,QAAQ,IAAIkC,SAAS,iBACrB8B,GAAA,CAACmB,cAAc,EAAA;MAAAP,QAAA,eACbZ,GAAA,CAACoB,oBAAoB,EAAA;QACnBC,YAAY,EAAE,CAAC,CAAE;AACjBpD,QAAAA,OAAO,EAAEA,OAAQ;AACjBqD,QAAAA,MAAM,EAAE,KAAM;AACdC,QAAAA,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,CAAE;QAAAX,QAAA,eAEhCZ,GAAA,CAACK,OAAO,EAAAC,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAA;UACNQ,GAAG,EAAE9C,IAAI,CAACwD,WAAY;AACtBC,UAAAA,KAAK,EAAEtD,cAAAA;AAAe,SAAA,EAClBG,gBAAgB,EAAE,CAAA,EAClBoD,cAAc,CAAC;AAAEC,UAAAA,UAAU,EAAEtF,OAAAA;AAAQ,SAAC,CAAC,CAAA,EAAA,EAAA,EAAA;UAAAuE,QAAA,eAE3CZ,GAAA,CAACK,OAAO,EAAA;AACNuB,YAAAA,eAAe,EAAC,yBAAyB;AACzCC,YAAAA,WAAW,EAAC,qBAAqB;AACjCC,YAAAA,WAAW,EAAC,MAAM;AAClBC,YAAAA,WAAW,EAAC,OAAO;AACnBC,YAAAA,YAAY,EAAC,OAAO;AACpBC,YAAAA,QAAQ,EAAC,QAAQ;AACjBR,YAAAA,KAAK,EAAAnB,aAAA,CAAAA,aAAA,KACAlC,eAAe,CAAA,EAAA,EAAA,EAAA;AAClB8D,cAAAA,SAAS,KAAAC,MAAA,CAAK/F,KAAK,CAACgG,SAAS,CAACC,SAAS,CAAA;aACvC,CAAA;AAAAzB,YAAAA,QAAA,EAEDb,OAAAA;WACM,CAAA;SACF,CAAA,CAAA;OACW,CAAA;KACR,CACjB,EAGA/D,QAAQ,IAAI,CAACxB,UAAU,iBACtB4F,IAAA,CAACkC,WAAW,EAAA;AAACC,MAAAA,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAE;AAACxI,MAAAA,MAAM,EAAEiD,cAAe;AAACwF,MAAAA,SAAS,EAAEpF,YAAa;MAAAwD,QAAA,EAAA,cACtFZ,GAAA,CAACyC,iBAAiB,EAAA;AAACC,QAAAA,KAAK,EAAC,aAAA;AAAa,OAAE,CAAC,eACzC1C,GAAA,CAAC2C,eAAe,EAAA;AAAA/B,QAAAA,QAAA,EAAEb,OAAAA;AAAO,OAAkB,CAAC,CAAA;AAAA,KACjC,CACd,CAAA;AAAA,GAAA,CACM,CAAC,CAAA;AAEd,CAAC,CAAA;AAED,IAAM6C,cAAc,gBAAGC,wBAAwB,CAACpJ,eAAe,EAAE;AAC/DqJ,EAAAA,WAAW,EAAE,gBAAgB;AAC7BC,EAAAA,WAAW,EAAE,gBAAA;AACf,CAAC;;;;"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { useRef, useMemo, useEffect } from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
import '../Typography/index.js';
|
|
4
|
+
import '../Box/BaseBox/index.js';
|
|
5
|
+
import { useIsMobile } from '../../utils/useIsMobile.js';
|
|
6
|
+
import '../../tokens/global/index.js';
|
|
7
|
+
import '../../utils/makeSize/index.js';
|
|
8
|
+
import debounce from '../../utils/lodashButBetter/debounce.js';
|
|
9
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
10
|
+
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
11
|
+
import { makeSize } from '../../utils/makeSize/makeSize.js';
|
|
12
|
+
import { size } from '../../tokens/global/size.js';
|
|
13
|
+
import { Text } from '../Typography/Text/Text.js';
|
|
14
|
+
|
|
15
|
+
var StyledScrollContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
16
|
+
displayName: "SpinWheelweb__StyledScrollContainer",
|
|
17
|
+
componentId: "sc-1gjdbly-0"
|
|
18
|
+
})(["scroll-snap-type:y proximity;scroll-behavior:smooth;&::-webkit-scrollbar{display:none;}scrollbar-width:none;"]);
|
|
19
|
+
|
|
20
|
+
// Styled scroll item with scroll snap
|
|
21
|
+
var StyledScrollItem = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
22
|
+
displayName: "SpinWheelweb__StyledScrollItem",
|
|
23
|
+
componentId: "sc-1gjdbly-1"
|
|
24
|
+
})(["scroll-snap-align:center;"]);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Reusable SpinWheel component for time selection
|
|
28
|
+
* Creates a scrollable column of values where the center item is selected.
|
|
29
|
+
*/
|
|
30
|
+
var SpinWheel = function SpinWheel(_ref) {
|
|
31
|
+
var className = _ref.className,
|
|
32
|
+
values = _ref.values,
|
|
33
|
+
selectedValue = _ref.selectedValue,
|
|
34
|
+
onChange = _ref.onChange,
|
|
35
|
+
activeIndex = _ref.activeIndex,
|
|
36
|
+
onActiveIndexChange = _ref.onActiveIndexChange,
|
|
37
|
+
displayValue = _ref.displayValue,
|
|
38
|
+
scrollContainerRef = _ref.scrollContainerRef,
|
|
39
|
+
tabIndex = _ref.tabIndex;
|
|
40
|
+
var containerRef = useRef(null);
|
|
41
|
+
var itemRefs = useRef([]);
|
|
42
|
+
var programmaticScrollTimeoutRef = useRef(null);
|
|
43
|
+
var isMobile = useIsMobile();
|
|
44
|
+
|
|
45
|
+
// Memoized debounced onChange to avoid jerky scrolling and prevent memory leaks
|
|
46
|
+
var debouncedOnChange = useMemo(function () {
|
|
47
|
+
return debounce(function (value, index) {
|
|
48
|
+
onChange(value, index);
|
|
49
|
+
}, 150);
|
|
50
|
+
}, [onChange]);
|
|
51
|
+
|
|
52
|
+
// Flag to prevent onValueChange from being triggered during auto-positioning
|
|
53
|
+
// Problem: When minuteStep > 1 and user types "03", we auto-position to nearest step "00"
|
|
54
|
+
// This programmatic scroll triggers handleScroll -> onValueChange -> changes value from "03" to "00"
|
|
55
|
+
// But we want to preserve the typed value "03" and only visually position at "00"
|
|
56
|
+
// Solution: Set this flag during programmatic scrolls to prevent onValueChange calls
|
|
57
|
+
// preserving user's typed value while showing correct visual positioning
|
|
58
|
+
var isProgrammaticScroll = useRef(false);
|
|
59
|
+
|
|
60
|
+
// Use displayValue for visual positioning, selectedValue for actual data
|
|
61
|
+
// This supports minute steps: user types "03", displayValue shows "00" for positioning,
|
|
62
|
+
// but selectedValue preserves "03" for form submission
|
|
63
|
+
var positioningValue = displayValue !== null && displayValue !== void 0 ? displayValue : selectedValue;
|
|
64
|
+
|
|
65
|
+
// Auto-scroll to positioned item when dropdown opens or positioning value changes
|
|
66
|
+
useEffect(function () {
|
|
67
|
+
// Clear any existing programmatic scroll timeout
|
|
68
|
+
if (programmaticScrollTimeoutRef.current) {
|
|
69
|
+
clearTimeout(programmaticScrollTimeoutRef.current);
|
|
70
|
+
}
|
|
71
|
+
var positionIndex = values.findIndex(function (val) {
|
|
72
|
+
return String(val) === String(positioningValue);
|
|
73
|
+
});
|
|
74
|
+
if (positionIndex >= 0 && itemRefs.current[positionIndex]) {
|
|
75
|
+
var _itemRefs$current$pos;
|
|
76
|
+
isProgrammaticScroll.current = true;
|
|
77
|
+
(_itemRefs$current$pos = itemRefs.current[positionIndex]) === null || _itemRefs$current$pos === void 0 || _itemRefs$current$pos.scrollIntoView({
|
|
78
|
+
behavior: 'smooth',
|
|
79
|
+
block: 'center'
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Reset flag after scroll finishes
|
|
83
|
+
programmaticScrollTimeoutRef.current = setTimeout(function () {
|
|
84
|
+
isProgrammaticScroll.current = false;
|
|
85
|
+
}, 300);
|
|
86
|
+
}
|
|
87
|
+
}, [positioningValue, values]);
|
|
88
|
+
|
|
89
|
+
// Cleanup timeouts on unmount
|
|
90
|
+
useEffect(function () {
|
|
91
|
+
return function () {
|
|
92
|
+
if (programmaticScrollTimeoutRef.current) {
|
|
93
|
+
clearTimeout(programmaticScrollTimeoutRef.current);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
|
|
98
|
+
// Scroll event handler to update selection based on center position
|
|
99
|
+
var handleScroll = function handleScroll() {
|
|
100
|
+
if (isProgrammaticScroll.current || !containerRef.current) return;
|
|
101
|
+
|
|
102
|
+
// Use document.elementFromPoint for efficient center detection (similar to Carousel)
|
|
103
|
+
var containerBB = containerRef.current.getBoundingClientRect();
|
|
104
|
+
var pointX = containerBB.left + containerBB.width * 0.5; // Center horizontally
|
|
105
|
+
var pointY = containerBB.top + containerBB.height * 0.5; // Center vertically
|
|
106
|
+
|
|
107
|
+
var element = document.elementFromPoint(pointX, pointY);
|
|
108
|
+
var spinWheelItem = element === null || element === void 0 ? void 0 : element.closest('[data-item-index]');
|
|
109
|
+
if (!spinWheelItem) return;
|
|
110
|
+
var itemIndex = Number(spinWheelItem.getAttribute('data-item-index'));
|
|
111
|
+
if (isNaN(itemIndex) || itemIndex < 0 || itemIndex >= values.length) return;
|
|
112
|
+
|
|
113
|
+
// Update active index immediately for visual feedback
|
|
114
|
+
onActiveIndexChange === null || onActiveIndexChange === void 0 || onActiveIndexChange(itemIndex);
|
|
115
|
+
|
|
116
|
+
// Debounce the actual value change to avoid jerky scrolling
|
|
117
|
+
debouncedOnChange(values[itemIndex], itemIndex);
|
|
118
|
+
};
|
|
119
|
+
var handleItemClick = function handleItemClick(value, index) {
|
|
120
|
+
// Always allow explicit user selection via click, even when displayValue is present
|
|
121
|
+
// This lets users choose to override their typed value with a step value if desired
|
|
122
|
+
onChange(value, index);
|
|
123
|
+
onActiveIndexChange === null || onActiveIndexChange === void 0 || onActiveIndexChange(index);
|
|
124
|
+
};
|
|
125
|
+
return /*#__PURE__*/jsx(BaseBox, {
|
|
126
|
+
className: className,
|
|
127
|
+
display: "flex",
|
|
128
|
+
flexDirection: "column",
|
|
129
|
+
alignItems: "center",
|
|
130
|
+
width: isMobile ? makeSize(size[82]) : makeSize(size[66]),
|
|
131
|
+
height: makeSize(size[172]),
|
|
132
|
+
children: /*#__PURE__*/jsx(BaseBox, {
|
|
133
|
+
position: "relative",
|
|
134
|
+
width: "100%",
|
|
135
|
+
overflow: "hidden",
|
|
136
|
+
children: /*#__PURE__*/jsxs(StyledScrollContainer, {
|
|
137
|
+
ref: function ref(node) {
|
|
138
|
+
containerRef.current = node;
|
|
139
|
+
if (typeof scrollContainerRef === 'function') {
|
|
140
|
+
scrollContainerRef(node);
|
|
141
|
+
} else if (scrollContainerRef && 'current' in scrollContainerRef) {
|
|
142
|
+
scrollContainerRef.current = node;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
height: "100%",
|
|
146
|
+
overflowY: "auto",
|
|
147
|
+
onScroll: handleScroll,
|
|
148
|
+
tabIndex: typeof tabIndex === 'number' ? tabIndex : undefined,
|
|
149
|
+
children: [/*#__PURE__*/jsx(BaseBox, {
|
|
150
|
+
height: "68px"
|
|
151
|
+
}), values.map(function (value, index) {
|
|
152
|
+
// Show visual selection based on positioning value (for smooth minute steps)
|
|
153
|
+
// but preserve actual selectedValue for form data integrity
|
|
154
|
+
var isVisuallySelected = activeIndex === index || String(value) === String(positioningValue);
|
|
155
|
+
return /*#__PURE__*/jsx(StyledScrollItem, {
|
|
156
|
+
ref: function ref(el) {
|
|
157
|
+
return itemRefs.current[index] = el;
|
|
158
|
+
},
|
|
159
|
+
height: "34px",
|
|
160
|
+
display: "flex",
|
|
161
|
+
alignItems: "center",
|
|
162
|
+
justifyContent: "center",
|
|
163
|
+
onClick: function onClick() {
|
|
164
|
+
return handleItemClick(value, index);
|
|
165
|
+
},
|
|
166
|
+
style: {
|
|
167
|
+
cursor: 'pointer'
|
|
168
|
+
},
|
|
169
|
+
"data-item-index": index,
|
|
170
|
+
children: /*#__PURE__*/jsx(Text, {
|
|
171
|
+
variant: "body",
|
|
172
|
+
size: isVisuallySelected ? 'large' : 'medium',
|
|
173
|
+
weight: isVisuallySelected ? 'semibold' : 'regular',
|
|
174
|
+
color: isVisuallySelected ? 'interactive.text.gray.normal' : 'interactive.text.gray.muted',
|
|
175
|
+
textAlign: "center",
|
|
176
|
+
children: String(value).padStart(2, '0')
|
|
177
|
+
})
|
|
178
|
+
}, "".concat(value, "-").concat(index));
|
|
179
|
+
}), /*#__PURE__*/jsx(BaseBox, {
|
|
180
|
+
height: "68px"
|
|
181
|
+
})]
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
export { SpinWheel };
|
|
188
|
+
//# sourceMappingURL=SpinWheel.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpinWheel.web.js","sources":["../../../../../../src/components/TimePicker/SpinWheel.web.tsx"],"sourcesContent":["import React, { useRef, useEffect, useMemo } from 'react';\nimport styled from 'styled-components';\nimport type { SpinWheelProps } from './types';\nimport { Text } from '~components/Typography';\nimport BaseBox from '~components/Box/BaseBox';\nimport { useIsMobile } from '~utils/useIsMobile';\nimport { size } from '~tokens/global';\nimport { makeSize } from '~utils/makeSize';\nimport debounce from '~utils/lodashButBetter/debounce';\n\n// Styled scroll container with scroll snap\nconst StyledScrollContainer = styled(BaseBox)`\n scroll-snap-type: y proximity; /* Changed from mandatory to proximity for smoother scrolling */\n scroll-behavior: smooth;\n &::-webkit-scrollbar {\n display: none;\n }\n scrollbar-width: none;\n`;\n\n// Styled scroll item with scroll snap\nconst StyledScrollItem = styled(BaseBox)`\n scroll-snap-align: center;\n /* Removed scroll-snap-stop: always for smoother interaction */\n`;\n\n/**\n * Reusable SpinWheel component for time selection\n * Creates a scrollable column of values where the center item is selected.\n */\nconst SpinWheel = ({\n className,\n values,\n selectedValue,\n onChange,\n activeIndex,\n onActiveIndexChange,\n displayValue,\n scrollContainerRef,\n tabIndex,\n}: SpinWheelProps): React.ReactElement => {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const itemRefs = useRef<(HTMLDivElement | null)[]>([]);\n const programmaticScrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isMobile = useIsMobile();\n\n // Memoized debounced onChange to avoid jerky scrolling and prevent memory leaks\n const debouncedOnChange = useMemo(\n () =>\n debounce((value: string | number, index: number) => {\n onChange(value, index);\n }, 150),\n [onChange],\n );\n\n // Flag to prevent onValueChange from being triggered during auto-positioning\n // Problem: When minuteStep > 1 and user types \"03\", we auto-position to nearest step \"00\"\n // This programmatic scroll triggers handleScroll -> onValueChange -> changes value from \"03\" to \"00\"\n // But we want to preserve the typed value \"03\" and only visually position at \"00\"\n // Solution: Set this flag during programmatic scrolls to prevent onValueChange calls\n // preserving user's typed value while showing correct visual positioning\n const isProgrammaticScroll = useRef(false);\n\n // Use displayValue for visual positioning, selectedValue for actual data\n // This supports minute steps: user types \"03\", displayValue shows \"00\" for positioning,\n // but selectedValue preserves \"03\" for form submission\n const positioningValue = displayValue ?? selectedValue;\n\n // Auto-scroll to positioned item when dropdown opens or positioning value changes\n useEffect(() => {\n // Clear any existing programmatic scroll timeout\n if (programmaticScrollTimeoutRef.current) {\n clearTimeout(programmaticScrollTimeoutRef.current);\n }\n\n const positionIndex = values.findIndex((val) => String(val) === String(positioningValue));\n if (positionIndex >= 0 && itemRefs.current[positionIndex]) {\n isProgrammaticScroll.current = true;\n\n itemRefs.current[positionIndex]?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n\n // Reset flag after scroll finishes\n programmaticScrollTimeoutRef.current = setTimeout(() => {\n isProgrammaticScroll.current = false;\n }, 300);\n }\n }, [positioningValue, values]);\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n if (programmaticScrollTimeoutRef.current) {\n clearTimeout(programmaticScrollTimeoutRef.current);\n }\n };\n }, []);\n\n // Scroll event handler to update selection based on center position\n const handleScroll = (): void => {\n if (isProgrammaticScroll.current || !containerRef.current) return;\n\n // Use document.elementFromPoint for efficient center detection (similar to Carousel)\n const containerBB = containerRef.current.getBoundingClientRect();\n const pointX = containerBB.left + containerBB.width * 0.5; // Center horizontally\n const pointY = containerBB.top + containerBB.height * 0.5; // Center vertically\n\n const element = document.elementFromPoint(pointX, pointY);\n const spinWheelItem = element?.closest('[data-item-index]');\n\n if (!spinWheelItem) return;\n\n const itemIndex = Number(spinWheelItem.getAttribute('data-item-index'));\n if (isNaN(itemIndex) || itemIndex < 0 || itemIndex >= values.length) return;\n\n // Update active index immediately for visual feedback\n onActiveIndexChange?.(itemIndex);\n\n // Debounce the actual value change to avoid jerky scrolling\n debouncedOnChange(values[itemIndex], itemIndex);\n };\n\n const handleItemClick = (value: string | number, index: number): void => {\n // Always allow explicit user selection via click, even when displayValue is present\n // This lets users choose to override their typed value with a step value if desired\n onChange(value, index);\n onActiveIndexChange?.(index);\n };\n\n return (\n <BaseBox\n className={className}\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n width={isMobile ? makeSize(size[82]) : makeSize(size[66])}\n height={makeSize(size[172])}\n >\n <BaseBox position=\"relative\" width=\"100%\" overflow=\"hidden\">\n {/* Scrollable container */}\n <StyledScrollContainer\n ref={(node: HTMLDivElement | null) => {\n containerRef.current = node;\n if (typeof scrollContainerRef === 'function') {\n scrollContainerRef(node);\n } else if (scrollContainerRef && 'current' in scrollContainerRef) {\n (scrollContainerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n }}\n height=\"100%\"\n overflowY=\"auto\"\n onScroll={handleScroll}\n tabIndex={typeof tabIndex === 'number' ? tabIndex : undefined}\n >\n {/* Invisible spacer at top - allows first item to scroll to center */}\n <BaseBox height=\"68px\" />\n\n {values.map((value, index) => {\n // Show visual selection based on positioning value (for smooth minute steps)\n // but preserve actual selectedValue for form data integrity\n const isVisuallySelected =\n activeIndex === index || String(value) === String(positioningValue);\n\n return (\n <StyledScrollItem\n key={`${value}-${index}`}\n ref={(el) => (itemRefs.current[index] = el)}\n height=\"34px\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n onClick={() => handleItemClick(value, index)}\n style={{ cursor: 'pointer' }}\n data-item-index={index}\n >\n <Text\n variant=\"body\"\n size={isVisuallySelected ? 'large' : 'medium'}\n weight={isVisuallySelected ? 'semibold' : 'regular'}\n color={\n isVisuallySelected\n ? 'interactive.text.gray.normal'\n : 'interactive.text.gray.muted'\n }\n textAlign=\"center\"\n >\n {String(value).padStart(2, '0')}\n </Text>\n </StyledScrollItem>\n );\n })}\n\n {/* Invisible spacer at bottom - allows last item to scroll to center */}\n <BaseBox height=\"68px\" />\n </StyledScrollContainer>\n </BaseBox>\n </BaseBox>\n );\n};\n\nexport { SpinWheel };\n"],"names":["StyledScrollContainer","styled","BaseBox","withConfig","displayName","componentId","StyledScrollItem","SpinWheel","_ref","className","values","selectedValue","onChange","activeIndex","onActiveIndexChange","displayValue","scrollContainerRef","tabIndex","containerRef","useRef","itemRefs","programmaticScrollTimeoutRef","isMobile","useIsMobile","debouncedOnChange","useMemo","debounce","value","index","isProgrammaticScroll","positioningValue","useEffect","current","clearTimeout","positionIndex","findIndex","val","String","_itemRefs$current$pos","scrollIntoView","behavior","block","setTimeout","handleScroll","containerBB","getBoundingClientRect","pointX","left","width","pointY","top","height","element","document","elementFromPoint","spinWheelItem","closest","itemIndex","Number","getAttribute","isNaN","length","handleItemClick","_jsx","display","flexDirection","alignItems","makeSize","size","children","position","overflow","_jsxs","ref","node","overflowY","onScroll","undefined","map","isVisuallySelected","el","justifyContent","onClick","style","cursor","Text","variant","weight","color","textAlign","padStart","concat"],"mappings":"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"}
|