@sanity/ui 4.0.4 → 4.0.5

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 (58) hide show
  1. package/dist/{arrow-D0mvjJMb.js → arrow-BaqZdFUX.js} +5 -5
  2. package/dist/arrow-BaqZdFUX.js.map +1 -0
  3. package/dist/autocomplete.js +7 -7
  4. package/dist/autocomplete.js.map +1 -1
  5. package/dist/breadcrumbs.js +6 -6
  6. package/dist/breadcrumbs.js.map +1 -1
  7. package/dist/{button-QO2lWHVH.js → button-DpAiERt1.js} +6 -6
  8. package/dist/button-DpAiERt1.js.map +1 -0
  9. package/dist/code.js +1 -1
  10. package/dist/code.js.map +1 -1
  11. package/dist/codeFontStyle-aWvllgWi.js.map +1 -1
  12. package/dist/element-BYgCE_iK.js.map +1 -1
  13. package/dist/factory-BA3gEfyI.js.map +1 -1
  14. package/dist/{flex-C9NHtXFi.js → flex-C6SsHFy8.js} +3 -3
  15. package/dist/flex-C6SsHFy8.js.map +1 -0
  16. package/dist/getElementRef-5HZQ-Owu.js.map +1 -1
  17. package/dist/getScopedTheme-C-sZsyAz.js.map +1 -1
  18. package/dist/getTheme_v2-y09KqtEb.js.map +1 -1
  19. package/dist/{grid-Cr7qKmZQ.js → grid-3kBnMOwF.js} +3 -3
  20. package/dist/grid-3kBnMOwF.js.map +1 -0
  21. package/dist/helpers-JV5y3U_M.js.map +1 -1
  22. package/dist/{hotkeys-DyrSy500.js → hotkeys-BYRfM-HW.js} +10 -10
  23. package/dist/hotkeys-BYRfM-HW.js.map +1 -0
  24. package/dist/index.js +57 -57
  25. package/dist/index.js.map +1 -1
  26. package/dist/{layer-DcsNupeg.js → layer-DsScTlqC.js} +3 -3
  27. package/dist/layer-DsScTlqC.js.map +1 -0
  28. package/dist/menu.js +8 -8
  29. package/dist/menu.js.map +1 -1
  30. package/dist/{popover-5fEUllFf.js → popover-C2DFbwZu.js} +6 -6
  31. package/dist/popover-C2DFbwZu.js.map +1 -0
  32. package/dist/popover.js +1 -1
  33. package/dist/refractor-CC48DwHi.js.map +1 -1
  34. package/dist/responsiveFont-BwYElGq4.js.map +1 -1
  35. package/dist/{stack-B2zXPxzb.js → stack-wyPeapSx.js} +4 -4
  36. package/dist/stack-wyPeapSx.js.map +1 -0
  37. package/dist/{textInput-CgNWWr7H.js → textInput-DW447nYT.js} +14 -14
  38. package/dist/textInput-DW447nYT.js.map +1 -0
  39. package/dist/theme.js.map +1 -1
  40. package/dist/toast.js +11 -11
  41. package/dist/toast.js.map +1 -1
  42. package/dist/tooltip.js +5 -5
  43. package/dist/tooltip.js.map +1 -1
  44. package/dist/useClickOutsideEvent-DbLUuPQ6.js.map +1 -1
  45. package/dist/useElementSize-BJvbGHq8.js.map +1 -1
  46. package/dist/{useLayer-UpfaKlm7.js → useLayer-Dhme0dcp.js} +11 -11
  47. package/dist/useLayer-Dhme0dcp.js.map +1 -0
  48. package/package.json +3 -3
  49. package/dist/arrow-D0mvjJMb.js.map +0 -1
  50. package/dist/button-QO2lWHVH.js.map +0 -1
  51. package/dist/flex-C9NHtXFi.js.map +0 -1
  52. package/dist/grid-Cr7qKmZQ.js.map +0 -1
  53. package/dist/hotkeys-DyrSy500.js.map +0 -1
  54. package/dist/layer-DcsNupeg.js.map +0 -1
  55. package/dist/popover-5fEUllFf.js.map +0 -1
  56. package/dist/stack-B2zXPxzb.js.map +0 -1
  57. package/dist/textInput-CgNWWr7H.js.map +0 -1
  58. package/dist/useLayer-UpfaKlm7.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { _ as useTheme_v2, d as createGlobalScopedContext, f as globalScope, r as isRecord } from "./useLayer-UpfaKlm7.js";
1
+ import { _ as useTheme_v2, d as createGlobalScopedContext, f as globalScope, r as isRecord } from "./useLayer-Dhme0dcp.js";
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useContext } from "react";
4
4
  import { css, styled } from "styled-components";
@@ -80,13 +80,13 @@ function compileCommands(cmds) {
80
80
  }
81
81
  const StyledArrow = /* @__PURE__ */ styled.div.withConfig({
82
82
  displayName: "StyledArrow",
83
- componentId: "sc-e0ij84-0"
83
+ componentId: "sc-4ve9v8-0"
84
84
  })(({ $w: w }) => css`position:absolute;width:${w}px;height:${w}px;:empty + &{display:none;}& > svg{display:block;line-height:0;transform-origin:${w / 2}px ${w / 2}px;}[data-placement^='top'] > &{bottom:-${w}px;& > svg{transform:rotate(0);}}[data-placement^='right'] > &{left:-${w}px;& > svg{transform:rotate(90deg);}}[data-placement^='left'] > &{right:-${w}px;& > svg{transform:rotate(-90deg);}}[data-placement^='bottom'] > &{top:-${w}px;& > svg{transform:rotate(180deg);}}`), StrokePath = styled.path.withConfig({
85
85
  displayName: "StrokePath",
86
- componentId: "sc-e0ij84-1"
86
+ componentId: "sc-4ve9v8-1"
87
87
  })`stroke:var(--card-shadow-outline-color);`, ShapePath = styled.path.withConfig({
88
88
  displayName: "ShapePath",
89
- componentId: "sc-e0ij84-2"
89
+ componentId: "sc-4ve9v8-2"
90
90
  })`fill:var(--card-bg-color);`;
91
91
  /** @internal */
