@choc-ui/chakra-autocomplete 4.11.4 → 4.13.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.
@@ -1 +1 @@
1
- {"version":3,"file":"chakra-autocomplete.cjs.production.min.js","sources":["../src/autocomplete-context.ts","../src/helpers/fuzzySearch.ts","../src/helpers/items.ts","../src/helpers/input.ts","../src/helpers/group.ts","../src/use-autocomplete.ts","../src/autocomplete.tsx","../src/autocomplete-item.tsx","../src/autocomplete-creatable.tsx","../src/autocomplete-group.tsx","../src/autocomplete-input.tsx","../src/components/empty-state.tsx","../src/autocomplete-list.tsx","../src/helpers/list.ts","../src/autocomplete-tag.tsx"],"sourcesContent":["import { createContext } from \"@chakra-ui/react-utils\";\nimport { UseAutoCompleteReturn } from \"./types\";\n\nexport const [AutoCompleteProvider, useAutoCompleteContext] = createContext<\n UseAutoCompleteReturn\n>({\n name: \"AutoCompleteContext\",\n errorMessage:\n \"useAutoCompleteContext: `context` is undefined. Seems you forgot to wrap all autoomplete components within `<AutoComplete />`\",\n});\n","/*\n * @param str1 The first string to compare.\n * @param str2 The second string to compare.\n * @param gramSize The size of the grams. Defaults to length 2.\n */\nexport function fuzzyScore(str1: string, str2: string, gramSize: number = 2) {\n function getNGrams(s: string, len: number) {\n s = \" \".repeat(len - 1) + s.toLowerCase() + \" \".repeat(len - 1);\n let v = new Array(s.length - len + 1);\n for (let i = 0; i < v.length; i++) {\n v[i] = s.slice(i, i + len);\n }\n return v;\n }\n\n if (!str1?.length || !str2?.length) {\n return 0.0;\n }\n\n //Order the strings by length so the order they're passed in doesn't matter\n //and so the smaller string's ngrams are always the ones in the set\n let s1 = str1.length < str2.length ? str1 : str2;\n let s2 = str1.length < str2.length ? str2 : str1;\n\n let pairs1 = getNGrams(s1, gramSize);\n let pairs2 = getNGrams(s2, gramSize);\n let set = new Set<string>(pairs1);\n\n let total = pairs2.length;\n let hits = 0;\n for (let item of pairs2) {\n if (set.delete(item)) {\n hits++;\n }\n }\n return hits / total;\n}\n","import { getChildrenDeep } from \"react-nanny\";\nimport { pick, isDefined, isEmpty } from \"@chakra-ui/utils\";\nimport { ReactNode } from \"react\";\nimport { FlexProps } from \"@chakra-ui/react\";\nimport { fuzzyScore } from \"./fuzzySearch\";\nimport { Item } from \"../types\";\nimport { AutoCompleteItemProps } from \"../autocomplete-item\";\n\nexport const getDefItemValue = (item: AutoCompleteItemProps[\"value\"]) =>\n (typeof item === \"string\" ? item : item[Object.keys(item)[0]]).toString();\n\nexport const setEmphasis = (children: any, query: string) => {\n if (typeof children !== \"string\" || isEmpty(query)) {\n return children;\n }\n const newChildren = children\n .toString()\n .replace(\n new RegExp(escapeRegex(query), \"gi\"),\n (match: any) => `<mark>${match}</mark>`\n );\n return newChildren;\n};\n\nexport const getItemList = (children: ReactNode) => {\n const itemChildren = getChildrenDeep(\n children,\n (child: any) => child?.type?.displayName === \"AutoCompleteItem\"\n );\n\n return itemChildren.map(item => {\n const itemObj = pick(item.props, [\"value\", \"label\", \"fixed\", \"disabled\"]);\n const { getValue = getDefItemValue } = item.props;\n const value = getValue(itemObj.value);\n const finObj = isDefined(itemObj.label)\n ? itemObj\n : { ...itemObj, label: value };\n return { ...finObj, value };\n });\n};\n\nexport const getFocusedStyles = (): FlexProps => {\n return {\n bg: \"whiteAlpha.100\",\n _light: {\n bg: \"gray.200\",\n },\n };\n};\n\nexport const defaultFilterMethod = (\n query: string,\n itemValue: Item[\"value\"],\n itemLabel: Item[\"label\"]\n) => {\n return (\n itemValue?.toLowerCase().indexOf(query?.toLowerCase()) >= 0 ||\n itemLabel?.toLowerCase().indexOf(query?.toLowerCase()) >= 0 ||\n fuzzyScore(query, itemValue) >= 0.5 ||\n fuzzyScore(query, itemLabel) >= 0.5\n );\n};\n\nfunction escapeRegex(string: string) {\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n","export const getMultipleWrapStyles = (themeInput: any, multiple?: boolean) => ({\n ...(multiple && {\n ...themeInput.field,\n _focusWithin: themeInput.field._focus,\n pos: \"relative\",\n minH: 9,\n // px: 3,\n py: 1.5,\n spacing: 3,\n }),\n cursor: \"text\",\n h: \"fit-content\",\n // w: \"full\",\n});\n","import { isDefined } from \"@chakra-ui/utils\";\nimport { getChildDeep } from \"react-nanny\";\nimport { ReactNode } from \"react\";\n\nexport const hasFirstItem = (children: ReactNode, firstItem: any) => {\n const result = getChildDeep(\n children,\n (child: any) =>\n child?.type?.displayName === \"AutoCompleteItem\" &&\n child.props.value === firstItem?.value\n );\n\n return result;\n};\nexport const hasLastItem = (children: ReactNode, lastItem: any) => {\n const result = getChildDeep(\n children,\n (child: any) =>\n child?.type?.displayName === \"AutoCompleteItem\" &&\n child.props.value === lastItem?.value\n );\n return result;\n};\n\nexport const hasChildren = (children: any, filteredList: any[]) => {\n return isDefined(\n getChildDeep(\n children,\n (child: any) =>\n filteredList.findIndex(i => i.value === child.props?.value) >= 0\n )\n );\n};\n","import {\n useDimensions,\n useDisclosure,\n useUpdateEffect,\n useControllableState,\n} from \"@chakra-ui/react\";\nimport {\n callAll,\n getFirstItem,\n getLastItem,\n getNextItem,\n getPrevItem,\n isObject,\n isEmpty,\n isUndefined,\n runIfFn,\n} from \"@chakra-ui/utils\";\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { AutoCompleteProps } from \"./autocomplete\";\nimport {\n defaultFilterMethod,\n getDefItemValue,\n getFocusedStyles,\n getItemList,\n setEmphasis,\n} from \"./helpers/items\";\nimport { getMultipleWrapStyles } from \"./helpers/input\";\nimport { hasChildren, hasFirstItem, hasLastItem } from \"./helpers/group\";\nimport { Item, UseAutoCompleteReturn } from \"./types\";\n\n/**\n * useAutoComplete that provides all the state and focus management logic\n * for the autocomplete component. It is consumed by the `Autocomplete` component\n *\n */\n\nexport function useAutoComplete(\n autoCompleteProps: AutoCompleteProps\n): UseAutoCompleteReturn {\n let {\n closeOnBlur = true,\n closeOnSelect,\n creatable,\n emphasize,\n emptyState = true,\n freeSolo,\n isReadOnly,\n listAllValuesOnFocus,\n maxSuggestions,\n multiple,\n defaultValue,\n defaultValues = defaultValue ? [defaultValue] : [],\n onReady,\n defaultIsOpen,\n shouldRenderSuggestions = () => true,\n suggestWhenEmpty,\n value,\n values: valuesProp = value ? [value] : undefined,\n } = autoCompleteProps;\n closeOnSelect = closeOnSelect ? closeOnSelect : multiple ? false : true;\n\n freeSolo = freeSolo ? freeSolo : multiple ? true : autoCompleteProps.freeSolo;\n\n const { isOpen, onClose, onOpen } = useDisclosure({ defaultIsOpen });\n\n const children = runIfFn(autoCompleteProps.children, {\n isOpen,\n onClose,\n onOpen,\n });\n const itemList: Item[] = getItemList(children);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const interactionRef = useRef<\"mouse\" | \"keyboard\" | null>(null);\n\n const [listAll, setListAll] = useState(false);\n\n let defaultQuery = \"\";\n if (multiple) defaultQuery = \"\";\n else if (!isUndefined(defaultValues)) defaultQuery = defaultValues[0];\n else if (!isUndefined(valuesProp)) defaultQuery = valuesProp[0];\n\n const [query, setQuery] = useState<string>(defaultQuery ?? \"\");\n const filteredResults = itemList\n .filter(\n i =>\n i.fixed ||\n runIfFn(\n autoCompleteProps.filter || defaultFilterMethod,\n query,\n i.value,\n i.label\n ) ||\n listAll\n )\n .filter((_, index) => (maxSuggestions ? index < maxSuggestions : true));\n\n // Add Creatable to Filtered List\n const creatableArr: Item[] = creatable\n ? [{ value: query, noFilter: true }]\n : [];\n\n const filteredList = [...filteredResults, ...creatableArr];\n const [values, setValues] = useControllableState({\n defaultValue: defaultValues,\n value: valuesProp,\n onChange: (newValues: any[]) => {\n const item = filteredList.find(opt => opt.value === newValues[0]);\n const items = newValues.map(val =>\n filteredList.find(opt => opt.value === val)\n );\n runIfFn(\n autoCompleteProps.onChange,\n multiple ? newValues : newValues[0],\n multiple ? items : item\n );\n },\n });\n\n const [focusedValue, setFocusedValue] = useState<Item[\"value\"]>(\n itemList[0]?.value\n );\n\n const maxSelections = autoCompleteProps.maxSelections || values.length + 1;\n\n const focusedIndex = filteredList.findIndex(i => i.value === focusedValue);\n const nextItem = getNextItem(\n focusedIndex,\n filteredList,\n !!autoCompleteProps.rollNavigation\n );\n const prevItem = getPrevItem(\n focusedIndex,\n filteredList,\n !!autoCompleteProps.rollNavigation\n );\n const firstItem = getFirstItem(filteredList);\n const lastItem = getLastItem(filteredList);\n\n useUpdateEffect(() => {\n setFocusedValue(firstItem?.value);\n }, [query]);\n\n useEffect(() => {\n const focusedItem = itemList.find(i => i.value === focusedValue);\n runIfFn(autoCompleteProps.onOptionFocus, {\n item: focusedItem!,\n selectMethod: interactionRef.current,\n isNewInput: false,\n });\n }, [focusedValue, autoCompleteProps.onOptionFocus]);\n\n const selectItem = (optionValue: Item[\"value\"]) => {\n if (!values.includes(optionValue) && values.length < maxSelections) {\n setValues(v => (multiple ? [...v, optionValue] : [optionValue]));\n }\n\n const option = filteredList.find(i => i.value === optionValue);\n\n if (multiple) {\n inputRef.current?.focus();\n }\n if (autoCompleteProps.focusInputOnSelect) inputRef.current?.focus();\n runIfFn(autoCompleteProps.onSelectOption, {\n item: option!,\n selectMethod: interactionRef.current,\n isNewInput: false,\n });\n if (closeOnSelect) onClose();\n };\n\n const removeItem = (itemValue: Item[\"value\"]) => {\n setValues(prevValues => {\n const item = itemList.find(opt => opt.value === itemValue);\n runIfFn(autoCompleteProps.onTagRemoved, itemValue, item, prevValues);\n return prevValues.filter(i => i !== itemValue);\n });\n if (query === itemValue) setQuery(\"\");\n };\n\n const resetItems = (focusInput?: boolean) => {\n setValues([]);\n if (focusInput) inputRef.current?.focus();\n };\n\n const tags = multiple\n ? values.map(tag => ({\n label: itemList.find(item => item.value === tag)?.label || tag,\n onRemove: () => removeItem(tag),\n }))\n : [];\n\n useEffect(() => {\n runIfFn(onReady, { tags });\n\n const item = filteredList.find(opt => opt.value === values[0]);\n const optionLabel = item?.label || item?.value;\n setQuery(() => (multiple ? \"\" : optionLabel ?? \"\"));\n }, [values]);\n\n const getInputProps: UseAutoCompleteReturn[\"getInputProps\"] = (\n props,\n themeInput\n ) => {\n const { onBlur, onChange, onFocus, onKeyDown, variant, ...rest } = props;\n\n return {\n wrapper: {\n ref: inputWrapperRef,\n onClick: () => {\n inputRef?.current?.focus();\n },\n ...getMultipleWrapStyles(themeInput, multiple),\n ...rest,\n },\n input: {\n isReadOnly,\n onFocus: e => {\n runIfFn(onFocus, e);\n if (autoCompleteProps.openOnFocus && !isReadOnly) onOpen();\n if (autoCompleteProps.selectOnFocus) e.target.select();\n if (listAllValuesOnFocus) setListAll(true);\n },\n onBlur: e => {\n runIfFn(onBlur, e);\n const listIsFocused = e.relatedTarget === listRef?.current;\n const inputWrapperIsFocused = inputWrapperRef.current?.contains(\n e.relatedTarget as any\n );\n if (!listIsFocused && !inputWrapperIsFocused) {\n if (closeOnBlur) onClose();\n if (!values.includes(e.target.value) && !freeSolo)\n setQuery(getLastItem(values) ?? \"\");\n }\n },\n onChange: e => {\n const newValue = e.target.value;\n runIfFn(onChange, e);\n setQuery(e.target.value);\n const queryIsEmpty = isEmpty(newValue);\n if (\n runIfFn(shouldRenderSuggestions, newValue) &&\n (!queryIsEmpty || suggestWhenEmpty)\n )\n onOpen();\n else onClose();\n setListAll(false);\n },\n onKeyDown: e => {\n runIfFn(onKeyDown, e);\n interactionRef.current = \"keyboard\";\n\n const { key } = e;\n const focusedItem = filteredList[focusedIndex];\n if (key === \"Enter\") {\n if (focusedItem && !focusedItem?.disabled)\n selectItem(focusedItem?.value);\n else inputRef.current?.focus();\n e.preventDefault();\n return;\n }\n\n if (key === \"ArrowDown\") {\n setFocusedValue(nextItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"ArrowUp\") {\n setFocusedValue(prevItem?.value);\n\n e.preventDefault();\n return;\n }\n\n if (key === \"Tab\") {\n setFocusedValue(nextItem?.value);\n\n if (isOpen) e.preventDefault();\n return;\n }\n\n if (key === \"Home\") {\n setFocusedValue(firstItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"End\") {\n setFocusedValue(lastItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"Escape\") {\n callAll(onClose, e.preventDefault);\n }\n },\n value: query,\n variant: multiple ? \"unstyled\" : variant,\n ...rest,\n },\n };\n };\n\n const dim = useDimensions(inputWrapperRef, true);\n const getListProps: UseAutoCompleteReturn[\"getListProps\"] = () => {\n const width = dim?.marginBox.width as number;\n\n return {\n width,\n };\n };\n\n const getItemProps: UseAutoCompleteReturn[\"getItemProps\"] = (\n props,\n creatable\n ) => {\n const {\n _fixed,\n _focus,\n children: itemChild,\n disabled,\n label,\n value: valueProp,\n fixed,\n getValue = getDefItemValue,\n onClick,\n onMouseOver,\n sx,\n ...rest\n } = props;\n const value = creatable ? valueProp : getValue(valueProp)?.toString();\n const isFocused = value === focusedValue;\n const isValidSuggestion =\n filteredList.findIndex(i => i.value === value) >= 0;\n const itemLabel = itemChild || label || value;\n return {\n item: {\n ...(typeof itemLabel !== \"string\" || !emphasize\n ? { children: itemLabel }\n : {\n dangerouslySetInnerHTML: {\n __html: setEmphasis(itemLabel, query),\n },\n }),\n \"aria-selected\": values.includes(value),\n \"aria-disabled\": disabled,\n _disabled: { opacity: 0.4, cursor: \"not-allowed\", userSelect: \"none\" },\n onClick: e => {\n runIfFn(onClick, e);\n if (!disabled) selectItem(value);\n else inputRef.current?.focus();\n },\n onMouseOver: e => {\n runIfFn(onMouseOver, e);\n setFocusedValue(value);\n interactionRef.current = \"mouse\";\n },\n sx: {\n ...sx,\n mark: {\n color: \"inherit\",\n bg: \"transparent\",\n ...(isObject(emphasize)\n ? emphasize\n : {\n fontWeight: emphasize ? \"extrabold\" : \"inherit\",\n }),\n },\n },\n ...(isFocused && (_focus || getFocusedStyles())),\n ...(fixed && _fixed),\n ...rest,\n },\n root: {\n isValidSuggestion,\n value,\n },\n };\n };\n\n const getGroupProps: UseAutoCompleteReturn[\"getGroupProps\"] = props => {\n const hasItems = hasChildren(props.children, filteredList);\n return {\n divider: {\n hasFirstChild: hasFirstItem(props.children, firstItem),\n hasLastChild: hasLastItem(\n props.children,\n getLastItem(filteredList.filter(i => isUndefined(i?.noFilter)))\n ),\n },\n group: {\n display: hasItems ? \"initial\" : \"none\",\n },\n };\n };\n\n const getEmptyStateProps: UseAutoCompleteReturn[\"getEmptyStateProps\"] = defaultEmptyState => {\n const noSuggestions = filteredList.every(i => i.noFilter);\n if (noSuggestions && emptyState && !creatable) {\n return typeof emptyState === \"boolean\"\n ? defaultEmptyState\n : runIfFn(emptyState, { query });\n }\n };\n\n return {\n autoCompleteProps,\n children,\n filteredList,\n filteredResults,\n focusedValue,\n getEmptyStateProps,\n getGroupProps,\n getInputProps,\n getItemProps,\n getListProps,\n inputRef,\n interactionRef,\n isOpen,\n itemList,\n listRef,\n onClose,\n onOpen,\n query,\n removeItem,\n resetItems,\n setQuery,\n tags,\n values,\n };\n}\n","import React, { useImperativeHandle } from \"react\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\n\nimport { AutoCompleteProvider } from \"./autocomplete-context\";\nimport { useAutoComplete } from \"./use-autocomplete\";\nimport { chakra, forwardRef, Popover } from \"@chakra-ui/react\";\nimport { AutoCompleteRefMethods, UseAutoCompleteProps } from \"./types\";\n\nexport type AutoCompleteChildProps = {\n isOpen: boolean;\n onClose: () => void;\n onOpen: () => void;\n};\nexport interface AutoCompleteProps extends UseAutoCompleteProps {\n children: MaybeRenderProp<AutoCompleteChildProps>;\n ref?: React.RefObject<AutoCompleteRefMethods>;\n}\n\nexport const AutoComplete = forwardRef<AutoCompleteProps, \"div\">(\n (props, ref) => {\n const context = useAutoComplete(props);\n const {\n children,\n isOpen,\n onClose,\n onOpen,\n resetItems,\n removeItem,\n } = context;\n\n useImperativeHandle(ref, () => ({\n resetItems,\n removeItem,\n }));\n\n return (\n <AutoCompleteProvider value={context}>\n <Popover\n isLazy\n isOpen={isOpen}\n onClose={onClose}\n onOpen={onOpen}\n autoFocus={false}\n placement=\"bottom\"\n closeOnBlur={true}\n >\n <chakra.div\n sx={{\n \".chakra-popover__popper\": {\n position: \"unset !important\",\n },\n }}\n w=\"full\"\n ref={ref}\n >\n {children}\n </chakra.div>\n </Popover>\n </AutoCompleteProvider>\n );\n }\n);\n\nAutoComplete.displayName = \"AutoComplete\";\n","import {\n CSSObject,\n Flex,\n FlexProps,\n forwardRef,\n useMergeRefs,\n} from \"@chakra-ui/react\";\nimport { isUndefined, omit } from \"@chakra-ui/utils\";\nimport React, { useEffect, useRef } from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\n\nexport interface AutoCompleteItemProps extends FlexProps {\n value: any;\n label?: string;\n fixed?: boolean;\n _focus?: CSSObject | any;\n disabled?: boolean;\n _fixed?: CSSObject;\n getValue?: (item: AutoCompleteItemProps[\"value\"]) => any;\n}\n\nexport const AutoCompleteItem = forwardRef<AutoCompleteItemProps, \"div\">(\n (props, forwardedRef) => {\n const {\n focusedValue,\n getItemProps,\n interactionRef,\n } = useAutoCompleteContext();\n const itemRef = useRef<any>();\n const ref = useMergeRefs(forwardedRef, itemRef);\n\n const itemProps = getItemProps(props);\n const { isValidSuggestion, value } = itemProps.root;\n\n const isFocused = focusedValue === value;\n\n useEffect(() => {\n if (isFocused && interactionRef.current === \"keyboard\")\n itemRef?.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n }, [isFocused, interactionRef]);\n\n useEffect(() => {\n if (typeof value !== \"string\") console.warn(\"wow\");\n if (typeof value !== \"string\" && isUndefined(props.getValue))\n console.error(\n \"You must define the `getValue` prop, when an Item's value is not a string\"\n );\n }, []);\n\n const { children, dangerouslySetInnerHTML, ...restProps } = itemProps.item;\n\n const rest = omit(restProps, [\"groupId\"] as any);\n\n return isValidSuggestion ? (\n <Flex ref={ref} {...baseItemStyles} {...rest}>\n {children ? (\n children\n ) : (\n <span dangerouslySetInnerHTML={dangerouslySetInnerHTML} />\n )}\n </Flex>\n ) : null;\n }\n);\n\nAutoCompleteItem.displayName = \"AutoCompleteItem\";\n\nexport const baseItemStyles: FlexProps = {\n mx: \"2\",\n px: \"2\",\n py: \"2\",\n rounded: \"md\",\n cursor: \"pointer\",\n};\n","import { Flex, FlexProps } from \"@chakra-ui/react\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\nimport { isEmpty, runIfFn } from \"@chakra-ui/utils\";\n\nimport React from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { baseItemStyles } from \"./autocomplete-item\";\n\ninterface AutoCompleteCreatableProps extends FlexProps {\n children?: MaybeRenderProp<{ value: any }>;\n}\n\nexport function AutoCompleteCreatable(props: AutoCompleteCreatableProps) {\n const { children: childrenProp, ...rest } = props;\n const {\n autoCompleteProps,\n getItemProps,\n query,\n filteredResults,\n } = useAutoCompleteContext();\n\n const queryValue = <mark>{query}</mark>;\n const { children, ...itemProps } = getItemProps(\n {\n ...props,\n value: query,\n children: runIfFn(childrenProp, {\n value: queryValue,\n }),\n },\n true\n ).item;\n\n const queryExistsInList = filteredResults.some(i => i.value === query);\n const showCreatable =\n autoCompleteProps.creatable && !isEmpty(query) && !queryExistsInList;\n\n return showCreatable ? (\n <Flex {...baseItemStyles} {...itemProps} {...rest}>\n {children || `Add ${query}`}\n </Flex>\n ) : null;\n}\n\nAutoCompleteCreatable.displayName = \"AutoCompleteCreatable\";\n","import {\n Box,\n BoxProps,\n Divider,\n DividerProps,\n Flex,\n FlexProps,\n forwardRef,\n} from \"@chakra-ui/react\";\nimport { omit } from \"@chakra-ui/utils\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\n\nexport interface AutoCompleteGroupProps extends BoxProps {\n children?: React.ReactNode;\n showDivider?: boolean;\n dividerColor?: string;\n}\n\nexport const AutoCompleteGroup = forwardRef<AutoCompleteGroupProps, \"div\">(\n (props, ref) => {\n const { children, showDivider, ...restProps } = props;\n const rest = omit(restProps, [\"groupSibling\"] as any);\n\n const { getGroupProps } = useAutoCompleteContext();\n\n const { group } = getGroupProps(props);\n\n const dividerStyles = useDividerStyles(props);\n\n return (\n <Box ref={ref} {...group} {...rest}>\n <Divider {...dividerStyles.top} />\n {children}\n <Divider {...dividerStyles.bottom} />\n </Box>\n );\n }\n);\n\nexport const AutoCompleteGroupTitle = forwardRef<FlexProps, \"div\">(\n (props, ref) => {\n return <Flex {...baseTitleStyles} {...props} ref={ref} />;\n }\n);\n\nAutoCompleteGroup.displayName = \"AutoCompleteGroup\";\nAutoCompleteGroupTitle.displayName = \"AutoCompleteGroupTitle\";\n\nconst baseTitleStyles: FlexProps = {\n ml: 5,\n my: 1,\n fontSize: \"xs\",\n letterSpacing: \"wider\",\n fontWeight: \"extrabold\",\n textTransform: \"uppercase\",\n};\n\nconst useDividerStyles = (\n props: AutoCompleteGroupProps & { groupSibling?: boolean }\n) => {\n const { getGroupProps } = useAutoCompleteContext();\n\n const hasGroupSibling: unknown = props.groupSibling;\n\n const {\n divider: { hasFirstChild, hasLastChild },\n } = getGroupProps(props as AutoCompleteGroupProps);\n\n const baseStyles: DividerProps = {\n my: 2,\n borderColor: props.dividerColor,\n };\n\n const top = {\n ...baseStyles,\n mb: 4,\n display: !props.showDivider || hasFirstChild ? \"none\" : \"\",\n };\n const bottom = {\n ...baseStyles,\n display:\n !props.showDivider || hasLastChild || hasGroupSibling ? \"none\" : \"\",\n };\n\n return { top, bottom };\n};\n","import {\n CSSObject,\n forwardRef,\n Input,\n InputProps,\n // useMergeRefs,\n useMultiStyleConfig,\n Wrap,\n WrapItem,\n} from \"@chakra-ui/react\";\nimport { runIfFn } from \"@chakra-ui/utils\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\nimport React from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { UseAutoCompleteReturn } from \"./types\";\n\nexport interface AutoCompleteInputProps extends InputProps {\n children?: MaybeRenderProp<{ tags: UseAutoCompleteReturn[\"tags\"] }>;\n wrapStyles?: CSSObject;\n}\n\nexport const AutoCompleteInput = forwardRef<AutoCompleteInputProps, \"input\">(\n (props, forwardedRef) => {\n const { inputRef, getInputProps, tags } = useAutoCompleteContext();\n\n // const ref = useMergeRefs(forwardedRef, inputRef);\n\n const { children: childrenProp, ...rest } = props;\n\n const themeInput: any = useMultiStyleConfig(\"Input\", props);\n\n const inputProps = getInputProps(rest, themeInput);\n\n const children = runIfFn(childrenProp, { tags });\n\n return (\n <Wrap {...inputProps.wrapper} ref={forwardedRef}>\n {children}\n <WrapItem as={Input} {...(inputProps.input as any)} ref={inputRef} />\n </Wrap>\n );\n }\n);\n\nAutoCompleteInput.displayName = \"Input\";\n\nAutoCompleteInput.id = \"Input\";\n","import { Box, BoxProps, Flex, FlexProps } from \"@chakra-ui/layout\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"../autocomplete-context\";\n\nexport const EmptyState = (props: BoxProps) => {\n const { getEmptyStateProps } = useAutoCompleteContext();\n\n const emptyState = getEmptyStateProps(\n <Flex {...emptyStyles}>No options found!</Flex>\n );\n\n return <Box {...props}>{emptyState}</Box>;\n};\n\nconst emptyStyles: FlexProps = {\n fontSize: \"sm\",\n align: \"center\",\n justify: \"center\",\n fontWeight: \"bold\",\n fontStyle: \"italic\",\n};\n","import {\n forwardRef,\n PopoverContent,\n PopoverContentProps,\n useMergeRefs,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { EmptyState } from \"./components/empty-state\";\nimport { siblingInfo } from \"./helpers/list\";\n\nexport type AutoCompleteListProps = PopoverContentProps;\n\nexport const AutoCompleteList = forwardRef<AutoCompleteListProps, \"div\">(\n (props, forwardedRef) => {\n const { children, ...rest } = props;\n const { listRef, getListProps } = useAutoCompleteContext();\n const ref = useMergeRefs(forwardedRef, listRef);\n const listProps = getListProps();\n\n return (\n <PopoverContent ref={ref} {...baseStyles} {...listProps} {...rest}>\n {siblingInfo(children)}\n <EmptyState />\n </PopoverContent>\n );\n }\n);\n\nAutoCompleteList.displayName = \"AutoCompleteList\";\n\nconst baseStyles: PopoverContentProps = {\n mt: \"4\",\n py: \"4\",\n opacity: \"0\",\n bg: \"#232934\",\n rounded: \"md\",\n maxH: \"350px\",\n border: \"none\",\n shadow: \"base\",\n pos: \"absolute\",\n zIndex: \"popover\",\n overflowY: \"auto\",\n\n _light: {\n bg: \"#ffffff\",\n },\n\n _focus: {\n boxShadow: \"none\",\n },\n};\n","import React from \"react\";\n\nexport const siblingInfo = (children: React.ReactNode) => {\n return React.Children.map(children, (child: any, i) => {\n if (child.type.displayName === \"AutoCompleteGroup\") {\n const sibling: any = React.Children.toArray(children)[i + 1];\n return React.cloneElement(child, {\n groupSibling: sibling\n ? sibling.type.displayName === \"AutoCompleteGroup\"\n : false,\n });\n }\n return child;\n });\n};\n","import { WrapItem } from \"@chakra-ui/layout\";\nimport { Tag, TagCloseButton, TagLabel, TagProps } from \"@chakra-ui/tag\";\nimport { runIfFn } from \"@chakra-ui/utils\";\nimport React, { memo } from \"react\";\n\ntype AutoCompleteTagProps = {\n disabled?: boolean;\n label: string;\n onRemove?: () => void;\n} & TagProps;\n\nexport const AutoCompleteTag = memo((props: AutoCompleteTagProps) => {\n const { label, onRemove, disabled, ...rest } = props;\n\n return (\n <WrapItem>\n <Tag\n borderRadius=\"md\"\n fontWeight=\"normal\"\n {...(disabled && disabledStyles)}\n {...rest}\n >\n <TagLabel>{label}</TagLabel>\n <TagCloseButton\n onClick={() => !disabled && runIfFn(onRemove)}\n cursor=\"pointer\"\n {...(disabled && disabledStyles)}\n />\n </Tag>\n </WrapItem>\n );\n});\n\nconst disabledStyles: TagProps = {\n cursor: \"text\",\n userSelect: \"none\",\n opacity: 0.4,\n _focus: { boxShadow: \"none\" },\n};\n"],"names":["createContext","name","errorMessage","AutoCompleteProvider","useAutoCompleteContext","fuzzyScore","str1","str2","gramSize","getNGrams","s","len","repeat","toLowerCase","v","Array","length","i","slice","s2","pairs1","pairs2","set","Set","total","hits","getDefItemValue","item","Object","keys","toString","setEmphasis","children","query","isEmpty","replace","RegExp","match","defaultFilterMethod","itemValue","itemLabel","indexOf","getMultipleWrapStyles","themeInput","multiple","field","_focusWithin","_focus","pos","minH","py","spacing","cursor","h","hasFirstItem","firstItem","getChildDeep","child","type","displayName","props","value","hasLastItem","lastItem","useAutoComplete","autoCompleteProps","closeOnBlur","closeOnSelect","creatable","emphasize","emptyState","freeSolo","isReadOnly","listAllValuesOnFocus","maxSuggestions","defaultValue","defaultValues","onReady","shouldRenderSuggestions","suggestWhenEmpty","values","valuesProp","undefined","useDisclosure","defaultIsOpen","isOpen","onClose","onOpen","runIfFn","itemList","getChildrenDeep","map","itemObj","pick","getValue","finObj","isDefined","label","getItemList","inputRef","useRef","inputWrapperRef","listRef","interactionRef","useState","listAll","setListAll","defaultQuery","isUndefined","setQuery","filteredResults","filter","fixed","_","index","filteredList","noFilter","useControllableState","onChange","newValues","find","opt","items","val","setValues","_itemList$","focusedValue","setFocusedValue","maxSelections","focusedIndex","findIndex","nextItem","getNextItem","rollNavigation","prevItem","getPrevItem","getFirstItem","getLastItem","useUpdateEffect","useEffect","focusedItem","onOptionFocus","selectMethod","current","isNewInput","selectItem","optionValue","includes","option","focus","focusInputOnSelect","onSelectOption","removeItem","prevValues","onTagRemoved","tags","tag","onRemove","optionLabel","dim","useDimensions","getEmptyStateProps","defaultEmptyState","every","getGroupProps","hasItems","_child$props","hasChildren","divider","hasFirstChild","hasLastChild","group","display","getInputProps","onBlur","onFocus","onKeyDown","variant","rest","wrapper","ref","onClick","input","e","openOnFocus","selectOnFocus","target","select","listIsFocused","relatedTarget","inputWrapperIsFocused","_inputWrapperRef$curr","contains","newValue","queryIsEmpty","key","disabled","preventDefault","callAll","getItemProps","_fixed","itemChild","valueProp","onMouseOver","sx","_getValue","isFocused","isValidSuggestion","dangerouslySetInnerHTML","__html","_disabled","opacity","userSelect","mark","color","bg","isObject","fontWeight","_light","root","getListProps","width","marginBox","resetItems","focusInput","AutoComplete","forwardRef","context","useImperativeHandle","React","Popover","isLazy","autoFocus","placement","chakra","div","position","w","AutoCompleteItem","forwardedRef","itemRef","useMergeRefs","itemProps","scrollIntoView","behavior","block","console","warn","error","restProps","omit","Flex","baseItemStyles","mx","px","rounded","AutoCompleteCreatable","childrenProp","queryValue","queryExistsInList","some","AutoCompleteGroup","dividerStyles","useDividerStyles","Box","Divider","top","bottom","AutoCompleteGroupTitle","baseTitleStyles","ml","my","fontSize","letterSpacing","textTransform","hasGroupSibling","groupSibling","baseStyles","borderColor","dividerColor","mb","showDivider","AutoCompleteInput","inputProps","useMultiStyleConfig","Wrap","WrapItem","as","Input","id","EmptyState","emptyStyles","align","justify","fontStyle","AutoCompleteList","listProps","PopoverContent","Children","sibling","toArray","cloneElement","siblingInfo","mt","maxH","border","shadow","zIndex","overflowY","boxShadow","AutoCompleteTag","memo","Tag","borderRadius","disabledStyles","TagLabel","TagCloseButton"],"mappings":"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"}
1
+ {"version":3,"file":"chakra-autocomplete.cjs.production.min.js","sources":["../src/autocomplete-context.ts","../src/helpers/fuzzySearch.ts","../src/helpers/items.ts","../src/helpers/input.ts","../src/helpers/group.ts","../src/use-autocomplete.ts","../src/autocomplete.tsx","../src/autocomplete-item.tsx","../src/autocomplete-creatable.tsx","../src/autocomplete-group.tsx","../src/autocomplete-input.tsx","../src/components/empty-state.tsx","../src/autocomplete-list.tsx","../src/helpers/list.ts","../src/autocomplete-tag.tsx"],"sourcesContent":["import { createContext } from \"@chakra-ui/react-utils\";\nimport { UseAutoCompleteReturn } from \"./types\";\n\nexport const [AutoCompleteProvider, useAutoCompleteContext] = createContext<\n UseAutoCompleteReturn\n>({\n name: \"AutoCompleteContext\",\n errorMessage:\n \"useAutoCompleteContext: `context` is undefined. Seems you forgot to wrap all autoomplete components within `<AutoComplete />`\",\n});\n","/*\n * @param str1 The first string to compare.\n * @param str2 The second string to compare.\n * @param gramSize The size of the grams. Defaults to length 2.\n */\nexport function fuzzyScore(str1: string, str2: string, gramSize: number = 2) {\n function getNGrams(s: string, len: number) {\n s = \" \".repeat(len - 1) + s.toLowerCase() + \" \".repeat(len - 1);\n let v = new Array(s.length - len + 1);\n for (let i = 0; i < v.length; i++) {\n v[i] = s.slice(i, i + len);\n }\n return v;\n }\n\n if (!str1?.length || !str2?.length) {\n return 0.0;\n }\n\n //Order the strings by length so the order they're passed in doesn't matter\n //and so the smaller string's ngrams are always the ones in the set\n let s1 = str1.length < str2.length ? str1 : str2;\n let s2 = str1.length < str2.length ? str2 : str1;\n\n let pairs1 = getNGrams(s1, gramSize);\n let pairs2 = getNGrams(s2, gramSize);\n let set = new Set<string>(pairs1);\n\n let total = pairs2.length;\n let hits = 0;\n for (let item of pairs2) {\n if (set.delete(item)) {\n hits++;\n }\n }\n return hits / total;\n}\n","import { getChildrenDeep } from \"react-nanny\";\nimport { pick, isDefined, isEmpty } from \"@chakra-ui/utils\";\nimport { ReactNode } from \"react\";\nimport { FlexProps } from \"@chakra-ui/react\";\nimport { fuzzyScore } from \"./fuzzySearch\";\nimport { Item } from \"../types\";\nimport { AutoCompleteItemProps } from \"../autocomplete-item\";\n\nexport const getDefItemValue = (item: AutoCompleteItemProps[\"value\"]) =>\n (typeof item === \"string\" ? item : item[Object.keys(item)[0]]).toString();\n\nexport const setEmphasis = (children: any, query: string) => {\n if (typeof children !== \"string\" || isEmpty(query)) {\n return children;\n }\n const newChildren = children\n .toString()\n .replace(\n new RegExp(escapeRegex(query), \"gi\"),\n (match: any) => `<mark>${match}</mark>`\n );\n return newChildren;\n};\n\nexport const getItemList = (children: ReactNode) => {\n const itemChildren = getChildrenDeep(\n children,\n (child: any) => child?.type?.displayName === \"AutoCompleteItem\"\n );\n\n return itemChildren.map(item => {\n const itemObj = pick(item.props, [\"value\", \"label\", \"fixed\", \"disabled\"]);\n const { getValue = getDefItemValue } = item.props;\n const value = getValue(itemObj.value);\n const finObj = isDefined(itemObj.label)\n ? itemObj\n : { ...itemObj, label: value };\n return { ...finObj, value };\n });\n};\n\nexport const getFocusedStyles = (): FlexProps => {\n return {\n bg: \"whiteAlpha.100\",\n _light: {\n bg: \"gray.200\",\n },\n };\n};\n\nexport const defaultFilterMethod = (\n query: string,\n itemValue: Item[\"value\"],\n itemLabel: Item[\"label\"]\n) => {\n return (\n itemValue?.toLowerCase().indexOf(query?.toLowerCase()) >= 0 ||\n itemLabel?.toLowerCase().indexOf(query?.toLowerCase()) >= 0 ||\n fuzzyScore(query, itemValue) >= 0.5 ||\n fuzzyScore(query, itemLabel) >= 0.5\n );\n};\n\nfunction escapeRegex(string: string) {\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n","export const getMultipleWrapStyles = (themeInput: any, multiple?: boolean) => ({\n ...(multiple && {\n ...themeInput.field,\n _focusWithin: themeInput.field._focus,\n pos: \"relative\",\n minH: 9,\n // px: 3,\n py: 1.5,\n spacing: 3,\n }),\n cursor: \"text\",\n h: \"fit-content\",\n // w: \"full\",\n});\n","import { isDefined } from \"@chakra-ui/utils\";\nimport { getChildDeep } from \"react-nanny\";\nimport { ReactNode } from \"react\";\n\nexport const hasFirstItem = (children: ReactNode, firstItem: any) => {\n const result = getChildDeep(\n children,\n (child: any) =>\n child?.type?.displayName === \"AutoCompleteItem\" &&\n child.props.value === firstItem?.value\n );\n\n return result;\n};\nexport const hasLastItem = (children: ReactNode, lastItem: any) => {\n const result = getChildDeep(\n children,\n (child: any) =>\n child?.type?.displayName === \"AutoCompleteItem\" &&\n child.props.value === lastItem?.value\n );\n return result;\n};\n\nexport const hasChildren = (children: any, filteredList: any[]) => {\n return isDefined(\n getChildDeep(\n children,\n (child: any) =>\n filteredList.findIndex(i => i.value === child.props?.value) >= 0\n )\n );\n};\n","import {\n useDimensions,\n useDisclosure,\n useUpdateEffect,\n useControllableState,\n} from \"@chakra-ui/react\";\nimport {\n callAll,\n getFirstItem,\n getLastItem,\n getNextItem,\n getPrevItem,\n isObject,\n isEmpty,\n isUndefined,\n runIfFn,\n} from \"@chakra-ui/utils\";\nimport { omit } from \"@chakra-ui/utils\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { AutoCompleteProps } from \"./autocomplete\";\nimport {\n defaultFilterMethod,\n getDefItemValue,\n getFocusedStyles,\n getItemList,\n setEmphasis,\n} from \"./helpers/items\";\nimport { getMultipleWrapStyles } from \"./helpers/input\";\nimport { hasChildren, hasFirstItem, hasLastItem } from \"./helpers/group\";\nimport { Item, UseAutoCompleteReturn } from \"./types\";\n\n/**\n * useAutoComplete that provides all the state and focus management logic\n * for the autocomplete component. It is consumed by the `Autocomplete` component\n *\n */\n\nexport function useAutoComplete(\n autoCompleteProps: AutoCompleteProps\n): UseAutoCompleteReturn {\n let {\n closeOnBlur = true,\n closeOnSelect,\n creatable,\n emphasize,\n emptyState = true,\n freeSolo,\n isReadOnly,\n listAllValuesOnFocus,\n maxSuggestions,\n multiple,\n defaultValue,\n defaultValues = defaultValue ? [defaultValue] : [],\n onReady,\n defaultIsOpen,\n shouldRenderSuggestions = () => true,\n suggestWhenEmpty,\n value,\n values: valuesProp = value\n ? typeof value === \"string\"\n ? [value]\n : [...value]\n : undefined,\n } = autoCompleteProps;\n closeOnSelect = closeOnSelect ? closeOnSelect : multiple ? false : true;\n\n freeSolo = freeSolo ? freeSolo : multiple ? true : autoCompleteProps.freeSolo;\n\n const { isOpen, onClose, onOpen } = useDisclosure({ defaultIsOpen });\n\n const children = runIfFn(autoCompleteProps.children, {\n isOpen,\n onClose,\n onOpen,\n });\n const itemList: Item[] = getItemList(children);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const interactionRef = useRef<\"mouse\" | \"keyboard\" | null>(null);\n\n const [listAll, setListAll] = useState(false);\n\n let defaultQuery = \"\";\n if (multiple) defaultQuery = \"\";\n else if (!isUndefined(defaultValues)) defaultQuery = defaultValues[0];\n else if (!isUndefined(valuesProp)) defaultQuery = valuesProp[0];\n\n const [query, setQuery] = useState<string>(defaultQuery ?? \"\");\n const filteredResults = itemList\n .filter(\n i =>\n i.fixed ||\n runIfFn(\n autoCompleteProps.filter || defaultFilterMethod,\n query,\n i.value,\n i.label\n ) ||\n listAll\n )\n .filter((_, index) => (maxSuggestions ? index < maxSuggestions : true));\n\n // Add Creatable to Filtered List\n const creatableArr: Item[] = creatable\n ? [{ value: query, noFilter: true, creatable: true }]\n : [];\n\n const filteredList = [...filteredResults, ...creatableArr];\n const [values, setValues] = useControllableState({\n defaultValue: defaultValues,\n value: valuesProp,\n onChange: (newValues: any[]) => {\n const item = filteredList.find(opt => opt.value === newValues[0]);\n const items = newValues.map(val =>\n filteredList.find(opt => opt.value === val)\n );\n runIfFn(\n autoCompleteProps.onChange,\n multiple ? newValues : newValues[0],\n multiple ? items : item\n );\n },\n });\n\n const [focusedValue, setFocusedValue] = useState<Item[\"value\"]>(\n itemList[0]?.value\n );\n\n const maxSelections = autoCompleteProps.maxSelections || values.length + 1;\n\n const focusedIndex = filteredList.findIndex(i => i.value === focusedValue);\n const nextItem = getNextItem(\n focusedIndex,\n filteredList,\n !!autoCompleteProps.rollNavigation\n );\n const prevItem = getPrevItem(\n focusedIndex,\n filteredList,\n !!autoCompleteProps.rollNavigation\n );\n const firstItem = getFirstItem(filteredList);\n const lastItem = getLastItem(filteredList);\n\n useUpdateEffect(() => {\n setFocusedValue(firstItem?.value);\n }, [query]);\n\n useEffect(() => {\n const focusedItem = itemList.find(i => i.value === focusedValue);\n runIfFn(autoCompleteProps.onOptionFocus, {\n item: focusedItem!,\n focusMethod: interactionRef.current,\n isNewInput: focusedItem?.creatable,\n });\n }, [focusedValue, autoCompleteProps.onOptionFocus]);\n\n const selectItem = (optionValue: Item[\"value\"]) => {\n if (!values.includes(optionValue) && values.length < maxSelections) {\n setValues(v => (multiple ? [...v, optionValue] : [optionValue]));\n }\n\n const option = filteredList.find(i => i.value === optionValue);\n\n if (multiple) {\n inputRef.current?.focus();\n }\n if (autoCompleteProps.focusInputOnSelect) inputRef.current?.focus();\n runIfFn(autoCompleteProps.onSelectOption, {\n item: option!,\n selectMethod: interactionRef.current,\n isNewInput: option?.creatable,\n });\n if (option?.creatable) {\n runIfFn(autoCompleteProps.onCreateOption, {\n item: omit(option!, [\"noFilter\"]),\n selectMethod: interactionRef.current,\n });\n }\n console.log(option);\n const optionLabel = option?.label || option?.value;\n setQuery(() => (multiple ? \"\" : optionLabel ?? \"\"));\n\n if (closeOnSelect) onClose();\n };\n\n const removeItem = (itemValue: Item[\"value\"]) => {\n setValues(prevValues => {\n const item = itemList.find(opt => opt.value === itemValue);\n runIfFn(autoCompleteProps.onTagRemoved, itemValue, item, prevValues);\n return prevValues.filter(i => i !== itemValue);\n });\n if (query === itemValue) setQuery(\"\");\n };\n\n const resetItems = (focusInput?: boolean) => {\n setValues([]);\n if (focusInput) inputRef.current?.focus();\n };\n\n const tags = multiple\n ? values.map(tag => ({\n label: itemList.find(item => item.value === tag)?.label || tag,\n onRemove: () => removeItem(tag),\n }))\n : [];\n\n useEffect(() => {\n runIfFn(onReady, { tags });\n }, [values]);\n\n const getInputProps: UseAutoCompleteReturn[\"getInputProps\"] = (\n props,\n themeInput\n ) => {\n const { onBlur, onChange, onFocus, onKeyDown, variant, ...rest } = props;\n\n return {\n wrapper: {\n ref: inputWrapperRef,\n onClick: () => {\n inputRef?.current?.focus();\n },\n ...getMultipleWrapStyles(themeInput, multiple),\n ...rest,\n },\n input: {\n isReadOnly,\n onFocus: e => {\n runIfFn(onFocus, e);\n if (autoCompleteProps.openOnFocus && !isReadOnly) onOpen();\n if (autoCompleteProps.selectOnFocus) e.target.select();\n if (listAllValuesOnFocus) setListAll(true);\n },\n onBlur: e => {\n runIfFn(onBlur, e);\n const listIsFocused = e.relatedTarget === listRef?.current;\n const inputWrapperIsFocused = inputWrapperRef.current?.contains(\n e.relatedTarget as any\n );\n if (!listIsFocused && !inputWrapperIsFocused) {\n if (closeOnBlur) onClose();\n if (!values.includes(e.target.value) && !freeSolo)\n setQuery(getLastItem(values) ?? \"\");\n }\n },\n onChange: e => {\n const newValue = e.target.value;\n runIfFn(onChange, e);\n setQuery(newValue);\n const queryIsEmpty = isEmpty(newValue);\n if (\n runIfFn(shouldRenderSuggestions, newValue) &&\n (!queryIsEmpty || suggestWhenEmpty)\n )\n onOpen();\n else onClose();\n setListAll(false);\n },\n onKeyDown: e => {\n runIfFn(onKeyDown, e);\n interactionRef.current = \"keyboard\";\n\n const { key } = e;\n const focusedItem = filteredList[focusedIndex];\n if (key === \"Enter\") {\n if (focusedItem && !focusedItem?.disabled)\n selectItem(focusedItem?.value);\n else inputRef.current?.focus();\n e.preventDefault();\n return;\n }\n\n if (key === \"ArrowDown\") {\n setFocusedValue(nextItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"ArrowUp\") {\n setFocusedValue(prevItem?.value);\n\n e.preventDefault();\n return;\n }\n\n if (key === \"Tab\") {\n setFocusedValue(nextItem?.value);\n\n if (isOpen) e.preventDefault();\n return;\n }\n\n if (key === \"Home\") {\n setFocusedValue(firstItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"End\") {\n setFocusedValue(lastItem?.value);\n e.preventDefault();\n return;\n }\n\n if (key === \"Escape\") {\n callAll(onClose, e.preventDefault);\n }\n },\n value: query,\n variant: multiple ? \"unstyled\" : variant,\n ...rest,\n },\n };\n };\n\n const dim = useDimensions(inputWrapperRef, true);\n const getListProps: UseAutoCompleteReturn[\"getListProps\"] = () => {\n const width = dim?.marginBox.width as number;\n return {\n width,\n };\n };\n\n const getItemProps: UseAutoCompleteReturn[\"getItemProps\"] = (\n props,\n creatable\n ) => {\n const {\n _fixed,\n _focus,\n children: itemChild,\n disabled,\n label,\n value: valueProp,\n fixed,\n getValue = getDefItemValue,\n onClick,\n onMouseOver,\n sx,\n ...rest\n } = props;\n const value = creatable ? valueProp : getValue(valueProp)?.toString();\n const isFocused = value === focusedValue;\n const isValidSuggestion =\n filteredList.findIndex(i => i.value === value) >= 0;\n const itemLabel = itemChild || label || value;\n return {\n item: {\n ...(typeof itemLabel !== \"string\" || !emphasize\n ? { children: itemLabel }\n : {\n dangerouslySetInnerHTML: {\n __html: setEmphasis(itemLabel, query),\n },\n }),\n \"aria-selected\": values.includes(value),\n \"aria-disabled\": disabled,\n _disabled: { opacity: 0.4, cursor: \"not-allowed\", userSelect: \"none\" },\n onClick: e => {\n runIfFn(onClick, e);\n if (!disabled) selectItem(value);\n else inputRef.current?.focus();\n },\n onMouseOver: e => {\n runIfFn(onMouseOver, e);\n setFocusedValue(value);\n interactionRef.current = \"mouse\";\n },\n sx: {\n ...sx,\n mark: {\n color: \"inherit\",\n bg: \"transparent\",\n ...(isObject(emphasize)\n ? emphasize\n : {\n fontWeight: emphasize ? \"extrabold\" : \"inherit\",\n }),\n },\n },\n ...(isFocused && (_focus || getFocusedStyles())),\n ...(fixed && _fixed),\n ...rest,\n },\n root: {\n isValidSuggestion,\n value,\n },\n };\n };\n\n const getGroupProps: UseAutoCompleteReturn[\"getGroupProps\"] = props => {\n const hasItems = hasChildren(props.children, filteredList);\n return {\n divider: {\n hasFirstChild: hasFirstItem(props.children, firstItem),\n hasLastChild: hasLastItem(\n props.children,\n getLastItem(filteredList.filter(i => isUndefined(i?.noFilter)))\n ),\n },\n group: {\n display: hasItems ? \"initial\" : \"none\",\n },\n };\n };\n\n const getEmptyStateProps: UseAutoCompleteReturn[\"getEmptyStateProps\"] = defaultEmptyState => {\n const noSuggestions = filteredList.every(i => i.noFilter);\n if (noSuggestions && emptyState && !creatable) {\n return typeof emptyState === \"boolean\"\n ? defaultEmptyState\n : runIfFn(emptyState, { query });\n }\n };\n\n return {\n autoCompleteProps,\n children,\n filteredList,\n filteredResults,\n focusedValue,\n getEmptyStateProps,\n getGroupProps,\n getInputProps,\n getItemProps,\n getListProps,\n inputRef,\n interactionRef,\n isOpen,\n itemList,\n listRef,\n onClose,\n onOpen,\n query,\n removeItem,\n resetItems,\n setQuery,\n tags,\n values,\n };\n}\n","import React, { useImperativeHandle } from \"react\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\n\nimport { AutoCompleteProvider } from \"./autocomplete-context\";\nimport { useAutoComplete } from \"./use-autocomplete\";\nimport { chakra, forwardRef, Popover } from \"@chakra-ui/react\";\nimport { AutoCompleteRefMethods, UseAutoCompleteProps } from \"./types\";\n\nexport type AutoCompleteChildProps = {\n isOpen: boolean;\n onClose: () => void;\n onOpen: () => void;\n};\nexport interface AutoCompleteProps extends UseAutoCompleteProps {\n children: MaybeRenderProp<AutoCompleteChildProps>;\n ref?: React.RefObject<AutoCompleteRefMethods>;\n}\n\nexport const AutoComplete = forwardRef<AutoCompleteProps, \"div\">(\n (props, ref) => {\n const context = useAutoComplete(props);\n const {\n children,\n isOpen,\n onClose,\n onOpen,\n resetItems,\n removeItem,\n } = context;\n\n useImperativeHandle(ref, () => ({\n resetItems,\n removeItem,\n }));\n\n return (\n <AutoCompleteProvider value={context}>\n <Popover\n isLazy\n isOpen={isOpen}\n onClose={onClose}\n onOpen={onOpen}\n autoFocus={false}\n placement=\"bottom\"\n closeOnBlur={true}\n >\n <chakra.div\n sx={{\n \".chakra-popover__popper\": {\n position: \"unset !important\",\n },\n }}\n w=\"full\"\n ref={ref}\n >\n {children}\n </chakra.div>\n </Popover>\n </AutoCompleteProvider>\n );\n }\n);\n\nAutoComplete.displayName = \"AutoComplete\";\n","import {\n CSSObject,\n Flex,\n FlexProps,\n forwardRef,\n useMergeRefs,\n} from \"@chakra-ui/react\";\nimport { isUndefined, omit } from \"@chakra-ui/utils\";\nimport React, { useEffect, useRef } from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\n\nexport interface AutoCompleteItemProps extends FlexProps {\n value: any;\n label?: string;\n fixed?: boolean;\n _focus?: CSSObject | any;\n disabled?: boolean;\n _fixed?: CSSObject;\n getValue?: (item: AutoCompleteItemProps[\"value\"]) => any;\n}\n\nexport const AutoCompleteItem = forwardRef<AutoCompleteItemProps, \"div\">(\n (props, forwardedRef) => {\n const {\n focusedValue,\n getItemProps,\n interactionRef,\n } = useAutoCompleteContext();\n const itemRef = useRef<any>();\n const ref = useMergeRefs(forwardedRef, itemRef);\n\n const itemProps = getItemProps(props);\n const { isValidSuggestion, value } = itemProps.root;\n\n const isFocused = focusedValue === value;\n\n useEffect(() => {\n if (isFocused && interactionRef.current === \"keyboard\")\n itemRef?.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n }, [isFocused, interactionRef]);\n\n useEffect(() => {\n if (typeof value !== \"string\") console.warn(\"wow\");\n if (typeof value !== \"string\" && isUndefined(props.getValue))\n console.error(\n \"You must define the `getValue` prop, when an Item's value is not a string\"\n );\n }, []);\n\n const { children, dangerouslySetInnerHTML, ...restProps } = itemProps.item;\n\n const rest = omit(restProps, [\"groupId\"] as any);\n\n return isValidSuggestion ? (\n <Flex ref={ref} {...baseItemStyles} {...rest}>\n {children ? (\n children\n ) : (\n <span dangerouslySetInnerHTML={dangerouslySetInnerHTML} />\n )}\n </Flex>\n ) : null;\n }\n);\n\nAutoCompleteItem.displayName = \"AutoCompleteItem\";\n\nexport const baseItemStyles: FlexProps = {\n mx: \"2\",\n px: \"2\",\n py: \"2\",\n rounded: \"md\",\n cursor: \"pointer\",\n};\n","import { Flex, FlexProps } from \"@chakra-ui/react\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\nimport { isEmpty, runIfFn } from \"@chakra-ui/utils\";\n\nimport React from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { baseItemStyles } from \"./autocomplete-item\";\n\ninterface AutoCompleteCreatableProps extends FlexProps {\n children?: MaybeRenderProp<{ value: any }>;\n}\n\nexport function AutoCompleteCreatable(props: AutoCompleteCreatableProps) {\n const { children: childrenProp, ...rest } = props;\n const {\n autoCompleteProps,\n getItemProps,\n query,\n filteredResults,\n } = useAutoCompleteContext();\n\n const queryValue = <mark>{query}</mark>;\n const { children, ...itemProps } = getItemProps(\n {\n ...props,\n value: query,\n children: runIfFn(childrenProp, {\n value: queryValue,\n }),\n },\n true\n ).item;\n\n const queryExistsInList = filteredResults.some(i => i.value === query);\n const showCreatable =\n autoCompleteProps.creatable && !isEmpty(query) && !queryExistsInList;\n\n return showCreatable ? (\n <Flex {...baseItemStyles} {...itemProps} {...rest}>\n {children || `Add ${query}`}\n </Flex>\n ) : null;\n}\n\nAutoCompleteCreatable.displayName = \"AutoCompleteCreatable\";\n","import {\n Box,\n BoxProps,\n Divider,\n DividerProps,\n Flex,\n FlexProps,\n forwardRef,\n} from \"@chakra-ui/react\";\nimport { omit } from \"@chakra-ui/utils\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\n\nexport interface AutoCompleteGroupProps extends BoxProps {\n children?: React.ReactNode;\n showDivider?: boolean;\n dividerColor?: string;\n}\n\nexport const AutoCompleteGroup = forwardRef<AutoCompleteGroupProps, \"div\">(\n (props, ref) => {\n const { children, showDivider, ...restProps } = props;\n const rest = omit(restProps, [\"groupSibling\"] as any);\n\n const { getGroupProps } = useAutoCompleteContext();\n\n const { group } = getGroupProps(props);\n\n const dividerStyles = useDividerStyles(props);\n\n return (\n <Box ref={ref} {...group} {...rest}>\n <Divider {...dividerStyles.top} />\n {children}\n <Divider {...dividerStyles.bottom} />\n </Box>\n );\n }\n);\n\nexport const AutoCompleteGroupTitle = forwardRef<FlexProps, \"div\">(\n (props, ref) => {\n return <Flex {...baseTitleStyles} {...props} ref={ref} />;\n }\n);\n\nAutoCompleteGroup.displayName = \"AutoCompleteGroup\";\nAutoCompleteGroupTitle.displayName = \"AutoCompleteGroupTitle\";\n\nconst baseTitleStyles: FlexProps = {\n ml: 5,\n my: 1,\n fontSize: \"xs\",\n letterSpacing: \"wider\",\n fontWeight: \"extrabold\",\n textTransform: \"uppercase\",\n};\n\nconst useDividerStyles = (\n props: AutoCompleteGroupProps & { groupSibling?: boolean }\n) => {\n const { getGroupProps } = useAutoCompleteContext();\n\n const hasGroupSibling: unknown = props.groupSibling;\n\n const {\n divider: { hasFirstChild, hasLastChild },\n } = getGroupProps(props as AutoCompleteGroupProps);\n\n const baseStyles: DividerProps = {\n my: 2,\n borderColor: props.dividerColor,\n };\n\n const top = {\n ...baseStyles,\n mb: 4,\n display: !props.showDivider || hasFirstChild ? \"none\" : \"\",\n };\n const bottom = {\n ...baseStyles,\n display:\n !props.showDivider || hasLastChild || hasGroupSibling ? \"none\" : \"\",\n };\n\n return { top, bottom };\n};\n","import {\n CSSObject,\n forwardRef,\n Input,\n InputProps,\n useMergeRefs,\n useMultiStyleConfig,\n Wrap,\n WrapItem,\n} from \"@chakra-ui/react\";\nimport { runIfFn } from \"@chakra-ui/utils\";\nimport { MaybeRenderProp } from \"@chakra-ui/react-utils\";\nimport React from \"react\";\n\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { UseAutoCompleteReturn } from \"./types\";\n\nexport interface AutoCompleteInputProps extends InputProps {\n children?: MaybeRenderProp<{ tags: UseAutoCompleteReturn[\"tags\"] }>;\n wrapStyles?: CSSObject;\n}\n\nexport const AutoCompleteInput = forwardRef<AutoCompleteInputProps, \"input\">(\n (props, forwardedRef) => {\n const { inputRef, getInputProps, tags } = useAutoCompleteContext();\n\n // const ref = useMergeRefs(forwardedRef, inputRef);\n\n const { children: childrenProp, ...rest } = props;\n\n const themeInput: any = useMultiStyleConfig(\"Input\", props);\n\n const { wrapper, input: inputProps } = getInputProps(rest, themeInput);\n const { ref: wrapperRef, ...wrapperProps } = wrapper;\n const ref = useMergeRefs(forwardedRef, wrapperRef);\n\n const children = runIfFn(childrenProp, { tags });\n\n return (\n <Wrap {...wrapperProps} ref={ref}>\n {children}\n <WrapItem as={Input} {...(inputProps as any)} ref={inputRef} />\n </Wrap>\n );\n }\n);\n\nAutoCompleteInput.displayName = \"Input\";\n\nAutoCompleteInput.id = \"Input\";\n","import { Box, BoxProps, Flex, FlexProps } from \"@chakra-ui/layout\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"../autocomplete-context\";\n\nexport const EmptyState = (props: BoxProps) => {\n const { getEmptyStateProps } = useAutoCompleteContext();\n\n const emptyState = getEmptyStateProps(\n <Flex {...emptyStyles}>No options found!</Flex>\n );\n\n return <Box {...props}>{emptyState}</Box>;\n};\n\nconst emptyStyles: FlexProps = {\n fontSize: \"sm\",\n align: \"center\",\n justify: \"center\",\n fontWeight: \"bold\",\n fontStyle: \"italic\",\n};\n","import {\n forwardRef,\n PopoverContent,\n PopoverContentProps,\n useMergeRefs,\n} from \"@chakra-ui/react\";\nimport React from \"react\";\nimport { useAutoCompleteContext } from \"./autocomplete-context\";\nimport { EmptyState } from \"./components/empty-state\";\nimport { siblingInfo } from \"./helpers/list\";\n\nexport type AutoCompleteListProps = PopoverContentProps;\n\nexport const AutoCompleteList = forwardRef<AutoCompleteListProps, \"div\">(\n (props, forwardedRef) => {\n const { children, ...rest } = props;\n const { listRef, getListProps } = useAutoCompleteContext();\n const ref = useMergeRefs(forwardedRef, listRef);\n const listProps = getListProps();\n\n return (\n <PopoverContent ref={ref} {...baseStyles} {...listProps} {...rest}>\n {siblingInfo(children)}\n <EmptyState />\n </PopoverContent>\n );\n }\n);\n\nAutoCompleteList.displayName = \"AutoCompleteList\";\n\nconst baseStyles: PopoverContentProps = {\n mt: \"4\",\n py: \"4\",\n opacity: \"0\",\n bg: \"#232934\",\n rounded: \"md\",\n maxH: \"350px\",\n border: \"none\",\n shadow: \"base\",\n pos: \"absolute\",\n zIndex: \"popover\",\n overflowY: \"auto\",\n\n _light: {\n bg: \"#ffffff\",\n },\n\n _focus: {\n boxShadow: \"none\",\n },\n};\n","import React from \"react\";\n\nexport const siblingInfo = (children: React.ReactNode) => {\n return React.Children.map(children, (child: any, i) => {\n if (child.type.displayName === \"AutoCompleteGroup\") {\n const sibling: any = React.Children.toArray(children)[i + 1];\n return React.cloneElement(child, {\n groupSibling: sibling\n ? sibling.type.displayName === \"AutoCompleteGroup\"\n : false,\n });\n }\n return child;\n });\n};\n","import { WrapItem } from \"@chakra-ui/layout\";\nimport { Tag, TagCloseButton, TagLabel, TagProps } from \"@chakra-ui/tag\";\nimport { runIfFn } from \"@chakra-ui/utils\";\nimport React, { memo } from \"react\";\n\ntype AutoCompleteTagProps = {\n disabled?: boolean;\n label: string;\n onRemove?: () => void;\n} & TagProps;\n\nexport const AutoCompleteTag = memo((props: AutoCompleteTagProps) => {\n const { label, onRemove, disabled, ...rest } = props;\n\n return (\n <WrapItem>\n <Tag\n borderRadius=\"md\"\n fontWeight=\"normal\"\n {...(disabled && disabledStyles)}\n {...rest}\n >\n <TagLabel>{label}</TagLabel>\n <TagCloseButton\n onClick={() => !disabled && runIfFn(onRemove)}\n cursor=\"pointer\"\n {...(disabled && disabledStyles)}\n />\n </Tag>\n </WrapItem>\n );\n});\n\nconst disabledStyles: TagProps = {\n cursor: \"text\",\n userSelect: \"none\",\n opacity: 0.4,\n _focus: { boxShadow: \"none\" },\n};\n"],"names":["createContext","name","errorMessage","AutoCompleteProvider","useAutoCompleteContext","fuzzyScore","str1","str2","gramSize","getNGrams","s","len","repeat","toLowerCase","v","Array","length","i","slice","s2","pairs1","pairs2","set","Set","total","hits","getDefItemValue","item","Object","keys","toString","setEmphasis","children","query","isEmpty","replace","RegExp","match","defaultFilterMethod","itemValue","itemLabel","indexOf","getMultipleWrapStyles","themeInput","multiple","field","_focusWithin","_focus","pos","minH","py","spacing","cursor","h","hasFirstItem","firstItem","getChildDeep","child","type","displayName","props","value","hasLastItem","lastItem","useAutoComplete","autoCompleteProps","closeOnBlur","closeOnSelect","creatable","emphasize","emptyState","freeSolo","isReadOnly","listAllValuesOnFocus","maxSuggestions","defaultValue","defaultValues","onReady","defaultIsOpen","shouldRenderSuggestions","suggestWhenEmpty","values","valuesProp","undefined","useDisclosure","isOpen","onClose","onOpen","runIfFn","itemList","getChildrenDeep","map","itemObj","pick","getValue","finObj","isDefined","label","getItemList","inputRef","useRef","inputWrapperRef","listRef","interactionRef","useState","listAll","setListAll","defaultQuery","isUndefined","setQuery","filteredResults","filter","fixed","_","index","filteredList","noFilter","useControllableState","onChange","newValues","find","opt","items","val","setValues","_itemList$","focusedValue","setFocusedValue","maxSelections","focusedIndex","findIndex","nextItem","getNextItem","rollNavigation","prevItem","getPrevItem","getFirstItem","getLastItem","useUpdateEffect","useEffect","focusedItem","onOptionFocus","focusMethod","current","isNewInput","selectItem","optionValue","includes","option","focus","focusInputOnSelect","onSelectOption","selectMethod","onCreateOption","omit","console","log","optionLabel","removeItem","prevValues","onTagRemoved","tags","tag","onRemove","dim","useDimensions","getEmptyStateProps","defaultEmptyState","every","getGroupProps","hasItems","_child$props","hasChildren","divider","hasFirstChild","hasLastChild","group","display","getInputProps","onBlur","onFocus","onKeyDown","variant","rest","wrapper","ref","onClick","input","e","openOnFocus","selectOnFocus","target","select","listIsFocused","relatedTarget","inputWrapperIsFocused","_inputWrapperRef$curr","contains","newValue","queryIsEmpty","key","disabled","preventDefault","callAll","getItemProps","_fixed","itemChild","valueProp","onMouseOver","sx","_getValue","isFocused","isValidSuggestion","dangerouslySetInnerHTML","__html","_disabled","opacity","userSelect","mark","color","bg","isObject","fontWeight","_light","root","getListProps","width","marginBox","resetItems","focusInput","AutoComplete","forwardRef","context","useImperativeHandle","React","Popover","isLazy","autoFocus","placement","chakra","div","position","w","AutoCompleteItem","forwardedRef","itemRef","useMergeRefs","itemProps","scrollIntoView","behavior","block","warn","error","restProps","Flex","baseItemStyles","mx","px","rounded","AutoCompleteCreatable","childrenProp","queryValue","queryExistsInList","some","AutoCompleteGroup","dividerStyles","useDividerStyles","Box","Divider","top","bottom","AutoCompleteGroupTitle","baseTitleStyles","ml","my","fontSize","letterSpacing","textTransform","hasGroupSibling","groupSibling","baseStyles","borderColor","dividerColor","mb","showDivider","AutoCompleteInput","useMultiStyleConfig","inputProps","wrapperRef","wrapperProps","Wrap","WrapItem","as","Input","id","EmptyState","emptyStyles","align","justify","fontStyle","AutoCompleteList","listProps","PopoverContent","Children","sibling","toArray","cloneElement","siblingInfo","mt","maxH","border","shadow","zIndex","overflowY","boxShadow","AutoCompleteTag","memo","Tag","borderRadius","disabledStyles","TagLabel","TagCloseButton"],"mappings":"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"}
@@ -253,7 +253,7 @@ function useAutoComplete(autoCompleteProps) {
253
253
  suggestWhenEmpty = autoCompleteProps.suggestWhenEmpty,
254
254
  value = autoCompleteProps.value,
255
255
  _autoCompleteProps$va = autoCompleteProps.values,
256
- valuesProp = _autoCompleteProps$va === void 0 ? value ? [value] : undefined : _autoCompleteProps$va;
256
+ valuesProp = _autoCompleteProps$va === void 0 ? value ? typeof value === "string" ? [value] : [].concat(value) : undefined : _autoCompleteProps$va;
257
257
  closeOnSelect = closeOnSelect ? closeOnSelect : multiple ? false : true;
258
258
  freeSolo = freeSolo ? freeSolo : multiple ? true : autoCompleteProps.freeSolo;
259
259
 
@@ -294,7 +294,8 @@ function useAutoComplete(autoCompleteProps) {
294
294
 
295
295
  var creatableArr = creatable ? [{
296
296
  value: query,
297
- noFilter: true
297
+ noFilter: true,
298
+ creatable: true
298
299
  }] : [];
299
300
  var filteredList = [].concat(filteredResults, creatableArr);
300
301
 
@@ -337,8 +338,8 @@ function useAutoComplete(autoCompleteProps) {
337
338
  });
338
339
  runIfFn(autoCompleteProps.onOptionFocus, {
339
340
  item: focusedItem,
340
- selectMethod: interactionRef.current,
341
- isNewInput: false
341
+ focusMethod: interactionRef.current,
342
+ isNewInput: focusedItem == null ? void 0 : focusedItem.creatable
342
343
  });
343
344
  }, [focusedValue, autoCompleteProps.onOptionFocus]);
