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