@sanity/ui 4.2.0 → 5.0.0-alpha.10

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 (339) hide show
  1. package/README.md +194 -28
  2. package/bin/sanity-ui.js +14 -0
  3. package/dist/_chunks-es/LazyRefractor.js +20 -0
  4. package/dist/_chunks-es/LazyRefractor.js.map +1 -0
  5. package/dist/cli/checks.js +148 -0
  6. package/dist/cli/config.js +23 -0
  7. package/dist/cli/detect.js +181 -0
  8. package/dist/cli/doctor.js +49 -0
  9. package/dist/cli/index.js +69 -0
  10. package/dist/cli/init.js +189 -0
  11. package/dist/cli/install.js +79 -0
  12. package/dist/cli/log.js +66 -0
  13. package/dist/cli/selfPackage.js +11 -0
  14. package/dist/cli/styles.js +185 -0
  15. package/dist/cli/test-utils.js +8 -0
  16. package/dist/cli/tsconfig.js +236 -0
  17. package/dist/cli/types.js +1 -0
  18. package/dist/cli/versions.js +45 -0
  19. package/dist/index.d.ts +1203 -1469
  20. package/dist/index.js +2123 -1989
  21. package/dist/index.js.map +1 -1
  22. package/dist/polyfills.d.ts +1 -0
  23. package/dist/polyfills.js +5 -0
  24. package/dist/polyfills.js.map +1 -0
  25. package/dist/styles.css +1 -547
  26. package/package.json +57 -58
  27. package/src/cli/checks.test.ts +38 -0
  28. package/src/cli/checks.ts +200 -0
  29. package/src/cli/config.ts +44 -0
  30. package/src/cli/detect.test.ts +191 -0
  31. package/src/cli/detect.ts +205 -0
  32. package/src/cli/doctor.test.ts +52 -0
  33. package/src/cli/doctor.ts +65 -0
  34. package/src/cli/index.ts +77 -0
  35. package/src/cli/init.ts +225 -0
  36. package/src/cli/install.test.ts +52 -0
  37. package/src/cli/install.ts +108 -0
  38. package/src/cli/log.ts +79 -0
  39. package/src/cli/selfPackage.ts +14 -0
  40. package/src/cli/styles.test.ts +130 -0
  41. package/src/cli/styles.ts +205 -0
  42. package/src/cli/test-utils.ts +10 -0
  43. package/src/cli/tsconfig.test.ts +174 -0
  44. package/src/cli/tsconfig.ts +282 -0
  45. package/src/cli/types.ts +77 -0
  46. package/src/cli/versions.test.ts +35 -0
  47. package/src/cli/versions.ts +41 -0
  48. package/src/components/badge/Badge.tsx +53 -0
  49. package/src/components/badge/badge.css +6 -0
  50. package/src/components/badge/badge.props.ts +31 -0
  51. package/src/components/box/Box.tsx +30 -0
  52. package/src/components/box/box.css +4 -0
  53. package/src/components/box/box.props.ts +29 -0
  54. package/src/components/button/Button.tsx +78 -0
  55. package/src/components/button/button.css +72 -0
  56. package/src/components/button/button.props.ts +122 -0
  57. package/src/components/card/Card.tsx +31 -0
  58. package/src/components/card/card.css +4 -0
  59. package/src/components/card/card.props.ts +58 -0
  60. package/src/components/checkbox/Checkbox.tsx +64 -0
  61. package/src/components/checkbox/checkbox.css +100 -0
  62. package/src/components/checkbox/checkbox.props.ts +33 -0
  63. package/src/components/code/Code.tsx +38 -0
  64. package/src/components/code/LazyRefractor.tsx +9 -0
  65. package/src/components/code/code.css +40 -0
  66. package/src/components/code/code.props.ts +44 -0
  67. package/src/components/container/Container.tsx +30 -0
  68. package/src/components/container/container.css +4 -0
  69. package/src/components/container/container.props.ts +28 -0
  70. package/src/components/dialog/Dialog.tsx +139 -0
  71. package/src/components/dialog/dialog.css +49 -0
  72. package/src/components/dialog/dialog.props.ts +45 -0
  73. package/src/components/divider/Divider.tsx +23 -0
  74. package/src/components/divider/divider.props.ts +9 -0
  75. package/src/components/eyebrow/Eyebrow.tsx +54 -0
  76. package/src/components/eyebrow/eyebrow.css +11 -0
  77. package/src/components/eyebrow/eyebrow.props.ts +28 -0
  78. package/src/components/flex/Flex.tsx +30 -0
  79. package/src/components/flex/flex.css +4 -0
  80. package/src/components/flex/flex.props.ts +33 -0
  81. package/src/components/grid/Grid.tsx +30 -0
  82. package/src/components/grid/grid.css +4 -0
  83. package/src/components/grid/grid.props.ts +33 -0
  84. package/src/components/h-stack/HStack.tsx +34 -0
  85. package/src/components/h-stack/hStack.props.ts +17 -0
  86. package/src/components/heading/Heading.tsx +54 -0
  87. package/src/components/heading/heading.css +9 -0
  88. package/src/components/heading/heading.props.ts +31 -0
  89. package/src/components/icon/Icon.tsx +24 -0
  90. package/src/components/icon/icon.css +17 -0
  91. package/src/components/icon/icon.props.ts +35 -0
  92. package/src/components/icon-button/IconButton.tsx +32 -0
  93. package/src/components/icon-button/iconButton.props.ts +31 -0
  94. package/src/components/index.css +28 -0
  95. package/src/components/indicator/Indicator.tsx +42 -0
  96. package/src/components/indicator/indicator.css +4 -0
  97. package/src/components/indicator/indicator.props.ts +24 -0
  98. package/src/components/indicator-stack/IndicatorStack.tsx +31 -0
  99. package/src/components/indicator-stack/indicator-stack.css +7 -0
  100. package/src/components/indicator-stack/indicatorStack.props.ts +15 -0
  101. package/src/components/inline/Inline.tsx +38 -0
  102. package/src/components/inline/inline.css +4 -0
  103. package/src/components/inline/inline.props.ts +100 -0
  104. package/src/components/label/Label.tsx +34 -0
  105. package/src/components/label/label.css +3 -0
  106. package/src/components/label/label.props.ts +25 -0
  107. package/src/components/link/Link.tsx +29 -0
  108. package/src/components/link/link.css +12 -0
  109. package/src/components/link/link.props.ts +23 -0
  110. package/src/components/list/List.tsx +167 -0
  111. package/src/components/list/list.css +25 -0
  112. package/src/components/list/list.props.ts +130 -0
  113. package/src/components/popover/Popover.tsx +85 -0
  114. package/src/components/popover/popover.css +21 -0
  115. package/src/components/popover/popover.props.ts +38 -0
  116. package/src/components/press-area/PressArea.tsx +29 -0
  117. package/src/components/press-area/press-area.css +22 -0
  118. package/src/components/press-area/pressArea.props.ts +16 -0
  119. package/src/components/radio/Radio.tsx +48 -0
  120. package/src/components/radio/radio.css +97 -0
  121. package/src/components/radio/radio.props.ts +25 -0
  122. package/src/components/skip-to-content/SkipToContent.tsx +35 -0
  123. package/src/components/skip-to-content/skip-to-content.css +9 -0
  124. package/src/components/skip-to-content/skipToContent.props.ts +25 -0
  125. package/src/components/spinner/Spinner.tsx +28 -0
  126. package/src/components/spinner/spinner.css +10 -0
  127. package/src/components/spinner/spinner.props.ts +19 -0
  128. package/src/components/switch/Switch.tsx +48 -0
  129. package/src/components/switch/switch.css +119 -0
  130. package/src/components/switch/switch.props.ts +25 -0
  131. package/src/components/text/Text.tsx +53 -0
  132. package/src/components/text/text.css +9 -0
  133. package/src/components/text/text.props.ts +28 -0
  134. package/src/components/tooltip/Tooltip.tsx +97 -0
  135. package/src/components/tooltip/tooltip.css +31 -0
  136. package/src/components/tooltip/tooltip.props.ts +36 -0
  137. package/src/components/tooltip-group/TooltipGroup.tsx +64 -0
  138. package/src/components/tooltip-group/tooltipGroup.props.ts +15 -0
  139. package/src/components/v-stack/VStack.tsx +32 -0
  140. package/src/components/v-stack/vStack.props.ts +17 -0
  141. package/src/components/visually-hidden/VisuallyHidden.tsx +29 -0
  142. package/src/components/visually-hidden/visually-hidden.css +9 -0
  143. package/src/components/visually-hidden/visuallyHidden.props.ts +23 -0
  144. package/src/css/classes/dynamic/flex-child.css +5 -0
  145. package/src/css/classes/dynamic/grid-child.css +8 -0
  146. package/src/css/classes/dynamic/grid-parent.css +6 -0
  147. package/src/css/classes/dynamic/height.css +5 -0
  148. package/src/css/classes/dynamic/index.css +7 -0
  149. package/src/css/classes/dynamic/line-clamp.css +5 -0
  150. package/src/css/classes/dynamic/readme.md +3 -0
  151. package/src/css/classes/dynamic/width.css +7 -0
  152. package/src/css/classes/dynamic/z-index.css +3 -0
  153. package/src/css/classes/generic/display.css +10 -0
  154. package/src/css/classes/generic/flex.css +24 -0
  155. package/src/css/classes/generic/grid.css +7 -0
  156. package/src/css/classes/generic/index.css +7 -0
  157. package/src/css/classes/generic/overflow.css +19 -0
  158. package/src/css/classes/generic/placement.css +202 -0
  159. package/src/css/classes/generic/position.css +7 -0
  160. package/src/css/classes/generic/readme.md +3 -0
  161. package/src/css/classes/generic/text-align.css +5 -0
  162. package/src/css/classes/index.css +4 -0
  163. package/src/css/classes/local/animation.css +4 -0
  164. package/src/css/classes/local/border.css +20 -0
  165. package/src/css/classes/local/index.css +6 -0
  166. package/src/css/classes/local/readme.md +3 -0
  167. package/src/css/classes/local/text-overflow.css +5 -0
  168. package/src/css/classes/local/text-trim.css +45 -0
  169. package/src/css/classes/local/tone.css +75 -0
  170. package/src/css/classes/local/top-anchor.css +4 -0
  171. package/src/css/classes/system/color.css +223 -0
  172. package/src/css/classes/system/container.css +8 -0
  173. package/src/css/classes/system/font-family.css +2 -0
  174. package/src/css/classes/system/font-weight.css +4 -0
  175. package/src/css/classes/system/gap.css +37 -0
  176. package/src/css/classes/system/index.css +10 -0
  177. package/src/css/classes/system/inset.css +56 -0
  178. package/src/css/classes/system/margin.css +148 -0
  179. package/src/css/classes/system/padding.css +78 -0
  180. package/src/css/classes/system/radius.css +10 -0
  181. package/src/css/classes/system/readme.md +3 -0
  182. package/src/css/classes/system/shadow.css +6 -0
  183. package/src/css/classes/system/typography.css +31 -0
  184. package/src/css/global/font-face.css +20 -0
  185. package/src/css/global/index.css +2 -0
  186. package/src/css/global/reset.css +76 -0
  187. package/src/css/tokens/index.css +3 -0
  188. package/src/css/tokens/opacity.css +6 -0
  189. package/src/css/tokens/semantic.css +25 -0
  190. package/src/css/tokens/surface.css +27 -0
  191. package/src/hooks/useIsClient.ts +10 -0
  192. package/src/index.css +18 -0
  193. package/src/index.ts +65 -0
  194. package/src/polyfills.ts +15 -0
  195. package/src/props/border.ts +51 -0
  196. package/src/props/flexChild.ts +29 -0
  197. package/src/props/flexParent.ts +47 -0
  198. package/src/props/gap.ts +31 -0
  199. package/src/props/gridChild.ts +50 -0
  200. package/src/props/gridParent.ts +45 -0
  201. package/src/props/height.ts +29 -0
  202. package/src/props/layout.ts +44 -0
  203. package/src/props/margin.ts +59 -0
  204. package/src/props/overflow.ts +30 -0
  205. package/src/props/padding.ts +59 -0
  206. package/src/props/placement.ts +16 -0
  207. package/src/props/position.ts +52 -0
  208. package/src/props/shadow.ts +15 -0
  209. package/src/props/tone.ts +15 -0
  210. package/src/props/typography.ts +62 -0
  211. package/src/props/width.ts +29 -0
  212. package/src/props/zIndex.ts +15 -0
  213. package/src/styles.css.d.ts +1 -0
  214. package/src/styles.css.node.js +2 -0
  215. package/src/styles.css.test.ts +24 -0
  216. package/src/types/Button.ts +8 -0
  217. package/src/types/Code.ts +6 -0
  218. package/src/types/Container.ts +3 -0
  219. package/src/types/Density.ts +3 -0
  220. package/src/types/Display.ts +11 -0
  221. package/src/types/Eyebrow.ts +3 -0
  222. package/src/types/Flex.ts +22 -0
  223. package/src/types/FontWeight.ts +3 -0
  224. package/src/types/Grid.ts +3 -0
  225. package/src/types/Heading.ts +6 -0
  226. package/src/types/Icon.ts +3 -0
  227. package/src/types/Interactive.ts +8 -0
  228. package/src/types/List.ts +2 -0
  229. package/src/types/Overflow.ts +3 -0
  230. package/src/types/Placement.ts +16 -0
  231. package/src/types/Position.ts +3 -0
  232. package/src/types/PropDef.ts +73 -0
  233. package/src/types/Radius.ts +3 -0
  234. package/src/types/Responsive.ts +10 -0
  235. package/src/types/Shadow.ts +3 -0
  236. package/src/types/Space.ts +15 -0
  237. package/src/types/Text.ts +3 -0
  238. package/src/types/TextAlign.ts +3 -0
  239. package/src/types/Tone.ts +3 -0
  240. package/src/utils/getProps.test.ts +156 -0
  241. package/src/utils/getProps.ts +156 -0
  242. package/src/utils/mergeTriggerProps.ts +66 -0
  243. package/src/utils/renderPortal.tsx +14 -0
  244. package/src/utils/suffixClassName.ts +5 -0
  245. package/src/version.ts +3 -0
  246. package/LICENSE +0 -21
  247. package/dist/_system-CTe2lb5l.d.ts +0 -40
  248. package/dist/_system-CTe2lb5l.d.ts.map +0 -1
  249. package/dist/arrow-BmX6qbAS.js +0 -170
  250. package/dist/arrow-BmX6qbAS.js.map +0 -1
  251. package/dist/autocomplete.d.ts +0 -140
  252. package/dist/autocomplete.d.ts.map +0 -1
  253. package/dist/autocomplete.js +0 -470
  254. package/dist/autocomplete.js.map +0 -1
  255. package/dist/breadcrumbs.d.ts +0 -18
  256. package/dist/breadcrumbs.d.ts.map +0 -1
  257. package/dist/breadcrumbs.js +0 -119
  258. package/dist/breadcrumbs.js.map +0 -1
  259. package/dist/button-BNyKSDyA.js +0 -180
  260. package/dist/button-BNyKSDyA.js.map +0 -1
  261. package/dist/button-dnqMFkWg.d.ts +0 -76
  262. package/dist/button-dnqMFkWg.d.ts.map +0 -1
  263. package/dist/card-C0a0wQTc.d.ts +0 -7
  264. package/dist/card-C0a0wQTc.d.ts.map +0 -1
  265. package/dist/code.d.ts +0 -20
  266. package/dist/code.d.ts.map +0 -1
  267. package/dist/code.js +0 -90
  268. package/dist/code.js.map +0 -1
  269. package/dist/codeFontStyle-84SMhFtI.js +0 -11
  270. package/dist/codeFontStyle-84SMhFtI.js.map +0 -1
  271. package/dist/component-DVlwaWB-.d.ts +0 -25
  272. package/dist/component-DVlwaWB-.d.ts.map +0 -1
  273. package/dist/element-BYgCE_iK.js +0 -51
  274. package/dist/element-BYgCE_iK.js.map +0 -1
  275. package/dist/factory-BzXTX8_Q.js +0 -3056
  276. package/dist/factory-BzXTX8_Q.js.map +0 -1
  277. package/dist/flex-DmbDG2ks.js +0 -76
  278. package/dist/flex-DmbDG2ks.js.map +0 -1
  279. package/dist/font-EtfxKPUz.d.ts +0 -49
  280. package/dist/font-EtfxKPUz.d.ts.map +0 -1
  281. package/dist/getElementRef-Jw7gY0eV.js +0 -102
  282. package/dist/getElementRef-Jw7gY0eV.js.map +0 -1
  283. package/dist/getScopedTheme-C-sZsyAz.js +0 -267
  284. package/dist/getScopedTheme-C-sZsyAz.js.map +0 -1
  285. package/dist/getTheme_v2-y09KqtEb.js +0 -487
  286. package/dist/getTheme_v2-y09KqtEb.js.map +0 -1
  287. package/dist/grid-6JSgMj1O.js +0 -115
  288. package/dist/grid-6JSgMj1O.js.map +0 -1
  289. package/dist/helpers-C8xxXAQC.js +0 -63
  290. package/dist/helpers-C8xxXAQC.js.map +0 -1
  291. package/dist/hotkeys-CaHsQlsO.js +0 -168
  292. package/dist/hotkeys-CaHsQlsO.js.map +0 -1
  293. package/dist/index.d.ts.map +0 -1
  294. package/dist/layer-Bl5R3uNR.js +0 -61
  295. package/dist/layer-Bl5R3uNR.js.map +0 -1
  296. package/dist/layer-ChlP9Ik6.d.ts +0 -242
  297. package/dist/layer-ChlP9Ik6.d.ts.map +0 -1
  298. package/dist/menu.d.ts +0 -146
  299. package/dist/menu.d.ts.map +0 -1
  300. package/dist/menu.js +0 -626
  301. package/dist/menu.js.map +0 -1
  302. package/dist/popover-B7-28L8y.js +0 -408
  303. package/dist/popover-B7-28L8y.js.map +0 -1
  304. package/dist/popover-CMlQeKn0.d.ts +0 -96
  305. package/dist/popover-CMlQeKn0.d.ts.map +0 -1
  306. package/dist/popover.d.ts +0 -2
  307. package/dist/popover.js +0 -3
  308. package/dist/refractor-CC48DwHi.js +0 -20
  309. package/dist/refractor-CC48DwHi.js.map +0 -1
  310. package/dist/responsiveFont-CilwaORG.js +0 -55
  311. package/dist/responsiveFont-CilwaORG.js.map +0 -1
  312. package/dist/rgba-BSYaEUW6.d.ts +0 -846
  313. package/dist/rgba-BSYaEUW6.d.ts.map +0 -1
  314. package/dist/selectable-B0GUIL74.d.ts +0 -7
  315. package/dist/selectable-B0GUIL74.d.ts.map +0 -1
  316. package/dist/stack-rsNFPq2-.js +0 -112
  317. package/dist/stack-rsNFPq2-.js.map +0 -1
  318. package/dist/styles-css.d.ts +0 -2
  319. package/dist/styles-css.js +0 -4
  320. package/dist/textInput-pSfQjkmx.js +0 -313
  321. package/dist/textInput-pSfQjkmx.js.map +0 -1
  322. package/dist/theme.d.ts +0 -280
  323. package/dist/theme.d.ts.map +0 -1
  324. package/dist/theme.js +0 -55
  325. package/dist/theme.js.map +0 -1
  326. package/dist/toast.d.ts +0 -73
  327. package/dist/toast.d.ts.map +0 -1
  328. package/dist/toast.js +0 -302
  329. package/dist/toast.js.map +0 -1
  330. package/dist/tooltip.d.ts +0 -88
  331. package/dist/tooltip.d.ts.map +0 -1
  332. package/dist/tooltip.js +0 -435
  333. package/dist/tooltip.js.map +0 -1
  334. package/dist/useClickOutsideEvent-wGLGWBZN.js +0 -36
  335. package/dist/useClickOutsideEvent-wGLGWBZN.js.map +0 -1
  336. package/dist/useElementSize-BJvbGHq8.js +0 -51
  337. package/dist/useElementSize-BJvbGHq8.js.map +0 -1
  338. package/dist/useLayer-D1usxIE0.js +0 -712
  339. package/dist/useLayer-D1usxIE0.js.map +0 -1