344
345
 
@@ -365,7 +366,20 @@ function useAutoComplete(autoCompleteProps) {
365
366
  runIfFn(autoCompleteProps.onSelectOption, {
366
367
  item: option,
367
368
  selectMethod: interactionRef.current,
368
- isNewInput: false
369
+ isNewInput: option == null ? void 0 : option.creatable
370
+ });
371
+
372
+ if (option != null && option.creatable) {
373
+ runIfFn(autoCompleteProps.onCreateOption, {
374
+ item: omit(option, ["noFilter"]),
375
+ selectMethod: interactionRef.current
376
+ });
377
+ }
378
+
379
+ console.log(option);
380
+ var optionLabel = (option == null ? void 0 : option.label) || (option == null ? void 0 : option.value);
381
+ setQuery(function () {
382
+ return multiple ? "" : optionLabel != null ? optionLabel : "";
369
383
  });
370
384
  if (closeOnSelect) onClose();
371
385
  };
@@ -406,13 +420,6 @@ function useAutoComplete(autoCompleteProps) {
406
420
  runIfFn(onReady, {
407
421
  tags: tags
408
422
  });
409
- var item = filteredList.find(function (opt) {
410
- return opt.value === values[0];
411
- });
412
- var optionLabel = (item == null ? void 0 : item.label) || (item == null ? void 0 : item.value);
413
- setQuery(function () {
414
- return multiple ? "" : optionLabel != null ? optionLabel : "";
415
- });
416
423
  }, [values]);