92
92
  function Arrow(props) {
@@ -158,4 +158,4 @@ function Arrow(props) {
158
158
  }
159
159
  export { useBoundaryElement as a, PortalContext as i, Portal as n, BoundaryElementContext as o, usePortal as r, Arrow as t };
160
160
 
161
- //# sourceMappingURL=arrow-D0mvjJMb.js.map
161
+ //# sourceMappingURL=arrow-BaqZdFUX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrow-BaqZdFUX.js","names":["createPortal(children, portalElement)","radius = 0","compileCommands(cmds)","<mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>","<StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />","strokeWidth * 2","<ShapePath d={fillPath} />","<svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>","`0 0 ${w} ${w}`","<StyledArrow {...restProps} $w={w} ref={ref}>\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>\n </StyledArrow>"],"sources":["../src/core/utils/boundaryElement/boundaryElementContext.ts","../src/core/utils/boundaryElement/useBoundaryElement.ts","../src/core/utils/portal/portalContext.ts","../src/core/utils/portal/usePortal.ts","../src/core/utils/portal/portal.ts","../src/core/utils/arrow/cmds.ts","../src/core/utils/arrow/arrow.tsx"],"sourcesContent":["import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {BoundaryElementContextValue} from './types'\n\nexport const BoundaryElementContext = createGlobalScopedContext<BoundaryElementContextValue | null>(\n '@sanity/ui/context/boundaryElement',\n null,\n)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {BoundaryElementContext} from './boundaryElementContext'\nimport {BoundaryElementContextValue} from './types'\n\nconst DEFAULT_VALUE: BoundaryElementContextValue = {\n version: 0.0,\n element: null,\n}\n\n/**\n * @public\n */\nexport function useBoundaryElement(): BoundaryElementContextValue {\n const value = useContext(BoundaryElementContext)\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (value && (!isRecord(value) || value.version !== 0.0)) {\n throw new Error('useBoundaryElement(): the context value is not compatible')\n }\n\n return value || DEFAULT_VALUE\n}\n","import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {globalScope} from '../../lib/globalScope'\nimport {PortalContextValue} from './types'\n\nconst key = '@sanity/ui/context/portal'\nconst elementKey = Symbol.for(`${key}/element`)\n\nglobalScope[elementKey] = null\n\nconst defaultContextValue: PortalContextValue = {\n version: 0.0,\n boundaryElement: null,\n get element() {\n if (typeof document === 'undefined') {\n return null\n }\n\n if (globalScope[elementKey]) {\n return globalScope[elementKey]\n }\n\n globalScope[elementKey] = document.createElement('div')\n globalScope[elementKey].setAttribute('data-portal', '')\n\n document.body.appendChild(globalScope[elementKey])\n\n return globalScope[elementKey]\n },\n}\n\nexport const PortalContext = createGlobalScopedContext<PortalContextValue>(key, defaultContextValue)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {PortalContext} from './portalContext'\nimport {PortalContextValue} from './types'\n\n/**\n * @public\n */\nexport function usePortal(): PortalContextValue {\n const value = useContext(PortalContext)\n\n if (!value) {\n throw new Error('usePortal(): missing context value')\n }\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (!isRecord(value) || value.version !== 0.0) {\n throw new Error('usePortal(): the context value is not compatible')\n }\n\n return value\n}\n","import {createPortal} from 'react-dom'\n\nimport {usePortal} from './usePortal'\n\n/**\n * @public\n */\nexport interface PortalProps {\n children: React.ReactNode\n /**\n * @beta This API might change. DO NOT USE IN PRODUCTION.\n */\n __unstable_name?: string\n}\n\n/**\n * @public\n */\nexport function Portal(props: PortalProps): React.ReactPortal | null {\n const {children, __unstable_name: name} = props\n const portal = usePortal()\n const portalElement =\n (name ? portal.elements && portal.elements[name] : portal.element) || portal.elements?.default\n\n if (!portalElement) {\n return null\n }\n\n return createPortal(children, portalElement)\n}\n","interface PointCmd {\n type: 'point'\n x: number\n y: number\n radius?: number\n}\n\ninterface CurveCmd {\n type: 'curve'\n startControl: Point\n endControl: Point\n curveEnd: Point\n}\n\nexport type Cmd = PointCmd | CurveCmd\n\nexport interface Point {\n x: number\n y: number\n radius?: number\n}\n\nfunction moveTowardsLength(movingPoint: Point, targetPoint: Point, amount: number) {\n const width = targetPoint.x - movingPoint.x\n const height = targetPoint.y - movingPoint.y\n\n const distance = Math.sqrt(width * width + height * height)\n\n return moveTowardsFractional(movingPoint, targetPoint, Math.min(1, amount / distance))\n}\n\nfunction moveTowardsFractional(movingPoint: Point, targetPoint: Point, fraction: number): Point {\n return {\n x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction,\n }\n}\n\nexport function getRoundedCommands(points: Point[]): Cmd[] {\n const len = points.length\n\n const cmds: Cmd[] = []\n\n for (let i = 0; i < len; i += 1) {\n const point = points[i]\n const prevPoint = points[i - 1]\n const nextPoint = points[i + 1]\n\n if (prevPoint && point.radius) {\n const curveStart = moveTowardsLength(point, prevPoint, point.radius)\n const curveEnd = moveTowardsLength(point, nextPoint, point.radius)\n const startControl = moveTowardsFractional(curveStart, point, 0.5)\n const endControl = moveTowardsFractional(point, curveEnd, 0.5)\n\n cmds.push({\n type: 'point',\n ...curveStart,\n })\n\n cmds.push({\n type: 'curve',\n curveEnd,\n startControl,\n endControl,\n })\n } else {\n cmds.push({\n type: 'point',\n ...point,\n })\n }\n }\n\n return cmds\n}\n\nexport function compileCommands(cmds: Cmd[]): string {\n return cmds\n .map((n, idx) => {\n if (n.type === 'point') {\n return `${idx === 0 ? 'M' : 'L'} ${n.x} ${n.y}`\n }\n\n if (n.type === 'curve') {\n return `C ${n.startControl.x} ${n.startControl.y} ${n.endControl.x} ${n.endControl.y} ${n.curveEnd.x} ${n.curveEnd.y}`\n }\n\n return ``\n })\n .join(' ')\n}\n","import {HTMLProps} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {compileCommands, getRoundedCommands, Point} from './cmds'\n\nconst StyledArrow = styled.div<{$w: number}>(\n ({$w: w}) => css`\n position: absolute;\n width: ${w}px;\n height: ${w}px;\n\n :empty + & {\n display: none;\n }\n\n & > svg {\n display: block;\n line-height: 0;\n transform-origin: ${w / 2}px ${w / 2}px;\n }\n\n [data-placement^='top'] > & {\n bottom: -${w}px;\n\n & > svg {\n transform: rotate(0);\n }\n }\n\n [data-placement^='right'] > & {\n left: -${w}px;\n\n & > svg {\n transform: rotate(90deg);\n }\n }\n\n [data-placement^='left'] > & {\n right: -${w}px;\n\n & > svg {\n transform: rotate(-90deg);\n }\n }\n\n [data-placement^='bottom'] > & {\n top: -${w}px;\n\n & > svg {\n transform: rotate(180deg);\n }\n }\n `,\n)\n\nconst StrokePath = styled.path`\n stroke: var(--card-shadow-outline-color);\n`\n\nconst ShapePath = styled.path`\n fill: var(--card-bg-color);\n`\n\n/** @internal */\nexport function Arrow(\n props: {width: number; height: number; radius?: number} & Omit<\n HTMLProps<HTMLDivElement>,\n 'width' | 'height'\n >,\n): React.JSX.Element {\n const {width: w, height: h, radius = 0, ref, ...restProps} = props\n const {card} = useTheme_v2()\n const strokeWidth = card.shadow.outline\n\n const center = w / 2\n\n const points: Point[] = [\n {\n x: 0,\n y: 0,\n },\n {\n x: radius,\n y: 0,\n radius,\n },\n {\n x: center,\n y: h - 1,\n radius,\n },\n {\n x: w - radius,\n y: 0,\n radius,\n },\n {\n x: w,\n y: 0,\n },\n ]\n\n const cmds = getRoundedCommands(points)\n const path = compileCommands(cmds)\n\n // oxlint-disable-next-line no-unnecessary-template-expression\n const strokePath = `${path}`\n const fillPath = `${path} M ${w} -1 M 0 -1 Z`\n\n return (\n <StyledArrow {...restProps} $w={w} ref={ref}>\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>\n </StyledArrow>\n )\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { n as _getArrayProp, o as EMPTY_ARRAY, s as EMPTY_RECORD } from "./helpers-JV5y3U_M.js";
3
- import { d as focusFirstDescendant, l as _hasFocus, m as _raf, t as TextInput } from "./textInput-CgNWWr7H.js";
3
+ import { d as focusFirstDescendant, l as _hasFocus, m as _raf, t as TextInput } from "./textInput-DW447nYT.js";
4
4
  import { t as _isEnterToClickElement } from "./element-BYgCE_iK.js";
5
- import { s as Card, y as Box } from "./useLayer-UpfaKlm7.js";
6
- import { n as Text, t as Stack } from "./stack-B2zXPxzb.js";
7
- import { t as Button } from "./button-QO2lWHVH.js";
8
- import { t as Popover } from "./popover-5fEUllFf.js";
5
+ import { s as Card, y as Box } from "./useLayer-Dhme0dcp.js";
6
+ import { n as Text, t as Stack } from "./stack-wyPeapSx.js";
7
+ import { t as Button } from "./button-DpAiERt1.js";
8
+ import { t as Popover } from "./popover-C2DFbwZu.js";
9
9
  import { c } from "react/compiler-runtime";
10
10
  import { ChevronDownIcon } from "@sanity/icons/ChevronDown";
11
11
  import { SpinnerIcon } from "@sanity/icons/Spinner";
@@ -17,10 +17,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
17
17
  */
18
18
  const StyledAutocomplete = styled.div.withConfig({
19
19
  displayName: "StyledAutocomplete",
20
- componentId: "sc-gz724-0"
20
+ componentId: "sc-dc0p49-0"
21
21
  })`line-height:0;`, ListBox = styled(Box).withConfig({
22
22
  displayName: "ListBox",
23
- componentId: "sc-gz724-1"
23
+ componentId: "sc-dc0p49-1"
24
24
  })`& > ul{list-style:none;padding:0;margin:0;}`;
25
25
  function AutocompleteOption(props) {
26
26
  let $ = c(11), { children, id, onSelect, selected, value } = props, t0;
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","names":["styled","Box","StyledAutocomplete","div","ListBox","useCallback","_isEnterToClickElement","AutocompleteOptionProps","children","React","ReactNode","id","onSelect","v","selected","value","AutocompleteOption","props","$","_c","t0","setTimeout","handleClick","t1","event","key","currentTarget","handleKeyDown","t2","AutocompleteMsg","AutocompleteState","autocompleteReducer","state","msg","type","activeValue","focused","query","value","listFocused","Placement","AUTOCOMPLETE_LISTBOX_IGNORE_KEYS","AUTOCOMPLETE_POPOVER_PLACEMENT","AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS","ChevronDownIcon","SpinnerIcon","ChangeEvent","cloneElement","ElementType","FocusEvent","HTMLProps","KeyboardEvent","MouseEvent","ReactNode","Ref","startTransition","useCallback","useEffect","useImperativeHandle","useMemo","useReducer","useRef","useState","EMPTY_ARRAY","EMPTY_RECORD","_raf","_hasFocus","focusFirstDescendant","Box","BoxProps","Button","Card","Popover","PopoverProps","Stack","Text","TextInput","_getArrayProp","Radius","ListBox","StyledAutocomplete","AutocompleteOption","autocompleteReducer","AUTOCOMPLETE_LISTBOX_IGNORE_KEYS","AUTOCOMPLETE_POPOVER_FALLBACK_PLACEMENTS","AUTOCOMPLETE_POPOVER_PLACEMENT","AutocompleteOpenButtonProps","BaseAutocompleteOption","spinnerIcon","AutocompleteProps","border","customValidity","filterOption","query","option","Option","fontSize","icon","id","listBox","loading","onChange","value","onQueryChange","onSelect","openButton","openOnFocus","options","padding","popover","Omit","HTMLDivElement","prefix","radius","relatedElements","HTMLElement","renderOption","React","JSX","Element","renderPopover","props","content","hidden","inputElement","HTMLInputElement","onMouseEnter","onMouseLeave","ref","renderValue","suffix","DEFAULT_RENDER_VALUE","DEFAULT_FILTER_OPTION","toLowerCase","indexOf","Autocomplete","$","_c","disabled","filterOptionProp","forwardedRef","onBlur","onFocus","optionsProp","readOnly","renderOptionProp","restProps","t0","t1","t2","t3","t4","t5","t6","valueProp","undefined","paddingProp","t7","t8","t9","activeValue","focused","listFocused","state","dispatch","t10","t11","value_0","defaultRenderOption","rootElementRef","resultsPopoverElementRef","inputElementRef","listBoxElementRef","_setInputElement","Symbol","for","node","setInputElement","listFocusedRef","valueRef","valuePropRef","popoverMouseWithinRef","t12","t13","t14","t15","listBoxId","Array","isArray","t16","find","o","currentOption","t17","t18","filter","filteredOptions","filteredOptionsLen","length","activeItemId","expanded","event","setTimeout","current","elements","concat","focusInside","document","activeElement","e","contains","type","handleRootBlur","t19","event_0","listBoxElement","focusedElement","target","listFocused_0","handleRootFocus","t20","v","focus","handleOptionSelect","t21","event_1","key","preventDefault","activeOption","o_0","activeIndex","nextActiveOption","activeOption_0","o_1","activeIndex_0","nextActiveOption_0","Node","listEl","includes","handleRootKeyDown","t22","event_2","nextQuery","currentTarget","handleInputChange","t23","dispatchOpen","t24","event_3","handleInputFocus","t25","handlePopoverMouseEnter","t26","handlePopoverMouseLeave","t27","handleClearButtonClick","t28","handleClearButtonFocus","t29","t30","t31","t32","t33","t34","listElement","activeOption_1","o_2","activeIndex_1","activeItemElement","childNodes","HTMLLIElement","t35","bb0","t36","clearButton","openButtonBoxPadding","map","_temp","openButtonPadding","_temp2","openButtonProps","event_4","onClick","handleOpenClick","t37","openButtonNode","t38","bb1","t39","inputValue","event_5","handleListBoxKeyDown","t40","bb2","t41","t42","option_0","active","selected","tabIndex","t43","bb3","results","t44","t45","v_1","Math","max","v_0","RenderPopover","Exclude","Parameters"],"sources":["../src/core/components/autocomplete/autocomplete.styles.tsx","../src/core/components/autocomplete/autocompleteOption.tsx","../src/core/components/autocomplete/autocompleteReducer.ts","../src/core/components/autocomplete/constants.ts","../src/core/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import {styled} from 'styled-components'\n\nimport {Box} from '../../primitives/box/box'\n\n/**\n * @internal\n */\nexport const StyledAutocomplete = styled.div`\n line-height: 0;\n`\n\n/**\n * @internal\n */\nexport const ListBox = styled(Box)`\n & > ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n`\n","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 {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\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 {ListBox, StyledAutocomplete} from './autocomplete.styles'\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'\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 <ListBox\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\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 id={`${id}-option-${option.value}`}\n key={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 </ListBox>\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 <StyledAutocomplete\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 </StyledAutocomplete>\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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"}
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 <ListBox\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\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 id={`${id}-option-${option.value}`}\n key={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 </ListBox>\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 ])","filteredOptions.map((option) => {\n const active =\n activeValue !== null ? option.value === activeValue : currentOption === option\n\n return (\n <AutocompleteOption\n id={`${id}-option-${option.value}`}\n key={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 id={`${id}-option-${option.value}`}\n key={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 id={`${id}-option-${option.value}`}\n key={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>","<ListBox\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\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 id={`${id}-option-${option.value}`}\n key={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 </ListBox>","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","<StyledAutocomplete\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 </StyledAutocomplete>","v"],"sources":["../src/core/components/autocomplete/autocomplete.styles.tsx","../src/core/components/autocomplete/autocompleteOption.tsx","../src/core/components/autocomplete/autocompleteReducer.ts","../src/core/components/autocomplete/constants.ts","../src/core/components/autocomplete/autocomplete.tsx"],"sourcesContent":["import {styled} from 'styled-components'\n\nimport {Box} from '../../primitives/box/box'\n\n/**\n * @internal\n */\nexport const StyledAutocomplete = styled.div`\n line-height: 0;\n`\n\n/**\n * @internal\n */\nexport const ListBox = styled(Box)`\n & > ul {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n`\n","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 {ChevronDownIcon} from '@sanity/icons/ChevronDown'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\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 {ListBox, StyledAutocomplete} from './autocomplete.styles'\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'\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 <ListBox\n data-ui=\"AutoComplete__results\"\n onKeyDown={handleListBoxKeyDown}\n padding={1}\n {...listBox}\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 id={`${id}-option-${option.value}`}\n key={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 </ListBox>\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 <StyledAutocomplete\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 </StyledAutocomplete>\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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"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { n as _getArrayProp } from "./helpers-JV5y3U_M.js";
3
- import { y as Box } from "./useLayer-UpfaKlm7.js";
4
- import { n as Text, t as Stack } from "./stack-B2zXPxzb.js";
5
- import { t as Button } from "./button-QO2lWHVH.js";
6
- import { t as Popover } from "./popover-5fEUllFf.js";
3
+ import { y as Box } from "./useLayer-Dhme0dcp.js";
4
+ import { n as Text, t as Stack } from "./stack-wyPeapSx.js";
5
+ import { t as Button } from "./button-DpAiERt1.js";
6
+ import { t as Popover } from "./popover-C2DFbwZu.js";
7
7
  import { t as useClickOutsideEvent } from "./useClickOutsideEvent-DbLUuPQ6.js";
8
8
  import { c } from "react/compiler-runtime";
9
9
  import { Children, Fragment, isValidElement, useRef, useState } from "react";
@@ -11,10 +11,10 @@ import { styled } from "styled-components";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
  const StyledBreadcrumbs = styled.ol.withConfig({
13
13
  displayName: "StyledBreadcrumbs",
14
- componentId: "sc-s3y9xo-0"
14
+ componentId: "sc-dcv451-0"
15
15
  })`margin:0;padding:0;display:flex;list-style:none;align-items:center;white-space:nowrap;line-height:0;`, ExpandButton = styled(Button).withConfig({
16
16
  displayName: "ExpandButton",
17
- componentId: "sc-s3y9xo-1"
17
+ componentId: "sc-dcv451-1"
18
18
  })`appearance:none;margin:-4px;`;
19
19
  /**
20
20
  * @beta
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.js","names":["styled","Button","StyledBreadcrumbs","ol","ExpandButton","Children","Fragment","isValidElement","useCallback","useMemo","useRef","useState","useClickOutsideEvent","Box","Popover","Stack","Text","_getArrayProp","ExpandButton","StyledBreadcrumbs","BreadcrumbsProps","maxLength","separator","React","ReactNode","gap","space","Breadcrumbs","props","$","_c","children","ref","restProps","t0","undefined","t1","open","setOpen","expandElementRef","popoverElementRef","t2","Symbol","for","collapse","t3","expand","t4","current","t5","toArray","filter","rawItems","t6","items","useItems","t7","t8","item","itemIndex","map","len","length","beforeLength","Math","ceil","afterLength","floor","slice"],"sources":["../src/core/components/breadcrumbs/breadcrumbs.styles.ts","../src/core/components/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import {styled} from 'styled-components'\n\nimport {Button} from '../../primitives/button/button'\n\nexport const StyledBreadcrumbs = styled.ol`\n margin: 0;\n padding: 0;\n display: flex;\n list-style: none;\n align-items: center;\n white-space: nowrap;\n line-height: 0;\n`\n\nexport const ExpandButton = styled(Button)`\n appearance: none;\n margin: -4px;\n`\n","import {Children, Fragment, isValidElement, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {useClickOutsideEvent} from '../../hooks/useClickOutsideEvent'\nimport {Box} from '../../primitives/box/box'\nimport {Popover} from '../../primitives/popover/popover'\nimport {Stack} from '../../primitives/stack/stack'\nimport {Text} from '../../primitives/text/text'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {ExpandButton, StyledBreadcrumbs} from './breadcrumbs.styles'\n\n/**\n * @beta\n */\nexport interface BreadcrumbsProps {\n maxLength?: number\n separator?: React.ReactNode\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n}\n\n/**\n * @beta\n */\nexport function Breadcrumbs(\n props: BreadcrumbsProps & Omit<React.HTMLProps<HTMLOListElement>, 'as' | 'type'>,\n) {\n const {children, gap = 2, maxLength, ref, separator, ...restProps} = props\n const space = _getArrayProp(gap)\n const [open, setOpen] = useState(false)\n const expandElementRef = useRef<HTMLButtonElement | null>(null)\n const popoverElementRef = useRef<HTMLDivElement | null>(null)\n\n const collapse = useCallback(() => setOpen(false), [])\n const expand = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(collapse, () => [expandElementRef.current, popoverElementRef.current])\n\n const rawItems = useMemo(() => Children.toArray(children).filter(isValidElement), [children])\n\n const items = useItems({\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n })\n\n return (\n <StyledBreadcrumbs data-ui=\"Breadcrumbs\" {...restProps} ref={ref}>\n {items.map((item, itemIndex) => (\n // oxlint-disable-next-line no-array-index-key\n <Fragment key={itemIndex}>\n {itemIndex > 0 && (\n <Box aria-hidden as=\"li\" paddingX={space}>\n {separator || <Text muted>/</Text>}\n </Box>\n )}\n <Box as=\"li\">{item}</Box>\n </Fragment>\n ))}\n </StyledBreadcrumbs>\n )\n}\n\nfunction useItems({\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n}: {\n collapse: () => void\n expand: () => void\n expandElementRef: React.RefObject<HTMLButtonElement | null>\n maxLength: number | undefined\n open: boolean\n popoverElementRef: React.RefObject<HTMLDivElement | null>\n // oxlint-disable-next-line no-unnecessary-type-arguments\n rawItems: React.ReactElement<unknown, string | React.JSXElementConstructor<any>>[]\n space: number[]\n}) {\n const len = rawItems.length\n\n if (maxLength && len > maxLength) {\n const beforeLength = Math.ceil(maxLength / 2)\n const afterLength = Math.floor(maxLength / 2)\n\n return [\n ...rawItems.slice(0, beforeLength - 1),\n <Popover\n constrainSize\n content={\n <Stack as=\"ol\" overflow=\"auto\" padding={space} gap={space}>\n {rawItems.slice(beforeLength - 1, len - afterLength)}\n </Stack>\n }\n key=\"button\"\n open={open}\n placement=\"top\"\n portal\n ref={popoverElementRef}\n >\n <ExpandButton\n fontSize={1}\n mode=\"bleed\"\n onClick={open ? collapse : expand}\n padding={1}\n ref={expandElementRef}\n selected={open}\n text=\"…\"\n />\n </Popover>,\n ...rawItems.slice(len - afterLength),\n ]\n }\n\n return rawItems\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"breadcrumbs.js","names":["gap = 2","_getArrayProp(gap)","() => setOpen(false)","useCallback(() => setOpen(false), [])","() => setOpen(true)","useCallback(() => setOpen(true), [])","() => [expandElementRef.current, popoverElementRef.current]","Children.toArray(children).filter(isValidElement)","useMemo(() => Children.toArray(children).filter(isValidElement), [children])","{\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n }","items.map((item, itemIndex) => (\n // oxlint-disable-next-line no-array-index-key\n <Fragment key={itemIndex}>\n {itemIndex > 0 && (\n <Box aria-hidden as=\"li\" paddingX={space}>\n {separator || <Text muted>/</Text>}\n </Box>\n )}\n <Box as=\"li\">{item}</Box>\n </Fragment>\n ))","(item, itemIndex) => (\n // oxlint-disable-next-line no-array-index-key\n <Fragment key={itemIndex}>\n {itemIndex > 0 && (\n <Box aria-hidden as=\"li\" paddingX={space}>\n {separator || <Text muted>/</Text>}\n </Box>\n )}\n <Box as=\"li\">{item}</Box>\n </Fragment>\n )","<StyledBreadcrumbs data-ui=\"Breadcrumbs\" {...restProps} ref={ref}>\n {items.map((item, itemIndex) => (\n // oxlint-disable-next-line no-array-index-key\n <Fragment key={itemIndex}>\n {itemIndex > 0 && (\n <Box aria-hidden as=\"li\" paddingX={space}>\n {separator || <Text muted>/</Text>}\n </Box>\n )}\n <Box as=\"li\">{item}</Box>\n </Fragment>\n ))}\n </StyledBreadcrumbs>","{\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n}: {\n collapse: () => void\n expand: () => void\n expandElementRef: React.RefObject<HTMLButtonElement | null>\n maxLength: number | undefined\n open: boolean\n popoverElementRef: React.RefObject<HTMLDivElement | null>\n // oxlint-disable-next-line no-unnecessary-type-arguments\n rawItems: React.ReactElement<unknown, string | React.JSXElementConstructor<any>>[]\n space: number[]\n}","[\n ...rawItems.slice(0, beforeLength - 1),\n <Popover\n constrainSize\n content={\n <Stack as=\"ol\" overflow=\"auto\" padding={space} gap={space}>\n {rawItems.slice(beforeLength - 1, len - afterLength)}\n </Stack>\n }\n key=\"button\"\n open={open}\n placement=\"top\"\n portal\n ref={popoverElementRef}\n >\n <ExpandButton\n fontSize={1}\n mode=\"bleed\"\n onClick={open ? collapse : expand}\n padding={1}\n ref={expandElementRef}\n selected={open}\n text=\"…\"\n />\n </Popover>,\n ...rawItems.slice(len - afterLength),\n ]","rawItems.slice(beforeLength - 1, len - afterLength)","<Stack as=\"ol\" overflow=\"auto\" padding={space} gap={space}>\n {rawItems.slice(beforeLength - 1, len - afterLength)}\n </Stack>","<ExpandButton\n fontSize={1}\n mode=\"bleed\"\n onClick={open ? collapse : expand}\n padding={1}\n ref={expandElementRef}\n selected={open}\n text=\"…\"\n />","open ? collapse : expand","<Popover\n constrainSize\n content={\n <Stack as=\"ol\" overflow=\"auto\" padding={space} gap={space}>\n {rawItems.slice(beforeLength - 1, len - afterLength)}\n </Stack>\n }\n key=\"button\"\n open={open}\n placement=\"top\"\n portal\n ref={popoverElementRef}\n >\n <ExpandButton\n fontSize={1}\n mode=\"bleed\"\n onClick={open ? collapse : expand}\n padding={1}\n ref={expandElementRef}\n selected={open}\n text=\"…\"\n />\n </Popover>","rawItems.slice(0, beforeLength - 1)"],"sources":["../src/core/components/breadcrumbs/breadcrumbs.styles.ts","../src/core/components/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import {styled} from 'styled-components'\n\nimport {Button} from '../../primitives/button/button'\n\nexport const StyledBreadcrumbs = styled.ol`\n margin: 0;\n padding: 0;\n display: flex;\n list-style: none;\n align-items: center;\n white-space: nowrap;\n line-height: 0;\n`\n\nexport const ExpandButton = styled(Button)`\n appearance: none;\n margin: -4px;\n`\n","import {Children, Fragment, isValidElement, useCallback, useMemo, useRef, useState} from 'react'\n\nimport {useClickOutsideEvent} from '../../hooks/useClickOutsideEvent'\nimport {Box} from '../../primitives/box/box'\nimport {Popover} from '../../primitives/popover/popover'\nimport {Stack} from '../../primitives/stack/stack'\nimport {Text} from '../../primitives/text/text'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {ExpandButton, StyledBreadcrumbs} from './breadcrumbs.styles'\n\n/**\n * @beta\n */\nexport interface BreadcrumbsProps {\n maxLength?: number\n separator?: React.ReactNode\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n}\n\n/**\n * @beta\n */\nexport function Breadcrumbs(\n props: BreadcrumbsProps & Omit<React.HTMLProps<HTMLOListElement>, 'as' | 'type'>,\n) {\n const {children, gap = 2, maxLength, ref, separator, ...restProps} = props\n const space = _getArrayProp(gap)\n const [open, setOpen] = useState(false)\n const expandElementRef = useRef<HTMLButtonElement | null>(null)\n const popoverElementRef = useRef<HTMLDivElement | null>(null)\n\n const collapse = useCallback(() => setOpen(false), [])\n const expand = useCallback(() => setOpen(true), [])\n\n useClickOutsideEvent(collapse, () => [expandElementRef.current, popoverElementRef.current])\n\n const rawItems = useMemo(() => Children.toArray(children).filter(isValidElement), [children])\n\n const items = useItems({\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n })\n\n return (\n <StyledBreadcrumbs data-ui=\"Breadcrumbs\" {...restProps} ref={ref}>\n {items.map((item, itemIndex) => (\n // oxlint-disable-next-line no-array-index-key\n <Fragment key={itemIndex}>\n {itemIndex > 0 && (\n <Box aria-hidden as=\"li\" paddingX={space}>\n {separator || <Text muted>/</Text>}\n </Box>\n )}\n <Box as=\"li\">{item}</Box>\n </Fragment>\n ))}\n </StyledBreadcrumbs>\n )\n}\n\nfunction useItems({\n collapse,\n expand,\n expandElementRef,\n maxLength,\n open,\n popoverElementRef,\n rawItems,\n space,\n}: {\n collapse: () => void\n expand: () => void\n expandElementRef: React.RefObject<HTMLButtonElement | null>\n maxLength: number | undefined\n open: boolean\n popoverElementRef: React.RefObject<HTMLDivElement | null>\n // oxlint-disable-next-line no-unnecessary-type-arguments\n rawItems: React.ReactElement<unknown, string | React.JSXElementConstructor<any>>[]\n space: number[]\n}) {\n const len = rawItems.length\n\n if (maxLength && len > maxLength) {\n const beforeLength = Math.ceil(maxLength / 2)\n const afterLength = Math.floor(maxLength / 2)\n\n return [\n ...rawItems.slice(0, beforeLength - 1),\n <Popover\n constrainSize\n content={\n <Stack as=\"ol\" overflow=\"auto\" padding={space} gap={space}>\n {rawItems.slice(beforeLength - 1, len - afterLength)}\n </Stack>\n }\n key=\"button\"\n open={open}\n placement=\"top\"\n portal\n ref={popoverElementRef}\n >\n <ExpandButton\n fontSize={1}\n mode=\"bleed\"\n onClick={open ? collapse : expand}\n padding={1}\n ref={expandElementRef}\n selected={open}\n text=\"…\"\n />\n </Popover>,\n ...rawItems.slice(len - afterLength),\n ]\n }\n\n return rawItems\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { n as _getArrayProp } from "./helpers-JV5y3U_M.js";
2
2
  import { t as getTheme_v2 } from "./getTheme_v2-y09KqtEb.js";
3
- import { _ as useTheme_v2, h as _cardColorStyle, m as focusRingStyle, p as focusRingBorderStyle, v as responsiveRadiusStyle, y as Box } from "./useLayer-UpfaKlm7.js";
4
- import { t as Flex } from "./flex-C9NHtXFi.js";
5
- import { n as Text } from "./stack-B2zXPxzb.js";
3
+ import { _ as useTheme_v2, h as _cardColorStyle, m as focusRingStyle, p as focusRingBorderStyle, v as responsiveRadiusStyle, y as Box } from "./useLayer-Dhme0dcp.js";
4
+ import { t as Flex } from "./flex-C6SsHFy8.js";
5
+ import { n as Text } from "./stack-wyPeapSx.js";
6
6
  import { c } from "react/compiler-runtime";
7
7
  import { SpinnerIcon } from "@sanity/icons/Spinner";
8
8
  import { isValidElement } from "react";
@@ -76,10 +76,10 @@ function buttonColorStyles(props) {
76
76
  }
77
77
  const StyledButton = /* @__PURE__ */ styled.button.withConfig({
78
78
  displayName: "StyledButton",
79
- componentId: "sc-qd71yy-0"
79
+ componentId: "sc-gom2qw-0"
80
80
  })(responsiveRadiusStyle, buttonBaseStyles, buttonColorStyles), LoadingBox = styled.div.withConfig({
81
81
  displayName: "LoadingBox",
82
- componentId: "sc-qd71yy-1"
82
+ componentId: "sc-gom2qw-1"
83
83
  })`position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;background-color:var(--card-bg-color);border-radius:inherit;z-index:1;box-shadow:inherit;`;
84
84
  function ButtonComponent(props) {
85
85
  let $ = c(87), IconComponent, IconRightComponent, children, disabled, loading, paddingBottomProp, paddingLeftProp, paddingRightProp, paddingTopProp, paddingXProp, paddingYProp, ref, restProps, selected, t0, t1, t2, t3, t4, t5, t6, t7, t8, text, textAlign, textWeight, width;
@@ -176,4 +176,4 @@ function ButtonComponent(props) {
176
176
  const Button = ButtonComponent;
177
177
  export { Spinner as n, spinnerIcon as r, Button as t };
178
178
 
179
- //# sourceMappingURL=button-QO2lWHVH.js.map
179
+ //# sourceMappingURL=button-DpAiERt1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-DpAiERt1.js","names":["<SpinnerIcon className={spinnerIcon} />","<Text data-ui=\"Spinner\" {...props}>\n <SpinnerIcon className={spinnerIcon} />\n </Text>","fontSize = 1","justifyProp = 'center'","mode = 'default'","paddingProp = 3","radiusProp = 2","gap = 3","tone = 'default'","type = 'button'","muted = false","_getArrayProp(justifyProp)","_getArrayProp(paddingProp)","_getArrayProp(paddingXProp)","_getArrayProp(paddingYProp)","_getArrayProp(paddingTopProp)","_getArrayProp(paddingBottomProp)","_getArrayProp(paddingLeftProp)","_getArrayProp(paddingRightProp)","_getArrayProp(radiusProp)","_getArrayProp(gap)","{\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }","useMemo(\n () => ({\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingBottom, paddingLeft, paddingRight],\n )","Boolean(loading) && (\n <LoadingBox>\n <Spinner />\n </LoadingBox>\n )","(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )","button.textWeight","children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )","<StyledButton\n data-ui=\"Button\"\n {...restProps}\n $mode={mode}\n $radius={radius}\n $tone={tone}\n data-disabled={Boolean(loading || disabled)}\n data-selected={selected ? '' : undefined}\n disabled={Boolean(loading || disabled)}\n ref={ref}\n type={type}\n $width={width}\n >\n {Boolean(loading) && (\n <LoadingBox>\n <Spinner />\n </LoadingBox>\n )}\n\n {(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )}\n\n {children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )}\n </StyledButton>","Boolean(loading || disabled)","selected ? '' : undefined"],"sources":["../src/core/primitives/spinner/spinner.css.ts","../src/core/primitives/spinner/spinner.tsx","../src/core/primitives/button/styles.ts","../src/core/primitives/button/button.tsx"],"sourcesContent":["import {keyframes, style} from '@vanilla-extract/css'\n\nconst rotate = keyframes({\n from: {transform: 'rotate(0deg)'},\n to: {transform: 'rotate(360deg)'},\n})\n\nexport const spinnerIcon = style({\n animation: `${rotate} 500ms linear infinite`,\n})\n","import {SpinnerIcon} from '@sanity/icons/Spinner'\n\nimport {Text} from '../text/text'\n\nimport {spinnerIcon} from './spinner.css'\n\n/**\n * @public\n */\nexport interface SpinnerProps {\n muted?: boolean\n size?: number | number[]\n}\n\n/**\n * Indicate that something is loading for an indeterminate amount of time.\n *\n * @public\n */\nexport function Spinner(\n props: SpinnerProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'size'>,\n) {\n return (\n <Text data-ui=\"Spinner\" {...props}>\n <SpinnerIcon className={spinnerIcon} />\n </Text>\n )\n}\n","import {css} from 'styled-components'\n\nimport {CSSObject} from '../../../theme/system/css'\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_cardColorStyle} from '../../styles/card/_cardColorStyle'\nimport {focusRingBorderStyle, focusRingStyle} from '../../styles/focusRing'\nimport {ThemeProps} from '../../styles/types'\nimport {ButtonMode, ButtonTone, ButtonWidth} from '../../types/button'\n\n/**\n * @internal\n */\nexport function buttonBaseStyles(\n props: {$width?: ButtonWidth} & ThemeProps,\n): ReturnType<typeof css> {\n const {$width} = props\n const {style} = getTheme_v2(props.theme)\n\n return css`\n ${style?.button};\n\n -webkit-font-smoothing: inherit;\n appearance: none;\n display: inline-flex;\n align-items: center;\n font: inherit;\n border: 0;\n outline: none;\n user-select: none;\n text-decoration: none;\n border: 0;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n white-space: nowrap;\n text-align: left;\n position: relative;\n vertical-align: top;\n\n ${\n $width === 'fill' &&\n css`\n width: -moz-available;\n width: -webkit-fill-available;\n width: stretch;\n `\n }\n\n & > span {\n display: block;\n flex: 1;\n min-width: 0;\n border-radius: inherit;\n }\n\n &::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n `\n}\n\nfunction combineBoxShadow(...boxShadows: (string | undefined)[]): string {\n return boxShadows.filter(Boolean).join(',')\n}\n\n/**\n * @internal\n */\nexport function buttonColorStyles(\n props: {$mode: ButtonMode; $tone: ButtonTone} & ThemeProps,\n): CSSObject[] {\n const {$mode} = props\n const {button, color: baseColor, style} = getTheme_v2(props.theme)\n const shadow = props.$mode === 'ghost'\n const mode = baseColor.button[$mode] || baseColor.button.default\n const color = mode[props.$tone] || mode.default\n const border = {\n width: button.border.width,\n color: 'var(--card-border-color)',\n }\n // const defaultBoxShadow = `inset 0px -1.5px 0px ${buttonTheme.border.width}px color-mix(in srgb, var(--card-border-color) 25%, var(--card-bg-color))`\n const defaultBoxShadow = undefined\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n return [\n _cardColorStyle(baseColor, color.enabled),\n {\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'var(--card-fg-color)',\n 'boxShadow': focusRingBorderStyle(border),\n '&:disabled, &[data-disabled=\"true\"]': _cardColorStyle(baseColor, color.disabled),\n \"&:not([data-disabled='true'])\": {\n 'boxShadow': combineBoxShadow(\n focusRingBorderStyle(border),\n shadow ? defaultBoxShadow : undefined,\n ),\n '&:focus': {\n boxShadow: focusRingStyle({\n base: baseColor,\n border: {width: 2, color: baseColor.bg},\n focusRing: button.focusRing,\n }),\n },\n '&:focus:not(:focus-visible)': {\n boxShadow: combineBoxShadow(\n focusRingBorderStyle(border),\n shadow ? defaultBoxShadow : undefined,\n ),\n },\n '@media (hover: hover)': {\n '&:hover': _cardColorStyle(baseColor, color.hovered),\n '&:active': _cardColorStyle(baseColor, color.pressed),\n '&[data-hovered]': _cardColorStyle(baseColor, color.hovered),\n },\n '&[data-selected]': _cardColorStyle(baseColor, color.pressed),\n },\n },\n style?.button?.root,\n ].filter(Boolean) as CSSObject[]\n}\n","import {isValidElement, useMemo} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\n\nimport {ThemeFontWeightKey} from '../../../theme/system/font'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {responsiveRadiusStyle} from '../../styles/radius/radiusStyle'\nimport {ResponsiveRadiusStyleProps} from '../../styles/radius/types'\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {ButtonMode, ButtonTextAlign, ButtonTone, ButtonWidth} from '../../types/button'\nimport {ElementType, Props} from '../../types/component'\nimport {FlexJustify} from '../../types/flex'\nimport {Box} from '../box/box'\nimport {Flex} from '../flex/flex'\nimport {Spinner} from '../spinner/spinner'\nimport {Text} from '../text/text'\nimport {ResponsivePaddingProps, ResponsiveRadiusProps} from '../types'\nimport {buttonBaseStyles, buttonColorStyles} from './styles'\n\n/**\n * @public\n */\nexport interface ButtonOwnProps extends ResponsivePaddingProps, ResponsiveRadiusProps {\n fontSize?: number | number[]\n mode?: ButtonMode\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n // oxlint-disable-next-line no-redundant-type-constituents\n iconRight?: React.ElementType | React.ReactNode\n justify?: FlexJustify | FlexJustify[]\n /**\n * @beta Do not use in production, as this might change.\n */\n loading?: boolean\n selected?: boolean\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n gap?: number | number[]\n muted?: boolean\n text?: React.ReactNode\n textAlign?: ButtonTextAlign\n textWeight?: ThemeFontWeightKey\n tone?: ButtonTone\n type?: 'button' | 'reset' | 'submit'\n width?: ButtonWidth\n}\n\n/**\n * @public\n */\nexport type ButtonProps<E extends ElementType = 'button'> = Props<ButtonOwnProps, E>\n\nconst StyledButton = styled.button<\n {$mode: ButtonMode; $tone: ButtonTone; $width?: ButtonWidth} & ResponsiveRadiusStyleProps\n>(responsiveRadiusStyle, buttonBaseStyles, buttonColorStyles)\n\nconst LoadingBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--card-bg-color);\n border-radius: inherit;\n z-index: 1;\n box-shadow: inherit;\n`\n\nfunction ButtonComponent(\n props: ButtonOwnProps & {as?: ElementType} & Omit<\n React.HTMLProps<HTMLButtonElement>,\n 'as' | 'width'\n >,\n) {\n const {\n children,\n disabled,\n ref,\n fontSize = 1,\n icon: IconComponent,\n iconRight: IconRightComponent,\n justify: justifyProp = 'center',\n loading,\n mode = 'default',\n padding: paddingProp = 3,\n paddingX: paddingXProp,\n paddingY: paddingYProp,\n paddingTop: paddingTopProp,\n paddingBottom: paddingBottomProp,\n paddingLeft: paddingLeftProp,\n paddingRight: paddingRightProp,\n radius: radiusProp = 2,\n selected,\n gap = 3,\n text,\n textAlign,\n textWeight,\n tone = 'default',\n type = 'button',\n muted = false,\n width,\n ...restProps\n } = props\n const {button} = useTheme_v2()\n\n const justify = _getArrayProp(justifyProp)\n const padding = _getArrayProp(paddingProp)\n const paddingX = _getArrayProp(paddingXProp)\n const paddingY = _getArrayProp(paddingYProp)\n const paddingTop = _getArrayProp(paddingTopProp)\n const paddingBottom = _getArrayProp(paddingBottomProp)\n const paddingLeft = _getArrayProp(paddingLeftProp)\n const paddingRight = _getArrayProp(paddingRightProp)\n const radius = _getArrayProp(radiusProp)\n const spacing = _getArrayProp(gap)\n\n const boxProps = useMemo(\n () => ({\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingBottom, paddingLeft, paddingRight],\n )\n\n return (\n <StyledButton\n data-ui=\"Button\"\n {...restProps}\n $mode={mode}\n $radius={radius}\n $tone={tone}\n data-disabled={Boolean(loading || disabled)}\n data-selected={selected ? '' : undefined}\n disabled={Boolean(loading || disabled)}\n ref={ref}\n type={type}\n $width={width}\n >\n {Boolean(loading) && (\n <LoadingBox>\n <Spinner />\n </LoadingBox>\n )}\n\n {(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )}\n\n {children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )}\n </StyledButton>\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const Button = ButtonComponent as unknown as <E extends ElementType = 'button'>(\n props: ButtonProps<E>,\n) => React.JSX.Element\n"],"mappings":"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"}
package/dist/code.js CHANGED
@@ -52,7 +52,7 @@ function codeBaseStyle() {
52
52
  }
53
53
  const LazyRefractor = lazy(() => import("./refractor-CC48DwHi.js")), StyledCode = /* @__PURE__ */ styled.pre.withConfig({
54
54
  displayName: "StyledCode",
55
- componentId: "sc-bzkmdd-0"
55
+ componentId: "sc-8yzjqy-0"
56
56
  })(codeBaseStyle, responsiveCodeFontStyle);
57
57
  function CodeComponent(props) {
58
58
  let $ = c(23), children, language, ref, restProps, t0, weight;