@plexui/vue 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../../src/components/Select/Select.ts"],"names":[],"mappings":"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","sourcesContent":["import clsx from \"clsx\"\nimport {\n cloneVNode,\n computed,\n createCommentVNode,\n defineComponent,\n h,\n inject,\n markRaw,\n onBeforeUnmount,\n onBeforeUpdate,\n onMounted,\n provide,\n ref,\n shallowRef,\n toRaw,\n useId,\n watch,\n type Component,\n type ComponentPublicInstance,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n type ShallowRef,\n type Slots,\n type VNode,\n type VNodeChild,\n} from \"vue\"\nimport {\n PopoverAnchor as RekaPopoverAnchor,\n PopoverContent as RekaPopoverContent,\n PopoverPortal as RekaPopoverPortal,\n PopoverRoot as RekaPopoverRoot,\n injectPopoverRootContext,\n useId as useRekaId,\n} from \"reka-ui\"\nimport type { ControlSize } from \"@plexui/styles/types\"\nimport { useEscCloseStack } from \"../../composables/useEscCloseStack.js\"\nimport { preventDefaultHandler, toCssVariables, waitForAnimationFrame } from \"../../lib/helpers.js\"\nimport { Check, Info, Search } from \"../Icon/index.js\"\nimport { Input } from \"../Input/index.js\"\nimport { useDeferredPointerDownOutside } from \"../Popover/deferredPointerDownOutside.js\"\nimport { SelectControl, type DropdownIconType } from \"../SelectControl/index.js\"\nimport { Tooltip } from \"../Tooltip/index.js\"\nimport { withRadixVariableNames } from \"../Tooltip/Tooltip.js\"\nimport { composeEventHandlers, firstElementChild, mergeSlotProps } from \"../Tooltip/slot.js\"\nimport { TransitionGroup } from \"../Transition/index.js\"\nimport s from \"@plexui/styles/components/Select/Select.module.css\"\n\n// Vue port of packages/ui/src/components/Select/Select.tsx on Reka UI.\n//\n// API mapping:\n// - `value` + `update:value` (`v-model:value`): a string, or string[] with\n// `multiple`. `change` carries what React's `onChange` receives: the\n// selected option, or the selected options with `multiple`.\n// - Custom views are scoped slots, with React's component props kept as a\n// fallback: `#optionView=\"option\"` / `OptionView`, `#triggerView` /\n// `TriggerView` (receives the selected option, or `{ values, selectedAll }`\n// with `multiple`), `#trigger=\"{ open, onToggle }\"` / `trigger`, and\n// `#searchEmptyMessage` / `searchEmptyMessage`.\n// - An option's `description` and `tooltip.content` take a string, a VNode or\n// a render function (React: a ReactNode). Actions keep their `onSelect`\n// and `Icon` (a component) as in React.\n//\n// Reka keeps the popover state, positioning, the dismissable layer and the\n// focus scope. Where Reka's popover differs from Radix's, this port follows\n// Radix so the DOM and behaviour match React:\n// - The trigger is Radix's: its props are merged into the trigger (default\n// or custom) after the child's own handlers, the click toggle is skipped\n// when one called preventDefault(), it carries no `id` of Reka's and sets\n// `aria-controls` only while open (Radix 1.8.1).\n// - Open changes from Reka (dismiss, the trigger's click) are reported only\n// when the state changes, like Radix's controlled state.\n// - A primary pointer down outside dismisses on its click, as in Radix 1.8.1\n// (../Popover/deferredPointerDownOutside.ts).\n// - The content element is rendered here (Reka's `as`): Radix's custom\n// property names (`--radix-popover-*`), no `dir`, no `aria-labelledby`.\n// - React handles events of portalled content at <body>, so stopping one\n// there still runs <body>'s own listeners (the Escape stack). An action's\n// Escape key does the same here (see CustomSelectAction).\n\nexport type OptionContent = string | number | VNode | (() => VNodeChild)\n\nexport type Option<T extends string = string> = {\n value: T\n label: string\n /** Disable the option */\n disabled?: boolean\n /** Displayed as secondary text below the option `label` */\n description?: OptionContent\n tooltip?: {\n content: OptionContent\n maxWidth?: number\n }\n}\n\nexport type OptionGroup<T extends Option> = {\n label: string\n options: T[]\n optionsLimit?: {\n label: string\n limit: number\n }\n}\n\nexport type Options<T extends Option> = T[] | OptionGroup<T>[]\n\ntype CallbackWithActionId = (actionId: string) => void\ntype SearchPredicate<T extends Option> = (option: T, searchTerm: string) => boolean\n\nexport type SelectAction = {\n /** Unique ID to identify the action with */\n id: string\n /** Label display for the action */\n label: string\n /** Icon displayed to the left of the action */\n Icon?: Component\n /** Custom class applied to the action container */\n className?: string\n /** Callback invoked when the action is pressed */\n onSelect: CallbackWithActionId\n}\n\nexport type PopoverSide = \"top\" | \"bottom\"\nexport type PopoverAlign = \"start\" | \"center\" | \"end\"\nexport type CheckPosition = \"start\" | \"end\" | \"none\"\n\nexport type MultiSelectTriggerViewProps<T extends Option> = {\n values: T[]\n selectedAll: boolean\n}\n\nexport type SelectTriggerRenderProps = { open: boolean; onToggle: () => void }\n\ntype ListSize = number | \"auto\"\n\nconst selectProps = {\n /** Options or option groups. Should be a stable reference. */\n options: { type: Array as PropType<Options<Option>>, required: true as const },\n /** Selected value; an array of values with `multiple`. Bind `v-model:value`. */\n value: { type: [String, Array] as PropType<string | string[]>, required: true as const },\n /** Determines if the select should support multiple selection. @default false */\n multiple: { type: Boolean, default: false },\n /** Disables the select visually and from interactions. @default false */\n disabled: { type: Boolean, default: false },\n /** Id of the hidden input, so the select can be targeted with `for` */\n id: String,\n /** Marks the select as a required field when using native form submission */\n required: { type: Boolean, default: undefined },\n /** Creates the ability to query the value with `[name=\"${name}\"]` */\n name: String,\n /** Placeholder text for the select. @default \"Select...\" */\n placeholder: { type: String, default: \"Select...\" },\n /** Placeholder text while loading. @default \"Loading...\" */\n loadingPlaceholder: { type: String, default: \"Loading...\" },\n /** Displays loading indicator on top of button contents. @default false */\n loading: { type: Boolean, default: false },\n /** Style variant for the select trigger. @default \"outline\" */\n variant: { type: String as PropType<\"soft\" | \"outline\" | \"ghost\">, default: \"outline\" },\n /** Fully rounded pill shape for the trigger. @default false */\n pill: { type: Boolean, default: false },\n /** Size of the trigger: `3xs` 22px up to `3xl` 48px. @default \"md\" */\n size: { type: String as PropType<ControlSize>, default: \"md\" },\n /** Icon displayed in the far right of the select trigger. @default \"dropdown\" */\n dropdownIconType: { type: String as PropType<DropdownIconType>, default: \"dropdown\" },\n /** Actions to display below the options list. Memoized by length. */\n actions: Array as PropType<SelectAction[]>,\n /** Custom class applied to option containers */\n optionClassName: String,\n /** Component rendering each option (the `#optionView` slot takes precedence) */\n OptionView: [Object, Function] as PropType<Component>,\n /** Component rendering the trigger content (the `#triggerView` slot takes precedence) */\n TriggerView: [Object, Function] as PropType<Component>,\n /** Icon displayed at the start of the select trigger */\n TriggerStartIcon: [Object, Function] as PropType<Component>,\n /** Custom class applied to the select trigger */\n triggerClassName: String,\n /** Applies a negative margin using the current gutter to optically align the trigger. */\n opticallyAlign: String as PropType<\"start\" | \"end\">,\n /** Display a clear action that allows the select to be unset. @default false */\n clearable: { type: Boolean, default: false },\n /** Extends select to 100% of available width. @default true, except for the ghost variant */\n block: { type: Boolean, default: undefined },\n /** Preferred side of the trigger to render against when open. @default \"bottom\" */\n side: { type: String as PropType<PopoverSide>, default: \"bottom\" },\n /** Preferred alignment against the trigger. @default \"center\" when block, otherwise \"start\" */\n align: String as PropType<PopoverAlign>,\n /** Offset in pixels from the \"start\" or \"end\" alignment. @default 0 */\n alignOffset: Number,\n /** Collision detection of the menu. @default true */\n avoidCollisions: { type: Boolean, default: true },\n /** Width of the menu. @default \"auto\" */\n listWidth: [Number, String] as PropType<ListSize>,\n /** `min-width` of the menu, in pixels. @default the trigger width (300 when not block) */\n listMinWidth: [Number, String] as PropType<ListSize>,\n /** `max-width` of the menu, in pixels. @default \"auto\" */\n listMaxWidth: { type: [Number, String] as PropType<ListSize>, default: \"auto\" },\n /** Predicate used to filter searches */\n searchPredicate: Function as PropType<SearchPredicate<Option>>,\n /** Placeholder of the search input */\n searchPlaceholder: { type: String, default: \"\" },\n /** Accessible name of the search input, independent of the trigger label. @default \"Search options\" */\n searchAriaLabel: { type: String, default: \"Search options\" },\n /** Size of the search input in the menu, such as `2xl` for 44px touch targets on phones. @default \"md\" */\n searchSize: String as PropType<ControlSize>,\n /** Message displayed when search results are empty (or the `#searchEmptyMessage` slot) */\n searchEmptyMessage: { type: [String, Number, Object] as PropType<string | number | VNode>, default: \"No results found.\" },\n /** Position of the check indicator in the option list. @default \"start\" */\n checkPosition: { type: String as PropType<CheckPosition>, default: \"start\" },\n /** Renders a custom trigger (or the `#trigger` slot), wrapped as the popover trigger */\n trigger: Function as PropType<(props: SelectTriggerRenderProps) => VNodeChild>,\n \"ariaLabel\": String,\n \"ariaLabelledby\": String,\n \"ariaDescribedby\": String,\n \"ariaInvalid\": { type: [Boolean, String] as PropType<boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\">, default: undefined },\n}\n\ntype SelectPropsValue = {\n readonly [K in keyof typeof selectProps]: unknown\n} & {\n options: Options<Option>\n value: string | string[]\n multiple: boolean\n disabled: boolean\n id?: string\n required?: boolean\n name?: string\n placeholder: string\n loadingPlaceholder: string\n loading: boolean\n variant: \"soft\" | \"outline\" | \"ghost\"\n pill: boolean\n size: ControlSize\n dropdownIconType: DropdownIconType\n actions?: SelectAction[]\n optionClassName?: string\n OptionView?: Component\n TriggerView?: Component\n TriggerStartIcon?: Component\n triggerClassName?: string\n opticallyAlign?: \"start\" | \"end\"\n clearable: boolean\n block?: boolean\n side: PopoverSide\n align?: PopoverAlign\n alignOffset?: number\n avoidCollisions: boolean\n listWidth?: ListSize\n listMinWidth?: ListSize\n listMaxWidth: ListSize\n searchPredicate?: SearchPredicate<Option>\n searchPlaceholder: string\n searchAriaLabel: string\n searchSize?: ControlSize\n searchEmptyMessage: string | number | VNode\n checkPosition: CheckPosition\n trigger?: (props: SelectTriggerRenderProps) => VNodeChild\n ariaLabel?: string\n ariaLabelledby?: string\n ariaDescribedby?: string\n ariaInvalid?: boolean | string\n}\n\n// ============================================================\n// Contexts\n// ============================================================\n\ntype SelectContextValue = {\n props: SelectPropsValue\n slots: Slots\n /**\n * Bumped on every Select update. Slots are not reactive, so the parts that\n * render one read it to follow a slot that was added, removed or replaced.\n */\n slotsVersion: Ref<number>\n triggerId: string\n /** The default trigger's element (React looks it up by `triggerId`) */\n triggerEl: ShallowRef<HTMLElement | null>\n block: ComputedRef<boolean>\n align: ComputedRef<PopoverAlign>\n alignOffset: ComputedRef<number>\n listMinWidth: ComputedRef<ListSize | undefined>\n searchable: ComputedRef<boolean>\n actions: ShallowRef<SelectAction[]>\n onSelect: (option: Option, removeOption?: boolean) => void\n onActionSelect: CallbackWithActionId\n /** The latest predicate, read without tracking (React keeps it in a ref) */\n searchPredicate: () => SearchPredicate<Option>\n}\n\nconst SelectContextKey: InjectionKey<SelectContextValue> = Symbol(\"PlexUISelect\")\n\nconst useSelectContext = () => {\n const context = inject(SelectContextKey, null)\n\n if (!context) {\n throw new Error(\"Select components must be wrapped in <Select />\")\n }\n\n return context\n}\n\ntype CustomSelectContextValue = {\n open: Ref<boolean>\n handleOpenChange: (maybeNextState?: boolean) => void\n /** Radix's `onOpenChange` of the popover root: reports changes only */\n handleRootOpenChange: (nextState: boolean) => void\n selectContentRef: ShallowRef<HTMLElement | null>\n /** The trigger element, default or custom (React's ref on Popover.Trigger) */\n popoverTriggerEl: ShallowRef<HTMLElement | null>\n}\n\nconst CustomSelectContextKey: InjectionKey<CustomSelectContextValue> = Symbol(\"PlexUICustomSelect\")\n\n// Radix decides \"focus outside\" on the React tree, where a Select opened next\n// to another one is outside it: focus entering the second one's menu closes\n// the first. Reka decides on the DOM and counts a layer later in the document\n// as nested, so the first would stay open. Each Select records its logical\n// parent (the Select whose menu renders it) and its content element, and\n// closes when focus enters the content of a Select not nested in it.\ntype SelectLayer = {\n parent: SelectLayer | null\n content: ShallowRef<HTMLElement | null>\n}\n\nconst SelectLayerKey: InjectionKey<SelectLayer> = Symbol(\"PlexUISelectLayer\")\n\nconst mountedSelectLayers = new Set<SelectLayer>()\n\nconst isNestedIn = (layer: SelectLayer, ancestor: SelectLayer) => {\n for (let parent = layer.parent; parent; parent = parent.parent) {\n if (parent === ancestor) return true\n }\n return false\n}\n\ntype CustomSelectMenuContextValue = {\n openingValue: string\n listId: string\n requestClose: () => void\n listRef: ShallowRef<HTMLElement | null>\n // Highlighting\n highlightedValue: Ref<string>\n // Search\n searchTerm: Ref<string>\n searchInputRef: ShallowRef<HTMLInputElement | null>\n}\n\nconst CustomSelectMenuContextKey: InjectionKey<CustomSelectMenuContextValue> = Symbol(\"PlexUICustomSelectMenu\")\n\nconst useCustomSelectMenuContext = () => {\n const context = inject(CustomSelectMenuContextKey, null)\n\n if (!context) {\n throw new Error(\"CustomSelectMenu components must be wrapped in <CustomSelectMenu />\")\n }\n\n return context\n}\n\nconst renderContent = (content: unknown): VNodeChild =>\n typeof content === \"function\" ? (content as () => VNodeChild)() : (content as VNodeChild)\n\nconst defaultMultiTriggerView = ({ values, selectedAll }: MultiSelectTriggerViewProps<Option>) =>\n selectedAll\n ? \"All selected\"\n : values.length === 0\n ? // NOTE: Zero length is impossible - an empty option with `placeholder` is always returned\n \"Select...\"\n : values.length === 1\n ? values[0]!.label\n : `${values.length} selected`\n\n// ============================================================\n// Select\n// ============================================================\n\nconst SelectComponent = defineComponent({\n name: \"Select\",\n inheritAttrs: false,\n props: selectProps,\n // Untyped here: SelectProps (below) types the payloads by `multiple`, and\n // typed emits would also require each listener to take both shapes\n emits: [\"update:value\", \"change\"],\n setup(rawProps, { emit, slots }) {\n const props = rawProps as unknown as SelectPropsValue\n // Block default is dynamic, based on `variant`\n const block = computed(() => props.block ?? props.variant !== \"ghost\")\n // Align default is dynamic, based on `block`\n const align = computed<PopoverAlign>(() => props.align ?? (block.value ? \"center\" : \"start\"))\n // Flush with the trigger's edge, as the prop documents\n const alignOffset = computed(() => props.alignOffset ?? 0)\n // A menu is never narrower than the field it belongs to. Inline selects keep their 300px floor.\n const listMinWidth = computed(() => props.listMinWidth ?? (block.value ? undefined : 300))\n\n const change = (selection: Option | Option[]) => {\n emit(\"update:value\", Array.isArray(selection) ? selection.map((option) => option.value) : selection.value)\n emit(\"change\", selection)\n }\n\n const onSelect = (selectedOption: Option, removeOption?: boolean) => {\n const { multiple, options } = props\n const value = props.value as string[]\n\n if (multiple) {\n // When clearing values, the value is an empty string\n if (!selectedOption.value) {\n change([])\n return\n }\n\n if (removeOption) {\n const nextValues = value.filter((v) => v !== selectedOption.value)\n change(getOptionsByValues(options, nextValues))\n } else {\n change(getOptionsByValues(options, value).concat(selectedOption))\n }\n } else {\n change(selectedOption)\n }\n }\n\n // It should be exceedingly uncommon to change actions dynamically: like\n // React's memo, the rendered actions only follow a change of length.\n const actions = shallowRef<SelectAction[]>(props.actions ?? [])\n watch(\n () => (props.actions ?? []).length,\n () => {\n actions.value = props.actions ?? []\n },\n )\n // Action callbacks always come from the latest actions\n const onActionSelect = (actionId: string) => {\n ;(props.actions ?? []).find((a) => a.id === actionId)?.onSelect(actionId)\n }\n\n // Determine when custom selects should be used\n const optionsCount = computed(() => {\n const { options } = props\n return isOptionGroupArray(options)\n ? options.reduce((acc: number, group) => acc + group.options.length, 0)\n : options.length\n })\n\n // Locking down searchable count to a single value\n const searchable = computed(() => optionsCount.value > 15)\n\n const slotsVersion = ref(0)\n onBeforeUpdate(() => {\n slotsVersion.value++\n })\n\n provide(SelectContextKey, {\n props,\n slots,\n slotsVersion,\n triggerId: `select-trigger-${useId()}`,\n triggerEl: shallowRef(null),\n block,\n align,\n alignOffset,\n listMinWidth,\n searchable,\n actions,\n onSelect,\n onActionSelect,\n searchPredicate: () => (toRaw(rawProps) as SelectPropsValue).searchPredicate ?? defaultSearchPredicate,\n })\n\n return () => h(CustomSelect)\n },\n})\n\n// ============================================================\n// Trigger\n// ============================================================\n\nconst SelectTrigger = defineComponent({\n name: \"SelectTrigger\",\n inheritAttrs: false,\n props: {\n onOpenChange: Function as PropType<(maybeNextState?: boolean) => void>,\n },\n setup(ownProps, { attrs }) {\n const { props, slots, slotsVersion, triggerId, triggerEl, block, onSelect } = useSelectContext()\n const typeahead = createTypeahead()\n\n const setTriggerEl = (instance: unknown) => {\n triggerEl.value = ((instance as ComponentPublicInstance | null)?.$el as HTMLElement | undefined) ?? null\n }\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n const { multiple, value, options } = props\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n\n // If not a command, check for typeahead\n // NOTE: Typeahead not supported in multi-select\n if (!multiple && isTypeaheadKey(evt)) {\n const currentTypeaheadValue = typeahead(key)\n // Stop other listeners from reacting\n evt.stopPropagation()\n\n // Attempt to filter options based on the value\n // NOTE: We don't look at current highlighted value as a means to start the search\n const firstMatchingOption = getTypeaheadOption(options, currentTypeaheadValue, firstValue)\n\n if (firstMatchingOption) {\n onSelect(firstMatchingOption)\n }\n }\n }\n\n const handleClearClick = () => {\n onSelect({ value: \"\", label: \"\" })\n // Ensure open state is closed\n ownProps.onOpenChange?.(false)\n }\n\n return () => {\n void slotsVersion.value\n const { multiple, options, loading } = props\n const value = props.value\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n const placeholderValue = loading ? props.loadingPlaceholder : props.placeholder\n const hasSelectedValue = multiple ? (value as string[]).length > 0 : !!value\n const isPlaceholder = loading || !hasSelectedValue\n\n const renderTriggerView = () => {\n let viewProps: Option | MultiSelectTriggerViewProps<Option>\n\n if (multiple) {\n const currentSelectedOptions = getOptionsByValues(options, value as string[])\n const flatOptions = options.flatMap((o) => (\"options\" in o ? o.options : o))\n viewProps = {\n values: currentSelectedOptions.length ? currentSelectedOptions : [{ value: \"\", label: placeholderValue }],\n selectedAll: flatOptions.length <= (value as string[]).length,\n }\n } else {\n viewProps = getOptionByValue(options, firstValue as string) || { value: \"\", label: placeholderValue }\n }\n\n if (slots.triggerView) return slots.triggerView(viewProps)\n if (props.TriggerView) return h(props.TriggerView, viewProps)\n return multiple\n ? defaultMultiTriggerView(viewProps as MultiSelectTriggerViewProps<Option>)\n : (viewProps as Option).label\n }\n\n return h(\n SelectControl as Component,\n {\n \"ref\": setTriggerEl,\n \"id\": triggerId,\n \"aria-label\": props.ariaLabel,\n \"aria-labelledby\": props.ariaLabelledby ? `${props.ariaLabelledby} ${triggerId}-value` : undefined,\n \"aria-describedby\": props.ariaDescribedby,\n \"aria-invalid\": props.ariaInvalid,\n \"class\": props.triggerClassName,\n \"selected\": !isPlaceholder,\n \"variant\": props.variant,\n \"pill\": props.pill,\n \"block\": block.value,\n \"size\": props.size,\n \"disabled\": props.disabled,\n \"loading\": loading,\n \"StartIcon\": props.TriggerStartIcon,\n \"opticallyAlign\": props.opticallyAlign,\n \"dropdownIconType\": props.dropdownIconType,\n \"onClearClick\": props.clearable ? handleClearClick : undefined,\n \"onInteract\": ownProps.onOpenChange,\n \"onKeydown\": handleKeyDown,\n // pass along props from the popover trigger\n ...attrs,\n },\n {\n default: () => [\n props.ariaLabelledby ? h(\"span\", { id: `${triggerId}-value` }, [renderTriggerView()]) : renderTriggerView(),\n props.name || props.id\n ? // One input per selected value, so a form submits every value of a\n // multi-select; an empty one keeps `id` and `required` working\n (multiple && (value as string[]).length ? (value as string[]) : [firstValue ?? \"\"]).map((formValue, index) =>\n h(\"input\", {\n \"key\": index,\n \"id\": index === 0 ? props.id : undefined,\n \"name\": props.name,\n \"value\": formValue,\n // A disabled select is neither validated nor submitted\n \"disabled\": props.disabled,\n \"tabindex\": -1,\n \"onFocus\": () => {\n triggerEl.value?.focus()\n },\n // don't make this readOnly because that prevents the value from being required\n \"required\": props.required,\n \"class\": s.FormInput,\n \"aria-hidden\": \"true\",\n }),\n )\n : null,\n ],\n },\n )\n }\n },\n})\n\n/**\n * Radix's `Popover.Trigger asChild`: Radix's trigger props merged into the\n * child (the default trigger or a custom one), its click toggle after the\n * child's own handlers.\n */\nconst SelectPopoverTrigger = defineComponent({\n name: \"SelectPopoverTrigger\",\n setup(_props, { slots }) {\n const rootContext = injectPopoverRootContext()\n rootContext.contentId ||= useRekaId(undefined, \"reka-popover-content\")\n const { popoverTriggerEl } = inject(CustomSelectContextKey)!\n\n // React's ref on Popover.Trigger: the element the child gives its ref\n // (FloatingLabelSelect's field). Focus returns here on close, the content\n // anchors to it, and pointer-downs on it are not \"outside\".\n const setTriggerRef = (instance: unknown) => {\n popoverTriggerEl.value = resolveElement(instance)\n rootContext.triggerElement.value = popoverTriggerEl.value ?? undefined\n }\n\n const onClick = composeEventHandlers(undefined, () => rootContext.onOpenToggle())\n\n return () => {\n const child = firstElementChild(slots.default?.())\n if (!child) return null\n\n const isOpen = rootContext.open.value\n return h(RekaPopoverAnchor, { asChild: true, reference: popoverTriggerEl.value ?? undefined }, {\n default: () =>\n cloneVNode(\n mergeSlotProps(child, {\n \"type\": \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": isOpen,\n \"aria-controls\": isOpen ? rootContext.contentId : undefined,\n \"data-state\": isOpen ? \"open\" : \"closed\",\n onClick,\n }),\n { ref: setTriggerRef },\n // Keep the child's own ref\n true,\n ),\n })\n }\n },\n})\n\n// ============================================================\n// Custom Select\n// ============================================================\n\nconst CustomSelect = defineComponent({\n name: \"CustomSelect\",\n setup() {\n const { props, slots, slotsVersion, triggerEl } = useSelectContext()\n const open = ref(false)\n const selectContentRef = shallowRef<HTMLElement | null>(null)\n const popoverTriggerEl = shallowRef<HTMLElement | null>(null)\n // Not before mount: server rendering and hydration render no teleport,\n // as Radix's Portal renders nothing before mount\n const mounted = ref(false)\n\n const handleOpenChange = (maybeNextState?: boolean) => {\n // Toggle the current state when called without a specific state\n const nextState = maybeNextState === undefined ? !open.value : maybeNextState\n open.value = nextState\n\n // When we're closing, manage focus back to trigger manually\n if (!nextState) {\n // Read this now: with animations disabled the menu unmounts before the\n // timeout below runs, so selectContentRef is already null by then\n const focusWasInMenu = !!selectContentRef.value?.contains(document.activeElement)\n\n // Wait until the next tick to determine if another element has become focused\n setTimeout(() => {\n const activeElement = document.activeElement\n const menu = selectContentRef.value\n const focusInMenu = !!menu && !!activeElement && menu.contains(activeElement)\n // Focus dropped with the closing menu lands on <body>: it was lost, not moved\n const focusLost = !activeElement || activeElement === document.body\n\n // Focus that moved to another element outside the menu stays there\n if (focusInMenu || (focusWasInMenu && focusLost)) {\n popoverTriggerEl.value?.focus()\n }\n })\n }\n }\n\n useEscCloseStack(open, () => {\n handleOpenChange(false)\n })\n\n const handleRootOpenChange = (nextState: boolean) => {\n // Radix's controlled state reports changes only\n if (nextState === open.value) return\n\n // Prevent opening while loading\n if (props.loading && nextState) {\n return\n }\n\n handleOpenChange(nextState)\n }\n\n provide(CustomSelectContextKey, {\n open,\n handleOpenChange,\n handleRootOpenChange,\n selectContentRef,\n popoverTriggerEl,\n })\n\n const layer: SelectLayer = { parent: inject(SelectLayerKey, null), content: selectContentRef }\n provide(SelectLayerKey, layer)\n\n // Focus entering another Select's menu is outside this one, unless that\n // Select is nested in this one's menu (see SelectLayer)\n const handleFocusIn = (evt: FocusEvent) => {\n const target = evt.target as Node | null\n if (!open.value || !target) return\n for (const other of mountedSelectLayers) {\n if (other !== layer && other.content.value?.contains(target) && !isNestedIn(other, layer)) {\n handleRootOpenChange(false)\n return\n }\n }\n }\n\n let listenerDocument: Document | null = null\n onMounted(() => {\n mounted.value = true\n mountedSelectLayers.add(layer)\n listenerDocument = triggerEl.value?.ownerDocument ?? document\n listenerDocument.addEventListener(\"focusin\", handleFocusIn)\n })\n onBeforeUnmount(() => {\n mountedSelectLayers.delete(layer)\n listenerDocument?.removeEventListener(\"focusin\", handleFocusIn)\n listenerDocument = null\n })\n\n const renderTrigger = () => {\n const renderProps: SelectTriggerRenderProps = {\n open: open.value,\n onToggle: () => {\n open.value = !open.value\n },\n }\n if (slots.trigger) return slots.trigger(renderProps)\n if (props.trigger) return props.trigger(renderProps)\n return h(SelectTrigger, { onOpenChange: handleOpenChange })\n }\n\n return () => {\n void slotsVersion.value\n return h(\n RekaPopoverRoot,\n { \"open\": open.value, \"onUpdate:open\": handleRootOpenChange, \"modal\": false },\n {\n default: () => [\n h(SelectPopoverTrigger, null, { default: renderTrigger }),\n // React replaces the menu's wrapper when it opens or closes (see\n // TransitionGroup), so React DOM appends the new one to <body>.\n // A Teleport keeps its place in <body>: a new one per state moves\n // the wrapper to the end the same way.\n h(RekaPopoverPortal, { key: open.value ? \"open\" : \"closed\", forceMount: mounted.value }, {\n default: () => [\n h(\n TransitionGroup,\n { class: s.Menu, enterDuration: 350, exitDuration: 200, disableAnimations: true },\n { default: () => [open.value ? h(SelectPopoverContent, { key: \"dropdown\" }) : createCommentVNode()] },\n ),\n ],\n }),\n ],\n },\n )\n }\n },\n})\n\n// The element Reka's content renders (`as`). Raw: Reka passes `as` through\n// reactive props, and Vue warns about a component made reactive.\nconst SelectContentElement = markRaw(\n defineComponent({\n name: \"SelectContentElement\",\n inheritAttrs: false,\n setup(_props, { slots, attrs }) {\n const { selectContentRef } = inject(CustomSelectContextKey)!\n const setContentRef = (el: unknown) => {\n selectContentRef.value = (el as HTMLElement | null) ?? null\n }\n\n return () => {\n const { \"dir\": _dir, \"aria-labelledby\": _labelledBy, style, ...rest } = attrs\n return h(\"div\", { ...rest, style: withRadixVariableNames(style, \"popover\"), ref: setContentRef }, slots.default?.())\n }\n },\n }),\n)\n\nconst SelectPopoverContent = defineComponent({\n name: \"SelectPopoverContent\",\n setup() {\n const { props, align, alignOffset, listMinWidth } = useSelectContext()\n const { handleRootOpenChange, popoverTriggerEl } = inject(CustomSelectContextKey)!\n // Radix (1.8.1) dismisses on the click that follows a primary pointer down outside\n const { onPointerDownOutside, onFocusOutside } = useDeferredPointerDownOutside((originalEvent) => {\n // The trigger is not outside: Radix's non-modal content keeps the popover open\n if (popoverTriggerEl.value?.contains(originalEvent.target as Node | null)) return\n handleRootOpenChange(false)\n })\n\n return () =>\n h(\n RekaPopoverContent,\n {\n as: SelectContentElement,\n class: s.MenuList,\n side: props.side,\n sideOffset: 5,\n align: align.value,\n alignOffset: alignOffset.value,\n avoidCollisions: props.avoidCollisions,\n collisionPadding: { bottom: 30, top: 30 },\n // Prevent Reka's auto focus so we can handle our own from within <CustomSelectMenu />\n onOpenAutoFocus: preventDefaultHandler,\n onCloseAutoFocus: preventDefaultHandler,\n onEscapeKeyDown: preventDefaultHandler,\n onPointerDownOutside,\n onFocusOutside,\n style: toCssVariables({\n \"select-list-width\": props.listWidth,\n \"select-list-min-width\": listMinWidth.value,\n \"select-list-max-width\": props.listMaxWidth,\n }),\n },\n { default: () => h(CustomSelectMenu) },\n )\n },\n})\n\n/**\n * Focuses an element that mounted in this tick. Vue skips a listener for an\n * event stamped (`_vts`) no later than the moment the listener was attached\n * (a time cached for the tick), so a focus fired within the millisecond the\n * menu mounted would not reach the search Input's own focus listener once\n * Reka's capture listener has stamped it: its `data-focused` would stay\n * \"false\", while React's onFocus always runs. The focus events are stamped\n * one millisecond later for the listeners on their way.\n *\n * `_vts` is a private field of Vue's runtime-dom event invoker. Deferring the\n * focus instead was tried and breaks parity, because React focuses\n * synchronously in its mount effect: in the next animation frame, keys and\n * Escape pressed right after opening reach the trigger, not the menu; in a\n * 1ms timeout (a 0ms one fires within the same millisecond and is skipped\n * too), a menu opened and closed quickly takes focus after closing. Should\n * Vue drop the field, the stamp is ignored and only the search input's\n * `data-focused` is affected.\n */\nconst focusMounted = (element: HTMLElement) => {\n const view = element.ownerDocument.defaultView\n const stamp = (event: Event) => {\n const vueEvent = event as Event & { _vts?: number }\n if (event.target === element && !vueEvent._vts) vueEvent._vts = Date.now() + 1\n }\n\n view?.addEventListener(\"focus\", stamp, { capture: true })\n view?.addEventListener(\"focusin\", stamp, { capture: true })\n try {\n element.focus({ preventScroll: true })\n } finally {\n view?.removeEventListener(\"focus\", stamp, { capture: true })\n view?.removeEventListener(\"focusin\", stamp, { capture: true })\n }\n}\n\nconst CustomSelectMenu = defineComponent({\n name: \"CustomSelectMenu\",\n setup() {\n const { props, searchable, searchPredicate } = useSelectContext()\n const { handleOpenChange } = inject(CustomSelectContextKey)!\n const menuRef = shallowRef<HTMLElement | null>(null)\n const listRef = shallowRef<HTMLElement | null>(null)\n const searchInputRef = shallowRef<HTMLInputElement | null>(null)\n const searchTerm = ref(\"\")\n const multiple = props.multiple\n const value = props.value\n const highlightedValue = ref<string>(\n ((multiple ? (value as string[])[0] : (value as string)) || getFirstValidOption(props.options)?.value) ?? \"\",\n )\n const typeahead = createTypeahead()\n const listId = `select-list-${useId()}`\n\n // Lock `value` for a given open to prevent janky change during close animation\n // MultiSelect reads its live selection instead of this per-open snapshot.\n const openingValue = multiple ? \"\" : (value as string)\n\n // Trim and lowercase search value\n const literalSearchTerm = computed(() => searchTerm.value.trim().toLocaleLowerCase())\n const filteredOptions = computed(() => filterOptions(props.options, literalSearchTerm.value, searchPredicate()))\n const firstOption = computed(() => getFirstValidOption(filteredOptions.value))\n\n const requestClose = () => handleOpenChange(false)\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n const multiple = props.multiple\n const value = props.value\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n const currentHighlightedValue = highlightedValue.value\n const targetValue = currentHighlightedValue || firstOption.value?.value || firstValue\n const isFocusedInSearch = document.activeElement === searchInputRef.value\n\n const menuElement = menuRef.value\n\n // Should be generally impossible for the menu element to not exist\n if (!menuElement) {\n return\n }\n\n const triggerHighlightedOption = () => {\n const pointerUpEvent = new PointerEvent(\"pointerup\", {\n bubbles: true,\n cancelable: true,\n pointerType: \"mouse\",\n })\n\n // Find the current highlighted option\n const selectedOption = findOptionByValue(currentHighlightedValue, menuElement)\n selectedOption?.dispatchEvent(pointerUpEvent)\n }\n\n const highlightOption = (val: string, element: Element) => {\n highlightedValue.value = val\n element.scrollIntoView({ block: \"nearest\" })\n }\n\n const highlightSelectedOrFirstOption = () => {\n // Attempt to move highlight to selected item\n const maybeFirstValue = multiple ? (value as string[])[0] : (value as string)\n\n if (maybeFirstValue) {\n const selectedElement = findOptionByValue(maybeFirstValue, menuElement)\n\n if (selectedElement) {\n highlightOption(maybeFirstValue, selectedElement)\n return\n }\n }\n\n // If value isn't set, or the selected node wasn't found in the DOM,\n // attempt to move focus to the first valid option.\n const firstValidOption = getFirstValidOption(props.options)\n\n if (firstValidOption) {\n const firstValidOptionElement = findOptionByValue(firstValidOption.value, menuElement)\n if (firstValidOptionElement) {\n highlightOption(firstValidOption.value, firstValidOptionElement)\n }\n }\n }\n\n // Commands\n switch (key) {\n case \"ArrowDown\": {\n evt.preventDefault()\n\n // If there's no highlighted value, or the highlighted value is not in the DOM\n if (!currentHighlightedValue || !findOptionByValue(currentHighlightedValue, menuElement)) {\n highlightSelectedOrFirstOption()\n return\n }\n\n // Otherwise, move to the next option\n const nextElement = findNextOption(currentHighlightedValue, menuElement)\n const nextValue = nextElement?.getAttribute(\"data-option-id\")\n if (nextElement && nextValue) {\n highlightOption(nextValue, nextElement)\n }\n\n return\n }\n case \"ArrowUp\": {\n evt.preventDefault()\n\n // If there's no highlighted value, or the highlighted value is not in the DOM\n if (!currentHighlightedValue || !findOptionByValue(currentHighlightedValue, menuElement)) {\n highlightSelectedOrFirstOption()\n return\n }\n\n const previousElement = findPreviousOption(targetValue as string, menuElement)\n const previousValue = previousElement?.getAttribute(\"data-option-id\")\n if (previousElement && previousValue) {\n highlightOption(previousValue, previousElement)\n }\n\n return\n }\n case \"Enter\":\n // Prevent default enter behavior from the search input, if present\n evt.preventDefault()\n\n // Send a pointerup event into the currently highlighted option\n triggerHighlightedOption()\n\n return\n case \" \":\n // Allow spaces in search, and don't treat as enter\n // if there is a valid literalSearchTerm.\n if (literalSearchTerm.value && isFocusedInSearch) {\n return\n }\n\n // Prevent space from entering search input\n evt.preventDefault()\n\n // Send a pointerup event into the currently highlighted option\n triggerHighlightedOption()\n\n return\n default:\n break\n }\n\n // If not a command, check for typeahead\n if (isTypeaheadKey(evt)) {\n // Skip typeahead logic when we're focused in the search input\n if (isFocusedInSearch) {\n return\n }\n\n // Extend the current typeahead and get the latest value\n const currentTypeaheadValue = typeahead(key)\n\n // Stop other listeners from reacting\n evt.stopPropagation()\n\n // Attempt to filter options based on the value, starting at the highlighted value\n const firstMatchingOption = getTypeaheadOption(props.options, currentTypeaheadValue, currentHighlightedValue)\n\n if (firstMatchingOption) {\n const matchedNode = findOptionByValue(firstMatchingOption.value, menuElement)\n\n // Only change the highlight if we found the actual node\n if (matchedNode) {\n highlightedValue.value = firstMatchingOption.value\n // Ensure the newly highlighted option is scrolled into view\n matchedNode.scrollIntoView({ block: \"nearest\" })\n }\n }\n }\n }\n\n provide(CustomSelectMenuContextKey, {\n openingValue,\n listId,\n requestClose,\n listRef,\n highlightedValue,\n searchTerm,\n searchInputRef,\n })\n\n // The focused element (the search input, or the list without one) points\n // assistive tech at the highlighted option, when that option is rendered\n const syncActiveDescendant = () => {\n const target = searchInputRef.value || listRef.value\n if (!target || !menuRef.value) {\n return\n }\n\n const highlightedOption = highlightedValue.value ? findOptionByValue(highlightedValue.value, menuRef.value) : null\n if (highlightedOption?.id) {\n target.setAttribute(\"aria-activedescendant\", highlightedOption.id)\n } else {\n target.removeAttribute(\"aria-activedescendant\")\n }\n }\n watch([highlightedValue, filteredOptions], syncActiveDescendant, { flush: \"post\" })\n\n // On mount behavior\n onMounted(() => {\n syncActiveDescendant()\n\n // Like React's mount effect, the scroll target is the highlight at mount\n const initialHighlightedValue = highlightedValue.value\n\n // Ensure initial highlighted option is in view\n // NOTE: Allowing for a render frame ensures content is positioned correctly before scrolling it into view.\n waitForAnimationFrame(() => {\n if (!menuRef.value) {\n return\n }\n\n // Ensure the highlighted option is in view\n const currentOption = findOptionByValue(initialHighlightedValue, menuRef.value)\n // Scroll the selected item into view, and its bottom edge.\n currentOption?.scrollIntoView({ block: \"center\" })\n })\n\n // Send initial focus to the search input, or the list without one (the\n // menu container when there are no options), to capture key events\n const autoFocusTarget = searchInputRef.value || listRef.value || menuRef.value\n if (autoFocusTarget) focusMounted(autoFocusTarget)\n })\n\n // On search behavior (React's layout effect on `filteredOptions`, skipped on mount)\n watch(\n filteredOptions,\n (nextFilteredOptions) => {\n // Impossible while mounted, list ref will exist\n if (!listRef.value) {\n return\n }\n\n // Reset scroll position to the top\n listRef.value.scrollTop = 0\n\n // Highlight first item in the list\n const maybeFirstOption = getFirstValidOption(nextFilteredOptions)\n if (maybeFirstOption) highlightedValue.value = maybeFirstOption.value\n },\n { flush: \"post\" },\n )\n\n return () =>\n h(\n \"div\",\n {\n class: s.MenuInner,\n onKeydown: handleKeyDown,\n ref: menuRef,\n // Without search, the list takes focus (and the tab stop); the container\n // stays focusable so a click on it keeps the keys here\n tabindex: !searchable.value && filteredOptions.value.length ? -1 : 0,\n },\n [\n searchable.value\n ? h(CustomSelectSearch, {\n \"value\": searchTerm.value,\n \"hasResults\": !!filteredOptions.value.length,\n \"onUpdate:value\": (next: string) => {\n searchTerm.value = next\n },\n })\n : null,\n h(CustomSelectList, { filteredOptions: filteredOptions.value }),\n h(CustomSelectActions),\n ],\n )\n },\n})\n\nconst CustomSelectSearch = defineComponent({\n name: \"CustomSelectSearch\",\n props: {\n value: { type: String, required: true },\n /** Whether the list is rendered, for `aria-controls` */\n hasResults: { type: Boolean, required: true },\n },\n emits: {\n \"update:value\": (_value: string) => true,\n },\n setup(props, { emit }) {\n const { props: selectProps } = useSelectContext()\n const { listId, searchInputRef } = useCustomSelectMenuContext()\n const searchRef = shallowRef<HTMLElement | null>(null)\n\n // React's `ref` on Input is its <input>. Read before the menu's mount\n // focus runs (child mounted hooks run first); an exposed component ref\n // is not populated that early.\n onMounted(() => {\n searchInputRef.value = searchRef.value?.querySelector(\"input\") ?? null\n })\n onBeforeUnmount(() => {\n searchInputRef.value = null\n })\n\n return () =>\n h(\"div\", { class: s.Search, ref: searchRef }, [\n h(\n Input,\n {\n \"value\": props.value,\n \"size\": selectProps.searchSize,\n \"placeholder\": selectProps.searchPlaceholder,\n \"aria-label\": selectProps.searchAriaLabel,\n \"onUpdate:value\": (next: string) => emit(\"update:value\", next),\n // The native attribute: it reaches the <input> whether or not\n // Input forwards its `autoComplete` prop (React's Input does)\n \"autocomplete\": \"off\",\n \"autocorrect\": \"off\",\n \"spellcheck\": false,\n \"aria-autocomplete\": \"list\",\n \"role\": \"combobox\",\n // The list, while there is one: with no results it is not rendered\n \"aria-controls\": props.hasResults ? listId : undefined,\n \"aria-expanded\": true,\n },\n {\n startAdornment: () =>\n h(Search, { width: 16, height: 16, class: \"fill-secondary\", fill: \"var(--color-text-secondary)\" }),\n },\n ),\n ])\n },\n})\n\nconst isOptionGroup = <T extends Option>(mixedOption: T | OptionGroup<T>): mixedOption is OptionGroup<T> => {\n return \"options\" in mixedOption\n}\n\nconst isOptionGroupArray = <T extends Option>(arr: Options<T>): arr is OptionGroup<T>[] => {\n return !!arr[0] && isOptionGroup(arr[0])\n}\n\nconst HARD_OPTIONS_LIMIT = 300\n\nconst CustomSelectList = defineComponent({\n name: \"CustomSelectList\",\n props: {\n filteredOptions: { type: Array as PropType<Options<Option>>, required: true },\n },\n setup(props) {\n const { props: selectProps, slots, slotsVersion, triggerId, searchable } = useSelectContext()\n const { listId, listRef } = useCustomSelectMenuContext()\n const setListRef = (el: unknown) => {\n listRef.value = (el as HTMLElement | null) ?? null\n }\n\n return () => {\n void slotsVersion.value\n const { filteredOptions } = props\n\n if (!filteredOptions.length) {\n if (slots.searchEmptyMessage) {\n return h(\"div\", { class: s.SearchEmpty }, slots.searchEmptyMessage())\n }\n\n const { searchEmptyMessage } = selectProps\n return typeof searchEmptyMessage === \"string\"\n ? h(\"p\", { \"class\": s.SearchEmpty, \"data-text-only\": \"true\" }, searchEmptyMessage)\n : h(\"div\", { class: s.SearchEmpty }, [searchEmptyMessage as VNodeChild])\n }\n\n // We hard limit within groups, so at this level we will only limit flat arrays\n const isGrouped = isOptionGroupArray(filteredOptions)\n const hasHardLimit = !isGrouped && filteredOptions.length > HARD_OPTIONS_LIMIT\n\n const options = isGrouped\n ? filteredOptions.map((group) => h(CustomSelectGroup, { key: group.label, group }))\n : (filteredOptions as Option[])\n .slice(0, HARD_OPTIONS_LIMIT)\n .map((option) => h(CustomSelectOption, { key: option.value, option }))\n\n const { ariaLabel, ariaLabelledby } = selectProps\n const customTrigger = !!(slots.trigger || selectProps.trigger)\n return h(\n \"div\",\n {\n \"id\": listId,\n \"class\": s.OptionsList,\n \"ref\": setListRef,\n \"role\": \"listbox\",\n // Named like the trigger: its label, or the default trigger itself\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby ?? (ariaLabel || customTrigger ? undefined : triggerId),\n \"aria-multiselectable\": selectProps.multiple || undefined,\n // Without search, the list is the focused element\n \"tabindex\": searchable.value ? undefined : 0,\n },\n [\n ...options,\n hasHardLimit ? h(CustomSelectHardLimit, { numHidden: filteredOptions.length - HARD_OPTIONS_LIMIT }) : null,\n ],\n )\n }\n },\n})\n\nconst DEFAULT_OPTIONS_LIMIT = {\n limit: 100,\n label: \"Show all\",\n}\n\nconst CustomSelectGroup = defineComponent({\n name: \"CustomSelectGroup\",\n props: {\n group: { type: Object as PropType<OptionGroup<Option>>, required: true },\n },\n setup(props) {\n const groupId = useId()\n const headingId = useId()\n const { searchTerm, highlightedValue } = useCustomSelectMenuContext()\n const limitExpanded = ref(false)\n\n return () => {\n const { label, options, optionsLimit = DEFAULT_OPTIONS_LIMIT } = props.group\n const hasExpandableLimit = optionsLimit.limit < options.length && !searchTerm.value && !limitExpanded.value\n const hasHardLimit = HARD_OPTIONS_LIMIT < options.length && !hasExpandableLimit\n\n let maybeLimitedOptions = options\n if (hasExpandableLimit) {\n maybeLimitedOptions = options.slice(0, optionsLimit.limit)\n } else if (hasHardLimit) {\n maybeLimitedOptions = options.slice(0, HARD_OPTIONS_LIMIT)\n }\n\n const handleLimitExpanded = () => {\n // Expand options\n limitExpanded.value = true\n\n // Set highlight to the first option from the newly expanded list\n highlightedValue.value = options[optionsLimit.limit]!.value\n }\n\n // A group named by its heading. NOTE: The arrow keys walk every option in\n // document order (findNextOption), so they cross from group to group.\n return h(\"div\", { \"role\": \"group\", \"aria-labelledby\": headingId, \"class\": s.OptionGroup }, [\n // No indicator slot: the heading labels the whole section\n h(\"div\", { id: headingId, class: s.OptionGroupHeading }, label),\n ...maybeLimitedOptions.map((option) => h(CustomSelectOption, { key: option.value, option })),\n hasExpandableLimit\n ? h(CustomSelectExpandableLimit, {\n value: `group-limit-${groupId}`,\n label: optionsLimit.label,\n onPointerUp: handleLimitExpanded,\n })\n : null,\n hasHardLimit ? h(CustomSelectHardLimit, { numHidden: options.length - HARD_OPTIONS_LIMIT }) : null,\n ])\n }\n },\n})\n\nconst CustomSelectHardLimit = defineComponent({\n name: \"CustomSelectHardLimit\",\n props: {\n numHidden: { type: Number, required: true },\n },\n setup(props) {\n const { props: selectProps } = useSelectContext()\n\n return () =>\n h(\"div\", { class: s.OptionHardLimitHeading }, [\n // The note lines up with the option labels above it, so it borrows their indicator column.\n selectProps.checkPosition === \"start\" ? h(\"div\", { class: s.OptionIndicatorSlot }) : null,\n `…and ${props.numHidden.toLocaleString()} more options. Use search to refine results further.`,\n ])\n },\n})\n\nconst CustomSelectExpandableLimit = defineComponent({\n name: \"CustomSelectExpandableLimit\",\n props: {\n value: { type: String, required: true },\n label: { type: String, required: true },\n onPointerUp: { type: Function as PropType<() => void>, required: true },\n },\n setup(props) {\n const { props: selectProps } = useSelectContext()\n const { highlightedValue } = useCustomSelectMenuContext()\n const optionId = useId()\n\n const handlePointerMove = () => {\n if (props.value === highlightedValue.value) {\n return\n }\n\n highlightedValue.value = props.value\n }\n\n const handlePointerLeave = () => {\n // Clear the highlight only if it is this one\n if (highlightedValue.value === props.value) {\n highlightedValue.value = \"\"\n }\n }\n\n // This component acts a LOT like an Option, but has enough bespoke behavior\n // that it cannot literally be one.\n return () => {\n const isHighlighted = props.value === highlightedValue.value\n\n return h(\n \"div\",\n {\n \"id\": optionId,\n \"class\": clsx(s.Option, s.OptionsLimit),\n \"data-option-id\": props.value,\n \"data-highlight\": isHighlighted ? \"\" : undefined,\n // Not selectable: no aria-selected\n \"role\": \"option\",\n \"onPointerup\": props.onPointerUp,\n \"onPointermove\": handlePointerMove,\n \"onPointerleave\": handlePointerLeave,\n },\n [\n h(\"div\", { class: clsx(s.PressableInner, s.OptionInner) }, [\n // The row lines up with the option labels above it, so it borrows their indicator column.\n selectProps.checkPosition === \"start\" ? h(\"div\", { class: s.OptionIndicatorSlot }) : null,\n props.label,\n ]),\n ],\n )\n }\n },\n})\n\nconst INTERNAL_DOM_SELECTION_DATA_ATTR = \"data-option-id\"\n\nconst CustomSelectOption = defineComponent({\n name: \"CustomSelectOption\",\n props: {\n option: { type: Object as PropType<Option>, required: true },\n },\n setup(props) {\n const { props: selectProps, slots, slotsVersion, onSelect } = useSelectContext()\n const { openingValue, requestClose, highlightedValue } = useCustomSelectMenuContext()\n // Referenced by the list's aria-activedescendant while highlighted\n const optionId = useId()\n\n // NOTE: SingleSelect mode keeps the opening value instead of the live value\n // to avoid selecting the item as the select closes.\n const isSelected = () =>\n selectProps.multiple\n ? (selectProps.value as string[]).includes(props.option.value)\n : props.option.value === openingValue\n\n const handlePointerUp = () => {\n if (selectProps.multiple) {\n // Trigger the change, optionally as a remove\n onSelect(props.option, isSelected())\n } else {\n onSelect(props.option)\n // Request the dropdown to close\n requestClose()\n }\n }\n\n const handlePointerMove = () => {\n if (props.option.value === highlightedValue.value) {\n return\n }\n\n highlightedValue.value = props.option.value\n }\n\n const handlePointerLeave = () => {\n // Clear the highlight only if it is this one, removing the active highlight on the menu.\n if (highlightedValue.value === props.option.value) {\n highlightedValue.value = \"\"\n }\n }\n\n const renderOptionView = (option: Option): VNodeChild => {\n if (slots.optionView) return slots.optionView(option)\n if (selectProps.OptionView) return h(selectProps.OptionView, option)\n return option.label\n }\n\n const renderTooltip = (tooltip: NonNullable<Option[\"tooltip\"]>) => {\n const content = tooltip.content\n return typeof content === \"function\"\n ? h(Tooltip, { maxWidth: tooltip.maxWidth, side: \"right\" }, { default: () => h(Info), content })\n : h(Tooltip, { content, maxWidth: tooltip.maxWidth, side: \"right\" }, { default: () => h(Info) })\n }\n\n return () => {\n void slotsVersion.value\n const { option } = props\n const { value, disabled, tooltip } = option\n const selected = isSelected()\n const isHighlighted = value === highlightedValue.value\n const checkPosition = selectProps.checkPosition\n\n return h(\n \"div\",\n {\n \"id\": optionId,\n \"class\": clsx(s.Option, selectProps.optionClassName),\n \"data-highlight\": isHighlighted ? \"\" : undefined,\n \"role\": \"option\",\n // The selection; the highlight is the list's aria-activedescendant\n \"aria-selected\": selected,\n \"data-selected\": selected ? \"\" : undefined,\n // Internal attribute for selecting DOM nodes\n [INTERNAL_DOM_SELECTION_DATA_ATTR]: value,\n // Allow options to behave like a native select, when you can open and select an item in a single click\n \"onPointerup\": disabled ? undefined : handlePointerUp,\n // Pointer move prevents contention between keyboard presses and a still mouse\n \"onPointermove\": disabled ? undefined : handlePointerMove,\n \"onPointerleave\": disabled ? undefined : handlePointerLeave,\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : undefined,\n },\n [\n h(\"div\", { class: s.PressableInner }, [\n checkPosition === \"start\"\n ? h(\"div\", { \"class\": s.OptionIndicatorSlot, \"data-position\": \"start\" }, [\n selected ? h(Check, { class: s.OptionCheck }) : null,\n ])\n : null,\n h(\"div\", { class: s.OptionLeading }, [\n h(\"div\", { class: s.OptionInner }, [renderOptionView(option), tooltip ? renderTooltip(tooltip) : null]),\n // React's `description && ...`: a 0 (or NaN) renders as text\n option.description &&\n h(\"div\", { class: clsx(s.OptionInner, s.OptionDescription) }, [renderContent(option.description)]),\n ]),\n checkPosition === \"end\"\n ? h(\"div\", { \"class\": s.OptionIndicatorSlot, \"data-position\": \"end\" }, [\n selected ? h(Check, { class: s.OptionCheck }) : null,\n ])\n : null,\n ]),\n ],\n )\n }\n },\n})\n\nconst CustomSelectActions = defineComponent({\n name: \"CustomSelectActions\",\n setup() {\n const { actions } = useSelectContext()\n\n return () => {\n if (actions.value.length === 0) {\n return null\n }\n\n return h(\n \"div\",\n { class: s.ActionsContainer },\n actions.value.map((action) => h(CustomSelectAction, { key: action.id, action })),\n )\n }\n },\n})\n\n/**\n * React handles events of the portalled menu at <body> and stops a synthetic\n * event there: <body>'s own listeners (the Escape stack) still run, the\n * document's and window's do not. Stopping the native event here instead\n * would keep it from <body>.\n */\nconst stopAfterBody = (evt: Event) => {\n const body = (evt.currentTarget as Node | null)?.ownerDocument?.body\n if (!body) {\n evt.stopPropagation()\n return\n }\n body.addEventListener(\n evt.type,\n (event) => {\n if (event === evt) event.stopPropagation()\n },\n { once: true },\n )\n}\n\nconst CustomSelectAction = defineComponent({\n name: \"CustomSelectAction\",\n props: {\n action: { type: Object as PropType<SelectAction>, required: true },\n },\n setup(props) {\n const { onActionSelect } = useSelectContext()\n const { requestClose } = useCustomSelectMenuContext()\n\n const handlePointerUp = () => {\n // Trigger the action through the context helper, not the method on this action (it may be a stale reference)\n onActionSelect(props.action.id)\n // Request to close the dropdown\n requestClose()\n }\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n\n switch (key) {\n case \"Tab\":\n // Allow tabbing to pass propagation as normal, which bubbles up to the focus scope\n break\n case \"Enter\":\n case \" \":\n evt.stopPropagation()\n handlePointerUp()\n break\n case \"Escape\":\n // The menu's key handler ignores Escape; the Escape stack on <body> closes the menu\n stopAfterBody(evt)\n break\n default:\n evt.stopPropagation()\n }\n }\n\n return () => {\n const { label, Icon, className } = props.action\n return h(\"div\", { class: s.Action, onPointerup: handlePointerUp, onKeydown: handleKeyDown, tabindex: 0 }, [\n h(\"div\", { class: clsx(s.ActionInner, className) }, [Icon ? h(Icon, { role: \"presentation\" }) : null, label]),\n ])\n }\n },\n})\n\n// ============================================================\n// Utilities\n// ============================================================\nconst defaultSearchPredicate = (option: Option, searchTerm: string) => option.label.toLowerCase().includes(searchTerm)\n\nconst filterOptions = <T extends Option>(\n options: Options<T>,\n searchTerm: string,\n searchIterator: SearchPredicate<T>,\n): Options<T> => {\n const searchValue = searchTerm.trim().toLocaleLowerCase()\n\n if (!searchValue) {\n return options\n }\n\n const filterOption = (option: T): boolean => searchIterator(option, searchValue)\n\n if (isOptionGroupArray(options)) {\n return options.reduce((acc, group) => {\n const filtered = group.options.filter(filterOption)\n\n if (filtered.length) {\n acc.push({\n ...group,\n options: filtered,\n })\n }\n return acc\n }, [] as OptionGroup<T>[])\n } else {\n return (options as T[]).reduce((acc, option) => {\n if (filterOption(option)) acc.push(option)\n return acc\n }, [] as T[])\n }\n}\n\nconst getFirstValidOption = <T extends Option>(options: Options<T>): T | undefined => {\n if (!options.length) {\n return undefined\n }\n\n let found: T | undefined\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const firstNonDisabled = opt.options.find((i) => !i.disabled)\n if (firstNonDisabled) {\n found = firstNonDisabled\n break\n }\n } else {\n if (!opt.disabled) {\n found = opt\n break\n }\n }\n }\n\n return found\n}\n\nconst getOptionByValue = <T extends Option>(options: Options<T>, value: string): T | undefined => {\n let found: T | undefined\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const exists = opt.options.find((i) => i.value === value)\n if (exists) {\n found = exists\n break\n }\n } else {\n if (opt.value === value) {\n found = opt\n break\n }\n }\n }\n\n return found\n}\n\nconst getOptionsByValues = <T extends Option>(options: Options<T>, values: string[]): T[] => {\n let found: T[] = []\n const lookup = new Set(values)\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const exists = opt.options.filter((i) => lookup.has(i.value))\n found = found.concat(exists)\n } else {\n if (lookup.has(opt.value)) {\n found.push(opt)\n }\n }\n }\n\n return found\n}\n\nconst MAX_DOM_CRAWLS = 40\n\nconst findOptionByValue = (currentValue: string, container: HTMLElement) =>\n container.querySelector(`[data-option-id=\"${CSS.escape(currentValue)}\"]`)\n\nconst isValidOptionNode = (node: Element) => node.matches(\"[data-option-id]:not([data-disabled])\")\n\n// Steps from the current option to the nearest enabled one, one option row at a\n// time in document order: across groups (siblings would stop at a group's\n// edge), skipping disabled rows, at most MAX_DOM_CRAWLS rows away\nconst findAdjacentOption = (currentValue: string, container: HTMLElement, step: 1 | -1) => {\n const currentOption = findOptionByValue(currentValue, container)\n const rows = Array.from(container.querySelectorAll(\"[data-option-id]\"))\n\n let index = currentOption ? rows.indexOf(currentOption) : -1\n if (index === -1) {\n return undefined\n }\n\n for (let maxSteps = 0; maxSteps < MAX_DOM_CRAWLS; maxSteps += 1) {\n index += step\n const nextNode = rows[index]\n\n if (!nextNode) {\n return undefined\n }\n\n if (isValidOptionNode(nextNode)) {\n return nextNode\n }\n }\n}\n\nconst findNextOption = (currentValue: string, container: HTMLElement) =>\n findAdjacentOption(currentValue, container, 1)\n\nconst findPreviousOption = (currentValue: string, container: HTMLElement) =>\n findAdjacentOption(currentValue, container, -1)\n\nconst createTypeahead = () => {\n let currentValue: string = \"\"\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n return (char: string) => {\n // Searching is case-insensitive\n char = char.toLowerCase()\n\n // Add the new character to the current value\n currentValue += char\n\n // Clear the previous timeout if there was one\n if (timeoutId) clearTimeout(timeoutId)\n\n // Reset the value after a brief delay\n timeoutId = setTimeout(() => {\n currentValue = \"\"\n }, 500)\n\n // When a user is typing the same value, like \"llll\", assume they are cycling through items starting with \"l\"\n const isCycling = char.repeat(currentValue.length) === currentValue\n\n // Return the typeahead value\n return isCycling ? char : currentValue\n }\n}\n\nconst isValidTypeaheadChar = (char: string): boolean => /^[a-zA-Z0-9]$/.test(char)\n\n// A shortcut (Ctrl+C, Cmd+A, Alt+letter) or a key another handler took is not typeahead\nconst isTypeaheadKey = (evt: KeyboardEvent): boolean =>\n isValidTypeaheadChar(evt.key) && !evt.ctrlKey && !evt.metaKey && !evt.altKey && !evt.defaultPrevented\n\nconst resolveElement = (instance: unknown): HTMLElement | null => {\n const node = instance && typeof instance === \"object\" && \"$el\" in instance ? (instance as { $el: unknown }).$el : instance\n // A multi-root component's $el is the text node opening its fragment; the\n // element follows it (as in Reka)\n const element = node instanceof Text ? node.nextElementSibling : node\n return element instanceof HTMLElement ? element : null\n}\n\nconst getTypeaheadOption = <T extends Option>(\n options: Options<T>,\n typeaheadValue: string,\n currentHighlightValue?: string,\n): T | undefined => {\n // Ensure options actually exist\n if (!options.length) {\n return undefined\n }\n\n let matchBeforeHighlight: T | undefined\n // If we aren't provided a highlighted value, start from the top (e.g., act like it's found)\n let foundHighlightedValue: boolean = !currentHighlightValue\n\n const optionValidAndMatches = ({ disabled, label, value }: T) => {\n // Side effect of looping\n if (value === currentHighlightValue) {\n foundHighlightedValue = true\n // Don't return highlighted value\n return false\n }\n\n return !disabled && label.toLowerCase().startsWith(typeaheadValue)\n }\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n for (const option of opt.options) {\n if (optionValidAndMatches(option)) {\n if (foundHighlightedValue) {\n // We're done after we've found an after match, in any group\n return option\n } else {\n // Keep the first found \"before\" match\n matchBeforeHighlight = matchBeforeHighlight || option\n }\n }\n }\n } else {\n if (optionValidAndMatches(opt)) {\n if (foundHighlightedValue) {\n // We're done after we've found an after match\n return opt\n } else {\n // Keep the first found \"before\" match\n matchBeforeHighlight = matchBeforeHighlight || opt\n }\n }\n }\n }\n\n return matchBeforeHighlight\n}\n\ntype SelectOwnProps = InstanceType<typeof SelectComponent>[\"$props\"]\n\ntype SingleSelectProps = {\n /** Determines if the select should support multiple selection. @default false */\n multiple?: false\n /** Selected value. Bind `v-model:value`. */\n value: string\n onChange?: (option: Option) => void\n \"onUpdate:value\"?: (value: string) => void\n}\n\ntype MultiSelectProps = {\n /** Determines if the select should support multiple selection. @default false */\n multiple: true\n /** Selected values. Bind `v-model:value`. */\n value: string[]\n onChange?: (options: Option[]) => void\n \"onUpdate:value\"?: (value: string[]) => void\n}\n\n/** As in React, `multiple` decides the type of `value` and of the `change` and `update:value` payloads. */\nexport type SelectProps = Omit<SelectOwnProps, \"multiple\" | \"value\" | \"onChange\" | \"onUpdate:value\"> &\n (SingleSelectProps | MultiSelectProps)\n\n/**\n * Select dropdown with option groups, descriptions, search (over 15\n * options), multiple selection and actions. Bind `v-model:value`.\n */\nexport const Select = SelectComponent as typeof SelectComponent & { new (): { $props: SelectProps } }\n"]}
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../../src/components/Select/Select.ts"],"names":[],"mappings":"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","sourcesContent":["import clsx from \"clsx\"\nimport {\n cloneVNode,\n computed,\n createCommentVNode,\n defineComponent,\n h,\n inject,\n markRaw,\n onBeforeUnmount,\n onBeforeUpdate,\n onMounted,\n provide,\n ref,\n shallowRef,\n toRaw,\n useId,\n watch,\n type Component,\n type ComponentPublicInstance,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n type ShallowRef,\n type Slots,\n type VNode,\n type VNodeChild,\n} from \"vue\"\nimport {\n PopoverAnchor as RekaPopoverAnchor,\n PopoverContent as RekaPopoverContent,\n PopoverPortal as RekaPopoverPortal,\n PopoverRoot as RekaPopoverRoot,\n injectPopoverRootContext,\n useId as useRekaId,\n} from \"reka-ui\"\nimport type { ControlSize } from \"@plexui/styles/types\"\nimport { useEscCloseStack } from \"../../composables/useEscCloseStack.js\"\nimport { preventDefaultHandler, toCssVariables, waitForAnimationFrame } from \"../../lib/helpers.js\"\nimport { Check, Info, Search } from \"../Icon/index.js\"\nimport { Input } from \"../Input/index.js\"\nimport { useDeferredPointerDownOutside } from \"../Popover/deferredPointerDownOutside.js\"\nimport { SelectControl, type DropdownIconType } from \"../SelectControl/index.js\"\nimport { Tooltip } from \"../Tooltip/index.js\"\nimport { withRadixVariableNames } from \"../Tooltip/Tooltip.js\"\nimport { composeEventHandlers, firstElementChild, mergeSlotProps } from \"../Tooltip/slot.js\"\nimport { TransitionGroup } from \"../Transition/index.js\"\nimport s from \"@plexui/styles/components/Select/Select.module.css\"\n\n// Vue port of packages/ui/src/components/Select/Select.tsx on Reka UI.\n//\n// API mapping:\n// - `value` + `update:value` (`v-model:value`): a string, or string[] with\n// `multiple`. `change` carries what React's `onChange` receives: the\n// selected option, or the selected options with `multiple`.\n// - Custom views are scoped slots, with React's component props kept as a\n// fallback: `#optionView=\"option\"` / `OptionView`, `#triggerView` /\n// `TriggerView` (receives the selected option, or `{ values, selectedAll }`\n// with `multiple`), `#trigger=\"{ open, onToggle }\"` / `trigger`, and\n// `#searchEmptyMessage` / `searchEmptyMessage`.\n// - An option's `description` and `tooltip.content` take a string, a VNode or\n// a render function (React: a ReactNode). Actions keep their `onSelect`\n// and `Icon` (a component) as in React.\n//\n// Reka keeps the popover state, positioning, the dismissable layer and the\n// focus scope. Where Reka's popover differs from Radix's, this port follows\n// Radix so the DOM and behaviour match React:\n// - The trigger is Radix's: its props are merged into the trigger (default\n// or custom) after the child's own handlers, the click toggle is skipped\n// when one called preventDefault(), it carries no `id` of Reka's and sets\n// `aria-controls` only while open (Radix 1.8.1).\n// - Open changes from Reka (dismiss, the trigger's click) are reported only\n// when the state changes, like Radix's controlled state.\n// - A primary pointer down outside dismisses on its click, as in Radix 1.8.1\n// (../Popover/deferredPointerDownOutside.ts).\n// - The content element is rendered here (Reka's `as`): Radix's custom\n// property names (`--radix-popover-*`), no `dir`, no `aria-labelledby`.\n// - React handles events of portalled content at <body>, so stopping one\n// there still runs <body>'s own listeners (the Escape stack). An action's\n// Escape key does the same here (see CustomSelectAction).\n\nexport type OptionContent = string | number | VNode | (() => VNodeChild)\n\nexport type Option<T extends string = string> = {\n value: T\n label: string\n /** Disable the option */\n disabled?: boolean\n /** Displayed as secondary text below the option `label` */\n description?: OptionContent\n tooltip?: {\n content: OptionContent\n maxWidth?: number\n }\n}\n\nexport type OptionGroup<T extends Option> = {\n label: string\n options: T[]\n optionsLimit?: {\n label: string\n limit: number\n }\n}\n\nexport type Options<T extends Option> = T[] | OptionGroup<T>[]\n\ntype CallbackWithActionId = (actionId: string) => void\ntype SearchPredicate<T extends Option> = (option: T, searchTerm: string) => boolean\n\nexport type SelectAction = {\n /** Unique ID to identify the action with */\n id: string\n /** Label display for the action */\n label: string\n /** Icon displayed to the left of the action */\n Icon?: Component\n /** Custom class applied to the action container */\n className?: string\n /** Callback invoked when the action is pressed */\n onSelect: CallbackWithActionId\n}\n\nexport type PopoverSide = \"top\" | \"bottom\"\nexport type PopoverAlign = \"start\" | \"center\" | \"end\"\nexport type CheckPosition = \"start\" | \"end\" | \"none\"\n\nexport type MultiSelectTriggerViewProps<T extends Option> = {\n values: T[]\n selectedAll: boolean\n}\n\nexport type SelectTriggerRenderProps = { open: boolean; onToggle: () => void }\n\ntype ListSize = number | \"auto\"\n\nconst selectProps = {\n /** Options or option groups. Should be a stable reference. */\n options: { type: Array as PropType<Options<Option>>, required: true as const },\n /** Selected value; an array of values with `multiple`. Bind `v-model:value`. */\n value: { type: [String, Array] as PropType<string | string[]>, required: true as const },\n /** Determines if the select should support multiple selection. @default false */\n multiple: { type: Boolean, default: false },\n /** Disables the select visually and from interactions. @default false */\n disabled: { type: Boolean, default: false },\n /** Id of the hidden input, so the select can be targeted with `for` */\n id: String,\n /** Marks the select as a required field when using native form submission */\n required: { type: Boolean, default: undefined },\n /** Creates the ability to query the value with `[name=\"${name}\"]` */\n name: String,\n /** Placeholder text for the select. @default \"Select...\" */\n placeholder: { type: String, default: \"Select...\" },\n /** Placeholder text while loading. @default \"Loading...\" */\n loadingPlaceholder: { type: String, default: \"Loading...\" },\n /** Displays loading indicator on top of button contents. @default false */\n loading: { type: Boolean, default: false },\n /** Style variant for the select trigger. @default \"outline\" */\n variant: { type: String as PropType<\"soft\" | \"outline\" | \"ghost\">, default: \"outline\" },\n /** Fully rounded pill shape for the trigger. @default false */\n pill: { type: Boolean, default: false },\n /** Size of the trigger: `3xs` 22px up to `3xl` 48px. @default \"md\" */\n size: { type: String as PropType<ControlSize>, default: \"md\" },\n /** Icon displayed in the far right of the select trigger. @default \"dropdown\" */\n dropdownIconType: { type: String as PropType<DropdownIconType>, default: \"dropdown\" },\n /** Actions to display below the options list. Memoized by length. */\n actions: Array as PropType<SelectAction[]>,\n /** Custom class applied to option containers */\n optionClassName: String,\n /** Component rendering each option (the `#optionView` slot takes precedence) */\n OptionView: [Object, Function] as PropType<Component>,\n /** Component rendering the trigger content (the `#triggerView` slot takes precedence) */\n TriggerView: [Object, Function] as PropType<Component>,\n /** Icon displayed at the start of the select trigger */\n TriggerStartIcon: [Object, Function] as PropType<Component>,\n /** Custom class applied to the select trigger */\n triggerClassName: String,\n /** Applies a negative margin using the current gutter to optically align the trigger. */\n opticallyAlign: String as PropType<\"start\" | \"end\">,\n /** Display a clear action that allows the select to be unset. @default false */\n clearable: { type: Boolean, default: false },\n /** Extends select to 100% of available width. @default true, except for the ghost variant */\n block: { type: Boolean, default: undefined },\n /** Preferred side of the trigger to render against when open. @default \"bottom\" */\n side: { type: String as PropType<PopoverSide>, default: \"bottom\" },\n /** Preferred alignment against the trigger. @default \"center\" when block, otherwise \"start\" */\n align: String as PropType<PopoverAlign>,\n /** Offset in pixels from the \"start\" or \"end\" alignment. @default 0 */\n alignOffset: Number,\n /** Collision detection of the menu. @default true */\n avoidCollisions: { type: Boolean, default: true },\n /** Width of the menu. @default \"auto\" */\n listWidth: [Number, String] as PropType<ListSize>,\n /** `min-width` of the menu, in pixels. @default the trigger width (300 when not block) */\n listMinWidth: [Number, String] as PropType<ListSize>,\n /** `max-width` of the menu, in pixels. @default \"auto\" */\n listMaxWidth: { type: [Number, String] as PropType<ListSize>, default: \"auto\" },\n /** Predicate used to filter searches */\n searchPredicate: Function as PropType<SearchPredicate<Option>>,\n /** Placeholder of the search input */\n searchPlaceholder: { type: String, default: \"\" },\n /** Accessible name of the search input, independent of the trigger label. @default \"Search options\" */\n searchAriaLabel: { type: String, default: \"Search options\" },\n /** Size of the search input in the menu, such as `2xl` for 44px touch targets on phones. @default \"md\" */\n searchSize: String as PropType<ControlSize>,\n /** Message displayed when search results are empty (or the `#searchEmptyMessage` slot) */\n searchEmptyMessage: { type: [String, Number, Object] as PropType<string | number | VNode>, default: \"No results found.\" },\n /** Position of the check indicator in the option list. @default \"start\" */\n checkPosition: { type: String as PropType<CheckPosition>, default: \"start\" },\n /** Renders a custom trigger (or the `#trigger` slot), wrapped as the popover trigger */\n trigger: Function as PropType<(props: SelectTriggerRenderProps) => VNodeChild>,\n \"ariaLabel\": String,\n \"ariaLabelledby\": String,\n \"ariaDescribedby\": String,\n \"ariaInvalid\": { type: [Boolean, String] as PropType<boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\">, default: undefined },\n}\n\ntype SelectPropsValue = {\n readonly [K in keyof typeof selectProps]: unknown\n} & {\n options: Options<Option>\n value: string | string[]\n multiple: boolean\n disabled: boolean\n id?: string\n required?: boolean\n name?: string\n placeholder: string\n loadingPlaceholder: string\n loading: boolean\n variant: \"soft\" | \"outline\" | \"ghost\"\n pill: boolean\n size: ControlSize\n dropdownIconType: DropdownIconType\n actions?: SelectAction[]\n optionClassName?: string\n OptionView?: Component\n TriggerView?: Component\n TriggerStartIcon?: Component\n triggerClassName?: string\n opticallyAlign?: \"start\" | \"end\"\n clearable: boolean\n block?: boolean\n side: PopoverSide\n align?: PopoverAlign\n alignOffset?: number\n avoidCollisions: boolean\n listWidth?: ListSize\n listMinWidth?: ListSize\n listMaxWidth: ListSize\n searchPredicate?: SearchPredicate<Option>\n searchPlaceholder: string\n searchAriaLabel: string\n searchSize?: ControlSize\n searchEmptyMessage: string | number | VNode\n checkPosition: CheckPosition\n trigger?: (props: SelectTriggerRenderProps) => VNodeChild\n ariaLabel?: string\n ariaLabelledby?: string\n ariaDescribedby?: string\n ariaInvalid?: boolean | string\n}\n\n// ============================================================\n// Contexts\n// ============================================================\n\ntype SelectContextValue = {\n props: SelectPropsValue\n slots: Slots\n /**\n * Bumped on every Select update. Slots are not reactive, so the parts that\n * render one read it to follow a slot that was added, removed or replaced.\n */\n slotsVersion: Ref<number>\n triggerId: string\n /** The default trigger's element (React looks it up by `triggerId`) */\n triggerEl: ShallowRef<HTMLElement | null>\n block: ComputedRef<boolean>\n align: ComputedRef<PopoverAlign>\n alignOffset: ComputedRef<number>\n listMinWidth: ComputedRef<ListSize | undefined>\n searchable: ComputedRef<boolean>\n actions: ShallowRef<SelectAction[]>\n onSelect: (option: Option, removeOption?: boolean) => void\n onActionSelect: CallbackWithActionId\n /** The latest predicate, read without tracking (React keeps it in a ref) */\n searchPredicate: () => SearchPredicate<Option>\n}\n\nconst SelectContextKey: InjectionKey<SelectContextValue> = Symbol(\"PlexUISelect\")\n\nconst useSelectContext = () => {\n const context = inject(SelectContextKey, null)\n\n if (!context) {\n throw new Error(\"Select components must be wrapped in <Select />\")\n }\n\n return context\n}\n\ntype CustomSelectContextValue = {\n open: Ref<boolean>\n handleOpenChange: (maybeNextState?: boolean) => void\n /** Radix's `onOpenChange` of the popover root: reports changes only */\n handleRootOpenChange: (nextState: boolean) => void\n selectContentRef: ShallowRef<HTMLElement | null>\n /** The trigger element, default or custom (React's ref on Popover.Trigger) */\n popoverTriggerEl: ShallowRef<HTMLElement | null>\n}\n\nconst CustomSelectContextKey: InjectionKey<CustomSelectContextValue> = Symbol(\"PlexUICustomSelect\")\n\n// Radix decides \"focus outside\" on the React tree, where a Select opened next\n// to another one is outside it: focus entering the second one's menu closes\n// the first. Reka decides on the DOM and counts a layer later in the document\n// as nested, so the first would stay open. Each Select records its logical\n// parent (the Select whose menu renders it) and its content element, and\n// closes when focus enters the content of a Select not nested in it.\ntype SelectLayer = {\n parent: SelectLayer | null\n content: ShallowRef<HTMLElement | null>\n}\n\nconst SelectLayerKey: InjectionKey<SelectLayer> = Symbol(\"PlexUISelectLayer\")\n\nconst mountedSelectLayers = new Set<SelectLayer>()\n\nconst isNestedIn = (layer: SelectLayer, ancestor: SelectLayer) => {\n for (let parent = layer.parent; parent; parent = parent.parent) {\n if (parent === ancestor) return true\n }\n return false\n}\n\ntype CustomSelectMenuContextValue = {\n openingValue: string\n listId: string\n requestClose: () => void\n listRef: ShallowRef<HTMLElement | null>\n // Highlighting\n highlightedValue: Ref<string>\n // Search\n searchTerm: Ref<string>\n searchInputRef: ShallowRef<HTMLInputElement | null>\n}\n\nconst CustomSelectMenuContextKey: InjectionKey<CustomSelectMenuContextValue> = Symbol(\"PlexUICustomSelectMenu\")\n\nconst useCustomSelectMenuContext = () => {\n const context = inject(CustomSelectMenuContextKey, null)\n\n if (!context) {\n throw new Error(\"CustomSelectMenu components must be wrapped in <CustomSelectMenu />\")\n }\n\n return context\n}\n\nconst renderContent = (content: unknown): VNodeChild =>\n typeof content === \"function\" ? (content as () => VNodeChild)() : (content as VNodeChild)\n\nconst defaultMultiTriggerView = ({ values, selectedAll }: MultiSelectTriggerViewProps<Option>) =>\n selectedAll\n ? \"All selected\"\n : values.length === 0\n ? // NOTE: Zero length is impossible - an empty option with `placeholder` is always returned\n \"Select...\"\n : values.length === 1\n ? values[0]!.label\n : `${values.length} selected`\n\n// ============================================================\n// Select\n// ============================================================\n\nconst SelectComponent = defineComponent({\n name: \"Select\",\n inheritAttrs: false,\n props: selectProps,\n // Untyped here: SelectProps (below) types the payloads by `multiple`, and\n // typed emits would also require each listener to take both shapes\n emits: [\"update:value\", \"change\"],\n setup(rawProps, { emit, slots }) {\n const props = rawProps as unknown as SelectPropsValue\n // Block default is dynamic, based on `variant`\n const block = computed(() => props.block ?? props.variant !== \"ghost\")\n // Align default is dynamic, based on `block`\n const align = computed<PopoverAlign>(() => props.align ?? (block.value ? \"center\" : \"start\"))\n // Flush with the trigger's edge, as the prop documents\n const alignOffset = computed(() => props.alignOffset ?? 0)\n // A menu is never narrower than the field it belongs to. Inline selects keep their 300px floor.\n const listMinWidth = computed(() => props.listMinWidth ?? (block.value ? undefined : 300))\n\n const change = (selection: Option | Option[]) => {\n emit(\"update:value\", Array.isArray(selection) ? selection.map((option) => option.value) : selection.value)\n emit(\"change\", selection)\n }\n\n const onSelect = (selectedOption: Option, removeOption?: boolean) => {\n const { multiple, options } = props\n const value = props.value as string[]\n\n if (multiple) {\n // When clearing values, the value is an empty string\n if (!selectedOption.value) {\n change([])\n return\n }\n\n if (removeOption) {\n const nextValues = value.filter((v) => v !== selectedOption.value)\n change(getOptionsByValues(options, nextValues))\n } else {\n change(getOptionsByValues(options, value).concat(selectedOption))\n }\n } else {\n change(selectedOption)\n }\n }\n\n // It should be exceedingly uncommon to change actions dynamically: like\n // React's memo, the rendered actions only follow a change of length.\n const actions = shallowRef<SelectAction[]>(props.actions ?? [])\n watch(\n () => (props.actions ?? []).length,\n () => {\n actions.value = props.actions ?? []\n },\n )\n // Action callbacks always come from the latest actions\n const onActionSelect = (actionId: string) => {\n ;(props.actions ?? []).find((a) => a.id === actionId)?.onSelect(actionId)\n }\n\n // Determine when custom selects should be used\n const optionsCount = computed(() => {\n const { options } = props\n return isOptionGroupArray(options)\n ? options.reduce((acc: number, group) => acc + group.options.length, 0)\n : options.length\n })\n\n // Locking down searchable count to a single value\n const searchable = computed(() => optionsCount.value > 15)\n\n const slotsVersion = ref(0)\n onBeforeUpdate(() => {\n slotsVersion.value++\n })\n\n provide(SelectContextKey, {\n props,\n slots,\n slotsVersion,\n triggerId: `select-trigger-${useId()}`,\n triggerEl: shallowRef(null),\n block,\n align,\n alignOffset,\n listMinWidth,\n searchable,\n actions,\n onSelect,\n onActionSelect,\n searchPredicate: () => (toRaw(rawProps) as SelectPropsValue).searchPredicate ?? defaultSearchPredicate,\n })\n\n return () => h(CustomSelect)\n },\n})\n\n// ============================================================\n// Trigger\n// ============================================================\n\nconst SelectTrigger = defineComponent({\n name: \"SelectTrigger\",\n inheritAttrs: false,\n props: {\n onOpenChange: Function as PropType<(maybeNextState?: boolean) => void>,\n },\n setup(ownProps, { attrs }) {\n const { props, slots, slotsVersion, triggerId, triggerEl, block, onSelect } = useSelectContext()\n const typeahead = createTypeahead()\n\n const setTriggerEl = (instance: unknown) => {\n triggerEl.value = ((instance as ComponentPublicInstance | null)?.$el as HTMLElement | undefined) ?? null\n }\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n const { multiple, value, options } = props\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n\n // If not a command, check for typeahead\n // NOTE: Typeahead not supported in multi-select\n if (!multiple && isTypeaheadKey(evt)) {\n const currentTypeaheadValue = typeahead(key)\n // Stop other listeners from reacting\n evt.stopPropagation()\n\n // Attempt to filter options based on the value\n // NOTE: We don't look at current highlighted value as a means to start the search\n const firstMatchingOption = getTypeaheadOption(options, currentTypeaheadValue, firstValue)\n\n if (firstMatchingOption) {\n onSelect(firstMatchingOption)\n }\n }\n }\n\n const handleClearClick = () => {\n onSelect({ value: \"\", label: \"\" })\n // Ensure open state is closed\n ownProps.onOpenChange?.(false)\n }\n\n return () => {\n void slotsVersion.value\n const { multiple, options, loading } = props\n const value = props.value\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n const placeholderValue = loading ? props.loadingPlaceholder : props.placeholder\n const hasSelectedValue = multiple ? (value as string[]).length > 0 : !!value\n const isPlaceholder = loading || !hasSelectedValue\n\n const renderTriggerView = () => {\n let viewProps: Option | MultiSelectTriggerViewProps<Option>\n\n if (multiple) {\n const currentSelectedOptions = getOptionsByValues(options, value as string[])\n const flatOptions = options.flatMap((o) => (\"options\" in o ? o.options : o))\n viewProps = {\n values: currentSelectedOptions.length ? currentSelectedOptions : [{ value: \"\", label: placeholderValue }],\n selectedAll: flatOptions.length <= (value as string[]).length,\n }\n } else {\n viewProps = getOptionByValue(options, firstValue as string) || { value: \"\", label: placeholderValue }\n }\n\n if (slots.triggerView) return slots.triggerView(viewProps)\n if (props.TriggerView) return h(props.TriggerView, viewProps)\n return multiple\n ? defaultMultiTriggerView(viewProps as MultiSelectTriggerViewProps<Option>)\n : (viewProps as Option).label\n }\n\n return h(\n SelectControl as Component,\n {\n \"ref\": setTriggerEl,\n \"id\": triggerId,\n \"aria-label\": props.ariaLabel,\n \"aria-labelledby\": props.ariaLabelledby ? `${props.ariaLabelledby} ${triggerId}-value` : undefined,\n \"aria-describedby\": props.ariaDescribedby,\n \"aria-invalid\": props.ariaInvalid,\n \"class\": props.triggerClassName,\n \"selected\": !isPlaceholder,\n \"variant\": props.variant,\n \"pill\": props.pill,\n \"block\": block.value,\n \"size\": props.size,\n \"disabled\": props.disabled,\n \"loading\": loading,\n \"StartIcon\": props.TriggerStartIcon,\n \"opticallyAlign\": props.opticallyAlign,\n \"dropdownIconType\": props.dropdownIconType,\n \"onClearClick\": props.clearable ? handleClearClick : undefined,\n \"onInteract\": ownProps.onOpenChange,\n \"onKeydown\": handleKeyDown,\n // pass along props from the popover trigger\n ...attrs,\n },\n {\n default: () => [\n props.ariaLabelledby ? h(\"span\", { id: `${triggerId}-value` }, [renderTriggerView()]) : renderTriggerView(),\n props.name || props.id\n ? // One input per selected value, so a form submits every value of a\n // multi-select; an empty one keeps `id` and `required` working\n (multiple && (value as string[]).length ? (value as string[]) : [firstValue ?? \"\"]).map((formValue, index) =>\n h(\"input\", {\n \"key\": index,\n \"id\": index === 0 ? props.id : undefined,\n \"name\": props.name,\n \"value\": formValue,\n // A disabled select is neither validated nor submitted\n \"disabled\": props.disabled,\n \"tabindex\": -1,\n \"onFocus\": () => {\n triggerEl.value?.focus()\n },\n // don't make this readOnly because that prevents the value from being required\n \"required\": props.required,\n \"class\": s.FormInput,\n \"aria-hidden\": \"true\",\n }),\n )\n : null,\n ],\n },\n )\n }\n },\n})\n\n/**\n * Radix's `Popover.Trigger asChild`: Radix's trigger props merged into the\n * child (the default trigger or a custom one), its click toggle after the\n * child's own handlers.\n */\nconst SelectPopoverTrigger = defineComponent({\n name: \"SelectPopoverTrigger\",\n setup(_props, { slots }) {\n const rootContext = injectPopoverRootContext()\n rootContext.contentId ||= useRekaId(undefined, \"reka-popover-content\")\n const { popoverTriggerEl } = inject(CustomSelectContextKey)!\n\n // React's ref on Popover.Trigger: the element the child gives its ref\n // (FloatingLabelSelect's field). Focus returns here on close, the content\n // anchors to it, and pointer-downs on it are not \"outside\".\n const setTriggerRef = (instance: unknown) => {\n popoverTriggerEl.value = resolveElement(instance)\n rootContext.triggerElement.value = popoverTriggerEl.value ?? undefined\n }\n\n const onClick = composeEventHandlers(undefined, () => rootContext.onOpenToggle())\n\n return () => {\n const child = firstElementChild(slots.default?.())\n if (!child) return null\n\n const isOpen = rootContext.open.value\n return h(RekaPopoverAnchor, { asChild: true, reference: popoverTriggerEl.value ?? undefined }, {\n default: () =>\n cloneVNode(\n mergeSlotProps(child, {\n \"type\": \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": isOpen,\n \"aria-controls\": isOpen ? rootContext.contentId : undefined,\n \"data-state\": isOpen ? \"open\" : \"closed\",\n onClick,\n }),\n { ref: setTriggerRef },\n // Keep the child's own ref\n true,\n ),\n })\n }\n },\n})\n\n// ============================================================\n// Custom Select\n// ============================================================\n\nconst CustomSelect = defineComponent({\n name: \"CustomSelect\",\n setup() {\n const { props, slots, slotsVersion, triggerEl } = useSelectContext()\n const open = ref(false)\n const selectContentRef = shallowRef<HTMLElement | null>(null)\n const popoverTriggerEl = shallowRef<HTMLElement | null>(null)\n // Not before mount: server rendering and hydration render no teleport,\n // as Radix's Portal renders nothing before mount\n const mounted = ref(false)\n\n const handleOpenChange = (maybeNextState?: boolean) => {\n // Toggle the current state when called without a specific state\n const nextState = maybeNextState === undefined ? !open.value : maybeNextState\n open.value = nextState\n\n // When we're closing, manage focus back to trigger manually\n if (!nextState) {\n // Read this now: with animations disabled the menu unmounts before the\n // timeout below runs, so selectContentRef is already null by then\n const focusWasInMenu = !!selectContentRef.value?.contains(document.activeElement)\n\n // Wait until the next tick to determine if another element has become focused\n setTimeout(() => {\n const activeElement = document.activeElement\n const menu = selectContentRef.value\n const focusInMenu = !!menu && !!activeElement && menu.contains(activeElement)\n // Focus dropped with the closing menu lands on <body>: it was lost, not moved\n const focusLost = !activeElement || activeElement === document.body\n\n // Focus that moved to another element outside the menu stays there\n if (focusInMenu || (focusWasInMenu && focusLost)) {\n popoverTriggerEl.value?.focus()\n }\n })\n }\n }\n\n useEscCloseStack(open, () => {\n handleOpenChange(false)\n })\n\n const handleRootOpenChange = (nextState: boolean) => {\n // Radix's controlled state reports changes only\n if (nextState === open.value) return\n\n // Prevent opening while loading\n if (props.loading && nextState) {\n return\n }\n\n handleOpenChange(nextState)\n }\n\n provide(CustomSelectContextKey, {\n open,\n handleOpenChange,\n handleRootOpenChange,\n selectContentRef,\n popoverTriggerEl,\n })\n\n const layer: SelectLayer = { parent: inject(SelectLayerKey, null), content: selectContentRef }\n provide(SelectLayerKey, layer)\n\n // Focus entering another Select's menu is outside this one, unless that\n // Select is nested in this one's menu (see SelectLayer)\n const handleFocusIn = (evt: FocusEvent) => {\n const target = evt.target as Node | null\n if (!open.value || !target) return\n for (const other of mountedSelectLayers) {\n if (other !== layer && other.content.value?.contains(target) && !isNestedIn(other, layer)) {\n handleRootOpenChange(false)\n return\n }\n }\n }\n\n let listenerDocument: Document | null = null\n onMounted(() => {\n mounted.value = true\n mountedSelectLayers.add(layer)\n listenerDocument = triggerEl.value?.ownerDocument ?? document\n listenerDocument.addEventListener(\"focusin\", handleFocusIn)\n })\n onBeforeUnmount(() => {\n mountedSelectLayers.delete(layer)\n listenerDocument?.removeEventListener(\"focusin\", handleFocusIn)\n listenerDocument = null\n })\n\n const renderTrigger = () => {\n const renderProps: SelectTriggerRenderProps = {\n open: open.value,\n onToggle: () => {\n open.value = !open.value\n },\n }\n if (slots.trigger) return slots.trigger(renderProps)\n if (props.trigger) return props.trigger(renderProps)\n return h(SelectTrigger, { onOpenChange: handleOpenChange })\n }\n\n return () => {\n void slotsVersion.value\n return h(\n RekaPopoverRoot,\n { \"open\": open.value, \"onUpdate:open\": handleRootOpenChange, \"modal\": false },\n {\n default: () => [\n h(SelectPopoverTrigger, null, { default: renderTrigger }),\n // React replaces the menu's wrapper when it opens or closes (see\n // TransitionGroup), so React DOM appends the new one to <body>.\n // A Teleport keeps its place in <body>: a new one per state moves\n // the wrapper to the end the same way.\n h(RekaPopoverPortal, { key: open.value ? \"open\" : \"closed\", forceMount: mounted.value }, {\n default: () => [\n h(\n TransitionGroup,\n { class: s.Menu, enterDuration: 350, exitDuration: 200, disableAnimations: true },\n { default: () => [open.value ? h(SelectPopoverContent, { key: \"dropdown\" }) : createCommentVNode()] },\n ),\n ],\n }),\n ],\n },\n )\n }\n },\n})\n\n// The element Reka's content renders (`as`). Raw: Reka passes `as` through\n// reactive props, and Vue warns about a component made reactive.\nconst SelectContentElement = markRaw(\n defineComponent({\n name: \"SelectContentElement\",\n inheritAttrs: false,\n setup(_props, { slots, attrs }) {\n const { selectContentRef } = inject(CustomSelectContextKey)!\n const setContentRef = (el: unknown) => {\n selectContentRef.value = (el as HTMLElement | null) ?? null\n }\n\n return () => {\n const { \"dir\": _dir, \"aria-labelledby\": _labelledBy, style, ...rest } = attrs\n return h(\"div\", { ...rest, style: withRadixVariableNames(style, \"popover\"), ref: setContentRef }, slots.default?.())\n }\n },\n }),\n)\n\nconst SelectPopoverContent = defineComponent({\n name: \"SelectPopoverContent\",\n setup() {\n const { props, align, alignOffset, listMinWidth } = useSelectContext()\n const { handleRootOpenChange, popoverTriggerEl } = inject(CustomSelectContextKey)!\n // Radix (1.8.1) dismisses on the click that follows a primary pointer down outside\n const { onPointerDownOutside, onFocusOutside } = useDeferredPointerDownOutside((originalEvent) => {\n // The trigger is not outside: Radix's non-modal content keeps the popover open\n if (popoverTriggerEl.value?.contains(originalEvent.target as Node | null)) return\n handleRootOpenChange(false)\n })\n\n return () =>\n h(\n RekaPopoverContent,\n {\n as: SelectContentElement,\n class: s.MenuList,\n \"data-pill\": props.pill ? \"\" : undefined,\n side: props.side,\n sideOffset: 5,\n align: align.value,\n alignOffset: alignOffset.value,\n avoidCollisions: props.avoidCollisions,\n collisionPadding: { bottom: 30, top: 30 },\n // Prevent Reka's auto focus so we can handle our own from within <CustomSelectMenu />\n onOpenAutoFocus: preventDefaultHandler,\n onCloseAutoFocus: preventDefaultHandler,\n onEscapeKeyDown: preventDefaultHandler,\n onPointerDownOutside,\n onFocusOutside,\n style: toCssVariables({\n \"select-list-width\": props.listWidth,\n \"select-list-min-width\": listMinWidth.value,\n \"select-list-max-width\": props.listMaxWidth,\n }),\n },\n { default: () => h(CustomSelectMenu) },\n )\n },\n})\n\n/**\n * Focuses an element that mounted in this tick. Vue skips a listener for an\n * event stamped (`_vts`) no later than the moment the listener was attached\n * (a time cached for the tick), so a focus fired within the millisecond the\n * menu mounted would not reach the search Input's own focus listener once\n * Reka's capture listener has stamped it: its `data-focused` would stay\n * \"false\", while React's onFocus always runs. The focus events are stamped\n * one millisecond later for the listeners on their way.\n *\n * `_vts` is a private field of Vue's runtime-dom event invoker. Deferring the\n * focus instead was tried and breaks parity, because React focuses\n * synchronously in its mount effect: in the next animation frame, keys and\n * Escape pressed right after opening reach the trigger, not the menu; in a\n * 1ms timeout (a 0ms one fires within the same millisecond and is skipped\n * too), a menu opened and closed quickly takes focus after closing. Should\n * Vue drop the field, the stamp is ignored and only the search input's\n * `data-focused` is affected.\n */\nconst focusMounted = (element: HTMLElement) => {\n const view = element.ownerDocument.defaultView\n const stamp = (event: Event) => {\n const vueEvent = event as Event & { _vts?: number }\n if (event.target === element && !vueEvent._vts) vueEvent._vts = Date.now() + 1\n }\n\n view?.addEventListener(\"focus\", stamp, { capture: true })\n view?.addEventListener(\"focusin\", stamp, { capture: true })\n try {\n element.focus({ preventScroll: true })\n } finally {\n view?.removeEventListener(\"focus\", stamp, { capture: true })\n view?.removeEventListener(\"focusin\", stamp, { capture: true })\n }\n}\n\nconst CustomSelectMenu = defineComponent({\n name: \"CustomSelectMenu\",\n setup() {\n const { props, searchable, searchPredicate } = useSelectContext()\n const { handleOpenChange } = inject(CustomSelectContextKey)!\n const menuRef = shallowRef<HTMLElement | null>(null)\n const listRef = shallowRef<HTMLElement | null>(null)\n const searchInputRef = shallowRef<HTMLInputElement | null>(null)\n const searchTerm = ref(\"\")\n const multiple = props.multiple\n const value = props.value\n const highlightedValue = ref<string>(\n ((multiple ? (value as string[])[0] : (value as string)) || getFirstValidOption(props.options)?.value) ?? \"\",\n )\n const typeahead = createTypeahead()\n const listId = `select-list-${useId()}`\n\n // Lock `value` for a given open to prevent janky change during close animation\n // MultiSelect reads its live selection instead of this per-open snapshot.\n const openingValue = multiple ? \"\" : (value as string)\n\n // Trim and lowercase search value\n const literalSearchTerm = computed(() => searchTerm.value.trim().toLocaleLowerCase())\n const filteredOptions = computed(() => filterOptions(props.options, literalSearchTerm.value, searchPredicate()))\n const firstOption = computed(() => getFirstValidOption(filteredOptions.value))\n\n const requestClose = () => handleOpenChange(false)\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n const multiple = props.multiple\n const value = props.value\n const firstValue = multiple ? (value as string[])[0] : (value as string)\n const currentHighlightedValue = highlightedValue.value\n const targetValue = currentHighlightedValue || firstOption.value?.value || firstValue\n const isFocusedInSearch = document.activeElement === searchInputRef.value\n\n const menuElement = menuRef.value\n\n // Should be generally impossible for the menu element to not exist\n if (!menuElement) {\n return\n }\n\n const triggerHighlightedOption = () => {\n const pointerUpEvent = new PointerEvent(\"pointerup\", {\n bubbles: true,\n cancelable: true,\n pointerType: \"mouse\",\n })\n\n // Find the current highlighted option\n const selectedOption = findOptionByValue(currentHighlightedValue, menuElement)\n selectedOption?.dispatchEvent(pointerUpEvent)\n }\n\n const highlightOption = (val: string, element: Element) => {\n highlightedValue.value = val\n element.scrollIntoView({ block: \"nearest\" })\n }\n\n const highlightSelectedOrFirstOption = () => {\n // Attempt to move highlight to selected item\n const maybeFirstValue = multiple ? (value as string[])[0] : (value as string)\n\n if (maybeFirstValue) {\n const selectedElement = findOptionByValue(maybeFirstValue, menuElement)\n\n if (selectedElement) {\n highlightOption(maybeFirstValue, selectedElement)\n return\n }\n }\n\n // If value isn't set, or the selected node wasn't found in the DOM,\n // attempt to move focus to the first valid option.\n const firstValidOption = getFirstValidOption(props.options)\n\n if (firstValidOption) {\n const firstValidOptionElement = findOptionByValue(firstValidOption.value, menuElement)\n if (firstValidOptionElement) {\n highlightOption(firstValidOption.value, firstValidOptionElement)\n }\n }\n }\n\n // Commands\n switch (key) {\n case \"ArrowDown\": {\n evt.preventDefault()\n\n // If there's no highlighted value, or the highlighted value is not in the DOM\n if (!currentHighlightedValue || !findOptionByValue(currentHighlightedValue, menuElement)) {\n highlightSelectedOrFirstOption()\n return\n }\n\n // Otherwise, move to the next option\n const nextElement = findNextOption(currentHighlightedValue, menuElement)\n const nextValue = nextElement?.getAttribute(\"data-option-id\")\n if (nextElement && nextValue) {\n highlightOption(nextValue, nextElement)\n }\n\n return\n }\n case \"ArrowUp\": {\n evt.preventDefault()\n\n // If there's no highlighted value, or the highlighted value is not in the DOM\n if (!currentHighlightedValue || !findOptionByValue(currentHighlightedValue, menuElement)) {\n highlightSelectedOrFirstOption()\n return\n }\n\n const previousElement = findPreviousOption(targetValue as string, menuElement)\n const previousValue = previousElement?.getAttribute(\"data-option-id\")\n if (previousElement && previousValue) {\n highlightOption(previousValue, previousElement)\n }\n\n return\n }\n case \"Enter\":\n // Prevent default enter behavior from the search input, if present\n evt.preventDefault()\n\n // Send a pointerup event into the currently highlighted option\n triggerHighlightedOption()\n\n return\n case \" \":\n // Allow spaces in search, and don't treat as enter\n // if there is a valid literalSearchTerm.\n if (literalSearchTerm.value && isFocusedInSearch) {\n return\n }\n\n // Prevent space from entering search input\n evt.preventDefault()\n\n // Send a pointerup event into the currently highlighted option\n triggerHighlightedOption()\n\n return\n default:\n break\n }\n\n // If not a command, check for typeahead\n if (isTypeaheadKey(evt)) {\n // Skip typeahead logic when we're focused in the search input\n if (isFocusedInSearch) {\n return\n }\n\n // Extend the current typeahead and get the latest value\n const currentTypeaheadValue = typeahead(key)\n\n // Stop other listeners from reacting\n evt.stopPropagation()\n\n // Attempt to filter options based on the value, starting at the highlighted value\n const firstMatchingOption = getTypeaheadOption(props.options, currentTypeaheadValue, currentHighlightedValue)\n\n if (firstMatchingOption) {\n const matchedNode = findOptionByValue(firstMatchingOption.value, menuElement)\n\n // Only change the highlight if we found the actual node\n if (matchedNode) {\n highlightedValue.value = firstMatchingOption.value\n // Ensure the newly highlighted option is scrolled into view\n matchedNode.scrollIntoView({ block: \"nearest\" })\n }\n }\n }\n }\n\n provide(CustomSelectMenuContextKey, {\n openingValue,\n listId,\n requestClose,\n listRef,\n highlightedValue,\n searchTerm,\n searchInputRef,\n })\n\n // The focused element (the search input, or the list without one) points\n // assistive tech at the highlighted option, when that option is rendered\n const syncActiveDescendant = () => {\n const target = searchInputRef.value || listRef.value\n if (!target || !menuRef.value) {\n return\n }\n\n const highlightedOption = highlightedValue.value ? findOptionByValue(highlightedValue.value, menuRef.value) : null\n if (highlightedOption?.id) {\n target.setAttribute(\"aria-activedescendant\", highlightedOption.id)\n } else {\n target.removeAttribute(\"aria-activedescendant\")\n }\n }\n watch([highlightedValue, filteredOptions], syncActiveDescendant, { flush: \"post\" })\n\n // On mount behavior\n onMounted(() => {\n syncActiveDescendant()\n\n // Like React's mount effect, the scroll target is the highlight at mount\n const initialHighlightedValue = highlightedValue.value\n\n // Ensure initial highlighted option is in view\n // NOTE: Allowing for a render frame ensures content is positioned correctly before scrolling it into view.\n waitForAnimationFrame(() => {\n if (!menuRef.value) {\n return\n }\n\n // Ensure the highlighted option is in view\n const currentOption = findOptionByValue(initialHighlightedValue, menuRef.value)\n // Scroll the selected item into view, and its bottom edge.\n currentOption?.scrollIntoView({ block: \"center\" })\n })\n\n // Send initial focus to the search input, or the list without one (the\n // menu container when there are no options), to capture key events\n const autoFocusTarget = searchInputRef.value || listRef.value || menuRef.value\n if (autoFocusTarget) focusMounted(autoFocusTarget)\n })\n\n // On search behavior (React's layout effect on `filteredOptions`, skipped on mount)\n watch(\n filteredOptions,\n (nextFilteredOptions) => {\n // Impossible while mounted, list ref will exist\n if (!listRef.value) {\n return\n }\n\n // Reset scroll position to the top\n listRef.value.scrollTop = 0\n\n // Highlight first item in the list\n const maybeFirstOption = getFirstValidOption(nextFilteredOptions)\n if (maybeFirstOption) highlightedValue.value = maybeFirstOption.value\n },\n { flush: \"post\" },\n )\n\n return () =>\n h(\n \"div\",\n {\n class: s.MenuInner,\n onKeydown: handleKeyDown,\n ref: menuRef,\n // Without search, the list takes focus (and the tab stop); the container\n // stays focusable so a click on it keeps the keys here\n tabindex: !searchable.value && filteredOptions.value.length ? -1 : 0,\n },\n [\n searchable.value\n ? h(CustomSelectSearch, {\n \"value\": searchTerm.value,\n \"hasResults\": !!filteredOptions.value.length,\n \"onUpdate:value\": (next: string) => {\n searchTerm.value = next\n },\n })\n : null,\n h(CustomSelectList, { filteredOptions: filteredOptions.value }),\n h(CustomSelectActions),\n ],\n )\n },\n})\n\nconst CustomSelectSearch = defineComponent({\n name: \"CustomSelectSearch\",\n props: {\n value: { type: String, required: true },\n /** Whether the list is rendered, for `aria-controls` */\n hasResults: { type: Boolean, required: true },\n },\n emits: {\n \"update:value\": (_value: string) => true,\n },\n setup(props, { emit }) {\n const { props: selectProps } = useSelectContext()\n const { listId, searchInputRef } = useCustomSelectMenuContext()\n const searchRef = shallowRef<HTMLElement | null>(null)\n\n // React's `ref` on Input is its <input>. Read before the menu's mount\n // focus runs (child mounted hooks run first); an exposed component ref\n // is not populated that early.\n onMounted(() => {\n searchInputRef.value = searchRef.value?.querySelector(\"input\") ?? null\n })\n onBeforeUnmount(() => {\n searchInputRef.value = null\n })\n\n return () =>\n h(\"div\", { class: s.Search, ref: searchRef }, [\n h(\n Input,\n {\n \"value\": props.value,\n \"size\": selectProps.searchSize,\n \"placeholder\": selectProps.searchPlaceholder,\n \"aria-label\": selectProps.searchAriaLabel,\n \"onUpdate:value\": (next: string) => emit(\"update:value\", next),\n // The native attribute: it reaches the <input> whether or not\n // Input forwards its `autoComplete` prop (React's Input does)\n \"autocomplete\": \"off\",\n \"autocorrect\": \"off\",\n \"spellcheck\": false,\n \"aria-autocomplete\": \"list\",\n \"role\": \"combobox\",\n // The list, while there is one: with no results it is not rendered\n \"aria-controls\": props.hasResults ? listId : undefined,\n \"aria-expanded\": true,\n },\n {\n startAdornment: () =>\n h(Search, { width: 16, height: 16, class: \"fill-secondary\", fill: \"var(--color-text-secondary)\" }),\n },\n ),\n ])\n },\n})\n\nconst isOptionGroup = <T extends Option>(mixedOption: T | OptionGroup<T>): mixedOption is OptionGroup<T> => {\n return \"options\" in mixedOption\n}\n\nconst isOptionGroupArray = <T extends Option>(arr: Options<T>): arr is OptionGroup<T>[] => {\n return !!arr[0] && isOptionGroup(arr[0])\n}\n\nconst HARD_OPTIONS_LIMIT = 300\n\nconst CustomSelectList = defineComponent({\n name: \"CustomSelectList\",\n props: {\n filteredOptions: { type: Array as PropType<Options<Option>>, required: true },\n },\n setup(props) {\n const { props: selectProps, slots, slotsVersion, triggerId, searchable } = useSelectContext()\n const { listId, listRef } = useCustomSelectMenuContext()\n const setListRef = (el: unknown) => {\n listRef.value = (el as HTMLElement | null) ?? null\n }\n\n return () => {\n void slotsVersion.value\n const { filteredOptions } = props\n\n if (!filteredOptions.length) {\n if (slots.searchEmptyMessage) {\n return h(\"div\", { class: s.SearchEmpty }, slots.searchEmptyMessage())\n }\n\n const { searchEmptyMessage } = selectProps\n return typeof searchEmptyMessage === \"string\"\n ? h(\"p\", { \"class\": s.SearchEmpty, \"data-text-only\": \"true\" }, searchEmptyMessage)\n : h(\"div\", { class: s.SearchEmpty }, [searchEmptyMessage as VNodeChild])\n }\n\n // We hard limit within groups, so at this level we will only limit flat arrays\n const isGrouped = isOptionGroupArray(filteredOptions)\n const hasHardLimit = !isGrouped && filteredOptions.length > HARD_OPTIONS_LIMIT\n\n const options = isGrouped\n ? filteredOptions.map((group) => h(CustomSelectGroup, { key: group.label, group }))\n : (filteredOptions as Option[])\n .slice(0, HARD_OPTIONS_LIMIT)\n .map((option) => h(CustomSelectOption, { key: option.value, option }))\n\n const { ariaLabel, ariaLabelledby } = selectProps\n const customTrigger = !!(slots.trigger || selectProps.trigger)\n return h(\n \"div\",\n {\n \"id\": listId,\n \"class\": s.OptionsList,\n \"ref\": setListRef,\n \"role\": \"listbox\",\n // Named like the trigger: its label, or the default trigger itself\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby ?? (ariaLabel || customTrigger ? undefined : triggerId),\n \"aria-multiselectable\": selectProps.multiple || undefined,\n // Without search, the list is the focused element\n \"tabindex\": searchable.value ? undefined : 0,\n },\n [\n ...options,\n hasHardLimit ? h(CustomSelectHardLimit, { numHidden: filteredOptions.length - HARD_OPTIONS_LIMIT }) : null,\n ],\n )\n }\n },\n})\n\nconst DEFAULT_OPTIONS_LIMIT = {\n limit: 100,\n label: \"Show all\",\n}\n\nconst CustomSelectGroup = defineComponent({\n name: \"CustomSelectGroup\",\n props: {\n group: { type: Object as PropType<OptionGroup<Option>>, required: true },\n },\n setup(props) {\n const groupId = useId()\n const headingId = useId()\n const { searchTerm, highlightedValue } = useCustomSelectMenuContext()\n const limitExpanded = ref(false)\n\n return () => {\n const { label, options, optionsLimit = DEFAULT_OPTIONS_LIMIT } = props.group\n const hasExpandableLimit = optionsLimit.limit < options.length && !searchTerm.value && !limitExpanded.value\n const hasHardLimit = HARD_OPTIONS_LIMIT < options.length && !hasExpandableLimit\n\n let maybeLimitedOptions = options\n if (hasExpandableLimit) {\n maybeLimitedOptions = options.slice(0, optionsLimit.limit)\n } else if (hasHardLimit) {\n maybeLimitedOptions = options.slice(0, HARD_OPTIONS_LIMIT)\n }\n\n const handleLimitExpanded = () => {\n // Expand options\n limitExpanded.value = true\n\n // Set highlight to the first option from the newly expanded list\n highlightedValue.value = options[optionsLimit.limit]!.value\n }\n\n // A group named by its heading. NOTE: The arrow keys walk every option in\n // document order (findNextOption), so they cross from group to group.\n return h(\"div\", { \"role\": \"group\", \"aria-labelledby\": headingId, \"class\": s.OptionGroup }, [\n // No indicator slot: the heading labels the whole section\n h(\"div\", { id: headingId, class: s.OptionGroupHeading }, label),\n ...maybeLimitedOptions.map((option) => h(CustomSelectOption, { key: option.value, option })),\n hasExpandableLimit\n ? h(CustomSelectExpandableLimit, {\n value: `group-limit-${groupId}`,\n label: optionsLimit.label,\n onPointerUp: handleLimitExpanded,\n })\n : null,\n hasHardLimit ? h(CustomSelectHardLimit, { numHidden: options.length - HARD_OPTIONS_LIMIT }) : null,\n ])\n }\n },\n})\n\nconst CustomSelectHardLimit = defineComponent({\n name: \"CustomSelectHardLimit\",\n props: {\n numHidden: { type: Number, required: true },\n },\n setup(props) {\n const { props: selectProps } = useSelectContext()\n\n return () =>\n h(\"div\", { class: s.OptionHardLimitHeading }, [\n // The note lines up with the option labels above it, so it borrows their indicator column.\n selectProps.checkPosition === \"start\" ? h(\"div\", { class: s.OptionIndicatorSlot }) : null,\n `…and ${props.numHidden.toLocaleString()} more options. Use search to refine results further.`,\n ])\n },\n})\n\nconst CustomSelectExpandableLimit = defineComponent({\n name: \"CustomSelectExpandableLimit\",\n props: {\n value: { type: String, required: true },\n label: { type: String, required: true },\n onPointerUp: { type: Function as PropType<() => void>, required: true },\n },\n setup(props) {\n const { props: selectProps } = useSelectContext()\n const { highlightedValue } = useCustomSelectMenuContext()\n const optionId = useId()\n\n const handlePointerMove = () => {\n if (props.value === highlightedValue.value) {\n return\n }\n\n highlightedValue.value = props.value\n }\n\n const handlePointerLeave = () => {\n // Clear the highlight only if it is this one\n if (highlightedValue.value === props.value) {\n highlightedValue.value = \"\"\n }\n }\n\n // This component acts a LOT like an Option, but has enough bespoke behavior\n // that it cannot literally be one.\n return () => {\n const isHighlighted = props.value === highlightedValue.value\n\n return h(\n \"div\",\n {\n \"id\": optionId,\n \"class\": clsx(s.Option, s.OptionsLimit),\n \"data-option-id\": props.value,\n \"data-highlight\": isHighlighted ? \"\" : undefined,\n // Not selectable: no aria-selected\n \"role\": \"option\",\n \"onPointerup\": props.onPointerUp,\n \"onPointermove\": handlePointerMove,\n \"onPointerleave\": handlePointerLeave,\n },\n [\n h(\"div\", { class: clsx(s.PressableInner, s.OptionInner) }, [\n // The row lines up with the option labels above it, so it borrows their indicator column.\n selectProps.checkPosition === \"start\" ? h(\"div\", { class: s.OptionIndicatorSlot }) : null,\n props.label,\n ]),\n ],\n )\n }\n },\n})\n\nconst INTERNAL_DOM_SELECTION_DATA_ATTR = \"data-option-id\"\n\nconst CustomSelectOption = defineComponent({\n name: \"CustomSelectOption\",\n props: {\n option: { type: Object as PropType<Option>, required: true },\n },\n setup(props) {\n const { props: selectProps, slots, slotsVersion, onSelect } = useSelectContext()\n const { openingValue, requestClose, highlightedValue } = useCustomSelectMenuContext()\n // Referenced by the list's aria-activedescendant while highlighted\n const optionId = useId()\n\n // NOTE: SingleSelect mode keeps the opening value instead of the live value\n // to avoid selecting the item as the select closes.\n const isSelected = () =>\n selectProps.multiple\n ? (selectProps.value as string[]).includes(props.option.value)\n : props.option.value === openingValue\n\n const handlePointerUp = () => {\n if (selectProps.multiple) {\n // Trigger the change, optionally as a remove\n onSelect(props.option, isSelected())\n } else {\n onSelect(props.option)\n // Request the dropdown to close\n requestClose()\n }\n }\n\n const handlePointerMove = () => {\n if (props.option.value === highlightedValue.value) {\n return\n }\n\n highlightedValue.value = props.option.value\n }\n\n const handlePointerLeave = () => {\n // Clear the highlight only if it is this one, removing the active highlight on the menu.\n if (highlightedValue.value === props.option.value) {\n highlightedValue.value = \"\"\n }\n }\n\n const renderOptionView = (option: Option): VNodeChild => {\n if (slots.optionView) return slots.optionView(option)\n if (selectProps.OptionView) return h(selectProps.OptionView, option)\n return option.label\n }\n\n const renderTooltip = (tooltip: NonNullable<Option[\"tooltip\"]>) => {\n const content = tooltip.content\n return typeof content === \"function\"\n ? h(Tooltip, { maxWidth: tooltip.maxWidth, side: \"right\" }, { default: () => h(Info), content })\n : h(Tooltip, { content, maxWidth: tooltip.maxWidth, side: \"right\" }, { default: () => h(Info) })\n }\n\n return () => {\n void slotsVersion.value\n const { option } = props\n const { value, disabled, tooltip } = option\n const selected = isSelected()\n const isHighlighted = value === highlightedValue.value\n const checkPosition = selectProps.checkPosition\n\n return h(\n \"div\",\n {\n \"id\": optionId,\n \"class\": clsx(s.Option, selectProps.optionClassName),\n \"data-highlight\": isHighlighted ? \"\" : undefined,\n \"role\": \"option\",\n // The selection; the highlight is the list's aria-activedescendant\n \"aria-selected\": selected,\n \"data-selected\": selected ? \"\" : undefined,\n // Internal attribute for selecting DOM nodes\n [INTERNAL_DOM_SELECTION_DATA_ATTR]: value,\n // Allow options to behave like a native select, when you can open and select an item in a single click\n \"onPointerup\": disabled ? undefined : handlePointerUp,\n // Pointer move prevents contention between keyboard presses and a still mouse\n \"onPointermove\": disabled ? undefined : handlePointerMove,\n \"onPointerleave\": disabled ? undefined : handlePointerLeave,\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : undefined,\n },\n [\n h(\"div\", { class: s.PressableInner }, [\n checkPosition === \"start\"\n ? h(\"div\", { \"class\": s.OptionIndicatorSlot, \"data-position\": \"start\" }, [\n selected ? h(Check, { class: s.OptionCheck }) : null,\n ])\n : null,\n h(\"div\", { class: s.OptionLeading }, [\n h(\"div\", { class: s.OptionInner }, [renderOptionView(option), tooltip ? renderTooltip(tooltip) : null]),\n // React's `description && ...`: a 0 (or NaN) renders as text\n option.description &&\n h(\"div\", { class: clsx(s.OptionInner, s.OptionDescription) }, [renderContent(option.description)]),\n ]),\n checkPosition === \"end\"\n ? h(\"div\", { \"class\": s.OptionIndicatorSlot, \"data-position\": \"end\" }, [\n selected ? h(Check, { class: s.OptionCheck }) : null,\n ])\n : null,\n ]),\n ],\n )\n }\n },\n})\n\nconst CustomSelectActions = defineComponent({\n name: \"CustomSelectActions\",\n setup() {\n const { actions } = useSelectContext()\n\n return () => {\n if (actions.value.length === 0) {\n return null\n }\n\n return h(\n \"div\",\n { class: s.ActionsContainer },\n actions.value.map((action) => h(CustomSelectAction, { key: action.id, action })),\n )\n }\n },\n})\n\n/**\n * React handles events of the portalled menu at <body> and stops a synthetic\n * event there: <body>'s own listeners (the Escape stack) still run, the\n * document's and window's do not. Stopping the native event here instead\n * would keep it from <body>.\n */\nconst stopAfterBody = (evt: Event) => {\n const body = (evt.currentTarget as Node | null)?.ownerDocument?.body\n if (!body) {\n evt.stopPropagation()\n return\n }\n body.addEventListener(\n evt.type,\n (event) => {\n if (event === evt) event.stopPropagation()\n },\n { once: true },\n )\n}\n\nconst CustomSelectAction = defineComponent({\n name: \"CustomSelectAction\",\n props: {\n action: { type: Object as PropType<SelectAction>, required: true },\n },\n setup(props) {\n const { onActionSelect } = useSelectContext()\n const { requestClose } = useCustomSelectMenuContext()\n\n const handlePointerUp = () => {\n // Trigger the action through the context helper, not the method on this action (it may be a stale reference)\n onActionSelect(props.action.id)\n // Request to close the dropdown\n requestClose()\n }\n\n const handleKeyDown = (evt: KeyboardEvent) => {\n const key = evt.key\n\n switch (key) {\n case \"Tab\":\n // Allow tabbing to pass propagation as normal, which bubbles up to the focus scope\n break\n case \"Enter\":\n case \" \":\n evt.stopPropagation()\n handlePointerUp()\n break\n case \"Escape\":\n // The menu's key handler ignores Escape; the Escape stack on <body> closes the menu\n stopAfterBody(evt)\n break\n default:\n evt.stopPropagation()\n }\n }\n\n return () => {\n const { label, Icon, className } = props.action\n return h(\"div\", { class: s.Action, onPointerup: handlePointerUp, onKeydown: handleKeyDown, tabindex: 0 }, [\n h(\"div\", { class: clsx(s.ActionInner, className) }, [Icon ? h(Icon, { role: \"presentation\" }) : null, label]),\n ])\n }\n },\n})\n\n// ============================================================\n// Utilities\n// ============================================================\nconst defaultSearchPredicate = (option: Option, searchTerm: string) => option.label.toLowerCase().includes(searchTerm)\n\nconst filterOptions = <T extends Option>(\n options: Options<T>,\n searchTerm: string,\n searchIterator: SearchPredicate<T>,\n): Options<T> => {\n const searchValue = searchTerm.trim().toLocaleLowerCase()\n\n if (!searchValue) {\n return options\n }\n\n const filterOption = (option: T): boolean => searchIterator(option, searchValue)\n\n if (isOptionGroupArray(options)) {\n return options.reduce((acc, group) => {\n const filtered = group.options.filter(filterOption)\n\n if (filtered.length) {\n acc.push({\n ...group,\n options: filtered,\n })\n }\n return acc\n }, [] as OptionGroup<T>[])\n } else {\n return (options as T[]).reduce((acc, option) => {\n if (filterOption(option)) acc.push(option)\n return acc\n }, [] as T[])\n }\n}\n\nconst getFirstValidOption = <T extends Option>(options: Options<T>): T | undefined => {\n if (!options.length) {\n return undefined\n }\n\n let found: T | undefined\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const firstNonDisabled = opt.options.find((i) => !i.disabled)\n if (firstNonDisabled) {\n found = firstNonDisabled\n break\n }\n } else {\n if (!opt.disabled) {\n found = opt\n break\n }\n }\n }\n\n return found\n}\n\nconst getOptionByValue = <T extends Option>(options: Options<T>, value: string): T | undefined => {\n let found: T | undefined\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const exists = opt.options.find((i) => i.value === value)\n if (exists) {\n found = exists\n break\n }\n } else {\n if (opt.value === value) {\n found = opt\n break\n }\n }\n }\n\n return found\n}\n\nconst getOptionsByValues = <T extends Option>(options: Options<T>, values: string[]): T[] => {\n let found: T[] = []\n const lookup = new Set(values)\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n const exists = opt.options.filter((i) => lookup.has(i.value))\n found = found.concat(exists)\n } else {\n if (lookup.has(opt.value)) {\n found.push(opt)\n }\n }\n }\n\n return found\n}\n\nconst MAX_DOM_CRAWLS = 40\n\nconst findOptionByValue = (currentValue: string, container: HTMLElement) =>\n container.querySelector(`[data-option-id=\"${CSS.escape(currentValue)}\"]`)\n\nconst isValidOptionNode = (node: Element) => node.matches(\"[data-option-id]:not([data-disabled])\")\n\n// Steps from the current option to the nearest enabled one, one option row at a\n// time in document order: across groups (siblings would stop at a group's\n// edge), skipping disabled rows, at most MAX_DOM_CRAWLS rows away\nconst findAdjacentOption = (currentValue: string, container: HTMLElement, step: 1 | -1) => {\n const currentOption = findOptionByValue(currentValue, container)\n const rows = Array.from(container.querySelectorAll(\"[data-option-id]\"))\n\n let index = currentOption ? rows.indexOf(currentOption) : -1\n if (index === -1) {\n return undefined\n }\n\n for (let maxSteps = 0; maxSteps < MAX_DOM_CRAWLS; maxSteps += 1) {\n index += step\n const nextNode = rows[index]\n\n if (!nextNode) {\n return undefined\n }\n\n if (isValidOptionNode(nextNode)) {\n return nextNode\n }\n }\n}\n\nconst findNextOption = (currentValue: string, container: HTMLElement) =>\n findAdjacentOption(currentValue, container, 1)\n\nconst findPreviousOption = (currentValue: string, container: HTMLElement) =>\n findAdjacentOption(currentValue, container, -1)\n\nconst createTypeahead = () => {\n let currentValue: string = \"\"\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n\n return (char: string) => {\n // Searching is case-insensitive\n char = char.toLowerCase()\n\n // Add the new character to the current value\n currentValue += char\n\n // Clear the previous timeout if there was one\n if (timeoutId) clearTimeout(timeoutId)\n\n // Reset the value after a brief delay\n timeoutId = setTimeout(() => {\n currentValue = \"\"\n }, 500)\n\n // When a user is typing the same value, like \"llll\", assume they are cycling through items starting with \"l\"\n const isCycling = char.repeat(currentValue.length) === currentValue\n\n // Return the typeahead value\n return isCycling ? char : currentValue\n }\n}\n\nconst isValidTypeaheadChar = (char: string): boolean => /^[a-zA-Z0-9]$/.test(char)\n\n// A shortcut (Ctrl+C, Cmd+A, Alt+letter) or a key another handler took is not typeahead\nconst isTypeaheadKey = (evt: KeyboardEvent): boolean =>\n isValidTypeaheadChar(evt.key) && !evt.ctrlKey && !evt.metaKey && !evt.altKey && !evt.defaultPrevented\n\nconst resolveElement = (instance: unknown): HTMLElement | null => {\n const node = instance && typeof instance === \"object\" && \"$el\" in instance ? (instance as { $el: unknown }).$el : instance\n // A multi-root component's $el is the text node opening its fragment; the\n // element follows it (as in Reka)\n const element = node instanceof Text ? node.nextElementSibling : node\n return element instanceof HTMLElement ? element : null\n}\n\nconst getTypeaheadOption = <T extends Option>(\n options: Options<T>,\n typeaheadValue: string,\n currentHighlightValue?: string,\n): T | undefined => {\n // Ensure options actually exist\n if (!options.length) {\n return undefined\n }\n\n let matchBeforeHighlight: T | undefined\n // If we aren't provided a highlighted value, start from the top (e.g., act like it's found)\n let foundHighlightedValue: boolean = !currentHighlightValue\n\n const optionValidAndMatches = ({ disabled, label, value }: T) => {\n // Side effect of looping\n if (value === currentHighlightValue) {\n foundHighlightedValue = true\n // Don't return highlighted value\n return false\n }\n\n return !disabled && label.toLowerCase().startsWith(typeaheadValue)\n }\n\n for (const opt of options) {\n if (isOptionGroup(opt)) {\n for (const option of opt.options) {\n if (optionValidAndMatches(option)) {\n if (foundHighlightedValue) {\n // We're done after we've found an after match, in any group\n return option\n } else {\n // Keep the first found \"before\" match\n matchBeforeHighlight = matchBeforeHighlight || option\n }\n }\n }\n } else {\n if (optionValidAndMatches(opt)) {\n if (foundHighlightedValue) {\n // We're done after we've found an after match\n return opt\n } else {\n // Keep the first found \"before\" match\n matchBeforeHighlight = matchBeforeHighlight || opt\n }\n }\n }\n }\n\n return matchBeforeHighlight\n}\n\ntype SelectOwnProps = InstanceType<typeof SelectComponent>[\"$props\"]\n\ntype SingleSelectProps = {\n /** Determines if the select should support multiple selection. @default false */\n multiple?: false\n /** Selected value. Bind `v-model:value`. */\n value: string\n onChange?: (option: Option) => void\n \"onUpdate:value\"?: (value: string) => void\n}\n\ntype MultiSelectProps = {\n /** Determines if the select should support multiple selection. @default false */\n multiple: true\n /** Selected values. Bind `v-model:value`. */\n value: string[]\n onChange?: (options: Option[]) => void\n \"onUpdate:value\"?: (value: string[]) => void\n}\n\n/** As in React, `multiple` decides the type of `value` and of the `change` and `update:value` payloads. */\nexport type SelectProps = Omit<SelectOwnProps, \"multiple\" | \"value\" | \"onChange\" | \"onUpdate:value\"> &\n (SingleSelectProps | MultiSelectProps)\n\n/**\n * Select dropdown with option groups, descriptions, search (over 15\n * options), multiple selection and actions. Bind `v-model:value`.\n */\nexport const Select = SelectComponent as typeof SelectComponent & { new (): { $props: SelectProps } }\n"]}