417
424
 
418
425
  var getInputProps = function getInputProps(props, themeInput) {
@@ -457,7 +464,7 @@ function useAutoComplete(autoCompleteProps) {
457
464
  onChange: function onChange(e) {
458
465
  var newValue = e.target.value;
459
466
  runIfFn(_onChange, e);
460
- setQuery(e.target.value);
467
+ setQuery(newValue);
461
468
  var queryIsEmpty = isEmpty(newValue);
462
469
  if (runIfFn(shouldRenderSuggestions, newValue) && (!queryIsEmpty || suggestWhenEmpty)) onOpen();else onClose();
463
470
  setListAll(false);
@@ -824,7 +831,8 @@ var useDividerStyles = function useDividerStyles(props) {
824
831
  };
825
832
  };
826
833
 
827
- var _excluded$4 = ["children"];
834
+ var _excluded$4 = ["children"],
835
+ _excluded2$2 = ["ref"];
828
836
  var AutoCompleteInput = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
829
837
  var _useAutoCompleteConte = useAutoCompleteContext(),
830
838
  inputRef = _useAutoCompleteConte.inputRef,
@@ -836,15 +844,23 @@ var AutoCompleteInput = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
836
844
  rest = _objectWithoutPropertiesLoose(props, _excluded$4);
837
845
 
838
846
  var themeInput = useMultiStyleConfig("Input", props);
839
- var inputProps = getInputProps(rest, themeInput);
847
+
848
+ var _getInputProps = getInputProps(rest, themeInput),
849
+ wrapper = _getInputProps.wrapper,
850
+ inputProps = _getInputProps.input;
851
+
852
+ var wrapperRef = wrapper.ref,
853
+ wrapperProps = _objectWithoutPropertiesLoose(wrapper, _excluded2$2);
854
+
855
+ var ref = useMergeRefs(forwardedRef, wrapperRef);
840
856
  var children = runIfFn(childrenProp, {
841
857
  tags: tags
842
858
  });
843
- return React.createElement(Wrap, Object.assign({}, inputProps.wrapper, {
844
- ref: forwardedRef
859
+ return React.createElement(Wrap, Object.assign({}, wrapperProps, {
860
+ ref: ref
845
861
  }), children, React.createElement(WrapItem, Object.assign({
846
862
  as: Input
847
- }, inputProps.input, {
863
+ }, inputProps, {
848
864
  ref: inputRef
849
865
  })));
850
866
  });