@choc-ui/chakra-autocomplete 4.12.0 → 4.15.2

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\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 }]\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 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","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","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) => {\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 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 (!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 ([\"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","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","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":"0UAG8DA,gBAE5D,CACAC,KAAM,sBACNC,aACE,kIALUC,OAAsBC,ocCEpC,SAAgBC,EAAWC,EAAcC,EAAcC,YAC5CC,EAAUC,EAAWC,GAC5BD,EAAI,IAAIE,OAAOD,EAAM,GAAKD,EAAEG,cAAgB,IAAID,OAAOD,EAAM,WACzDG,EAAI,IAAIC,MAAML,EAAEM,OAASL,EAAM,GAC1BM,EAAI,EAAGA,EAAIH,EAAEE,OAAQC,IAC5BH,EAAEG,GAAKP,EAAEQ,MAAMD,EAAGA,EAAIN,UAEjBG,cAP4CN,IAAAA,EAAmB,SAUnEF,IAAAA,EAAMU,cAAWT,IAAAA,EAAMS,cACnB,YAMLG,EAAKb,EAAKU,OAAST,EAAKS,OAAST,EAAOD,EAExCc,EAASX,EAHJH,EAAKU,OAAST,EAAKS,OAASV,EAAOC,EAGjBC,GACvBa,EAASZ,EAAUU,EAAIX,GACvBc,EAAM,IAAIC,IAAYH,GAEtBI,EAAQH,EAAOL,OACfS,EAAO,wrBACMJ,kBACXC,mBACFG,WAGGA,EAAOD,EC3BT,IAAME,EAAkB,SAACC,UACb,iBAATA,EAAoBA,EAAOA,EAAKC,OAAOC,KAAKF,GAAM,KAAKG,YAEpDC,EAAc,SAACC,EAAeC,SACjB,iBAAbD,GAAyBE,UAAQD,GACnCD,EAEWA,EACjBF,WACAK,QACC,IAAIC,OAAmBH,EA8CbE,QAAQ,yBAA0B,QA9Cb,OAC/B,SAACE,kBAAwBA,gBA+BlBC,EAAsB,SACjCL,EACAM,EACAC,gBAGED,SAAAA,EAAW1B,cAAc4B,cAAQR,SAAAA,EAAOpB,iBAAkB,UAC1D2B,SAAAA,EAAW3B,cAAc4B,cAAQR,SAAAA,EAAOpB,iBAAkB,GAC1DR,EAAW4B,EAAOM,IAAc,IAChClC,EAAW4B,EAAOO,IAAc,IC3DvBE,EAAwB,SAACC,EAAiBC,eACjDA,QACCD,EAAWE,OACdC,aAAcH,EAAWE,MAAME,OAC/BC,IAAK,WACLC,KAAM,EAENC,GAAI,IACJC,QAAS,KAEXC,OAAQ,OACRC,EAAG,iBCPQC,EAAe,SAACtB,EAAqBuB,UACjCC,eACbxB,GACA,SAACyB,eAC8B,4BAA7BA,YAAAA,EAAOC,eAAMC,cACbF,EAAMG,MAAMC,eAAUN,SAAAA,EAAWM,WAK1BC,EAAc,SAAC9B,EAAqB+B,UAChCP,eACbxB,GACA,SAACyB,eAC8B,4BAA7BA,YAAAA,EAAOC,eAAMC,cACbF,EAAMG,MAAMC,eAAUE,SAAAA,EAAUF,wLCoBtBG,EACdC,aA0BIA,EAvBFC,YAAAA,gBACAC,EAsBEF,EAtBFE,cACAC,EAqBEH,EArBFG,UACAC,EAoBEJ,EApBFI,YAoBEJ,EAnBFK,WAAAA,gBACAC,EAkBEN,EAlBFM,SACAC,EAiBEP,EAjBFO,WACAC,EAgBER,EAhBFQ,qBACAC,EAeET,EAfFS,eACA9B,EAcEqB,EAdFrB,SACA+B,EAaEV,EAbFU,eAaEV,EAZFW,cAAAA,aAAgBD,EAAe,CAACA,GAAgB,KAChDE,EAWEZ,EAXFY,QACAC,EAUEb,EAVFa,gBAUEb,EATFc,wBAAAA,aAA0B,kBAAM,OAS9Bd,EARFe,WAAAA,aAAa,KACbC,EAOEhB,EAPFgB,iBACApB,EAMEI,EANFJ,QAMEI,EALFiB,OAAQC,aAAatB,EACA,iBAAVA,EACL,CAACA,aACGA,QACNuB,IAENjB,EAAgBA,IAAgCvB,EAEhD2B,EAAWA,KAAsB3B,GAAkBqB,EAAkBM,eAEjCc,gBAAc,CAAEP,cAAAA,IAA5CQ,IAAAA,OAAQC,IAAAA,QAASC,IAAAA,OAEnBxD,EAAWyD,UAAQxB,EAAkBjC,SAAU,CACnDsD,OAAAA,EACAC,QAAAA,EACAC,OAAAA,IAEIE,EHtDmB,SAAC1D,UACL2D,kBACnB3D,GACA,SAACyB,eAA4C,4BAA7BA,YAAAA,EAAOC,eAAMC,gBAGXiC,KAAI,SAAAjE,OAChBkE,EAAUC,OAAKnE,EAAKiC,MAAO,CAAC,QAAS,QAAS,QAAS,eACtBjC,EAAKiC,MAApCmC,SACFlC,cADanC,KACImE,EAAQhC,OACzBmC,EAASC,YAAUJ,EAAQK,OAC7BL,OACKA,GAASK,MAAOrC,gBACbmC,GAAQnC,MAAAA,OGyCGsC,CAAYnE,GAE/BoE,EAAWC,SAAyB,MACpCC,EAAkBD,SAAuB,MACzCE,EAAUF,SAAuB,MACjCG,EAAiBH,SAAoC,QAE7BI,YAAS,GAAhCC,OAASC,QAEZC,GAAe,GACfhE,EAAUgE,GAAe,GACnBC,cAAYjC,GACZiC,cAAY1B,KAAayB,GAAezB,EAAW,IADvByB,GAAehC,EAAc,UAGzC6B,oBAAiBG,MAAgB,IAApD3E,SAAO6E,SACRC,GAAkBrB,EACrBsB,QACC,SAAA/F,UACEA,EAAEgG,OACFxB,UACExB,EAAkB+C,QAAU1E,EAC5BL,GACAhB,EAAE4C,MACF5C,EAAEiF,QAEJQ,KAEHM,QAAO,SAACE,EAAGC,UAAWzC,GAAiByC,EAAQzC,KAO5C0C,aAAmBL,GAJI3C,EACzB,CAAC,CAAEP,MAAO5B,GAAOoF,UAAU,EAAMjD,WAAW,IAC5C,OAGwBkD,uBAAqB,CAC/C3C,aAAcC,EACdf,MAAOsB,EACPoC,SAAU,SAACC,OACH7F,EAAOyF,GAAaK,MAAK,SAAAC,UAAOA,EAAI7D,QAAU2D,EAAU,MACxDG,EAAQH,EAAU5B,KAAI,SAAAgC,UAC1BR,GAAaK,MAAK,SAAAC,UAAOA,EAAI7D,QAAU+D,QAEzCnC,UACExB,EAAkBsD,SAClB3E,EAAW4E,EAAYA,EAAU,GACjC5E,EAAW+E,EAAQhG,MAXlBuD,SAAQ2C,YAgByBpB,oBACtCf,EAAS,WAAToC,EAAajE,OADRkE,SAAcC,SAIfC,GAAgBhE,EAAkBgE,eAAiB/C,GAAOlE,OAAS,EAEnEkH,GAAed,GAAae,WAAU,SAAAlH,UAAKA,EAAE4C,QAAUkE,MACvDK,GAAWC,cACfH,GACAd,KACEnD,EAAkBqE,gBAEhBC,GAAWC,cACfN,GACAd,KACEnD,EAAkBqE,gBAEhB/E,GAAYkF,eAAarB,IACzBrD,GAAW2E,cAAYtB,IAE7BuB,mBAAgB,WACdX,SAAgBzE,UAAAA,GAAWM,SAC1B,CAAC5B,KAEJ2G,aAAU,eACFC,EAAcnD,EAAS+B,MAAK,SAAAxG,UAAKA,EAAE4C,QAAUkE,MACnDtC,UAAQxB,EAAkB6E,cAAe,CACvCnH,KAAMkH,EACNE,YAAavC,EAAewC,QAC5BC,iBAAYJ,SAAAA,EAAazE,cAE1B,CAAC2D,GAAc9D,EAAkB6E,oBAE9BI,GAAa,SAACC,UACbjE,GAAOkE,SAASD,IAAgBjE,GAAOlE,OAASiH,IACnDJ,IAAU,SAAA/G,UAAM8B,YAAe9B,GAAGqI,IAAe,CAACA,YAG9CE,EAASjC,GAAaK,MAAK,SAAAxG,UAAKA,EAAE4C,QAAUsF,KAE9CvG,aACFwD,EAAS4C,YAASM,SAEhBrF,EAAkBsF,8BAAoBnD,EAAS4C,YAASM,SAC5D7D,UAAQxB,EAAkBuF,eAAgB,CACxC7H,KAAM0H,EACNI,aAAcjD,EAAewC,QAC7BC,iBAAYI,SAAAA,EAAQjF,kBAElBiF,GAAAA,EAAQjF,WACVqB,UAAQxB,EAAkByF,eAAgB,CACxC/H,KAAMgI,OAAKN,EAAS,CAAC,aACrBI,aAAcjD,EAAewC,cAI3BY,SAAcP,SAAAA,EAAQnD,eAASmD,SAAAA,EAAQxF,OAC7CiD,IAAS,kBAAOlE,EAAW,SAAKgH,EAAAA,EAAe,MAE3CzF,GAAeoB,KAGfsE,GAAkD,SACtDtH,EACAuH,SAEAjC,IAAU,SAAAkC,OACFpI,EAAO+D,EAAS+B,MAAK,SAAAC,UAAOA,EAAI7D,QAAUtB,YAChDkD,UAAQxB,EAAkB+F,aAAczH,EAAWZ,EAAMoI,GAClDA,EAAW/C,QAAO,SAAA/F,UAAKA,IAAMsB,QAElCN,KAAUM,GAAWuE,GAAS,IAC9BgD,aAAY1D,EAAS4C,YAASM,UAQ9BW,GAAOrH,EACTsC,GAAOU,KAAI,SAAAsE,eAAQ,CACjBhE,gBAAOR,EAAS+B,MAAK,SAAA9F,UAAQA,EAAKkC,QAAUqG,eAAMhE,QAASgE,EAC3DC,SAAU,kBAAMN,GAAWK,QAE7B,GAEJtB,aAAU,WACRnD,UAAQZ,EAAS,CAAEoF,KAAAA,OAClB,CAAC/E,SA2GEkF,GAAMC,gBAAc/D,GAAiB,SAqGpC,CACLrC,kBAAAA,EACAjC,SAAAA,EACAoF,aAAAA,GACAL,gBAAAA,GACAgB,aAAAA,GACAuC,mBAfsE,SAAAC,MAChDnD,GAAaoD,OAAM,SAAAvJ,UAAKA,EAAEoG,aAC3B/C,IAAeF,QACL,kBAAfE,EACViG,EACA9E,UAAQnB,EAAY,CAAErC,MAAAA,MAW5BwI,cAhC4D,SAAA7G,OACtD8G,ED1XiB,SAAC1I,EAAeoF,UAClCnB,YACLzC,eACExB,GACA,SAACyB,UACC2D,EAAae,WAAU,SAAAlH,gBAAKA,EAAE4C,kBAAUJ,EAAMG,cAAN+G,EAAa9G,WAAU,MCqXlD+G,CAAYhH,EAAM5B,SAAUoF,UACtC,CACLyD,QAAS,CACPC,cAAexH,EAAaM,EAAM5B,SAAUuB,IAC5CwH,aAAcjH,EACZF,EAAM5B,SACN0G,cAAYtB,GAAaJ,QAAO,SAAA/F,UAAK4F,oBAAY5F,SAAAA,EAAGoG,gBAGxD2D,MAAO,CACLC,QAASP,EAAW,UAAY,UAsBpCQ,cAtN4D,SAC5DtH,EACAjB,OAEQwI,EAA2DvH,EAA3DuH,OAAQ5D,EAAmD3D,EAAnD2D,SAAU6D,EAAyCxH,EAAzCwH,QAASC,EAAgCzH,EAAhCyH,UAAWC,EAAqB1H,EAArB0H,QAAYC,IAAS3H,WAE5D,CACL4H,WACEC,IAAKnF,EACLoF,QAAS,uBACPtF,YAAAA,EAAU4C,YAASM,UAElB5G,EAAsBC,EAAYC,GAClC2I,GAELI,SACEnH,WAAAA,EACA4G,QAAS,SAAAQ,GACPnG,UAAQ2F,EAASQ,GACb3H,EAAkB4H,cAAgBrH,GAAYgB,IAC9CvB,EAAkB6H,eAAeF,EAAEG,OAAOC,SAC1CvH,GAAsBkC,IAAW,IAEvCwE,OAAQ,SAAAS,SACNnG,UAAQ0F,EAAQS,SACVK,EAAgBL,EAAEM,uBAAkB3F,SAAAA,EAASyC,SAC7CmD,WAAwB7F,EAAgB0C,gBAAhBoD,EAAyBC,SACrDT,EAAEM,eAECD,GAAkBE,IACjBjI,GAAaqB,IACZL,GAAOkE,SAASwC,EAAEG,OAAOlI,QAAWU,GACvCuC,YAAS4B,cAAYxD,OAAW,MAGtCqC,SAAU,SAAAqE,OACFU,EAAWV,EAAEG,OAAOlI,MAC1B4B,UAAQ8B,EAAUqE,GAClB9E,GAASwF,OACHC,EAAerK,UAAQoK,IAE3B7G,UAAQV,EAAyBuH,IAC/BC,IAAgBtH,EAGfM,IADHC,IAEFmB,IAAW,IAEb0E,UAAW,SAAAO,GACTnG,UAAQ4F,EAAWO,GACnBpF,EAAewC,QAAU,iBAEjBwD,EAAQZ,EAARY,IACF3D,EAAczB,GAAac,UAC7B,CAAC,gBAAYlD,GAAYoE,SAASoD,KAChC3D,SAAgBA,GAAAA,EAAa4D,kBAE5BrG,EAAS4C,YAASM,QADrBJ,SAAWL,SAAAA,EAAahF,YAE1B+H,EAAEc,kBAIQ,cAARF,GACFxE,SAAgBI,UAAAA,GAAUvE,YAC1B+H,EAAEc,kBAIQ,YAARF,GACFxE,SAAgBO,UAAAA,GAAU1E,YAE1B+H,EAAEc,kBAIQ,QAARF,GACFxE,SAAgBI,UAAAA,GAAUvE,YAEtByB,GAAQsG,EAAEc,mBAIJ,SAARF,GACFxE,SAAgBzE,UAAAA,GAAWM,YAC3B+H,EAAEc,kBAIQ,QAARF,GACFxE,SAAgBjE,UAAAA,GAAUF,YAC1B+H,EAAEc,uBAIQ,WAARF,GACFG,UAAQpH,EAASqG,EAAEc,kBAGvB7I,MAAO5B,GACPqJ,QAAS1I,EAAW,WAAa0I,GAC9BC,KAmHPqB,aAtG0D,SAC1DhJ,EACAQ,SAGEyI,EAYEjJ,EAZFiJ,OACA9J,EAWEa,EAXFb,OACU+J,EAURlJ,EAVF5B,SACAyK,EASE7I,EATF6I,SACAvG,EAQEtC,EARFsC,MACO6G,EAOLnJ,EAPFC,MACAoD,EAMErD,EANFqD,QAMErD,EALFmC,SAAAA,aAAWrE,IACXgK,EAIE9H,EAJF8H,QACAsB,EAGEpJ,EAHFoJ,YACAC,EAEErJ,EAFFqJ,GACG1B,IACD3H,KACEC,EAAQO,EAAY2I,WAAYhH,EAASgH,WAATG,EAAqBpL,WACrDqL,EAAYtJ,IAAUkE,GACtBqF,EACJhG,GAAae,WAAU,SAAAlH,UAAKA,EAAE4C,QAAUA,MAAU,EAC9CrB,EAAYsK,GAAa5G,GAASrC,QACjC,CACLlC,UAC2B,iBAAda,GAA2B6B,EAElC,CACEgJ,wBAAyB,CACvBC,OAAQvL,EAAYS,EAAWP,MAHnC,CAAED,SAAUQ,oBAMC0C,GAAOkE,SAASvF,mBAChB4I,EACjBc,UAAW,CAAEC,QAAS,GAAKpK,OAAQ,cAAeqK,WAAY,QAC9D/B,QAAS,SAAAE,SACPnG,UAAQiG,EAASE,GACZa,WACArG,EAAS4C,YAASM,QADRJ,GAAWrF,IAG5BmJ,YAAa,SAAApB,GACXnG,UAAQuH,EAAapB,GACrB5D,GAAgBnE,GAChB2C,EAAewC,QAAU,SAE3BiE,QACKA,GACHS,QACEC,MAAO,UACPC,GAAI,eACAC,WAASxJ,GACTA,EACA,CACEyJ,WAAYzJ,EAAY,YAAc,eAI5C8I,IAAcpK,GH5VjB,CACL6K,GAAI,iBACJG,OAAQ,CACNH,GAAI,cG0VE3G,GAAS4F,EACVtB,GAELyC,KAAM,CACJZ,kBAAAA,EACAvJ,MAAAA,KAwCJoK,aA9G0D,iBAEnD,CACLC,YAFY9D,UAAAA,GAAK+D,UAAUD,QA8G7B9H,SAAAA,EACAI,eAAAA,EACAlB,OAAAA,EACAI,SAAAA,EACAa,QAAAA,EACAhB,QAAAA,EACAC,OAAAA,EACAvD,MAAAA,GACA4H,WAAAA,GACAuE,WAlPiB,SAACtE,SAClBjC,GAAU,IACNiC,aAAY1D,EAAS4C,YAASM,UAiPlCxC,SAAAA,GACAmD,KAAAA,GACA/E,OAAAA,QC/aSmJ,EAAeC,cAC1B,SAAC1K,EAAO6H,OACA8C,EAAUvK,EAAgBJ,GAE9B5B,EAMEuM,EANFvM,SACAsD,EAKEiJ,EALFjJ,OACAC,EAIEgJ,EAJFhJ,QACAC,EAGE+I,EAHF/I,OACA4I,EAEEG,EAFFH,WACAvE,EACE0E,EADF1E,kBAGF2E,sBAAoB/C,GAAK,iBAAO,CAC9B2C,WAAAA,EACAvE,WAAAA,MAIA4E,gBAACtO,GAAqB0D,MAAO0K,GAC3BE,gBAACC,WACCC,UACArJ,OAAQA,EACRC,QAASA,EACTC,OAAQA,EACRoJ,WAAW,EACXC,UAAU,SACV3K,aAAa,GAEbuK,gBAACK,SAAOC,KACN9B,GAAI,2BACyB,CACzB+B,SAAU,qBAGdC,EAAE,OACFxD,IAAKA,GAEJzJ,QAQbqM,EAAa1K,YAAc,4DCzCduL,EAAmBZ,cAC9B,SAAC1K,EAAOuL,SAKF/O,IAHF2H,IAAAA,aACA6E,IAAAA,aACApG,IAAAA,eAEI4I,EAAU/I,WACVoF,EAAM4D,eAAaF,EAAcC,GAEjCE,EAAY1C,EAAahJ,KACM0L,EAAUtB,KAAvCZ,IAAAA,kBAAmBvJ,IAAAA,MAErBsJ,EAAYpF,IAAiBlE,EAEnC+E,aAAU,iBACJuE,GAAwC,aAA3B3G,EAAewC,gBAC9BoG,YAAAA,EAASpG,YAASuG,eAAe,CAC/BC,SAAU,SACVC,MAAO,cAEV,CAACtC,EAAW3G,IAEfoC,aAAU,WACa,iBAAV/E,GAAoB6L,QAAQC,KAAK,OACvB,iBAAV9L,GAAsBgD,cAAYjD,EAAMmC,WACjD2J,QAAQE,MACN,+EAEH,UAEyDN,EAAU3N,KAA9DK,IAAAA,SAAUqL,IAAAA,wBAA4BwC,SAExCtE,EAAO5B,OAAKkG,EAAW,CAAC,mBAEvBzC,EACLqB,gBAACqB,sBAAKrE,IAAKA,GAASsE,EAAoBxE,GACrCvJ,GAGCyM,wBAAMpB,wBAAyBA,KAGjC,QAIR6B,EAAiBvL,YAAc,mBAE/B,IAAaoM,EAA4B,CACvCC,GAAI,IACJC,GAAI,IACJ/M,GAAI,IACJgN,QAAS,KACT9M,OAAQ,kDC/DM+M,EAAsBvM,OAClBwM,EAA0BxM,EAApC5B,SAA2BuJ,IAAS3H,OAMxCxD,IAJF6D,IAAAA,kBACA2I,IAAAA,aACA3K,IAAAA,MACA8E,IAAAA,gBAGIsJ,EAAa5B,4BAAOxM,KACS2K,OAE5BhJ,GACHC,MAAO5B,EACPD,SAAUyD,UAAQ2K,EAAc,CAC9BvM,MAAOwM,OAGX,GACA1O,KATMK,IAAAA,SAAasN,SAWfgB,EAAoBvJ,EAAgBwJ,MAAK,SAAAtP,UAAKA,EAAE4C,QAAU5B,YAE9DgC,EAAkBG,WAAclC,UAAQD,IAAWqO,EAMjD,KAHF7B,gBAACqB,wBAASC,EAAoBT,EAAe/D,GAC1CvJ,UAAmBC,GAK1BkO,EAAsBxM,YAAc,yDC1BvB6M,EAAoBlC,cAC/B,SAAC1K,EAAO6H,OACEzJ,EAAwC4B,EAAxC5B,SAA0B6N,IAAcjM,KAC1C2H,EAAO5B,OAAKkG,EAAW,CAAC,iBAItB7E,GAAUP,EAFQrK,IAAlBqK,eAEwB7G,GAAxBoH,MAEFyF,EAAgBC,EAAiB9M,UAGrC6K,gBAACkC,qBAAIlF,IAAKA,GAAST,EAAWO,GAC5BkD,gBAACmC,2BAAYH,EAAcI,MAC1B7O,EACDyM,gBAACmC,2BAAYH,EAAcK,aAMtBC,EAAyBzC,cACpC,SAAC1K,EAAO6H,UACCgD,gBAACqB,wBAASkB,EAAqBpN,GAAO6H,IAAKA,QAItD+E,EAAkB7M,YAAc,oBAChCoN,EAAuBpN,YAAc,yBAErC,IAAMqN,EAA6B,CACjCC,GAAI,EACJC,GAAI,EACJC,SAAU,KACVC,cAAe,QACftD,WAAY,YACZuD,cAAe,aAGXX,EAAmB,SACvB9M,SAE0BxD,IAEpBkR,EAA2B1N,EAAM2N,gBAInC9G,IANIA,eAMU7G,GADhBiH,QAA0BE,IAAAA,aAGtByG,EAA2B,CAC/BN,GAAI,EACJO,YAAa7N,EAAM8N,oBAcd,CAAEb,SAVJW,GACHG,GAAI,EACJ1G,SAAUrH,EAAMgO,eAXL9G,cAWoC,OAAS,KAQ5CgG,YALTU,GACHvG,SACGrH,EAAMgO,aAAe7G,GAAgBuG,EAAkB,OAAS,gCC5D1DO,EAAoBvD,cAC/B,SAAC1K,EAAOuL,SACoC/O,IAAlCgG,IAAAA,SAAyB6D,IAAAA,KAIfmG,EAA0BxM,EAApC5B,YAI+BkJ,IARrBA,iBAI0BtH,KAEpBkO,sBAAoB,QAASlO,IAE7C4H,IAAAA,QAAgBuG,IAAPpG,MACJqG,EAAgCxG,EAArCC,IAAoBwG,IAAiBzG,KACvCC,EAAM4D,eAAaF,EAAc/I,GAEjCpE,EAAWyD,UAAQ2K,EAAc,CAAEnG,KAAAA,WAGvCwE,gBAACyD,wBAASD,GAAcxG,IAAKuG,IAC1BhQ,EACDyM,gBAAC0D,0BAASC,GAAIC,SAAYN,GAAoBtG,IAAKA,SAM3DoG,EAAkBlO,YAAc,QAEhCkO,EAAkBS,GAAK,QC7ChB,IAAMC,EAAa,SAAC3O,OAGnBU,GAAagG,EAFYlK,IAAvBkK,oBAGNmE,gBAACqB,wBAAS0C,gCAGL/D,gBAACkC,uBAAQ/M,GAAQU,IAGpBkO,EAAyB,CAC7BrB,SAAU,KACVsB,MAAO,SACPC,QAAS,SACT5E,WAAY,OACZ6E,UAAW,yBCNAC,EAAmBtE,cAC9B,SAAC1K,EAAOuL,OACEnN,EAAsB4B,EAAtB5B,SAAauJ,IAAS3H,OACIxD,IAAjB6N,IAAAA,aACXxC,EAAM4D,eAAaF,IADjB5I,SAEFsM,EAAY5E,WAGhBQ,gBAACqE,gCAAerH,IAAKA,GAAS+F,EAAgBqB,EAAetH,GCnBxC,SAACvJ,UACnByM,EAAMsE,SAASnN,IAAI5D,GAAU,SAACyB,EAAYxC,MAChB,sBAA3BwC,EAAMC,KAAKC,YAAqC,KAC5CqP,EAAevE,EAAMsE,SAASE,QAAQjR,GAAUf,EAAI,UACnDwN,EAAMyE,aAAazP,EAAO,CAC/B8N,eAAcyB,GACmB,sBAA7BA,EAAQtP,KAAKC,qBAIdF,KDUF0P,CAAYnR,GACbyM,gBAAC8D,YAMTK,EAAiBjP,YAAc,mBAE/B,IAAM6N,EAAkC,CACtC4B,GAAI,IACJlQ,GAAI,IACJsK,QAAS,IACTI,GAAI,UACJsC,QAAS,KACTmD,KAAM,QACNC,OAAQ,OACRC,OAAQ,OACRvQ,IAAK,WACLwQ,OAAQ,UACRC,UAAW,OAEX1F,OAAQ,CACNH,GAAI,WAGN7K,OAAQ,CACN2Q,UAAW,2CEtCFC,EAAkBC,QAAK,SAAChQ,OAC3BsC,EAAuCtC,EAAvCsC,MAAOiE,EAAgCvG,EAAhCuG,SAAUsC,EAAsB7I,EAAtB6I,SAAalB,IAAS3H,YAG7C6K,gBAAC0D,gBACC1D,gBAACoF,qBACCC,aAAa,KACbhG,WAAW,UACNrB,GAAYsH,EACbxI,GAEJkD,gBAACuF,gBAAU9N,GACXuI,gBAACwF,gCACCvI,QAAS,kBAAOe,GAAYhH,UAAQ0E,IACpC/G,OAAO,WACFqJ,GAAYsH,SAOrBA,EAA2B,CAC/B3Q,OAAQ,OACRqK,WAAY,OACZD,QAAS,GACTzK,OAAQ,CAAE2Q,UAAW"}
@@ -250,6 +250,8 @@ function useAutoComplete(autoCompleteProps) {
250
250
  shouldRenderSuggestions = _autoCompleteProps$sh === void 0 ? function () {
251
251
  return true;
252
252
  } : _autoCompleteProps$sh,
253
+ _autoCompleteProps$su = autoCompleteProps.submitKeys,
254
+ submitKeys = _autoCompleteProps$su === void 0 ? [] : _autoCompleteProps$su,
253
255
  suggestWhenEmpty = autoCompleteProps.suggestWhenEmpty,
254
256
  value = autoCompleteProps.value,
255
257
  _autoCompleteProps$va = autoCompleteProps.values,
@@ -294,7 +296,8 @@ function useAutoComplete(autoCompleteProps) {
294
296
 
295
297
  var creatableArr = creatable ? [{
296
298
  value: query,
297
- noFilter: true
299
+ noFilter: true,
300
+ creatable: true
298
301
  }] : [];
299
302
  var filteredList = [].concat(filteredResults, creatableArr);
300
303
 
@@ -337,8 +340,8 @@ function useAutoComplete(autoCompleteProps) {
337
340
  });
338
341
  runIfFn(autoCompleteProps.onOptionFocus, {
339
342
  item: focusedItem,
340
- selectMethod: interactionRef.current,
341
- isNewInput: false
343
+ focusMethod: interactionRef.current,
344
+ isNewInput: focusedItem == null ? void 0 : focusedItem.creatable
342
345
  });
343
346
  }, [focusedValue, autoCompleteProps.onOptionFocus]);
344
347
 
@@ -365,12 +368,26 @@ function useAutoComplete(autoCompleteProps) {
365
368
  runIfFn(autoCompleteProps.onSelectOption, {
366
369
  item: option,
367
370
  selectMethod: interactionRef.current,
368
- isNewInput: false
371
+ isNewInput: option == null ? void 0 : option.creatable
372
+ });
373
+
374
+ if (option != null && option.creatable) {
375
+ runIfFn(autoCompleteProps.onCreateOption, {
376
+ item: omit(option, ["noFilter"]),
377
+ selectMethod: interactionRef.current
378
+ });
379
+ }
380
+
381
+ var optionLabel = (option == null ? void 0 : option.label) || (option == null ? void 0 : option.value);
382
+ setQuery(function () {
383
+ return multiple ? "" : optionLabel != null ? optionLabel : "";
369
384
  });
370
385
  if (closeOnSelect) onClose();
371
386
  };
372
387
 
373
- var removeItem = function removeItem(itemValue) {
388
+ var removeItem = function removeItem(itemValue, focusInput) {
389
+ var _inputRef$current3;
390
+
374
391
  setValues(function (prevValues) {
375
392
  var item = itemList.find(function (opt) {
376
393
  return opt.value === itemValue;
@@ -381,13 +398,14 @@ function useAutoComplete(autoCompleteProps) {
381
398
  });
382
399
  });
383
400
  if (query === itemValue) setQuery("");
401
+ if (focusInput) (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
384
402
  };
385
403
 
386
404
  var resetItems = function resetItems(focusInput) {
387
- var _inputRef$current3;
405
+ var _inputRef$current4;
388
406
 
389
407
  setValues([]);
390
- if (focusInput) (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
408
+ if (focusInput) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
391
409
  };
392
410
 
393
411
  var tags = multiple ? values.map(function (tag) {
@@ -406,13 +424,6 @@ function useAutoComplete(autoCompleteProps) {
406
424
  runIfFn(onReady, {
407
425
  tags: tags
408
426
  });
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
427
  }, [values]);
417
428
 
418
429
  var getInputProps = function getInputProps(props, themeInput) {
@@ -427,9 +438,9 @@ function useAutoComplete(autoCompleteProps) {
427
438
  wrapper: _extends({
428
439
  ref: inputWrapperRef,
429
440
  onClick: function onClick() {
430
- var _inputRef$current4;
441
+ var _inputRef$current5;
431
442
 
432
- inputRef == null ? void 0 : (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
443
+ inputRef == null ? void 0 : (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus();
433
444
  }
434
445
  }, getMultipleWrapStyles(themeInput, multiple), rest),
435
446
  input: _extends({
@@ -457,7 +468,7 @@ function useAutoComplete(autoCompleteProps) {
457
468
  onChange: function onChange(e) {
458
469
  var newValue = e.target.value;
459
470
  runIfFn(_onChange, e);
460
- setQuery(e.target.value);
471
+ setQuery(newValue);
461
472
  var queryIsEmpty = isEmpty(newValue);
462
473
  if (runIfFn(shouldRenderSuggestions, newValue) && (!queryIsEmpty || suggestWhenEmpty)) onOpen();else onClose();
463
474
  setListAll(false);
@@ -468,10 +479,10 @@ function useAutoComplete(autoCompleteProps) {
468
479
  var key = e.key;
469
480
  var focusedItem = filteredList[focusedIndex];
470
481
 
471
- if (key === "Enter") {
472
- var _inputRef$current5;
482
+ if (["Enter"].concat(submitKeys).includes(key)) {
483
+ var _inputRef$current6;
473
484
 
474
- if (focusedItem && !(focusedItem != null && focusedItem.disabled)) selectItem(focusedItem == null ? void 0 : focusedItem.value);else (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus();
485
+ if (focusedItem && !(focusedItem != null && focusedItem.disabled)) selectItem(focusedItem == null ? void 0 : focusedItem.value);else (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.focus();
475
486
  e.preventDefault();
476
487
  return;
477
488
  }
@@ -564,10 +575,10 @@ function useAutoComplete(autoCompleteProps) {
564
575
  userSelect: "none"
565
576
  },
566
577
  onClick: function onClick(e) {
567
- var _inputRef$current6;
578
+ var _inputRef$current7;
568
579
 
569
580
  runIfFn(_onClick, e);
570
- if (!disabled) selectItem(value);else (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.focus();
581
+ if (!disabled) selectItem(value);else (_inputRef$current7 = inputRef.current) == null ? void 0 : _inputRef$current7.focus();
571
582
  },
572
583
  onMouseOver: function onMouseOver(e) {
573
584
  runIfFn(_onMouseOver, e);
@@ -845,16 +856,16 @@ var AutoCompleteInput = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
845
856
  var wrapperRef = wrapper.ref,
846
857
  wrapperProps = _objectWithoutPropertiesLoose(wrapper, _excluded2$2);
847
858
 
848
- var ref = useMergeRefs(forwardedRef, wrapperRef);
859
+ var ref = useMergeRefs(forwardedRef, inputRef);
849
860
  var children = runIfFn(childrenProp, {
850
861
  tags: tags
851
862
  });
852
863
  return React.createElement(Wrap, Object.assign({}, wrapperProps, {
853
- ref: ref
864
+ ref: wrapperRef
854
865
  }), children, React.createElement(WrapItem, Object.assign({
855
866
  as: Input
856
867
  }, inputProps, {
857
- ref: inputRef
868
+ ref: ref
858
869
  })));
859
870
  });
860
871
  AutoCompleteInput.displayName = "Input";