@choc-ui/chakra-autocomplete 4.16.0 → 4.17.1
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/README.md +9 -2
- package/dist/chakra-autocomplete.cjs.development.js +29 -9
- package/dist/chakra-autocomplete.cjs.development.js.map +1 -1
- package/dist/chakra-autocomplete.cjs.production.min.js +1 -1
- package/dist/chakra-autocomplete.cjs.production.min.js.map +1 -1
- package/dist/chakra-autocomplete.esm.js +30 -10
- package/dist/chakra-autocomplete.esm.js.map +1 -1
- package/dist/helpers/items.d.ts +1 -6
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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 { 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 restoreOnBlurIfEmpty = true,\n shouldRenderSuggestions = () => true,\n submitKeys = [],\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\n const optionLabel = option?.label || option?.value;\n setQuery(() => (multiple ? \"\" : optionLabel ?? \"\"));\n\n if (closeOnSelect) onClose();\n };\n\n const removeItem: UseAutoCompleteReturn[\"removeItem\"] = (\n itemValue,\n focusInput\n ) => {\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 if (focusInput) inputRef.current?.focus();\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 (\n !values.includes(e.target.value) &&\n !freeSolo &&\n restoreOnBlurIfEmpty\n ) {\n const latestValue = getLastItem(values);\n const latestValueItem = itemList.find(\n i => i.value === latestValue\n );\n const latestValueLabel =\n latestValueItem?.label || latestValueItem?.value || \"\";\n setQuery(latestValueLabel);\n }\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 ([\"Enter\", ...submitKeys].includes(key)) {\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, inputRef);\n\n const children = runIfFn(childrenProp, { tags });\n\n return (\n <Wrap {...wrapperProps} ref={wrapperRef}>\n {children}\n <WrapItem as={Input} {...(inputProps as any)} ref={ref} />\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","restoreOnBlurIfEmpty","shouldRenderSuggestions","submitKeys","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","optionLabel","removeItem","focusInput","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","latestValue","latestValueItem","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","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","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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"}
|
|
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): Item[] => {\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, originalValue: itemObj.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 restoreOnBlurIfEmpty = !freeSolo,\n shouldRenderSuggestions = () => true,\n submitKeys = [],\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((i, index) => (maxSuggestions ? i.fixed || 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 if (!isOpen) setFocusedValue(itemList[0]?.value);\n }, [isOpen]);\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\n const optionLabel = option?.label || option?.value;\n setQuery(() => (multiple ? \"\" : optionLabel ?? \"\"));\n\n if (closeOnSelect) onClose();\n };\n\n const removeItem: UseAutoCompleteReturn[\"removeItem\"] = (\n itemValue,\n focusInput\n ) => {\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 if (focusInput) inputRef.current?.focus();\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) && restoreOnBlurIfEmpty) {\n const latestValue = getLastItem(values);\n const latestValueItem = itemList.find(\n i => i.value === latestValue\n );\n const latestValueLabel =\n latestValueItem?.label || latestValueItem?.value || \"\";\n setQuery(latestValueLabel);\n }\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 ([\"Enter\", ...submitKeys].includes(key)) {\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) {\n if (focusedItem.value === lastItem?.value) {\n console.log(\"last\");\n }\n e.preventDefault();\n }\n\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 wrapperDim = useDimensions(inputWrapperRef, true);\n const inputDim = useDimensions(inputRef, true);\n const getListProps: UseAutoCompleteReturn[\"getListProps\"] = () => {\n const width = autoCompleteProps.multiple\n ? (wrapperDim?.marginBox.width as number)\n : (inputDim?.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 {\n autoCompleteProps,\n inputRef,\n getInputProps,\n tags,\n } = 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, inputRef);\n\n const children = runIfFn(childrenProp, { tags });\n\n const simpleInput = <Input {...(inputProps as any)} ref={ref} />;\n\n const multipleInput = (\n <Wrap {...wrapperProps} ref={wrapperRef}>\n {children}\n <WrapItem as={Input} {...(inputProps as any)} ref={ref} />\n </Wrap>\n );\n\n return <>{autoCompleteProps.multiple ? multipleInput : simpleInput}</>;\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","restoreOnBlurIfEmpty","shouldRenderSuggestions","submitKeys","suggestWhenEmpty","values","valuesProp","undefined","useDisclosure","isOpen","onClose","onOpen","runIfFn","itemList","getChildrenDeep","map","itemObj","pick","getValue","finObj","isDefined","label","originalValue","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","_itemList$2","focusedItem","onOptionFocus","focusMethod","current","isNewInput","selectItem","optionValue","includes","option","focus","focusInputOnSelect","onSelectOption","selectMethod","onCreateOption","omit","optionLabel","removeItem","focusInput","prevValues","onTagRemoved","tags","tag","onRemove","wrapperDim","useDimensions","inputDim","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","latestValue","latestValueItem","newValue","queryIsEmpty","key","disabled","preventDefault","console","log","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","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","simpleInput","Input","multipleInput","Wrap","WrapItem","as","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,6 +1,6 @@
|
|
|
1
1
|
import React, { useRef, useState, useEffect, useImperativeHandle, memo } from 'react';
|
|
2
2
|
import { createContext } from '@chakra-ui/react-utils';
|
|
3
|
-
import { useDisclosure, useControllableState, useUpdateEffect, useDimensions, forwardRef, Popover, chakra, useMergeRefs, Flex, Box, Divider, useMultiStyleConfig, Wrap, WrapItem,
|
|
3
|
+
import { useDisclosure, useControllableState, useUpdateEffect, useDimensions, forwardRef, Popover, chakra, useMergeRefs, Flex, Box, Divider, useMultiStyleConfig, Input, Wrap, WrapItem, PopoverContent } from '@chakra-ui/react';
|
|
4
4
|
import { pick, isDefined, isEmpty, runIfFn, isUndefined, getNextItem, getPrevItem, getFirstItem, getLastItem, callAll, isObject, omit } from '@chakra-ui/utils';
|
|
5
5
|
import { getChildrenDeep, getChildDeep } from 'react-nanny';
|
|
6
6
|
import { Flex as Flex$1, Box as Box$1, WrapItem as WrapItem$1 } from '@chakra-ui/layout';
|
|
@@ -158,7 +158,8 @@ var getItemList = function getItemList(children) {
|
|
|
158
158
|
label: value
|
|
159
159
|
});
|
|
160
160
|
return _extends({}, finObj, {
|
|
161
|
-
value: value
|
|
161
|
+
value: value,
|
|
162
|
+
originalValue: itemObj.value
|
|
162
163
|
});
|
|
163
164
|
});
|
|
164
165
|
};
|
|
@@ -247,7 +248,7 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
247
248
|
onReady = autoCompleteProps.onReady,
|
|
248
249
|
defaultIsOpen = autoCompleteProps.defaultIsOpen,
|
|
249
250
|
_autoCompleteProps$re = autoCompleteProps.restoreOnBlurIfEmpty,
|
|
250
|
-
restoreOnBlurIfEmpty = _autoCompleteProps$re === void 0 ?
|
|
251
|
+
restoreOnBlurIfEmpty = _autoCompleteProps$re === void 0 ? !freeSolo : _autoCompleteProps$re,
|
|
251
252
|
_autoCompleteProps$sh = autoCompleteProps.shouldRenderSuggestions,
|
|
252
253
|
shouldRenderSuggestions = _autoCompleteProps$sh === void 0 ? function () {
|
|
253
254
|
return true;
|
|
@@ -292,8 +293,8 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
292
293
|
|
|
293
294
|
var filteredResults = itemList.filter(function (i) {
|
|
294
295
|
return i.fixed || runIfFn(autoCompleteProps.filter || defaultFilterMethod, query, i.value, i.label) || listAll;
|
|
295
|
-
}).filter(function (
|
|
296
|
-
return maxSuggestions ? index < maxSuggestions : true;
|
|
296
|
+
}).filter(function (i, index) {
|
|
297
|
+
return maxSuggestions ? i.fixed || index < maxSuggestions : true;
|
|
297
298
|
}); // Add Creatable to Filtered List
|
|
298
299
|
|
|
299
300
|
var creatableArr = creatable ? [{
|
|
@@ -336,6 +337,11 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
336
337
|
useUpdateEffect(function () {
|
|
337
338
|
setFocusedValue(firstItem == null ? void 0 : firstItem.value);
|
|
338
339
|
}, [query]);
|
|
340
|
+
useEffect(function () {
|
|
341
|
+
var _itemList$2;
|
|
342
|
+
|
|
343
|
+
if (!isOpen) setFocusedValue((_itemList$2 = itemList[0]) == null ? void 0 : _itemList$2.value);
|
|
344
|
+
}, [isOpen]);
|
|
339
345
|
useEffect(function () {
|
|
340
346
|
var focusedItem = itemList.find(function (i) {
|
|
341
347
|
return i.value === focusedValue;
|
|
@@ -463,7 +469,7 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
463
469
|
if (!listIsFocused && !inputWrapperIsFocused) {
|
|
464
470
|
if (closeOnBlur) onClose();
|
|
465
471
|
|
|
466
|
-
if (!values.includes(e.target.value) &&
|
|
472
|
+
if (!values.includes(e.target.value) && restoreOnBlurIfEmpty) {
|
|
467
473
|
var latestValue = getLastItem(values);
|
|
468
474
|
var latestValueItem = itemList.find(function (i) {
|
|
469
475
|
return i.value === latestValue;
|
|
@@ -509,7 +515,15 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
509
515
|
|
|
510
516
|
if (key === "Tab") {
|
|
511
517
|
setFocusedValue(nextItem == null ? void 0 : nextItem.value);
|
|
512
|
-
|
|
518
|
+
|
|
519
|
+
if (isOpen) {
|
|
520
|
+
if (focusedItem.value === (lastItem == null ? void 0 : lastItem.value)) {
|
|
521
|
+
console.log("last");
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
e.preventDefault();
|
|
525
|
+
}
|
|
526
|
+
|
|
513
527
|
return;
|
|
514
528
|
}
|
|
515
529
|
|
|
@@ -535,10 +549,11 @@ function useAutoComplete(autoCompleteProps) {
|
|
|
535
549
|
};
|
|
536
550
|
};
|
|
537
551
|
|
|
538
|
-
var
|
|
552
|
+
var wrapperDim = useDimensions(inputWrapperRef, true);
|
|
553
|
+
var inputDim = useDimensions(inputRef, true);
|
|
539
554
|
|
|
540
555
|
var getListProps = function getListProps() {
|
|
541
|
-
var width =
|
|
556
|
+
var width = autoCompleteProps.multiple ? wrapperDim == null ? void 0 : wrapperDim.marginBox.width : inputDim == null ? void 0 : inputDim.marginBox.width;
|
|
542
557
|
return {
|
|
543
558
|
width: width
|
|
544
559
|
};
|
|
@@ -847,6 +862,7 @@ var _excluded$4 = ["children"],
|
|
|
847
862
|
_excluded2$2 = ["ref"];
|
|
848
863
|
var AutoCompleteInput = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
849
864
|
var _useAutoCompleteConte = useAutoCompleteContext(),
|
|
865
|
+
autoCompleteProps = _useAutoCompleteConte.autoCompleteProps,
|
|
850
866
|
inputRef = _useAutoCompleteConte.inputRef,
|
|
851
867
|
getInputProps = _useAutoCompleteConte.getInputProps,
|
|
852
868
|
tags = _useAutoCompleteConte.tags; // const ref = useMergeRefs(forwardedRef, inputRef);
|
|
@@ -868,13 +884,17 @@ var AutoCompleteInput = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
|
|
|
868
884
|
var children = runIfFn(childrenProp, {
|
|
869
885
|
tags: tags
|
|
870
886
|
});
|
|
871
|
-
|
|
887
|
+
var simpleInput = React.createElement(Input, Object.assign({}, inputProps, {
|
|
888
|
+
ref: ref
|
|
889
|
+
}));
|
|
890
|
+
var multipleInput = React.createElement(Wrap, Object.assign({}, wrapperProps, {
|
|
872
891
|
ref: wrapperRef
|
|
873
892
|
}), children, React.createElement(WrapItem, Object.assign({
|
|
874
893
|
as: Input
|
|
875
894
|
}, inputProps, {
|
|
876
895
|
ref: ref
|
|
877
896
|
})));
|
|
897
|
+
return React.createElement(React.Fragment, null, autoCompleteProps.multiple ? multipleInput : simpleInput);
|
|
878
898
|
});
|
|
879
899
|
AutoCompleteInput.displayName = "Input";
|
|
880
900
|
AutoCompleteInput.id = "Input";
|