@yamada-ui/autocomplete 1.5.1 → 1.5.2-dev-20240917033401

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.
Files changed (105) hide show
  1. package/dist/autocomplete-context.d.mts +210 -0
  2. package/dist/autocomplete-context.d.ts +210 -0
  3. package/dist/autocomplete-context.js +53 -0
  4. package/dist/autocomplete-context.js.map +1 -0
  5. package/dist/autocomplete-context.mjs +18 -0
  6. package/dist/autocomplete-context.mjs.map +1 -0
  7. package/dist/autocomplete-create.d.mts +4 -3
  8. package/dist/autocomplete-create.d.ts +4 -3
  9. package/dist/autocomplete-create.js +56 -61
  10. package/dist/autocomplete-create.js.map +1 -1
  11. package/dist/autocomplete-create.mjs +4 -1
  12. package/dist/autocomplete-empty.d.mts +4 -3
  13. package/dist/autocomplete-empty.d.ts +4 -3
  14. package/dist/autocomplete-empty.js +54 -59
  15. package/dist/autocomplete-empty.js.map +1 -1
  16. package/dist/autocomplete-empty.mjs +4 -1
  17. package/dist/autocomplete-icon.d.mts +6 -4
  18. package/dist/autocomplete-icon.d.ts +6 -4
  19. package/dist/autocomplete-icon.js +15 -22
  20. package/dist/autocomplete-icon.js.map +1 -1
  21. package/dist/autocomplete-icon.mjs +2 -1
  22. package/dist/autocomplete-list.d.mts +2 -2
  23. package/dist/autocomplete-list.d.ts +2 -2
  24. package/dist/autocomplete-list.js +20 -23
  25. package/dist/autocomplete-list.js.map +1 -1
  26. package/dist/autocomplete-list.mjs +3 -1
  27. package/dist/autocomplete-option-group.d.mts +5 -9
  28. package/dist/autocomplete-option-group.d.ts +5 -9
  29. package/dist/autocomplete-option-group.js +14 -16
  30. package/dist/autocomplete-option-group.js.map +1 -1
  31. package/dist/autocomplete-option-group.mjs +3 -1
  32. package/dist/autocomplete-option.d.mts +15 -8
  33. package/dist/autocomplete-option.d.ts +15 -8
  34. package/dist/autocomplete-option.js +97 -102
  35. package/dist/autocomplete-option.js.map +1 -1
  36. package/dist/autocomplete-option.mjs +4 -1
  37. package/dist/autocomplete.d.mts +13 -7
  38. package/dist/autocomplete.d.ts +13 -7
  39. package/dist/autocomplete.js +673 -661
  40. package/dist/autocomplete.js.map +1 -1
  41. package/dist/autocomplete.mjs +12 -1
  42. package/dist/chunk-7GCVSXCV.mjs +190 -0
  43. package/dist/chunk-7GCVSXCV.mjs.map +1 -0
  44. package/dist/chunk-BD7VZQOL.mjs +267 -0
  45. package/dist/chunk-BD7VZQOL.mjs.map +1 -0
  46. package/dist/chunk-FZM3BH3D.mjs +57 -0
  47. package/dist/chunk-FZM3BH3D.mjs.map +1 -0
  48. package/dist/chunk-GM7RV2YY.mjs +959 -0
  49. package/dist/chunk-GM7RV2YY.mjs.map +1 -0
  50. package/dist/chunk-GOMUH7TZ.mjs +60 -0
  51. package/dist/chunk-GOMUH7TZ.mjs.map +1 -0
  52. package/dist/chunk-HL2KEBRX.mjs +87 -0
  53. package/dist/chunk-HL2KEBRX.mjs.map +1 -0
  54. package/dist/chunk-JMX72TSD.mjs +78 -0
  55. package/dist/chunk-JMX72TSD.mjs.map +1 -0
  56. package/dist/chunk-JPUKYLBW.mjs +25 -0
  57. package/dist/chunk-JPUKYLBW.mjs.map +1 -0
  58. package/dist/chunk-JXFXCGZK.mjs +102 -0
  59. package/dist/chunk-JXFXCGZK.mjs.map +1 -0
  60. package/dist/chunk-KCALQJLK.mjs +59 -0
  61. package/dist/chunk-KCALQJLK.mjs.map +1 -0
  62. package/dist/chunk-PRDD3JJO.mjs +202 -0
  63. package/dist/chunk-PRDD3JJO.mjs.map +1 -0
  64. package/dist/chunk-QGOCVO2C.mjs +68 -0
  65. package/dist/chunk-QGOCVO2C.mjs.map +1 -0
  66. package/dist/chunk-QQFSHTTC.mjs +59 -0
  67. package/dist/chunk-QQFSHTTC.mjs.map +1 -0
  68. package/dist/index.d.mts +4 -1
  69. package/dist/index.d.ts +4 -1
  70. package/dist/index.js +1550 -1536
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +23 -6
  73. package/dist/multi-autocomplete.d.mts +13 -7
  74. package/dist/multi-autocomplete.d.ts +13 -7
  75. package/dist/multi-autocomplete.js +1516 -1504
  76. package/dist/multi-autocomplete.js.map +1 -1
  77. package/dist/multi-autocomplete.mjs +12 -1
  78. package/dist/use-autocomplete-list.d.mts +8 -0
  79. package/dist/use-autocomplete-list.d.ts +8 -0
  80. package/dist/use-autocomplete-list.js +103 -0
  81. package/dist/use-autocomplete-list.js.map +1 -0
  82. package/dist/use-autocomplete-list.mjs +9 -0
  83. package/dist/use-autocomplete-list.mjs.map +1 -0
  84. package/dist/use-autocomplete-option-group.d.mts +16 -0
  85. package/dist/use-autocomplete-option-group.d.ts +16 -0
  86. package/dist/use-autocomplete-option-group.js +113 -0
  87. package/dist/use-autocomplete-option-group.js.map +1 -0
  88. package/dist/use-autocomplete-option-group.mjs +9 -0
  89. package/dist/use-autocomplete-option-group.mjs.map +1 -0
  90. package/dist/use-autocomplete-option.d.mts +49 -0
  91. package/dist/use-autocomplete-option.d.ts +49 -0
  92. package/dist/use-autocomplete-option.js +231 -0
  93. package/dist/use-autocomplete-option.js.map +1 -0
  94. package/dist/use-autocomplete-option.mjs +13 -0
  95. package/dist/use-autocomplete-option.mjs.map +1 -0
  96. package/dist/use-autocomplete.d.mts +188 -8
  97. package/dist/use-autocomplete.d.ts +188 -8
  98. package/dist/use-autocomplete.js +359 -481
  99. package/dist/use-autocomplete.js.map +1 -1
  100. package/dist/use-autocomplete.mjs +9 -25
  101. package/package.json +13 -13
  102. package/dist/chunk-ZD25NCFE.mjs +0 -2038
  103. package/dist/chunk-ZD25NCFE.mjs.map +0 -1
  104. package/dist/use-autocomplete-BJNWa6hL.d.mts +0 -389
  105. package/dist/use-autocomplete-BJNWa6hL.d.ts +0 -389
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/use-autocomplete.tsx"],"sourcesContent":["import type { HTMLUIProps, PropGetter } from \"@yamada-ui/core\"\nimport { layoutStyleProperties } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport type { ComboBoxProps, PopoverProps } from \"@yamada-ui/popover\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { useDisclosure } from \"@yamada-ui/use-disclosure\"\nimport { useOutsideClick } from \"@yamada-ui/use-outside-click\"\nimport type { Union } from \"@yamada-ui/utils\"\nimport {\n dataAttr,\n funcAll,\n getEventRelatedTarget,\n handlerAll,\n isArray,\n isContains,\n mergeRefs,\n pickObject,\n splitObject,\n useUnmountEffect,\n useUpdateEffect,\n getValidChildren,\n isUndefined,\n} from \"@yamada-ui/utils\"\nimport type {\n ChangeEvent,\n DOMAttributes,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n} from \"react\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport {\n useAutocompleteContext,\n useAutocompleteDescendants,\n useAutocompleteDescendantsContext,\n} from \"./autocomplete-context\"\nimport { AutocompleteOption } from \"./autocomplete-option\"\nimport type { AutocompleteOptionProps } from \"./autocomplete-option\"\nimport type { AutocompleteOptionGroupProps } from \"./autocomplete-option-group\"\nimport { AutocompleteOptionGroup } from \"./autocomplete-option-group\"\n\nexport interface ChangeOptions {\n forceUpdate?: boolean\n runOmit?: boolean\n runRebirth?: boolean\n}\n\ninterface AutocompleteItemWithValue extends AutocompleteOptionProps {\n label?: string\n value?: string\n}\n\ninterface AutocompleteItemWithItems\n extends AutocompleteOptionGroupProps,\n Pick<AutocompleteOptionProps, \"isDisabled\" | \"isFocusable\"> {\n items?: AutocompleteItemWithValue[]\n}\n\nexport type AutocompleteItem =\n | AutocompleteItemWithValue\n | AutocompleteItemWithItems\n\nconst kanaMap: { [key: string]: string } = {\n ガ: \"ガ\",\n ギ: \"ギ\",\n グ: \"グ\",\n ゲ: \"ゲ\",\n ゴ: \"ゴ\",\n ザ: \"ザ\",\n ジ: \"ジ\",\n ズ: \"ズ\",\n ゼ: \"ゼ\",\n ゾ: \"ゾ\",\n ダ: \"ダ\",\n ヂ: \"ヂ\",\n ヅ: \"ヅ\",\n デ: \"デ\",\n ド: \"ド\",\n バ: \"バ\",\n ビ: \"ビ\",\n ブ: \"ブ\",\n ベ: \"ベ\",\n ボ: \"ボ\",\n パ: \"パ\",\n ピ: \"ピ\",\n プ: \"プ\",\n ペ: \"ペ\",\n ポ: \"ポ\",\n ヴ: \"ヴ\",\n ヷ: \"ヷ\",\n ヺ: \"ヺ\",\n ア: \"ア\",\n イ: \"イ\",\n ウ: \"ウ\",\n エ: \"エ\",\n オ: \"オ\",\n カ: \"カ\",\n キ: \"キ\",\n ク: \"ク\",\n ケ: \"ケ\",\n コ: \"コ\",\n サ: \"サ\",\n シ: \"シ\",\n ス: \"ス\",\n セ: \"セ\",\n ソ: \"ソ\",\n タ: \"タ\",\n チ: \"チ\",\n ツ: \"ツ\",\n テ: \"テ\",\n ト: \"ト\",\n ナ: \"ナ\",\n ニ: \"ニ\",\n ヌ: \"ヌ\",\n ネ: \"ネ\",\n ノ: \"ノ\",\n ハ: \"ハ\",\n ヒ: \"ヒ\",\n フ: \"フ\",\n ヘ: \"ヘ\",\n ホ: \"ホ\",\n マ: \"マ\",\n ミ: \"ミ\",\n ム: \"ム\",\n メ: \"メ\",\n モ: \"モ\",\n ヤ: \"ヤ\",\n ユ: \"ユ\",\n ヨ: \"ヨ\",\n ラ: \"ラ\",\n リ: \"リ\",\n ル: \"ル\",\n レ: \"レ\",\n ロ: \"ロ\",\n ワ: \"ワ\",\n ヲ: \"ヲ\",\n ン: \"ン\",\n ァ: \"ァ\",\n ィ: \"ィ\",\n ゥ: \"ゥ\",\n ェ: \"ェ\",\n ォ: \"ォ\",\n ッ: \"ッ\",\n ャ: \"ャ\",\n ュ: \"ュ\",\n ョ: \"ョ\",\n \"。\": \"。\",\n \"、\": \"、\",\n ー: \"ー\",\n \"「\": \"「\",\n \"」\": \"」\",\n \"・\": \"・\",\n}\n\nconst defaultFormat = (value: string) => {\n value = value.replace(/[!-~]/g, (v) =>\n String.fromCharCode(v.charCodeAt(0) - 0xfee0),\n )\n\n const reg = new RegExp(\"(\" + Object.keys(kanaMap).join(\"|\") + \")\", \"g\")\n\n value = value\n .replace(reg, (v) => kanaMap[v])\n .replace(/゙/g, \"゛\")\n .replace(/゚/g, \"゜\")\n\n value = value.toUpperCase()\n\n return value\n}\n\nconst flattenItems = (\n items: AutocompleteItem[],\n): AutocompleteItemWithValue[] => {\n const filterItems = (\n items: AutocompleteItem[] | AutocompleteItemWithValue[],\n ): (AutocompleteItemWithValue | AutocompleteItemWithValue[])[] =>\n items\n .map((item) => {\n const { isDisabled, isFocusable } = item\n const trulyDisabled = !!isDisabled && !isFocusable\n\n if (trulyDisabled) return\n\n if (\"items\" in item) {\n return filterItems(item.items ?? [])\n } else {\n return item as AutocompleteItemWithValue\n }\n })\n .filter(Boolean) as (\n | AutocompleteItemWithValue\n | AutocompleteItemWithValue[]\n )[]\n\n return filterItems(items).flat(Infinity) as AutocompleteItemWithValue[]\n}\n\ntype UseAutocompleteBaseProps<T extends string | string[] = string> =\n ComboBoxProps &\n FormControlOptions & {\n /**\n * The value of the autocomplete.\n */\n value?: T\n /**\n * The initial value of the autocomplete.\n */\n defaultValue?: T\n /**\n * The callback invoked when value state changes.\n */\n onChange?: (value: T) => void\n /**\n * The callback invoked when search input.\n */\n onSearch?: (ev: ChangeEvent<HTMLInputElement>) => void\n /**\n * The callback invoked when autocomplete option created.\n */\n onCreate?: (\n newItem: AutocompleteItem,\n newItems: AutocompleteItem[],\n ) => void\n /**\n * Function to format text when search input.\n */\n format?: (value: string) => string\n /**\n * The position to be inserted when the autocomplete option is created.\n *\n * @default 'first'\n */\n insertPositionItem?: Union<\"first\" | \"last\"> | [string, \"first\" | \"last\"]\n /**\n * If `true`, the list element will be closed when value is selected.\n *\n * @default true\n */\n closeOnSelect?: boolean\n /**\n * The message displayed when the search yields no hits.\n *\n * @default 'No results found'\n */\n emptyMessage?: string\n /**\n * If `true`, enables the creation of autocomplete option.\n *\n * @default false\n */\n allowCreate?: boolean\n /**\n * If `true`, enables the free input.\n */\n allowFree?: boolean\n /**\n * If `true`, the selected item(s) will be excluded from the list.\n *\n * @default false\n */\n omitSelectedValues?: boolean\n /**\n * The maximum selectable value.\n */\n maxSelectValues?: number\n /**\n * Props for select option element.\n */\n optionProps?: Omit<AutocompleteOptionProps, \"value\" | \"children\">\n /**\n * If provided, generate options based on items.\n */\n items?: AutocompleteItem[]\n }\n\nexport type UseAutocompleteProps<T extends string | string[] = string> = Omit<\n HTMLUIProps<\"input\">,\n | keyof UseAutocompleteBaseProps\n | \"list\"\n | \"disabled\"\n | \"required\"\n | \"readOnly\"\n | \"size\"\n> &\n UseAutocompleteBaseProps<T>\n\nexport const useAutocomplete = <T extends string | string[] = string>(\n props: UseAutocompleteProps<T>,\n) => {\n const {\n value: valueProp,\n defaultValue,\n onChange: onChangeProp,\n onCreate: onCreateProp,\n onSearch: onSearchProp,\n closeOnSelect = true,\n omitSelectedValues = false,\n maxSelectValues,\n allowCreate = false,\n allowFree = false,\n insertPositionItem = \"first\",\n emptyMessage = \"No results found\",\n format = defaultFormat,\n optionProps,\n placeholder,\n onKeyDown: onKeyDownProp,\n isOpen: isOpenProp,\n defaultIsOpen,\n onOpen: onOpenProp,\n onClose: onCloseProp,\n closeOnBlur = true,\n closeOnEsc = true,\n openDelay,\n closeDelay,\n isLazy,\n lazyBehavior,\n animation,\n duration = 0.2,\n offset,\n gutter,\n preventOverflow,\n flip,\n matchWidth = true,\n boundary,\n eventListeners,\n strategy,\n placement = \"bottom-start\",\n modifiers,\n items,\n children,\n ...rest\n } = useFormControlProps(props)\n const {\n \"aria-readonly\": _ariaReadonly,\n onFocus: onFocusProp,\n ...formControlProps\n } = pickObject(rest, formControlProperties)\n const [containerProps, inputProps] = splitObject(rest, layoutStyleProperties)\n const { id } = rest\n\n const descendants = useAutocompleteDescendants()\n\n const containerRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLUListElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const timeoutIds = useRef<Set<any>>(new Set([]))\n const isComposition = useRef<boolean>(false)\n const prevValue = useRef<T | undefined>(undefined)\n\n const [resolvedItems, setResolvedItems] = useState<\n AutocompleteItem[] | undefined\n >(items ? JSON.parse(JSON.stringify(items)) : undefined)\n const [value, setValue] = useControllableState({\n value: valueProp,\n defaultValue,\n onChange: onChangeProp,\n })\n const [label, setLabel] = useState<T | undefined>(undefined)\n const [inputValue, setInputValue] = useState<string>(\"\")\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n const [isAllSelected, setIsAllSelected] = useState<boolean>(false)\n const [isHit, setIsHit] = useState<boolean>(true)\n const {\n isOpen,\n onOpen: onInternalOpen,\n onClose,\n } = useDisclosure({\n isOpen: isOpenProp,\n defaultIsOpen,\n onOpen: onOpenProp,\n onClose: onCloseProp,\n })\n const isFocused = focusedIndex > -1\n const isCreate = focusedIndex === -2 && allowCreate\n const isMulti = isArray(value)\n const isEmptyValue = !isMulti ? !value : !value.length\n\n const [firstInsertPositionItem, secondInsertPositionItem] = useMemo(() => {\n if (isArray(insertPositionItem)) {\n return insertPositionItem\n } else {\n return [insertPositionItem, \"first\"]\n }\n }, [insertPositionItem])\n\n if (allowCreate && !isUndefined(children)) {\n console.warn(\n `${!isMulti ? \"Autocomplete\" : \"MultiAutocomplete\"}: ${\n !isMulti ? \"Autocomplete\" : \"MultiAutocomplete\"\n } internally prefers 'children'. If 'allowCreate' is true, it will not be reflected correctly. If want to reflect, please set 'items' in props.`,\n )\n }\n\n const selectedValues = descendants.enabledValues(\n ({ node }) => isMulti && value.includes(node.dataset.value ?? \"\"),\n )\n const selectedIndexes = selectedValues.map(({ index }) => index)\n const enabledValues = descendants.enabledValues(\n ({ node, index }) =>\n \"target\" in node.dataset && !selectedIndexes.includes(index),\n )\n\n const validChildren = getValidChildren(children)\n\n const computedChildren = useMemo(\n () =>\n resolvedItems?.map((item, i) => {\n if (\"value\" in item) {\n const { label, value, ...props } = item\n\n return (\n <AutocompleteOption key={i} value={value} {...props}>\n {label}\n </AutocompleteOption>\n )\n } else if (\"items\" in item) {\n const { label, items = [], ...props } = item\n\n return (\n <AutocompleteOptionGroup key={i} label={label as string} {...props}>\n {items.map(({ label, value, ...props }, i) => (\n <AutocompleteOption key={i} value={value} {...props}>\n {label}\n </AutocompleteOption>\n ))}\n </AutocompleteOptionGroup>\n )\n }\n }),\n [resolvedItems],\n )\n\n const isEmpty = !validChildren.length && !computedChildren?.length\n\n const onOpen = useCallback(() => {\n if (formControlProps.disabled || formControlProps.readOnly) return\n\n if (!allowCreate && (isEmpty || isAllSelected)) return\n\n onInternalOpen()\n\n if (inputRef.current) inputRef.current.focus()\n }, [allowCreate, formControlProps, isAllSelected, isEmpty, onInternalOpen])\n\n const onFocusFirst = useCallback(() => {\n const id = setTimeout(() => {\n if (isEmpty || isAllSelected) return\n\n const first = descendants.enabledFirstValue(\n ({ node }) => \"target\" in node.dataset,\n )\n\n if (!first) return\n\n if (!isMulti || !omitSelectedValues) {\n setFocusedIndex(first.index)\n } else {\n if (selectedIndexes.includes(first.index)) {\n const enabledFirst = enabledValues[0]\n\n setFocusedIndex(enabledFirst.index)\n } else {\n setFocusedIndex(first.index)\n }\n }\n })\n\n timeoutIds.current.add(id)\n }, [\n descendants,\n enabledValues,\n isAllSelected,\n isEmpty,\n isMulti,\n omitSelectedValues,\n selectedIndexes,\n ])\n\n const onFocusLast = useCallback(() => {\n const id = setTimeout(() => {\n if (isEmpty || isAllSelected) return\n\n const last = descendants.enabledLastValue(\n ({ node }) => \"target\" in node.dataset,\n )\n\n if (!last) return\n\n if (!isMulti || !omitSelectedValues) {\n setFocusedIndex(last.index)\n } else {\n if (selectedIndexes.includes(last.index)) {\n const enabledLast = enabledValues.reverse()[0]\n\n setFocusedIndex(enabledLast.index)\n } else {\n setFocusedIndex(last.index)\n }\n }\n })\n\n timeoutIds.current.add(id)\n }, [\n descendants,\n enabledValues,\n isAllSelected,\n isEmpty,\n isMulti,\n omitSelectedValues,\n selectedIndexes,\n ])\n\n const onFocusSelected = useCallback(() => {\n const id = setTimeout(() => {\n const values = descendants.enabledValues()\n\n const selected = values.find(({ node }) =>\n !isMulti\n ? node.dataset.value === value\n : value.includes(node.dataset.value ?? \"\"),\n )\n\n if (selected) setFocusedIndex(selected.index)\n })\n\n timeoutIds.current.add(id)\n }, [descendants, isMulti, value])\n\n const onFocusNext = useCallback(\n (index: number = focusedIndex) => {\n const id = setTimeout(() => {\n const next = descendants.enabledNextValue(\n index,\n ({ node }) => \"target\" in node.dataset,\n )\n\n if (!next) return\n\n if (!isMulti || !omitSelectedValues) {\n setFocusedIndex(next.index)\n } else {\n if (selectedIndexes.includes(next.index)) {\n const enabledNext =\n enabledValues.find(({ index }) => next.index < index) ??\n enabledValues[0]\n\n setFocusedIndex(enabledNext.index)\n } else {\n setFocusedIndex(next.index)\n }\n }\n })\n\n timeoutIds.current.add(id)\n },\n [\n descendants,\n enabledValues,\n focusedIndex,\n isMulti,\n omitSelectedValues,\n selectedIndexes,\n ],\n )\n\n const onFocusPrev = useCallback(\n (index: number = focusedIndex) => {\n const id = setTimeout(() => {\n const prev = descendants.enabledPrevValue(\n index,\n ({ node }) => \"target\" in node.dataset,\n )\n\n if (!prev) return\n\n if (!isMulti || !omitSelectedValues) {\n setFocusedIndex(prev.index)\n } else {\n if (selectedIndexes.includes(prev.index)) {\n const enabledPrev =\n enabledValues.reverse().find(({ index }) => index < prev.index) ??\n enabledValues[0]\n\n setFocusedIndex(enabledPrev.index)\n } else {\n setFocusedIndex(prev.index)\n }\n }\n })\n\n timeoutIds.current.add(id)\n },\n [\n descendants,\n enabledValues,\n focusedIndex,\n isMulti,\n omitSelectedValues,\n selectedIndexes,\n ],\n )\n\n const onFocusFirstOrSelected =\n isEmptyValue || omitSelectedValues ? onFocusFirst : onFocusSelected\n const onFocusLastOrSelected =\n isEmptyValue || omitSelectedValues ? onFocusLast : onFocusSelected\n\n const pickOptions = useCallback(\n (value: string) => {\n const values = descendants.values()\n\n let isHit = false\n let isFocused = false\n\n values.forEach(({ node, index }) => {\n if (format(node.textContent ?? \"\").includes(value)) {\n isHit = true\n\n const isDisabled = \"disabled\" in node.dataset\n\n node.dataset.target = \"\"\n\n if (!isFocused && !isDisabled) {\n isFocused = true\n\n setFocusedIndex(index)\n }\n } else {\n delete node.dataset.target\n }\n })\n\n setIsHit(isHit)\n },\n [descendants, format],\n )\n\n const rebirthOptions = useCallback(\n (runFocus = true) => {\n const values = descendants.values()\n\n values.forEach(({ node }) => {\n node.dataset.target = \"\"\n })\n\n if (runFocus) onFocusFirst()\n\n setIsHit(true)\n },\n [descendants, onFocusFirst],\n )\n\n const getSelectedValues = useCallback(\n (newValues: string | string[]) => {\n const enabledValues = descendants.enabledValues()\n\n const resolvedValues = isArray(newValues) ? newValues : [newValues]\n\n const selectedValues = resolvedValues\n .map((value) => {\n const { node } =\n enabledValues.find(({ node }) => node.dataset.value === value) ?? {}\n\n if (node) {\n const el = Array.from(node.children).find(\n (child) => child.getAttribute(\"data-label\") !== null,\n )\n\n return el?.textContent ?? undefined\n } else {\n return allowFree ? value : undefined\n }\n })\n .filter(Boolean) as string[]\n\n return selectedValues\n },\n [allowFree, descendants],\n )\n\n const onChangeLabel = useCallback(\n (newValue: string, { forceUpdate, runOmit = true }: ChangeOptions = {}) => {\n const selectedValues = getSelectedValues(newValue)\n\n if (!forceUpdate && !selectedValues.length) return\n\n setLabel((prev) => {\n if (!isMulti) {\n return selectedValues[0] as T\n } else {\n selectedValues.forEach((selectedValue) => {\n const isSelected =\n isArray(prev) && prev.includes(selectedValue ?? \"\")\n\n if (!isSelected) {\n prev = [...(isArray(prev) ? prev : []), selectedValue] as T\n } else if (runOmit) {\n prev = (\n isArray(prev)\n ? prev.filter((value) => value !== selectedValue)\n : undefined\n ) as T\n }\n })\n\n return prev\n }\n })\n },\n [getSelectedValues, isMulti],\n )\n\n const onChange = useCallback(\n (\n newValue: string,\n { forceUpdate, runRebirth = true }: ChangeOptions = {},\n ) => {\n setValue((prev) => {\n let next: T\n\n if (!isArray(prev)) {\n next = newValue as T\n } else {\n const isSelected = prev.includes(newValue)\n\n if (!isSelected) {\n next = [...prev, newValue] as T\n } else {\n next = prev.filter((value) => value !== newValue) as T\n }\n }\n\n prevValue.current = next\n return next\n })\n\n const isHit =\n descendants\n .values()\n .filter(({ node }) =>\n format(node.textContent ?? \"\").includes(newValue),\n ).length > 0\n\n onChangeLabel(newValue, { forceUpdate })\n\n if (allowFree || isHit) setInputValue(\"\")\n\n if (isMulti && runRebirth) rebirthOptions(false)\n },\n [\n allowFree,\n isMulti,\n onChangeLabel,\n rebirthOptions,\n setValue,\n descendants,\n format,\n ],\n )\n\n const onSelect = useCallback(() => {\n let enabledValue = descendants.value(focusedIndex)\n\n if (\"disabled\" in (enabledValue?.node.dataset ?? {}))\n enabledValue = undefined\n\n if (!enabledValue) return\n\n const value = enabledValue.node.dataset.value ?? \"\"\n\n onChange(value)\n\n if (closeOnSelect) onClose()\n\n if (omitSelectedValues) onFocusNext()\n }, [\n closeOnSelect,\n descendants,\n focusedIndex,\n omitSelectedValues,\n onChange,\n onClose,\n onFocusNext,\n ])\n\n const onSearch = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (!isOpen) onOpen()\n\n onSearchProp?.(ev)\n\n const value = ev.target.value\n const computedValue = format(value)\n\n if (computedValue) {\n pickOptions(computedValue)\n } else {\n rebirthOptions()\n }\n\n setInputValue(value)\n },\n [isOpen, onOpen, format, onSearchProp, pickOptions, rebirthOptions],\n )\n\n const onCompositionStart = useCallback(() => {\n isComposition.current = true\n }, [])\n\n const onCompositionEnd = useCallback(() => {\n isComposition.current = false\n }, [])\n\n const onCreate = useCallback(() => {\n if (!listRef.current) return\n\n const newItem: AutocompleteItem = { label: inputValue, value: inputValue }\n\n let newItems: AutocompleteItem[] = []\n\n if (resolvedItems) newItems = [...resolvedItems]\n\n if (firstInsertPositionItem === \"first\") {\n newItems = [newItem, ...newItems]\n } else if (firstInsertPositionItem === \"last\") {\n newItems = [...newItems, newItem]\n } else {\n const i = newItems.findIndex(\n ({ label }) => label === firstInsertPositionItem,\n )\n\n const targetItem = newItems[i]\n\n if (i !== -1 && \"items\" in targetItem) {\n if (secondInsertPositionItem === \"first\") {\n targetItem.items = [newItem, ...(targetItem.items ?? [])]\n } else {\n targetItem.items = [...(targetItem.items ?? []), newItem]\n }\n\n newItems[i] = targetItem\n } else {\n console.warn(\n `${\n !isMulti ? \"Autocomplete\" : \"MultiAutocomplete\"\n }: '${firstInsertPositionItem}' specified in insertPositionItem does not exist in the option group.`,\n )\n }\n }\n\n setResolvedItems(newItems)\n onChange(inputValue)\n rebirthOptions(false)\n\n const index = flattenItems(newItems).findIndex(\n ({ value }) => value === inputValue,\n )\n\n setFocusedIndex(index)\n\n onCreateProp?.(newItem, newItems)\n }, [\n inputValue,\n resolvedItems,\n firstInsertPositionItem,\n onChange,\n rebirthOptions,\n onCreateProp,\n secondInsertPositionItem,\n isMulti,\n ])\n\n const onClick = useCallback(() => {\n if (isOpen) {\n if (inputRef.current) inputRef.current.focus()\n } else {\n onOpen()\n\n onFocusFirstOrSelected()\n }\n }, [isOpen, onFocusFirstOrSelected, onOpen])\n\n const onFocus = useCallback(() => {\n if (isOpen) return\n\n onOpen()\n\n onFocusFirstOrSelected()\n }, [isOpen, onFocusFirstOrSelected, onOpen])\n\n const onBlur = useCallback(\n (ev: FocusEvent<HTMLDivElement>) => {\n const relatedTarget = getEventRelatedTarget(ev)\n\n if (isContains(containerRef.current, relatedTarget)) return\n\n if (!closeOnBlur && isHit) return\n\n if (allowFree && !!inputValue) onChange(inputValue, { runRebirth: false })\n\n setInputValue(\"\")\n\n if (isOpen) onClose()\n },\n [closeOnBlur, isHit, isOpen, inputValue, allowFree, onClose, onChange],\n )\n\n const onDelete = useCallback(() => {\n if (!isMulti) {\n onChange(\"\", { forceUpdate: true })\n } else {\n onChange(value[value.length - 1])\n }\n\n if (!isOpen) onFocus()\n }, [isMulti, isOpen, onChange, onFocus, value])\n\n const onClear = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n ev.stopPropagation()\n\n prevValue.current = [] as unknown as T\n setValue([] as unknown as T)\n setLabel(undefined)\n setInputValue(\"\")\n rebirthOptions()\n\n if (isOpen && inputRef.current) inputRef.current.focus()\n },\n [isOpen, setLabel, setInputValue, setValue, rebirthOptions],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLDivElement>) => {\n if (ev.key === \" \") ev.key = ev.code\n\n if (formControlProps.disabled || formControlProps.readOnly) return\n if (isComposition.current) return\n\n const enabledDelete = label === inputValue || !inputValue.length\n\n const actions: { [key: string]: Function | undefined } = {\n ArrowDown: isFocused\n ? () => onFocusNext()\n : !isOpen\n ? funcAll(onOpen, onFocusFirstOrSelected)\n : undefined,\n ArrowUp: isFocused\n ? () => onFocusPrev()\n : !isOpen\n ? funcAll(onOpen, onFocusLastOrSelected)\n : undefined,\n Space: isCreate\n ? onCreate\n : isFocused\n ? onSelect\n : !isOpen\n ? funcAll(onOpen, onFocusFirstOrSelected)\n : undefined,\n Enter: isCreate\n ? onCreate\n : isFocused\n ? onSelect\n : !isOpen\n ? funcAll(onOpen, onFocusFirstOrSelected)\n : allowFree && isMulti\n ? () => {\n if (inputValue) onChange(inputValue)\n\n setFocusedIndex(0)\n }\n : undefined,\n Home: isOpen ? onFocusFirst : undefined,\n End: isOpen ? onFocusLast : undefined,\n Escape: closeOnEsc ? onClose : undefined,\n Backspace: !isEmptyValue && enabledDelete ? onDelete : undefined,\n }\n\n const action = actions[ev.key]\n\n if (!action) return\n\n ev.preventDefault()\n ev.stopPropagation()\n\n action(ev)\n },\n [\n allowFree,\n formControlProps,\n label,\n inputValue,\n onOpen,\n isFocused,\n isMulti,\n onFocusFirstOrSelected,\n onFocusNext,\n onFocusLastOrSelected,\n onFocusPrev,\n isCreate,\n onCreate,\n onSelect,\n isOpen,\n onFocusFirst,\n onFocusLast,\n closeOnEsc,\n onClose,\n isEmptyValue,\n onDelete,\n onChange,\n ],\n )\n\n useEffect(() => {\n if (!isMulti) return\n\n if (!omitSelectedValues && isUndefined(maxSelectValues)) return\n\n const isAll = value.length > 0 && value.length === descendants.count()\n const isMax = value.length === maxSelectValues\n\n if (isAll || isMax) {\n onClose()\n setIsAllSelected(true)\n } else {\n setIsAllSelected(false)\n }\n }, [\n omitSelectedValues,\n value,\n descendants,\n isMulti,\n onClose,\n maxSelectValues,\n ])\n\n useEffect(() => {\n if (isMulti) {\n if (\n JSON.stringify(prevValue.current ?? []) === JSON.stringify(value ?? [])\n )\n return\n\n const label = getSelectedValues(value)\n\n setLabel(label as T)\n } else {\n if (prevValue.current === value) return\n\n onChangeLabel(value, { runOmit: false })\n }\n }, [isMulti, value, onChangeLabel, getSelectedValues])\n\n useUpdateEffect(() => {\n if (isOpen || allowFree) return\n\n setFocusedIndex(-1)\n setInputValue(\"\")\n }, [isOpen])\n\n useUpdateEffect(() => {\n if (!isHit) setFocusedIndex(-2)\n }, [isHit])\n\n useUpdateEffect(() => {\n setResolvedItems(items ? JSON.parse(JSON.stringify(items)) : undefined)\n }, [items])\n\n useUnmountEffect(() => {\n timeoutIds.current.forEach((id) => clearTimeout(id))\n timeoutIds.current.clear()\n })\n\n useOutsideClick({\n ref: containerRef,\n handler: onClose,\n enabled: isOpen && (closeOnBlur || !isHit),\n })\n\n const getPopoverProps = useCallback(\n (props?: PopoverProps): PopoverProps => ({\n closeOnBlur,\n openDelay,\n closeDelay,\n isLazy,\n lazyBehavior,\n animation,\n duration,\n offset,\n gutter,\n preventOverflow,\n flip,\n matchWidth,\n boundary,\n eventListeners,\n strategy,\n placement,\n modifiers,\n ...props,\n trigger: \"never\",\n closeOnButton: false,\n isOpen,\n onOpen,\n onClose,\n }),\n [\n closeOnBlur,\n openDelay,\n closeDelay,\n isLazy,\n lazyBehavior,\n animation,\n duration,\n offset,\n gutter,\n preventOverflow,\n flip,\n matchWidth,\n boundary,\n eventListeners,\n strategy,\n placement,\n modifiers,\n isOpen,\n onOpen,\n onClose,\n ],\n )\n\n const getContainerProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ref: mergeRefs(containerRef, ref),\n ...containerProps,\n ...props,\n ...formControlProps,\n onClick: handlerAll(props.onClick, rest.onClick, onClick),\n onBlur: handlerAll(props.onBlur, rest.onBlur, onBlur),\n }),\n\n [containerProps, formControlProps, onBlur, onClick, rest],\n )\n\n const getFieldProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ref,\n tabIndex: -1,\n ...props,\n ...formControlProps,\n placeholder,\n \"data-active\": dataAttr(isOpen),\n \"aria-expanded\": dataAttr(isOpen),\n onFocus: handlerAll(props.onFocus, onFocusProp, onFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDownProp, onKeyDown),\n }),\n [\n formControlProps,\n placeholder,\n isOpen,\n onFocusProp,\n onFocus,\n onKeyDownProp,\n onKeyDown,\n ],\n )\n\n return {\n id,\n descendants,\n value,\n label,\n inputValue,\n isHit,\n isEmpty,\n computedChildren,\n focusedIndex,\n omitSelectedValues,\n closeOnSelect,\n allowCreate,\n allowFree,\n emptyMessage,\n isOpen,\n isAllSelected,\n listRef,\n inputRef,\n optionProps,\n formControlProps,\n setFocusedIndex,\n onChangeLabel,\n onChange,\n onSearch,\n onCreate,\n onClear,\n onCompositionStart,\n onCompositionEnd,\n pickOptions,\n rebirthOptions,\n onOpen,\n onClose,\n onFocusFirst,\n onFocusLast,\n onFocusSelected,\n onFocusNext,\n onFocusPrev,\n getPopoverProps,\n getContainerProps,\n getFieldProps,\n inputProps: inputProps as DOMAttributes<HTMLInputElement>,\n }\n}\n\nexport type UseAutocompleteReturn = ReturnType<typeof useAutocomplete>\n\nexport const useAutocompleteInput = () => {\n const {\n id,\n inputRef,\n onSearch,\n onCompositionStart,\n onCompositionEnd,\n isAllSelected,\n formControlProps,\n inputProps,\n isOpen,\n focusedIndex,\n listRef,\n } = useAutocompleteContext()\n\n const { value } = useAutocompleteDescendantsContext()\n\n useUpdateEffect(() => {\n if (isAllSelected && inputRef.current) inputRef.current.blur()\n }, [isAllSelected])\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n (props = {}, ref = null) => ({\n ref: mergeRefs(inputRef, ref),\n ...formControlProps,\n role: \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": isOpen,\n \"aria-activedescendant\": value(focusedIndex)?.node.id,\n \"aria-controls\": listRef.current?.id,\n autoCapitalize: \"none\",\n autoComplete: \"off\",\n spellCheck: \"false\",\n ...inputProps,\n ...props,\n id,\n cursor: formControlProps.readOnly ? \"default\" : \"text\",\n pointerEvents:\n formControlProps.disabled || isAllSelected ? \"none\" : \"auto\",\n tabIndex: isAllSelected ? -1 : 0,\n onChange: handlerAll(props.onChange, onSearch),\n onCompositionStart: handlerAll(\n props.onCompositionStart,\n inputProps.onCompositionStart,\n onCompositionStart,\n ),\n onCompositionEnd: handlerAll(\n props.onCompositionEnd,\n inputProps.onCompositionEnd,\n onCompositionEnd,\n ),\n }),\n [\n listRef,\n focusedIndex,\n isOpen,\n inputProps,\n inputRef,\n formControlProps,\n id,\n isAllSelected,\n value,\n onSearch,\n onCompositionStart,\n onCompositionEnd,\n ],\n )\n\n return {\n getInputProps,\n }\n}\n\nexport type UseAutocompleteInputReturn = ReturnType<typeof useAutocompleteInput>\n"],"mappings":"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","names":["items","label","value","props","i","id","index","isHit","isFocused","enabledValues","selectedValues","node"]}
@@ -0,0 +1,60 @@
1
+ "use client"
2
+ import {
3
+ useAutocompleteEmpty
4
+ } from "./chunk-PRDD3JJO.mjs";
5
+ import {
6
+ AutocompleteItemIcon
7
+ } from "./chunk-JXFXCGZK.mjs";
8
+ import {
9
+ useAutocompleteContext
10
+ } from "./chunk-JPUKYLBW.mjs";
11
+
12
+ // src/autocomplete-empty.tsx
13
+ import { ui, forwardRef } from "@yamada-ui/core";
14
+ import { cx } from "@yamada-ui/utils";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var AutocompleteEmpty = forwardRef(
17
+ ({ className, icon, children, ...rest }, ref) => {
18
+ const { emptyMessage, styles } = useAutocompleteContext();
19
+ const { getEmptyProps } = useAutocompleteEmpty();
20
+ children != null ? children : children = emptyMessage;
21
+ const css = {
22
+ textDecoration: "none",
23
+ color: "inherit",
24
+ userSelect: "none",
25
+ display: "flex",
26
+ width: "100%",
27
+ alignItems: "center",
28
+ textAlign: "start",
29
+ flex: "0 0 auto",
30
+ outline: 0,
31
+ gap: "0.75rem",
32
+ pointerEvents: "none",
33
+ ...styles.item
34
+ };
35
+ return /* @__PURE__ */ jsxs(
36
+ ui.li,
37
+ {
38
+ className: cx("ui-autocomplete__item--empty", className),
39
+ __css: css,
40
+ ...getEmptyProps(rest, ref),
41
+ children: [
42
+ icon !== null ? /* @__PURE__ */ jsx(AutocompleteItemIcon, { children: icon || /* @__PURE__ */ jsx(MinusIcon, {}) }) : null,
43
+ icon ? /* @__PURE__ */ jsx(ui.span, { style: { pointerEvents: "none", flex: 1 }, lineClamp: 1, children }) : children
44
+ ]
45
+ }
46
+ );
47
+ }
48
+ );
49
+ var MinusIcon = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 448 512", width: "1em", height: "1em", children: /* @__PURE__ */ jsx(
50
+ "path",
51
+ {
52
+ fill: "currentColor",
53
+ d: "M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"
54
+ }
55
+ ) });
56
+
57
+ export {
58
+ AutocompleteEmpty
59
+ };
60
+ //# sourceMappingURL=chunk-GOMUH7TZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autocomplete-empty.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport { cx } from \"@yamada-ui/utils\"\nimport type { FC, ReactElement } from \"react\"\nimport { useAutocompleteContext } from \"./autocomplete-context\"\nimport { AutocompleteItemIcon } from \"./autocomplete-icon\"\nimport { useAutocompleteEmpty } from \"./use-autocomplete-option\"\n\ninterface AutocompleteEmptyOptions {\n /**\n * The autocomplete empty option icon to use.\n */\n icon?: ReactElement\n /**\n * The label of the autocomplete empty option.\n */\n children?: string\n}\n\nexport interface AutocompleteEmptyProps\n extends Omit<HTMLUIProps<\"li\">, \"children\">,\n AutocompleteEmptyOptions {}\n\nexport const AutocompleteEmpty = forwardRef<AutocompleteEmptyProps, \"li\">(\n ({ className, icon, children, ...rest }, ref) => {\n const { emptyMessage, styles } = useAutocompleteContext()\n const { getEmptyProps } = useAutocompleteEmpty()\n\n children ??= emptyMessage\n\n const css: CSSUIObject = {\n textDecoration: \"none\",\n color: \"inherit\",\n userSelect: \"none\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n textAlign: \"start\",\n flex: \"0 0 auto\",\n outline: 0,\n gap: \"0.75rem\",\n pointerEvents: \"none\",\n ...styles.item,\n }\n\n return (\n <ui.li\n className={cx(\"ui-autocomplete__item--empty\", className)}\n __css={css}\n {...getEmptyProps(rest, ref)}\n >\n {icon !== null ? (\n <AutocompleteItemIcon>{icon || <MinusIcon />}</AutocompleteItemIcon>\n ) : null}\n {icon ? (\n <ui.span style={{ pointerEvents: \"none\", flex: 1 }} lineClamp={1}>\n {children}\n </ui.span>\n ) : (\n children\n )}\n </ui.li>\n )\n },\n)\n\nconst MinusIcon: FC = () => (\n <svg viewBox=\"0 0 448 512\" width=\"1em\" height=\"1em\">\n <path\n fill=\"currentColor\"\n d=\"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"\n />\n </svg>\n)\n"],"mappings":";;;;;;;;;;;;AACA,SAAS,IAAI,kBAAkB;AAC/B,SAAS,UAAU;AA4Cb,SAMmC,KANnC;AAvBC,IAAM,oBAAoB;AAAA,EAC/B,CAAC,EAAE,WAAW,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ;AAC/C,UAAM,EAAE,cAAc,OAAO,IAAI,uBAAuB;AACxD,UAAM,EAAE,cAAc,IAAI,qBAAqB;AAE/C,6CAAa;AAEb,UAAM,MAAmB;AAAA,MACvB,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,eAAe;AAAA,MACf,GAAG,OAAO;AAAA,IACZ;AAEA,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC,WAAW,GAAG,gCAAgC,SAAS;AAAA,QACvD,OAAO;AAAA,QACN,GAAG,cAAc,MAAM,GAAG;AAAA,QAE1B;AAAA,mBAAS,OACR,oBAAC,wBAAsB,kBAAQ,oBAAC,aAAU,GAAG,IAC3C;AAAA,UACH,OACC,oBAAC,GAAG,MAAH,EAAQ,OAAO,EAAE,eAAe,QAAQ,MAAM,EAAE,GAAG,WAAW,GAC5D,UACH,IAEA;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AACF;AAEA,IAAM,YAAgB,MACpB,oBAAC,SAAI,SAAQ,eAAc,OAAM,OAAM,QAAO,OAC5C;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,GAAE;AAAA;AACJ,GACF;","names":[]}
@@ -0,0 +1,87 @@
1
+ "use client"
2
+ import {
3
+ useAutocompleteList
4
+ } from "./chunk-QGOCVO2C.mjs";
5
+ import {
6
+ useAutocompleteContext
7
+ } from "./chunk-JPUKYLBW.mjs";
8
+
9
+ // src/autocomplete-list.tsx
10
+ import { ui, forwardRef } from "@yamada-ui/core";
11
+ import { PopoverContent } from "@yamada-ui/popover";
12
+ import { cx, handlerAll } from "@yamada-ui/utils";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ var AutocompleteList = forwardRef(
15
+ ({
16
+ className,
17
+ w,
18
+ width,
19
+ minW,
20
+ minWidth,
21
+ maxW,
22
+ maxWidth,
23
+ contentProps,
24
+ header,
25
+ footer,
26
+ children,
27
+ ...rest
28
+ }, ref) => {
29
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
30
+ const { styles } = useAutocompleteContext();
31
+ const { onAnimationComplete, getListProps } = useAutocompleteList();
32
+ width != null ? width : width = w;
33
+ width != null ? width : width = (_c = (_a = styles.list) == null ? void 0 : _a.width) != null ? _c : (_b = styles.list) == null ? void 0 : _b.w;
34
+ minWidth != null ? minWidth : minWidth = minW;
35
+ minWidth != null ? minWidth : minWidth = (_f = (_d = styles.list) == null ? void 0 : _d.minWidth) != null ? _f : (_e = styles.list) == null ? void 0 : _e.minW;
36
+ maxWidth != null ? maxWidth : maxWidth = maxW;
37
+ maxWidth != null ? maxWidth : maxWidth = (_i = (_g = styles.list) == null ? void 0 : _g.maxWidth) != null ? _i : (_h = styles.list) == null ? void 0 : _h.maxW;
38
+ return /* @__PURE__ */ jsxs(
39
+ PopoverContent,
40
+ {
41
+ as: "div",
42
+ className: "ui-autocomplete__popover",
43
+ width,
44
+ minWidth,
45
+ maxWidth,
46
+ __css: { ...styles.content, width, minWidth, maxWidth },
47
+ ...contentProps,
48
+ onAnimationComplete: handlerAll(
49
+ contentProps == null ? void 0 : contentProps.onAnimationComplete,
50
+ onAnimationComplete
51
+ ),
52
+ children: [
53
+ header ? /* @__PURE__ */ jsx(
54
+ ui.div,
55
+ {
56
+ className: "ui-autocomplete__header",
57
+ __css: { ...styles.header },
58
+ children: header
59
+ }
60
+ ) : null,
61
+ /* @__PURE__ */ jsx(
62
+ ui.ul,
63
+ {
64
+ className: cx("ui-autocomplete__list", className),
65
+ __css: { ...styles.list },
66
+ ...getListProps(rest, ref),
67
+ children
68
+ }
69
+ ),
70
+ footer ? /* @__PURE__ */ jsx(
71
+ ui.div,
72
+ {
73
+ className: "ui-autocomplete__footer",
74
+ __css: { ...styles.footer },
75
+ children: footer
76
+ }
77
+ ) : null
78
+ ]
79
+ }
80
+ );
81
+ }
82
+ );
83
+
84
+ export {
85
+ AutocompleteList
86
+ };
87
+ //# sourceMappingURL=chunk-HL2KEBRX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autocomplete-list.tsx"],"sourcesContent":["import type { CSSUIProps, HTMLUIProps } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport type { MotionPropsWithoutChildren } from \"@yamada-ui/motion\"\nimport { PopoverContent } from \"@yamada-ui/popover\"\nimport { cx, handlerAll } from \"@yamada-ui/utils\"\nimport type { ReactNode } from \"react\"\nimport { useAutocompleteContext } from \"./autocomplete-context\"\nimport { useAutocompleteList } from \"./use-autocomplete-list\"\n\nexport interface AutocompleteListProps extends HTMLUIProps<\"ul\"> {\n contentProps?: MotionPropsWithoutChildren\n header?: ReactNode\n footer?: ReactNode\n}\n\nexport const AutocompleteList = forwardRef<AutocompleteListProps, \"ul\">(\n (\n {\n className,\n w,\n width,\n minW,\n minWidth,\n maxW,\n maxWidth,\n contentProps,\n header,\n footer,\n children,\n ...rest\n },\n ref,\n ) => {\n const { styles } = useAutocompleteContext()\n const { onAnimationComplete, getListProps } = useAutocompleteList()\n\n width ??= w\n width ??= (styles.list?.width ?? styles.list?.w) as CSSUIProps[\"width\"]\n minWidth ??= minW\n minWidth ??= (styles.list?.minWidth ??\n styles.list?.minW) as CSSUIProps[\"minWidth\"]\n maxWidth ??= maxW\n maxWidth ??= (styles.list?.maxWidth ??\n styles.list?.maxW) as CSSUIProps[\"maxWidth\"]\n\n return (\n <PopoverContent\n as=\"div\"\n className=\"ui-autocomplete__popover\"\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n __css={{ ...styles.content, width, minWidth, maxWidth }}\n {...contentProps}\n onAnimationComplete={handlerAll(\n contentProps?.onAnimationComplete,\n onAnimationComplete,\n )}\n >\n {header ? (\n <ui.div\n className=\"ui-autocomplete__header\"\n __css={{ ...styles.header }}\n >\n {header}\n </ui.div>\n ) : null}\n\n <ui.ul\n className={cx(\"ui-autocomplete__list\", className)}\n __css={{ ...styles.list }}\n {...getListProps(rest, ref)}\n >\n {children}\n </ui.ul>\n\n {footer ? (\n <ui.div\n className=\"ui-autocomplete__footer\"\n __css={{ ...styles.footer }}\n >\n {footer}\n </ui.div>\n ) : null}\n </PopoverContent>\n )\n },\n)\n"],"mappings":";;;;;;;;;AACA,SAAS,IAAI,kBAAkB;AAE/B,SAAS,sBAAsB;AAC/B,SAAS,IAAI,kBAAkB;AA0CzB,SAcI,KAdJ;AA/BC,IAAM,mBAAmB;AAAA,EAC9B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AAhCP;AAiCI,UAAM,EAAE,OAAO,IAAI,uBAAuB;AAC1C,UAAM,EAAE,qBAAqB,aAAa,IAAI,oBAAoB;AAElE,oCAAU;AACV,qCAAW,kBAAO,SAAP,mBAAa,UAAb,aAAsB,YAAO,SAAP,mBAAa;AAC9C,6CAAa;AACb,8CAAc,kBAAO,SAAP,mBAAa,aAAb,aACZ,YAAO,SAAP,mBAAa;AACf,6CAAa;AACb,8CAAc,kBAAO,SAAP,mBAAa,aAAb,aACZ,YAAO,SAAP,mBAAa;AAEf,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,WAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,GAAG,OAAO,SAAS,OAAO,UAAU,SAAS;AAAA,QACrD,GAAG;AAAA,QACJ,qBAAqB;AAAA,UACnB,6CAAc;AAAA,UACd;AAAA,QACF;AAAA,QAEC;AAAA,mBACC;AAAA,YAAC,GAAG;AAAA,YAAH;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,GAAG,OAAO,OAAO;AAAA,cAEzB;AAAA;AAAA,UACH,IACE;AAAA,UAEJ;AAAA,YAAC,GAAG;AAAA,YAAH;AAAA,cACC,WAAW,GAAG,yBAAyB,SAAS;AAAA,cAChD,OAAO,EAAE,GAAG,OAAO,KAAK;AAAA,cACvB,GAAG,aAAa,MAAM,GAAG;AAAA,cAEzB;AAAA;AAAA,UACH;AAAA,UAEC,SACC;AAAA,YAAC,GAAG;AAAA,YAAH;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,GAAG,OAAO,OAAO;AAAA,cAEzB;AAAA;AAAA,UACH,IACE;AAAA;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;","names":[]}
@@ -0,0 +1,78 @@
1
+ "use client"
2
+ import {
3
+ useAutocompleteContext,
4
+ useAutocompleteDescendantsContext
5
+ } from "./chunk-JPUKYLBW.mjs";
6
+
7
+ // src/use-autocomplete-option-group.ts
8
+ import { layoutStyleProperties } from "@yamada-ui/core";
9
+ import { isArray, splitObject } from "@yamada-ui/utils";
10
+ import { useCallback } from "react";
11
+ var useAutocompleteOptionGroup = ({
12
+ label,
13
+ ...rest
14
+ }) => {
15
+ const { value, omitSelectedValues } = useAutocompleteContext();
16
+ const isMulti = isArray(value);
17
+ const descendants = useAutocompleteDescendantsContext();
18
+ const values = descendants.values();
19
+ const selectedValues = isMulti && omitSelectedValues ? descendants.values(
20
+ ({ node }) => {
21
+ var _a;
22
+ return value.includes((_a = node.dataset.value) != null ? _a : "");
23
+ }
24
+ ) : [];
25
+ const selectedIndexes = selectedValues.map(({ index }) => index);
26
+ const childValues = values.filter(
27
+ ({ node, index }) => {
28
+ var _a;
29
+ return ((_a = node.parentElement) == null ? void 0 : _a.dataset.label) === label && !selectedIndexes.includes(index) && "target" in node.dataset;
30
+ }
31
+ );
32
+ const isEmpty = !childValues.length;
33
+ const [containerProps, groupProps] = splitObject(rest, layoutStyleProperties);
34
+ const getContainerProps = useCallback(
35
+ (props = {}, ref = null) => {
36
+ const style = {
37
+ border: "0px",
38
+ clip: "rect(0px, 0px, 0px, 0px)",
39
+ height: "1px",
40
+ width: "1px",
41
+ margin: "-1px",
42
+ padding: "0px",
43
+ overflow: "hidden",
44
+ whiteSpace: "nowrap",
45
+ position: "absolute"
46
+ };
47
+ return {
48
+ ref,
49
+ ...props,
50
+ ...containerProps,
51
+ style: isEmpty ? style : void 0,
52
+ "data-label": label,
53
+ role: "autocomplete-group-container"
54
+ };
55
+ },
56
+ [containerProps, isEmpty, label]
57
+ );
58
+ const getGroupProps = useCallback(
59
+ (props = {}, ref = null) => ({
60
+ ref,
61
+ ...props,
62
+ ...groupProps,
63
+ "data-label": label,
64
+ role: "autocomplete-group"
65
+ }),
66
+ [groupProps, label]
67
+ );
68
+ return {
69
+ label,
70
+ getContainerProps,
71
+ getGroupProps
72
+ };
73
+ };
74
+
75
+ export {
76
+ useAutocompleteOptionGroup
77
+ };
78
+ //# sourceMappingURL=chunk-JMX72TSD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/use-autocomplete-option-group.ts"],"sourcesContent":["import type { HTMLUIProps, PropGetter } from \"@yamada-ui/core\"\nimport { layoutStyleProperties } from \"@yamada-ui/core\"\nimport { isArray, splitObject } from \"@yamada-ui/utils\"\nimport type { CSSProperties } from \"react\"\nimport { useCallback } from \"react\"\nimport {\n useAutocompleteContext,\n useAutocompleteDescendantsContext,\n} from \"./autocomplete-context\"\n\nexport interface UseAutocompleteOptionGroupProps extends HTMLUIProps<\"ul\"> {\n /**\n * The label of the autocomplete option group.\n */\n label: string\n}\n\nexport const useAutocompleteOptionGroup = ({\n label,\n ...rest\n}: UseAutocompleteOptionGroupProps) => {\n const { value, omitSelectedValues } = useAutocompleteContext()\n\n const isMulti = isArray(value)\n\n const descendants = useAutocompleteDescendantsContext()\n\n const values = descendants.values()\n const selectedValues =\n isMulti && omitSelectedValues\n ? descendants.values(({ node }) =>\n value.includes(node.dataset.value ?? \"\"),\n )\n : []\n const selectedIndexes = selectedValues.map(({ index }) => index)\n const childValues = values.filter(\n ({ node, index }) =>\n node.parentElement?.dataset.label === label &&\n !selectedIndexes.includes(index) &&\n \"target\" in node.dataset,\n )\n\n const isEmpty = !childValues.length\n\n const [containerProps, groupProps] = splitObject(rest, layoutStyleProperties)\n\n const getContainerProps: PropGetter<\"li\"> = useCallback(\n (props = {}, ref = null) => {\n const style: CSSProperties = {\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }\n\n return {\n ref,\n ...props,\n ...containerProps,\n style: isEmpty ? style : undefined,\n \"data-label\": label,\n role: \"autocomplete-group-container\",\n }\n },\n [containerProps, isEmpty, label],\n )\n\n const getGroupProps: PropGetter<\"ul\"> = useCallback(\n (props = {}, ref = null) => ({\n ref,\n ...props,\n ...groupProps,\n \"data-label\": label,\n role: \"autocomplete-group\",\n }),\n [groupProps, label],\n )\n\n return {\n label,\n getContainerProps,\n getGroupProps,\n }\n}\n\nexport type UseAutocompleteOptionGroupReturn = ReturnType<\n typeof useAutocompleteOptionGroup\n>\n"],"mappings":";;;;;;;AACA,SAAS,6BAA6B;AACtC,SAAS,SAAS,mBAAmB;AAErC,SAAS,mBAAmB;AAarB,IAAM,6BAA6B,CAAC;AAAA,EACzC;AAAA,EACA,GAAG;AACL,MAAuC;AACrC,QAAM,EAAE,OAAO,mBAAmB,IAAI,uBAAuB;AAE7D,QAAM,UAAU,QAAQ,KAAK;AAE7B,QAAM,cAAc,kCAAkC;AAEtD,QAAM,SAAS,YAAY,OAAO;AAClC,QAAM,iBACJ,WAAW,qBACP,YAAY;AAAA,IAAO,CAAC,EAAE,KAAK,MAAG;AA9BtC;AA+BU,mBAAM,UAAS,UAAK,QAAQ,UAAb,YAAsB,EAAE;AAAA;AAAA,EACzC,IACA,CAAC;AACP,QAAM,kBAAkB,eAAe,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK;AAC/D,QAAM,cAAc,OAAO;AAAA,IACzB,CAAC,EAAE,MAAM,MAAM,MAAG;AApCtB;AAqCM,yBAAK,kBAAL,mBAAoB,QAAQ,WAAU,SACtC,CAAC,gBAAgB,SAAS,KAAK,KAC/B,YAAY,KAAK;AAAA;AAAA,EACrB;AAEA,QAAM,UAAU,CAAC,YAAY;AAE7B,QAAM,CAAC,gBAAgB,UAAU,IAAI,YAAY,MAAM,qBAAqB;AAE5E,QAAM,oBAAsC;AAAA,IAC1C,CAAC,QAAQ,CAAC,GAAG,MAAM,SAAS;AAC1B,YAAM,QAAuB;AAAA,QAC3B,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAEA,aAAO;AAAA,QACL;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,UAAU,QAAQ;AAAA,QACzB,cAAc;AAAA,QACd,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,gBAAgB,SAAS,KAAK;AAAA,EACjC;AAEA,QAAM,gBAAkC;AAAA,IACtC,CAAC,QAAQ,CAAC,GAAG,MAAM,UAAU;AAAA,MAC3B;AAAA,MACA,GAAG;AAAA,MACH,GAAG;AAAA,MACH,cAAc;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,CAAC,YAAY,KAAK;AAAA,EACpB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,25 @@
1
+ "use client"
2
+
3
+ // src/autocomplete-context.ts
4
+ import { createDescendant } from "@yamada-ui/use-descendant";
5
+ import { createContext } from "@yamada-ui/utils";
6
+ var {
7
+ DescendantsContextProvider: AutocompleteDescendantsContextProvider,
8
+ useDescendantsContext: useAutocompleteDescendantsContext,
9
+ useDescendants: useAutocompleteDescendants,
10
+ useDescendant: useAutocompleteDescendant
11
+ } = createDescendant();
12
+ var [AutocompleteProvider, useAutocompleteContext] = createContext({
13
+ name: "AutocompleteContext",
14
+ errorMessage: `useAutocompleteContext returned is 'undefined'. Seems you forgot to wrap the components in "<Autocomplete />" or "<MultiAutocomplete />"`
15
+ });
16
+
17
+ export {
18
+ AutocompleteDescendantsContextProvider,
19
+ useAutocompleteDescendantsContext,
20
+ useAutocompleteDescendants,
21
+ useAutocompleteDescendant,
22
+ AutocompleteProvider,
23
+ useAutocompleteContext
24
+ };
25
+ //# sourceMappingURL=chunk-JPUKYLBW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autocomplete-context.ts"],"sourcesContent":["import type { CSSUIObject } from \"@yamada-ui/core\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\nimport type { Dispatch, DOMAttributes, RefObject, SetStateAction } from \"react\"\nimport type { ChangeOptions, UseAutocompleteProps } from \"./use-autocomplete\"\n\nexport const {\n DescendantsContextProvider: AutocompleteDescendantsContextProvider,\n useDescendantsContext: useAutocompleteDescendantsContext,\n useDescendants: useAutocompleteDescendants,\n useDescendant: useAutocompleteDescendant,\n} = createDescendant()\n\ninterface AutocompleteContext\n extends Omit<\n UseAutocompleteProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"onCreate\"\n > {\n value: string | string[]\n label: string | string[] | undefined\n inputValue: string\n isHit: boolean\n isEmpty: boolean\n isAllSelected: boolean\n onChange: (newValue: string, options?: ChangeOptions) => void\n onChangeLabel: (newValue: string, options?: ChangeOptions) => void\n pickOptions: (value: string) => void\n rebirthOptions: (runFocus?: boolean) => void\n inputProps: DOMAttributes<HTMLInputElement>\n isOpen: boolean\n onOpen: () => void\n onClose: () => void\n onCreate: () => void\n onFocusFirst: () => void\n onFocusLast: () => void\n onFocusNext: (index?: number) => void\n onFocusPrev: (index?: number) => void\n focusedIndex: number\n setFocusedIndex: Dispatch<SetStateAction<number>>\n listRef: RefObject<HTMLUListElement>\n inputRef: RefObject<HTMLInputElement>\n formControlProps: { [key: string]: any }\n styles: { [key: string]: CSSUIObject }\n}\n\nexport const [AutocompleteProvider, useAutocompleteContext] =\n createContext<AutocompleteContext>({\n name: \"AutocompleteContext\",\n errorMessage: `useAutocompleteContext returned is 'undefined'. Seems you forgot to wrap the components in \"<Autocomplete />\" or \"<MultiAutocomplete />\"`,\n })\n"],"mappings":";;;AACA,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAIvB,IAAM;AAAA,EACX,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,eAAe;AACjB,IAAI,iBAAiB;AAkCd,IAAM,CAAC,sBAAsB,sBAAsB,IACxD,cAAmC;AAAA,EACjC,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;","names":[]}
@@ -0,0 +1,102 @@
1
+ "use client"
2
+ import {
3
+ useAutocompleteContext
4
+ } from "./chunk-JPUKYLBW.mjs";
5
+
6
+ // src/autocomplete-icon.tsx
7
+ import { ui, forwardRef } from "@yamada-ui/core";
8
+ import { ChevronIcon, CloseIcon } from "@yamada-ui/icon";
9
+ import { useClickable } from "@yamada-ui/use-clickable";
10
+ import { cx, getValidChildren, isValidElement } from "@yamada-ui/utils";
11
+ import { cloneElement, useRef } from "react";
12
+ import { jsx } from "react/jsx-runtime";
13
+ var AutocompleteIcon = forwardRef(
14
+ ({ className, children, __css, ...rest }, ref) => {
15
+ const { styles } = useAutocompleteContext();
16
+ const css = {
17
+ position: "absolute",
18
+ top: "50%",
19
+ transform: "translateY(-50%)",
20
+ display: "inline-flex",
21
+ alignItems: "center",
22
+ justifyContent: "center",
23
+ pointerEvents: "none",
24
+ cursor: "pointer",
25
+ ...styles.icon,
26
+ ...__css
27
+ };
28
+ const validChildren = getValidChildren(children);
29
+ const cloneChildren = validChildren.map(
30
+ (child) => cloneElement(child, {
31
+ focusable: false,
32
+ "aria-hidden": true,
33
+ style: {
34
+ maxWidth: "1em",
35
+ maxHeight: "1em",
36
+ color: "currentColor"
37
+ }
38
+ })
39
+ );
40
+ return /* @__PURE__ */ jsx(
41
+ ui.div,
42
+ {
43
+ ref,
44
+ className: cx("ui-autocomplete__icon", className),
45
+ __css: css,
46
+ ...rest,
47
+ children: isValidElement(children) ? cloneChildren : /* @__PURE__ */ jsx(ChevronIcon, {})
48
+ }
49
+ );
50
+ }
51
+ );
52
+ var AutocompleteClearIcon = ({
53
+ className,
54
+ children,
55
+ ...props
56
+ }) => {
57
+ const ref = useRef(null);
58
+ const { styles } = useAutocompleteContext();
59
+ const isDisabled = props.disabled;
60
+ const rest = useClickable({
61
+ ref,
62
+ isDisabled,
63
+ ...props
64
+ });
65
+ return /* @__PURE__ */ jsx(
66
+ AutocompleteIcon,
67
+ {
68
+ "aria-label": "Clear value",
69
+ className: cx("ui-autocomplete__icon--clear", className),
70
+ __css: styles.clearIcon,
71
+ ...rest,
72
+ children: children != null ? children : /* @__PURE__ */ jsx(CloseIcon, { w: "0.5em", h: "0.5em" })
73
+ }
74
+ );
75
+ };
76
+ var AutocompleteItemIcon = forwardRef(({ className, ...rest }, ref) => {
77
+ const { styles } = useAutocompleteContext();
78
+ const css = {
79
+ flexShrink: 0,
80
+ display: "inline-flex",
81
+ justifyContent: "center",
82
+ alignItems: "center",
83
+ fontSize: "0.85em",
84
+ ...styles.itemIcon
85
+ };
86
+ return /* @__PURE__ */ jsx(
87
+ ui.span,
88
+ {
89
+ ref,
90
+ className: cx("ui-autocomplete__item__icon", className),
91
+ __css: css,
92
+ ...rest
93
+ }
94
+ );
95
+ });
96
+
97
+ export {
98
+ AutocompleteIcon,
99
+ AutocompleteClearIcon,
100
+ AutocompleteItemIcon
101
+ };
102
+ //# sourceMappingURL=chunk-JXFXCGZK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autocomplete-icon.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport { ChevronIcon, CloseIcon } from \"@yamada-ui/icon\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport { cx, getValidChildren, isValidElement } from \"@yamada-ui/utils\"\nimport type { FC, HTMLAttributes } from \"react\"\nimport { cloneElement, useRef } from \"react\"\nimport { useAutocompleteContext } from \"./autocomplete-context\"\n\nexport interface AutocompleteIconProps extends HTMLUIProps {}\n\nexport const AutocompleteIcon = forwardRef<AutocompleteIconProps, \"div\">(\n ({ className, children, __css, ...rest }, ref) => {\n const { styles } = useAutocompleteContext()\n\n const css: CSSUIObject = {\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n cursor: \"pointer\",\n ...styles.icon,\n ...__css,\n }\n\n const validChildren = getValidChildren(children)\n\n const cloneChildren = validChildren.map((child) =>\n cloneElement(child, {\n focusable: false,\n \"aria-hidden\": true,\n style: {\n maxWidth: \"1em\",\n maxHeight: \"1em\",\n color: \"currentColor\",\n },\n }),\n )\n\n return (\n <ui.div\n ref={ref}\n className={cx(\"ui-autocomplete__icon\", className)}\n __css={css}\n {...rest}\n >\n {isValidElement(children) ? cloneChildren : <ChevronIcon />}\n </ui.div>\n )\n },\n)\n\nexport interface AutocompleteClearIconProps extends AutocompleteIconProps {\n disabled?: boolean\n}\n\nexport const AutocompleteClearIcon: FC<AutocompleteClearIconProps> = ({\n className,\n children,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n const { styles } = useAutocompleteContext()\n\n const isDisabled = props.disabled\n\n const rest = useClickable({\n ref,\n isDisabled,\n ...(props as HTMLAttributes<HTMLElement>),\n })\n\n return (\n <AutocompleteIcon\n aria-label=\"Clear value\"\n className={cx(\"ui-autocomplete__icon--clear\", className)}\n __css={styles.clearIcon}\n {...rest}\n >\n {children ?? <CloseIcon w=\"0.5em\" h=\"0.5em\" />}\n </AutocompleteIcon>\n )\n}\n\nexport interface AutocompleteItemIconProps extends HTMLUIProps<\"span\"> {}\n\nexport const AutocompleteItemIcon = forwardRef<\n AutocompleteItemIconProps,\n \"span\"\n>(({ className, ...rest }, ref) => {\n const { styles } = useAutocompleteContext()\n\n const css: CSSUIObject = {\n flexShrink: 0,\n display: \"inline-flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \"0.85em\",\n ...styles.itemIcon,\n }\n\n return (\n <ui.span\n ref={ref}\n className={cx(\"ui-autocomplete__item__icon\", className)}\n __css={css}\n {...rest}\n />\n )\n})\n"],"mappings":";;;;;;AACA,SAAS,IAAI,kBAAkB;AAC/B,SAAS,aAAa,iBAAiB;AACvC,SAAS,oBAAoB;AAC7B,SAAS,IAAI,kBAAkB,sBAAsB;AAErD,SAAS,cAAc,cAAc;AA2Ce;AAtC7C,IAAM,mBAAmB;AAAA,EAC9B,CAAC,EAAE,WAAW,UAAU,OAAO,GAAG,KAAK,GAAG,QAAQ;AAChD,UAAM,EAAE,OAAO,IAAI,uBAAuB;AAE1C,UAAM,MAAmB;AAAA,MACvB,UAAU;AAAA,MACV,KAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,GAAG,OAAO;AAAA,MACV,GAAG;AAAA,IACL;AAEA,UAAM,gBAAgB,iBAAiB,QAAQ;AAE/C,UAAM,gBAAgB,cAAc;AAAA,MAAI,CAAC,UACvC,aAAa,OAAO;AAAA,QAClB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,OAAO;AAAA,UACL,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,WAAW,GAAG,yBAAyB,SAAS;AAAA,QAChD,OAAO;AAAA,QACN,GAAG;AAAA,QAEH,yBAAe,QAAQ,IAAI,gBAAgB,oBAAC,eAAY;AAAA;AAAA,IAC3D;AAAA,EAEJ;AACF;AAMO,IAAM,wBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,MAAM,OAAuB,IAAI;AACvC,QAAM,EAAE,OAAO,IAAI,uBAAuB;AAE1C,QAAM,aAAa,MAAM;AAEzB,QAAM,OAAO,aAAa;AAAA,IACxB;AAAA,IACA;AAAA,IACA,GAAI;AAAA,EACN,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAW;AAAA,MACX,WAAW,GAAG,gCAAgC,SAAS;AAAA,MACvD,OAAO,OAAO;AAAA,MACb,GAAG;AAAA,MAEH,wCAAY,oBAAC,aAAU,GAAE,SAAQ,GAAE,SAAQ;AAAA;AAAA,EAC9C;AAEJ;AAIO,IAAM,uBAAuB,WAGlC,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AACjC,QAAM,EAAE,OAAO,IAAI,uBAAuB;AAE1C,QAAM,MAAmB;AAAA,IACvB,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,GAAG,OAAO;AAAA,EACZ;AAEA,SACE;AAAA,IAAC,GAAG;AAAA,IAAH;AAAA,MACC;AAAA,MACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACtD,OAAO;AAAA,MACN,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;","names":[]}
@@ -0,0 +1,59 @@
1
+ "use client"
2
+ import {
3
+ useAutocompleteCreate
4
+ } from "./chunk-PRDD3JJO.mjs";
5
+ import {
6
+ AutocompleteItemIcon
7
+ } from "./chunk-JXFXCGZK.mjs";
8
+ import {
9
+ useAutocompleteContext
10
+ } from "./chunk-JPUKYLBW.mjs";
11
+
12
+ // src/autocomplete-create.tsx
13
+ import { ui, forwardRef } from "@yamada-ui/core";
14
+ import { cx, runIfFunc } from "@yamada-ui/utils";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ var AutocompleteCreate = forwardRef(
17
+ ({ className, icon, children, ...rest }, ref) => {
18
+ const { inputValue, styles } = useAutocompleteContext();
19
+ const { getCreateProps } = useAutocompleteCreate();
20
+ children != null ? children : children = inputValue;
21
+ const css = {
22
+ textDecoration: "none",
23
+ color: "inherit",
24
+ userSelect: "none",
25
+ display: "flex",
26
+ width: "100%",
27
+ alignItems: "center",
28
+ textAlign: "start",
29
+ flex: "0 0 auto",
30
+ outline: 0,
31
+ gap: "0.75rem",
32
+ ...styles.item
33
+ };
34
+ return /* @__PURE__ */ jsxs(
35
+ ui.li,
36
+ {
37
+ className: cx("ui-autocomplete__item--create", className),
38
+ __css: css,
39
+ ...getCreateProps(rest, ref),
40
+ children: [
41
+ icon !== null ? /* @__PURE__ */ jsx(AutocompleteItemIcon, { children: icon || /* @__PURE__ */ jsx(PlusIcon, {}) }) : null,
42
+ icon ? /* @__PURE__ */ jsx(ui.span, { style: { pointerEvents: "none", flex: 1 }, lineClamp: 1, children: runIfFunc(children, inputValue) }) : runIfFunc(children, inputValue)
43
+ ]
44
+ }
45
+ );
46
+ }
47
+ );
48
+ var PlusIcon = () => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 45.402 45.402", width: "1em", height: "1em", children: /* @__PURE__ */ jsx(
49
+ "path",
50
+ {
51
+ fill: "currentColor",
52
+ d: "M41.267,18.557H26.832V4.134C26.832,1.851,24.99,0,22.707,0c-2.283,0-4.124,1.851-4.124,4.135v14.432H4.141 c-2.283,0-4.139,1.851-4.138,4.135c-0.001,1.141,0.46,2.187,1.207,2.934c0.748,0.749,1.78,1.222,2.92,1.222h14.453V41.27 c0,1.142,0.453,2.176,1.201,2.922c0.748,0.748,1.777,1.211,2.919,1.211c2.282,0,4.129-1.851,4.129-4.133V26.857h14.435 c2.283,0,4.134-1.867,4.133-4.15C45.399,20.425,43.548,18.557,41.267,18.557z"
53
+ }
54
+ ) });
55
+
56
+ export {
57
+ AutocompleteCreate
58
+ };
59
+ //# sourceMappingURL=chunk-KCALQJLK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autocomplete-create.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport { cx, runIfFunc } from \"@yamada-ui/utils\"\nimport type { FC, ReactElement } from \"react\"\nimport { useAutocompleteContext } from \"./autocomplete-context\"\nimport { AutocompleteItemIcon } from \"./autocomplete-icon\"\nimport { useAutocompleteCreate } from \"./use-autocomplete-option\"\n\ninterface AutocompleteCreateOptions {\n /**\n * The autocomplete create option icon to use.\n */\n icon?: ReactElement\n /**\n * The label of the autocomplete create option.\n */\n children?: string | ((inputValue: string) => string)\n}\n\nexport interface AutocompleteCreateProps\n extends Omit<HTMLUIProps<\"li\">, \"children\">,\n AutocompleteCreateOptions {}\n\nexport const AutocompleteCreate = forwardRef<AutocompleteCreateProps, \"li\">(\n ({ className, icon, children, ...rest }, ref) => {\n const { inputValue, styles } = useAutocompleteContext()\n const { getCreateProps } = useAutocompleteCreate()\n\n children ??= inputValue\n\n const css: CSSUIObject = {\n textDecoration: \"none\",\n color: \"inherit\",\n userSelect: \"none\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n textAlign: \"start\",\n flex: \"0 0 auto\",\n outline: 0,\n gap: \"0.75rem\",\n ...styles.item,\n }\n\n return (\n <ui.li\n className={cx(\"ui-autocomplete__item--create\", className)}\n __css={css}\n {...getCreateProps(rest, ref)}\n >\n {icon !== null ? (\n <AutocompleteItemIcon>{icon || <PlusIcon />}</AutocompleteItemIcon>\n ) : null}\n {icon ? (\n <ui.span style={{ pointerEvents: \"none\", flex: 1 }} lineClamp={1}>\n {runIfFunc(children, inputValue)}\n </ui.span>\n ) : (\n runIfFunc(children, inputValue)\n )}\n </ui.li>\n )\n },\n)\n\nconst PlusIcon: FC = () => (\n <svg viewBox=\"0 0 45.402 45.402\" width=\"1em\" height=\"1em\">\n <path\n fill=\"currentColor\"\n d=\"M41.267,18.557H26.832V4.134C26.832,1.851,24.99,0,22.707,0c-2.283,0-4.124,1.851-4.124,4.135v14.432H4.141 c-2.283,0-4.139,1.851-4.138,4.135c-0.001,1.141,0.46,2.187,1.207,2.934c0.748,0.749,1.78,1.222,2.92,1.222h14.453V41.27 c0,1.142,0.453,2.176,1.201,2.922c0.748,0.748,1.777,1.211,2.919,1.211c2.282,0,4.129-1.851,4.129-4.133V26.857h14.435 c2.283,0,4.134-1.867,4.133-4.15C45.399,20.425,43.548,18.557,41.267,18.557z\"\n />\n </svg>\n)\n"],"mappings":";;;;;;;;;;;;AACA,SAAS,IAAI,kBAAkB;AAC/B,SAAS,IAAI,iBAAiB;AA2CxB,SAMmC,KANnC;AAtBC,IAAM,qBAAqB;AAAA,EAChC,CAAC,EAAE,WAAW,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ;AAC/C,UAAM,EAAE,YAAY,OAAO,IAAI,uBAAuB;AACtD,UAAM,EAAE,eAAe,IAAI,sBAAsB;AAEjD,6CAAa;AAEb,UAAM,MAAmB;AAAA,MACvB,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,MACT,KAAK;AAAA,MACL,GAAG,OAAO;AAAA,IACZ;AAEA,WACE;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC,WAAW,GAAG,iCAAiC,SAAS;AAAA,QACxD,OAAO;AAAA,QACN,GAAG,eAAe,MAAM,GAAG;AAAA,QAE3B;AAAA,mBAAS,OACR,oBAAC,wBAAsB,kBAAQ,oBAAC,YAAS,GAAG,IAC1C;AAAA,UACH,OACC,oBAAC,GAAG,MAAH,EAAQ,OAAO,EAAE,eAAe,QAAQ,MAAM,EAAE,GAAG,WAAW,GAC5D,oBAAU,UAAU,UAAU,GACjC,IAEA,UAAU,UAAU,UAAU;AAAA;AAAA;AAAA,IAElC;AAAA,EAEJ;AACF;AAEA,IAAM,WAAe,MACnB,oBAAC,SAAI,SAAQ,qBAAoB,OAAM,OAAM,QAAO,OAClD;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,GAAE;AAAA;AACJ,GACF;","names":[]}