@@ -1,470 +0,0 @@
1
- "use client";
2
- import { n as _getArrayProp, o as EMPTY_ARRAY, s as EMPTY_RECORD } from "./helpers-C8xxXAQC.js";
3
- import { f as focusFirstDescendant, h as _raf, t as TextInput, u as _hasFocus } from "./textInput-pSfQjkmx.js";
4
- import { t as _isEnterToClickElement } from "./element-BYgCE_iK.js";
5
- import { s as Card, y as Box } from "./useLayer-D1usxIE0.js";
6
- import { n as Text, t as Stack } from "./stack-rsNFPq2-.js";
7
- import { t as Button } from "./button-BNyKSDyA.js";
8
- import { t as Popover } from "./popover-B7-28L8y.js";
9
- import { c } from "react/compiler-runtime";
10
- import { ChevronDownIcon } from "@sanity/icons/ChevronDown";
11
- import { SpinnerIcon } from "@sanity/icons/Spinner";
12
- import { clsx } from "clsx/lite";
13
- import { cloneElement, startTransition, useEffect, useImperativeHandle, useReducer, useRef, useState } from "react";
14
- import { jsx, jsxs } from "react/jsx-runtime";
15
- function AutocompleteOption(props) {
16
- let $ = c(11), { children, id, onSelect, selected, value } = props, t0;
17
- $[0] !== onSelect || $[1] !== value ? (t0 = () => {
18
- setTimeout(() => {
19
- onSelect(value);
20
- }, 0);
21
- }, $[0] = onSelect, $[1] = value, $[2] = t0) : t0 = $[2];
22
- let handleClick = t0, t1;
23
- $[3] === handleClick ? t1 = $[4] : (t1 = (event) => {
24
- event.key === "Enter" && !_isEnterToClickElement(event.currentTarget) && handleClick();
25
- }, $[3] = handleClick, $[4] = t1);
26
- let handleKeyDown = t1, t2;
27
- return $[5] !== children || $[6] !== handleClick || $[7] !== handleKeyDown || $[8] !== id || $[9] !== selected ? (t2 = /* @__PURE__ */ jsx("li", {
28
- "aria-selected": selected,
29
- "data-ui": "AutocompleteOption",
30
- id,
31
- role: "option",
32
- onClick: handleClick,
33
- onKeyDown: handleKeyDown,
34
- children
35
- }), $[5] = children, $[6] = handleClick, $[7] = handleKeyDown, $[8] = id, $[9] = selected, $[10] = t2) : t2 = $[10], t2;
36
- }
37
- /**
38
- * @internal
39
- */
40
- function autocompleteReducer(state, msg) {
41
- return msg.type === "input/change" ? {
42
- ...state,
43
- activeValue: null,
44
- focused: !0,
45
- query: msg.query
46
- } : msg.type === "input/focus" ? {
47
- ...state,
48
- focused: !0
49
- } : msg.type === "root/blur" ? {
50
- ...state,
51
- focused: !1,
52
- query: null
53
- } : msg.type === "root/clear" ? {
54
- ...state,
55
- activeValue: null,
56
- query: null,
57
- value: null
58
- } : msg.type === "root/escape" ? {
59
- ...state,
60
- focused: !1,
61
- query: null
62
- } : msg.type === "root/open" ? {
63
- ...state,
64
- query: state.query || msg.query
65
- } : msg.type === "root/setActiveValue" ? {
66
- ...state,
67
- activeValue: msg.value,
68
- listFocused: msg.listFocused || state.listFocused
69
- } : msg.type === "root/setListFocused" ? {
70
- ...state,
71
- listFocused: msg.listFocused
72
- } : msg.type === "value/change" ? {
73
- ...state,
74
- activeValue: msg.value,
75
- query: null,
76
- value: msg.value
77
- } : state;
78
- }
79
- /**
80
- * @internal
81
- */
82
- const AUTOCOMPLETE_LISTBOX_IGNORE_KEYS = [
83
- "Control",
84
- "Shift",
85
- "Alt",
86
- "Enter",
87
- "Home",
88
- "End",
89
- "PageUp",
90
- "PageDown",
91
- "Meta",
92
- "Tab",
93
- "CapsLock"
94
- ], AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS = ["bottom-start", "top-start"];
95
- var autocomplete = "_4c0fmk0", autocompleteListBox = "_4c0fmk1";
96
- const DEFAULT_RENDER_VALUE = (value, option) => option ? option.value : value, DEFAULT_FILTER_OPTION = (query, option) => option.value.toLowerCase().indexOf(query.toLowerCase()) > -1;
97
- /**
98
- * The Autocomplete component is typically used for search components.
99
- * It consists of a text input for writing a query, and properties for rendering suggestions.
100
- *
101
- * @public
102
- */
103
- function Autocomplete(props) {
104
- let $ = c(187), customValidity, disabled, filterOptionProp, forwardedRef, icon, id, loading, onBlur, onChange, onFocus, onQueryChange, onSelect, openButton, openOnFocus, optionsProp, prefix, readOnly, relatedElements, renderOptionProp, renderPopover, restProps, suffix, t0, t1, t2, t3, t4, t5, t6, valueProp;
105
- $[0] === props ? (customValidity = $[1], disabled = $[2], filterOptionProp = $[3], forwardedRef = $[4], icon = $[5], id = $[6], loading = $[7], onBlur = $[8], onChange = $[9], onFocus = $[10], onQueryChange = $[11], onSelect = $[12], openButton = $[13], openOnFocus = $[14], optionsProp = $[15], prefix = $[16], readOnly = $[17], relatedElements = $[18], renderOptionProp = $[19], renderPopover = $[20], restProps = $[21], suffix = $[22], t0 = $[23], t1 = $[24], t2 = $[25], t3 = $[26], t4 = $[27], t5 = $[28], t6 = $[29], valueProp = $[30]) : ({border: t0, customValidity, disabled, filterOption: filterOptionProp, fontSize: t1, icon, id, listBox: t2, loading, onBlur, onChange, onFocus, onQueryChange, onSelect, openButton, openOnFocus, options: optionsProp, padding: t3, popover: t4, prefix, radius: t5, readOnly, ref: forwardedRef, relatedElements, renderOption: renderOptionProp, renderPopover, renderValue: t6, suffix, value: valueProp, ...restProps} = props, $[0] = props, $[1] = customValidity, $[2] = disabled, $[3] = filterOptionProp, $[4] = forwardedRef, $[5] = icon, $[6] = id, $[7] = loading, $[8] = onBlur, $[9] = onChange, $[10] = onFocus, $[11] = onQueryChange, $[12] = onSelect, $[13] = openButton, $[14] = openOnFocus, $[15] = optionsProp, $[16] = prefix, $[17] = readOnly, $[18] = relatedElements, $[19] = renderOptionProp, $[20] = renderPopover, $[21] = restProps, $[22] = suffix, $[23] = t0, $[24] = t1, $[25] = t2, $[26] = t3, $[27] = t4, $[28] = t5, $[29] = t6, $[30] = valueProp);
106
- let border = t0 === void 0 || t0, fontSize = t1 === void 0 ? 2 : t1, listBox = t2 === void 0 ? EMPTY_RECORD : t2, paddingProp = t3 === void 0 ? 3 : t3, popover = t4 === void 0 ? EMPTY_RECORD : t4, radius = t5 === void 0 ? 2 : t5, renderValue = t6 === void 0 ? DEFAULT_RENDER_VALUE : t6, t7 = valueProp || null, t8 = valueProp || null, t9;
107
- $[31] !== t7 || $[32] !== t8 ? (t9 = {
108
- activeValue: t7,
109
- focused: !1,
110
- listFocused: !1,
111
- query: null,
112
- value: t8
113
- }, $[31] = t7, $[32] = t8, $[33] = t9) : t9 = $[33];
114
- let [state, dispatch] = useReducer(autocompleteReducer, t9), { activeValue, focused, listFocused, query, value } = state, t10;
115
- $[34] !== fontSize || $[35] !== paddingProp ? (t10 = (t11) => {
116
- let { value: value_0 } = t11;
117
- return /* @__PURE__ */ jsx(Card, {
118
- "data-as": "button",
119
- padding: paddingProp,
120
- radius: 2,
121
- tone: "inherit",
122
- children: /* @__PURE__ */ jsx(Text, {
123
- size: fontSize,
124
- textOverflow: "ellipsis",
125
- children: value_0
126
- })
127
- });
128
- }, $[34] = fontSize, $[35] = paddingProp, $[36] = t10) : t10 = $[36];
129
- let renderOption = typeof renderOptionProp == "function" ? renderOptionProp : t10, filterOption = typeof filterOptionProp == "function" ? filterOptionProp : DEFAULT_FILTER_OPTION, rootElementRef = useRef(null), resultsPopoverElementRef = useRef(null), inputElementRef = useRef(null), listBoxElementRef = useRef(null), [inputElement, _setInputElement] = useState(null), t11;
130
- $[37] === Symbol.for("react.memo_cache_sentinel") ? (t11 = (node) => {
131
- startTransition(() => _setInputElement(node));
132
- }, $[37] = t11) : t11 = $[37];
133
- let setInputElement = t11, listFocusedRef = useRef(!1), valueRef = useRef(value), valuePropRef = useRef(valueProp), popoverMouseWithinRef = useRef(!1), t12, t13;
134
- $[38] === inputElement ? (t12 = $[39], t13 = $[40]) : (t12 = () => inputElement, t13 = [inputElement], $[38] = inputElement, $[39] = t12, $[40] = t13), useImperativeHandle(inputElementRef, t12, t13);
135
- let t14, t15;
136
- $[41] === inputElement ? (t14 = $[42], t15 = $[43]) : (t14 = () => inputElement, t15 = [inputElement], $[41] = inputElement, $[42] = t14, $[43] = t15), useImperativeHandle(forwardedRef, t14, t15);
137
- let listBoxId = `${id}-listbox`, options = Array.isArray(optionsProp) ? optionsProp : EMPTY_ARRAY, padding = _getArrayProp(paddingProp), t16;
138
- $[44] !== options || $[45] !== value ? (t16 = value === null ? void 0 : options.find((o) => o.value === value), $[44] = options, $[45] = value, $[46] = t16) : t16 = $[46];
139
- let currentOption = t16, t17;
140
- if ($[47] !== filterOption || $[48] !== options || $[49] !== query) {
141
- let t18;
142
- $[51] !== filterOption || $[52] !== query ? (t18 = (option) => !query || filterOption(query, option), $[51] = filterOption, $[52] = query, $[53] = t18) : t18 = $[53], t17 = options.filter(t18), $[47] = filterOption, $[48] = options, $[49] = query, $[50] = t17;
143
- } else t17 = $[50];
144
- let filteredOptions = t17, filteredOptionsLen = filteredOptions.length, activeItemId = activeValue ? `${id}-option-${activeValue}` : void 0, expanded = query !== null && loading || focused && query !== null, t18;
145
- $[54] !== onBlur || $[55] !== onQueryChange || $[56] !== relatedElements ? (t18 = (event) => {
146
- setTimeout(() => {
147
- if (popoverMouseWithinRef.current) return;
148
- let elements = (relatedElements || []).concat(rootElementRef.current ? [rootElementRef.current] : [], resultsPopoverElementRef.current ? [resultsPopoverElementRef.current] : []), focusInside = !1;
149
- if (document.activeElement) {
150
- for (let e of elements) if (e === document.activeElement || e.contains(document.activeElement)) {
151
- focusInside = !0;
152
- break;
153
- }
154
- }
155
- focusInside === !1 && (dispatch({ type: "root/blur" }), popoverMouseWithinRef.current = !1, onQueryChange && onQueryChange(null), onBlur && onBlur(event));
156
- }, 0);
157
- }, $[54] = onBlur, $[55] = onQueryChange, $[56] = relatedElements, $[57] = t18) : t18 = $[57];
158
- let handleRootBlur = t18, t19;
159
- $[58] === Symbol.for("react.memo_cache_sentinel") ? (t19 = (event_0) => {
160
- let listBoxElement = listBoxElementRef.current, focusedElement = event_0.target instanceof HTMLElement ? event_0.target : null, listFocused_0 = listBoxElement?.contains(focusedElement) || !1;
161
- listFocused_0 !== listFocusedRef.current && (listFocusedRef.current = listFocused_0, dispatch({
162
- type: "root/setListFocused",
163
- listFocused: listFocused_0
164
- }));
165
- }, $[58] = t19) : t19 = $[58];
166
- let handleRootFocus = t19, t20;
167
- $[59] !== onChange || $[60] !== onQueryChange || $[61] !== onSelect ? (t20 = (v) => {
168
- dispatch({
169
- type: "value/change",
170
- value: v
171
- }), popoverMouseWithinRef.current = !1, onSelect && onSelect(v), valueRef.current = v, onChange && onChange(v), onQueryChange && onQueryChange(null), inputElementRef.current?.focus();
172
- }, $[59] = onChange, $[60] = onQueryChange, $[61] = onSelect, $[62] = t20) : t20 = $[62];
173
- let handleOptionSelect = t20, t21;
174
- $[63] !== activeValue || $[64] !== filteredOptions || $[65] !== filteredOptionsLen || $[66] !== onQueryChange ? (t21 = (event_1) => {
175
- if (event_1.key === "ArrowDown") {
176
- if (event_1.preventDefault(), !filteredOptionsLen) return;
177
- let activeOption = filteredOptions.find((o_0) => o_0.value === activeValue), activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1, nextActiveOption = filteredOptions[(activeIndex + 1) % filteredOptionsLen];
178
- nextActiveOption && dispatch({
179
- type: "root/setActiveValue",
180
- value: nextActiveOption.value,
181
- listFocused: !0
182
- });
183
- return;
184
- }
185
- if (event_1.key === "ArrowUp") {
186
- if (event_1.preventDefault(), !filteredOptionsLen) return;
187
- let activeOption_0 = filteredOptions.find((o_1) => o_1.value === activeValue), activeIndex_0 = activeOption_0 ? filteredOptions.indexOf(activeOption_0) : -1, nextActiveOption_0 = filteredOptions[activeIndex_0 === -1 ? filteredOptionsLen - 1 : (filteredOptionsLen + activeIndex_0 - 1) % filteredOptionsLen];
188
- nextActiveOption_0 && dispatch({
189
- type: "root/setActiveValue",
190
- value: nextActiveOption_0.value,
191
- listFocused: !0
192
- });
193
- return;
194
- }
195
- if (event_1.key === "Escape") {
196
- dispatch({ type: "root/escape" }), popoverMouseWithinRef.current = !1, onQueryChange && onQueryChange(null), inputElementRef.current?.focus();
197
- return;
198
- }
199
- let target = event_1.target, listEl = listBoxElementRef.current;
200
- if ((listEl === target || listEl?.contains(target)) && !AUTOCOMPLETE_LISTBOX_IGNORE_KEYS.includes(event_1.key)) {
201
- inputElementRef.current?.focus();
202
- return;
203
- }
204
- }, $[63] = activeValue, $[64] = filteredOptions, $[65] = filteredOptionsLen, $[66] = onQueryChange, $[67] = t21) : t21 = $[67];
205
- let handleRootKeyDown = t21, t22;
206
- $[68] === onQueryChange ? t22 = $[69] : (t22 = (event_2) => {
207
- let nextQuery = event_2.currentTarget.value;
208
- dispatch({
209
- type: "input/change",
210
- query: nextQuery
211
- }), onQueryChange && onQueryChange(nextQuery);
212
- }, $[68] = onQueryChange, $[69] = t22);
213
- let handleInputChange = t22, t23;
214
- $[70] !== currentOption || $[71] !== renderValue || $[72] !== value ? (t23 = () => {
215
- dispatch({
216
- type: "root/open",
217
- query: value ? renderValue(value, currentOption) : ""
218
- });
219
- }, $[70] = currentOption, $[71] = renderValue, $[72] = value, $[73] = t23) : t23 = $[73];
220
- let dispatchOpen = t23, t24;
221
- $[74] !== dispatchOpen || $[75] !== focused || $[76] !== onFocus || $[77] !== openOnFocus ? (t24 = (event_3) => {
222
- focused || (dispatch({ type: "input/focus" }), onFocus && onFocus(event_3), openOnFocus && dispatchOpen());
223
- }, $[74] = dispatchOpen, $[75] = focused, $[76] = onFocus, $[77] = openOnFocus, $[78] = t24) : t24 = $[78];
224
- let handleInputFocus = t24, t25;
225
- $[79] === Symbol.for("react.memo_cache_sentinel") ? (t25 = () => {
226
- popoverMouseWithinRef.current = !0;
227
- }, $[79] = t25) : t25 = $[79];
228
- let handlePopoverMouseEnter = t25, t26;
229
- $[80] === Symbol.for("react.memo_cache_sentinel") ? (t26 = () => {
230
- popoverMouseWithinRef.current = !1;
231
- }, $[80] = t26) : t26 = $[80];
232
- let handlePopoverMouseLeave = t26, t27;
233
- $[81] !== onChange || $[82] !== onQueryChange ? (t27 = () => {
234
- dispatch({ type: "root/clear" }), valueRef.current = "", onChange && onChange(""), onQueryChange && onQueryChange(null), inputElementRef.current?.focus();
235
- }, $[81] = onChange, $[82] = onQueryChange, $[83] = t27) : t27 = $[83];
236
- let handleClearButtonClick = t27, t28;
237
- $[84] === Symbol.for("react.memo_cache_sentinel") ? (t28 = () => {
238
- dispatch({ type: "input/focus" });
239
- }, $[84] = t28) : t28 = $[84];
240
- let handleClearButtonFocus = t28, t29, t30;
241
- $[85] === valueProp ? (t29 = $[86], t30 = $[87]) : (t29 = () => {
242
- if (valueProp !== valuePropRef.current) {
243
- valuePropRef.current = valueProp, valueProp !== void 0 && (dispatch({
244
- type: "value/change",
245
- value: valueProp
246
- }), valueRef.current = valueProp);
247
- return;
248
- }
249
- valueProp !== valueRef.current && (valueRef.current = valueProp || null, dispatch({
250
- type: "value/change",
251
- value: valueProp || null
252
- }));
253
- }, t30 = [valueProp], $[85] = valueProp, $[86] = t29, $[87] = t30), useEffect(t29, t30);
254
- let t31, t32;
255
- $[88] === focused ? (t31 = $[89], t32 = $[90]) : (t31 = () => {
256
- !focused && valueRef.current && dispatch({
257
- type: "root/setActiveValue",
258
- value: valueRef.current
259
- });
260
- }, t32 = [focused], $[88] = focused, $[89] = t31, $[90] = t32), useEffect(t31, t32);
261
- let t33, t34;
262
- $[91] !== activeValue || $[92] !== filteredOptions ? (t33 = () => {
263
- let listElement = listBoxElementRef.current;
264
- if (!listElement) return;
265
- let activeOption_1 = filteredOptions.find((o_2) => o_2.value === activeValue);
266
- if (activeOption_1) {
267
- let activeIndex_1 = filteredOptions.indexOf(activeOption_1), activeItemElement = listElement.childNodes[activeIndex_1];
268
- if (activeItemElement) {
269
- if (_hasFocus(activeItemElement)) return;
270
- focusFirstDescendant(activeItemElement);
271
- }
272
- }
273
- }, t34 = [activeValue, filteredOptions], $[91] = activeValue, $[92] = filteredOptions, $[93] = t33, $[94] = t34) : (t33 = $[93], t34 = $[94]), useEffect(t33, t34);
274
- let t35;
275
- bb0: {
276
- if (!loading && !disabled && value) {
277
- let t36;
278
- $[95] === Symbol.for("react.memo_cache_sentinel") ? (t36 = {
279
- "aria-label": "Clear",
280
- onFocus: handleClearButtonFocus
281
- }, $[95] = t36) : t36 = $[95], t35 = t36;
282
- break bb0;
283
- }
284
- t35 = void 0;
285
- }
286
- let clearButton = t35, openButtonBoxPadding = padding.map(_temp), openButtonPadding = padding.map(_temp2), openButtonProps = typeof openButton == "object" ? openButton : EMPTY_RECORD, t36;
287
- $[96] !== dispatchOpen || $[97] !== openButtonProps ? (t36 = (event_4) => {
288
- dispatchOpen(), openButtonProps.onClick && openButtonProps.onClick(event_4), _raf(() => inputElementRef.current?.focus());
289
- }, $[96] = dispatchOpen, $[97] = openButtonProps, $[98] = t36) : t36 = $[98];
290
- let handleOpenClick = t36, t37;
291
- $[99] !== disabled || $[100] !== expanded || $[101] !== fontSize || $[102] !== handleOpenClick || $[103] !== openButton || $[104] !== openButtonBoxPadding || $[105] !== openButtonPadding || $[106] !== openButtonProps || $[107] !== readOnly ? (t37 = !disabled && !readOnly && openButton ? /* @__PURE__ */ jsx(Box, {
292
- "aria-hidden": expanded,
293
- padding: openButtonBoxPadding,
294
- children: /* @__PURE__ */ jsx(Button, {
295
- "aria-label": "Open",
296
- disabled: expanded,
297
- fontSize,
298
- icon: ChevronDownIcon,
299
- mode: "bleed",
300
- padding: openButtonPadding,
301
- ...openButtonProps,
302
- onClick: handleOpenClick
303
- })
304
- }) : void 0, $[99] = disabled, $[100] = expanded, $[101] = fontSize, $[102] = handleOpenClick, $[103] = openButton, $[104] = openButtonBoxPadding, $[105] = openButtonPadding, $[106] = openButtonProps, $[107] = readOnly, $[108] = t37) : t37 = $[108];
305
- let openButtonNode = t37, t38;
306
- bb1: {
307
- if (query === null) {
308
- if (value !== null) {
309
- let t39;
310
- $[109] !== currentOption || $[110] !== renderValue || $[111] !== value ? (t39 = renderValue(value, currentOption), $[109] = currentOption, $[110] = renderValue, $[111] = value, $[112] = t39) : t39 = $[112], t38 = t39;
311
- break bb1;
312
- }
313
- t38 = "";
314
- break bb1;
315
- }
316
- t38 = query;
317
- }
318
- let inputValue = t38, t39;
319
- $[113] === listFocused ? t39 = $[114] : (t39 = (event_5) => {
320
- event_5.key === "Tab" && listFocused && inputElementRef.current?.focus();
321
- }, $[113] = listFocused, $[114] = t39);
322
- let handleListBoxKeyDown = t39, t40;
323
- bb2: {
324
- if (filteredOptions.length === 0) {
325
- t40 = null;
326
- break bb2;
327
- }
328
- let t41 = listBox?.className, t42;
329
- $[115] === t41 ? t42 = $[116] : (t42 = clsx(autocompleteListBox, t41), $[115] = t41, $[116] = t42);
330
- let t43;
331
- if ($[117] !== activeValue || $[118] !== currentOption || $[119] !== filteredOptions || $[120] !== handleOptionSelect || $[121] !== id || $[122] !== listFocused || $[123] !== loading || $[124] !== renderOption) {
332
- let t44;
333
- $[126] !== activeValue || $[127] !== currentOption || $[128] !== handleOptionSelect || $[129] !== id || $[130] !== listFocused || $[131] !== loading || $[132] !== renderOption ? (t44 = (option_0) => {
334
- let active = activeValue === null ? currentOption === option_0 : option_0.value === activeValue;
335
- return /* @__PURE__ */ jsx(AutocompleteOption, {
336
- id: `${id}-option-${option_0.value}`,
337
- onSelect: handleOptionSelect,
338
- selected: active,
339
- value: option_0.value,
340
- children: cloneElement(renderOption(option_0), {
341
- disabled: loading,
342
- selected: active,
343
- tabIndex: listFocused && active ? 0 : -1
344
- })
345
- }, option_0.value);
346
- }, $[126] = activeValue, $[127] = currentOption, $[128] = handleOptionSelect, $[129] = id, $[130] = listFocused, $[131] = loading, $[132] = renderOption, $[133] = t44) : t44 = $[133], t43 = filteredOptions.map(t44), $[117] = activeValue, $[118] = currentOption, $[119] = filteredOptions, $[120] = handleOptionSelect, $[121] = id, $[122] = listFocused, $[123] = loading, $[124] = renderOption, $[125] = t43;
347
- } else t43 = $[125];
348
- let t44;
349
- $[134] !== listBoxId || $[135] !== t43 ? (t44 = /* @__PURE__ */ jsx(Stack, {
350
- as: "ul",
351
- "aria-multiselectable": !1,
352
- "data-ui": "AutoComplete__resultsList",
353
- id: listBoxId,
354
- ref: listBoxElementRef,
355
- role: "listbox",
356
- gap: 1,
357
- children: t43
358
- }), $[134] = listBoxId, $[135] = t43, $[136] = t44) : t44 = $[136];
359
- let t45;
360
- $[137] !== handleListBoxKeyDown || $[138] !== listBox || $[139] !== t42 || $[140] !== t44 ? (t45 = /* @__PURE__ */ jsx(Box, {
361
- "data-ui": "AutoComplete__results",
362
- onKeyDown: handleListBoxKeyDown,
363
- padding: 1,
364
- ...listBox,
365
- className: t42,
366
- tabIndex: -1,
367
- children: t44
368
- }), $[137] = handleListBoxKeyDown, $[138] = listBox, $[139] = t42, $[140] = t44, $[141] = t45) : t45 = $[141], t40 = t45;
369
- }
370
- let content = t40, t41;
371
- bb3: {
372
- if (renderPopover) {
373
- let t42 = !expanded, t43;
374
- $[142] !== content || $[143] !== handlePopoverMouseEnter || $[144] !== handlePopoverMouseLeave || $[145] !== inputElement || $[146] !== renderPopover || $[147] !== t42 ? (t43 = /* @__PURE__ */ jsx(RenderPopover, {
375
- content,
376
- hidden: t42,
377
- inputElement,
378
- onMouseEnter: handlePopoverMouseEnter,
379
- onMouseLeave: handlePopoverMouseLeave,
380
- resultsPopoverElementRef,
381
- renderPopover
382
- }), $[142] = content, $[143] = handlePopoverMouseEnter, $[144] = handlePopoverMouseLeave, $[145] = inputElement, $[146] = renderPopover, $[147] = t42, $[148] = t43) : t43 = $[148], t41 = t43;
383
- break bb3;
384
- }
385
- if (filteredOptionsLen === 0) {
386
- t41 = null;
387
- break bb3;
388
- }
389
- let t42;
390
- $[149] !== content || $[150] !== expanded || $[151] !== handlePopoverMouseEnter || $[152] !== handlePopoverMouseLeave || $[153] !== inputElement || $[154] !== popover || $[155] !== radius ? (t42 = /* @__PURE__ */ jsx(Popover, {
391
- arrow: !1,
392
- constrainSize: !0,
393
- content,
394
- fallbackPlacements: AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS,
395
- matchReferenceWidth: !0,
396
- onMouseEnter: handlePopoverMouseEnter,
397
- onMouseLeave: handlePopoverMouseLeave,
398
- open: expanded,
399
- overflow: "auto",
400
- placement: "bottom-start",
401
- portal: !0,
402
- radius,
403
- ref: resultsPopoverElementRef,
404
- referenceElement: inputElement,
405
- ...popover
406
- }), $[149] = content, $[150] = expanded, $[151] = handlePopoverMouseEnter, $[152] = handlePopoverMouseLeave, $[153] = inputElement, $[154] = popover, $[155] = radius, $[156] = t42) : t42 = $[156], t41 = t42;
407
- }
408
- let results = t41, t42;
409
- $[157] === loading ? t42 = $[158] : (t42 = loading && /* @__PURE__ */ jsx(SpinnerIcon, { className: "_1b6o2se1" }), $[157] = loading, $[158] = t42);
410
- let t43 = suffix || openButtonNode, t44;
411
- $[159] !== activeItemId || $[160] !== border || $[161] !== clearButton || $[162] !== customValidity || $[163] !== disabled || $[164] !== expanded || $[165] !== fontSize || $[166] !== handleClearButtonClick || $[167] !== handleInputChange || $[168] !== handleInputFocus || $[169] !== icon || $[170] !== id || $[171] !== inputValue || $[172] !== listBoxId || $[173] !== padding || $[174] !== prefix || $[175] !== radius || $[176] !== readOnly || $[177] !== restProps || $[178] !== t42 || $[179] !== t43 ? (t44 = /* @__PURE__ */ jsx(TextInput, {
412
- ...restProps,
413
- "aria-activedescendant": activeItemId,
414
- "aria-autocomplete": "list",
415
- "aria-expanded": expanded,
416
- "aria-owns": listBoxId,
417
- autoCapitalize: "off",
418
- autoComplete: "off",
419
- autoCorrect: "off",
420
- border,
421
- clearButton,
422
- customValidity,
423
- disabled,
424
- fontSize,
425
- icon,
426
- iconRight: t42,
427
- id,
428
- inputMode: "search",
429
- onChange: handleInputChange,
430
- onClear: handleClearButtonClick,
431
- onFocus: handleInputFocus,
432
- padding,
433
- prefix,
434
- radius,
435
- readOnly,
436
- ref: setInputElement,
437
- role: "combobox",
438
- spellCheck: !1,
439
- suffix: t43,
440
- value: inputValue
441
- }), $[159] = activeItemId, $[160] = border, $[161] = clearButton, $[162] = customValidity, $[163] = disabled, $[164] = expanded, $[165] = fontSize, $[166] = handleClearButtonClick, $[167] = handleInputChange, $[168] = handleInputFocus, $[169] = icon, $[170] = id, $[171] = inputValue, $[172] = listBoxId, $[173] = padding, $[174] = prefix, $[175] = radius, $[176] = readOnly, $[177] = restProps, $[178] = t42, $[179] = t43, $[180] = t44) : t44 = $[180];
442
- let t45;
443
- return $[181] !== handleRootBlur || $[182] !== handleRootFocus || $[183] !== handleRootKeyDown || $[184] !== results || $[185] !== t44 ? (t45 = /* @__PURE__ */ jsxs("div", {
444
- className: autocomplete,
445
- "data-ui": "Autocomplete",
446
- onBlur: handleRootBlur,
447
- onFocus: handleRootFocus,
448
- onKeyDown: handleRootKeyDown,
449
- ref: rootElementRef,
450
- children: [t44, results]
451
- }), $[181] = handleRootBlur, $[182] = handleRootFocus, $[183] = handleRootKeyDown, $[184] = results, $[185] = t44, $[186] = t45) : t45 = $[186], t45;
452
- }
453
- function _temp2(v_1) {
454
- return Math.max(v_1 - 1, 0);
455
- }
456
- function _temp(v_0) {
457
- return v_0 === 0 ? 0 : v_0 === 1 || v_0 === 2 ? 1 : v_0 - 2;
458
- }
459
- function RenderPopover({ renderPopover, content, hidden, inputElement, onMouseEnter, onMouseLeave, resultsPopoverElementRef }) {
460
- return renderPopover({
461
- content,
462
- hidden,
463
- inputElement,
464
- onMouseEnter,
465
- onMouseLeave
466
- }, resultsPopoverElementRef);
467
- }
468
- export { Autocomplete };
469
-
470
- //# sourceMappingURL=autocomplete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete.js","names":["() => {\n // Calling the `onSelect` in a timeout is a fix to\n // allow the `click` event to propagate in some cases\n setTimeout(() => {\n onSelect(value)\n }, 0)\n }","useCallback(() => {\n // Calling the `onSelect` in a timeout is a fix to\n // allow the `click` event to propagate in some cases\n setTimeout(() => {\n onSelect(value)\n }, 0)\n }, [onSelect, value])","(event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event.key === 'Enter' && !_isEnterToClickElement(event.currentTarget)) {\n handleClick()\n }\n }","useCallback(\n (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event.key === 'Enter' && !_isEnterToClickElement(event.currentTarget)) {\n handleClick()\n }\n },\n [handleClick],\n )","<li\n aria-selected={selected}\n data-ui=\"AutocompleteOption\"\n id={id}\n // oxlint-disable-next-line no-noninteractive-element-to-interactive-role, prefer-tag-over-role\n role=\"option\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </li>","border = true","fontSize = 2","listBox = EMPTY_RECORD","paddingProp = 3","popover = EMPTY_RECORD","radius = 2","renderValue = DEFAULT_RENDER_VALUE","{\n activeValue: valueProp || null,\n focused: false,\n listFocused: false,\n query: null,\n value: valueProp || null,\n }","valueProp || null","({value}: BaseAutocompleteOption) => (\n <Card data-as=\"button\" padding={paddingProp} radius={2} tone=\"inherit\">\n <Text size={fontSize} textOverflow=\"ellipsis\">\n {value}\n </Text>\n </Card>\n )","{value}: BaseAutocompleteOption","value","useCallback(\n ({value}: BaseAutocompleteOption) => (\n <Card data-as=\"button\" padding={paddingProp} radius={2} tone=\"inherit\">\n <Text size={fontSize} textOverflow=\"ellipsis\">\n {value}\n </Text>\n </Card>\n ),\n [fontSize, paddingProp],\n )","(node: HTMLInputElement | null) => {\n startTransition(() => _setInputElement(node))\n }","useCallback((node: HTMLInputElement | null) => {\n startTransition(() => _setInputElement(node))\n }, [])","() => inputElement","[inputElement]","value !== null ? options.find((o) => o.value === value) : undefined","useMemo(\n () => (value !== null ? options.find((o) => o.value === value) : undefined),\n [options, value],\n )","options.filter((option) => (query ? filterOption(query, option) : true))","(option) => (query ? filterOption(query, option) : true)","useMemo(\n () => options.filter((option) => (query ? filterOption(query, option) : true)),\n [filterOption, options, query],\n )","(event: FocusEvent<HTMLInputElement>) => {\n setTimeout(() => {\n // NOTE: This is a workaround for a bug that may happen in Chrome (clicking the scrollbar\n // closes the results in certain situations):\n // - Do not handle blur if the mouse is within the popover\n if (popoverMouseWithinRef.current) {\n return\n }\n\n const elements: HTMLElement[] = (relatedElements || []).concat(\n rootElementRef.current ? [rootElementRef.current] : [],\n resultsPopoverElementRef.current ? [resultsPopoverElementRef.current] : [],\n )\n\n let focusInside = false\n\n if (document.activeElement) {\n for (const e of elements) {\n if (e === document.activeElement || e.contains(document.activeElement)) {\n focusInside = true\n break\n }\n }\n }\n\n // oxlint-disable-next-line no-unnecessary-boolean-literal-compare\n if (focusInside === false) {\n dispatch({type: 'root/blur'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n if (onBlur) onBlur(event)\n }\n }, 0)\n }","useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setTimeout(() => {\n // NOTE: This is a workaround for a bug that may happen in Chrome (clicking the scrollbar\n // closes the results in certain situations):\n // - Do not handle blur if the mouse is within the popover\n if (popoverMouseWithinRef.current) {\n return\n }\n\n const elements: HTMLElement[] = (relatedElements || []).concat(\n rootElementRef.current ? [rootElementRef.current] : [],\n resultsPopoverElementRef.current ? [resultsPopoverElementRef.current] : [],\n )\n\n let focusInside = false\n\n if (document.activeElement) {\n for (const e of elements) {\n if (e === document.activeElement || e.contains(document.activeElement)) {\n focusInside = true\n break\n }\n }\n }\n\n // oxlint-disable-next-line no-unnecessary-boolean-literal-compare\n if (focusInside === false) {\n dispatch({type: 'root/blur'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n if (onBlur) onBlur(event)\n }\n }, 0)\n },\n [onBlur, onQueryChange, relatedElements],\n )","(event: FocusEvent<HTMLDivElement>) => {\n const listBoxElement = listBoxElementRef.current\n const focusedElement = event.target instanceof HTMLElement ? event.target : null\n const listFocused = listBoxElement?.contains(focusedElement) || false\n\n if (listFocused !== listFocusedRef.current) {\n listFocusedRef.current = listFocused\n\n dispatch({type: 'root/setListFocused', listFocused})\n }\n }","event","listFocused","useCallback((event: FocusEvent<HTMLDivElement>) => {\n const listBoxElement = listBoxElementRef.current\n const focusedElement = event.target instanceof HTMLElement ? event.target : null\n const listFocused = listBoxElement?.contains(focusedElement) || false\n\n if (listFocused !== listFocusedRef.current) {\n listFocusedRef.current = listFocused\n\n dispatch({type: 'root/setListFocused', listFocused})\n }\n }, [])","(v: string) => {\n dispatch({type: 'value/change', value: v})\n\n popoverMouseWithinRef.current = false\n\n if (onSelect) onSelect(v)\n\n valueRef.current = v\n\n if (onChange) onChange(v)\n if (onQueryChange) onQueryChange(null)\n\n inputElementRef.current?.focus()\n }","useCallback(\n (v: string) => {\n dispatch({type: 'value/change', value: v})\n\n popoverMouseWithinRef.current = false\n\n if (onSelect) onSelect(v)\n\n valueRef.current = v\n\n if (onChange) onChange(v)\n if (onQueryChange) onQueryChange(null)\n\n inputElementRef.current?.focus()\n },\n [onChange, onSelect, onQueryChange],\n )","(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption = filteredOptions[(activeIndex + 1) % filteredOptionsLen]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption =\n filteredOptions[\n activeIndex === -1\n ? filteredOptionsLen - 1\n : (filteredOptionsLen + activeIndex - 1) % filteredOptionsLen\n ]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'Escape') {\n dispatch({type: 'root/escape'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n\n return\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n const target = event.target as Node\n const listEl = listBoxElementRef.current\n\n if (\n (listEl === target || listEl?.contains(target)) &&\n !AUTOCOMPLETE_LISTBOX_IGNORE_KEYS.includes(event.key)\n ) {\n inputElementRef.current?.focus()\n\n return\n }\n }","o","activeOption","activeIndex","nextActiveOption","useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption = filteredOptions[(activeIndex + 1) % filteredOptionsLen]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption =\n filteredOptions[\n activeIndex === -1\n ? filteredOptionsLen - 1\n : (filteredOptionsLen + activeIndex - 1) % filteredOptionsLen\n ]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'Escape') {\n dispatch({type: 'root/escape'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n\n return\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n const target = event.target as Node\n const listEl = listBoxElementRef.current\n\n if (\n (listEl === target || listEl?.contains(target)) &&\n !AUTOCOMPLETE_LISTBOX_IGNORE_KEYS.includes(event.key)\n ) {\n inputElementRef.current?.focus()\n\n return\n }\n },\n [activeValue, filteredOptions, filteredOptionsLen, onQueryChange],\n )","(event: ChangeEvent<HTMLInputElement>) => {\n const nextQuery = event.currentTarget.value\n\n dispatch({type: 'input/change', query: nextQuery})\n\n if (onQueryChange) onQueryChange(nextQuery)\n }","useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const nextQuery = event.currentTarget.value\n\n dispatch({type: 'input/change', query: nextQuery})\n\n if (onQueryChange) onQueryChange(nextQuery)\n },\n [onQueryChange],\n )","() => {\n dispatch({\n type: 'root/open',\n query: value ? renderValue(value, currentOption) : '',\n })\n }","useCallback(() => {\n dispatch({\n type: 'root/open',\n query: value ? renderValue(value, currentOption) : '',\n })\n }, [currentOption, renderValue, value])","(event: FocusEvent<HTMLInputElement>) => {\n if (!focused) {\n dispatch({type: 'input/focus'})\n\n if (onFocus) onFocus(event)\n if (openOnFocus) dispatchOpen()\n }\n }","useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (!focused) {\n dispatch({type: 'input/focus'})\n\n if (onFocus) onFocus(event)\n if (openOnFocus) dispatchOpen()\n }\n },\n [focused, onFocus, openOnFocus, dispatchOpen],\n )","() => {\n popoverMouseWithinRef.current = true\n }","useCallback(() => {\n popoverMouseWithinRef.current = true\n }, [])","() => {\n popoverMouseWithinRef.current = false\n }","useCallback(() => {\n popoverMouseWithinRef.current = false\n }, [])","() => {\n dispatch({type: 'root/clear'})\n valueRef.current = ''\n if (onChange) onChange('')\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n }","useCallback(() => {\n dispatch({type: 'root/clear'})\n valueRef.current = ''\n if (onChange) onChange('')\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n }, [onChange, onQueryChange])","() => {\n dispatch({type: 'input/focus'})\n }","useCallback(() => {\n dispatch({type: 'input/focus'})\n }, [])","() => {\n // If `valueProp` changed\n if (valueProp !== valuePropRef.current) {\n valuePropRef.current = valueProp\n\n if (valueProp !== undefined) {\n dispatch({type: 'value/change', value: valueProp})\n valueRef.current = valueProp\n }\n\n return\n }\n\n // If `valueProp` is not equal to `value`\n if (valueProp !== valueRef.current) {\n valueRef.current = valueProp || null\n\n dispatch({type: 'value/change', value: valueProp || null})\n }\n }","[valueProp]","() => {\n if (!focused && valueRef.current) {\n dispatch({type: 'root/setActiveValue', value: valueRef.current})\n }\n }","[focused]","() => {\n const listElement = listBoxElementRef.current\n\n if (!listElement) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n\n if (activeOption) {\n const activeIndex = filteredOptions.indexOf(activeOption)\n // oxlint-disable-next-line no-unsafe-type-assertion\n const activeItemElement = listElement.childNodes[activeIndex] as HTMLLIElement | undefined\n\n if (activeItemElement) {\n if (_hasFocus(activeItemElement)) {\n // already focused\n return\n }\n\n focusFirstDescendant(activeItemElement)\n }\n }\n }","[activeValue, filteredOptions]","useMemo(() => {\n if (!loading && !disabled && value) {\n return {\n 'aria-label': 'Clear',\n 'onFocus': handleClearButtonFocus,\n }\n }\n\n return undefined\n }, [disabled, handleClearButtonFocus, loading, value])","{\n 'aria-label': 'Clear',\n 'onFocus': handleClearButtonFocus,\n }","(v) => {\n if (v === 0) return 0\n if (v === 1) return 1\n if (v === 2) return 1\n\n return v - 2\n }","(v) => Math.max(v - 1, 0)","(event: MouseEvent<HTMLButtonElement>) => {\n dispatchOpen()\n\n if (openButtonProps.onClick) openButtonProps.onClick(event)\n\n _raf(() => inputElementRef.current?.focus())\n }","openButtonProps.onClick","useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n dispatchOpen()\n\n if (openButtonProps.onClick) openButtonProps.onClick(event)\n\n _raf(() => inputElementRef.current?.focus())\n },\n [openButtonProps, dispatchOpen],\n )","!disabled && !readOnly && openButton ? (\n <Box aria-hidden={expanded} padding={openButtonBoxPadding}>\n <Button\n aria-label=\"Open\"\n disabled={expanded}\n fontSize={fontSize}\n icon={ChevronDownIcon}\n mode=\"bleed\"\n padding={openButtonPadding}\n {...openButtonProps}\n onClick={handleOpenClick}\n />\n </Box>\n ) : undefined","useMemo(\n () =>\n !disabled && !readOnly && openButton ? (\n <Box aria-hidden={expanded} padding={openButtonBoxPadding}>\n <Button\n aria-label=\"Open\"\n disabled={expanded}\n fontSize={fontSize}\n icon={ChevronDownIcon}\n mode=\"bleed\"\n padding={openButtonPadding}\n {...openButtonProps}\n onClick={handleOpenClick}\n />\n </Box>\n ) : undefined,\n [\n disabled,\n expanded,\n fontSize,\n handleOpenClick,\n openButton,\n openButtonBoxPadding,\n openButtonPadding,\n openButtonProps,\n readOnly,\n ],\n )","useMemo(() => {\n if (query === null) {\n if (value !== null) {\n return renderValue(value, currentOption)\n }\n\n return ''\n }\n\n return query\n }, [currentOption, query, renderValue, value])","renderValue(value, currentOption)","(event: KeyboardEvent<HTMLDivElement>) => {\n // If the focus is currently in the list, move focus to the input element\n if (event.key === 'Tab') {\n if (listFocused) inputElementRef.current?.focus()\n }\n }","useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n // If the focus is currently in the list, move focus to the input element\n if (event.key === 'Tab') {\n if (listFocused) inputElementRef.current?.focus()\n }\n },\n [listFocused],\n )","useMemo(() => {\n if (filteredOptions.length === 0) return null\n\n return (\n <Box\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\n className={clsx(autocompleteListBox, listBox?.className)}\n tabIndex={-1}\n >\n <Stack\n as=\"ul\"\n aria-multiselectable={false}\n data-ui=\"AutoComplete__resultsList\"\n id={listBoxId}\n ref={listBoxElementRef}\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"listbox\"\n gap={1}\n >\n {filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n })}\n </Stack>\n </Box>\n )\n }, [\n activeValue,\n currentOption,\n filteredOptions,\n handleOptionSelect,\n handleListBoxKeyDown,\n id,\n listBox,\n listBoxId,\n listFocused,\n loading,\n renderOption,\n ])","clsx(autocompleteListBox, listBox?.className)","listBox?.className","filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n })","(option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n }","option","<Stack\n as=\"ul\"\n aria-multiselectable={false}\n data-ui=\"AutoComplete__resultsList\"\n id={listBoxId}\n ref={listBoxElementRef}\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"listbox\"\n gap={1}\n >\n {filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n })}\n </Stack>","<Box\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\n className={clsx(autocompleteListBox, listBox?.className)}\n tabIndex={-1}\n >\n <Stack\n as=\"ul\"\n aria-multiselectable={false}\n data-ui=\"AutoComplete__resultsList\"\n id={listBoxId}\n ref={listBoxElementRef}\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"listbox\"\n gap={1}\n >\n {filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n })}\n </Stack>\n </Box>","useMemo(() => {\n if (renderPopover) {\n return (\n <RenderPopover\n content={content}\n hidden={!expanded}\n inputElement={inputElement}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n resultsPopoverElementRef={resultsPopoverElementRef}\n renderPopover={renderPopover}\n />\n )\n }\n\n if (filteredOptionsLen === 0) {\n return null\n }\n\n return (\n <Popover\n arrow={false}\n constrainSize\n content={content}\n fallbackPlacements={AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS}\n matchReferenceWidth\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n open={expanded}\n overflow=\"auto\"\n placement={AUTOCOMPLETE_POPOVER_PLACEMENT}\n portal\n radius={radius}\n ref={resultsPopoverElementRef}\n referenceElement={inputElement}\n {...popover}\n />\n )\n }, [\n content,\n expanded,\n filteredOptionsLen,\n handlePopoverMouseEnter,\n handlePopoverMouseLeave,\n inputElement,\n popover,\n radius,\n renderPopover,\n ])","<RenderPopover\n content={content}\n hidden={!expanded}\n inputElement={inputElement}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n resultsPopoverElementRef={resultsPopoverElementRef}\n renderPopover={renderPopover}\n />","!expanded","<Popover\n arrow={false}\n constrainSize\n content={content}\n fallbackPlacements={AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS}\n matchReferenceWidth\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n open={expanded}\n overflow=\"auto\"\n placement={AUTOCOMPLETE_POPOVER_PLACEMENT}\n portal\n radius={radius}\n ref={resultsPopoverElementRef}\n referenceElement={inputElement}\n {...popover}\n />","loading && <SpinnerIcon className={spinnerIcon} />","<TextInput\n {...restProps}\n aria-activedescendant={activeItemId}\n aria-autocomplete=\"list\"\n aria-expanded={expanded}\n aria-owns={listBoxId}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n border={border}\n clearButton={clearButton}\n customValidity={customValidity}\n disabled={disabled}\n fontSize={fontSize}\n icon={icon}\n iconRight={loading && <SpinnerIcon className={spinnerIcon} />}\n id={id}\n inputMode=\"search\"\n onChange={handleInputChange}\n onClear={handleClearButtonClick}\n onFocus={handleInputFocus}\n padding={padding}\n prefix={prefix}\n radius={radius}\n readOnly={readOnly}\n ref={setInputElement}\n // oxlint-disable-next-line prefer-tag-over-role, role-has-required-aria-props\n role=\"combobox\"\n spellCheck={false}\n suffix={suffix || openButtonNode}\n value={inputValue}\n />","suffix || openButtonNode","<div\n className={autocomplete}\n data-ui=\"Autocomplete\"\n onBlur={handleRootBlur}\n onFocus={handleRootFocus}\n onKeyDown={handleRootKeyDown}\n ref={rootElementRef}\n >\n <TextInput\n {...restProps}\n aria-activedescendant={activeItemId}\n aria-autocomplete=\"list\"\n aria-expanded={expanded}\n aria-owns={listBoxId}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n border={border}\n clearButton={clearButton}\n customValidity={customValidity}\n disabled={disabled}\n fontSize={fontSize}\n icon={icon}\n iconRight={loading && <SpinnerIcon className={spinnerIcon} />}\n id={id}\n inputMode=\"search\"\n onChange={handleInputChange}\n onClear={handleClearButtonClick}\n onFocus={handleInputFocus}\n padding={padding}\n prefix={prefix}\n radius={radius}\n readOnly={readOnly}\n ref={setInputElement}\n // oxlint-disable-next-line prefer-tag-over-role, role-has-required-aria-props\n role=\"combobox\"\n spellCheck={false}\n suffix={suffix || openButtonNode}\n value={inputValue}\n />\n {results}\n </div>","v"],"sources":["../src/core/components/autocomplete/autocompleteOption.tsx","../src/core/components/autocomplete/autocompleteReducer.ts","../src/core/components/autocomplete/constants.ts","../src/core/components/autocomplete/autocomplete.css.ts","../src/core/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import {useCallback} from 'react'\n\nimport {_isEnterToClickElement} from '../../helpers/element'\n\nexport interface AutocompleteOptionProps {\n children: React.ReactNode\n id: string\n onSelect: (v: string) => void\n selected: boolean\n value: string\n}\n\nexport function AutocompleteOption(props: AutocompleteOptionProps): React.JSX.Element {\n const {children, id, onSelect, selected, value} = props\n\n const handleClick = useCallback(() => {\n // Calling the `onSelect` in a timeout is a fix to\n // allow the `click` event to propagate in some cases\n setTimeout(() => {\n onSelect(value)\n }, 0)\n }, [onSelect, value])\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event.key === 'Enter' && !_isEnterToClickElement(event.currentTarget)) {\n handleClick()\n }\n },\n [handleClick],\n )\n\n return (\n <li\n aria-selected={selected}\n data-ui=\"AutocompleteOption\"\n id={id}\n // oxlint-disable-next-line no-noninteractive-element-to-interactive-role, prefer-tag-over-role\n role=\"option\"\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {children}\n </li>\n )\n}\n","import {AutocompleteMsg, AutocompleteState} from './types'\n\n/**\n * @internal\n */\nexport function autocompleteReducer(\n state: AutocompleteState,\n msg: AutocompleteMsg,\n): AutocompleteState {\n if (msg.type === 'input/change') {\n return {...state, activeValue: null, focused: true, query: msg.query}\n }\n\n if (msg.type === 'input/focus') {\n return {...state, focused: true}\n }\n\n if (msg.type === 'root/blur') {\n return {...state, focused: false, query: null}\n }\n\n if (msg.type === 'root/clear') {\n return {...state, activeValue: null, query: null, value: null}\n }\n\n if (msg.type === 'root/escape') {\n return {...state, focused: false, query: null}\n }\n\n if (msg.type === 'root/open') {\n return {...state, query: state.query || msg.query}\n }\n\n if (msg.type === 'root/setActiveValue') {\n return {...state, activeValue: msg.value, listFocused: msg.listFocused || state.listFocused}\n }\n\n if (msg.type === 'root/setListFocused') {\n return {...state, listFocused: msg.listFocused}\n }\n\n if (msg.type === 'value/change') {\n return {...state, activeValue: msg.value, query: null, value: msg.value}\n }\n\n return state\n}\n","import {Placement} from '../../types/placement'\n\n/**\n * @internal\n */\nexport const AUTOCOMPLETE_LISTBOX_IGNORE_KEYS = [\n 'Control',\n 'Shift',\n 'Alt',\n 'Enter',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n 'Meta',\n 'Tab',\n 'CapsLock',\n]\n\n/**\n * @internal\n */\nexport const AUTOCOMPLETE_POPOVER_PLACEMENT: Placement = 'bottom-start'\n\n/**\n * @internal\n */\nexport const AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS: Placement[] = ['bottom-start', 'top-start']\n","import {globalStyle, style} from '@vanilla-extract/css'\n\nexport const autocomplete = style({\n lineHeight: 0,\n})\n\nexport const autocompleteListBox = style({})\n\nglobalStyle(`${autocompleteListBox} > ul`, {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n})\n","import {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {clsx} from 'clsx/lite'\nimport {\n ChangeEvent,\n cloneElement,\n ElementType,\n FocusEvent,\n HTMLProps,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n Ref,\n startTransition,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react'\n\nimport {EMPTY_ARRAY, EMPTY_RECORD} from '../../constants'\nimport {_raf} from '../../helpers/animation'\nimport {_hasFocus, focusFirstDescendant} from '../../helpers/focus'\nimport {Box, BoxProps} from '../../primitives/box/box'\nimport {Button} from '../../primitives/button/button'\nimport {Card} from '../../primitives/card/card'\nimport {Popover, PopoverProps} from '../../primitives/popover/popover'\nimport {Stack} from '../../primitives/stack/stack'\nimport {Text} from '../../primitives/text/text'\nimport {TextInput} from '../../primitives/textInput/textInput'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {Radius} from '../../types/radius'\nimport {AutocompleteOption} from './autocompleteOption'\nimport {autocompleteReducer} from './autocompleteReducer'\nimport {\n AUTOCOMPLETE_LISTBOX_IGNORE_KEYS,\n AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS,\n AUTOCOMPLETE_POPOVER_PLACEMENT,\n} from './constants'\nimport {AutocompleteOpenButtonProps, BaseAutocompleteOption} from './types'\n\nimport {spinnerIcon} from '../../primitives/spinner/spinner.css'\nimport {autocomplete, autocompleteListBox} from './autocomplete.css'\n\n/**\n * @public\n */\nexport interface AutocompleteProps<Option extends BaseAutocompleteOption = BaseAutocompleteOption> {\n border?: boolean\n customValidity?: string\n filterOption?: (query: string, option: Option) => boolean\n fontSize?: number | number[]\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: ElementType | ReactNode\n id: string\n /** @beta */\n listBox?: BoxProps\n loading?: boolean\n onChange?: (value: string) => void\n onQueryChange?: (query: string | null) => void\n onSelect?: (value: string) => void\n /** @beta */\n openButton?: boolean | AutocompleteOpenButtonProps\n /** @beta */\n openOnFocus?: boolean\n /** The options to render. */\n options?: Option[]\n padding?: number | number[]\n popover?: Omit<PopoverProps, 'content' | 'onMouseEnter' | 'onMouseLeave' | 'open'> &\n Omit<HTMLProps<HTMLDivElement>, 'as' | 'children' | 'content' | 'ref' | 'width'>\n prefix?: ReactNode\n radius?: Radius | Radius[]\n /** @beta */\n relatedElements?: HTMLElement[]\n /** The callback function for rendering each option. */\n renderOption?: (option: Option) => React.JSX.Element\n /** @beta */\n renderPopover?: (\n props: {\n content: React.JSX.Element | null\n hidden: boolean\n inputElement: HTMLInputElement | null\n onMouseEnter: () => void\n onMouseLeave: () => void\n },\n ref: Ref<HTMLDivElement>,\n ) => ReactNode\n renderValue?: (value: string, option?: Option) => string\n suffix?: ReactNode\n /** The current value. */\n value?: string\n}\n\nconst DEFAULT_RENDER_VALUE = (value: string, option?: BaseAutocompleteOption) =>\n option ? option.value : value\n\nconst DEFAULT_FILTER_OPTION = (query: string, option: BaseAutocompleteOption) =>\n option.value.toLowerCase().indexOf(query.toLowerCase()) > -1\n\n/**\n * The Autocomplete component is typically used for search components.\n * It consists of a text input for writing a query, and properties for rendering suggestions.\n *\n * @public\n */\nexport function Autocomplete<Option extends BaseAutocompleteOption>(\n props: AutocompleteProps<Option> &\n Omit<\n HTMLProps<HTMLInputElement>,\n | 'aria-activedescendant'\n | 'aria-autocomplete'\n | 'aria-expanded'\n | 'aria-owns'\n | 'as'\n | 'autoCapitalize'\n | 'autoComplete'\n | 'autoCorrect'\n | 'id'\n | 'inputMode'\n | 'onChange'\n | 'onSelect'\n | 'popover'\n | 'prefix'\n | 'role'\n | 'spellCheck'\n | 'type'\n | 'value'\n >,\n) {\n const {\n border = true,\n customValidity,\n disabled,\n filterOption: filterOptionProp,\n fontSize = 2,\n icon,\n id,\n listBox = EMPTY_RECORD,\n loading,\n onBlur,\n onChange,\n onFocus,\n onQueryChange,\n onSelect,\n openButton,\n openOnFocus,\n options: optionsProp,\n padding: paddingProp = 3,\n popover = EMPTY_RECORD,\n prefix,\n radius = 2,\n readOnly,\n ref: forwardedRef,\n relatedElements,\n renderOption: renderOptionProp,\n renderPopover,\n renderValue = DEFAULT_RENDER_VALUE,\n suffix,\n value: valueProp,\n ...restProps\n } = props\n\n const [state, dispatch] = useReducer(autocompleteReducer, {\n activeValue: valueProp || null,\n focused: false,\n listFocused: false,\n query: null,\n value: valueProp || null,\n })\n\n const {activeValue, focused, listFocused, query, value} = state\n\n const defaultRenderOption = useCallback(\n ({value}: BaseAutocompleteOption) => (\n <Card data-as=\"button\" padding={paddingProp} radius={2} tone=\"inherit\">\n <Text size={fontSize} textOverflow=\"ellipsis\">\n {value}\n </Text>\n </Card>\n ),\n [fontSize, paddingProp],\n )\n\n const renderOption =\n typeof renderOptionProp === 'function' ? renderOptionProp : defaultRenderOption\n\n const filterOption =\n typeof filterOptionProp === 'function' ? filterOptionProp : DEFAULT_FILTER_OPTION\n\n // Element refs\n const rootElementRef = useRef<HTMLDivElement | null>(null)\n const resultsPopoverElementRef = useRef<HTMLDivElement | null>(null)\n const inputElementRef = useRef<HTMLInputElement | null>(null)\n const listBoxElementRef = useRef<HTMLUListElement | null>(null)\n // Element refs that need to be accessed during render\n const [inputElement, _setInputElement] = useState<HTMLInputElement | null>(null)\n /**\n * The startTransition wrapper here is to avoid an issue when on React 18 where this error can happen:\n * >Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\n * This doesn't happen on React 19 due to automatic batching of all state updates, the startTransition wrapper here gives a type of batching for 18 users in a way that still works with 19.\n * NOTE: The startTransition wrapper is not needed in UI v4, since the baseline there is React 19.\n */\n const setInputElement = useCallback((node: HTMLInputElement | null) => {\n startTransition(() => _setInputElement(node))\n }, [])\n\n // Value refs\n const listFocusedRef = useRef(false)\n const valueRef = useRef(value)\n const valuePropRef = useRef(valueProp)\n const popoverMouseWithinRef = useRef(false)\n\n // Forward inputElement state to inputElementRef\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n inputElementRef,\n () => inputElement,\n [inputElement],\n )\n // Forward inputElement to parent\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n forwardedRef,\n () => inputElement,\n [inputElement],\n )\n\n const listBoxId = `${id}-listbox`\n const options = Array.isArray(optionsProp) ? optionsProp : EMPTY_ARRAY\n const padding = _getArrayProp(paddingProp)\n const currentOption = useMemo(\n () => (value !== null ? options.find((o) => o.value === value) : undefined),\n [options, value],\n )\n const filteredOptions = useMemo(\n () => options.filter((option) => (query ? filterOption(query, option) : true)),\n [filterOption, options, query],\n )\n const filteredOptionsLen = filteredOptions.length\n const activeItemId = activeValue ? `${id}-option-${activeValue}` : undefined\n const expanded = (query !== null && loading) || (focused && query !== null)\n\n const handleRootBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n setTimeout(() => {\n // NOTE: This is a workaround for a bug that may happen in Chrome (clicking the scrollbar\n // closes the results in certain situations):\n // - Do not handle blur if the mouse is within the popover\n if (popoverMouseWithinRef.current) {\n return\n }\n\n const elements: HTMLElement[] = (relatedElements || []).concat(\n rootElementRef.current ? [rootElementRef.current] : [],\n resultsPopoverElementRef.current ? [resultsPopoverElementRef.current] : [],\n )\n\n let focusInside = false\n\n if (document.activeElement) {\n for (const e of elements) {\n if (e === document.activeElement || e.contains(document.activeElement)) {\n focusInside = true\n break\n }\n }\n }\n\n // oxlint-disable-next-line no-unnecessary-boolean-literal-compare\n if (focusInside === false) {\n dispatch({type: 'root/blur'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n if (onBlur) onBlur(event)\n }\n }, 0)\n },\n [onBlur, onQueryChange, relatedElements],\n )\n\n const handleRootFocus = useCallback((event: FocusEvent<HTMLDivElement>) => {\n const listBoxElement = listBoxElementRef.current\n const focusedElement = event.target instanceof HTMLElement ? event.target : null\n const listFocused = listBoxElement?.contains(focusedElement) || false\n\n if (listFocused !== listFocusedRef.current) {\n listFocusedRef.current = listFocused\n\n dispatch({type: 'root/setListFocused', listFocused})\n }\n }, [])\n\n const handleOptionSelect = useCallback(\n (v: string) => {\n dispatch({type: 'value/change', value: v})\n\n popoverMouseWithinRef.current = false\n\n if (onSelect) onSelect(v)\n\n valueRef.current = v\n\n if (onChange) onChange(v)\n if (onQueryChange) onQueryChange(null)\n\n inputElementRef.current?.focus()\n },\n [onChange, onSelect, onQueryChange],\n )\n\n const handleRootKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption = filteredOptions[(activeIndex + 1) % filteredOptionsLen]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n\n if (!filteredOptionsLen) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n const activeIndex = activeOption ? filteredOptions.indexOf(activeOption) : -1\n const nextActiveOption =\n filteredOptions[\n activeIndex === -1\n ? filteredOptionsLen - 1\n : (filteredOptionsLen + activeIndex - 1) % filteredOptionsLen\n ]\n\n if (nextActiveOption) {\n dispatch({type: 'root/setActiveValue', value: nextActiveOption.value, listFocused: true})\n }\n\n return\n }\n\n if (event.key === 'Escape') {\n dispatch({type: 'root/escape'})\n popoverMouseWithinRef.current = false\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n\n return\n }\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n const target = event.target as Node\n const listEl = listBoxElementRef.current\n\n if (\n (listEl === target || listEl?.contains(target)) &&\n !AUTOCOMPLETE_LISTBOX_IGNORE_KEYS.includes(event.key)\n ) {\n inputElementRef.current?.focus()\n\n return\n }\n },\n [activeValue, filteredOptions, filteredOptionsLen, onQueryChange],\n )\n\n const handleInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const nextQuery = event.currentTarget.value\n\n dispatch({type: 'input/change', query: nextQuery})\n\n if (onQueryChange) onQueryChange(nextQuery)\n },\n [onQueryChange],\n )\n\n const dispatchOpen = useCallback(() => {\n dispatch({\n type: 'root/open',\n query: value ? renderValue(value, currentOption) : '',\n })\n }, [currentOption, renderValue, value])\n\n const handleInputFocus = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (!focused) {\n dispatch({type: 'input/focus'})\n\n if (onFocus) onFocus(event)\n if (openOnFocus) dispatchOpen()\n }\n },\n [focused, onFocus, openOnFocus, dispatchOpen],\n )\n\n const handlePopoverMouseEnter = useCallback(() => {\n popoverMouseWithinRef.current = true\n }, [])\n\n const handlePopoverMouseLeave = useCallback(() => {\n popoverMouseWithinRef.current = false\n }, [])\n\n const handleClearButtonClick = useCallback(() => {\n dispatch({type: 'root/clear'})\n valueRef.current = ''\n if (onChange) onChange('')\n if (onQueryChange) onQueryChange(null)\n inputElementRef.current?.focus()\n }, [onChange, onQueryChange])\n\n const handleClearButtonFocus = useCallback(() => {\n dispatch({type: 'input/focus'})\n }, [])\n\n // Change the value when `value` prop changes\n useEffect(() => {\n // If `valueProp` changed\n if (valueProp !== valuePropRef.current) {\n valuePropRef.current = valueProp\n\n if (valueProp !== undefined) {\n dispatch({type: 'value/change', value: valueProp})\n valueRef.current = valueProp\n }\n\n return\n }\n\n // If `valueProp` is not equal to `value`\n if (valueProp !== valueRef.current) {\n valueRef.current = valueProp || null\n\n dispatch({type: 'value/change', value: valueProp || null})\n }\n }, [valueProp])\n\n // Reset active item when closing\n useEffect(() => {\n if (!focused && valueRef.current) {\n dispatch({type: 'root/setActiveValue', value: valueRef.current})\n }\n }, [focused])\n\n // Focus the selected item\n useEffect(() => {\n const listElement = listBoxElementRef.current\n\n if (!listElement) return\n\n const activeOption = filteredOptions.find((o) => o.value === activeValue)\n\n if (activeOption) {\n const activeIndex = filteredOptions.indexOf(activeOption)\n // oxlint-disable-next-line no-unsafe-type-assertion\n const activeItemElement = listElement.childNodes[activeIndex] as HTMLLIElement | undefined\n\n if (activeItemElement) {\n if (_hasFocus(activeItemElement)) {\n // already focused\n return\n }\n\n focusFirstDescendant(activeItemElement)\n }\n }\n }, [activeValue, filteredOptions])\n\n const clearButton = useMemo(() => {\n if (!loading && !disabled && value) {\n return {\n 'aria-label': 'Clear',\n 'onFocus': handleClearButtonFocus,\n }\n }\n\n return undefined\n }, [disabled, handleClearButtonFocus, loading, value])\n\n const openButtonBoxPadding = padding.map((v) => {\n if (v === 0) return 0\n if (v === 1) return 1\n if (v === 2) return 1\n\n return v - 2\n })\n const openButtonPadding = padding.map((v) => Math.max(v - 1, 0))\n const openButtonProps: AutocompleteOpenButtonProps = useMemo(\n () => (typeof openButton === 'object' ? openButton : EMPTY_RECORD),\n [openButton],\n )\n\n const handleOpenClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n dispatchOpen()\n\n if (openButtonProps.onClick) openButtonProps.onClick(event)\n\n _raf(() => inputElementRef.current?.focus())\n },\n [openButtonProps, dispatchOpen],\n )\n\n const openButtonNode = useMemo(\n () =>\n !disabled && !readOnly && openButton ? (\n <Box aria-hidden={expanded} padding={openButtonBoxPadding}>\n <Button\n aria-label=\"Open\"\n disabled={expanded}\n fontSize={fontSize}\n icon={ChevronDownIcon}\n mode=\"bleed\"\n padding={openButtonPadding}\n {...openButtonProps}\n onClick={handleOpenClick}\n />\n </Box>\n ) : undefined,\n [\n disabled,\n expanded,\n fontSize,\n handleOpenClick,\n openButton,\n openButtonBoxPadding,\n openButtonPadding,\n openButtonProps,\n readOnly,\n ],\n )\n\n const inputValue = useMemo(() => {\n if (query === null) {\n if (value !== null) {\n return renderValue(value, currentOption)\n }\n\n return ''\n }\n\n return query\n }, [currentOption, query, renderValue, value])\n\n const handleListBoxKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n // If the focus is currently in the list, move focus to the input element\n if (event.key === 'Tab') {\n if (listFocused) inputElementRef.current?.focus()\n }\n },\n [listFocused],\n )\n\n const content = useMemo(() => {\n if (filteredOptions.length === 0) return null\n\n return (\n <Box\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\n className={clsx(autocompleteListBox, listBox?.className)}\n tabIndex={-1}\n >\n <Stack\n as=\"ul\"\n aria-multiselectable={false}\n data-ui=\"AutoComplete__resultsList\"\n id={listBoxId}\n ref={listBoxElementRef}\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"listbox\"\n gap={1}\n >\n {filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n key={option.value}\n id={`${id}-option-${option.value}`}\n onSelect={handleOptionSelect}\n selected={active}\n value={option.value}\n >\n {cloneElement(renderOption(option), {\n disabled: loading,\n selected: active,\n tabIndex: listFocused && active ? 0 : -1,\n })}\n </AutocompleteOption>\n )\n })}\n </Stack>\n </Box>\n )\n }, [\n activeValue,\n currentOption,\n filteredOptions,\n handleOptionSelect,\n handleListBoxKeyDown,\n id,\n listBox,\n listBoxId,\n listFocused,\n loading,\n renderOption,\n ])\n\n const results = useMemo(() => {\n if (renderPopover) {\n return (\n <RenderPopover\n content={content}\n hidden={!expanded}\n inputElement={inputElement}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n resultsPopoverElementRef={resultsPopoverElementRef}\n renderPopover={renderPopover}\n />\n )\n }\n\n if (filteredOptionsLen === 0) {\n return null\n }\n\n return (\n <Popover\n arrow={false}\n constrainSize\n content={content}\n fallbackPlacements={AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS}\n matchReferenceWidth\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n open={expanded}\n overflow=\"auto\"\n placement={AUTOCOMPLETE_POPOVER_PLACEMENT}\n portal\n radius={radius}\n ref={resultsPopoverElementRef}\n referenceElement={inputElement}\n {...popover}\n />\n )\n }, [\n content,\n expanded,\n filteredOptionsLen,\n handlePopoverMouseEnter,\n handlePopoverMouseLeave,\n inputElement,\n popover,\n radius,\n renderPopover,\n ])\n\n return (\n // The handlers only observe focus and key events bubbling from the input and\n // list box, which carry the roles; the wrapper itself is not interactive.\n // oxlint-disable-next-line no-static-element-interactions\n <div\n className={autocomplete}\n data-ui=\"Autocomplete\"\n onBlur={handleRootBlur}\n onFocus={handleRootFocus}\n onKeyDown={handleRootKeyDown}\n ref={rootElementRef}\n >\n <TextInput\n {...restProps}\n aria-activedescendant={activeItemId}\n aria-autocomplete=\"list\"\n aria-expanded={expanded}\n aria-owns={listBoxId}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n border={border}\n clearButton={clearButton}\n customValidity={customValidity}\n disabled={disabled}\n fontSize={fontSize}\n icon={icon}\n iconRight={loading && <SpinnerIcon className={spinnerIcon} />}\n id={id}\n inputMode=\"search\"\n onChange={handleInputChange}\n onClear={handleClearButtonClick}\n onFocus={handleInputFocus}\n padding={padding}\n prefix={prefix}\n radius={radius}\n readOnly={readOnly}\n ref={setInputElement}\n // oxlint-disable-next-line prefer-tag-over-role, role-has-required-aria-props\n role=\"combobox\"\n spellCheck={false}\n suffix={suffix || openButtonNode}\n value={inputValue}\n />\n {results}\n </div>\n )\n}\n\nfunction RenderPopover({\n renderPopover,\n content,\n hidden,\n inputElement,\n onMouseEnter,\n onMouseLeave,\n resultsPopoverElementRef,\n}: {\n renderPopover: Exclude<AutocompleteProps['renderPopover'], undefined>\n resultsPopoverElementRef: Parameters<Exclude<AutocompleteProps['renderPopover'], undefined>>[1]\n} & Parameters<Exclude<AutocompleteProps['renderPopover'], undefined>>[0]) {\n return renderPopover(\n {\n content,\n hidden,\n inputElement,\n onMouseEnter,\n onMouseLeave,\n },\n resultsPopoverElementRef,\n )\n}\n"],"mappings":"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"}