@kingsy/headlessui-vue 1.7.23-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/components/combobox/combobox.d.ts +323 -0
- package/dist/components/combobox/combobox.js +1 -0
- package/dist/components/description/description.d.ts +32 -0
- package/dist/components/description/description.js +1 -0
- package/dist/components/dialog/dialog.d.ts +202 -0
- package/dist/components/dialog/dialog.js +1 -0
- package/dist/components/disclosure/disclosure.d.ts +105 -0
- package/dist/components/disclosure/disclosure.js +1 -0
- package/dist/components/focus-trap/focus-trap.d.ts +151 -0
- package/dist/components/focus-trap/focus-trap.js +1 -0
- package/dist/components/label/label.d.ts +41 -0
- package/dist/components/label/label.js +1 -0
- package/dist/components/listbox/listbox.d.ts +229 -0
- package/dist/components/listbox/listbox.js +1 -0
- package/dist/components/menu/menu.d.ts +131 -0
- package/dist/components/menu/menu.js +1 -0
- package/dist/components/popover/popover.d.ts +151 -0
- package/dist/components/popover/popover.js +1 -0
- package/dist/components/portal/portal.d.ts +45 -0
- package/dist/components/portal/portal.js +1 -0
- package/dist/components/radio-group/radio-group.d.ts +184 -0
- package/dist/components/radio-group/radio-group.js +1 -0
- package/dist/components/switch/switch.d.ts +166 -0
- package/dist/components/switch/switch.js +1 -0
- package/dist/components/tabs/tabs.d.ts +177 -0
- package/dist/components/tabs/tabs.js +1 -0
- package/dist/components/transitions/transition.d.ts +234 -0
- package/dist/components/transitions/transition.js +1 -0
- package/dist/components/transitions/utils/transition.d.ts +5 -0
- package/dist/components/transitions/utils/transition.js +1 -0
- package/dist/headlessui.dev.cjs +8042 -0
- package/dist/headlessui.esm.js +1 -0
- package/dist/headlessui.esm.js.map +7 -0
- package/dist/headlessui.prod.cjs +7 -0
- package/dist/hooks/__mocks__/use-id.d.ts +1 -0
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +1 -0
- package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
- package/dist/hooks/document-overflow/handle-ios-locking.js +1 -0
- package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
- package/dist/hooks/document-overflow/overflow-store.js +1 -0
- package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
- package/dist/hooks/document-overflow/prevent-scroll.js +1 -0
- package/dist/hooks/document-overflow/use-document-overflow.d.ts +3 -0
- package/dist/hooks/document-overflow/use-document-overflow.js +1 -0
- package/dist/hooks/use-controllable.d.ts +2 -0
- package/dist/hooks/use-controllable.js +1 -0
- package/dist/hooks/use-disposables.d.ts +25 -0
- package/dist/hooks/use-disposables.js +1 -0
- package/dist/hooks/use-document-event.d.ts +2 -0
- package/dist/hooks/use-document-event.js +1 -0
- package/dist/hooks/use-event-listener.d.ts +1 -0
- package/dist/hooks/use-event-listener.js +1 -0
- package/dist/hooks/use-frame-debounce.d.ts +8 -0
- package/dist/hooks/use-frame-debounce.js +1 -0
- package/dist/hooks/use-id.d.ts +1 -0
- package/dist/hooks/use-id.js +1 -0
- package/dist/hooks/use-inert.d.ts +2 -0
- package/dist/hooks/use-inert.js +1 -0
- package/dist/hooks/use-outside-click.d.ts +6 -0
- package/dist/hooks/use-outside-click.js +1 -0
- package/dist/hooks/use-resolve-button-type.d.ts +5 -0
- package/dist/hooks/use-resolve-button-type.js +1 -0
- package/dist/hooks/use-root-containers.d.ts +19 -0
- package/dist/hooks/use-root-containers.js +1 -0
- package/dist/hooks/use-store.d.ts +2 -0
- package/dist/hooks/use-store.js +1 -0
- package/dist/hooks/use-tab-direction.d.ts +5 -0
- package/dist/hooks/use-tab-direction.js +1 -0
- package/dist/hooks/use-text-value.d.ts +2 -0
- package/dist/hooks/use-text-value.js +1 -0
- package/dist/hooks/use-tracked-pointer.d.ts +4 -0
- package/dist/hooks/use-tracked-pointer.js +1 -0
- package/dist/hooks/use-tree-walker.d.ts +9 -0
- package/dist/hooks/use-tree-walker.js +1 -0
- package/dist/hooks/use-window-event.d.ts +2 -0
- package/dist/hooks/use-window-event.js +1 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1 -0
- package/dist/internal/dom-containers.d.ts +1 -0
- package/dist/internal/dom-containers.js +1 -0
- package/dist/internal/focus-sentinel.d.ts +13 -0
- package/dist/internal/focus-sentinel.js +1 -0
- package/dist/internal/hidden.d.ts +32 -0
- package/dist/internal/hidden.js +1 -0
- package/dist/internal/open-closed.d.ts +10 -0
- package/dist/internal/open-closed.js +1 -0
- package/dist/internal/portal-force-root.d.ts +27 -0
- package/dist/internal/portal-force-root.js +1 -0
- package/dist/internal/stack-context.d.ts +14 -0
- package/dist/internal/stack-context.js +1 -0
- package/dist/keyboard.d.ts +16 -0
- package/dist/keyboard.js +1 -0
- package/dist/mouse.d.ts +4 -0
- package/dist/mouse.js +1 -0
- package/dist/utils/active-element-history.d.ts +1 -0
- package/dist/utils/active-element-history.js +1 -0
- package/dist/utils/calculate-active-index.d.ts +25 -0
- package/dist/utils/calculate-active-index.js +1 -0
- package/dist/utils/disposables.d.ts +12 -0
- package/dist/utils/disposables.js +1 -0
- package/dist/utils/document-ready.d.ts +1 -0
- package/dist/utils/document-ready.js +1 -0
- package/dist/utils/dom.d.ts +4 -0
- package/dist/utils/dom.js +1 -0
- package/dist/utils/env.d.ts +13 -0
- package/dist/utils/env.js +1 -0
- package/dist/utils/focus-management.d.ts +38 -0
- package/dist/utils/focus-management.js +1 -0
- package/dist/utils/form.d.ts +4 -0
- package/dist/utils/form.js +1 -0
- package/dist/utils/get-text-value.d.ts +1 -0
- package/dist/utils/get-text-value.js +1 -0
- package/dist/utils/match.d.ts +1 -0
- package/dist/utils/match.js +1 -0
- package/dist/utils/micro-task.d.ts +1 -0
- package/dist/utils/micro-task.js +1 -0
- package/dist/utils/once.d.ts +1 -0
- package/dist/utils/once.js +1 -0
- package/dist/utils/owner.d.ts +2 -0
- package/dist/utils/owner.js +1 -0
- package/dist/utils/pipeline.d.ts +4 -0
- package/dist/utils/pipeline.js +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.js +1 -0
- package/dist/utils/render.d.ts +39 -0
- package/dist/utils/render.js +4 -0
- package/dist/utils/resolve-prop-value.d.ts +1 -0
- package/dist/utils/resolve-prop-value.js +1 -0
- package/dist/utils/store.d.ts +11 -0
- package/dist/utils/store.js +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/@tanstack/virtual-core/src/utils.ts", "../../../node_modules/@tanstack/virtual-core/src/index.ts", "../../../node_modules/@tanstack/vue-virtual/src/index.ts", "../src/components/combobox/combobox.ts", "../src/hooks/use-controllable.ts", "../src/hooks/use-disposables.ts", "../src/utils/micro-task.ts", "../src/utils/disposables.ts", "../src/hooks/use-frame-debounce.ts", "../src/hooks/use-id.ts", "../src/hooks/use-outside-click.ts", "../src/utils/dom.ts", "../src/utils/focus-management.ts", "../src/utils/match.ts", "../src/utils/env.ts", "../src/utils/owner.ts", "../src/utils/platform.ts", "../src/hooks/use-document-event.ts", "../src/hooks/use-window-event.ts", "../src/hooks/use-resolve-button-type.ts", "../src/hooks/use-tracked-pointer.ts", "../src/hooks/use-tree-walker.ts", "../src/internal/hidden.ts", "../src/utils/render.ts", "../src/internal/open-closed.ts", "../src/utils/document-ready.ts", "../src/utils/active-element-history.ts", "../src/utils/calculate-active-index.ts", "../src/utils/form.ts", "../src/components/dialog/dialog.ts", "../src/components/focus-trap/focus-trap.ts", "../src/hooks/use-event-listener.ts", "../src/hooks/use-tab-direction.ts", "../src/hooks/document-overflow/use-document-overflow.ts", "../src/hooks/use-store.ts", "../src/utils/store.ts", "../src/hooks/document-overflow/adjust-scrollbar-padding.ts", "../src/hooks/document-overflow/handle-ios-locking.ts", "../src/hooks/document-overflow/prevent-scroll.ts", "../src/hooks/document-overflow/overflow-store.ts", "../src/hooks/use-inert.ts", "../src/hooks/use-root-containers.ts", "../src/internal/portal-force-root.ts", "../src/internal/stack-context.ts", "../src/components/description/description.ts", "../src/components/portal/portal.ts", "../src/components/disclosure/disclosure.ts", "../src/components/listbox/listbox.ts", "../src/hooks/use-text-value.ts", "../src/utils/get-text-value.ts", "../src/components/menu/menu.ts", "../src/components/popover/popover.ts", "../src/components/radio-group/radio-group.ts", "../src/components/label/label.ts", "../src/components/switch/switch.ts", "../src/components/tabs/tabs.ts", "../src/internal/focus-sentinel.ts", "../src/components/transitions/transition.ts", "../src/utils/once.ts", "../src/components/transitions/utils/transition.ts"],
|
|
4
|
+
"sourcesContent": ["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends ReadonlyArray<any>, TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => boolean\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n function memoizedFunction(): TResult {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result\n }\n\n // Attach updateDeps to the function itself\n memoizedFunction.updateDeps = (newDeps: [...TDeps]) => {\n deps = newDeps\n }\n\n return memoizedFunction\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\nexport const debounce = (\n targetWindow: Window & typeof globalThis,\n fn: Function,\n ms: number,\n) => {\n let timeoutId: number\n return function (this: any, ...args: Array<any>) {\n targetWindow.clearTimeout(timeoutId)\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms)\n }\n}\n", "import { approxEqual, debounce, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string | bigint\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\nexport interface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n if (!targetWindow.ResizeObserver) {\n return () => {}\n }\n\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n }\n\n instance.options.useAnimationFrameWithResizeObserver\n ? requestAnimationFrame(run)\n : run()\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nconst addEventListenerOptions = {\n passive: true,\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, addEventListenerOptions)\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nconst supportsScrollend =\n typeof window == 'undefined' ? true : 'onscrollend' in window\n\ntype ObserveOffsetCallBack = (offset: number, isScrolling: boolean) => void\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: ObserveOffsetCallBack,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n let offset = 0\n const fallback =\n instance.options.useScrollendEvent && supportsScrollend\n ? () => undefined\n : debounce(\n targetWindow,\n () => {\n cb(offset, false)\n },\n instance.options.isScrollingResetDelay,\n )\n\n const createHandler = (isScrolling: boolean) => () => {\n const { horizontal, isRtl } = instance.options\n offset = horizontal\n ? element['scrollLeft'] * ((isRtl && -1) || 1)\n : element['scrollTop']\n fallback()\n cb(offset, isScrolling)\n }\n const handler = createHandler(true)\n const endHandler = createHandler(false)\n endHandler()\n\n element.addEventListener('scroll', handler, addEventListenerOptions)\n const registerScrollendEvent =\n instance.options.useScrollendEvent && supportsScrollend\n if (registerScrollendEvent) {\n element.addEventListener('scrollend', endHandler, addEventListenerOptions)\n }\n return () => {\n element.removeEventListener('scroll', handler)\n if (registerScrollendEvent) {\n element.removeEventListener('scrollend', endHandler)\n }\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: ObserveOffsetCallBack,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n let offset = 0\n const fallback =\n instance.options.useScrollendEvent && supportsScrollend\n ? () => undefined\n : debounce(\n targetWindow,\n () => {\n cb(offset, false)\n },\n instance.options.isScrollingResetDelay,\n )\n\n const createHandler = (isScrolling: boolean) => () => {\n offset = element[instance.options.horizontal ? 'scrollX' : 'scrollY']\n fallback()\n cb(offset, isScrolling)\n }\n const handler = createHandler(true)\n const endHandler = createHandler(false)\n endHandler()\n\n element.addEventListener('scroll', handler, addEventListenerOptions)\n const registerScrollendEvent =\n instance.options.useScrollendEvent && supportsScrollend\n if (registerScrollendEvent) {\n element.addEventListener('scrollend', endHandler, addEventListenerOptions)\n }\n return () => {\n element.removeEventListener('scroll', handler)\n if (registerScrollendEvent) {\n element.removeEventListener('scrollend', endHandler)\n }\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: ObserveOffsetCallBack,\n ) => void | (() => void)\n // Optional\n debug?: boolean\n initialRect?: Rect\n onChange?: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n sync: boolean,\n ) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number | (() => number)\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => Array<number>\n scrollMargin?: number\n gap?: number\n indexAttribute?: string\n initialMeasurementsCache?: Array<VirtualItem>\n lanes?: number\n isScrollingResetDelay?: number\n useScrollendEvent?: boolean\n enabled?: boolean\n isRtl?: boolean\n useAnimationFrameWithResizeObserver?: boolean\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: Array<void | (() => void)> = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n targetWindow: (Window & typeof globalThis) | null = null\n isScrolling = false\n private scrollToIndexTimeoutId: number | null = null\n measurementsCache: Array<VirtualItem> = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: Array<number> = []\n scrollRect: Rect | null = null\n scrollOffset: number | null = null\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments = 0\n shouldAdjustScrollPositionOnItemSizeChange:\n | undefined\n | ((\n item: VirtualItem,\n delta: number,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => boolean)\n elementsCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n }\n\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null\n }\n\n return (_ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target as TItemElement, entry)\n }\n this.options.useAnimationFrameWithResizeObserver\n ? requestAnimationFrame(run)\n : run()\n })\n }))\n }\n\n return {\n disconnect: () => {\n get()?.disconnect()\n _ro = null\n },\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } | null = null\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts,\n }\n }\n\n private notify = (sync: boolean) => {\n this.options.onChange?.(this, sync)\n }\n\n private maybeNotify = memo(\n () => {\n this.calculateRange()\n\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ]\n },\n (isScrolling) => {\n this.notify(isScrolling)\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ] as [boolean, number | null, number | null],\n },\n )\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.observer.disconnect()\n this.scrollElement = null\n this.targetWindow = null\n }\n\n _didMount = () => {\n return () => {\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.enabled\n ? this.options.getScrollElement()\n : null\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n if (!scrollElement) {\n this.maybeNotify()\n return\n }\n\n this.scrollElement = scrollElement\n\n if (this.scrollElement && 'ownerDocument' in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView\n } else {\n this.targetWindow = this.scrollElement?.window ?? null\n }\n\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached)\n })\n\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0\n this.scrollDirection = isScrolling\n ? this.getScrollOffset() < offset\n ? 'forward'\n : 'backward'\n : null\n this.scrollOffset = offset\n this.isScrolling = isScrolling\n\n this.maybeNotify()\n }),\n )\n }\n }\n\n private getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null\n return 0\n }\n\n this.scrollRect = this.scrollRect ?? this.options.initialRect\n\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null\n return 0\n }\n\n this.scrollOffset =\n this.scrollOffset ??\n (typeof this.options.initialOffset === 'function'\n ? this.options.initialOffset()\n : this.options.initialOffset)\n\n return this.scrollOffset\n }\n\n private getFurthestMeasurement = (\n measurements: Array<VirtualItem>,\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index\n }\n\n return a.end - b.end\n })[0]\n : undefined\n }\n\n private getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n }\n },\n {\n key: false,\n },\n )\n\n private getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n (\n { count, paddingStart, scrollMargin, getItemKey, enabled },\n itemSizeCache,\n ) => {\n if (!enabled) {\n this.measurementsCache = []\n this.itemSizeCache.clear()\n return []\n }\n\n if (this.measurementsCache.length === 0) {\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n }\n\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end + this.options.gap\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes,\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return (this.range =\n measurements.length > 0 && outerSize > 0\n ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes,\n })\n : null)\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualIndexes = memo(\n () => {\n let startIndex: number | null = null\n let endIndex: number | null = null\n const range = this.calculateRange()\n if (range) {\n startIndex = range.startIndex\n endIndex = range.endIndex\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex])\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex,\n ]\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null\n ? []\n : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getVirtualIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n const key = item.key\n const prevNode = this.elementsCache.get(key)\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.elementsCache.set(key, node)\n }\n\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this))\n }\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (\n this.shouldAdjustScrollPositionOnItemSizeChange !== undefined\n ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this)\n : item.start < this.getScrollOffset() + this.scrollAdjustments\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(item.index)\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size))\n\n this.notify(false)\n }\n }\n\n measureElement = (node: TItemElement | null | undefined) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached)\n this.elementsCache.delete(key)\n }\n })\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: Array<VirtualItem> = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getVirtualItems',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n if (measurements.length === 0) {\n return undefined\n }\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (\n toOffset: number,\n align: ScrollAlignment,\n itemSize = 0,\n ) => {\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n if (align === 'auto') {\n align = toOffset >= scrollOffset + size ? 'end' : 'start'\n }\n\n if (align === 'center') {\n // When aligning to a particular item (e.g. with scrollToIndex),\n // adjust offset by the size of the item to center on the item\n toOffset += (itemSize - size) / 2\n } else if (align === 'end') {\n toOffset -= size\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - size\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const item = this.measurementsCache[index]\n if (!item) {\n return undefined\n }\n\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n if (align === 'auto') {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = 'start'\n } else {\n return [scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? item.end + this.options.scrollPaddingEnd\n : item.start - this.options.scrollPaddingStart\n\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align,\n ] as const\n }\n\n private isDynamicMode = () => this.elementsCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null && this.targetWindow) {\n this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const offsetAndAlign = this.getOffsetForIndex(index, initialAlign)\n if (!offsetAndAlign) return\n\n const [offset, align] = offsetAndAlign\n\n this._scrollToOffset(offset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode() && this.targetWindow) {\n this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.elementsCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [latestOffset] = notUndefined(\n this.getOffsetForIndex(index, align),\n )\n\n if (!approxEqual(latestOffset, this.getScrollOffset())) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () => {\n const measurements = this.getMeasurements()\n\n let end: number\n // If there are no measurements, set the end to paddingStart\n // If there is only one lane, use the last measurement's end\n // Otherwise find the maximum end value among all measurements\n if (measurements.length === 0) {\n end = this.options.paddingStart\n } else if (this.options.lanes === 1) {\n end = measurements[measurements.length - 1]?.end ?? 0\n } else {\n const endByLane = Array<number | null>(this.options.lanes).fill(null)\n let endIndex = measurements.length - 1\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex]!\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end\n }\n\n endIndex--\n }\n\n end = Math.max(...endByLane.filter((val): val is number => val !== null))\n }\n\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0,\n )\n }\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify(false)\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes,\n}: {\n measurements: Array<VirtualItem>\n outerSize: number\n scrollOffset: number\n lanes: number\n}) {\n const lastIndex = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n // handle case when item count is less than or equal to lanes\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex,\n }\n }\n\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset,\n )\n let endIndex = startIndex\n\n if (lanes === 1) {\n while (\n endIndex < lastIndex &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n } else if (lanes > 1) {\n // Expand forward until we include the visible items from all lanes\n // which are closer to the end of the virtualizer window\n const endPerLane = Array(lanes).fill(0)\n while (\n endIndex < lastIndex &&\n endPerLane.some((pos) => pos < scrollOffset + outerSize)\n ) {\n const item = measurements[endIndex]!\n endPerLane[item.lane] = item.end\n endIndex++\n }\n\n // Expand backward until we include all lanes' visible items\n // closer to the top\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize)\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex]!\n startPerLane[item.lane] = item.start\n startIndex--\n }\n\n // Align startIndex to the beginning of its lane\n startIndex = Math.max(0, startIndex - (startIndex % lanes))\n // Align endIndex to the end of its lane\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - (endIndex % lanes)))\n }\n\n return { startIndex, endIndex }\n}\n", "import {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll,\n} from '@tanstack/virtual-core'\nimport {\n computed,\n onScopeDispose,\n shallowRef,\n triggerRef,\n unref,\n watch,\n} from 'vue'\nimport type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core'\nimport type { Ref } from 'vue'\n\nexport * from '@tanstack/virtual-core'\n\ntype MaybeRef<T> = T | Ref<T>\n\nfunction useVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>(\n options: MaybeRef<VirtualizerOptions<TScrollElement, TItemElement>>,\n): Ref<Virtualizer<TScrollElement, TItemElement>> {\n const virtualizer = new Virtualizer(unref(options))\n const state = shallowRef(virtualizer)\n\n const cleanup = virtualizer._didMount()\n\n watch(\n () => unref(options).getScrollElement(),\n (el) => {\n if (el) {\n virtualizer._willUpdate()\n }\n },\n {\n immediate: true,\n },\n )\n\n watch(\n () => unref(options),\n (options) => {\n virtualizer.setOptions({\n ...options,\n onChange: (instance, sync) => {\n triggerRef(state)\n options.onChange?.(instance, sync)\n },\n })\n\n virtualizer._willUpdate()\n triggerRef(state)\n },\n {\n immediate: true,\n },\n )\n\n onScopeDispose(cleanup)\n\n return state\n}\n\nexport function useVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: MaybeRef<\n PartialKeys<\n VirtualizerOptions<TScrollElement, TItemElement>,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n >\n >,\n): Ref<Virtualizer<TScrollElement, TItemElement>> {\n return useVirtualizerBase<TScrollElement, TItemElement>(\n computed(() => ({\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n ...unref(options),\n })),\n )\n}\n\nexport function useWindowVirtualizer<TItemElement extends Element>(\n options: MaybeRef<\n PartialKeys<\n VirtualizerOptions<Window, TItemElement>,\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n | 'getScrollElement'\n >\n >,\n): Ref<Virtualizer<Window, TItemElement>> {\n return useVirtualizerBase<Window, TItemElement>(\n computed(() => ({\n getScrollElement: () => (typeof document !== 'undefined' ? window : null),\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () =>\n typeof document !== 'undefined' ? window.scrollY : 0,\n ...unref(options),\n })),\n )\n}\n", "import type { Virtualizer } from '@tanstack/virtual-core'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport {\n Fragment,\n cloneVNode,\n computed,\n defineComponent,\n h,\n inject,\n nextTick,\n onMounted,\n onUnmounted,\n provide,\n reactive,\n ref,\n toRaw,\n watch,\n watchEffect,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n type UnwrapNestedRefs,\n} from 'vue'\nimport { useControllable } from '../../hooks/use-controllable'\nimport { useFrameDebounce } from '../../hooks/use-frame-debounce'\nimport { useId } from '../../hooks/use-id'\nimport { useOutsideClick } from '../../hooks/use-outside-click'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { useTrackedPointer } from '../../hooks/use-tracked-pointer'\nimport { useTreeWalker } from '../../hooks/use-tree-walker'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { State, useOpenClosed, useOpenClosedProvider } from '../../internal/open-closed'\nimport { Keys } from '../../keyboard'\nimport { MouseButton } from '../../mouse'\nimport { history } from '../../utils/active-element-history'\nimport { Focus, calculateActiveIndex } from '../../utils/calculate-active-index'\nimport { disposables } from '../../utils/disposables'\nimport { dom } from '../../utils/dom'\nimport { sortByDomNode } from '../../utils/focus-management'\nimport { objectToFormEntries } from '../../utils/form'\nimport { match } from '../../utils/match'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { isMobile } from '../../utils/platform'\nimport { Features, compact, omit, render } from '../../utils/render'\n\nfunction defaultComparator<T>(a: T, z: T): boolean {\n return a === z\n}\n\nenum ComboboxStates {\n Open,\n Closed,\n}\n\nenum ValueMode {\n Single,\n Multi,\n}\n\nenum ActivationTrigger {\n Pointer,\n Focus,\n Other,\n}\n\ntype ComboboxOptionData = {\n disabled: boolean\n value: unknown\n domRef: Ref<HTMLElement | null>\n order: Ref<number | null>\n}\ntype StateDefinition = {\n // State\n comboboxState: Ref<ComboboxStates>\n value: ComputedRef<unknown>\n defaultValue: ComputedRef<unknown>\n\n mode: ComputedRef<ValueMode>\n nullable: ComputedRef<boolean>\n immediate: ComputedRef<boolean>\n\n virtual: ComputedRef<{\n options: unknown[]\n disabled: (value: unknown) => boolean\n } | null>\n calculateIndex(value: unknown): number\n isSelected(value: unknown): boolean\n isActive(value: unknown): boolean\n\n compare: (a: unknown, z: unknown) => boolean\n\n optionsPropsRef: Ref<{ static: boolean; hold: boolean }>\n\n labelRef: Ref<HTMLLabelElement | null>\n inputRef: Ref<HTMLInputElement | null>\n buttonRef: Ref<HTMLButtonElement | null>\n optionsRef: Ref<HTMLDivElement | null>\n\n disabled: Ref<boolean>\n options: Ref<{ id: string; dataRef: ComputedRef<ComboboxOptionData> }[]>\n activeOptionIndex: Ref<number | null>\n activationTrigger: Ref<ActivationTrigger>\n\n // State mutators\n closeCombobox(): void\n openCombobox(): void\n setActivationTrigger(trigger: ActivationTrigger): void\n goToOption(focus: Focus, idx?: number, trigger?: ActivationTrigger): void\n change(value: unknown): void\n selectOption(id: string): void\n selectActiveOption(): void\n registerOption(id: string, dataRef: ComputedRef<ComboboxOptionData>): void\n unregisterOption(id: string, active: boolean): void\n select(value: unknown): void\n}\n\nlet ComboboxContext = Symbol('ComboboxContext') as InjectionKey<StateDefinition>\n\nfunction useComboboxContext(component: string) {\n let context = inject(ComboboxContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <Combobox /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useComboboxContext)\n throw err\n }\n\n return context\n}\n\n// ---\n\nlet VirtualContext = Symbol('VirtualContext') as InjectionKey<Ref<Virtualizer<any, any>> | null>\n\nlet VirtualProvider = defineComponent({\n name: 'VirtualProvider',\n setup(_, { slots }) {\n let api = useComboboxContext('VirtualProvider')\n\n let padding = computed(() => {\n let el = dom(api.optionsRef)\n if (!el) return { start: 0, end: 0 }\n\n let styles = window.getComputedStyle(el)\n\n return {\n start: parseFloat(styles.paddingBlockStart || styles.paddingTop),\n end: parseFloat(styles.paddingBlockEnd || styles.paddingBottom),\n }\n })\n\n let virtualizer = useVirtualizer<HTMLDivElement, HTMLLIElement>(\n // @ts-expect-error TODO: Drop when using `pnpm` and `@tanstack/virtual-vue`\n // has been rolled back to the older version.\n computed(() => {\n return {\n scrollPaddingStart: padding.value.start,\n scrollPaddingEnd: padding.value.end,\n count: api.virtual.value!.options.length,\n estimateSize() {\n return 40\n },\n getScrollElement() {\n return dom(api.optionsRef)\n },\n overscan: 12,\n }\n })\n )\n\n let options = computed(() => api.virtual.value?.options)\n let baseKey = ref(0)\n watch([options], () => {\n baseKey.value += 1\n })\n\n // @ts-expect-error TODO: Drop when using `pnpm` and `@tanstack/virtual-vue`\n // has been rolled back to the older version.\n provide(VirtualContext, api.virtual.value ? virtualizer : null)\n\n return () => {\n return [\n h(\n 'div',\n {\n style: {\n position: 'relative',\n width: '100%',\n height: `${virtualizer.value.getTotalSize()}px`,\n },\n ref: (el) => {\n if (!el) {\n return\n }\n\n // Do not scroll when the mouse/pointer is being used\n if (api.activationTrigger.value === ActivationTrigger.Pointer) {\n return\n }\n\n // Scroll to the active index\n if (\n api.activeOptionIndex.value !== null &&\n api.virtual.value!.options.length > api.activeOptionIndex.value\n ) {\n virtualizer.value.scrollToIndex(api.activeOptionIndex.value)\n }\n },\n },\n virtualizer.value.getVirtualItems().map((item) => {\n return cloneVNode(\n slots.default!({\n option: api.virtual.value!.options[item.index],\n open: api.comboboxState.value === ComboboxStates.Open,\n })![0],\n {\n key: `${baseKey.value}-${item.index}`,\n 'data-index': item.index,\n 'aria-setsize': api.virtual.value!.options.length,\n 'aria-posinset': item.index + 1,\n style: {\n position: 'absolute',\n top: 0,\n left: 0,\n transform: `translateY(${item.start}px)`,\n overflowAnchor: 'none',\n },\n }\n )\n })\n ),\n ]\n }\n },\n})\n\n// ---\n\nexport let Combobox = defineComponent({\n name: 'Combobox',\n emits: { 'update:modelValue': (_value: any) => true },\n props: {\n as: { type: [Object, String], default: 'template' },\n disabled: { type: [Boolean], default: false },\n by: { type: [String, Function], nullable: true, default: null },\n modelValue: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n default: undefined,\n },\n defaultValue: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n default: undefined,\n },\n form: { type: String, optional: true },\n name: { type: String, optional: true },\n nullable: { type: Boolean, default: false },\n multiple: { type: [Boolean], default: false },\n immediate: { type: [Boolean], default: false },\n virtual: {\n type: Object as PropType<null | {\n options: unknown[]\n disabled?: (value: unknown) => boolean\n }>,\n default: null,\n },\n },\n inheritAttrs: false,\n setup(props, { slots, attrs, emit }) {\n let comboboxState = ref<StateDefinition['comboboxState']['value']>(ComboboxStates.Closed)\n let labelRef = ref<StateDefinition['labelRef']['value']>(null)\n let inputRef = ref<StateDefinition['inputRef']['value']>(null) as StateDefinition['inputRef']\n let buttonRef = ref<StateDefinition['buttonRef']['value']>(null) as StateDefinition['buttonRef']\n let optionsRef = ref<StateDefinition['optionsRef']['value']>(\n null\n ) as StateDefinition['optionsRef']\n let optionsPropsRef = ref<StateDefinition['optionsPropsRef']['value']>({\n static: false,\n hold: false,\n }) as StateDefinition['optionsPropsRef']\n let options = ref<StateDefinition['options']['value']>([])\n let activeOptionIndex = ref<StateDefinition['activeOptionIndex']['value']>(null)\n let activationTrigger = ref<StateDefinition['activationTrigger']['value']>(\n ActivationTrigger.Other\n )\n let defaultToFirstOption = ref(false)\n\n function adjustOrderedState(\n adjustment: (\n options: UnwrapNestedRefs<StateDefinition['options']['value']>\n ) => UnwrapNestedRefs<StateDefinition['options']['value']> = (i) => i\n ) {\n let currentActiveOption =\n activeOptionIndex.value !== null ? options.value[activeOptionIndex.value] : null\n\n let list = adjustment(options.value.slice())\n\n let sortedOptions =\n list.length > 0 && list[0].dataRef.order.value !== null\n ? // Prefer sorting based on the `order`\n list.sort((a, z) => a.dataRef.order.value! - z.dataRef.order.value!)\n : // Fallback to much slower DOM order\n sortByDomNode(list, (option) => dom(option.dataRef.domRef))\n\n // If we inserted an option before the current active option then the active option index\n // would be wrong. To fix this, we will re-lookup the correct index.\n let adjustedActiveOptionIndex = currentActiveOption\n ? sortedOptions.indexOf(currentActiveOption)\n : null\n\n // Reset to `null` in case the currentActiveOption was removed.\n if (adjustedActiveOptionIndex === -1) {\n adjustedActiveOptionIndex = null\n }\n\n return {\n options: sortedOptions,\n activeOptionIndex: adjustedActiveOptionIndex,\n }\n }\n\n let mode = computed(() => (props.multiple ? ValueMode.Multi : ValueMode.Single))\n let nullable = computed(() => props.nullable)\n let [directValue, theirOnChange] = useControllable(\n computed(() => props.modelValue),\n (value: unknown) => emit('update:modelValue', value),\n computed(() => props.defaultValue)\n )\n\n let value = computed(() =>\n directValue.value === undefined\n ? match(mode.value, {\n [ValueMode.Multi]: [],\n [ValueMode.Single]: undefined,\n })\n : directValue.value\n )\n\n let goToOptionRaf: ReturnType<typeof requestAnimationFrame> | null = null\n let orderOptionsRaf: ReturnType<typeof requestAnimationFrame> | null = null\n\n function onChange(value: unknown) {\n return match(mode.value, {\n [ValueMode.Single]() {\n return theirOnChange?.(value)\n },\n [ValueMode.Multi]: () => {\n let copy = toRaw(api.value.value as unknown[]).slice()\n let raw = toRaw(value)\n\n let idx = copy.findIndex((value) => api.compare(raw, toRaw(value)))\n if (idx === -1) {\n copy.push(raw)\n } else {\n copy.splice(idx, 1)\n }\n\n return theirOnChange?.(copy)\n },\n })\n }\n\n let virtualOptions = computed(() => props.virtual?.options)\n watch([virtualOptions], ([newOptions], [oldOptions]) => {\n if (!api.virtual.value) return\n if (!newOptions) return\n if (!oldOptions) return\n\n if (activeOptionIndex.value !== null) {\n let idx = newOptions.indexOf(oldOptions[activeOptionIndex.value])\n if (idx !== -1) {\n activeOptionIndex.value = idx\n } else {\n activeOptionIndex.value = null\n }\n }\n })\n\n let api: StateDefinition = {\n comboboxState,\n value,\n mode,\n compare(a: any, z: any) {\n if (typeof props.by === 'string') {\n let property = props.by as unknown as any\n return a?.[property] === z?.[property]\n }\n\n if (props.by === null) {\n return defaultComparator(a, z)\n }\n\n return props.by(a, z)\n },\n calculateIndex(value: any) {\n if (api.virtual.value) {\n if (props.by === null) {\n return api.virtual.value!.options.indexOf(value)\n } else {\n return api.virtual.value!.options.findIndex((other) => api.compare(other, value))\n }\n } else {\n return options.value.findIndex((other) => api.compare(other.dataRef.value, value))\n }\n },\n defaultValue: computed(() => props.defaultValue),\n nullable,\n immediate: computed(() => props.immediate),\n virtual: computed(() => {\n return props.virtual\n ? {\n options: props.virtual.options,\n disabled: props.virtual.disabled ?? (() => false),\n }\n : null\n }),\n inputRef,\n labelRef,\n buttonRef,\n optionsRef,\n disabled: computed(() => props.disabled),\n // @ts-expect-error dateRef types are incorrect due to unwrapped or wrapped refs\n options,\n change(value: unknown) {\n theirOnChange(value as typeof props.modelValue)\n },\n activeOptionIndex: computed(() => {\n if (\n defaultToFirstOption.value &&\n activeOptionIndex.value === null &&\n (api.virtual.value ? api.virtual.value.options.length > 0 : options.value.length > 0)\n ) {\n if (api.virtual.value) {\n let localActiveOptionIndex = api.virtual.value.options.findIndex(\n (option) => !api.virtual.value?.disabled(option)\n )\n\n if (localActiveOptionIndex !== -1) {\n return localActiveOptionIndex\n }\n }\n\n let localActiveOptionIndex = options.value.findIndex((option) => !option.dataRef.disabled)\n if (localActiveOptionIndex !== -1) {\n return localActiveOptionIndex\n }\n }\n\n return activeOptionIndex.value\n }),\n activationTrigger,\n optionsPropsRef,\n closeCombobox() {\n defaultToFirstOption.value = false\n\n if (props.disabled) return\n if (comboboxState.value === ComboboxStates.Closed) return\n comboboxState.value = ComboboxStates.Closed\n activeOptionIndex.value = null\n },\n openCombobox() {\n defaultToFirstOption.value = true\n\n if (props.disabled) return\n if (comboboxState.value === ComboboxStates.Open) return\n\n // Check if we have a selected value that we can make active\n if (api.value.value) {\n let idx = api.calculateIndex(api.value.value)\n if (idx !== -1) {\n activeOptionIndex.value = idx\n }\n }\n\n comboboxState.value = ComboboxStates.Open\n },\n setActivationTrigger(trigger: ActivationTrigger) {\n activationTrigger.value = trigger\n },\n goToOption(focus: Focus, idx?: number, trigger?: ActivationTrigger) {\n defaultToFirstOption.value = false\n\n if (goToOptionRaf !== null) {\n cancelAnimationFrame(goToOptionRaf)\n }\n\n goToOptionRaf = requestAnimationFrame(() => {\n if (props.disabled) return\n if (\n optionsRef.value &&\n !optionsPropsRef.value.static &&\n comboboxState.value === ComboboxStates.Closed\n ) {\n return\n }\n\n if (api.virtual.value) {\n activeOptionIndex.value =\n focus === Focus.Specific\n ? idx!\n : calculateActiveIndex(\n { focus: focus as Exclude<Focus, Focus.Specific> },\n {\n resolveItems: () => api.virtual.value!.options,\n resolveActiveIndex: () => {\n return (\n api.activeOptionIndex.value ??\n api.virtual.value!.options.findIndex(\n (option) => !api.virtual.value?.disabled(option)\n ) ??\n null\n )\n },\n resolveDisabled: (item) => api.virtual.value!.disabled(item),\n resolveId() {\n throw new Error('Function not implemented.')\n },\n }\n )\n activationTrigger.value = trigger ?? ActivationTrigger.Other\n return\n }\n\n let adjustedState = adjustOrderedState()\n\n // It's possible that the activeOptionIndex is set to `null` internally, but\n // this means that we will fallback to the first non-disabled option by default.\n // We have to take this into account.\n if (adjustedState.activeOptionIndex === null) {\n let localActiveOptionIndex = adjustedState.options.findIndex(\n (option) => !option.dataRef.disabled\n )\n\n if (localActiveOptionIndex !== -1) {\n adjustedState.activeOptionIndex = localActiveOptionIndex\n }\n }\n\n let nextActiveOptionIndex =\n focus === Focus.Specific\n ? idx!\n : calculateActiveIndex(\n { focus: focus as Exclude<Focus, Focus.Specific> },\n {\n resolveItems: () => adjustedState.options,\n resolveActiveIndex: () => adjustedState.activeOptionIndex,\n resolveId: (option) => option.id,\n resolveDisabled: (option) => option.dataRef.disabled,\n }\n )\n\n activeOptionIndex.value = nextActiveOptionIndex\n activationTrigger.value = trigger ?? ActivationTrigger.Other\n options.value = adjustedState.options\n })\n },\n selectOption(id: string) {\n let option = options.value.find((item) => item.id === id)\n if (!option) return\n\n let { dataRef } = option\n\n onChange(dataRef.value)\n },\n selectActiveOption() {\n if (api.activeOptionIndex.value === null) return\n\n if (api.virtual.value) {\n onChange(api.virtual.value.options[api.activeOptionIndex.value])\n } else {\n let { dataRef } = options.value[api.activeOptionIndex.value]\n onChange(dataRef.value)\n }\n\n // It could happen that the `activeOptionIndex` stored in state is actually null,\n // but we are getting the fallback active option back instead.\n api.goToOption(Focus.Specific, api.activeOptionIndex.value)\n },\n registerOption(id: string, dataRef: ComputedRef<ComboboxOptionData>) {\n let option = reactive({ id, dataRef }) as unknown as {\n id: typeof id\n dataRef: (typeof dataRef)['value']\n }\n\n if (api.virtual.value) {\n options.value.push(option)\n return\n }\n\n if (orderOptionsRaf) cancelAnimationFrame(orderOptionsRaf)\n\n let adjustedState = adjustOrderedState((options) => {\n options.push(option)\n return options\n })\n\n // Check if we need to make the newly registered option active.\n if (activeOptionIndex.value === null) {\n if (api.isSelected(dataRef.value.value)) {\n adjustedState.activeOptionIndex = adjustedState.options.indexOf(option)\n }\n }\n\n options.value = adjustedState.options\n activeOptionIndex.value = adjustedState.activeOptionIndex\n activationTrigger.value = ActivationTrigger.Other\n\n // If some of the DOM elements aren't ready yet, then we can retry in the next tick.\n if (adjustedState.options.some((option) => !dom(option.dataRef.domRef))) {\n orderOptionsRaf = requestAnimationFrame(() => {\n let adjustedState = adjustOrderedState()\n options.value = adjustedState.options\n\n activeOptionIndex.value = adjustedState.activeOptionIndex\n })\n }\n },\n unregisterOption(id: string, active: boolean) {\n if (goToOptionRaf !== null) {\n cancelAnimationFrame(goToOptionRaf)\n }\n\n // When we are unregistering the currently active option, then we also have to make sure to\n // reset the `defaultToFirstOption` flag, so that visually something is selected and the\n // next time you press a key on your keyboard it will go to the proper next or previous\n // option in the list.\n //\n // Since this was the active option and it could have been anywhere in the list, resetting\n // to the very first option seems like a fine default. We _could_ be smarter about this by\n // going to the previous / next item in list if we know the direction of the keyboard\n // navigation, but that might be too complex/confusing from an end users perspective.\n if (active) {\n defaultToFirstOption.value = true\n }\n\n if (api.virtual.value) {\n options.value = options.value.filter((option) => option.id !== id)\n return\n }\n\n let adjustedState = adjustOrderedState((options) => {\n let idx = options.findIndex((option) => option.id === id)\n if (idx !== -1) options.splice(idx, 1)\n return options\n })\n\n options.value = adjustedState.options\n activeOptionIndex.value = adjustedState.activeOptionIndex\n activationTrigger.value = ActivationTrigger.Other\n },\n isSelected(other) {\n return match(mode.value, {\n [ValueMode.Single]: () => api.compare(toRaw(api.value.value), toRaw(other)),\n [ValueMode.Multi]: () =>\n (toRaw(api.value.value) as unknown[]).some((option) =>\n api.compare(toRaw(option), toRaw(other))\n ),\n })\n },\n isActive(other) {\n return activeOptionIndex.value === api.calculateIndex(other)\n },\n }\n\n // Handle outside click\n useOutsideClick(\n [inputRef, buttonRef, optionsRef],\n () => api.closeCombobox(),\n computed(() => comboboxState.value === ComboboxStates.Open)\n )\n\n provide(ComboboxContext, api)\n\n useOpenClosedProvider(\n computed(() =>\n match(comboboxState.value, {\n [ComboboxStates.Open]: State.Open,\n [ComboboxStates.Closed]: State.Closed,\n })\n )\n )\n\n let form = computed(() => dom(inputRef)?.closest('form'))\n onMounted(() => {\n watch(\n [form],\n () => {\n if (!form.value) return\n if (props.defaultValue === undefined) return\n\n function handle() {\n api.change(props.defaultValue)\n }\n\n form.value.addEventListener('reset', handle)\n\n return () => {\n form.value?.removeEventListener('reset', handle)\n }\n },\n { immediate: true }\n )\n })\n\n return () => {\n let { name, disabled, form, ...theirProps } = props\n let slot = {\n open: comboboxState.value === ComboboxStates.Open,\n disabled,\n activeIndex: api.activeOptionIndex.value,\n activeOption:\n api.activeOptionIndex.value === null\n ? null\n : api.virtual.value\n ? api.virtual.value.options[api.activeOptionIndex.value ?? 0]\n : api.options.value[api.activeOptionIndex.value]?.dataRef.value ?? null,\n value: value.value,\n }\n\n return h(Fragment, [\n ...(name != null && value.value != null\n ? objectToFormEntries({ [name]: value.value }).map(([name, value]) => {\n return h(\n Hidden,\n compact({\n features: HiddenFeatures.Hidden,\n key: name,\n as: 'input',\n type: 'hidden',\n hidden: true,\n readOnly: true,\n form,\n disabled,\n name,\n value,\n })\n )\n })\n : []),\n render({\n theirProps: {\n ...attrs,\n ...omit(theirProps, [\n 'by',\n 'defaultValue',\n 'immediate',\n 'modelValue',\n 'multiple',\n 'nullable',\n 'onUpdate:modelValue',\n 'virtual',\n ]),\n },\n ourProps: {},\n slot,\n slots,\n attrs,\n name: 'Combobox',\n }),\n ])\n }\n },\n})\n\n// ---\n\nexport let ComboboxLabel = defineComponent({\n name: 'ComboboxLabel',\n props: {\n as: { type: [Object, String], default: 'label' },\n id: { type: String, default: () => `headlessui-combobox-label-${useId()}` },\n },\n setup(props, { attrs, slots }) {\n let api = useComboboxContext('ComboboxLabel')\n\n function handleClick() {\n dom(api.inputRef)?.focus({ preventScroll: true })\n }\n\n return () => {\n let slot = {\n open: api.comboboxState.value === ComboboxStates.Open,\n disabled: api.disabled.value,\n }\n\n let { id, ...theirProps } = props\n let ourProps = { id, ref: api.labelRef, onClick: handleClick }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ComboboxLabel',\n })\n }\n },\n})\n\n// ---\n\nexport let ComboboxButton = defineComponent({\n name: 'ComboboxButton',\n props: {\n as: { type: [Object, String], default: 'button' },\n id: { type: String, default: () => `headlessui-combobox-button-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useComboboxContext('ComboboxButton')\n\n expose({ el: api.buttonRef, $el: api.buttonRef })\n\n function handleClick(event: MouseEvent) {\n if (api.disabled.value) return\n if (api.comboboxState.value === ComboboxStates.Open) {\n api.closeCombobox()\n } else {\n event.preventDefault()\n api.openCombobox()\n }\n\n nextTick(() => dom(api.inputRef)?.focus({ preventScroll: true }))\n }\n\n function handleKeydown(event: KeyboardEvent) {\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menu/#keyboard-interaction-12\n\n case Keys.ArrowDown:\n event.preventDefault()\n event.stopPropagation()\n if (api.comboboxState.value === ComboboxStates.Closed) {\n api.openCombobox()\n }\n nextTick(() => api.inputRef.value?.focus({ preventScroll: true }))\n return\n\n case Keys.ArrowUp:\n event.preventDefault()\n event.stopPropagation()\n if (api.comboboxState.value === ComboboxStates.Closed) {\n api.openCombobox()\n nextTick(() => {\n if (!api.value.value) {\n api.goToOption(Focus.Last)\n }\n })\n }\n nextTick(() => api.inputRef.value?.focus({ preventScroll: true }))\n return\n\n case Keys.Escape:\n if (api.comboboxState.value !== ComboboxStates.Open) return\n event.preventDefault()\n if (api.optionsRef.value && !api.optionsPropsRef.value.static) {\n event.stopPropagation()\n }\n api.closeCombobox()\n nextTick(() => api.inputRef.value?.focus({ preventScroll: true }))\n return\n }\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n api.buttonRef\n )\n\n return () => {\n let slot = {\n open: api.comboboxState.value === ComboboxStates.Open,\n disabled: api.disabled.value,\n value: api.value.value,\n }\n let { id, ...theirProps } = props\n let ourProps = {\n ref: api.buttonRef,\n id,\n type: type.value,\n tabindex: '-1',\n 'aria-haspopup': 'listbox',\n 'aria-controls': dom(api.optionsRef)?.id,\n 'aria-expanded': api.comboboxState.value === ComboboxStates.Open,\n 'aria-labelledby': api.labelRef.value ? [dom(api.labelRef)?.id, id].join(' ') : undefined,\n disabled: api.disabled.value === true ? true : undefined,\n onKeydown: handleKeydown,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ComboboxButton',\n })\n }\n },\n})\n\n// ---\n\nexport let ComboboxInput = defineComponent({\n name: 'ComboboxInput',\n props: {\n as: { type: [Object, String], default: 'input' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n displayValue: { type: Function as PropType<(item: unknown) => string> },\n defaultValue: { type: String, default: undefined },\n id: { type: String, default: () => `headlessui-combobox-input-${useId()}` },\n },\n emits: {\n change: (_value: Event & { target: HTMLInputElement }) => true,\n },\n setup(props, { emit, attrs, slots, expose }) {\n let api = useComboboxContext('ComboboxInput')\n let ownerDocument = computed(() => getOwnerDocument(dom(api.inputRef)))\n\n let isTyping = { value: false }\n\n expose({ el: api.inputRef, $el: api.inputRef })\n\n function clear() {\n api.change(null)\n let options = dom(api.optionsRef)\n if (options) {\n options.scrollTop = 0\n }\n api.goToOption(Focus.Nothing)\n }\n\n // When a `displayValue` prop is given, we should use it to transform the current selected\n // option(s) so that the format can be chosen by developers implementing this. This is useful if\n // your data is an object and you just want to pick a certain property or want to create a dynamic\n // value like `firstName + ' ' + lastName`.\n //\n // Note: This can also be used with multiple selected options, but this is a very simple transform\n // which should always result in a string (since we are filling in the value of the text input),\n // you don't have to use this at all, a more common UI is a \"tag\" based UI, which you can render\n // yourself using the selected option(s).\n let currentDisplayValue = computed(() => {\n let value = api.value.value\n if (!dom(api.inputRef)) return ''\n\n if (typeof props.displayValue !== 'undefined' && value !== undefined) {\n return props.displayValue(value as unknown) ?? ''\n } else if (typeof value === 'string') {\n return value\n } else {\n return ''\n }\n })\n\n onMounted(() => {\n // Syncing the input value has some rules attached to it to guarantee a smooth and expected user\n // experience:\n //\n // - When a user is not typing in the input field, it is safe to update the input value based on\n // the selected option(s). See `currentDisplayValue` computation from above.\n // - The value can be updated when:\n // - The `value` is set from outside of the component\n // - The `value` is set when the user uses their keyboard (confirm via enter or space)\n // - The `value` is set when the user clicks on a value to select it\n // - The value will be reset to the current selected option(s), when:\n // - The user is _not_ typing (otherwise you will loose your current state / query)\n // - The user cancels the current changes:\n // - By pressing `escape`\n // - By clicking `outside` of the Combobox\n watch(\n [currentDisplayValue, api.comboboxState, ownerDocument],\n ([currentDisplayValue, state], [oldCurrentDisplayValue, oldState]) => {\n // When the user is typing, we want to not touch the `input` at all. Especially when they\n // are using an IME, we don't want to mess with the input at all.\n if (isTyping.value) return\n\n let input = dom(api.inputRef)\n if (!input) return\n\n if (oldState === ComboboxStates.Open && state === ComboboxStates.Closed) {\n input.value = currentDisplayValue\n } else if (currentDisplayValue !== oldCurrentDisplayValue) {\n input.value = currentDisplayValue\n }\n\n // Once we synced the input value, we want to make sure the cursor is at the end of the\n // input field. This makes it easier to continue typing and append to the query. We will\n // bail out if the user is currently typing, because we don't want to mess with the cursor\n // position while typing.\n requestAnimationFrame(() => {\n if (isTyping.value) return\n if (!input) return\n\n // Bail when the input is not the currently focused element. When it is not the focused\n // element, and we call the `setSelectionRange`, then it will become the focused\n // element which may be unwanted.\n if (ownerDocument.value?.activeElement !== input) return\n\n let { selectionStart, selectionEnd } = input\n\n // A custom selection is used, no need to move the caret\n if (Math.abs((selectionEnd ?? 0) - (selectionStart ?? 0)) !== 0) return\n\n // A custom caret position is used, no need to move the caret\n if (selectionStart !== 0) return\n\n // Move the caret to the end\n input.setSelectionRange(input.value.length, input.value.length)\n })\n },\n { immediate: true }\n )\n\n // Trick VoiceOver in behaving a little bit better. Manually \"resetting\" the input makes\n // VoiceOver a bit more happy and doesn't require some changes manually first before\n // announcing items correctly. This is a bit of a hacks, but it is a workaround for a\n // VoiceOver bug.\n //\n // TODO: VoiceOver is still relatively buggy if you start VoiceOver while the Combobox is\n // already in an open state.\n watch([api.comboboxState], ([newState], [oldState]) => {\n if (newState === ComboboxStates.Open && oldState === ComboboxStates.Closed) {\n // When the user is typing, we want to not touch the `input` at all. Especially when they\n // are using an IME, we don't want to mess with the input at all.\n if (isTyping.value) return\n\n let input = dom(api.inputRef)\n if (!input) return\n\n // Capture current state\n let currentValue = input.value\n let { selectionStart, selectionEnd, selectionDirection } = input\n\n // Trick VoiceOver into announcing the value\n input.value = ''\n\n // Rollback to original state\n input.value = currentValue\n if (selectionDirection !== null) {\n input.setSelectionRange(selectionStart, selectionEnd, selectionDirection)\n } else {\n input.setSelectionRange(selectionStart, selectionEnd)\n }\n }\n })\n })\n\n let isComposing = ref(false)\n function handleCompositionstart() {\n isComposing.value = true\n }\n function handleCompositionend() {\n disposables().nextFrame(() => {\n isComposing.value = false\n })\n }\n\n let debounce = useFrameDebounce()\n function handleKeyDown(event: KeyboardEvent) {\n isTyping.value = true\n debounce(() => {\n if (isComposing.value) return\n isTyping.value = false\n })\n\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menu/#keyboard-interaction-12\n\n case Keys.Enter:\n isTyping.value = false\n if (api.comboboxState.value !== ComboboxStates.Open) return\n\n // When the user is still in the middle of composing by using an IME, then we don't want\n // to submit this value and close the Combobox yet. Instead, we will fallback to the\n // default behaviour which is to \"end\" the composition.\n if (isComposing.value) return\n\n event.preventDefault()\n event.stopPropagation()\n\n if (api.activeOptionIndex.value === null) {\n api.closeCombobox()\n return\n }\n\n api.selectActiveOption()\n if (api.mode.value === ValueMode.Single) {\n api.closeCombobox()\n }\n break\n\n case Keys.ArrowDown:\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return match(api.comboboxState.value, {\n [ComboboxStates.Open]: () => api.goToOption(Focus.Next),\n [ComboboxStates.Closed]: () => api.openCombobox(),\n })\n\n case Keys.ArrowUp:\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return match(api.comboboxState.value, {\n [ComboboxStates.Open]: () => api.goToOption(Focus.Previous),\n [ComboboxStates.Closed]: () => {\n api.openCombobox()\n nextTick(() => {\n if (!api.value.value) {\n api.goToOption(Focus.Last)\n }\n })\n },\n })\n\n case Keys.Home:\n if (event.shiftKey) {\n break\n }\n\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.First)\n\n case Keys.PageUp:\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.First)\n\n case Keys.End:\n if (event.shiftKey) {\n break\n }\n\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.Last)\n\n case Keys.PageDown:\n isTyping.value = false\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.Last)\n\n case Keys.Escape:\n isTyping.value = false\n if (api.comboboxState.value !== ComboboxStates.Open) return\n event.preventDefault()\n if (api.optionsRef.value && !api.optionsPropsRef.value.static) {\n event.stopPropagation()\n }\n\n if (api.nullable.value && api.mode.value === ValueMode.Single) {\n // We want to clear the value when the user presses escape if and only if the current\n // value is not set (aka, they didn't select anything yet, or they cleared the input which\n // caused the value to be set to `null`). If the current value is set, then we want to\n // fallback to that value when we press escape (this part is handled in the watcher that\n // syncs the value with the input field again).\n if (api.value.value === null) {\n clear()\n }\n }\n\n api.closeCombobox()\n break\n\n case Keys.Tab:\n isTyping.value = false\n if (api.comboboxState.value !== ComboboxStates.Open) return\n if (\n api.mode.value === ValueMode.Single &&\n api.activationTrigger.value !== ActivationTrigger.Focus\n ) {\n api.selectActiveOption()\n }\n api.closeCombobox()\n break\n }\n }\n\n function handleInput(event: Event & { target: HTMLInputElement }) {\n // Always call the onChange listener even if the user is still typing using an IME (Input Method\n // Editor).\n //\n // The main issue is Android, where typing always uses the IME APIs. Just waiting until the\n // compositionend event is fired to trigger an onChange is not enough, because then filtering\n // options while typing won't work at all because we are still in \"composing\" mode.\n emit('change', event)\n\n // When the value becomes empty in a single value mode while being nullable then we want to clear\n // the option entirely.\n //\n // This is can happen when you press backspace, but also when you select all the text and press\n // ctrl/cmd+x.\n if (api.nullable.value && api.mode.value === ValueMode.Single) {\n if (event.target.value === '') {\n clear()\n }\n }\n\n // Open the combobox to show the results based on what the user has typed\n api.openCombobox()\n }\n\n function handleBlur(event: FocusEvent) {\n let relatedTarget =\n (event.relatedTarget as HTMLElement) ?? history.find((x) => x !== event.currentTarget)\n isTyping.value = false\n\n // Focus is moved into the list, we don't want to close yet.\n if (dom(api.optionsRef)?.contains(relatedTarget)) {\n return\n }\n\n if (dom(api.buttonRef)?.contains(relatedTarget)) {\n return\n }\n\n if (api.comboboxState.value !== ComboboxStates.Open) return\n event.preventDefault()\n\n if (api.mode.value === ValueMode.Single) {\n // We want to clear the value when the user presses escape if and only if the current\n // value is not set (aka, they didn't select anything yet, or they cleared the input which\n // caused the value to be set to `null`). If the current value is set, then we want to\n // fallback to that value when we press escape (this part is handled in the watcher that\n // syncs the value with the input field again).\n if (api.nullable.value && api.value.value === null) {\n clear()\n }\n\n // We do have a value, so let's select the active option, unless we were just going through\n // the form and we opened it due to the focus event.\n else if (api.activationTrigger.value !== ActivationTrigger.Focus) {\n api.selectActiveOption()\n }\n }\n\n return api.closeCombobox()\n }\n\n function handleFocus(event: FocusEvent) {\n let relatedTarget =\n (event.relatedTarget as HTMLElement) ?? history.find((x) => x !== event.currentTarget)\n\n if (dom(api.buttonRef)?.contains(relatedTarget)) return\n if (dom(api.optionsRef)?.contains(relatedTarget)) return\n if (api.disabled.value) return\n\n if (!api.immediate.value) return\n if (api.comboboxState.value === ComboboxStates.Open) return\n\n api.openCombobox()\n\n // We need to make sure that tabbing through a form doesn't result in incorrectly setting the\n // value of the combobox. We will set the activation trigger to `Focus`, and we will ignore\n // selecting the active option when the user tabs away.\n disposables().nextFrame(() => {\n api.setActivationTrigger(ActivationTrigger.Focus)\n })\n }\n\n let defaultValue = computed(() => {\n return (\n props.defaultValue ??\n (api.defaultValue.value !== undefined\n ? props.displayValue?.(api.defaultValue.value)\n : null) ??\n api.defaultValue.value ??\n ''\n )\n })\n\n return () => {\n let slot = { open: api.comboboxState.value === ComboboxStates.Open }\n let { id, displayValue, onChange: _onChange, ...theirProps } = props\n let ourProps = {\n 'aria-controls': api.optionsRef.value?.id,\n 'aria-expanded': api.comboboxState.value === ComboboxStates.Open,\n 'aria-activedescendant':\n api.activeOptionIndex.value === null\n ? undefined\n : api.virtual.value\n ? api.options.value.find((option) => {\n return (\n !api.virtual.value!.disabled(option.dataRef.value) &&\n api.compare(\n option.dataRef.value,\n api.virtual.value!.options[api.activeOptionIndex.value!]\n )\n )\n })?.id\n : api.options.value[api.activeOptionIndex.value]?.id,\n 'aria-labelledby': dom(api.labelRef)?.id ?? dom(api.buttonRef)?.id,\n 'aria-autocomplete': 'list',\n id,\n onCompositionstart: handleCompositionstart,\n onCompositionend: handleCompositionend,\n onKeydown: handleKeyDown,\n onInput: handleInput,\n onFocus: handleFocus,\n onBlur: handleBlur,\n role: 'combobox',\n type: attrs.type ?? 'text',\n tabIndex: 0,\n ref: api.inputRef,\n defaultValue: defaultValue.value,\n disabled: api.disabled.value === true ? true : undefined,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n features: Features.RenderStrategy | Features.Static,\n name: 'ComboboxInput',\n })\n }\n },\n})\n\n// ---\n\nexport let ComboboxOptions = defineComponent({\n name: 'ComboboxOptions',\n props: {\n as: { type: [Object, String], default: 'ul' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n hold: { type: [Boolean], default: false },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useComboboxContext('ComboboxOptions')\n let id = `headlessui-combobox-options-${useId()}`\n\n expose({ el: api.optionsRef, $el: api.optionsRef })\n\n watchEffect(() => {\n api.optionsPropsRef.value.static = props.static\n })\n\n watchEffect(() => {\n api.optionsPropsRef.value.hold = props.hold\n })\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.comboboxState.value === ComboboxStates.Open\n })\n\n useTreeWalker({\n container: computed(() => dom(api.optionsRef)),\n enabled: computed(() => api.comboboxState.value === ComboboxStates.Open),\n accept(node) {\n if (node.getAttribute('role') === 'option') return NodeFilter.FILTER_REJECT\n if (node.hasAttribute('role')) return NodeFilter.FILTER_SKIP\n return NodeFilter.FILTER_ACCEPT\n },\n walk(node) {\n node.setAttribute('role', 'none')\n },\n })\n\n /**\n * Prevent focus from being lost if the user clicks on the scrollbar.\n * Otherwise the `ComboboxInput` will lose focus and the combobox will\n * close.\n */\n function handleMouseDown(event: MouseEvent) {\n event.preventDefault()\n }\n\n return () => {\n let slot = { open: api.comboboxState.value === ComboboxStates.Open }\n let ourProps = {\n 'aria-labelledby': dom(api.labelRef)?.id ?? dom(api.buttonRef)?.id,\n id,\n ref: api.optionsRef,\n role: 'listbox',\n 'aria-multiselectable': api.mode.value === ValueMode.Multi ? true : undefined,\n onMousedown: handleMouseDown,\n }\n let theirProps = omit(props, ['hold'])\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots:\n api.virtual.value && api.comboboxState.value === ComboboxStates.Open\n ? {\n ...slots,\n default: () => [h(VirtualProvider, {}, slots.default)],\n }\n : slots,\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'ComboboxOptions',\n })\n }\n },\n})\n\nexport let ComboboxOption = defineComponent({\n name: 'ComboboxOption',\n props: {\n as: { type: [Object, String], default: 'li' },\n value: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n },\n disabled: { type: Boolean, default: false },\n order: { type: [Number], default: null },\n },\n setup(props, { slots, attrs, expose }) {\n let api = useComboboxContext('ComboboxOption')\n let id = `headlessui-combobox-option-${useId()}`\n let internalOptionRef = ref<HTMLElement | null>(null)\n let disabled = computed(() => {\n return props.disabled || api.virtual.value?.disabled(props.value)\n })\n\n expose({ el: internalOptionRef, $el: internalOptionRef })\n\n let active = computed(() => {\n return api.virtual.value\n ? api.activeOptionIndex.value === api.calculateIndex(props.value)\n : api.activeOptionIndex.value === null\n ? false\n : api.options.value[api.activeOptionIndex.value]?.id === id\n })\n\n let selected = computed(() => api.isSelected(props.value))\n\n let virtualizer = inject(VirtualContext, null)\n let dataRef = computed<ComboboxOptionData>(() => ({\n disabled: props.disabled,\n value: props.value,\n domRef: internalOptionRef,\n order: computed(() => props.order),\n }))\n\n onMounted(() => api.registerOption(id, dataRef))\n onUnmounted(() => api.unregisterOption(id, active.value))\n\n watchEffect(() => {\n let el = dom(internalOptionRef)\n if (!el) return\n\n virtualizer?.value.measureElement(el)\n })\n\n watchEffect(() => {\n if (api.comboboxState.value !== ComboboxStates.Open) return\n if (!active.value) return\n if (api.virtual.value) return\n if (api.activationTrigger.value === ActivationTrigger.Pointer) return\n nextTick(() => dom(internalOptionRef)?.scrollIntoView?.({ block: 'nearest' }))\n })\n\n function handleMouseDown(event: MouseEvent) {\n // We use the `mousedown` event here since it fires before the focus\n // event, allowing us to cancel the event before focus is moved from the\n // `ComboboxInput` to the `ComboboxOption`. This keeps the input focused,\n // preserving the cursor position and any text selection.\n event.preventDefault()\n\n // Since we're using the `mousedown` event instead of a `click` event here\n // to preserve the focus of the `ComboboxInput`, we need to also check\n // that the `left` mouse button was clicked.\n if (event.button !== MouseButton.Left) {\n return\n }\n\n if (disabled.value) return\n api.selectOption(id)\n\n // We want to make sure that we don't accidentally trigger the virtual\n // keyboard.\n //\n // This would happen if the input is focused, the options are open, you\n // select an option (which would blur the input, and focus the option\n // (button), then we re-focus the input).\n //\n // This would be annoying on mobile (or on devices with a virtual\n // keyboard). Right now we are assuming that the virtual keyboard would open\n // on mobile devices (iOS / Android). This assumption is not perfect, but\n // will work in the majority of the cases.\n //\n // Ideally we can have a better check where we can explicitly check for\n // the virtual keyboard. But right now this is still an experimental\n // feature:\n // https://developer.mozilla.org/en-US/docs/Web/API/Navigator/virtualKeyboard\n if (!isMobile()) {\n requestAnimationFrame(() => dom(api.inputRef)?.focus({ preventScroll: true }))\n }\n\n if (api.mode.value === ValueMode.Single) {\n api.closeCombobox()\n }\n }\n\n function handleFocus() {\n if (props.disabled || api.virtual.value?.disabled(props.value)) {\n return api.goToOption(Focus.Nothing)\n }\n let idx = api.calculateIndex(props.value)\n api.goToOption(Focus.Specific, idx)\n }\n\n let pointer = useTrackedPointer()\n\n function handleEnter(evt: PointerEvent) {\n pointer.update(evt)\n }\n\n function handleMove(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled || api.virtual.value?.disabled(props.value)) return\n if (active.value) return\n let idx = api.calculateIndex(props.value)\n api.goToOption(Focus.Specific, idx, ActivationTrigger.Pointer)\n }\n\n function handleLeave(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled || api.virtual.value?.disabled(props.value)) return\n if (!active.value) return\n if (api.optionsPropsRef.value.hold) return\n api.goToOption(Focus.Nothing)\n }\n\n return () => {\n let { disabled } = props\n let slot = { active: active.value, selected: selected.value, disabled }\n let ourProps = {\n id,\n ref: internalOptionRef,\n role: 'option',\n tabIndex: disabled === true ? undefined : -1,\n 'aria-disabled': disabled === true ? true : undefined,\n // According to the WAI-ARIA best practices, we should use aria-checked for\n // multi-select,but Voice-Over disagrees. So we use aria-selected instead for\n // both single and multi-select.\n 'aria-selected': selected.value,\n disabled: undefined, // Never forward the `disabled` prop\n onMousedown: handleMouseDown,\n onFocus: handleFocus,\n onPointerenter: handleEnter,\n onMouseenter: handleEnter,\n onPointermove: handleMove,\n onMousemove: handleMove,\n onPointerleave: handleLeave,\n onMouseleave: handleLeave,\n }\n\n let theirProps = omit(props, ['order', 'value'])\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ComboboxOption',\n })\n }\n },\n})\n", "import { computed, ref, type ComputedRef, type UnwrapRef } from 'vue'\n\nexport function useControllable<T>(\n controlledValue: ComputedRef<T | undefined>,\n onChange?: (value: T) => void,\n defaultValue?: ComputedRef<T>\n) {\n let internalValue = ref(defaultValue?.value)\n let isControlled = computed(() => controlledValue.value !== undefined)\n\n return [\n computed(() => (isControlled.value ? controlledValue.value : internalValue.value)),\n function (value: unknown) {\n if (isControlled.value) {\n return onChange?.(value as T)\n } else {\n internalValue.value = value as UnwrapRef<T>\n return onChange?.(value as T)\n }\n },\n ] as const\n}\n", "import { onUnmounted } from 'vue'\nimport { disposables } from '../utils/disposables'\n\n/**\n * The `useDisposables` hook returns a `disposables` object that is disposed\n * when the component is unmounted.\n */\nexport function useDisposables() {\n let d = disposables()\n onUnmounted(() => d.dispose())\n return d\n}\n", "// Polyfill\nexport function microTask(cb: () => void) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(cb)\n } else {\n Promise.resolve()\n .then(cb)\n .catch((e) =>\n setTimeout(() => {\n throw e\n })\n )\n }\n}\n", "import { microTask } from './micro-task'\n\nexport type Disposables = ReturnType<typeof disposables>\n\nexport function disposables() {\n let _disposables: Function[] = []\n\n let api = {\n addEventListener<TEventName extends keyof WindowEventMap>(\n element: HTMLElement | Window | Document,\n name: TEventName,\n listener: (event: WindowEventMap[TEventName]) => any,\n options?: boolean | AddEventListenerOptions\n ) {\n element.addEventListener(name, listener as any, options)\n return api.add(() => element.removeEventListener(name, listener as any, options))\n },\n\n requestAnimationFrame(...args: Parameters<typeof requestAnimationFrame>) {\n let raf = requestAnimationFrame(...args)\n api.add(() => cancelAnimationFrame(raf))\n },\n\n nextFrame(...args: Parameters<typeof requestAnimationFrame>) {\n api.requestAnimationFrame(() => {\n api.requestAnimationFrame(...args)\n })\n },\n\n setTimeout(...args: Parameters<typeof setTimeout>) {\n let timer = setTimeout(...args)\n api.add(() => clearTimeout(timer))\n },\n\n microTask(...args: Parameters<typeof microTask>) {\n let task = { current: true }\n microTask(() => {\n if (task.current) {\n args[0]()\n }\n })\n return api.add(() => {\n task.current = false\n })\n },\n\n style(node: HTMLElement, property: string, value: string) {\n let previous = node.style.getPropertyValue(property)\n Object.assign(node.style, { [property]: value })\n return this.add(() => {\n Object.assign(node.style, { [property]: previous })\n })\n },\n\n group(cb: (d: typeof this) => void) {\n let d = disposables()\n cb(d)\n return this.add(() => d.dispose())\n },\n\n add(cb: () => void) {\n _disposables.push(cb)\n return () => {\n let idx = _disposables.indexOf(cb)\n if (idx >= 0) {\n for (let dispose of _disposables.splice(idx, 1)) {\n dispose()\n }\n }\n }\n },\n\n dispose() {\n for (let dispose of _disposables.splice(0)) {\n dispose()\n }\n },\n }\n\n return api\n}\n", "import { useDisposables } from './use-disposables'\n\n/**\n * Schedule some task in the next frame.\n *\n * - If you call the returned function multiple times, only the last task will\n * be executed.\n * - If the component is unmounted, the task will be cancelled.\n */\nexport function useFrameDebounce() {\n let d = useDisposables()\n\n return (cb: () => void) => {\n d.dispose()\n d.nextFrame(cb)\n }\n}\n", "let id = 0\nfunction generateId() {\n return ++id\n}\n\nexport function useId() {\n return generateId()\n}\n", "import { computed, ref, type ComputedRef, type Ref } from 'vue'\nimport { dom } from '../utils/dom'\nimport { FocusableMode, isFocusableElement } from '../utils/focus-management'\nimport { isMobile } from '../utils/platform'\nimport { useDocumentEvent } from './use-document-event'\nimport { useWindowEvent } from './use-window-event'\n\ntype Container = Ref<HTMLElement | null> | HTMLElement | null\ntype ContainerCollection = Container[] | Set<Container>\ntype ContainerInput = Container | ContainerCollection\n\n// If the user moves their finger by ${MOVE_THRESHOLD_PX} pixels or more, we'll\n// assume that they are scrolling and not clicking. This will prevent the click\n// from being triggered when the user is scrolling.\n//\n// This also allows you to \"cancel\" the click by moving your finger more than\n// the threshold in pixels in any direction.\nconst MOVE_THRESHOLD_PX = 30\n\nexport function useOutsideClick(\n containers: ContainerInput | (() => ContainerInput),\n cb: (event: MouseEvent | PointerEvent | FocusEvent | TouchEvent, target: HTMLElement) => void,\n enabled: ComputedRef<boolean> = computed(() => true)\n) {\n function handleOutsideClick<E extends MouseEvent | PointerEvent | FocusEvent | TouchEvent>(\n event: E,\n resolveTarget: (event: E) => HTMLElement | null\n ) {\n // Check whether the event got prevented already. This can happen if you use the\n // useOutsideClick hook in both a Dialog and a Menu and the inner Menu \"cancels\" the default\n // behaviour so that only the Menu closes and not the Dialog (yet)\n if (event.defaultPrevented) return\n\n let target = resolveTarget(event)\n\n if (target === null) {\n return\n }\n\n // Ignore if the target doesn't exist in the DOM anymore\n if (!target.getRootNode().contains(target)) return\n\n let _containers = (function resolve(containers): ContainerCollection {\n if (typeof containers === 'function') {\n return resolve(containers())\n }\n\n if (Array.isArray(containers)) {\n return containers\n }\n\n if (containers instanceof Set) {\n return containers\n }\n\n return [containers]\n })(containers)\n\n // Ignore if the target exists in one of the containers\n for (let container of _containers) {\n if (container === null) continue\n let domNode = container instanceof HTMLElement ? container : dom(container)\n if (domNode?.contains(target)) {\n return\n }\n\n // If the click crossed a shadow boundary, we need to check if the container\n // is inside the tree by using `composedPath` to \"pierce\" the shadow boundary\n if (event.composed && event.composedPath().includes(domNode as EventTarget)) {\n return\n }\n }\n\n // This allows us to check whether the event was defaultPrevented when you are nesting this\n // inside a `<Dialog />` for example.\n if (\n // This check allows us to know whether or not we clicked on a \"focusable\" element like a\n // button or an input. This is a backwards compatibility check so that you can open a <Menu\n // /> and click on another <Menu /> which should close Menu A and open Menu B. We might\n // revisit that so that you will require 2 clicks instead.\n !isFocusableElement(target, FocusableMode.Loose) &&\n // This could be improved, but the `Combobox.Button` adds tabIndex={-1} to make it\n // unfocusable via the keyboard so that tabbing to the next item from the input doesn't\n // first go to the button.\n target.tabIndex !== -1\n ) {\n event.preventDefault()\n }\n\n return cb(event, target)\n }\n\n let initialClickTarget = ref<EventTarget | null>(null)\n\n useDocumentEvent(\n enabled,\n 'pointerdown',\n (event) => {\n initialClickTarget.value = event.composedPath?.()?.[0] || event.target\n },\n true\n )\n\n useDocumentEvent(\n enabled,\n 'mousedown',\n (event) => {\n initialClickTarget.value = event.composedPath?.()?.[0] || event.target\n },\n true\n )\n\n useDocumentEvent(\n enabled,\n 'click',\n (event) => {\n if (isMobile()) {\n return\n }\n\n if (!initialClickTarget.value) {\n return\n }\n\n handleOutsideClick(event, () => {\n return initialClickTarget.value as HTMLElement\n })\n\n initialClickTarget.value = null\n },\n\n // We will use the `capture` phase so that layers in between with `event.stopPropagation()`\n // don't \"cancel\" this outside click check. E.g.: A `Menu` inside a `DialogPanel` if the `Menu`\n // is open, and you click outside of it in the `DialogPanel` the `Menu` should close. However,\n // the `DialogPanel` has a `onClick(e) { e.stopPropagation() }` which would cancel this.\n true\n )\n\n let startPosition = { x: 0, y: 0 }\n useDocumentEvent(\n enabled,\n 'touchstart',\n (event) => {\n startPosition.x = event.touches[0].clientX\n startPosition.y = event.touches[0].clientY\n },\n true\n )\n\n useDocumentEvent(\n enabled,\n 'touchend',\n (event) => {\n // If the user moves their finger by ${MOVE_THRESHOLD_PX} pixels or more,\n // we'll assume that they are scrolling and not clicking.\n let endPosition = { x: event.changedTouches[0].clientX, y: event.changedTouches[0].clientY }\n if (\n Math.abs(endPosition.x - startPosition.x) >= MOVE_THRESHOLD_PX ||\n Math.abs(endPosition.y - startPosition.y) >= MOVE_THRESHOLD_PX\n ) {\n return\n }\n\n return handleOutsideClick(event, () => {\n if (event.target instanceof HTMLElement) {\n return event.target\n }\n return null\n })\n },\n\n // We will use the `capture` phase so that layers in between with `event.stopPropagation()`\n // don't \"cancel\" this outside click check. E.g.: A `Menu` inside a `DialogPanel` if the `Menu`\n // is open, and you click outside of it in the `DialogPanel` the `Menu` should close. However,\n // the `DialogPanel` has a `onClick(e) { e.stopPropagation() }` which would cancel this.\n true\n )\n\n // When content inside an iframe is clicked `window` will receive a blur event\n // This can happen when an iframe _inside_ a window is clicked\n // Or, if headless UI is *in* the iframe, when a content in a window containing that iframe is clicked\n\n // In this case we care only about the first case so we check to see if the active element is the iframe\n // If so this was because of a click, focus, or other interaction with the child iframe\n // and we can consider it an \"outside click\"\n useWindowEvent(\n enabled,\n 'blur',\n (event) => {\n return handleOutsideClick(event, () => {\n return window.document.activeElement instanceof HTMLIFrameElement\n ? window.document.activeElement\n : null\n })\n },\n true\n )\n}\n", "import type { ComponentPublicInstance, Ref } from 'vue'\n\ntype AsElement<T extends HTMLElement | ComponentPublicInstance> =\n | (T extends HTMLElement ? T : HTMLElement)\n | null\n\nexport function dom<T extends HTMLElement | ComponentPublicInstance>(\n ref?: Ref<T | null>\n): AsElement<T> | null {\n if (ref == null) return null\n if (ref.value == null) return null\n\n let el = (ref.value as { $el?: T }).$el ?? ref.value\n\n // In this case we check for `Node` because returning `null` from a\n // component renders a `Comment` which is a `Node` but not `Element`\n // The types don't encode this possibility but we handle it here at runtime\n if (el instanceof Node) {\n return el as AsElement<T>\n }\n\n return null\n}\n", "import { nextTick } from 'vue'\nimport { match } from './match'\nimport { getOwnerDocument } from './owner'\n\n// Credit:\n// - https://stackoverflow.com/a/30753870\nexport let focusableSelector = [\n '[contentEditable=true]',\n '[tabindex]',\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'iframe',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n]\n .map(\n process.env.NODE_ENV === 'test'\n ? // TODO: Remove this once JSDOM fixes the issue where an element that is\n // \"hidden\" can be the document.activeElement, because this is not possible\n // in real browsers.\n (selector) => `${selector}:not([tabindex='-1']):not([style*='display: none'])`\n : (selector) => `${selector}:not([tabindex='-1'])`\n )\n .join(',')\n\nexport enum Focus {\n /** Focus the first non-disabled element */\n First = 1 << 0,\n\n /** Focus the previous non-disabled element */\n Previous = 1 << 1,\n\n /** Focus the next non-disabled element */\n Next = 1 << 2,\n\n /** Focus the last non-disabled element */\n Last = 1 << 3,\n\n /** Wrap tab around */\n WrapAround = 1 << 4,\n\n /** Prevent scrolling the focusable elements into view */\n NoScroll = 1 << 5,\n}\n\nexport enum FocusResult {\n Error,\n Overflow,\n Success,\n Underflow,\n}\n\nenum Direction {\n Previous = -1,\n Next = 1,\n}\n\nexport function getFocusableElements(container: HTMLElement | null = document.body) {\n if (container == null) return []\n return Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).sort(\n // We want to move `:tabindex=\"0\"` to the end of the list, this is what the browser does as well.\n (a, z) =>\n Math.sign((a.tabIndex || Number.MAX_SAFE_INTEGER) - (z.tabIndex || Number.MAX_SAFE_INTEGER))\n )\n}\n\nexport enum FocusableMode {\n /** The element itself must be focusable. */\n Strict,\n\n /** The element should be inside of a focusable element. */\n Loose,\n}\n\nexport function isFocusableElement(\n element: HTMLElement,\n mode: FocusableMode = FocusableMode.Strict\n) {\n if (element === getOwnerDocument(element)?.body) return false\n\n return match(mode, {\n [FocusableMode.Strict]() {\n return element.matches(focusableSelector)\n },\n [FocusableMode.Loose]() {\n let next: HTMLElement | null = element\n\n while (next !== null) {\n if (next.matches(focusableSelector)) return true\n next = next.parentElement\n }\n\n return false\n },\n })\n}\n\nexport function restoreFocusIfNecessary(element: HTMLElement | null) {\n let ownerDocument = getOwnerDocument(element)\n nextTick(() => {\n if (\n ownerDocument &&\n !isFocusableElement(ownerDocument.activeElement as HTMLElement, FocusableMode.Strict)\n ) {\n focusElement(element)\n }\n })\n}\n\n// The method of triggering an action, this is used to determine how we should\n// restore focus after an action has been performed.\nenum ActivationMethod {\n /* If the action was triggered by a keyboard event. */\n Keyboard = 0,\n\n /* If the action was triggered by a mouse / pointer / ... event.*/\n Mouse = 1,\n}\n\n// We want to be able to set and remove the `data-headlessui-mouse` attribute on the `html` element.\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n document.addEventListener(\n 'keydown',\n (event) => {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return\n }\n\n document.documentElement.dataset.headlessuiFocusVisible = ''\n },\n true\n )\n\n document.addEventListener(\n 'click',\n (event) => {\n // Event originated from an actual mouse click\n if (event.detail === ActivationMethod.Mouse) {\n delete document.documentElement.dataset.headlessuiFocusVisible\n }\n\n // Event originated from a keyboard event that triggered the `click` event\n else if (event.detail === ActivationMethod.Keyboard) {\n document.documentElement.dataset.headlessuiFocusVisible = ''\n }\n },\n true\n )\n}\n\nexport function focusElement(element: HTMLElement | null) {\n element?.focus({ preventScroll: true })\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/select\nlet selectableSelector = ['textarea', 'input'].join(',')\nfunction isSelectableElement(\n element: Element | null\n): element is HTMLInputElement | HTMLTextAreaElement {\n return element?.matches?.(selectableSelector) ?? false\n}\n\nexport function sortByDomNode<T>(\n nodes: T[],\n resolveKey: (item: T) => HTMLElement | null = (i) => i as unknown as HTMLElement | null\n): T[] {\n return nodes.slice().sort((aItem, zItem) => {\n let a = resolveKey(aItem)\n let z = resolveKey(zItem)\n\n if (a === null || z === null) return 0\n\n let position = a.compareDocumentPosition(z)\n\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n return 0\n })\n}\n\nexport function focusFrom(current: HTMLElement | null, focus: Focus) {\n return focusIn(getFocusableElements(), focus, { relativeTo: current })\n}\n\nexport function focusIn(\n container: HTMLElement | HTMLElement[],\n focus: Focus,\n {\n sorted = true,\n relativeTo = null,\n skipElements = [],\n }: Partial<{ sorted: boolean; relativeTo: HTMLElement | null; skipElements: HTMLElement[] }> = {}\n) {\n let ownerDocument =\n (Array.isArray(container)\n ? container.length > 0\n ? container[0].ownerDocument\n : document\n : container?.ownerDocument) ?? document\n\n let elements = Array.isArray(container)\n ? sorted\n ? sortByDomNode(container)\n : container\n : getFocusableElements(container)\n\n if (skipElements.length > 0 && elements.length > 1) {\n elements = elements.filter((x) => !skipElements.includes(x))\n }\n\n relativeTo = relativeTo ?? (ownerDocument.activeElement as HTMLElement)\n\n let direction = (() => {\n if (focus & (Focus.First | Focus.Next)) return Direction.Next\n if (focus & (Focus.Previous | Focus.Last)) return Direction.Previous\n\n throw new Error('Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last')\n })()\n\n let startIndex = (() => {\n if (focus & Focus.First) return 0\n if (focus & Focus.Previous) return Math.max(0, elements.indexOf(relativeTo)) - 1\n if (focus & Focus.Next) return Math.max(0, elements.indexOf(relativeTo)) + 1\n if (focus & Focus.Last) return elements.length - 1\n\n throw new Error('Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last')\n })()\n\n let focusOptions = focus & Focus.NoScroll ? { preventScroll: true } : {}\n\n let offset = 0\n let total = elements.length\n let next = undefined\n do {\n // Guard against infinite loops\n if (offset >= total || offset + total <= 0) return FocusResult.Error\n\n let nextIdx = startIndex + offset\n\n if (focus & Focus.WrapAround) {\n nextIdx = (nextIdx + total) % total\n } else {\n if (nextIdx < 0) return FocusResult.Underflow\n if (nextIdx >= total) return FocusResult.Overflow\n }\n\n next = elements[nextIdx]\n\n // Try the focus the next element, might not work if it is \"hidden\" to the user.\n next?.focus(focusOptions)\n\n // Try the next one in line\n offset += direction\n } while (next !== ownerDocument.activeElement)\n\n // By default if you <Tab> to a text input or a textarea, the browser will\n // select all the text once the focus is inside these DOM Nodes. However,\n // since we are manually moving focus this behaviour is not happening. This\n // code will make sure that the text gets selected as-if you did it manually.\n // Note: We only do this when going forward / backward. Not for the\n // Focus.First or Focus.Last actions. This is similar to the `autoFocus`\n // behaviour on an input where the input will get focus but won't be\n // selected.\n if (focus & (Focus.Next | Focus.Previous) && isSelectableElement(next)) {\n next.select()\n }\n\n return FocusResult.Success\n}\n", "export function match<TValue extends string | number = string, TReturnValue = unknown>(\n value: TValue,\n lookup: Record<TValue, TReturnValue | ((...args: any[]) => TReturnValue)>,\n ...args: any[]\n): TReturnValue {\n if (value in lookup) {\n let returnValue = lookup[value]\n return typeof returnValue === 'function' ? returnValue(...args) : returnValue\n }\n\n let error = new Error(\n `Tried to handle \"${value}\" but there is no handler defined. Only defined handlers are: ${Object.keys(\n lookup\n )\n .map((key) => `\"${key}\"`)\n .join(', ')}.`\n )\n if (Error.captureStackTrace) Error.captureStackTrace(error, match)\n throw error\n}\n", "type RenderEnv = 'client' | 'server'\n\nclass Env {\n current: RenderEnv = this.detect()\n currentId = 0\n\n set(env: RenderEnv): void {\n if (this.current === env) return\n\n this.currentId = 0\n this.current = env\n }\n\n reset(): void {\n this.set(this.detect())\n }\n\n nextId() {\n return ++this.currentId\n }\n\n get isServer(): boolean {\n return this.current === 'server'\n }\n\n get isClient(): boolean {\n return this.current === 'client'\n }\n\n private detect(): RenderEnv {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return 'server'\n }\n\n return 'client'\n }\n}\n\nexport let env = new Env()\n", "import type { Ref } from 'vue'\nimport { dom } from './dom'\nimport { env } from './env'\n\nexport function getOwnerDocument<T extends Element | Ref<Element | null>>(\n element: T | null | undefined\n): Document | null {\n if (env.isServer) return null\n if (!element) return document\n if ('ownerDocument' in element) return element.ownerDocument\n if ('value' in element) return dom(element as any)?.ownerDocument ?? document\n\n return null\n}\n", "// This file contains functions to detect the platform the app is running on. They aren't perfect,\n// and we are making assumptions here. But it's the best we can do for now.\n\nexport function isIOS() {\n // TODO: This is not a great way to detect iOS, but it's the best I can do for now.\n // - `window.platform` is deprecated\n // - `window.userAgentData.platform` is still experimental (https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData/platform)\n // - `window.userAgent` also doesn't contain the required information\n return (\n // Check if it is an iPhone\n /iPhone/gi.test(window.navigator.platform) ||\n // Check if it is an iPad. iPad reports itself as \"MacIntel\", but we can check if it is a touch\n // screen. Let's hope that Apple doesn't release a touch screen Mac (or maybe this would then\n // work as expected \uD83E\uDD14).\n (/Mac/gi.test(window.navigator.platform) && window.navigator.maxTouchPoints > 0)\n )\n}\n\nexport function isAndroid() {\n return /Android/gi.test(window.navigator.userAgent)\n}\n\nexport function isMobile() {\n return isIOS() || isAndroid()\n}\n", "import { watchEffect, type Ref } from 'vue'\nimport { env } from '../utils/env'\n\nexport function useDocumentEvent<TType extends keyof DocumentEventMap>(\n enabled: Ref<boolean>,\n type: TType,\n listener: (this: Document, ev: DocumentEventMap[TType]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n if (env.isServer) return\n\n watchEffect((onInvalidate) => {\n if (!enabled.value) return\n\n document.addEventListener(type, listener, options)\n onInvalidate(() => document.removeEventListener(type, listener, options))\n })\n}\n", "import { watchEffect, type Ref } from 'vue'\nimport { env } from '../utils/env'\n\nexport function useWindowEvent<TType extends keyof WindowEventMap>(\n enabled: Ref<boolean>,\n type: TType,\n listener: (this: Window, ev: WindowEventMap[TType]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n if (env.isServer) return\n\n watchEffect((onInvalidate) => {\n if (!enabled.value) return\n\n window.addEventListener(type, listener, options)\n onInvalidate(() => window.removeEventListener(type, listener, options))\n })\n}\n", "import { onMounted, ref, watchEffect, type ComponentPublicInstance, type Ref } from 'vue'\nimport { dom } from '../utils/dom'\n\nfunction resolveType(type: unknown, as: string | object) {\n if (type) return type\n\n let tag = as ?? 'button'\n if (typeof tag === 'string' && tag.toLowerCase() === 'button') return 'button'\n\n return undefined\n}\n\nexport function useResolveButtonType(\n data: Ref<{ as: string | object; type?: unknown }>,\n refElement: Ref<HTMLElement | ComponentPublicInstance | null>\n) {\n let type = ref(resolveType(data.value.type, data.value.as))\n\n onMounted(() => {\n type.value = resolveType(data.value.type, data.value.as)\n })\n\n watchEffect(() => {\n if (type.value) return\n if (!dom(refElement)) return\n\n if (dom(refElement) instanceof HTMLButtonElement && !dom(refElement)?.hasAttribute('type')) {\n type.value = 'button'\n }\n })\n\n return type\n}\n", "import { ref } from 'vue'\n\ntype PointerPosition = [x: number, y: number]\n\nfunction eventToPosition(evt: PointerEvent): PointerPosition {\n return [evt.screenX, evt.screenY]\n}\n\nexport function useTrackedPointer() {\n let lastPos = ref<PointerPosition>([-1, -1])\n\n return {\n wasMoved(evt: PointerEvent) {\n // FIXME: Remove this once we use browser testing in all the relevant places.\n // NOTE: This is replaced with a compile-time define during the build process\n // This hack exists to work around a few failing tests caused by our inability to \"move\" the virtual pointer in JSDOM pointer events.\n if (typeof process !== 'undefined' && process.env.TEST_BYPASS_TRACKED_POINTER) {\n return true\n }\n\n let newPos = eventToPosition(evt)\n\n if (lastPos.value[0] === newPos[0] && lastPos.value[1] === newPos[1]) {\n return false\n }\n\n lastPos.value = newPos\n return true\n },\n\n update(evt: PointerEvent) {\n lastPos.value = eventToPosition(evt)\n },\n }\n}\n", "import { watchEffect, type ComputedRef } from 'vue'\nimport { getOwnerDocument } from '../utils/owner'\n\ntype AcceptNode = (\n node: HTMLElement\n) =>\n | typeof NodeFilter.FILTER_ACCEPT\n | typeof NodeFilter.FILTER_SKIP\n | typeof NodeFilter.FILTER_REJECT\n\nexport function useTreeWalker({\n container,\n accept,\n walk,\n enabled,\n}: {\n container: ComputedRef<HTMLElement | null>\n accept: AcceptNode\n walk(node: HTMLElement): void\n enabled?: ComputedRef<boolean>\n}) {\n watchEffect(() => {\n let root = container.value\n if (!root) return\n if (enabled !== undefined && !enabled.value) return\n let ownerDocument = getOwnerDocument(container)\n if (!ownerDocument) return\n\n let acceptNode = Object.assign((node: HTMLElement) => accept(node), { acceptNode: accept })\n let walker = ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n acceptNode,\n // @ts-expect-error This `false` is a simple small fix for older browsers\n false\n )\n\n while (walker.nextNode()) walk(walker.currentNode as HTMLElement)\n })\n}\n", "import { defineComponent, type PropType } from 'vue'\nimport { render } from '../utils/render'\n\nexport enum Features {\n // The default, no features.\n None = 1 << 0,\n\n // Whether the element should be focusable or not.\n Focusable = 1 << 1,\n\n // Whether it should be completely hidden, even to assistive technologies.\n Hidden = 1 << 2,\n}\n\nexport let Hidden = defineComponent({\n name: 'Hidden',\n props: {\n as: { type: [Object, String], default: 'div' },\n features: { type: Number as PropType<Features>, default: Features.None },\n },\n setup(props, { slots, attrs }) {\n return () => {\n let { features, ...theirProps } = props\n let ourProps = {\n 'aria-hidden':\n (features & Features.Focusable) === Features.Focusable\n ? true\n : // @ts-ignore\n theirProps['aria-hidden'] ?? undefined,\n hidden: (features & Features.Hidden) === Features.Hidden ? true : undefined,\n style: {\n position: 'fixed',\n top: 1,\n left: 1,\n width: 1,\n height: 0,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n ...((features & Features.Hidden) === Features.Hidden &&\n !((features & Features.Focusable) === Features.Focusable) && { display: 'none' }),\n },\n }\n\n return render({\n ourProps,\n theirProps,\n slot: {},\n attrs,\n slots,\n name: 'Hidden',\n })\n }\n },\n})\n", "import { cloneVNode, Fragment, h, type Slots, type VNode } from 'vue'\nimport { match } from './match'\n\nexport enum Features {\n /** No features at all */\n None = 0,\n\n /**\n * When used, this will allow us to use one of the render strategies.\n *\n * **The render strategies are:**\n * - **Unmount** _(Will unmount the component.)_\n * - **Hidden** _(Will hide the component using the [hidden] attribute.)_\n */\n RenderStrategy = 1,\n\n /**\n * When used, this will allow the user of our component to be in control. This can be used when\n * you want to transition based on some state.\n */\n Static = 2,\n}\n\nexport enum RenderStrategy {\n Unmount,\n Hidden,\n}\n\nexport function render({\n visible = true,\n features = Features.None,\n ourProps,\n theirProps,\n ...main\n}: {\n ourProps: Record<string, any>\n theirProps: Record<string, any>\n slot: Record<string, any>\n attrs: Record<string, any>\n slots: Slots\n name: string\n} & {\n features?: Features\n visible?: boolean\n}) {\n let props = mergeProps(theirProps, ourProps)\n let mainWithProps = Object.assign(main, { props })\n\n // Visible always render\n if (visible) return _render(mainWithProps)\n\n if (features & Features.Static) {\n // When the `static` prop is passed as `true`, then the user is in control, thus we don't care about anything else\n if (props.static) return _render(mainWithProps)\n }\n\n if (features & Features.RenderStrategy) {\n let strategy = props.unmount ?? true ? RenderStrategy.Unmount : RenderStrategy.Hidden\n\n return match(strategy, {\n [RenderStrategy.Unmount]() {\n return null\n },\n [RenderStrategy.Hidden]() {\n return _render({\n ...main,\n props: { ...props, hidden: true, style: { display: 'none' } },\n })\n },\n })\n }\n\n // No features enabled, just render\n return _render(mainWithProps)\n}\n\nfunction _render({\n props,\n attrs,\n slots,\n slot,\n name,\n}: {\n props: Record<string, any>\n slot: Record<string, any>\n attrs: Record<string, any>\n slots: Slots\n name: string\n}) {\n let { as, ...incomingProps } = omit(props, ['unmount', 'static'])\n\n let children = slots.default?.(slot)\n\n let dataAttributes: Record<string, string> = {}\n if (slot) {\n let exposeState = false\n let states = []\n for (let [k, v] of Object.entries(slot)) {\n if (typeof v === 'boolean') {\n exposeState = true\n }\n if (v === true) {\n states.push(k)\n }\n }\n\n if (exposeState) dataAttributes[`data-headlessui-state`] = states.join(' ')\n }\n\n if (as === 'template') {\n children = flattenFragments(children ?? [])\n\n if (Object.keys(incomingProps).length > 0 || Object.keys(attrs).length > 0) {\n let [firstChild, ...other] = children ?? []\n\n if (!isValidElement(firstChild) || other.length > 0) {\n throw new Error(\n [\n 'Passing props on \"template\"!',\n '',\n `The current component <${name} /> is rendering a \"template\".`,\n `However we need to passthrough the following props:`,\n Object.keys(incomingProps)\n .concat(Object.keys(attrs))\n .map((name) => name.trim())\n .filter((current, idx, all) => all.indexOf(current) === idx)\n .sort((a, z) => a.localeCompare(z))\n .map((line) => ` - ${line}`)\n .join('\\n'),\n '',\n 'You can apply a few solutions:',\n [\n 'Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"template\".',\n 'Render a single element as the child so that we can forward the props onto that element.',\n ]\n .map((line) => ` - ${line}`)\n .join('\\n'),\n ].join('\\n')\n )\n }\n\n let mergedProps = mergeProps(firstChild.props ?? {}, incomingProps, dataAttributes)\n let cloned = cloneVNode(firstChild, mergedProps, true)\n // Explicitly override props starting with `on`. This is for event handlers, but there are\n // scenario's where we set them to `undefined` explicitly (when `aria-disabled=\"true\"` is\n // happening instead of `disabled`). But cloneVNode doesn't like overriding `onXXX` props so\n // we have to do it manually.\n for (let prop in mergedProps) {\n if (prop.startsWith('on')) {\n cloned.props ||= {}\n cloned.props[prop] = mergedProps[prop]\n }\n }\n return cloned\n }\n\n if (Array.isArray(children) && children.length === 1) {\n // TODO: Do we need to cloneVNode + dataAttributes here?\n return children[0]\n }\n\n return children\n }\n\n return h(as, Object.assign({}, incomingProps, dataAttributes), {\n default: () => children,\n })\n}\n\n/**\n * When passed a structure like this:\n * <Example><span>something</span></Example>\n *\n * And Example is defined as:\n * <SomeComponent><slot /></SomeComponent>\n *\n * We need to turn the fragment that <slot> represents into the slot.\n * Luckily by this point it's already rendered into an array of VNodes\n * for us so we can just flatten it directly.\n *\n * We have to do this recursively because there could be multiple\n * levels of Component nesting all with <slot> elements interspersed\n *\n * @param children\n * @returns\n */\nfunction flattenFragments(children: VNode[]): VNode[] {\n return children.flatMap((child) => {\n if (child.type === Fragment) {\n return flattenFragments(child.children as VNode[])\n }\n\n return [child]\n })\n}\n\nfunction mergeProps(...listOfProps: Record<any, any>[]) {\n if (listOfProps.length === 0) return {}\n if (listOfProps.length === 1) return listOfProps[0]\n\n let target: Record<any, any> = {}\n\n let eventHandlers: Record<\n string,\n ((event: { defaultPrevented: boolean }, ...args: any[]) => void | undefined)[]\n > = {}\n\n for (let props of listOfProps) {\n for (let prop in props) {\n // Collect event handlers\n if (prop.startsWith('on') && typeof props[prop] === 'function') {\n eventHandlers[prop] ??= []\n eventHandlers[prop].push(props[prop])\n } else {\n // Override incoming prop\n target[prop] = props[prop]\n }\n }\n }\n\n // Do not attach any event handlers when there is a `disabled` or `aria-disabled` prop set.\n if (target.disabled || target['aria-disabled']) {\n return Object.assign(\n target,\n // Set all event listeners that we collected to `undefined`. This is\n // important because of the `cloneElement` from above, which merges the\n // existing and new props, they don't just override therefore we have to\n // explicitly nullify them.\n Object.fromEntries(Object.keys(eventHandlers).map((eventName) => [eventName, undefined]))\n )\n }\n\n // Merge event handlers\n for (let eventName in eventHandlers) {\n Object.assign(target, {\n [eventName](event: { defaultPrevented: boolean }, ...args: any[]) {\n let handlers = eventHandlers[eventName]\n\n for (let handler of handlers) {\n if (event instanceof Event && event.defaultPrevented) {\n return\n }\n\n handler(event, ...args)\n }\n },\n })\n }\n\n return target\n}\n\nexport function compact<T extends Record<any, any>>(object: T) {\n let clone = Object.assign({}, object)\n for (let key in clone) {\n if (clone[key] === undefined) delete clone[key]\n }\n return clone\n}\n\nexport function omit<T extends Record<any, any>, Keys extends keyof T>(\n object: T,\n keysToOmit: readonly Keys[] = []\n) {\n let clone = Object.assign({}, object) as T\n for (let key of keysToOmit) {\n if (key in clone) delete clone[key]\n }\n return clone as Omit<T, Keys>\n}\n\nfunction isValidElement(input: any): boolean {\n if (input == null) return false // No children\n if (typeof input.type === 'string') return true // 'div', 'span', ...\n if (typeof input.type === 'object') return true // Other components\n if (typeof input.type === 'function') return true // Built-ins like Transition\n return false // Comments, strings, ...\n}\n", "import { inject, provide, type InjectionKey, type Ref } from 'vue'\n\nlet Context = Symbol('Context') as InjectionKey<Ref<State>>\n\nexport enum State {\n Open = 1 << 0,\n Closed = 1 << 1,\n Closing = 1 << 2,\n Opening = 1 << 3,\n}\n\nexport function hasOpenClosed() {\n return useOpenClosed() !== null\n}\n\nexport function useOpenClosed() {\n return inject(Context, null)\n}\n\nexport function useOpenClosedProvider(value: Ref<State>) {\n provide(Context, value)\n}\n", "export function onDocumentReady(cb: () => void) {\n function check() {\n if (document.readyState === 'loading') return\n cb()\n document.removeEventListener('DOMContentLoaded', check)\n }\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n document.addEventListener('DOMContentLoaded', check)\n check()\n }\n}\n", "import { onDocumentReady } from './document-ready'\nimport { focusableSelector } from './focus-management'\n\nexport let history: HTMLElement[] = []\nonDocumentReady(() => {\n function handle(e: Event) {\n if (!(e.target instanceof HTMLElement)) return\n if (e.target === document.body) return\n if (history[0] === e.target) return\n\n let focusableElement = e.target as HTMLElement\n\n // Figure out the closest focusable element, this is needed in a situation\n // where you click on a non-focusable element inside a focusable element.\n //\n // E.g.:\n //\n // ```html\n // <button>\n // <span>Click me</span>\n // </button>\n // ```\n focusableElement = focusableElement.closest(focusableSelector) as HTMLElement\n\n history.unshift(focusableElement ?? e.target)\n\n // Filter out DOM Nodes that don't exist anymore\n history = history.filter((x) => x != null && x.isConnected)\n history.splice(10) // Only keep the 10 most recent items\n }\n\n window.addEventListener('click', handle, { capture: true })\n window.addEventListener('mousedown', handle, { capture: true })\n window.addEventListener('focus', handle, { capture: true })\n\n document.body.addEventListener('click', handle, { capture: true })\n document.body.addEventListener('mousedown', handle, { capture: true })\n document.body.addEventListener('focus', handle, { capture: true })\n})\n", "function assertNever(x: never): never {\n throw new Error('Unexpected object: ' + x)\n}\n\nexport enum Focus {\n /** Focus the first non-disabled item. */\n First,\n\n /** Focus the previous non-disabled item. */\n Previous,\n\n /** Focus the next non-disabled item. */\n Next,\n\n /** Focus the last non-disabled item. */\n Last,\n\n /** Focus a specific item based on the `id` of the item. */\n Specific,\n\n /** Focus no items at all. */\n Nothing,\n}\n\nexport function calculateActiveIndex<TItem>(\n action: { focus: Focus.Specific; id: string } | { focus: Exclude<Focus, Focus.Specific> },\n resolvers: {\n resolveItems(): TItem[]\n resolveActiveIndex(): number | null\n resolveId(item: TItem, index: number, items: TItem[]): string\n resolveDisabled(item: TItem, index: number, items: TItem[]): boolean\n }\n) {\n let items = resolvers.resolveItems()\n if (items.length <= 0) return null\n\n let currentActiveIndex = resolvers.resolveActiveIndex()\n let activeIndex = currentActiveIndex ?? -1\n\n switch (action.focus) {\n case Focus.First: {\n for (let i = 0; i < items.length; ++i) {\n if (!resolvers.resolveDisabled(items[i], i, items)) {\n return i\n }\n }\n return currentActiveIndex\n }\n\n case Focus.Previous: {\n // If nothing is active, focus the last relevant item\n if (activeIndex === -1) activeIndex = items.length\n\n for (let i = activeIndex - 1; i >= 0; --i) {\n if (!resolvers.resolveDisabled(items[i], i, items)) {\n return i\n }\n }\n return currentActiveIndex\n }\n\n case Focus.Next: {\n for (let i = activeIndex + 1; i < items.length; ++i) {\n if (!resolvers.resolveDisabled(items[i], i, items)) {\n return i\n }\n }\n return currentActiveIndex\n }\n\n case Focus.Last: {\n for (let i = items.length - 1; i >= 0; --i) {\n if (!resolvers.resolveDisabled(items[i], i, items)) {\n return i\n }\n }\n return currentActiveIndex\n }\n\n case Focus.Specific: {\n for (let i = 0; i < items.length; ++i) {\n if (resolvers.resolveId(items[i], i, items) === action.id) {\n return i\n }\n }\n return currentActiveIndex\n }\n\n case Focus.Nothing:\n return null\n\n default:\n assertNever(action)\n }\n}\n", "type Entries = [string, string][]\n\nexport function objectToFormEntries(\n source: Record<string, any> = {},\n parentKey: string | null = null,\n entries: Entries = []\n): Entries {\n for (let [key, value] of Object.entries(source)) {\n append(entries, composeKey(parentKey, key), value)\n }\n\n return entries\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(entries: Entries, key: string, value: any): void {\n if (Array.isArray(value)) {\n for (let [subkey, subvalue] of value.entries()) {\n append(entries, composeKey(key, subkey.toString()), subvalue)\n }\n } else if (value instanceof Date) {\n entries.push([key, value.toISOString()])\n } else if (typeof value === 'boolean') {\n entries.push([key, value ? '1' : '0'])\n } else if (typeof value === 'string') {\n entries.push([key, value])\n } else if (typeof value === 'number') {\n entries.push([key, `${value}`])\n } else if (value === null || value === undefined) {\n entries.push([key, ''])\n } else {\n objectToFormEntries(value, key, entries)\n }\n}\n\nexport function attemptSubmit(elementInForm: HTMLElement) {\n let form = (elementInForm as any)?.form ?? elementInForm.closest('form')\n if (!form) return\n\n for (let element of form.elements) {\n if (element === elementInForm) continue\n\n if (\n (element.tagName === 'INPUT' && element.type === 'submit') ||\n (element.tagName === 'BUTTON' && element.type === 'submit') ||\n (element.nodeName === 'INPUT' && element.type === 'image')\n ) {\n // If you press `enter` in a normal input[type='text'] field, then the form will submit by\n // searching for the a submit element and \"click\" it. We could also use the\n // `form.requestSubmit()` function, but this has a downside where an `event.preventDefault()`\n // inside a `click` listener on the submit button won't stop the form from submitting.\n element.click()\n return\n }\n }\n\n // If we get here, then there is no submit button in the form. We can use the\n // `form.requestSubmit()` function to submit the form instead. We cannot use `form.submit()`\n // because then the `submit` event won't be fired and `onSubmit` listeners won't be fired.\n form.requestSubmit?.()\n}\n", "// WAI-ARIA: https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/\nimport {\n computed,\n defineComponent,\n h,\n inject,\n nextTick,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watchEffect,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport { FocusTrap } from '../../components/focus-trap/focus-trap'\nimport { useDocumentOverflowLockedEffect } from '../../hooks/document-overflow/use-document-overflow'\nimport { useEventListener } from '../../hooks/use-event-listener'\nimport { useId } from '../../hooks/use-id'\nimport { useInert } from '../../hooks/use-inert'\nimport { useOutsideClick } from '../../hooks/use-outside-click'\nimport { useRootContainers } from '../../hooks/use-root-containers'\nimport { State, useOpenClosed } from '../../internal/open-closed'\nimport { ForcePortalRoot } from '../../internal/portal-force-root'\nimport { StackMessage, useStackProvider } from '../../internal/stack-context'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport { match } from '../../utils/match'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { Features, render } from '../../utils/render'\nimport { Description, useDescriptions } from '../description/description'\nimport { Portal, PortalGroup, useNestedPortals } from '../portal/portal'\n\nenum DialogStates {\n Open,\n Closed,\n}\n\ninterface StateDefinition {\n dialogState: Ref<DialogStates>\n\n titleId: Ref<string | null>\n panelRef: Ref<HTMLDivElement | null>\n\n setTitleId(id: string | null): void\n\n close(): void\n}\n\nlet DialogContext = Symbol('DialogContext') as InjectionKey<StateDefinition>\n\nfunction useDialogContext(component: string) {\n let context = inject(DialogContext, null)\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <Dialog /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useDialogContext)\n throw err\n }\n return context\n}\n\n// ---\n\nlet Missing = 'DC8F892D-2EBD-447C-A4C8-A03058436FF4'\n\nexport let Dialog = defineComponent({\n name: 'Dialog',\n inheritAttrs: false, // Manually handling this\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n open: { type: [Boolean, String], default: Missing },\n initialFocus: { type: Object as PropType<HTMLElement | null>, default: null },\n id: { type: String, default: () => `headlessui-dialog-${useId()}` },\n role: { type: String as PropType<'dialog' | 'alertdialog'>, default: 'dialog' },\n },\n emits: { close: (_close: boolean) => true },\n setup(props, { emit, attrs, slots, expose }) {\n let ready = ref(false)\n onMounted(() => {\n ready.value = true\n })\n\n let didWarnOnRole = false\n let role = computed(() => {\n if (props.role === 'dialog' || props.role === 'alertdialog') {\n return props.role\n }\n\n if (!didWarnOnRole) {\n didWarnOnRole = true\n console.warn(\n `Invalid role [${role}] passed to <Dialog />. Only \\`dialog\\` and and \\`alertdialog\\` are supported. Using \\`dialog\\` instead.`\n )\n }\n\n return 'dialog'\n })\n\n let nestedDialogCount = ref(0)\n\n let usesOpenClosedState = useOpenClosed()\n let open = computed(() => {\n if (props.open === Missing && usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n return props.open\n })\n\n let internalDialogRef = ref<HTMLDivElement | null>(null)\n\n let ownerDocument = computed(() => getOwnerDocument(internalDialogRef))\n\n expose({ el: internalDialogRef, $el: internalDialogRef })\n\n // Validations\n let hasOpen = props.open !== Missing || usesOpenClosedState !== null\n\n if (!hasOpen) {\n throw new Error(`You forgot to provide an \\`open\\` prop to the \\`Dialog\\`.`)\n }\n\n if (typeof open.value !== 'boolean') {\n throw new Error(\n `You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${\n open.value === Missing ? undefined : props.open\n }`\n )\n }\n\n let dialogState = computed(() =>\n !ready.value ? DialogStates.Closed : open.value ? DialogStates.Open : DialogStates.Closed\n )\n let enabled = computed(() => dialogState.value === DialogStates.Open)\n\n let hasNestedDialogs = computed(() => nestedDialogCount.value > 1) // 1 is the current dialog\n let hasParentDialog = inject(DialogContext, null) !== null\n let [portals, PortalWrapper] = useNestedPortals()\n let {\n resolveContainers: resolveRootContainers,\n mainTreeNodeRef,\n MainTreeNode,\n } = useRootContainers({\n portals,\n defaultContainers: [computed(() => api.panelRef.value ?? internalDialogRef.value)],\n })\n\n // If there are multiple dialogs, then you can be the root, the leaf or one\n // in between. We only care about whether you are the top most one or not.\n let position = computed(() => (!hasNestedDialogs.value ? 'leaf' : 'parent'))\n\n // When the `Dialog` is wrapped in a `Transition` (or another Headless UI component that exposes\n // the OpenClosed state) then we get some information via context about its state. When the\n // `Transition` is about to close, then the `State.Closing` state will be exposed. This allows us\n // to enable/disable certain functionality in the `Dialog` upfront instead of waiting until the\n // `Transition` is done transitioning.\n let isClosing = computed(() =>\n usesOpenClosedState !== null\n ? (usesOpenClosedState.value & State.Closing) === State.Closing\n : false\n )\n\n // Ensure other elements can't be interacted with\n let inertOthersEnabled = computed(() => {\n // Nested dialogs should not modify the `inert` property, only the root one should.\n if (hasParentDialog) return false\n if (isClosing.value) return false\n return enabled.value\n })\n let resolveRootOfMainTreeNode = computed(() => {\n return (Array.from(ownerDocument.value?.querySelectorAll('body > *') ?? []).find((root) => {\n // Skip the portal root, we don't want to make that one inert\n if (root.id === 'headlessui-portal-root') return false\n\n // Find the root of the main tree node\n return root.contains(dom(mainTreeNodeRef)) && root instanceof HTMLElement\n }) ?? null) as HTMLElement | null\n })\n useInert(resolveRootOfMainTreeNode, inertOthersEnabled)\n\n // This would mark the parent dialogs as inert\n let inertParentDialogs = computed(() => {\n if (hasNestedDialogs.value) return true\n return enabled.value\n })\n let resolveRootOfParentDialog = computed(() => {\n return (Array.from(\n ownerDocument.value?.querySelectorAll('[data-headlessui-portal]') ?? []\n ).find((root) => root.contains(dom(mainTreeNodeRef)) && root instanceof HTMLElement) ??\n null) as HTMLElement | null\n })\n useInert(resolveRootOfParentDialog, inertParentDialogs)\n\n useStackProvider({\n type: 'Dialog',\n enabled: computed(() => dialogState.value === DialogStates.Open),\n element: internalDialogRef,\n onUpdate: (message, type) => {\n if (type !== 'Dialog') return\n\n return match(message, {\n [StackMessage.Add]: () => (nestedDialogCount.value += 1),\n [StackMessage.Remove]: () => (nestedDialogCount.value -= 1),\n })\n },\n })\n\n let describedby = useDescriptions({\n name: 'DialogDescription',\n slot: computed(() => ({ open: open.value })),\n })\n\n let titleId = ref<StateDefinition['titleId']['value']>(null)\n\n let api = {\n titleId,\n panelRef: ref(null),\n dialogState,\n setTitleId(id: string | null) {\n if (titleId.value === id) return\n titleId.value = id\n },\n close() {\n emit('close', false)\n },\n }\n\n provide(DialogContext, api)\n\n // Handle outside click\n let outsideClickEnabled = computed(() => {\n if (!enabled.value) return false\n if (hasNestedDialogs.value) return false\n return true\n })\n useOutsideClick(\n resolveRootContainers,\n (event, target) => {\n event.preventDefault()\n api.close()\n nextTick(() => target?.focus())\n },\n outsideClickEnabled\n )\n\n // Handle `Escape` to close\n let escapeToCloseEnabled = computed(() => {\n if (hasNestedDialogs.value) return false\n if (dialogState.value !== DialogStates.Open) return false\n return true\n })\n useEventListener(ownerDocument.value?.defaultView, 'keydown', (event) => {\n if (!escapeToCloseEnabled.value) return\n if (event.defaultPrevented) return\n if (event.key !== Keys.Escape) return\n\n event.preventDefault()\n event.stopPropagation()\n api.close()\n })\n\n // Scroll lock\n let scrollLockEnabled = computed(() => {\n if (isClosing.value) return false\n if (dialogState.value !== DialogStates.Open) return false\n if (hasParentDialog) return false\n return true\n })\n useDocumentOverflowLockedEffect(ownerDocument, scrollLockEnabled, (meta) => ({\n containers: [...(meta.containers ?? []), resolveRootContainers],\n }))\n\n // Trigger close when the FocusTrap gets hidden\n watchEffect((onInvalidate) => {\n if (dialogState.value !== DialogStates.Open) return\n let container = dom(internalDialogRef)\n if (!container) return\n\n let observer = new ResizeObserver((entries) => {\n for (let entry of entries) {\n let rect = entry.target.getBoundingClientRect()\n if (rect.x === 0 && rect.y === 0 && rect.width === 0 && rect.height === 0) {\n api.close()\n }\n }\n })\n\n observer.observe(container)\n\n onInvalidate(() => observer.disconnect())\n })\n\n return () => {\n let { id, open: _, initialFocus, ...theirProps } = props\n let ourProps = {\n // Manually passthrough the attributes, because Vue can't automatically pass\n // it to the underlying div because of all the wrapper components below.\n ...attrs,\n ref: internalDialogRef,\n id,\n role: role.value,\n 'aria-modal': dialogState.value === DialogStates.Open ? true : undefined,\n 'aria-labelledby': titleId.value,\n 'aria-describedby': describedby.value,\n }\n\n let slot = { open: dialogState.value === DialogStates.Open }\n\n return h(ForcePortalRoot, { force: true }, () => [\n h(Portal, () =>\n h(PortalGroup, { target: internalDialogRef.value }, () =>\n h(ForcePortalRoot, { force: false }, () =>\n h(\n FocusTrap,\n {\n initialFocus,\n containers: resolveRootContainers,\n features: enabled.value\n ? match(position.value, {\n parent: FocusTrap.features.RestoreFocus,\n leaf: FocusTrap.features.All & ~FocusTrap.features.FocusLock,\n })\n : FocusTrap.features.None,\n },\n () =>\n h(PortalWrapper, {}, () =>\n render({\n ourProps,\n theirProps: { ...theirProps, ...attrs },\n slot,\n attrs,\n slots,\n visible: dialogState.value === DialogStates.Open,\n features: Features.RenderStrategy | Features.Static,\n name: 'Dialog',\n })\n )\n )\n )\n )\n ),\n h(MainTreeNode),\n ])\n }\n },\n})\n\n// ---\n\nexport let DialogOverlay = defineComponent({\n name: 'DialogOverlay',\n props: {\n as: { type: [Object, String], default: 'div' },\n id: { type: String, default: () => `headlessui-dialog-overlay-${useId()}` },\n },\n setup(props, { attrs, slots }) {\n let api = useDialogContext('DialogOverlay')\n\n function handleClick(event: MouseEvent) {\n if (event.target !== event.currentTarget) return\n event.preventDefault()\n event.stopPropagation()\n api.close()\n }\n\n return () => {\n let { id, ...theirProps } = props\n let ourProps = {\n id,\n 'aria-hidden': true,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps,\n slot: { open: api.dialogState.value === DialogStates.Open },\n attrs,\n slots,\n name: 'DialogOverlay',\n })\n }\n },\n})\n\n// ---\n\nexport let DialogBackdrop = defineComponent({\n name: 'DialogBackdrop',\n props: {\n as: { type: [Object, String], default: 'div' },\n id: { type: String, default: () => `headlessui-dialog-backdrop-${useId()}` },\n },\n inheritAttrs: false,\n setup(props, { attrs, slots, expose }) {\n let api = useDialogContext('DialogBackdrop')\n let internalBackdropRef = ref(null)\n\n expose({ el: internalBackdropRef, $el: internalBackdropRef })\n\n onMounted(() => {\n if (api.panelRef.value === null) {\n throw new Error(\n `A <DialogBackdrop /> component is being used, but a <DialogPanel /> component is missing.`\n )\n }\n })\n\n return () => {\n let { id, ...theirProps } = props\n let ourProps = {\n id,\n ref: internalBackdropRef,\n 'aria-hidden': true,\n }\n\n return h(ForcePortalRoot, { force: true }, () =>\n h(Portal, () =>\n render({\n ourProps,\n theirProps: { ...attrs, ...theirProps },\n slot: { open: api.dialogState.value === DialogStates.Open },\n attrs,\n slots,\n name: 'DialogBackdrop',\n })\n )\n )\n }\n },\n})\n\n// ---\n\nexport let DialogPanel = defineComponent({\n name: 'DialogPanel',\n props: {\n as: { type: [Object, String], default: 'div' },\n id: { type: String, default: () => `headlessui-dialog-panel-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useDialogContext('DialogPanel')\n\n expose({ el: api.panelRef, $el: api.panelRef })\n\n function handleClick(event: MouseEvent) {\n event.stopPropagation()\n }\n\n return () => {\n let { id, ...theirProps } = props\n let ourProps = {\n id,\n ref: api.panelRef,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps,\n slot: { open: api.dialogState.value === DialogStates.Open },\n attrs,\n slots,\n name: 'DialogPanel',\n })\n }\n },\n})\n\n// ---\n\nexport let DialogTitle = defineComponent({\n name: 'DialogTitle',\n props: {\n as: { type: [Object, String], default: 'h2' },\n id: { type: String, default: () => `headlessui-dialog-title-${useId()}` },\n },\n setup(props, { attrs, slots }) {\n let api = useDialogContext('DialogTitle')\n\n onMounted(() => {\n api.setTitleId(props.id)\n onUnmounted(() => api.setTitleId(null))\n })\n\n return () => {\n let { id, ...theirProps } = props\n let ourProps = { id }\n\n return render({\n ourProps,\n theirProps,\n slot: { open: api.dialogState.value === DialogStates.Open },\n attrs,\n slots,\n name: 'DialogTitle',\n })\n }\n },\n})\n\n// ---\n\nexport let DialogDescription = Description\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n onMounted,\n onUnmounted,\n ref,\n watch,\n watchEffect,\n type PropType,\n type Ref,\n} from 'vue'\nimport { useEventListener } from '../../hooks/use-event-listener'\nimport { Direction as TabDirection, useTabDirection } from '../../hooks/use-tab-direction'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { history } from '../../utils/active-element-history'\nimport { dom } from '../../utils/dom'\nimport { Focus, FocusResult, focusElement, focusIn } from '../../utils/focus-management'\nimport { match } from '../../utils/match'\nimport { microTask } from '../../utils/micro-task'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { render } from '../../utils/render'\n\ntype Containers =\n // Lazy resolved containers\n | (() => Iterable<HTMLElement>)\n\n // List of containers\n | Ref<Set<Ref<HTMLElement | null>>>\n\nfunction resolveContainers(containers?: Containers): Set<HTMLElement> {\n if (!containers) return new Set<HTMLElement>()\n if (typeof containers === 'function') return new Set(containers())\n\n let all = new Set<HTMLElement>()\n for (let container of containers.value) {\n let el = dom(container)\n if (el instanceof HTMLElement) {\n all.add(el)\n }\n }\n return all\n}\n\nenum Features {\n /** No features enabled for the focus trap. */\n None = 1 << 0,\n\n /** Ensure that we move focus initially into the container. */\n InitialFocus = 1 << 1,\n\n /** Ensure that pressing `Tab` and `Shift+Tab` is trapped within the container. */\n TabLock = 1 << 2,\n\n /** Ensure that programmatically moving focus outside of the container is disallowed. */\n FocusLock = 1 << 3,\n\n /** Ensure that we restore the focus when unmounting the focus trap. */\n RestoreFocus = 1 << 4,\n\n /** Enable all features. */\n All = InitialFocus | TabLock | FocusLock | RestoreFocus,\n}\n\nexport let FocusTrap = Object.assign(\n defineComponent({\n name: 'FocusTrap',\n props: {\n as: { type: [Object, String], default: 'div' },\n initialFocus: { type: Object as PropType<HTMLElement | null>, default: null },\n features: { type: Number as PropType<Features>, default: Features.All },\n containers: {\n type: [Object, Function] as PropType<Containers>,\n default: ref(new Set()),\n },\n },\n inheritAttrs: false,\n setup(props, { attrs, slots, expose }) {\n let container = ref<HTMLElement | null>(null)\n\n expose({ el: container, $el: container })\n\n let ownerDocument = computed(() => getOwnerDocument(container))\n\n let mounted = ref(false)\n onMounted(() => (mounted.value = true))\n onUnmounted(() => (mounted.value = false))\n\n useRestoreFocus(\n { ownerDocument },\n computed(() => mounted.value && Boolean(props.features & Features.RestoreFocus))\n )\n let previousActiveElement = useInitialFocus(\n { ownerDocument, container, initialFocus: computed(() => props.initialFocus) },\n computed(() => mounted.value && Boolean(props.features & Features.InitialFocus))\n )\n useFocusLock(\n {\n ownerDocument,\n container,\n containers: props.containers,\n previousActiveElement,\n },\n computed(() => mounted.value && Boolean(props.features & Features.FocusLock))\n )\n\n let direction = useTabDirection()\n function handleFocus(e: FocusEvent) {\n let el = dom(container) as HTMLElement\n if (!el) return\n\n // TODO: Cleanup once we are using real browser tests\n let wrapper = process.env.NODE_ENV === 'test' ? microTask : (cb: Function) => cb()\n wrapper(() => {\n match(direction.value, {\n [TabDirection.Forwards]: () => {\n focusIn(el, Focus.First, { skipElements: [e.relatedTarget as HTMLElement] })\n },\n [TabDirection.Backwards]: () => {\n focusIn(el, Focus.Last, { skipElements: [e.relatedTarget as HTMLElement] })\n },\n })\n })\n }\n\n let recentlyUsedTabKey = ref(false)\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Tab') {\n recentlyUsedTabKey.value = true\n requestAnimationFrame(() => {\n recentlyUsedTabKey.value = false\n })\n }\n }\n\n function handleBlur(e: FocusEvent) {\n if (!mounted.value) return\n let allContainers = resolveContainers(props.containers)\n if (dom(container) instanceof HTMLElement) allContainers.add(dom(container)!)\n\n let relatedTarget = e.relatedTarget\n if (!(relatedTarget instanceof HTMLElement)) return\n\n // Known guards, leave them alone!\n if (relatedTarget.dataset.headlessuiFocusGuard === 'true') {\n return\n }\n\n // Blur is triggered due to focus on relatedTarget, and the relatedTarget is not inside any\n // of the dialog containers. In other words, let's move focus back in!\n if (!contains(allContainers, relatedTarget)) {\n // Was the blur invoked via the keyboard? Redirect to the next in line.\n if (recentlyUsedTabKey.value) {\n focusIn(\n dom(container) as HTMLElement,\n match(direction.value, {\n [TabDirection.Forwards]: () => Focus.Next,\n [TabDirection.Backwards]: () => Focus.Previous,\n }) | Focus.WrapAround,\n { relativeTo: e.target as HTMLElement }\n )\n }\n\n // It was invoked via something else (e.g.: click, programmatically, ...). Redirect to the\n // previous active item in the FocusTrap\n else if (e.target instanceof HTMLElement) {\n focusElement(e.target)\n }\n }\n }\n\n return () => {\n let slot = {}\n let ourProps = { ref: container, onKeydown: handleKeyDown, onFocusout: handleBlur }\n let { features, initialFocus, containers: _containers, ...theirProps } = props\n\n return h(Fragment, [\n Boolean(features & Features.TabLock) &&\n h(Hidden, {\n as: 'button',\n type: 'button',\n 'data-headlessui-focus-guard': true,\n onFocus: handleFocus,\n features: HiddenFeatures.Focusable,\n }),\n render({\n ourProps,\n theirProps: { ...attrs, ...theirProps },\n slot,\n attrs,\n slots,\n name: 'FocusTrap',\n }),\n Boolean(features & Features.TabLock) &&\n h(Hidden, {\n as: 'button',\n type: 'button',\n 'data-headlessui-focus-guard': true,\n onFocus: handleFocus,\n features: HiddenFeatures.Focusable,\n }),\n ])\n }\n },\n }),\n { features: Features }\n)\n\nfunction useRestoreElement(enabled: Ref<boolean>) {\n let localHistory = ref<HTMLElement[]>(history.slice())\n\n watch(\n [enabled],\n ([newEnabled], [oldEnabled]) => {\n // We are disabling the restore element, so we need to clear it.\n if (oldEnabled === true && newEnabled === false) {\n // However, let's schedule it in a microTask, so that we can still read the value in the\n // places where we are restoring the focus.\n microTask(() => {\n localHistory.value.splice(0)\n })\n }\n\n // We are enabling the restore element, so we need to set it to the last \"focused\" element.\n else if (oldEnabled === false && newEnabled === true) {\n localHistory.value = history.slice()\n }\n },\n { flush: 'post' }\n )\n\n // We want to return the last element that is still connected to the DOM, so we can restore the\n // focus to it.\n return () => {\n return localHistory.value.find((x) => x != null && x.isConnected) ?? null\n }\n}\n\nfunction useRestoreFocus(\n { ownerDocument }: { ownerDocument: Ref<Document | null> },\n enabled: Ref<boolean>\n) {\n let getRestoreElement = useRestoreElement(enabled)\n\n // Restore the focus to the previous element\n onMounted(() => {\n watchEffect(\n () => {\n if (enabled.value) return\n\n if (ownerDocument.value?.activeElement === ownerDocument.value?.body) {\n focusElement(getRestoreElement())\n }\n },\n { flush: 'post' }\n )\n })\n\n // Restore the focus when we unmount the component\n onUnmounted(() => {\n if (!enabled.value) return\n\n focusElement(getRestoreElement())\n })\n}\n\nfunction useInitialFocus(\n {\n ownerDocument,\n container,\n initialFocus,\n }: {\n ownerDocument: Ref<Document | null>\n container: Ref<HTMLElement | null>\n initialFocus?: Ref<HTMLElement | null>\n },\n enabled: Ref<boolean>\n) {\n let previousActiveElement = ref<HTMLElement | null>(null)\n\n let mounted = ref(false)\n onMounted(() => (mounted.value = true))\n onUnmounted(() => (mounted.value = false))\n\n onMounted(() => {\n watch(\n // Handle initial focus\n [container, initialFocus, enabled],\n (newValues, prevValues) => {\n if (newValues.every((value, idx) => prevValues?.[idx] === value)) return\n if (!enabled.value) return\n\n let containerElement = dom(container)\n if (!containerElement) return\n\n // Delaying the focus to the next microtask ensures that a few conditions are true:\n // - The container is rendered\n // - Transitions could be started\n // If we don't do this, then focusing an element will immediately cancel any transitions. This\n // is not ideal because transitions will look broken.\n // There is an additional issue with doing this immediately. The FocusTrap is used inside a\n // Dialog, the Dialog is rendered inside of a Portal and the Portal is rendered at the end of\n // the `document.body`. This means that the moment we call focus, the browser immediately\n // tries to focus the element, which will still be at the bottom resulting in the page to\n // scroll down. Delaying this will prevent the page to scroll down entirely.\n microTask(() => {\n if (!mounted.value) {\n return\n }\n\n let initialFocusElement = dom(initialFocus)\n\n let activeElement = ownerDocument.value?.activeElement as HTMLElement\n\n if (initialFocusElement) {\n if (initialFocusElement === activeElement) {\n previousActiveElement.value = activeElement\n return // Initial focus ref is already the active element\n }\n } else if (containerElement!.contains(activeElement)) {\n previousActiveElement.value = activeElement\n return // Already focused within Dialog\n }\n\n // Try to focus the initialFocus ref\n if (initialFocusElement) {\n focusElement(initialFocusElement)\n } else {\n if (focusIn(containerElement!, Focus.First | Focus.NoScroll) === FocusResult.Error) {\n console.warn('There are no focusable elements inside the <FocusTrap />')\n }\n }\n\n previousActiveElement.value = ownerDocument.value?.activeElement as HTMLElement\n })\n },\n { immediate: true, flush: 'post' }\n )\n })\n\n return previousActiveElement\n}\n\nfunction useFocusLock(\n {\n ownerDocument,\n container,\n containers,\n previousActiveElement,\n }: {\n ownerDocument: Ref<Document | null>\n container: Ref<HTMLElement | null>\n containers: Containers\n previousActiveElement: Ref<HTMLElement | null>\n },\n enabled: Ref<boolean>\n) {\n // Prevent programmatically escaping\n useEventListener(\n ownerDocument.value?.defaultView,\n 'focus',\n (event) => {\n if (!enabled.value) return\n\n let allContainers = resolveContainers(containers)\n if (dom(container) instanceof HTMLElement) allContainers.add(dom(container)!)\n\n let previous = previousActiveElement.value\n if (!previous) return\n\n let toElement = event.target as HTMLElement | null\n\n if (toElement && toElement instanceof HTMLElement) {\n if (!contains(allContainers, toElement)) {\n event.preventDefault()\n event.stopPropagation()\n focusElement(previous)\n } else {\n previousActiveElement.value = toElement\n focusElement(toElement)\n }\n } else {\n focusElement(previousActiveElement.value)\n }\n },\n true\n )\n}\n\nfunction contains(containers: Set<HTMLElement>, element: HTMLElement) {\n for (let container of containers) {\n if (container.contains(element)) return true\n }\n\n return false\n}\n", "import { watchEffect } from 'vue'\nimport { env } from '../utils/env'\n\nexport function useEventListener<TType extends keyof WindowEventMap>(\n element: HTMLElement | Document | Window | EventTarget | null | undefined,\n type: TType,\n listener: (event: WindowEventMap[TType]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n if (env.isServer) return\n\n watchEffect((onInvalidate) => {\n element = element ?? window\n\n element.addEventListener(type, listener as any, options)\n onInvalidate(() => element!.removeEventListener(type, listener as any, options))\n })\n}\n", "import { ref } from 'vue'\nimport { useWindowEvent } from './use-window-event'\n\nexport enum Direction {\n Forwards,\n Backwards,\n}\n\nexport function useTabDirection() {\n let direction = ref(Direction.Forwards)\n let enabled = ref(true)\n\n useWindowEvent(enabled, 'keydown', (event) => {\n if (event.key === 'Tab') {\n direction.value = event.shiftKey ? Direction.Backwards : Direction.Forwards\n }\n })\n\n return direction\n}\n", "import { computed, watch, type Ref } from 'vue'\nimport { useStore } from '../../hooks/use-store'\nimport { overflows, type MetaFn } from './overflow-store'\n\nexport function useDocumentOverflowLockedEffect(\n doc: Ref<Document | null>,\n shouldBeLocked: Ref<boolean>,\n meta: MetaFn\n) {\n let store = useStore(overflows)\n let locked = computed(() => {\n let entry = doc.value ? store.value.get(doc.value) : undefined\n return entry ? entry.count > 0 : false\n })\n\n watch(\n [doc, shouldBeLocked],\n ([doc, shouldBeLocked], [oldDoc], onInvalidate) => {\n if (!doc || !shouldBeLocked) {\n return\n }\n\n // Prevent the document from scrolling\n overflows.dispatch('PUSH', doc, meta)\n\n // Allow document to scroll\n let didRunCleanup = false\n onInvalidate(() => {\n if (didRunCleanup) return\n overflows.dispatch('POP', oldDoc ?? doc, meta)\n\n // This shouldn't be necessary, but it is.\n // Seems like a Vue bug.\n didRunCleanup = true\n })\n },\n {\n immediate: true,\n }\n )\n\n return locked\n}\n", "import { onUnmounted, shallowRef } from 'vue'\nimport type { Store } from '../utils/store'\n\nexport function useStore<T>(store: Store<T, any>) {\n let state = shallowRef(store.getSnapshot())\n\n onUnmounted(\n store.subscribe(() => {\n state.value = store.getSnapshot()\n })\n )\n\n return state\n}\n", "type ChangeFn = () => void\ntype UnsubscribeFn = () => void\ntype ActionFn<T> = (this: T, ...args: any[]) => T | void\ntype StoreActions<Key extends string, T> = Record<Key, ActionFn<T>>\n\nexport interface Store<T, ActionKey extends string> {\n getSnapshot(): T\n subscribe(onChange: ChangeFn): UnsubscribeFn\n dispatch(action: ActionKey, ...args: any[]): void\n}\n\nexport function createStore<T, ActionKey extends string>(\n initial: () => T,\n actions: StoreActions<ActionKey, T>\n): Store<T, ActionKey> {\n let state: T = initial()\n\n let listeners = new Set<ChangeFn>()\n\n return {\n getSnapshot() {\n return state\n },\n\n subscribe(onChange) {\n listeners.add(onChange)\n\n return () => listeners.delete(onChange)\n },\n\n dispatch(key: ActionKey, ...args: any[]) {\n let newState = actions[key].call(state, ...args)\n if (newState) {\n state = newState\n listeners.forEach((listener) => listener())\n }\n },\n }\n}\n", "import type { ScrollLockStep } from './overflow-store'\n\nexport function adjustScrollbarPadding(): ScrollLockStep {\n let scrollbarWidthBefore: number\n\n return {\n before({ doc }) {\n let documentElement = doc.documentElement\n let ownerWindow = doc.defaultView ?? window\n\n scrollbarWidthBefore = Math.max(0, ownerWindow.innerWidth - documentElement.clientWidth)\n },\n\n after({ doc, d }) {\n let documentElement = doc.documentElement\n\n // Account for the change in scrollbar width\n // NOTE: This is a bit of a hack, but it's the only way to do this\n let scrollbarWidthAfter = Math.max(\n 0,\n documentElement.clientWidth - documentElement.offsetWidth\n )\n let scrollbarWidth = Math.max(0, scrollbarWidthBefore - scrollbarWidthAfter)\n\n d.style(documentElement, 'paddingRight', `${scrollbarWidth}px`)\n },\n }\n}\n", "import { disposables } from '../../utils/disposables'\nimport { isIOS } from '../../utils/platform'\nimport type { ScrollLockStep } from './overflow-store'\n\ninterface ContainerMetadata {\n containers: (() => HTMLElement[])[]\n}\n\nexport function handleIOSLocking(): ScrollLockStep<ContainerMetadata> {\n if (!isIOS()) {\n return {}\n }\n\n return {\n before({ doc, d, meta }) {\n function inAllowedContainer(el: HTMLElement) {\n return meta.containers\n .flatMap((resolve) => resolve())\n .some((container) => container.contains(el))\n }\n\n d.microTask(() => {\n // We need to be able to offset the body with the current scroll position. However, if you\n // have `scroll-behavior: smooth` set, then changing the scrollTop in any way shape or form\n // will trigger a \"smooth\" scroll and the new position would be incorrect.\n //\n // This is why we are forcing the `scroll-behaviour: auto` here, and then restoring it later.\n // We have to be a bit careful, because removing `scroll-behavior: auto` back to\n // `scroll-behavior: smooth` can start triggering smooth scrolling. Delaying this by a\n // microTask will guarantee that everything is done such that both enter/exit of the Dialog is\n // not using smooth scrolling.\n if (window.getComputedStyle(doc.documentElement).scrollBehavior !== 'auto') {\n let _d = disposables()\n _d.style(doc.documentElement, 'scrollBehavior', 'auto')\n d.add(() => d.microTask(() => _d.dispose()))\n }\n\n // Keep track of the current scroll position so that we can restore the scroll position if\n // it has changed in the meantime.\n let scrollPosition = window.scrollY ?? window.pageYOffset\n\n // Relatively hacky, but if you click a link like `<a href=\"#foo\">` in the Dialog, and there\n // exists an element on the page (outside of the Dialog) with that id, then the browser will\n // scroll to that position. However, this is not the case if the element we want to scroll to\n // is higher and the browser needs to scroll up, but it doesn't do that.\n //\n // Let's try and capture that element and store it, so that we can later scroll to it once the\n // Dialog closes.\n let scrollToElement: HTMLElement | null = null\n d.addEventListener(\n doc,\n 'click',\n (e) => {\n if (!(e.target instanceof HTMLElement)) {\n return\n }\n\n try {\n let anchor = e.target.closest('a')\n if (!anchor) return\n let { hash } = new URL(anchor.href)\n let el = doc.querySelector(hash)\n if (el && !inAllowedContainer(el as HTMLElement)) {\n scrollToElement = el as HTMLElement\n }\n } catch (err) {}\n },\n true\n )\n\n // Rely on overscrollBehavior to prevent scrolling outside of the Dialog.\n d.addEventListener(doc, 'touchstart', (e) => {\n if (e.target instanceof HTMLElement) {\n if (inAllowedContainer(e.target as HTMLElement)) {\n // Find the root of the allowed containers\n let rootContainer = e.target\n while (\n rootContainer.parentElement &&\n inAllowedContainer(rootContainer.parentElement)\n ) {\n rootContainer = rootContainer.parentElement!\n }\n\n d.style(rootContainer, 'overscrollBehavior', 'contain')\n } else {\n d.style(e.target, 'touchAction', 'none')\n }\n }\n })\n\n d.addEventListener(\n doc,\n 'touchmove',\n (e) => {\n // Check if we are scrolling inside any of the allowed containers, if not let's cancel the event!\n if (e.target instanceof HTMLElement) {\n // Some inputs like `<input type=range>` use touch events to\n // allow interaction. We should not prevent this event.\n if (e.target.tagName === 'INPUT') {\n return\n }\n\n if (inAllowedContainer(e.target as HTMLElement)) {\n // Even if we are in an allowed container, on iOS the main page can still scroll, we\n // have to make sure that we `event.preventDefault()` this event to prevent that.\n //\n // However, if we happen to scroll on an element that is overflowing, or any of its\n // parents are overflowing, then we should not call `event.preventDefault()` because\n // otherwise we are preventing the user from scrolling inside that container which\n // is not what we want.\n let scrollableParent = e.target\n while (\n scrollableParent.parentElement &&\n // Assumption: We are always used in a Headless UI Portal. Once we reach the\n // portal itself, we can stop crawling up the tree.\n scrollableParent.dataset.headlessuiPortal !== ''\n ) {\n // Check if the scrollable container is overflowing or not.\n //\n // NOTE: we could check the `overflow`, `overflow-y` and `overflow-x` properties\n // but when there is no overflow happening then the `overscrollBehavior` doesn't\n // seem to work and the main page will still scroll. So instead we check if the\n // scrollable container is overflowing or not and use that heuristic instead.\n if (\n scrollableParent.scrollHeight > scrollableParent.clientHeight ||\n scrollableParent.scrollWidth > scrollableParent.clientWidth\n ) {\n break\n }\n\n scrollableParent = scrollableParent.parentElement\n }\n\n // We crawled up the tree until the beginning of the Portal, let's prevent the\n // event if this is the case. If not, then we are in a container where we are\n // allowed to scroll so we don't have to prevent the event.\n if (scrollableParent.dataset.headlessuiPortal === '') {\n e.preventDefault()\n }\n }\n\n // We are not in an allowed container, so let's prevent the event.\n else {\n e.preventDefault()\n }\n }\n },\n { passive: false }\n )\n\n // Restore scroll position if a scrollToElement was captured.\n d.add(() => {\n let newScrollPosition = window.scrollY ?? window.pageYOffset\n\n // If the scroll position changed, then we can restore it to the previous value. This will\n // happen if you focus an input field and the browser scrolls for you.\n if (scrollPosition !== newScrollPosition) {\n window.scrollTo(0, scrollPosition)\n }\n\n // If we captured an element that should be scrolled to, then we can try to do that if the\n // element is still connected (aka, still in the DOM).\n if (scrollToElement && scrollToElement.isConnected) {\n scrollToElement.scrollIntoView({ block: 'nearest' })\n scrollToElement = null\n }\n })\n })\n },\n }\n}\n", "import type { ScrollLockStep } from './overflow-store'\n\nexport function preventScroll(): ScrollLockStep {\n return {\n before({ doc, d }) {\n d.style(doc.documentElement, 'overflow', 'hidden')\n },\n }\n}\n", "import { disposables, type Disposables } from '../../utils/disposables'\nimport { createStore } from '../../utils/store'\nimport { adjustScrollbarPadding } from './adjust-scrollbar-padding'\nimport { handleIOSLocking } from './handle-ios-locking'\nimport { preventScroll } from './prevent-scroll'\n\ninterface DocEntry {\n doc: Document\n count: number\n d: Disposables\n meta: Set<MetaFn>\n}\n\nfunction buildMeta(fns: Iterable<MetaFn>) {\n let tmp = {}\n for (let fn of fns) {\n Object.assign(tmp, fn(tmp))\n }\n return tmp\n}\n\nexport type MetaFn = (meta: Record<string, any>) => Record<string, any>\n\nexport interface Context<MetaType extends Record<string, any> = any> {\n doc: Document\n d: Disposables\n meta: MetaType\n}\n\nexport interface ScrollLockStep<MetaType extends Record<string, any> = any> {\n before?(ctx: Context<MetaType>): void\n after?(ctx: Context<MetaType>): void\n}\n\nexport let overflows = createStore(() => new Map<Document, DocEntry>(), {\n PUSH(doc: Document, meta: MetaFn) {\n let entry = this.get(doc) ?? {\n doc,\n count: 0,\n d: disposables(),\n meta: new Set(),\n }\n\n entry.count++\n entry.meta.add(meta)\n this.set(doc, entry)\n\n return this\n },\n\n POP(doc: Document, meta: MetaFn) {\n let entry = this.get(doc)\n if (entry) {\n entry.count--\n entry.meta.delete(meta)\n }\n\n return this\n },\n\n SCROLL_PREVENT({ doc, d, meta }: DocEntry) {\n let ctx = {\n doc,\n d,\n meta: buildMeta(meta),\n }\n\n let steps: ScrollLockStep<any>[] = [\n handleIOSLocking(),\n adjustScrollbarPadding(),\n preventScroll(),\n ]\n\n // Run all `before` actions together\n steps.forEach(({ before }) => before?.(ctx))\n\n // Run all `after` actions together\n steps.forEach(({ after }) => after?.(ctx))\n },\n\n SCROLL_ALLOW({ d }: DocEntry) {\n d.dispose()\n },\n\n TEARDOWN({ doc }: DocEntry) {\n this.delete(doc)\n },\n})\n\n// Update the document overflow state when the store changes\n// This MUST happen outside of react for this to work properly.\noverflows.subscribe(() => {\n let docs = overflows.getSnapshot()\n\n let styles = new Map<Document, string | undefined>()\n\n // Read data from all the documents\n for (let [doc] of docs) {\n styles.set(doc, doc.documentElement.style.overflow)\n }\n\n // Write data to all the documents\n for (let entry of docs.values()) {\n let isHidden = styles.get(entry.doc) === 'hidden'\n let isLocked = entry.count !== 0\n let willChange = (isLocked && !isHidden) || (!isLocked && isHidden)\n\n if (willChange) {\n overflows.dispatch(entry.count > 0 ? 'SCROLL_PREVENT' : 'SCROLL_ALLOW', entry)\n }\n\n // We have to clean up after ourselves so we don't leak memory\n // Using a WeakMap would be ideal, but it's not iterable\n if (entry.count === 0) {\n overflows.dispatch('TEARDOWN', entry)\n }\n }\n})\n", "import { ref, watchEffect, type Ref } from 'vue'\nimport { dom } from '../utils/dom'\n\nlet originals = new Map<HTMLElement, { 'aria-hidden': string | null; inert: boolean }>()\nlet counts = new Map<HTMLElement, number>()\n\nexport function useInert<TElement extends HTMLElement>(\n node: Ref<TElement | null>,\n enabled: Ref<boolean> = ref(true)\n) {\n watchEffect((onInvalidate) => {\n if (!enabled.value) return\n\n let element = dom(node)\n if (!element) return\n\n onInvalidate(function cleanup() {\n if (!element) return // Should never happen\n\n // Decrease counts\n let count = counts.get(element) ?? 1 // Should always exist\n if (count === 1) counts.delete(element) // We are the last one, so we can delete the count\n else counts.set(element, count - 1) // We are not the last one\n\n // Not the last one, so we don't restore the original values (yet)\n if (count !== 1) return\n\n let original = originals.get(element)\n if (!original) return // Should never happen\n\n // Restore original values\n if (original['aria-hidden'] === null) element.removeAttribute('aria-hidden')\n else element.setAttribute('aria-hidden', original['aria-hidden'])\n element.inert = original.inert\n\n // Remove tracking of original values\n originals.delete(element)\n })\n\n // Increase count\n let count = counts.get(element) ?? 0\n counts.set(element, count + 1)\n\n // Already marked as inert, no need to do it again\n if (count !== 0) return\n\n // Keep track of previous values, so that we can restore them when we are done\n originals.set(element, {\n 'aria-hidden': element.getAttribute('aria-hidden'),\n inert: element.inert,\n })\n\n // Mark as inert\n element.setAttribute('aria-hidden', 'true')\n element.inert = true\n })\n}\n", "import { h, ref, type Ref } from 'vue'\nimport { Hidden, Features as HiddenFeatures } from '../internal/hidden'\nimport { dom } from '../utils/dom'\nimport { getOwnerDocument } from '../utils/owner'\n\nexport function useRootContainers({\n defaultContainers = [],\n portals,\n mainTreeNodeRef: _mainTreeNodeRef,\n}: {\n defaultContainers?: (HTMLElement | null | Ref<HTMLElement | null>)[]\n portals?: Ref<HTMLElement[]>\n mainTreeNodeRef?: Ref<HTMLElement | null>\n} = {}) {\n // Reference to a node in the \"main\" tree, not in the portalled Dialog tree.\n let mainTreeNodeRef = ref<HTMLElement | null>(null)\n let ownerDocument = getOwnerDocument(mainTreeNodeRef)\n\n function resolveContainers() {\n let containers: HTMLElement[] = []\n\n // Resolve default containers\n for (let container of defaultContainers) {\n if (container === null) continue\n if (container instanceof HTMLElement) {\n containers.push(container)\n } else if ('value' in container && container.value instanceof HTMLElement) {\n containers.push(container.value)\n }\n }\n\n // Resolve portal containers\n if (portals?.value) {\n for (let portal of portals.value) {\n containers.push(portal)\n }\n }\n\n // Resolve third party (root) containers\n for (let container of ownerDocument?.querySelectorAll('html > *, body > *') ?? []) {\n if (container === document.body) continue // Skip `<body>`\n if (container === document.head) continue // Skip `<head>`\n if (!(container instanceof HTMLElement)) continue // Skip non-HTMLElements\n if (container.id === 'headlessui-portal-root') continue // Skip the Headless UI portal root\n if (container.contains(dom(mainTreeNodeRef))) continue // Skip if it is the main app\n if (container.contains((dom(mainTreeNodeRef)?.getRootNode() as ShadowRoot)?.host)) continue // Skip if it is the main app (and the component is inside a shadow root)\n if (containers.some((defaultContainer) => container.contains(defaultContainer))) continue // Skip if the current container is part of a container we've already seen (e.g.: default container / portal)\n\n containers.push(container)\n }\n\n return containers\n }\n\n return {\n resolveContainers,\n contains(element: HTMLElement) {\n return resolveContainers().some((container) => container.contains(element))\n },\n mainTreeNodeRef,\n MainTreeNode() {\n if (_mainTreeNodeRef != null) return null\n return h(Hidden, { features: HiddenFeatures.Hidden, ref: mainTreeNodeRef })\n },\n }\n}\n\nexport function useMainTreeNode() {\n let mainTreeNodeRef = ref<HTMLElement | null>(null)\n\n return {\n mainTreeNodeRef,\n MainTreeNode() {\n return h(Hidden, { features: HiddenFeatures.Hidden, ref: mainTreeNodeRef })\n },\n }\n}\n", "import { defineComponent, inject, provide, type InjectionKey } from 'vue'\nimport { render } from '../utils/render'\n\nlet ForcePortalRootContext = Symbol('ForcePortalRootContext') as InjectionKey<Boolean>\n\nexport function usePortalRoot() {\n return inject(ForcePortalRootContext, false)\n}\n\nexport let ForcePortalRoot = defineComponent({\n name: 'ForcePortalRoot',\n props: {\n as: { type: [Object, String], default: 'template' },\n force: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n provide(ForcePortalRootContext, props.force)\n\n return () => {\n let { force, ...theirProps } = props\n return render({\n theirProps,\n ourProps: {},\n slot: {},\n slots,\n attrs,\n name: 'ForcePortalRoot',\n })\n }\n },\n})\n", "import { inject, onMounted, onUnmounted, provide, watch, type InjectionKey, type Ref } from 'vue'\n\ntype OnUpdate = (message: StackMessage, type: string, element: Ref<HTMLElement | null>) => void\n\nlet StackContext = Symbol('StackContext') as InjectionKey<OnUpdate>\n\nexport enum StackMessage {\n Add,\n Remove,\n}\n\nexport function useStackContext() {\n return inject(StackContext, () => {})\n}\n\nexport function useStackProvider({\n type,\n enabled,\n element,\n onUpdate,\n}: {\n type: string\n enabled: Ref<boolean | undefined>\n element: Ref<HTMLElement | null>\n onUpdate?: OnUpdate\n}) {\n let parentUpdate = useStackContext()\n\n function notify(...args: Parameters<OnUpdate>) {\n // Notify our layer\n onUpdate?.(...args)\n\n // Notify the parent\n parentUpdate(...args)\n }\n\n onMounted(() => {\n watch(\n enabled,\n (isEnabled, oldIsEnabled) => {\n if (isEnabled) {\n notify(StackMessage.Add, type, element)\n } else if (oldIsEnabled === true) {\n notify(StackMessage.Remove, type, element)\n }\n },\n { immediate: true, flush: 'sync' }\n )\n })\n\n onUnmounted(() => {\n if (enabled.value) {\n notify(StackMessage.Remove, type, element)\n }\n })\n\n provide(StackContext, notify)\n}\n", "import {\n computed,\n defineComponent,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n unref,\n type ComputedRef,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport { render } from '../../utils/render'\n\n// ---\n\nlet DescriptionContext = Symbol('DescriptionContext') as InjectionKey<{\n register(value: string): () => void\n slot: Ref<Record<string, any>>\n name: string\n props: Record<string, any>\n}>\n\nfunction useDescriptionContext() {\n let context = inject(DescriptionContext, null)\n if (context === null) {\n throw new Error('Missing parent')\n }\n return context\n}\n\nexport function useDescriptions({\n slot = ref({}),\n name = 'Description',\n props = {},\n}: {\n slot?: Ref<Record<string, unknown>>\n name?: string\n props?: Record<string, unknown>\n} = {}): ComputedRef<string | undefined> {\n let descriptionIds = ref<string[]>([])\n\n function register(value: string) {\n descriptionIds.value.push(value)\n\n return () => {\n let idx = descriptionIds.value.indexOf(value)\n if (idx === -1) return\n descriptionIds.value.splice(idx, 1)\n }\n }\n\n provide(DescriptionContext, { register, slot, name, props })\n\n // The actual id's as string or undefined.\n return computed(() =>\n descriptionIds.value.length > 0 ? descriptionIds.value.join(' ') : undefined\n )\n}\n\n// ---\n\nexport let Description = defineComponent({\n name: 'Description',\n props: {\n as: { type: [Object, String], default: 'p' },\n id: { type: String, default: () => `headlessui-description-${useId()}` },\n },\n setup(myProps, { attrs, slots }) {\n let context = useDescriptionContext()\n\n onMounted(() => onUnmounted(context.register(myProps.id)))\n\n return () => {\n let { name = 'Description', slot = ref({}), props = {} } = context\n let { id, ...theirProps } = myProps\n let ourProps = {\n ...Object.entries(props).reduce(\n (acc, [key, value]) => Object.assign(acc, { [key]: unref(value) }),\n {}\n ),\n id,\n }\n\n return render({\n ourProps,\n theirProps,\n slot: slot.value,\n attrs,\n slots,\n name,\n })\n }\n },\n})\n", "import {\n Teleport,\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n reactive,\n ref,\n watch,\n watchEffect,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport { usePortalRoot } from '../../internal/portal-force-root'\nimport { dom } from '../../utils/dom'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { render } from '../../utils/render'\n\ntype ContextType<T> = T extends InjectionKey<infer V> ? V : never\n\n// ---\n\nfunction getPortalRoot(contextElement?: HTMLElement | null) {\n let ownerDocument = getOwnerDocument(contextElement)\n if (!ownerDocument) {\n if (contextElement === null) {\n return null\n }\n\n throw new Error(\n `[Headless UI]: Cannot find ownerDocument for contextElement: ${contextElement}`\n )\n }\n let existingRoot = ownerDocument.getElementById('headlessui-portal-root')\n if (existingRoot) return existingRoot\n\n let root = ownerDocument.createElement('div')\n root.setAttribute('id', 'headlessui-portal-root')\n return ownerDocument.body.appendChild(root)\n}\n\nexport let Portal = defineComponent({\n name: 'Portal',\n props: {\n as: { type: [Object, String], default: 'div' },\n },\n setup(props, { slots, attrs }) {\n let element = ref<HTMLElement | null>(null)\n\n let forcePortalRoot = usePortalRoot()\n let groupContext = inject(PortalGroupContext, null)\n let myTarget = ref(\n forcePortalRoot === true\n ? getPortalRoot(element.value)\n : groupContext == null\n ? getPortalRoot(element.value)\n : groupContext.resolveTarget()\n )\n\n let ready = ref(false)\n onMounted(() => {\n ready.value = true\n })\n\n watchEffect(() => {\n if (forcePortalRoot) return\n if (groupContext == null) return\n myTarget.value = groupContext.resolveTarget()\n })\n\n let parent = inject(PortalParentContext, null)\n\n // Since the element is mounted lazily (because of SSR hydration)\n // We use `watch` on `element` + a local var rather than\n // `onMounted` to ensure registration only happens once\n let didRegister = false\n let instance = getCurrentInstance()\n watch(element, () => {\n if (didRegister) return\n if (!parent) return\n let domElement = dom(element)\n if (!domElement) return\n onUnmounted(parent.register(domElement), instance)\n didRegister = true\n })\n\n return () => {\n if (!ready.value) return null\n if (myTarget.value === null) return null\n\n let ourProps = {\n ref: element,\n 'data-headlessui-portal': '',\n }\n\n return h(\n // @ts-expect-error Children can be an object, but TypeScript is not happy\n // with it. Once this is fixed upstream we can remove this assertion.\n Teleport,\n { to: myTarget.value },\n render({\n ourProps,\n theirProps: props,\n slot: {},\n attrs,\n slots,\n name: 'Portal',\n })\n )\n }\n },\n})\n\n// ---\n\nlet PortalParentContext = Symbol('PortalParentContext') as InjectionKey<{\n register: (portal: HTMLElement) => () => void\n unregister: (portal: HTMLElement) => void\n portals: Ref<HTMLElement[]>\n}>\n\nexport function useNestedPortals() {\n let parent = inject(PortalParentContext, null)\n let portals = ref<HTMLElement[]>([])\n\n function register(portal: HTMLElement) {\n portals.value.push(portal)\n if (parent) parent.register(portal)\n return () => unregister(portal)\n }\n\n function unregister(portal: HTMLElement) {\n let idx = portals.value.indexOf(portal)\n if (idx !== -1) portals.value.splice(idx, 1)\n if (parent) parent.unregister(portal)\n }\n\n let api = {\n register,\n unregister,\n portals,\n } as ContextType<typeof PortalParentContext>\n\n return [\n portals,\n defineComponent({\n name: 'PortalWrapper',\n setup(_, { slots }) {\n provide(PortalParentContext, api)\n return () => slots.default?.()\n },\n }),\n ] as const\n}\n\n// ---\n\nlet PortalGroupContext = Symbol('PortalGroupContext') as InjectionKey<{\n resolveTarget(): HTMLElement | null\n}>\n\nexport let PortalGroup = defineComponent({\n name: 'PortalGroup',\n props: {\n as: { type: [Object, String], default: 'template' },\n target: { type: Object as PropType<HTMLElement | null>, default: null },\n },\n setup(props, { attrs, slots }) {\n let api = reactive({\n resolveTarget() {\n return props.target\n },\n })\n\n provide(PortalGroupContext, api)\n\n return () => {\n let { target: _, ...theirProps } = props\n\n return render({\n theirProps,\n ourProps: {},\n slot: {},\n attrs,\n slots,\n name: 'PortalGroup',\n })\n }\n },\n})\n", "// WAI-ARIA: https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/\nimport {\n computed,\n defineComponent,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watchEffect,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { State, useOpenClosed, useOpenClosedProvider } from '../../internal/open-closed'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport { match } from '../../utils/match'\nimport { Features, render } from '../../utils/render'\n\nenum DisclosureStates {\n Open,\n Closed,\n}\n\ninterface StateDefinition {\n // State\n disclosureState: Ref<DisclosureStates>\n panel: Ref<HTMLElement | null>\n panelId: Ref<string | null>\n button: Ref<HTMLButtonElement | null>\n buttonId: Ref<string | null>\n\n // State mutators\n toggleDisclosure(): void\n closeDisclosure(): void\n\n // Exposed functions\n close(focusableElement: HTMLElement | Ref<HTMLElement | null>): void\n}\n\nlet DisclosureContext = Symbol('DisclosureContext') as InjectionKey<StateDefinition>\n\nfunction useDisclosureContext(component: string) {\n let context = inject(DisclosureContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <Disclosure /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useDisclosureContext)\n throw err\n }\n\n return context\n}\n\nlet DisclosurePanelContext = Symbol('DisclosurePanelContext') as InjectionKey<Ref<string | null>>\nfunction useDisclosurePanelContext() {\n return inject(DisclosurePanelContext, null)\n}\n\n// ---\n\nexport let Disclosure = defineComponent({\n name: 'Disclosure',\n props: {\n as: { type: [Object, String], default: 'template' },\n defaultOpen: { type: [Boolean], default: false },\n },\n setup(props, { slots, attrs }) {\n let disclosureState = ref<StateDefinition['disclosureState']['value']>(\n props.defaultOpen ? DisclosureStates.Open : DisclosureStates.Closed\n )\n let panelRef = ref<StateDefinition['panel']['value']>(null)\n let buttonRef = ref<StateDefinition['button']['value']>(null)\n\n let api = {\n buttonId: ref(`headlessui-disclosure-button-${useId()}`),\n panelId: ref(`headlessui-disclosure-panel-${useId()}`),\n disclosureState,\n panel: panelRef,\n button: buttonRef,\n toggleDisclosure() {\n disclosureState.value = match(disclosureState.value, {\n [DisclosureStates.Open]: DisclosureStates.Closed,\n [DisclosureStates.Closed]: DisclosureStates.Open,\n })\n },\n closeDisclosure() {\n if (disclosureState.value === DisclosureStates.Closed) return\n disclosureState.value = DisclosureStates.Closed\n },\n close(focusableElement: HTMLElement | Ref<HTMLElement | null>) {\n api.closeDisclosure()\n\n let restoreElement = (() => {\n if (!focusableElement) return dom(api.button)\n if (focusableElement instanceof HTMLElement) return focusableElement\n if (focusableElement.value instanceof HTMLElement) return dom(focusableElement)\n\n return dom(api.button)\n })()\n\n restoreElement?.focus()\n },\n } as StateDefinition\n\n provide(DisclosureContext, api)\n useOpenClosedProvider(\n computed(() => {\n return match(disclosureState.value, {\n [DisclosureStates.Open]: State.Open,\n [DisclosureStates.Closed]: State.Closed,\n })\n })\n )\n\n return () => {\n let { defaultOpen: _, ...theirProps } = props\n let slot = { open: disclosureState.value === DisclosureStates.Open, close: api.close }\n return render({\n theirProps,\n ourProps: {},\n slot,\n slots,\n attrs,\n name: 'Disclosure',\n })\n }\n },\n})\n\n// ---\n\nexport let DisclosureButton = defineComponent({\n name: 'DisclosureButton',\n props: {\n as: { type: [Object, String], default: 'button' },\n disabled: { type: [Boolean], default: false },\n id: { type: String, default: null },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useDisclosureContext('DisclosureButton')\n\n let panelContext = useDisclosurePanelContext()\n let isWithinPanel = computed(() =>\n panelContext === null ? false : panelContext.value === api.panelId.value\n )\n\n onMounted(() => {\n if (isWithinPanel.value) return\n if (props.id !== null) {\n api.buttonId.value = props.id\n }\n })\n onUnmounted(() => {\n if (isWithinPanel.value) return\n api.buttonId.value = null\n })\n\n let internalButtonRef = ref<HTMLButtonElement | null>(null)\n\n expose({ el: internalButtonRef, $el: internalButtonRef })\n\n if (!isWithinPanel.value) {\n watchEffect(() => {\n api.button.value = internalButtonRef.value\n })\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n internalButtonRef\n )\n\n function handleClick() {\n if (props.disabled) return\n\n if (isWithinPanel.value) {\n api.toggleDisclosure()\n dom(api.button)?.focus()\n } else {\n api.toggleDisclosure()\n }\n }\n function handleKeyDown(event: KeyboardEvent) {\n if (props.disabled) return\n\n if (isWithinPanel.value) {\n switch (event.key) {\n case Keys.Space:\n case Keys.Enter:\n event.preventDefault()\n event.stopPropagation()\n api.toggleDisclosure()\n dom(api.button)?.focus()\n break\n }\n } else {\n switch (event.key) {\n case Keys.Space:\n case Keys.Enter:\n event.preventDefault()\n event.stopPropagation()\n api.toggleDisclosure()\n break\n }\n }\n }\n function handleKeyUp(event: KeyboardEvent) {\n switch (event.key) {\n case Keys.Space:\n // Required for firefox, event.preventDefault() in handleKeyDown for\n // the Space key doesn't cancel the handleKeyUp, which in turn\n // triggers a *click*.\n event.preventDefault()\n break\n }\n }\n\n return () => {\n let slot = { open: api.disclosureState.value === DisclosureStates.Open }\n let { id, ...theirProps } = props\n let ourProps = isWithinPanel.value\n ? {\n ref: internalButtonRef,\n type: type.value,\n onClick: handleClick,\n onKeydown: handleKeyDown,\n }\n : {\n id: api.buttonId.value ?? id,\n ref: internalButtonRef,\n type: type.value,\n 'aria-expanded': api.disclosureState.value === DisclosureStates.Open,\n 'aria-controls':\n api.disclosureState.value === DisclosureStates.Open || dom(api.panel)\n ? api.panelId.value\n : undefined,\n disabled: props.disabled ? true : undefined,\n onClick: handleClick,\n onKeydown: handleKeyDown,\n onKeyup: handleKeyUp,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'DisclosureButton',\n })\n }\n },\n})\n\n// ---\n\nexport let DisclosurePanel = defineComponent({\n name: 'DisclosurePanel',\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n id: { type: String, default: null },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useDisclosureContext('DisclosurePanel')\n\n onMounted(() => {\n if (props.id !== null) {\n api.panelId.value = props.id\n }\n })\n onUnmounted(() => {\n api.panelId.value = null\n })\n\n expose({ el: api.panel, $el: api.panel })\n\n provide(DisclosurePanelContext, api.panelId)\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.disclosureState.value === DisclosureStates.Open\n })\n\n return () => {\n let slot = { open: api.disclosureState.value === DisclosureStates.Open, close: api.close }\n let { id, ...theirProps } = props\n let ourProps = { id: api.panelId.value ?? id, ref: api.panel }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'DisclosurePanel',\n })\n }\n },\n})\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n inject,\n nextTick,\n onMounted,\n onUnmounted,\n provide,\n ref,\n toRaw,\n watch,\n watchEffect,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n type UnwrapNestedRefs,\n} from 'vue'\nimport { useControllable } from '../../hooks/use-controllable'\nimport { useId } from '../../hooks/use-id'\nimport { useOutsideClick } from '../../hooks/use-outside-click'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { useTextValue } from '../../hooks/use-text-value'\nimport { useTrackedPointer } from '../../hooks/use-tracked-pointer'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { State, useOpenClosed, useOpenClosedProvider } from '../../internal/open-closed'\nimport { Keys } from '../../keyboard'\nimport { Focus, calculateActiveIndex } from '../../utils/calculate-active-index'\nimport { dom } from '../../utils/dom'\nimport { FocusableMode, isFocusableElement, sortByDomNode } from '../../utils/focus-management'\nimport { objectToFormEntries } from '../../utils/form'\nimport { match } from '../../utils/match'\nimport { Features, compact, omit, render } from '../../utils/render'\n\nfunction defaultComparator<T>(a: T, z: T): boolean {\n return a === z\n}\n\nenum ListboxStates {\n Open,\n Closed,\n}\n\nenum ValueMode {\n Single,\n Multi,\n}\n\nenum ActivationTrigger {\n Pointer,\n Other,\n}\n\nfunction nextFrame(cb: () => void) {\n requestAnimationFrame(() => requestAnimationFrame(cb))\n}\n\ntype ListboxOptionData = {\n textValue: string\n disabled: boolean\n value: unknown\n domRef: Ref<HTMLElement | null>\n}\n\ntype StateDefinition = {\n // State\n listboxState: Ref<ListboxStates>\n value: ComputedRef<unknown>\n orientation: Ref<'vertical' | 'horizontal'>\n\n mode: ComputedRef<ValueMode>\n\n compare: (a: unknown, z: unknown) => boolean\n\n labelRef: Ref<HTMLLabelElement | null>\n buttonRef: Ref<HTMLButtonElement | null>\n optionsRef: Ref<HTMLDivElement | null>\n\n disabled: Ref<boolean>\n options: Ref<{ id: string; dataRef: ComputedRef<ListboxOptionData> }[]>\n searchQuery: Ref<string>\n activeOptionIndex: Ref<number | null>\n activationTrigger: Ref<ActivationTrigger>\n\n // State mutators\n closeListbox(): void\n openListbox(): void\n goToOption(focus: Focus, id?: string, trigger?: ActivationTrigger): void\n search(value: string): void\n clearSearch(): void\n registerOption(id: string, dataRef: ComputedRef<ListboxOptionData>): void\n unregisterOption(id: string): void\n select(value: unknown): void\n}\n\nlet ListboxContext = Symbol('ListboxContext') as InjectionKey<StateDefinition>\n\nfunction useListboxContext(component: string) {\n let context = inject(ListboxContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <Listbox /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useListboxContext)\n throw err\n }\n\n return context\n}\n\n// ---\n\nexport let Listbox = defineComponent({\n name: 'Listbox',\n emits: { 'update:modelValue': (_value: any) => true },\n props: {\n as: { type: [Object, String], default: 'template' },\n disabled: { type: [Boolean], default: false },\n by: { type: [String, Function], default: () => defaultComparator },\n horizontal: { type: [Boolean], default: false },\n modelValue: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n default: undefined,\n },\n defaultValue: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n default: undefined,\n },\n form: { type: String, optional: true },\n name: { type: String, optional: true },\n multiple: { type: [Boolean], default: false },\n },\n inheritAttrs: false,\n setup(props, { slots, attrs, emit }) {\n let listboxState = ref<StateDefinition['listboxState']['value']>(ListboxStates.Closed)\n let labelRef = ref<StateDefinition['labelRef']['value']>(null)\n let buttonRef = ref<StateDefinition['buttonRef']['value']>(null)\n let optionsRef = ref<StateDefinition['optionsRef']['value']>(null)\n let options = ref<StateDefinition['options']['value']>([])\n let searchQuery = ref<StateDefinition['searchQuery']['value']>('')\n let activeOptionIndex = ref<StateDefinition['activeOptionIndex']['value']>(null)\n let activationTrigger = ref<StateDefinition['activationTrigger']['value']>(\n ActivationTrigger.Other\n )\n\n function adjustOrderedState(\n adjustment: (\n options: UnwrapNestedRefs<StateDefinition['options']['value']>\n ) => UnwrapNestedRefs<StateDefinition['options']['value']> = (i) => i\n ) {\n let currentActiveOption =\n activeOptionIndex.value !== null ? options.value[activeOptionIndex.value] : null\n\n let sortedOptions = sortByDomNode(adjustment(options.value.slice()), (option) =>\n dom(option.dataRef.domRef)\n )\n\n // If we inserted an option before the current active option then the active option index\n // would be wrong. To fix this, we will re-lookup the correct index.\n let adjustedActiveOptionIndex = currentActiveOption\n ? sortedOptions.indexOf(currentActiveOption)\n : null\n\n // Reset to `null` in case the currentActiveOption was removed.\n if (adjustedActiveOptionIndex === -1) {\n adjustedActiveOptionIndex = null\n }\n\n return {\n options: sortedOptions,\n activeOptionIndex: adjustedActiveOptionIndex,\n }\n }\n\n let mode = computed(() => (props.multiple ? ValueMode.Multi : ValueMode.Single))\n\n let [directValue, theirOnChange] = useControllable(\n computed(() => props.modelValue),\n (value: unknown) => emit('update:modelValue', value),\n computed(() => props.defaultValue)\n )\n\n let value = computed(() =>\n directValue.value === undefined\n ? match(mode.value, {\n [ValueMode.Multi]: [],\n [ValueMode.Single]: undefined,\n })\n : directValue.value\n )\n\n let api = {\n listboxState,\n value,\n mode,\n compare(a: any, z: any) {\n if (typeof props.by === 'string') {\n let property = props.by as unknown as any\n return a?.[property] === z?.[property]\n }\n return props.by(a, z)\n },\n orientation: computed(() => (props.horizontal ? 'horizontal' : 'vertical')),\n labelRef,\n buttonRef,\n optionsRef,\n disabled: computed(() => props.disabled),\n options,\n searchQuery,\n activeOptionIndex,\n activationTrigger,\n closeListbox() {\n if (props.disabled) return\n if (listboxState.value === ListboxStates.Closed) return\n listboxState.value = ListboxStates.Closed\n activeOptionIndex.value = null\n },\n openListbox() {\n if (props.disabled) return\n if (listboxState.value === ListboxStates.Open) return\n listboxState.value = ListboxStates.Open\n },\n goToOption(focus: Focus, id?: string, trigger?: ActivationTrigger) {\n if (props.disabled) return\n if (listboxState.value === ListboxStates.Closed) return\n\n let adjustedState = adjustOrderedState()\n let nextActiveOptionIndex = calculateActiveIndex(\n focus === Focus.Specific\n ? { focus: Focus.Specific, id: id! }\n : { focus: focus as Exclude<Focus, Focus.Specific> },\n {\n resolveItems: () => adjustedState.options,\n resolveActiveIndex: () => adjustedState.activeOptionIndex,\n resolveId: (option) => option.id,\n resolveDisabled: (option) => option.dataRef.disabled,\n }\n )\n\n searchQuery.value = ''\n activeOptionIndex.value = nextActiveOptionIndex\n activationTrigger.value = trigger ?? ActivationTrigger.Other\n options.value = adjustedState.options\n },\n search(value: string) {\n if (props.disabled) return\n if (listboxState.value === ListboxStates.Closed) return\n\n let wasAlreadySearching = searchQuery.value !== ''\n let offset = wasAlreadySearching ? 0 : 1\n\n searchQuery.value += value.toLowerCase()\n\n let reOrderedOptions =\n activeOptionIndex.value !== null\n ? options.value\n .slice(activeOptionIndex.value + offset)\n .concat(options.value.slice(0, activeOptionIndex.value + offset))\n : options.value\n\n let matchingOption = reOrderedOptions.find(\n (option) =>\n option.dataRef.textValue.startsWith(searchQuery.value) && !option.dataRef.disabled\n )\n\n let matchIdx = matchingOption ? options.value.indexOf(matchingOption) : -1\n if (matchIdx === -1 || matchIdx === activeOptionIndex.value) return\n\n activeOptionIndex.value = matchIdx\n activationTrigger.value = ActivationTrigger.Other\n },\n clearSearch() {\n if (props.disabled) return\n if (listboxState.value === ListboxStates.Closed) return\n if (searchQuery.value === '') return\n\n searchQuery.value = ''\n },\n registerOption(id: string, dataRef: ListboxOptionData) {\n let adjustedState = adjustOrderedState((options) => {\n return [...options, { id, dataRef }]\n })\n\n options.value = adjustedState.options\n activeOptionIndex.value = adjustedState.activeOptionIndex\n },\n unregisterOption(id: string) {\n let adjustedState = adjustOrderedState((options) => {\n let idx = options.findIndex((a) => a.id === id)\n if (idx !== -1) options.splice(idx, 1)\n return options\n })\n\n options.value = adjustedState.options\n activeOptionIndex.value = adjustedState.activeOptionIndex\n activationTrigger.value = ActivationTrigger.Other\n },\n theirOnChange(value: unknown) {\n if (props.disabled) return\n theirOnChange(value)\n },\n select(value: unknown) {\n if (props.disabled) return\n theirOnChange(\n match(mode.value, {\n [ValueMode.Single]: () => value,\n [ValueMode.Multi]: () => {\n let copy = toRaw(api.value.value as unknown[]).slice()\n let raw = toRaw(value)\n\n let idx = copy.findIndex((value) => api.compare(raw, toRaw(value)))\n if (idx === -1) {\n copy.push(raw)\n } else {\n copy.splice(idx, 1)\n }\n\n return copy\n },\n })\n )\n },\n }\n\n // Handle outside click\n useOutsideClick(\n [buttonRef, optionsRef],\n (event, target) => {\n api.closeListbox()\n\n if (!isFocusableElement(target, FocusableMode.Loose)) {\n event.preventDefault()\n dom(buttonRef)?.focus()\n }\n },\n computed(() => listboxState.value === ListboxStates.Open)\n )\n\n // @ts-expect-error Types of property 'dataRef' are incompatible.\n provide(ListboxContext, api)\n useOpenClosedProvider(\n computed(() =>\n match(listboxState.value, {\n [ListboxStates.Open]: State.Open,\n [ListboxStates.Closed]: State.Closed,\n })\n )\n )\n\n let form = computed(() => dom(buttonRef)?.closest('form'))\n onMounted(() => {\n watch(\n [form],\n () => {\n if (!form.value) return\n if (props.defaultValue === undefined) return\n\n function handle() {\n api.theirOnChange(props.defaultValue)\n }\n\n form.value.addEventListener('reset', handle)\n\n return () => {\n form.value?.removeEventListener('reset', handle)\n }\n },\n { immediate: true }\n )\n })\n\n return () => {\n let { name, modelValue, disabled, form, ...theirProps } = props\n\n let slot = { open: listboxState.value === ListboxStates.Open, disabled, value: value.value }\n\n return h(Fragment, [\n ...(name != null && value.value != null\n ? objectToFormEntries({ [name]: value.value }).map(([name, value]) =>\n h(\n Hidden,\n compact({\n features: HiddenFeatures.Hidden,\n key: name,\n as: 'input',\n type: 'hidden',\n hidden: true,\n readOnly: true,\n form,\n disabled,\n name,\n value,\n })\n )\n )\n : []),\n render({\n ourProps: {},\n theirProps: {\n ...attrs,\n ...omit(theirProps, [\n 'defaultValue',\n 'onUpdate:modelValue',\n 'horizontal',\n 'multiple',\n 'by',\n ]),\n },\n slot,\n slots,\n attrs,\n name: 'Listbox',\n }),\n ])\n }\n },\n})\n\n// ---\n\nexport let ListboxLabel = defineComponent({\n name: 'ListboxLabel',\n props: {\n as: { type: [Object, String], default: 'label' },\n id: { type: String, default: () => `headlessui-listbox-label-${useId()}` },\n },\n setup(props, { attrs, slots }) {\n let api = useListboxContext('ListboxLabel')\n\n function handleClick() {\n dom(api.buttonRef)?.focus({ preventScroll: true })\n }\n\n return () => {\n let slot = {\n open: api.listboxState.value === ListboxStates.Open,\n disabled: api.disabled.value,\n }\n let { id, ...theirProps } = props\n let ourProps = { id, ref: api.labelRef, onClick: handleClick }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ListboxLabel',\n })\n }\n },\n})\n\n// ---\n\nexport let ListboxButton = defineComponent({\n name: 'ListboxButton',\n props: {\n as: { type: [Object, String], default: 'button' },\n id: { type: String, default: () => `headlessui-listbox-button-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useListboxContext('ListboxButton')\n\n expose({ el: api.buttonRef, $el: api.buttonRef })\n\n function handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menubutton/#keyboard-interaction-13\n\n case Keys.Space:\n case Keys.Enter:\n case Keys.ArrowDown:\n event.preventDefault()\n api.openListbox()\n nextTick(() => {\n dom(api.optionsRef)?.focus({ preventScroll: true })\n if (!api.value.value) api.goToOption(Focus.First)\n })\n break\n\n case Keys.ArrowUp:\n event.preventDefault()\n api.openListbox()\n nextTick(() => {\n dom(api.optionsRef)?.focus({ preventScroll: true })\n if (!api.value.value) api.goToOption(Focus.Last)\n })\n break\n }\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n switch (event.key) {\n case Keys.Space:\n // Required for firefox, event.preventDefault() in handleKeyDown for\n // the Space key doesn't cancel the handleKeyUp, which in turn\n // triggers a *click*.\n event.preventDefault()\n break\n }\n }\n\n function handleClick(event: MouseEvent) {\n if (api.disabled.value) return\n if (api.listboxState.value === ListboxStates.Open) {\n api.closeListbox()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n } else {\n event.preventDefault()\n api.openListbox()\n nextFrame(() => dom(api.optionsRef)?.focus({ preventScroll: true }))\n }\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n api.buttonRef\n )\n\n return () => {\n let slot = {\n open: api.listboxState.value === ListboxStates.Open,\n disabled: api.disabled.value,\n value: api.value.value,\n }\n\n let { id, ...theirProps } = props\n let ourProps = {\n ref: api.buttonRef,\n id,\n type: type.value,\n 'aria-haspopup': 'listbox',\n 'aria-controls': dom(api.optionsRef)?.id,\n 'aria-expanded': api.listboxState.value === ListboxStates.Open,\n 'aria-labelledby': api.labelRef.value ? [dom(api.labelRef)?.id, id].join(' ') : undefined,\n disabled: api.disabled.value === true ? true : undefined,\n onKeydown: handleKeyDown,\n onKeyup: handleKeyUp,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ListboxButton',\n })\n }\n },\n})\n\n// ---\n\nexport let ListboxOptions = defineComponent({\n name: 'ListboxOptions',\n props: {\n as: { type: [Object, String], default: 'ul' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n id: { type: String, default: () => `headlessui-listbox-options-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useListboxContext('ListboxOptions')\n let searchDebounce = ref<ReturnType<typeof setTimeout> | null>(null)\n\n expose({ el: api.optionsRef, $el: api.optionsRef })\n\n function handleKeyDown(event: KeyboardEvent) {\n if (searchDebounce.value) clearTimeout(searchDebounce.value)\n\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menu/#keyboard-interaction-12\n\n // @ts-expect-error Fallthrough is expected here\n case Keys.Space:\n if (api.searchQuery.value !== '') {\n event.preventDefault()\n event.stopPropagation()\n return api.search(event.key)\n }\n // When in type ahead mode, fallthrough\n case Keys.Enter:\n event.preventDefault()\n event.stopPropagation()\n if (api.activeOptionIndex.value !== null) {\n let activeOption = api.options.value[api.activeOptionIndex.value]\n api.select(activeOption.dataRef.value)\n }\n if (api.mode.value === ValueMode.Single) {\n api.closeListbox()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n }\n break\n\n case match(api.orientation.value, {\n vertical: Keys.ArrowDown,\n horizontal: Keys.ArrowRight,\n }):\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.Next)\n\n case match(api.orientation.value, { vertical: Keys.ArrowUp, horizontal: Keys.ArrowLeft }):\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.Previous)\n\n case Keys.Home:\n case Keys.PageUp:\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.First)\n\n case Keys.End:\n case Keys.PageDown:\n event.preventDefault()\n event.stopPropagation()\n return api.goToOption(Focus.Last)\n\n case Keys.Escape:\n event.preventDefault()\n event.stopPropagation()\n api.closeListbox()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n break\n\n case Keys.Tab:\n event.preventDefault()\n event.stopPropagation()\n break\n\n default:\n if (event.key.length === 1) {\n api.search(event.key)\n searchDebounce.value = setTimeout(() => api.clearSearch(), 350)\n }\n break\n }\n }\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.listboxState.value === ListboxStates.Open\n })\n\n return () => {\n let slot = { open: api.listboxState.value === ListboxStates.Open }\n let { id, ...theirProps } = props\n let ourProps = {\n 'aria-activedescendant':\n api.activeOptionIndex.value === null\n ? undefined\n : api.options.value[api.activeOptionIndex.value]?.id,\n 'aria-multiselectable': api.mode.value === ValueMode.Multi ? true : undefined,\n 'aria-labelledby': dom(api.buttonRef)?.id,\n 'aria-orientation': api.orientation.value,\n id,\n onKeydown: handleKeyDown,\n role: 'listbox',\n tabIndex: 0,\n ref: api.optionsRef,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'ListboxOptions',\n })\n }\n },\n})\n\nexport let ListboxOption = defineComponent({\n name: 'ListboxOption',\n props: {\n as: { type: [Object, String], default: 'li' },\n value: {\n type: [Object, String, Number, Boolean] as PropType<\n object | string | number | boolean | null\n >,\n },\n disabled: { type: Boolean, default: false },\n id: { type: String, default: () => `headlessui-listbox.option-${useId()}` },\n },\n setup(props, { slots, attrs, expose }) {\n let api = useListboxContext('ListboxOption')\n let internalOptionRef = ref<HTMLElement | null>(null)\n\n expose({ el: internalOptionRef, $el: internalOptionRef })\n\n let active = computed(() => {\n return api.activeOptionIndex.value !== null\n ? api.options.value[api.activeOptionIndex.value].id === props.id\n : false\n })\n\n let selected = computed(() =>\n match(api.mode.value, {\n [ValueMode.Single]: () => api.compare(toRaw(api.value.value), toRaw(props.value)),\n [ValueMode.Multi]: () =>\n (toRaw(api.value.value) as unknown[]).some((value) =>\n api.compare(toRaw(value), toRaw(props.value))\n ),\n })\n )\n let isFirstSelected = computed(() => {\n return match(api.mode.value, {\n [ValueMode.Multi]: () => {\n let currentValues = toRaw(api.value.value) as unknown[]\n\n return (\n api.options.value.find((option) =>\n currentValues.some((value) => api.compare(toRaw(value), toRaw(option.dataRef.value)))\n )?.id === props.id\n )\n },\n [ValueMode.Single]: () => selected.value,\n })\n })\n\n let getTextValue = useTextValue(internalOptionRef)\n let dataRef = computed<ListboxOptionData>(() => ({\n disabled: props.disabled,\n value: props.value,\n get textValue() {\n return getTextValue()\n },\n domRef: internalOptionRef,\n }))\n\n onMounted(() => api.registerOption(props.id, dataRef))\n onUnmounted(() => api.unregisterOption(props.id))\n\n onMounted(() => {\n watch(\n [api.listboxState, selected],\n () => {\n if (api.listboxState.value !== ListboxStates.Open) return\n if (!selected.value) return\n\n match(api.mode.value, {\n [ValueMode.Multi]: () => {\n if (isFirstSelected.value) api.goToOption(Focus.Specific, props.id)\n },\n [ValueMode.Single]: () => {\n api.goToOption(Focus.Specific, props.id)\n },\n })\n },\n { immediate: true }\n )\n })\n\n watchEffect(() => {\n if (api.listboxState.value !== ListboxStates.Open) return\n if (!active.value) return\n if (api.activationTrigger.value === ActivationTrigger.Pointer) return\n nextTick(() => dom(internalOptionRef)?.scrollIntoView?.({ block: 'nearest' }))\n })\n\n function handleClick(event: MouseEvent) {\n if (props.disabled) return event.preventDefault()\n api.select(props.value)\n if (api.mode.value === ValueMode.Single) {\n api.closeListbox()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n }\n }\n\n function handleFocus() {\n if (props.disabled) return api.goToOption(Focus.Nothing)\n api.goToOption(Focus.Specific, props.id)\n }\n\n let pointer = useTrackedPointer()\n\n function handleEnter(evt: PointerEvent) {\n pointer.update(evt)\n }\n\n function handleMove(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled) return\n if (active.value) return\n api.goToOption(Focus.Specific, props.id, ActivationTrigger.Pointer)\n }\n\n function handleLeave(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled) return\n if (!active.value) return\n api.goToOption(Focus.Nothing)\n }\n\n return () => {\n let { disabled } = props\n let slot = { active: active.value, selected: selected.value, disabled }\n let { id, value: _value, disabled: _disabled, ...theirProps } = props\n let ourProps = {\n id,\n ref: internalOptionRef,\n role: 'option',\n tabIndex: disabled === true ? undefined : -1,\n 'aria-disabled': disabled === true ? true : undefined,\n // According to the WAI-ARIA best practices, we should use aria-checked for\n // multi-select,but Voice-Over disagrees. So we use aria-checked instead for\n // both single and multi-select.\n 'aria-selected': selected.value,\n disabled: undefined, // Never forward the `disabled` prop\n onClick: handleClick,\n onFocus: handleFocus,\n onPointerenter: handleEnter,\n onMouseenter: handleEnter,\n onPointermove: handleMove,\n onMousemove: handleMove,\n onPointerleave: handleLeave,\n onMouseleave: handleLeave,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'ListboxOption',\n })\n }\n },\n})\n", "import { ref, type Ref } from 'vue'\nimport { dom } from '../utils/dom'\nimport { getTextValue } from '../utils/get-text-value'\n\nexport function useTextValue(element: Ref<HTMLElement | null>) {\n let cacheKey = ref<string>('')\n let cacheValue = ref<string>('')\n\n return () => {\n let el = dom(element)\n if (!el) return ''\n\n // Check for a cached version\n let currentKey = el.innerText\n if (cacheKey.value === currentKey) {\n return cacheValue.value\n }\n\n // Calculate the value\n let value = getTextValue(el).trim().toLowerCase()\n cacheKey.value = currentKey\n cacheValue.value = value\n return value\n }\n}\n", "let emojiRegex =\n /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g\n\nfunction getTextContents(element: HTMLElement): string {\n // Using innerText instead of textContent because:\n //\n // > textContent gets the content of all elements, including <script> and <style> elements. In\n // > contrast, innerText only shows \"human-readable\" elements.\n // >\n // > \u2014 https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent#differences_from_innertext\n let currentInnerText = element.innerText ?? ''\n\n // Remove all the elements that shouldn't be there.\n //\n // [hidden] \u2014 The user doesn't see it\n // [aria-hidden] \u2014 The screen reader doesn't see it\n // [role=\"img\"] \u2014 Even if it is text, it is used as an image\n //\n // This is probably the slowest part, but if you want complete control over the text value, then\n // it is better to set an `aria-label` instead.\n let copy = element.cloneNode(true)\n if (!(copy instanceof HTMLElement)) {\n return currentInnerText\n }\n\n let dropped = false\n // Drop the elements that shouldn't be there.\n for (let child of copy.querySelectorAll('[hidden],[aria-hidden],[role=\"img\"]')) {\n child.remove()\n dropped = true\n }\n\n // Now that the elements are removed, we can get the innerText such that we can strip the emojis.\n let value = dropped ? copy.innerText ?? '' : currentInnerText\n\n // Check if it contains some emojis or not, if so, we need to remove them\n // because ideally we work with simple text values.\n //\n // Ideally we can use the much simpler RegEx: /\\p{Extended_Pictographic}/u\n // but we can't rely on this yet, so we use the more complex one.\n if (emojiRegex.test(value)) {\n value = value.replace(emojiRegex, '')\n }\n\n return value\n}\n\nexport function getTextValue(element: HTMLElement): string {\n // Try to use the `aria-label` first\n let label = element.getAttribute('aria-label')\n if (typeof label === 'string') return label.trim()\n\n // Try to use the `aria-labelledby` second\n let labelledby = element.getAttribute('aria-labelledby')\n if (labelledby) {\n // aria-labelledby can be a space-separated list of IDs, so we need to split them up and\n // combine them into a single string.\n let labels = labelledby\n .split(' ')\n .map((labelledby) => {\n let labelEl = document.getElementById(labelledby)\n if (labelEl) {\n let label = labelEl.getAttribute('aria-label')\n // Try to use the `aria-label` first (of the referenced element)\n if (typeof label === 'string') return label.trim()\n\n // This time, the `aria-labelledby` isn't used anymore (in Safari), so we just have to\n // look at the contents itself.\n return getTextContents(labelEl).trim()\n }\n\n return null\n })\n .filter(Boolean)\n\n if (labels.length > 0) return labels.join(', ')\n }\n\n // Try to use the text contents of the element itself\n return getTextContents(element).trim()\n}\n", "import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watchEffect,\n type ComputedRef,\n type InjectionKey,\n type Ref,\n type UnwrapNestedRefs,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport { useOutsideClick } from '../../hooks/use-outside-click'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { useTextValue } from '../../hooks/use-text-value'\nimport { useTrackedPointer } from '../../hooks/use-tracked-pointer'\nimport { useTreeWalker } from '../../hooks/use-tree-walker'\nimport { State, useOpenClosed, useOpenClosedProvider } from '../../internal/open-closed'\nimport { Keys } from '../../keyboard'\nimport { Focus, calculateActiveIndex } from '../../utils/calculate-active-index'\nimport { dom } from '../../utils/dom'\nimport {\n Focus as FocusManagementFocus,\n FocusableMode,\n focusFrom,\n isFocusableElement,\n restoreFocusIfNecessary,\n sortByDomNode,\n} from '../../utils/focus-management'\nimport { match } from '../../utils/match'\nimport { Features, render } from '../../utils/render'\n\nenum MenuStates {\n Open,\n Closed,\n}\n\nenum ActivationTrigger {\n Pointer,\n Other,\n}\n\nfunction nextFrame(cb: () => void) {\n requestAnimationFrame(() => requestAnimationFrame(cb))\n}\n\ntype MenuItemData = {\n textValue: string\n disabled: boolean\n domRef: Ref<HTMLElement | null>\n}\ntype StateDefinition = {\n // State\n menuState: Ref<MenuStates>\n buttonRef: Ref<HTMLButtonElement | null>\n itemsRef: Ref<HTMLDivElement | null>\n items: Ref<{ id: string; dataRef: ComputedRef<MenuItemData> }[]>\n searchQuery: Ref<string>\n activeItemIndex: Ref<number | null>\n activationTrigger: Ref<ActivationTrigger>\n\n // State mutators\n closeMenu(): void\n openMenu(): void\n goToItem(focus: Focus, id?: string, trigger?: ActivationTrigger): void\n search(value: string): void\n clearSearch(): void\n registerItem(id: string, dataRef: ComputedRef<MenuItemData>): void\n unregisterItem(id: string): void\n}\n\nlet MenuContext = Symbol('MenuContext') as InjectionKey<StateDefinition>\n\nfunction useMenuContext(component: string) {\n let context = inject(MenuContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <Menu /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useMenuContext)\n throw err\n }\n\n return context\n}\n\nexport let Menu = defineComponent({\n name: 'Menu',\n props: { as: { type: [Object, String], default: 'template' } },\n setup(props, { slots, attrs }) {\n let menuState = ref<StateDefinition['menuState']['value']>(MenuStates.Closed)\n let buttonRef = ref<StateDefinition['buttonRef']['value']>(null)\n let itemsRef = ref<StateDefinition['itemsRef']['value']>(null)\n let items = ref<StateDefinition['items']['value']>([])\n let searchQuery = ref<StateDefinition['searchQuery']['value']>('')\n let activeItemIndex = ref<StateDefinition['activeItemIndex']['value']>(null)\n let activationTrigger = ref<StateDefinition['activationTrigger']['value']>(\n ActivationTrigger.Other\n )\n\n function adjustOrderedState(\n adjustment: (\n items: UnwrapNestedRefs<StateDefinition['items']['value']>\n ) => UnwrapNestedRefs<StateDefinition['items']['value']> = (i) => i\n ) {\n let currentActiveItem =\n activeItemIndex.value !== null ? items.value[activeItemIndex.value] : null\n\n let sortedItems = sortByDomNode(adjustment(items.value.slice()), (item) =>\n dom(item.dataRef.domRef)\n )\n\n // If we inserted an item before the current active item then the active item index\n // would be wrong. To fix this, we will re-lookup the correct index.\n let adjustedActiveItemIndex = currentActiveItem\n ? sortedItems.indexOf(currentActiveItem)\n : null\n\n // Reset to `null` in case the currentActiveItem was removed.\n if (adjustedActiveItemIndex === -1) {\n adjustedActiveItemIndex = null\n }\n\n return {\n items: sortedItems,\n activeItemIndex: adjustedActiveItemIndex,\n }\n }\n\n let api = {\n menuState,\n buttonRef,\n itemsRef,\n items,\n searchQuery,\n activeItemIndex,\n activationTrigger,\n closeMenu: () => {\n menuState.value = MenuStates.Closed\n activeItemIndex.value = null\n },\n openMenu: () => (menuState.value = MenuStates.Open),\n goToItem(focus: Focus, id?: string, trigger?: ActivationTrigger) {\n let adjustedState = adjustOrderedState()\n let nextActiveItemIndex = calculateActiveIndex(\n focus === Focus.Specific\n ? { focus: Focus.Specific, id: id! }\n : { focus: focus as Exclude<Focus, Focus.Specific> },\n {\n resolveItems: () => adjustedState.items,\n resolveActiveIndex: () => adjustedState.activeItemIndex,\n resolveId: (item) => item.id,\n resolveDisabled: (item) => item.dataRef.disabled,\n }\n )\n\n searchQuery.value = ''\n activeItemIndex.value = nextActiveItemIndex\n activationTrigger.value = trigger ?? ActivationTrigger.Other\n items.value = adjustedState.items\n },\n search(value: string) {\n let wasAlreadySearching = searchQuery.value !== ''\n let offset = wasAlreadySearching ? 0 : 1\n searchQuery.value += value.toLowerCase()\n\n let reOrderedItems =\n activeItemIndex.value !== null\n ? items.value\n .slice(activeItemIndex.value + offset)\n .concat(items.value.slice(0, activeItemIndex.value + offset))\n : items.value\n\n let matchingItem = reOrderedItems.find(\n (item) => item.dataRef.textValue.startsWith(searchQuery.value) && !item.dataRef.disabled\n )\n\n let matchIdx = matchingItem ? items.value.indexOf(matchingItem) : -1\n if (matchIdx === -1 || matchIdx === activeItemIndex.value) return\n\n activeItemIndex.value = matchIdx\n activationTrigger.value = ActivationTrigger.Other\n },\n clearSearch() {\n searchQuery.value = ''\n },\n registerItem(id: string, dataRef: MenuItemData) {\n let adjustedState = adjustOrderedState((items) => {\n return [...items, { id, dataRef }]\n })\n\n items.value = adjustedState.items\n activeItemIndex.value = adjustedState.activeItemIndex\n activationTrigger.value = ActivationTrigger.Other\n },\n unregisterItem(id: string) {\n let adjustedState = adjustOrderedState((items) => {\n let idx = items.findIndex((a) => a.id === id)\n if (idx !== -1) items.splice(idx, 1)\n return items\n })\n\n items.value = adjustedState.items\n activeItemIndex.value = adjustedState.activeItemIndex\n activationTrigger.value = ActivationTrigger.Other\n },\n }\n\n // Handle outside click\n useOutsideClick(\n [buttonRef, itemsRef],\n (event, target) => {\n api.closeMenu()\n\n if (!isFocusableElement(target, FocusableMode.Loose)) {\n event.preventDefault()\n dom(buttonRef)?.focus()\n }\n },\n computed(() => menuState.value === MenuStates.Open)\n )\n\n // @ts-expect-error Types of property 'dataRef' are incompatible.\n provide(MenuContext, api)\n\n useOpenClosedProvider(\n computed(() =>\n match(menuState.value, {\n [MenuStates.Open]: State.Open,\n [MenuStates.Closed]: State.Closed,\n })\n )\n )\n\n return () => {\n let slot = { open: menuState.value === MenuStates.Open, close: api.closeMenu }\n return render({ ourProps: {}, theirProps: props, slot, slots, attrs, name: 'Menu' })\n }\n },\n})\n\nexport let MenuButton = defineComponent({\n name: 'MenuButton',\n props: {\n disabled: { type: Boolean, default: false },\n as: { type: [Object, String], default: 'button' },\n id: { type: String, default: () => `headlessui-menu-button-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useMenuContext('MenuButton')\n\n expose({ el: api.buttonRef, $el: api.buttonRef })\n\n function handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menubutton/#keyboard-interaction-13\n\n case Keys.Space:\n case Keys.Enter:\n case Keys.ArrowDown:\n event.preventDefault()\n event.stopPropagation()\n api.openMenu()\n nextTick(() => {\n dom(api.itemsRef)?.focus({ preventScroll: true })\n api.goToItem(Focus.First)\n })\n break\n\n case Keys.ArrowUp:\n event.preventDefault()\n event.stopPropagation()\n api.openMenu()\n nextTick(() => {\n dom(api.itemsRef)?.focus({ preventScroll: true })\n api.goToItem(Focus.Last)\n })\n break\n }\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n switch (event.key) {\n case Keys.Space:\n // Required for firefox, event.preventDefault() in handleKeyDown for\n // the Space key doesn't cancel the handleKeyUp, which in turn\n // triggers a *click*.\n event.preventDefault()\n break\n }\n }\n\n function handleClick(event: MouseEvent) {\n if (props.disabled) return\n if (api.menuState.value === MenuStates.Open) {\n api.closeMenu()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n } else {\n event.preventDefault()\n api.openMenu()\n nextFrame(() => dom(api.itemsRef)?.focus({ preventScroll: true }))\n }\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n api.buttonRef\n )\n\n return () => {\n let slot = { open: api.menuState.value === MenuStates.Open }\n\n let { id, ...theirProps } = props\n let ourProps = {\n ref: api.buttonRef,\n id,\n type: type.value,\n 'aria-haspopup': 'menu',\n 'aria-controls': dom(api.itemsRef)?.id,\n 'aria-expanded': api.menuState.value === MenuStates.Open,\n onKeydown: handleKeyDown,\n onKeyup: handleKeyUp,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'MenuButton',\n })\n }\n },\n})\n\nexport let MenuItems = defineComponent({\n name: 'MenuItems',\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n id: { type: String, default: () => `headlessui-menu-items-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useMenuContext('MenuItems')\n let searchDebounce = ref<ReturnType<typeof setTimeout> | null>(null)\n\n expose({ el: api.itemsRef, $el: api.itemsRef })\n\n useTreeWalker({\n container: computed(() => dom(api.itemsRef)),\n enabled: computed(() => api.menuState.value === MenuStates.Open),\n accept(node) {\n if (node.getAttribute('role') === 'menuitem') return NodeFilter.FILTER_REJECT\n if (node.hasAttribute('role')) return NodeFilter.FILTER_SKIP\n return NodeFilter.FILTER_ACCEPT\n },\n walk(node) {\n node.setAttribute('role', 'none')\n },\n })\n\n function handleKeyDown(event: KeyboardEvent) {\n if (searchDebounce.value) clearTimeout(searchDebounce.value)\n\n switch (event.key) {\n // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menu/#keyboard-interaction-12\n\n // @ts-expect-error Fallthrough is expected here\n case Keys.Space:\n if (api.searchQuery.value !== '') {\n event.preventDefault()\n event.stopPropagation()\n return api.search(event.key)\n }\n // When in type ahead mode, fallthrough\n case Keys.Enter:\n event.preventDefault()\n event.stopPropagation()\n if (api.activeItemIndex.value !== null) {\n let activeItem = api.items.value[api.activeItemIndex.value]\n let _activeItem = activeItem as unknown as UnwrapNestedRefs<typeof activeItem>\n dom(_activeItem.dataRef.domRef)?.click()\n }\n api.closeMenu()\n restoreFocusIfNecessary(dom(api.buttonRef))\n break\n\n case Keys.ArrowDown:\n event.preventDefault()\n event.stopPropagation()\n return api.goToItem(Focus.Next)\n\n case Keys.ArrowUp:\n event.preventDefault()\n event.stopPropagation()\n return api.goToItem(Focus.Previous)\n\n case Keys.Home:\n case Keys.PageUp:\n event.preventDefault()\n event.stopPropagation()\n return api.goToItem(Focus.First)\n\n case Keys.End:\n case Keys.PageDown:\n event.preventDefault()\n event.stopPropagation()\n return api.goToItem(Focus.Last)\n\n case Keys.Escape:\n event.preventDefault()\n event.stopPropagation()\n api.closeMenu()\n nextTick(() => dom(api.buttonRef)?.focus({ preventScroll: true }))\n break\n\n case Keys.Tab:\n event.preventDefault()\n event.stopPropagation()\n api.closeMenu()\n nextTick(() =>\n focusFrom(\n dom(api.buttonRef),\n event.shiftKey ? FocusManagementFocus.Previous : FocusManagementFocus.Next\n )\n )\n break\n\n default:\n if (event.key.length === 1) {\n api.search(event.key)\n searchDebounce.value = setTimeout(() => api.clearSearch(), 350)\n }\n break\n }\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n switch (event.key) {\n case Keys.Space:\n // Required for firefox, event.preventDefault() in handleKeyDown for\n // the Space key doesn't cancel the handleKeyUp, which in turn\n // triggers a *click*.\n event.preventDefault()\n break\n }\n }\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.menuState.value === MenuStates.Open\n })\n\n return () => {\n let slot = { open: api.menuState.value === MenuStates.Open }\n let { id, ...theirProps } = props\n let ourProps = {\n 'aria-activedescendant':\n api.activeItemIndex.value === null\n ? undefined\n : api.items.value[api.activeItemIndex.value]?.id,\n 'aria-labelledby': dom(api.buttonRef)?.id,\n id,\n onKeydown: handleKeyDown,\n onKeyup: handleKeyUp,\n role: 'menu',\n tabIndex: 0,\n ref: api.itemsRef,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'MenuItems',\n })\n }\n },\n})\n\nexport let MenuItem = defineComponent({\n name: 'MenuItem',\n inheritAttrs: false,\n props: {\n as: { type: [Object, String], default: 'template' },\n disabled: { type: Boolean, default: false },\n id: { type: String, default: () => `headlessui-menu-item-${useId()}` },\n },\n setup(props, { slots, attrs, expose }) {\n let api = useMenuContext('MenuItem')\n let internalItemRef = ref<HTMLElement | null>(null)\n\n expose({ el: internalItemRef, $el: internalItemRef })\n\n let active = computed(() => {\n return api.activeItemIndex.value !== null\n ? api.items.value[api.activeItemIndex.value].id === props.id\n : false\n })\n\n let getTextValue = useTextValue(internalItemRef)\n let dataRef = computed<MenuItemData>(() => ({\n disabled: props.disabled,\n get textValue() {\n return getTextValue()\n },\n domRef: internalItemRef,\n }))\n\n onMounted(() => api.registerItem(props.id, dataRef))\n onUnmounted(() => api.unregisterItem(props.id))\n\n watchEffect(() => {\n if (api.menuState.value !== MenuStates.Open) return\n if (!active.value) return\n if (api.activationTrigger.value === ActivationTrigger.Pointer) return\n nextTick(() => dom(internalItemRef)?.scrollIntoView?.({ block: 'nearest' }))\n })\n\n function handleClick(event: MouseEvent) {\n if (props.disabled) return event.preventDefault()\n api.closeMenu()\n restoreFocusIfNecessary(dom(api.buttonRef))\n }\n\n function handleFocus() {\n if (props.disabled) return api.goToItem(Focus.Nothing)\n api.goToItem(Focus.Specific, props.id)\n }\n\n let pointer = useTrackedPointer()\n\n function handleEnter(evt: PointerEvent) {\n pointer.update(evt)\n }\n\n function handleMove(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled) return\n if (active.value) return\n api.goToItem(Focus.Specific, props.id, ActivationTrigger.Pointer)\n }\n\n function handleLeave(evt: PointerEvent) {\n if (!pointer.wasMoved(evt)) return\n if (props.disabled) return\n if (!active.value) return\n api.goToItem(Focus.Nothing)\n }\n\n return () => {\n let { id, disabled, ...theirProps } = props\n let slot = { active: active.value, disabled, close: api.closeMenu }\n let ourProps = {\n id,\n ref: internalItemRef,\n role: 'menuitem',\n tabIndex: disabled === true ? undefined : -1,\n 'aria-disabled': disabled === true ? true : undefined,\n onClick: handleClick,\n onFocus: handleFocus,\n onPointerenter: handleEnter,\n onMouseenter: handleEnter,\n onPointermove: handleMove,\n onMousemove: handleMove,\n onPointerleave: handleLeave,\n onMouseleave: handleLeave,\n }\n\n return render({\n ourProps,\n theirProps: { ...attrs, ...theirProps },\n slot,\n attrs,\n slots,\n name: 'MenuItem',\n })\n }\n },\n})\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n shallowRef,\n watchEffect,\n type ComponentPublicInstance,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useNestedPortals } from '../../components/portal/portal'\nimport { useEventListener } from '../../hooks/use-event-listener'\nimport { useId } from '../../hooks/use-id'\nimport { useOutsideClick } from '../../hooks/use-outside-click'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { useMainTreeNode, useRootContainers } from '../../hooks/use-root-containers'\nimport { Direction as TabDirection, useTabDirection } from '../../hooks/use-tab-direction'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { State, useOpenClosed, useOpenClosedProvider } from '../../internal/open-closed'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport {\n Focus,\n FocusResult,\n FocusableMode,\n focusIn,\n getFocusableElements,\n isFocusableElement,\n} from '../../utils/focus-management'\nimport { match } from '../../utils/match'\nimport { microTask } from '../../utils/micro-task'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { Features, render } from '../../utils/render'\n\nenum PopoverStates {\n Open,\n Closed,\n}\n\ninterface StateDefinition {\n // State\n popoverState: Ref<PopoverStates>\n button: Ref<HTMLElement | null>\n buttonId: Ref<string | null>\n panel: Ref<HTMLElement | null>\n panelId: Ref<string | null>\n\n isPortalled: Ref<boolean>\n\n beforePanelSentinel: Ref<HTMLElement | null>\n afterPanelSentinel: Ref<HTMLElement | null>\n\n // State mutators\n togglePopover(): void\n closePopover(): void\n\n // Exposed functions\n close(focusableElement: HTMLElement | Ref<HTMLElement | null>): void\n}\n\nlet PopoverContext = Symbol('PopoverContext') as InjectionKey<StateDefinition>\nfunction usePopoverContext(component: string) {\n let context = inject(PopoverContext, null)\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <${Popover.name} /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, usePopoverContext)\n throw err\n }\n return context\n}\n\nlet PopoverGroupContext = Symbol('PopoverGroupContext') as InjectionKey<{\n registerPopover(registerBag: PopoverRegisterBag): void\n unregisterPopover(registerBag: PopoverRegisterBag): void\n isFocusWithinPopoverGroup(): boolean\n closeOthers(buttonId: string): void\n mainTreeNodeRef: Ref<HTMLElement | null>\n} | null>\n\nfunction usePopoverGroupContext() {\n return inject(PopoverGroupContext, null)\n}\n\nlet PopoverPanelContext = Symbol('PopoverPanelContext') as InjectionKey<Ref<string | null>>\nfunction usePopoverPanelContext() {\n return inject(PopoverPanelContext, null)\n}\n\ninterface PopoverRegisterBag {\n buttonId: Ref<string | null>\n panelId: Ref<string | null>\n close(): void\n}\n\n// ---\n\nexport let Popover = defineComponent({\n name: 'Popover',\n inheritAttrs: false,\n props: {\n as: { type: [Object, String], default: 'div' },\n },\n setup(props, { slots, attrs, expose }) {\n let internalPopoverRef = ref<HTMLElement | null>(null)\n\n expose({ el: internalPopoverRef, $el: internalPopoverRef })\n\n let popoverState = ref<StateDefinition['popoverState']['value']>(PopoverStates.Closed)\n let button = ref<StateDefinition['button']['value']>(null)\n let beforePanelSentinel = ref<StateDefinition['beforePanelSentinel']['value']>(null)\n let afterPanelSentinel = ref<StateDefinition['afterPanelSentinel']['value']>(null)\n let panel = ref<StateDefinition['panel']['value']>(null)\n let ownerDocument = computed(() => getOwnerDocument(internalPopoverRef))\n let isPortalled = computed(() => {\n if (!dom(button)) return false\n if (!dom(panel)) return false\n\n // We are part of a different \"root\" tree, so therefore we can consider it portalled. This is a\n // heuristic because 3rd party tools could use some form of portal, typically rendered at the\n // end of the body but we don't have an actual reference to that.\n for (let root of document.querySelectorAll('body > *')) {\n if (Number(root?.contains(dom(button))) ^ Number(root?.contains(dom(panel)))) {\n return true\n }\n }\n\n // Use another heuristic to try and calculate whether or not the focusable\n // elements are near each other (aka, following the default focus/tab\n // order from the browser). If they are then it doesn't really matter if\n // they are portalled or not because we can follow the default tab order.\n // But if they are not, then we can consider it being portalled so that we\n // can ensure that tab and shift+tab (hopefully) go to the correct spot.\n let elements = getFocusableElements()\n let buttonIdx = elements.indexOf(dom(button)!)\n\n let beforeIdx = (buttonIdx + elements.length - 1) % elements.length\n let afterIdx = (buttonIdx + 1) % elements.length\n\n let beforeElement = elements[beforeIdx]\n let afterElement = elements[afterIdx]\n\n if (!dom(panel)?.contains(beforeElement) && !dom(panel)?.contains(afterElement)) {\n return true\n }\n\n return false\n })\n\n let api = {\n popoverState,\n buttonId: ref(null),\n panelId: ref(null),\n panel,\n button,\n isPortalled,\n beforePanelSentinel,\n afterPanelSentinel,\n togglePopover() {\n popoverState.value = match(popoverState.value, {\n [PopoverStates.Open]: PopoverStates.Closed,\n [PopoverStates.Closed]: PopoverStates.Open,\n })\n },\n closePopover() {\n if (popoverState.value === PopoverStates.Closed) return\n popoverState.value = PopoverStates.Closed\n },\n close(focusableElement: HTMLElement | Ref<HTMLElement | null>) {\n api.closePopover()\n\n let restoreElement = (() => {\n if (!focusableElement) return dom(api.button)\n if (focusableElement instanceof HTMLElement) return focusableElement\n if (focusableElement.value instanceof HTMLElement) return dom(focusableElement)\n\n return dom(api.button)\n })()\n\n restoreElement?.focus()\n },\n } as StateDefinition\n\n provide(PopoverContext, api)\n useOpenClosedProvider(\n computed(() =>\n match(popoverState.value, {\n [PopoverStates.Open]: State.Open,\n [PopoverStates.Closed]: State.Closed,\n })\n )\n )\n\n let registerBag = {\n buttonId: api.buttonId,\n panelId: api.panelId,\n close() {\n api.closePopover()\n },\n }\n\n let groupContext = usePopoverGroupContext()\n let registerPopover = groupContext?.registerPopover\n\n let [portals, PortalWrapper] = useNestedPortals()\n let root = useRootContainers({\n mainTreeNodeRef: groupContext?.mainTreeNodeRef,\n portals,\n defaultContainers: [button, panel],\n })\n\n function isFocusWithinPopoverGroup() {\n return (\n groupContext?.isFocusWithinPopoverGroup() ??\n (ownerDocument.value?.activeElement &&\n (dom(button)?.contains(ownerDocument.value.activeElement) ||\n dom(panel)?.contains(ownerDocument.value.activeElement)))\n )\n }\n\n watchEffect(() => registerPopover?.(registerBag))\n\n // Handle focus out\n useEventListener(\n ownerDocument.value?.defaultView,\n 'focus',\n (event) => {\n if (event.target === window) return\n if (!(event.target instanceof HTMLElement)) return\n if (popoverState.value !== PopoverStates.Open) return\n if (isFocusWithinPopoverGroup()) return\n if (!button) return\n if (!panel) return\n if (root.contains(event.target)) return\n if (dom(api.beforePanelSentinel)?.contains(event.target)) return\n if (dom(api.afterPanelSentinel)?.contains(event.target)) return\n\n api.closePopover()\n },\n true\n )\n\n // Handle outside click\n useOutsideClick(\n root.resolveContainers,\n (event, target) => {\n api.closePopover()\n\n if (!isFocusableElement(target, FocusableMode.Loose)) {\n event.preventDefault()\n dom(button)?.focus()\n }\n },\n computed(() => popoverState.value === PopoverStates.Open)\n )\n\n return () => {\n let slot = { open: popoverState.value === PopoverStates.Open, close: api.close }\n return h(Fragment, [\n h(PortalWrapper, {}, () =>\n render({\n theirProps: { ...props, ...attrs },\n ourProps: { ref: internalPopoverRef },\n slot,\n slots,\n attrs,\n name: 'Popover',\n })\n ),\n h(root.MainTreeNode),\n ])\n }\n },\n})\n\n// ---\n\nexport let PopoverButton = defineComponent({\n name: 'PopoverButton',\n props: {\n as: { type: [Object, String], default: 'button' },\n disabled: { type: [Boolean], default: false },\n id: { type: String, default: () => `headlessui-popover-button-${useId()}` },\n },\n inheritAttrs: false,\n setup(props, { attrs, slots, expose }) {\n let api = usePopoverContext('PopoverButton')\n let ownerDocument = computed(() => getOwnerDocument(api.button))\n\n expose({ el: api.button, $el: api.button })\n\n onMounted(() => {\n api.buttonId.value = props.id\n })\n onUnmounted(() => {\n api.buttonId.value = null\n })\n\n let groupContext = usePopoverGroupContext()\n let closeOthers = groupContext?.closeOthers\n\n let panelContext = usePopoverPanelContext()\n\n // A button inside a panel will just have \"close\" functionality, no \"open\" functionality.\n // However, if a `Popover.Button` is rendered inside a `Popover` which in turn is rendered\n // inside a `Popover.Panel` (aka nested popovers), then we need to make sure that the button is\n // able to open the nested popover.\n let isWithinPanel = computed(() =>\n panelContext === null ? false : panelContext.value === api.panelId.value\n )\n\n let elementRef = ref<HTMLElement | ComponentPublicInstance | null>(null)\n let sentinelId = `headlessui-focus-sentinel-${useId()}`\n\n if (!isWithinPanel.value) {\n watchEffect(() => {\n // `elementRef` could be a Vue component in which case we want to grab the DOM element from it\n api.button.value = dom(elementRef)\n })\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n elementRef\n )\n\n function handleKeyDown(event: KeyboardEvent) {\n if (isWithinPanel.value) {\n if (api.popoverState.value === PopoverStates.Closed) return\n switch (event.key) {\n case Keys.Space:\n case Keys.Enter:\n event.preventDefault() // Prevent triggering a *click* event\n // @ts-expect-error\n event.target.click?.()\n api.closePopover()\n dom(api.button)?.focus() // Re-focus the original opening Button\n break\n }\n } else {\n switch (event.key) {\n case Keys.Space:\n case Keys.Enter:\n event.preventDefault() // Prevent triggering a *click* event\n event.stopPropagation()\n if (api.popoverState.value === PopoverStates.Closed) closeOthers?.(api.buttonId.value!)\n api.togglePopover()\n break\n\n case Keys.Escape:\n if (api.popoverState.value !== PopoverStates.Open)\n return closeOthers?.(api.buttonId.value!)\n if (!dom(api.button)) return\n if (\n ownerDocument.value?.activeElement &&\n !dom(api.button)?.contains(ownerDocument.value.activeElement)\n )\n return\n event.preventDefault()\n event.stopPropagation()\n api.closePopover()\n break\n }\n }\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n if (isWithinPanel.value) return\n if (event.key === Keys.Space) {\n // Required for firefox, event.preventDefault() in handleKeyDown for\n // the Space key doesn't cancel the handleKeyUp, which in turn\n // triggers a *click*.\n event.preventDefault()\n }\n }\n\n function handleClick(event: MouseEvent) {\n if (props.disabled) return\n if (isWithinPanel.value) {\n api.closePopover()\n dom(api.button)?.focus() // Re-focus the original opening Button\n } else {\n event.preventDefault()\n event.stopPropagation()\n if (api.popoverState.value === PopoverStates.Closed) closeOthers?.(api.buttonId.value!)\n api.togglePopover()\n dom(api.button)?.focus()\n }\n }\n\n function handleMouseDown(event: MouseEvent) {\n event.preventDefault()\n event.stopPropagation()\n }\n\n let direction = useTabDirection()\n function handleFocus() {\n let el = dom(api.panel) as HTMLElement\n if (!el) return\n\n function run() {\n let result = match(direction.value, {\n [TabDirection.Forwards]: () => focusIn(el, Focus.First),\n [TabDirection.Backwards]: () => focusIn(el, Focus.Last),\n })\n\n if (result === FocusResult.Error) {\n focusIn(\n getFocusableElements().filter((el) => el.dataset.headlessuiFocusGuard !== 'true'),\n match(direction.value, {\n [TabDirection.Forwards]: Focus.Next,\n [TabDirection.Backwards]: Focus.Previous,\n }),\n { relativeTo: dom(api.button) }\n )\n }\n }\n\n // TODO: Cleanup once we are using real browser tests\n if (process.env.NODE_ENV === 'test') {\n microTask(run)\n } else {\n run()\n }\n }\n\n return () => {\n let visible = api.popoverState.value === PopoverStates.Open\n let slot = { open: visible }\n let { id, ...theirProps } = props\n let ourProps = isWithinPanel.value\n ? {\n ref: elementRef,\n type: type.value,\n onKeydown: handleKeyDown,\n onClick: handleClick,\n }\n : {\n ref: elementRef,\n id,\n type: type.value,\n 'aria-expanded': api.popoverState.value === PopoverStates.Open,\n 'aria-controls': dom(api.panel) ? api.panelId.value : undefined,\n disabled: props.disabled ? true : undefined,\n onKeydown: handleKeyDown,\n onKeyup: handleKeyUp,\n onClick: handleClick,\n onMousedown: handleMouseDown,\n }\n\n return h(Fragment, [\n render({\n ourProps,\n theirProps: { ...attrs, ...theirProps },\n slot,\n attrs: attrs,\n slots: slots,\n name: 'PopoverButton',\n }),\n visible &&\n !isWithinPanel.value &&\n api.isPortalled.value &&\n h(Hidden, {\n id: sentinelId,\n features: HiddenFeatures.Focusable,\n 'data-headlessui-focus-guard': true,\n as: 'button',\n type: 'button',\n onFocus: handleFocus,\n }),\n ])\n }\n },\n})\n\n// ---\n\nexport let PopoverOverlay = defineComponent({\n name: 'PopoverOverlay',\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n },\n setup(props, { attrs, slots }) {\n let api = usePopoverContext('PopoverOverlay')\n let id = `headlessui-popover-overlay-${useId()}`\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.popoverState.value === PopoverStates.Open\n })\n\n function handleClick() {\n api.closePopover()\n }\n\n return () => {\n let slot = { open: api.popoverState.value === PopoverStates.Open }\n let ourProps = {\n id,\n 'aria-hidden': true,\n onClick: handleClick,\n }\n\n return render({\n ourProps,\n theirProps: props,\n slot,\n attrs,\n slots,\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'PopoverOverlay',\n })\n }\n },\n})\n\n// ---\n\nexport let PopoverPanel = defineComponent({\n name: 'PopoverPanel',\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n focus: { type: Boolean, default: false },\n id: { type: String, default: () => `headlessui-popover-panel-${useId()}` },\n },\n inheritAttrs: false,\n setup(props, { attrs, slots, expose }) {\n let { focus } = props\n let api = usePopoverContext('PopoverPanel')\n let ownerDocument = computed(() => getOwnerDocument(api.panel))\n\n let beforePanelSentinelId = `headlessui-focus-sentinel-before-${useId()}`\n let afterPanelSentinelId = `headlessui-focus-sentinel-after-${useId()}`\n\n expose({ el: api.panel, $el: api.panel })\n\n onMounted(() => {\n api.panelId.value = props.id\n })\n onUnmounted(() => {\n api.panelId.value = null\n })\n\n provide(PopoverPanelContext, api.panelId)\n\n // Move focus within panel\n watchEffect(() => {\n if (!focus) return\n if (api.popoverState.value !== PopoverStates.Open) return\n if (!api.panel) return\n\n let activeElement = ownerDocument.value?.activeElement as HTMLElement\n if (dom(api.panel)?.contains(activeElement)) return // Already focused within Dialog\n\n focusIn(dom(api.panel)!, Focus.First)\n })\n\n let usesOpenClosedState = useOpenClosed()\n let visible = computed(() => {\n if (usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return api.popoverState.value === PopoverStates.Open\n })\n\n function handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case Keys.Escape:\n if (api.popoverState.value !== PopoverStates.Open) return\n if (!dom(api.panel)) return\n if (ownerDocument.value && !dom(api.panel)?.contains(ownerDocument.value.activeElement)) {\n return\n }\n event.preventDefault()\n event.stopPropagation()\n api.closePopover()\n dom(api.button)?.focus()\n break\n }\n }\n\n function handleBlur(event: MouseEvent) {\n let el = event.relatedTarget as HTMLElement\n if (!el) return\n if (!dom(api.panel)) return\n if (dom(api.panel)?.contains(el)) return\n\n api.closePopover()\n\n if (\n dom(api.beforePanelSentinel)?.contains?.(el) ||\n dom(api.afterPanelSentinel)?.contains?.(el)\n ) {\n el.focus({ preventScroll: true })\n }\n }\n\n let direction = useTabDirection()\n function handleBeforeFocus() {\n let el = dom(api.panel) as HTMLElement\n if (!el) return\n\n function run() {\n match(direction.value, {\n [TabDirection.Forwards]: () => {\n // Try to focus the first thing in the panel. But if that fails (e.g.: there are no\n // focusable elements, then we can move outside of the panel)\n let result = focusIn(el, Focus.First)\n if (result === FocusResult.Error) {\n dom(api.afterPanelSentinel)?.focus()\n }\n },\n [TabDirection.Backwards]: () => {\n // Coming from the Popover.Panel (which is portalled to somewhere else). Let's redirect\n // the focus to the Popover.Button again.\n dom(api.button)?.focus({ preventScroll: true })\n },\n })\n }\n\n // TODO: Cleanup once we are using real browser tests\n if (process.env.NODE_ENV === 'test') {\n microTask(run)\n } else {\n run()\n }\n }\n\n function handleAfterFocus() {\n let el = dom(api.panel) as HTMLElement\n if (!el) return\n\n function run() {\n match(direction.value, {\n [TabDirection.Forwards]: () => {\n let button = dom(api.button)\n let panel = dom(api.panel)\n if (!button) return\n\n let elements = getFocusableElements()\n\n let idx = elements.indexOf(button)\n let before = elements.slice(0, idx + 1)\n let after = elements.slice(idx + 1)\n\n let combined = [...after, ...before]\n\n // Ignore sentinel buttons and items inside the panel\n for (let element of combined.slice()) {\n if (element.dataset.headlessuiFocusGuard === 'true' || panel?.contains(element)) {\n let idx = combined.indexOf(element)\n if (idx !== -1) combined.splice(idx, 1)\n }\n }\n\n focusIn(combined, Focus.First, { sorted: false })\n },\n [TabDirection.Backwards]: () => {\n // Try to focus the first thing in the panel. But if that fails (e.g.: there are no\n // focusable elements, then we can move outside of the panel)\n let result = focusIn(el, Focus.Previous)\n if (result === FocusResult.Error) {\n dom(api.button)?.focus()\n }\n },\n })\n }\n\n // TODO: Cleanup once we are using real browser tests\n if (process.env.NODE_ENV === 'test') {\n microTask(run)\n } else {\n run()\n }\n }\n\n return () => {\n let slot = {\n open: api.popoverState.value === PopoverStates.Open,\n close: api.close,\n }\n\n let { id, focus: _focus, ...theirProps } = props\n let ourProps = {\n ref: api.panel,\n id,\n onKeydown: handleKeyDown,\n onFocusout: focus && api.popoverState.value === PopoverStates.Open ? handleBlur : undefined,\n tabIndex: -1,\n }\n\n return render({\n ourProps,\n theirProps: { ...attrs, ...theirProps },\n attrs,\n slot,\n slots: {\n ...slots,\n default: (...args) => [\n h(Fragment, [\n visible.value &&\n api.isPortalled.value &&\n h(Hidden, {\n id: beforePanelSentinelId,\n ref: api.beforePanelSentinel,\n features: HiddenFeatures.Focusable,\n 'data-headlessui-focus-guard': true,\n as: 'button',\n type: 'button',\n onFocus: handleBeforeFocus,\n }),\n slots.default?.(...args),\n visible.value &&\n api.isPortalled.value &&\n h(Hidden, {\n id: afterPanelSentinelId,\n ref: api.afterPanelSentinel,\n features: HiddenFeatures.Focusable,\n 'data-headlessui-focus-guard': true,\n as: 'button',\n type: 'button',\n onFocus: handleAfterFocus,\n }),\n ]),\n ],\n },\n features: Features.RenderStrategy | Features.Static,\n visible: visible.value,\n name: 'PopoverPanel',\n })\n }\n },\n})\n\n// ---\n\nexport let PopoverGroup = defineComponent({\n name: 'PopoverGroup',\n inheritAttrs: false,\n props: {\n as: { type: [Object, String], default: 'div' },\n },\n setup(props, { attrs, slots, expose }) {\n let groupRef = ref<HTMLElement | null>(null)\n let popovers = shallowRef<PopoverRegisterBag[]>([])\n let ownerDocument = computed(() => getOwnerDocument(groupRef))\n let root = useMainTreeNode()\n\n expose({ el: groupRef, $el: groupRef })\n\n function unregisterPopover(registerBag: PopoverRegisterBag) {\n let idx = popovers.value.indexOf(registerBag)\n if (idx !== -1) popovers.value.splice(idx, 1)\n }\n\n function registerPopover(registerBag: PopoverRegisterBag) {\n popovers.value.push(registerBag)\n return () => {\n unregisterPopover(registerBag)\n }\n }\n\n function isFocusWithinPopoverGroup() {\n let owner = ownerDocument.value\n if (!owner) return false\n let element = owner.activeElement as HTMLElement\n\n if (dom(groupRef)?.contains(element)) return true\n\n // Check if the focus is in one of the button or panel elements. This is important in case you are rendering inside a Portal.\n return popovers.value.some((bag) => {\n return (\n owner!.getElementById(bag.buttonId.value!)?.contains(element) ||\n owner!.getElementById(bag.panelId.value!)?.contains(element)\n )\n })\n }\n\n function closeOthers(buttonId: string) {\n for (let popover of popovers.value) {\n if (popover.buttonId.value !== buttonId) popover.close()\n }\n }\n\n provide(PopoverGroupContext, {\n registerPopover,\n unregisterPopover,\n isFocusWithinPopoverGroup,\n closeOthers,\n mainTreeNodeRef: root.mainTreeNodeRef,\n })\n\n return () => {\n let ourProps = { ref: groupRef }\n\n return h(Fragment, [\n render({\n ourProps,\n theirProps: { ...props, ...attrs },\n slot: {},\n attrs,\n slots,\n name: 'PopoverGroup',\n }),\n h(root.MainTreeNode),\n ])\n }\n },\n})\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n toRaw,\n watch,\n type InjectionKey,\n type Ref,\n type UnwrapRef,\n} from 'vue'\nimport { useControllable } from '../../hooks/use-controllable'\nimport { useId } from '../../hooks/use-id'\nimport { useTreeWalker } from '../../hooks/use-tree-walker'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport { Focus, FocusResult, focusIn, sortByDomNode } from '../../utils/focus-management'\nimport { attemptSubmit, objectToFormEntries } from '../../utils/form'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { compact, omit, render } from '../../utils/render'\nimport { Description, useDescriptions } from '../description/description'\nimport { Label, useLabels } from '../label/label'\n\nfunction defaultComparator<T>(a: T, z: T): boolean {\n return a === z\n}\n\ninterface Option {\n id: string\n element: Ref<HTMLElement | null>\n propsRef: Ref<{ value: unknown; disabled: boolean }>\n}\n\ninterface StateDefinition {\n // State\n options: Ref<Option[]>\n value: Ref<unknown>\n disabled: Ref<boolean>\n firstOption: Ref<Option | undefined>\n containsCheckedOption: Ref<boolean>\n\n compare(a: unknown, z: unknown): boolean\n\n // State mutators\n change(nextValue: unknown): boolean\n registerOption(action: Option): void\n unregisterOption(id: Option['id']): void\n}\n\nlet RadioGroupContext = Symbol('RadioGroupContext') as InjectionKey<StateDefinition>\n\nfunction useRadioGroupContext(component: string) {\n let context = inject(RadioGroupContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <RadioGroup /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useRadioGroupContext)\n throw err\n }\n\n return context\n}\n\n// ---\n\nexport let RadioGroup = defineComponent({\n name: 'RadioGroup',\n emits: { 'update:modelValue': (_value: any) => true },\n props: {\n as: { type: [Object, String], default: 'div' },\n disabled: { type: [Boolean], default: false },\n by: { type: [String, Function], default: () => defaultComparator },\n modelValue: { type: [Object, String, Number, Boolean], default: undefined },\n defaultValue: { type: [Object, String, Number, Boolean], default: undefined },\n form: { type: String, optional: true },\n name: { type: String, optional: true },\n id: { type: String, default: () => `headlessui-radiogroup-${useId()}` },\n },\n inheritAttrs: false,\n setup(props, { emit, attrs, slots, expose }) {\n let radioGroupRef = ref<HTMLElement | null>(null)\n let options = ref<StateDefinition['options']['value']>([])\n let labelledby = useLabels({ name: 'RadioGroupLabel' })\n let describedby = useDescriptions({ name: 'RadioGroupDescription' })\n\n expose({ el: radioGroupRef, $el: radioGroupRef })\n\n let [value, theirOnChange] = useControllable(\n computed(() => props.modelValue),\n (value: unknown) => emit('update:modelValue', value),\n computed(() => props.defaultValue)\n )\n\n // TODO: Fix type\n let api: any = {\n options,\n value,\n disabled: computed(() => props.disabled),\n firstOption: computed(() =>\n options.value.find((option) => {\n if (option.propsRef.disabled) return false\n return true\n })\n ),\n containsCheckedOption: computed(() =>\n options.value.some((option) =>\n api.compare(toRaw(option.propsRef.value), toRaw(props.modelValue))\n )\n ),\n compare(a: any, z: any) {\n if (typeof props.by === 'string') {\n let property = props.by as unknown as any\n return a?.[property] === z?.[property]\n }\n return props.by(a, z)\n },\n change(nextValue: unknown) {\n if (props.disabled) return false\n if (api.compare(toRaw(value.value), toRaw(nextValue))) return false\n let nextOption = options.value.find((option) =>\n api.compare(toRaw(option.propsRef.value), toRaw(nextValue))\n )?.propsRef\n if (nextOption?.disabled) return false\n theirOnChange(nextValue)\n return true\n },\n registerOption(action: UnwrapRef<Option>) {\n options.value.push(action)\n options.value = sortByDomNode(options.value, (option) => option.element)\n },\n unregisterOption(id: Option['id']) {\n let idx = options.value.findIndex((radio) => radio.id === id)\n if (idx === -1) return\n options.value.splice(idx, 1)\n },\n }\n\n provide(RadioGroupContext, api)\n\n useTreeWalker({\n container: computed(() => dom(radioGroupRef)),\n accept(node) {\n if (node.getAttribute('role') === 'radio') return NodeFilter.FILTER_REJECT\n if (node.hasAttribute('role')) return NodeFilter.FILTER_SKIP\n return NodeFilter.FILTER_ACCEPT\n },\n walk(node) {\n node.setAttribute('role', 'none')\n },\n })\n\n function handleKeyDown(event: KeyboardEvent) {\n if (!radioGroupRef.value) return\n if (!radioGroupRef.value.contains(event.target as HTMLElement)) return\n\n let all = options.value\n .filter((option) => option.propsRef.disabled === false)\n .map((radio) => radio.element) as HTMLElement[]\n\n switch (event.key) {\n case Keys.Enter:\n attemptSubmit(event.currentTarget as unknown as EventTarget & HTMLButtonElement)\n break\n case Keys.ArrowLeft:\n case Keys.ArrowUp:\n {\n event.preventDefault()\n event.stopPropagation()\n\n let result = focusIn(all, Focus.Previous | Focus.WrapAround)\n\n if (result === FocusResult.Success) {\n let activeOption = options.value.find(\n (option) => option.element === getOwnerDocument(radioGroupRef)?.activeElement\n )\n if (activeOption) api.change(activeOption.propsRef.value)\n }\n }\n break\n\n case Keys.ArrowRight:\n case Keys.ArrowDown:\n {\n event.preventDefault()\n event.stopPropagation()\n\n let result = focusIn(all, Focus.Next | Focus.WrapAround)\n\n if (result === FocusResult.Success) {\n let activeOption = options.value.find(\n (option) => option.element === getOwnerDocument(option.element)?.activeElement\n )\n if (activeOption) api.change(activeOption.propsRef.value)\n }\n }\n break\n\n case Keys.Space:\n {\n event.preventDefault()\n event.stopPropagation()\n\n let activeOption = options.value.find(\n (option) => option.element === getOwnerDocument(option.element)?.activeElement\n )\n if (activeOption) api.change(activeOption.propsRef.value)\n }\n break\n }\n }\n\n let form = computed(() => dom(radioGroupRef)?.closest('form'))\n onMounted(() => {\n watch(\n [form],\n () => {\n if (!form.value) return\n if (props.defaultValue === undefined) return\n\n function handle() {\n api.change(props.defaultValue)\n }\n\n form.value.addEventListener('reset', handle)\n\n return () => {\n form.value?.removeEventListener('reset', handle)\n }\n },\n { immediate: true }\n )\n })\n\n return () => {\n let { disabled, name, id, form, ...theirProps } = props\n\n let ourProps = {\n ref: radioGroupRef,\n id,\n role: 'radiogroup',\n 'aria-labelledby': labelledby.value,\n 'aria-describedby': describedby.value,\n onKeydown: handleKeyDown,\n }\n\n return h(Fragment, [\n ...(name != null && value.value != null\n ? objectToFormEntries({ [name]: value.value }).map(([name, value]) =>\n h(\n Hidden,\n compact({\n features: HiddenFeatures.Hidden,\n key: name,\n as: 'input',\n type: 'hidden',\n hidden: true,\n readOnly: true,\n form,\n disabled,\n name,\n value,\n })\n )\n )\n : []),\n render({\n ourProps,\n theirProps: { ...attrs, ...omit(theirProps, ['modelValue', 'defaultValue', 'by']) },\n slot: {},\n attrs,\n slots,\n name: 'RadioGroup',\n }),\n ])\n }\n },\n})\n\n// ---\n\nenum OptionState {\n Empty = 1 << 0,\n Active = 1 << 1,\n}\n\nexport let RadioGroupOption = defineComponent({\n name: 'RadioGroupOption',\n props: {\n as: { type: [Object, String], default: 'div' },\n value: { type: [Object, String, Number, Boolean] },\n disabled: { type: Boolean, default: false },\n id: { type: String, default: () => `headlessui-radiogroup-option-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useRadioGroupContext('RadioGroupOption')\n let labelledby = useLabels({ name: 'RadioGroupLabel' })\n let describedby = useDescriptions({ name: 'RadioGroupDescription' })\n\n let optionRef = ref<HTMLElement | null>(null)\n let propsRef = computed(() => ({ value: props.value, disabled: props.disabled }))\n let state = ref(OptionState.Empty)\n\n expose({ el: optionRef, $el: optionRef })\n\n let element = computed(() => dom(optionRef))\n onMounted(() => api.registerOption({ id: props.id, element, propsRef }))\n onUnmounted(() => api.unregisterOption(props.id))\n\n let isFirstOption = computed(() => api.firstOption.value?.id === props.id)\n let disabled = computed(() => api.disabled.value || props.disabled)\n let checked = computed(() => api.compare(toRaw(api.value.value), toRaw(props.value)))\n let tabIndex = computed(() => {\n if (disabled.value) return -1\n if (checked.value) return 0\n if (!api.containsCheckedOption.value && isFirstOption.value) return 0\n return -1\n })\n\n function handleClick() {\n if (!api.change(props.value)) return\n\n state.value |= OptionState.Active\n dom(optionRef)?.focus()\n }\n\n function handleFocus() {\n state.value |= OptionState.Active\n }\n\n function handleBlur() {\n state.value &= ~OptionState.Active\n }\n\n return () => {\n let { id, value: _value, disabled: _disabled, ...theirProps } = props\n\n let slot = {\n checked: checked.value,\n disabled: disabled.value,\n active: Boolean(state.value & OptionState.Active),\n }\n\n let ourProps = {\n id,\n ref: optionRef,\n role: 'radio',\n 'aria-checked': checked.value ? 'true' : 'false',\n 'aria-labelledby': labelledby.value,\n 'aria-describedby': describedby.value,\n 'aria-disabled': disabled.value ? true : undefined,\n tabIndex: tabIndex.value,\n onClick: disabled.value ? undefined : handleClick,\n onFocus: disabled.value ? undefined : handleFocus,\n onBlur: disabled.value ? undefined : handleBlur,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'RadioGroupOption',\n })\n }\n },\n})\n\n// ---\n\nexport let RadioGroupLabel = Label\nexport let RadioGroupDescription = Description\n", "import {\n computed,\n defineComponent,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n unref,\n type ComputedRef,\n type InjectionKey,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport { render } from '../../utils/render'\n\n// ---\n\nlet LabelContext = Symbol('LabelContext') as InjectionKey<{\n register(value: string): () => void\n slot: Record<string, unknown>\n name: string\n props: Record<string, unknown>\n}>\n\nfunction useLabelContext() {\n let context = inject(LabelContext, null)\n if (context === null) {\n let err = new Error('You used a <Label /> component, but it is not inside a parent.')\n if (Error.captureStackTrace) Error.captureStackTrace(err, useLabelContext)\n throw err\n }\n return context\n}\n\nexport function useLabels({\n slot = {},\n name = 'Label',\n props = {},\n}: {\n slot?: Record<string, unknown>\n name?: string\n props?: Record<string, unknown>\n} = {}): ComputedRef<string | undefined> {\n let labelIds = ref<string[]>([])\n function register(value: string) {\n labelIds.value.push(value)\n\n return () => {\n let idx = labelIds.value.indexOf(value)\n if (idx === -1) return\n labelIds.value.splice(idx, 1)\n }\n }\n\n provide(LabelContext, { register, slot, name, props })\n\n // The actual id's as string or undefined.\n return computed(() => (labelIds.value.length > 0 ? labelIds.value.join(' ') : undefined))\n}\n\n// ---\n\nexport let Label = defineComponent({\n name: 'Label',\n props: {\n as: { type: [Object, String], default: 'label' },\n passive: { type: [Boolean], default: false },\n id: { type: String, default: () => `headlessui-label-${useId()}` },\n },\n setup(myProps, { slots, attrs }) {\n let context = useLabelContext()\n\n onMounted(() => onUnmounted(context.register(myProps.id)))\n\n return () => {\n let { name = 'Label', slot = {}, props = {} } = context\n let { id, passive, ...theirProps } = myProps\n let ourProps = {\n ...Object.entries(props).reduce(\n (acc, [key, value]) => Object.assign(acc, { [key]: unref(value) }),\n {}\n ),\n id,\n }\n\n if (passive) {\n // @ts-expect-error props are dynamic via context, some components will provide an onClick\n // then we can delete it.\n delete ourProps['onClick']\n\n // @ts-expect-error props are dynamic via context, some components will provide an htmlFor\n // then we can delete it.\n delete ourProps['htmlFor']\n\n // @ts-expect-error props are dynamic via context, some components will provide an onClick\n // then we can delete it.\n delete theirProps['onClick']\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name,\n })\n }\n },\n})\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n inject,\n onMounted,\n provide,\n ref,\n watch,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useControllable } from '../../hooks/use-controllable'\nimport { useId } from '../../hooks/use-id'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { Hidden, Features as HiddenFeatures } from '../../internal/hidden'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport { attemptSubmit } from '../../utils/form'\nimport { compact, omit, render } from '../../utils/render'\nimport { Description, useDescriptions } from '../description/description'\nimport { Label, useLabels } from '../label/label'\n\ntype StateDefinition = {\n // State\n switchRef: Ref<HTMLButtonElement | null>\n labelledby: Ref<string | undefined>\n describedby: Ref<string | undefined>\n}\n\nlet GroupContext = Symbol('GroupContext') as InjectionKey<StateDefinition>\n\n// ---\n\nexport let SwitchGroup = defineComponent({\n name: 'SwitchGroup',\n props: {\n as: { type: [Object, String], default: 'template' },\n },\n setup(props, { slots, attrs }) {\n let switchRef = ref<StateDefinition['switchRef']['value']>(null)\n let labelledby = useLabels({\n name: 'SwitchLabel',\n props: {\n htmlFor: computed(() => switchRef.value?.id),\n onClick(event: MouseEvent & { currentTarget: HTMLElement }) {\n if (!switchRef.value) return\n if (event.currentTarget.tagName === 'LABEL') {\n event.preventDefault()\n }\n switchRef.value.click()\n switchRef.value.focus({ preventScroll: true })\n },\n },\n })\n let describedby = useDescriptions({ name: 'SwitchDescription' })\n\n let api = { switchRef, labelledby, describedby }\n\n provide(GroupContext, api)\n\n return () =>\n render({ theirProps: props, ourProps: {}, slot: {}, slots, attrs, name: 'SwitchGroup' })\n },\n})\n\n// ---\n\nexport let Switch = defineComponent({\n name: 'Switch',\n emits: { 'update:modelValue': (_value: boolean) => true },\n props: {\n as: { type: [Object, String], default: 'button' },\n modelValue: { type: Boolean, default: undefined },\n defaultChecked: { type: Boolean, optional: true },\n form: { type: String, optional: true },\n name: { type: String, optional: true },\n value: { type: String, optional: true },\n id: { type: String, default: () => `headlessui-switch-${useId()}` },\n disabled: { type: Boolean, default: false },\n tabIndex: { type: Number, default: 0 },\n },\n inheritAttrs: false,\n setup(props, { emit, attrs, slots, expose }) {\n let api = inject(GroupContext, null)\n\n let [checked, theirOnChange] = useControllable(\n computed(() => props.modelValue),\n (value: boolean) => emit('update:modelValue', value),\n computed(() => props.defaultChecked)\n )\n\n function toggle() {\n theirOnChange(!checked.value)\n }\n\n let internalSwitchRef = ref<HTMLButtonElement | null>(null)\n let switchRef = api === null ? internalSwitchRef : api.switchRef\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n switchRef\n )\n\n expose({ el: switchRef, $el: switchRef })\n\n function handleClick(event: MouseEvent) {\n event.preventDefault()\n toggle()\n }\n\n function handleKeyUp(event: KeyboardEvent) {\n if (event.key === Keys.Space) {\n event.preventDefault()\n toggle()\n } else if (event.key === Keys.Enter) {\n attemptSubmit(event.currentTarget as HTMLElement)\n }\n }\n\n // This is needed so that we can \"cancel\" the click event when we use the `Enter` key on a button.\n function handleKeyPress(event: KeyboardEvent) {\n event.preventDefault()\n }\n\n let form = computed(() => dom(switchRef)?.closest?.('form'))\n onMounted(() => {\n watch(\n [form],\n () => {\n if (!form.value) return\n if (props.defaultChecked === undefined) return\n\n function handle() {\n theirOnChange(props.defaultChecked)\n }\n\n form.value.addEventListener('reset', handle)\n return () => {\n form.value?.removeEventListener('reset', handle)\n }\n },\n { immediate: true }\n )\n })\n\n return () => {\n let { id, name, value, form, tabIndex, ...theirProps } = props\n let slot = { checked: checked.value }\n let ourProps = {\n id,\n ref: switchRef,\n role: 'switch',\n type: type.value,\n tabIndex: tabIndex === -1 ? 0 : tabIndex,\n 'aria-checked': checked.value,\n 'aria-labelledby': api?.labelledby.value,\n 'aria-describedby': api?.describedby.value,\n onClick: handleClick,\n onKeyup: handleKeyUp,\n onKeypress: handleKeyPress,\n }\n\n return h(Fragment, [\n name != null && checked.value != null\n ? h(\n Hidden,\n compact({\n features: HiddenFeatures.Hidden,\n as: 'input',\n type: 'checkbox',\n hidden: true,\n readOnly: true,\n checked: checked.value,\n form,\n disabled: theirProps.disabled,\n name,\n value,\n })\n )\n : null,\n render({\n ourProps,\n theirProps: { ...attrs, ...omit(theirProps, ['modelValue', 'defaultChecked']) },\n slot,\n attrs,\n slots,\n name: 'Switch',\n }),\n ])\n }\n },\n})\n\n// ---\n\nexport let SwitchLabel = Label\nexport let SwitchDescription = Description\n", "import {\n Fragment,\n computed,\n defineComponent,\n h,\n inject,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n watchEffect,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport { useResolveButtonType } from '../../hooks/use-resolve-button-type'\nimport { FocusSentinel } from '../../internal/focus-sentinel'\nimport { Hidden } from '../../internal/hidden'\nimport { Keys } from '../../keyboard'\nimport { dom } from '../../utils/dom'\nimport { Focus, FocusResult, focusIn, sortByDomNode } from '../../utils/focus-management'\nimport { match } from '../../utils/match'\nimport { microTask } from '../../utils/micro-task'\nimport { getOwnerDocument } from '../../utils/owner'\nimport { Features, omit, render } from '../../utils/render'\n\nenum Direction {\n Forwards,\n Backwards,\n}\n\nenum Ordering {\n Less = -1,\n Equal = 0,\n Greater = 1,\n}\n\ntype StateDefinition = {\n // State\n selectedIndex: Ref<number | null>\n orientation: Ref<'vertical' | 'horizontal'>\n activation: Ref<'auto' | 'manual'>\n\n tabs: Ref<Ref<HTMLElement | null>[]>\n panels: Ref<Ref<HTMLElement | null>[]>\n\n // State mutators\n setSelectedIndex(index: number): void\n registerTab(tab: Ref<HTMLElement | null>): void\n unregisterTab(tab: Ref<HTMLElement | null>): void\n registerPanel(panel: Ref<HTMLElement | null>): void\n unregisterPanel(panel: Ref<HTMLElement | null>): void\n}\n\nlet TabsContext = Symbol('TabsContext') as InjectionKey<StateDefinition>\n\nfunction useTabsContext(component: string) {\n let context = inject(TabsContext, null)\n\n if (context === null) {\n let err = new Error(`<${component} /> is missing a parent <TabGroup /> component.`)\n if (Error.captureStackTrace) Error.captureStackTrace(err, useTabsContext)\n throw err\n }\n\n return context\n}\n\nlet TabsSSRContext = Symbol('TabsSSRContext') as InjectionKey<\n Ref<{ tabs: string[]; panels: string[] } | null>\n>\n\n// ---\n\nexport let TabGroup = defineComponent({\n name: 'TabGroup',\n emits: {\n change: (_index: number) => true,\n },\n props: {\n as: { type: [Object, String], default: 'template' },\n selectedIndex: { type: [Number], default: null },\n defaultIndex: { type: [Number], default: 0 },\n vertical: { type: [Boolean], default: false },\n manual: { type: [Boolean], default: false },\n },\n inheritAttrs: false,\n setup(props, { slots, attrs, emit }) {\n let selectedIndex = ref<StateDefinition['selectedIndex']['value']>(\n props.selectedIndex ?? props.defaultIndex\n )\n let tabs = ref<StateDefinition['tabs']['value']>([])\n let panels = ref<StateDefinition['panels']['value']>([])\n\n let isControlled = computed(() => props.selectedIndex !== null)\n let realSelectedIndex = computed(() =>\n isControlled.value ? props.selectedIndex : selectedIndex.value\n )\n\n function setSelectedIndex(indexToSet: number) {\n let tabs = sortByDomNode(api.tabs.value, dom)\n let panels = sortByDomNode(api.panels.value, dom)\n\n let focusableTabs = tabs.filter((tab) => !dom(tab)?.hasAttribute('disabled'))\n\n if (\n // Underflow\n indexToSet < 0 ||\n // Overflow\n indexToSet > tabs.length - 1\n ) {\n let direction = match(\n selectedIndex.value === null // Not set yet\n ? Ordering.Equal\n : Math.sign(indexToSet - selectedIndex.value!),\n {\n [Ordering.Less]: () => Direction.Backwards,\n [Ordering.Equal]: () => {\n return match(Math.sign(indexToSet), {\n [Ordering.Less]: () => Direction.Forwards,\n [Ordering.Equal]: () => Direction.Forwards,\n [Ordering.Greater]: () => Direction.Backwards,\n })\n },\n [Ordering.Greater]: () => Direction.Forwards,\n }\n )\n\n let nextSelectedIndex = match(direction, {\n [Direction.Forwards]: () => tabs.indexOf(focusableTabs[0]),\n [Direction.Backwards]: () => tabs.indexOf(focusableTabs[focusableTabs.length - 1]),\n })\n if (nextSelectedIndex !== -1) {\n selectedIndex.value = nextSelectedIndex\n }\n api.tabs.value = tabs\n api.panels.value = panels\n }\n\n // Middle\n else {\n let before = tabs.slice(0, indexToSet)\n let after = tabs.slice(indexToSet)\n\n let next = [...after, ...before].find((tab) => focusableTabs.includes(tab))\n if (!next) return\n\n let localSelectedIndex = tabs.indexOf(next) ?? api.selectedIndex.value\n if (localSelectedIndex === -1) localSelectedIndex = api.selectedIndex.value\n\n selectedIndex.value = localSelectedIndex\n api.tabs.value = tabs\n api.panels.value = panels\n }\n }\n\n let api = {\n selectedIndex: computed(() => selectedIndex.value ?? props.defaultIndex ?? null),\n orientation: computed(() => (props.vertical ? 'vertical' : 'horizontal')),\n activation: computed(() => (props.manual ? 'manual' : 'auto')),\n tabs,\n panels,\n setSelectedIndex(index: number) {\n if (realSelectedIndex.value !== index) {\n emit('change', index)\n }\n\n if (!isControlled.value) {\n setSelectedIndex(index)\n }\n },\n registerTab(tab: (typeof tabs)['value'][number]) {\n if (tabs.value.includes(tab)) return\n let activeTab = tabs.value[selectedIndex.value!]\n\n tabs.value.push(tab)\n tabs.value = sortByDomNode(tabs.value, dom)\n\n // When the component is uncontrolled, then we want to maintain the\n // actively selected tab even if new tabs are inserted or removed before\n // the active tab.\n //\n // When the component is controlled, then we don't want to do this and\n // instead we want to select the tab based on the `selectedIndex` prop.\n if (!isControlled.value) {\n let localSelectedIndex = tabs.value.indexOf(activeTab) ?? selectedIndex.value\n\n if (localSelectedIndex !== -1) {\n selectedIndex.value = localSelectedIndex\n }\n }\n },\n unregisterTab(tab: (typeof tabs)['value'][number]) {\n let idx = tabs.value.indexOf(tab)\n if (idx !== -1) tabs.value.splice(idx, 1)\n },\n registerPanel(panel: (typeof panels)['value'][number]) {\n if (panels.value.includes(panel)) return\n panels.value.push(panel)\n panels.value = sortByDomNode(panels.value, dom)\n },\n unregisterPanel(panel: (typeof panels)['value'][number]) {\n let idx = panels.value.indexOf(panel)\n if (idx !== -1) panels.value.splice(idx, 1)\n },\n }\n\n provide(TabsContext, api)\n\n let SSRCounter = ref({ tabs: [], panels: [] })\n let mounted = ref(false)\n onMounted(() => {\n mounted.value = true\n })\n provide(\n TabsSSRContext,\n computed(() => (mounted.value ? null : SSRCounter.value))\n )\n\n let incomingSelectedIndex = computed(() => props.selectedIndex)\n\n onMounted(() => {\n watch(\n [incomingSelectedIndex /* Deliberately skipping defaultIndex */],\n () => setSelectedIndex(props.selectedIndex ?? props.defaultIndex),\n { immediate: true }\n )\n })\n\n watchEffect(() => {\n if (!isControlled.value) return\n if (realSelectedIndex.value == null) return\n if (api.tabs.value.length <= 0) return\n\n let sorted = sortByDomNode(api.tabs.value, dom)\n let didOrderChange = sorted.some((tab, i) => dom(api.tabs.value[i]) !== dom(tab))\n\n if (didOrderChange) {\n api.setSelectedIndex(\n sorted.findIndex((x) => dom(x) === dom(api.tabs.value[realSelectedIndex.value!]))\n )\n }\n })\n\n return () => {\n let slot = { selectedIndex: selectedIndex.value }\n\n return h(Fragment, [\n tabs.value.length <= 0 &&\n h(FocusSentinel, {\n onFocus: () => {\n for (let tab of tabs.value) {\n let el = dom(tab)\n if (el?.tabIndex === 0) {\n el.focus()\n return true\n }\n }\n\n return false\n },\n }),\n render({\n theirProps: {\n ...attrs,\n ...omit(props, ['selectedIndex', 'defaultIndex', 'manual', 'vertical', 'onChange']),\n },\n ourProps: {},\n slot,\n slots,\n attrs,\n name: 'TabGroup',\n }),\n ])\n }\n },\n})\n\n// ---\n\nexport let TabList = defineComponent({\n name: 'TabList',\n props: {\n as: { type: [Object, String], default: 'div' },\n },\n setup(props, { attrs, slots }) {\n let api = useTabsContext('TabList')\n\n return () => {\n let slot = { selectedIndex: api.selectedIndex.value }\n\n let ourProps = {\n role: 'tablist',\n 'aria-orientation': api.orientation.value,\n }\n let theirProps = props\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'TabList',\n })\n }\n },\n})\n\n// ---\n\nexport let Tab = defineComponent({\n name: 'Tab',\n props: {\n as: { type: [Object, String], default: 'button' },\n disabled: { type: [Boolean], default: false },\n id: { type: String, default: () => `headlessui-tabs-tab-${useId()}` },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useTabsContext('Tab')\n\n let internalTabRef = ref<HTMLElement | null>(null)\n\n expose({ el: internalTabRef, $el: internalTabRef })\n\n onMounted(() => api.registerTab(internalTabRef))\n onUnmounted(() => api.unregisterTab(internalTabRef))\n\n let SSRContext = inject(TabsSSRContext)!\n // Note: there's a divergence here between React and Vue. Vue can work with `indexOf` implementation while React on the server can't.\n let mySSRIndex = computed(() => {\n if (SSRContext.value) {\n let mySSRIndex = SSRContext.value.tabs.indexOf(props.id)\n if (mySSRIndex === -1) return SSRContext.value.tabs.push(props.id) - 1\n return mySSRIndex\n }\n\n return -1\n })\n\n let myIndex = computed(() => {\n let myIndex = api.tabs.value.indexOf(internalTabRef)\n if (myIndex === -1) return mySSRIndex.value\n return myIndex\n })\n let selected = computed(() => myIndex.value === api.selectedIndex.value)\n\n function activateUsing(cb: () => FocusResult) {\n let result = cb()\n if (result === FocusResult.Success && api.activation.value === 'auto') {\n let newTab = getOwnerDocument(internalTabRef)?.activeElement\n let idx = api.tabs.value.findIndex((tab) => dom(tab) === newTab)\n if (idx !== -1) api.setSelectedIndex(idx)\n }\n return result\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n let list = api.tabs.value.map((tab) => dom(tab)).filter(Boolean) as HTMLElement[]\n\n if (event.key === Keys.Space || event.key === Keys.Enter) {\n event.preventDefault()\n event.stopPropagation()\n\n api.setSelectedIndex(myIndex.value)\n return\n }\n\n switch (event.key) {\n case Keys.Home:\n case Keys.PageUp:\n event.preventDefault()\n event.stopPropagation()\n\n return activateUsing(() => focusIn(list, Focus.First))\n\n case Keys.End:\n case Keys.PageDown:\n event.preventDefault()\n event.stopPropagation()\n\n return activateUsing(() => focusIn(list, Focus.Last))\n }\n\n let result = activateUsing(() =>\n match(api.orientation.value, {\n vertical() {\n if (event.key === Keys.ArrowUp) return focusIn(list, Focus.Previous | Focus.WrapAround)\n if (event.key === Keys.ArrowDown) return focusIn(list, Focus.Next | Focus.WrapAround)\n return FocusResult.Error\n },\n horizontal() {\n if (event.key === Keys.ArrowLeft)\n return focusIn(list, Focus.Previous | Focus.WrapAround)\n if (event.key === Keys.ArrowRight) return focusIn(list, Focus.Next | Focus.WrapAround)\n return FocusResult.Error\n },\n })\n )\n\n if (result === FocusResult.Success) {\n return event.preventDefault()\n }\n }\n\n let ready = ref(false)\n function handleSelection() {\n if (ready.value) return\n ready.value = true\n\n if (props.disabled) return\n\n dom(internalTabRef)?.focus({ preventScroll: true })\n api.setSelectedIndex(myIndex.value)\n\n microTask(() => {\n ready.value = false\n })\n }\n\n // This is important because we want to only focus the tab when it gets focus\n // OR it finished the click event (mouseup). However, if you perform a `click`,\n // then you will first get the `focus` and then get the `click` event.\n function handleMouseDown(event: MouseEvent) {\n event.preventDefault()\n }\n\n let type = useResolveButtonType(\n computed(() => ({ as: props.as, type: attrs.type })),\n internalTabRef\n )\n\n return () => {\n let slot = { selected: selected.value, disabled: props.disabled ?? false }\n let { id, ...theirProps } = props\n let ourProps = {\n ref: internalTabRef,\n onKeydown: handleKeyDown,\n onMousedown: handleMouseDown,\n onClick: handleSelection,\n id,\n role: 'tab',\n type: type.value,\n 'aria-controls': dom(api.panels.value[myIndex.value])?.id,\n 'aria-selected': selected.value,\n tabIndex: selected.value ? 0 : -1,\n disabled: props.disabled ? true : undefined,\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n name: 'Tab',\n })\n }\n },\n})\n\n// ---\n\nexport let TabPanels = defineComponent({\n name: 'TabPanels',\n props: {\n as: { type: [Object, String], default: 'div' },\n },\n setup(props, { slots, attrs }) {\n let api = useTabsContext('TabPanels')\n\n return () => {\n let slot = { selectedIndex: api.selectedIndex.value }\n\n return render({\n theirProps: props,\n ourProps: {},\n slot,\n attrs,\n slots,\n name: 'TabPanels',\n })\n }\n },\n})\n\nexport let TabPanel = defineComponent({\n name: 'TabPanel',\n props: {\n as: { type: [Object, String], default: 'div' },\n static: { type: Boolean, default: false },\n unmount: { type: Boolean, default: true },\n id: { type: String, default: () => `headlessui-tabs-panel-${useId()}` },\n tabIndex: { type: Number, default: 0 },\n },\n setup(props, { attrs, slots, expose }) {\n let api = useTabsContext('TabPanel')\n\n let internalPanelRef = ref<HTMLElement | null>(null)\n\n expose({ el: internalPanelRef, $el: internalPanelRef })\n\n onMounted(() => api.registerPanel(internalPanelRef))\n onUnmounted(() => api.unregisterPanel(internalPanelRef))\n\n let SSRContext = inject(TabsSSRContext)!\n let mySSRIndex = computed(() => {\n if (SSRContext.value) {\n let mySSRIndex = SSRContext.value.panels.indexOf(props.id)\n if (mySSRIndex === -1) return SSRContext.value.panels.push(props.id) - 1\n return mySSRIndex\n }\n\n return -1\n })\n\n let myIndex = computed(() => {\n let myIndex = api.panels.value.indexOf(internalPanelRef)\n if (myIndex === -1) return mySSRIndex.value\n return myIndex\n })\n let selected = computed(() => myIndex.value === api.selectedIndex.value)\n\n return () => {\n let slot = { selected: selected.value }\n let { id, tabIndex, ...theirProps } = props\n let ourProps = {\n ref: internalPanelRef,\n id,\n role: 'tabpanel',\n 'aria-labelledby': dom(api.tabs.value[myIndex.value])?.id,\n tabIndex: selected.value ? tabIndex : -1,\n }\n\n if (!selected.value && props.unmount && !props.static) {\n return h(Hidden, { as: 'span', 'aria-hidden': true, ...ourProps })\n }\n\n return render({\n ourProps,\n theirProps,\n slot,\n attrs,\n slots,\n features: Features.Static | Features.RenderStrategy,\n visible: selected.value,\n name: 'TabPanel',\n })\n }\n },\n})\n", "import { defineComponent, h, ref } from 'vue'\nimport { Features, Hidden } from './hidden'\n\nexport let FocusSentinel = defineComponent({\n props: {\n onFocus: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n let enabled = ref(true)\n\n return () => {\n if (!enabled.value) return null\n\n return h(Hidden, {\n as: 'button',\n type: 'button',\n features: Features.Focusable,\n onFocus(event: FocusEvent) {\n event.preventDefault()\n let frame: ReturnType<typeof requestAnimationFrame>\n\n let tries = 50\n function forwardFocus() {\n // Prevent infinite loops\n if (tries-- <= 0) {\n if (frame) cancelAnimationFrame(frame)\n return\n }\n\n // Try to move focus to the correct element. This depends on the implementation\n // of `onFocus` of course since it would be different for each place we use it in.\n if (props.onFocus?.()) {\n enabled.value = false\n cancelAnimationFrame(frame)\n return\n }\n\n // Retry\n frame = requestAnimationFrame(forwardFocus)\n }\n\n frame = requestAnimationFrame(forwardFocus)\n },\n })\n }\n },\n})\n", "import {\n computed,\n defineComponent,\n h,\n inject,\n normalizeClass,\n onMounted,\n onUnmounted,\n provide,\n ref,\n watch,\n watchEffect,\n type ConcreteComponent,\n type InjectionKey,\n type Ref,\n} from 'vue'\nimport { useId } from '../../hooks/use-id'\nimport {\n State,\n hasOpenClosed,\n useOpenClosed,\n useOpenClosedProvider,\n} from '../../internal/open-closed'\nimport { dom } from '../../utils/dom'\nimport { env } from '../../utils/env'\nimport { match } from '../../utils/match'\nimport { Features, RenderStrategy, omit, render } from '../../utils/render'\nimport { Reason, transition } from './utils/transition'\n\ntype ID = ReturnType<typeof useId>\n\n/**\n * Split class lists by whitespace\n *\n * We can't check for just spaces as all whitespace characters are\n * invalid in a class name, so we have to split on ANY whitespace.\n */\nfunction splitClasses(classes: string = '') {\n return classes.split(/\\s+/).filter((className) => className.length > 1)\n}\n\ninterface TransitionContextValues {\n show: Ref<boolean>\n appear: Ref<boolean>\n}\nlet TransitionContext = Symbol('TransitionContext') as InjectionKey<TransitionContextValues | null>\n\nenum TreeStates {\n Visible = 'visible',\n Hidden = 'hidden',\n}\n\nfunction hasTransitionContext() {\n return inject(TransitionContext, null) !== null\n}\n\nfunction useTransitionContext() {\n let context = inject(TransitionContext, null)\n\n if (context === null) {\n throw new Error('A <TransitionChild /> is used but it is missing a parent <TransitionRoot />.')\n }\n\n return context\n}\n\nfunction useParentNesting() {\n let context = inject(NestingContext, null)\n\n if (context === null) {\n throw new Error('A <TransitionChild /> is used but it is missing a parent <TransitionRoot />.')\n }\n\n return context\n}\n\ninterface NestingContextValues {\n children: Ref<{ id: ID; state: TreeStates }[]>\n register: (id: ID) => () => void\n unregister: (id: ID, strategy?: RenderStrategy) => void\n}\n\nlet NestingContext = Symbol('NestingContext') as InjectionKey<NestingContextValues | null>\n\nfunction hasChildren(\n bag: NestingContextValues['children'] | { children: NestingContextValues['children'] }\n): boolean {\n if ('children' in bag) return hasChildren(bag.children)\n return bag.value.filter(({ state }) => state === TreeStates.Visible).length > 0\n}\n\nfunction useNesting(done?: () => void) {\n let transitionableChildren = ref<NestingContextValues['children']['value']>([])\n\n let mounted = ref(false)\n onMounted(() => (mounted.value = true))\n onUnmounted(() => (mounted.value = false))\n\n function unregister(childId: ID, strategy = RenderStrategy.Hidden) {\n let idx = transitionableChildren.value.findIndex(({ id }) => id === childId)\n if (idx === -1) return\n\n match(strategy, {\n [RenderStrategy.Unmount]() {\n transitionableChildren.value.splice(idx, 1)\n },\n [RenderStrategy.Hidden]() {\n transitionableChildren.value[idx].state = TreeStates.Hidden\n },\n })\n\n if (!hasChildren(transitionableChildren) && mounted.value) {\n done?.()\n }\n }\n\n function register(childId: ID) {\n let child = transitionableChildren.value.find(({ id }) => id === childId)\n if (!child) {\n transitionableChildren.value.push({ id: childId, state: TreeStates.Visible })\n } else if (child.state !== TreeStates.Visible) {\n child.state = TreeStates.Visible\n }\n\n return () => unregister(childId, RenderStrategy.Unmount)\n }\n\n return {\n children: transitionableChildren,\n register,\n unregister,\n }\n}\n\n// ---\n\nlet TransitionChildRenderFeatures = Features.RenderStrategy\n\nexport let TransitionChild = defineComponent({\n props: {\n as: { type: [Object, String], default: 'div' },\n show: { type: [Boolean], default: null },\n unmount: { type: [Boolean], default: true },\n appear: { type: [Boolean], default: false },\n enter: { type: [String], default: '' },\n enterFrom: { type: [String], default: '' },\n enterTo: { type: [String], default: '' },\n entered: { type: [String], default: '' },\n leave: { type: [String], default: '' },\n leaveFrom: { type: [String], default: '' },\n leaveTo: { type: [String], default: '' },\n },\n emits: {\n beforeEnter: () => true,\n afterEnter: () => true,\n beforeLeave: () => true,\n afterLeave: () => true,\n },\n setup(props, { emit, attrs, slots, expose }) {\n let transitionStateFlags = ref(0)\n\n function beforeEnter() {\n transitionStateFlags.value |= State.Opening\n emit('beforeEnter')\n }\n\n function afterEnter() {\n transitionStateFlags.value &= ~State.Opening\n emit('afterEnter')\n }\n\n function beforeLeave() {\n transitionStateFlags.value |= State.Closing\n emit('beforeLeave')\n }\n\n function afterLeave() {\n transitionStateFlags.value &= ~State.Closing\n emit('afterLeave')\n }\n\n if (!hasTransitionContext() && hasOpenClosed()) {\n return () =>\n h(\n TransitionRoot,\n {\n ...props,\n onBeforeEnter: beforeEnter,\n onAfterEnter: afterEnter,\n onBeforeLeave: beforeLeave,\n onAfterLeave: afterLeave,\n },\n slots\n )\n }\n\n let container = ref<HTMLElement | null>(null)\n let strategy = computed(() => (props.unmount ? RenderStrategy.Unmount : RenderStrategy.Hidden))\n\n expose({ el: container, $el: container })\n\n let { show, appear } = useTransitionContext()\n let { register, unregister } = useParentNesting()\n\n let state = ref(show.value ? TreeStates.Visible : TreeStates.Hidden)\n let initial = { value: true }\n\n let id = useId()\n\n let isTransitioning = { value: false }\n\n let nesting = useNesting(() => {\n // When all children have been unmounted we can only hide ourselves if and only if we are not\n // transitioning ourselves. Otherwise we would unmount before the transitions are finished.\n if (!isTransitioning.value && state.value !== TreeStates.Hidden) {\n state.value = TreeStates.Hidden\n unregister(id)\n afterLeave()\n }\n })\n\n onMounted(() => {\n let unregister = register(id)\n onUnmounted(unregister)\n })\n\n watchEffect(() => {\n // If we are in another mode than the Hidden mode then ignore\n if (strategy.value !== RenderStrategy.Hidden) return\n if (!id) return\n\n // Make sure that we are visible\n if (show.value && state.value !== TreeStates.Visible) {\n state.value = TreeStates.Visible\n return\n }\n\n match(state.value, {\n [TreeStates.Hidden]: () => unregister(id),\n [TreeStates.Visible]: () => register(id),\n })\n })\n\n let enterClasses = splitClasses(props.enter)\n let enterFromClasses = splitClasses(props.enterFrom)\n let enterToClasses = splitClasses(props.enterTo)\n\n let enteredClasses = splitClasses(props.entered)\n\n let leaveClasses = splitClasses(props.leave)\n let leaveFromClasses = splitClasses(props.leaveFrom)\n let leaveToClasses = splitClasses(props.leaveTo)\n\n onMounted(() => {\n watchEffect(() => {\n if (state.value === TreeStates.Visible) {\n let domElement = dom(container)\n // When you return `null` from a component, the actual DOM reference will\n // be an empty comment... This means that we can never check for the DOM\n // node to be `null`. So instead we check for an empty comment.\n let isEmptyDOMNode = domElement instanceof Comment && domElement.data === ''\n if (isEmptyDOMNode) {\n throw new Error('Did you forget to passthrough the `ref` to the actual DOM node?')\n }\n }\n })\n })\n\n function executeTransition(onInvalidate: (cb: () => void) => void) {\n // Skipping initial transition\n let skip = initial.value && !appear.value\n\n let node = dom(container)\n if (!node || !(node instanceof HTMLElement)) return\n if (skip) return\n\n isTransitioning.value = true\n\n if (show.value) beforeEnter()\n if (!show.value) beforeLeave()\n\n onInvalidate(\n show.value\n ? transition(\n node,\n enterClasses,\n enterFromClasses,\n enterToClasses,\n enteredClasses,\n (reason) => {\n isTransitioning.value = false\n if (reason === Reason.Finished) afterEnter()\n }\n )\n : transition(\n node,\n leaveClasses,\n leaveFromClasses,\n leaveToClasses,\n enteredClasses,\n (reason) => {\n isTransitioning.value = false\n\n if (reason !== Reason.Finished) return\n\n // When we don't have children anymore we can safely unregister from the parent and hide\n // ourselves.\n if (!hasChildren(nesting)) {\n state.value = TreeStates.Hidden\n unregister(id)\n afterLeave()\n }\n }\n )\n )\n }\n\n onMounted(() => {\n watch(\n [show],\n (_oldValues, _newValues, onInvalidate) => {\n executeTransition(onInvalidate)\n initial.value = false\n },\n { immediate: true }\n )\n })\n\n provide(NestingContext, nesting)\n useOpenClosedProvider(\n computed(\n () =>\n match(state.value, {\n [TreeStates.Visible]: State.Open,\n [TreeStates.Hidden]: State.Closed,\n }) | transitionStateFlags.value\n )\n )\n\n return () => {\n let {\n appear: _appear,\n show: _show,\n\n // Class names\n enter,\n enterFrom,\n enterTo,\n entered,\n leave,\n leaveFrom,\n leaveTo,\n ...rest\n } = props\n\n let ourProps = { ref: container }\n let theirProps = {\n ...rest,\n ...(appear.value && show.value && env.isServer\n ? {\n // Already apply the `enter` and `enterFrom` on the server if required\n class: normalizeClass([\n attrs.class,\n // @ts-expect-error not explicitly defined\n rest.class,\n ...enterClasses,\n ...enterFromClasses,\n ]),\n }\n : {}),\n }\n\n return render({\n theirProps,\n ourProps,\n slot: {},\n slots,\n attrs,\n features: TransitionChildRenderFeatures,\n visible: state.value === TreeStates.Visible,\n name: 'TransitionChild',\n })\n }\n },\n})\n\n// ---\n\n// This exists to work around typescript circular inference problem\nlet _TransitionChild = TransitionChild as ConcreteComponent\n\nexport let TransitionRoot = defineComponent({\n inheritAttrs: false,\n props: {\n as: { type: [Object, String], default: 'div' },\n show: { type: [Boolean], default: null },\n unmount: { type: [Boolean], default: true },\n appear: { type: [Boolean], default: false },\n enter: { type: [String], default: '' },\n enterFrom: { type: [String], default: '' },\n enterTo: { type: [String], default: '' },\n entered: { type: [String], default: '' },\n leave: { type: [String], default: '' },\n leaveFrom: { type: [String], default: '' },\n leaveTo: { type: [String], default: '' },\n },\n emits: {\n beforeEnter: () => true,\n afterEnter: () => true,\n beforeLeave: () => true,\n afterLeave: () => true,\n },\n setup(props, { emit, attrs, slots }) {\n let usesOpenClosedState = useOpenClosed()\n\n let show = computed(() => {\n if (props.show === null && usesOpenClosedState !== null) {\n return (usesOpenClosedState.value & State.Open) === State.Open\n }\n\n return props.show\n })\n\n watchEffect(() => {\n if (![true, false].includes(show.value)) {\n throw new Error('A <Transition /> is used but it is missing a `:show=\"true | false\"` prop.')\n }\n })\n\n let state = ref(show.value ? TreeStates.Visible : TreeStates.Hidden)\n\n let nestingBag = useNesting(() => {\n state.value = TreeStates.Hidden\n })\n\n let initial = ref(true)\n let transitionBag = {\n show,\n appear: computed(() => props.appear || !initial.value),\n }\n\n onMounted(() => {\n watchEffect(() => {\n initial.value = false\n\n if (show.value) {\n state.value = TreeStates.Visible\n } else if (!hasChildren(nestingBag)) {\n state.value = TreeStates.Hidden\n }\n })\n })\n\n provide(NestingContext, nestingBag)\n provide(TransitionContext, transitionBag)\n\n return () => {\n let theirProps = omit(props, [\n 'show',\n 'appear',\n 'unmount',\n 'onBeforeEnter',\n 'onBeforeLeave',\n 'onAfterEnter',\n 'onAfterLeave',\n ])\n let sharedProps = { unmount: props.unmount }\n\n return render({\n ourProps: {\n ...sharedProps,\n as: 'template',\n },\n theirProps: {},\n slot: {},\n slots: {\n ...slots,\n default: () => [\n h(\n _TransitionChild,\n {\n onBeforeEnter: () => emit('beforeEnter'),\n onAfterEnter: () => emit('afterEnter'),\n onBeforeLeave: () => emit('beforeLeave'),\n onAfterLeave: () => emit('afterLeave'),\n ...attrs,\n ...sharedProps,\n ...theirProps,\n },\n slots.default\n ),\n ],\n },\n attrs: {},\n features: TransitionChildRenderFeatures,\n visible: state.value === TreeStates.Visible,\n name: 'Transition',\n })\n }\n },\n})\n", "export function once<T>(cb: (...args: T[]) => void) {\n let state = { called: false }\n\n return (...args: T[]) => {\n if (state.called) return\n state.called = true\n return cb(...args)\n }\n}\n", "import { disposables } from '../../../utils/disposables'\nimport { once } from '../../../utils/once'\n\nfunction addClasses(node: HTMLElement, ...classes: string[]) {\n node && classes.length > 0 && node.classList.add(...classes)\n}\n\nfunction removeClasses(node: HTMLElement, ...classes: string[]) {\n node && classes.length > 0 && node.classList.remove(...classes)\n}\n\nexport enum Reason {\n Finished = 'finished',\n Cancelled = 'cancelled',\n}\n\nfunction waitForTransition(node: HTMLElement, done: (reason: Reason) => void) {\n let d = disposables()\n\n if (!node) return d.dispose\n\n // Safari returns a comma separated list of values, so let's sort them and take the highest value.\n let { transitionDuration, transitionDelay } = getComputedStyle(node)\n\n let [durationMs, delaysMs] = [transitionDuration, transitionDelay].map((value) => {\n let [resolvedValue = 0] = value\n .split(',')\n // Remove falseys we can't work with\n .filter(Boolean)\n // Values are returned as `0.3s` or `75ms`\n .map((v) => (v.includes('ms') ? parseFloat(v) : parseFloat(v) * 1000))\n .sort((a, z) => z - a)\n\n return resolvedValue\n })\n\n // Waiting for the transition to end. We could use the `transitionend` event, however when no\n // actual transition/duration is defined then the `transitionend` event is not fired.\n //\n // TODO: Downside is, when you slow down transitions via devtools this timeout is still using the\n // full 100% speed instead of the 25% or 10%.\n if (durationMs !== 0) {\n d.setTimeout(() => done(Reason.Finished), durationMs + delaysMs)\n } else {\n // No transition is happening, so we should cleanup already. Otherwise we have to wait until we\n // get disposed.\n done(Reason.Finished)\n }\n\n // If we get disposed before the timeout runs we should cleanup anyway\n d.add(() => done(Reason.Cancelled))\n\n return d.dispose\n}\n\nexport function transition(\n node: HTMLElement,\n base: string[],\n from: string[],\n to: string[],\n entered: string[],\n done?: (reason: Reason) => void\n) {\n let d = disposables()\n let _done = done !== undefined ? once(done) : () => {}\n\n removeClasses(node, ...entered)\n addClasses(node, ...base, ...from)\n\n d.nextFrame(() => {\n removeClasses(node, ...from)\n addClasses(node, ...to)\n\n d.add(\n waitForTransition(node, (reason) => {\n removeClasses(node, ...to, ...base)\n addClasses(node, ...entered)\n return _done(reason)\n })\n )\n })\n\n // Once we get disposed, we should ensure that we cleanup after ourselves. In case of an unmount,\n // the node itself will be nullified and will be a no-op. In case of a full transition the classes\n // are already removed which is also a no-op. However if you go from enter -> leave mid-transition\n // then we have some leftovers that should be cleaned.\n d.add(() => removeClasses(node, ...base, ...from, ...to, ...entered))\n\n // When we get disposed early, then we should also call the done method but switch the reason.\n d.add(() => _done(Reason.Cancelled))\n\n return d.dispose\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["opts", "options", "Fragment", "cloneVNode", "computed", "defineComponent", "h", "inject", "nextTick", "onMounted", "onUnmounted", "provide", "ref", "watch", "watchEffect", "computed", "computed", "ref", "ref", "env", "watchEffect", "watchEffect", "computed", "containers", "ref", "ref", "watchEffect", "ref", "watchEffect", "ref", "watchEffect", "watchEffect", "name", "inject", "defineComponent", "computed", "ref", "watch", "provide", "h", "cloneVNode", "value", "localActiveOptionIndex", "id", "options", "option", "adjustedState", "onMounted", "form", "Fragment", "name", "nextTick", "currentDisplayValue", "debounce", "watchEffect", "onUnmounted", "disabled", "computed", "defineComponent", "h", "inject", "nextTick", "onMounted", "onUnmounted", "provide", "ref", "watchEffect", "Fragment", "computed", "defineComponent", "h", "onMounted", "onUnmounted", "ref", "watch", "watchEffect", "watchEffect", "watchEffect", "ref", "ref", "Features", "defineComponent", "ref", "computed", "onMounted", "onUnmounted", "h", "Fragment", "watch", "watchEffect", "computed", "watch", "onUnmounted", "shallowRef", "computed", "watch", "doc", "shouldBeLocked", "ref", "watchEffect", "ref", "watchEffect", "count", "h", "ref", "ref", "resolveContainers", "h", "defineComponent", "inject", "provide", "inject", "defineComponent", "provide", "inject", "onMounted", "onUnmounted", "provide", "watch", "inject", "onMounted", "watch", "onUnmounted", "provide", "computed", "defineComponent", "inject", "onMounted", "onUnmounted", "provide", "ref", "unref", "inject", "ref", "provide", "computed", "defineComponent", "onMounted", "onUnmounted", "id", "unref", "defineComponent", "h", "inject", "onMounted", "onUnmounted", "provide", "reactive", "ref", "watch", "watchEffect", "defineComponent", "ref", "inject", "onMounted", "watchEffect", "watch", "onUnmounted", "h", "provide", "reactive", "inject", "defineComponent", "ref", "onMounted", "computed", "id", "provide", "nextTick", "watchEffect", "h", "onUnmounted", "computed", "defineComponent", "inject", "onMounted", "onUnmounted", "provide", "ref", "watchEffect", "inject", "defineComponent", "ref", "provide", "computed", "onMounted", "onUnmounted", "watchEffect", "id", "Fragment", "computed", "defineComponent", "h", "inject", "nextTick", "onMounted", "onUnmounted", "provide", "ref", "toRaw", "watch", "watchEffect", "ref", "labelledby", "label", "ref", "defaultComparator", "inject", "defineComponent", "defaultComparator", "ref", "computed", "value", "id", "options", "toRaw", "provide", "onMounted", "watch", "form", "h", "Fragment", "name", "nextTick", "getTextValue", "onUnmounted", "watchEffect", "computed", "defineComponent", "inject", "nextTick", "onMounted", "onUnmounted", "provide", "ref", "watchEffect", "nextFrame", "inject", "defineComponent", "ref", "id", "items", "computed", "provide", "nextTick", "getTextValue", "onMounted", "onUnmounted", "watchEffect", "Fragment", "computed", "defineComponent", "h", "inject", "onMounted", "onUnmounted", "provide", "ref", "shallowRef", "watchEffect", "inject", "defineComponent", "ref", "computed", "root", "provide", "watchEffect", "h", "Fragment", "onMounted", "onUnmounted", "el", "id", "idx", "shallowRef", "Fragment", "computed", "defineComponent", "h", "inject", "onMounted", "onUnmounted", "provide", "ref", "toRaw", "watch", "computed", "defineComponent", "inject", "onMounted", "onUnmounted", "provide", "ref", "unref", "inject", "ref", "provide", "computed", "defineComponent", "onMounted", "onUnmounted", "id", "unref", "defaultComparator", "inject", "defineComponent", "ref", "computed", "value", "toRaw", "id", "provide", "onMounted", "watch", "form", "h", "Fragment", "name", "defineComponent", "ref", "computed", "onMounted", "onUnmounted", "toRaw", "id", "Fragment", "computed", "defineComponent", "h", "inject", "onMounted", "provide", "ref", "watch", "defineComponent", "ref", "computed", "provide", "inject", "onMounted", "watch", "id", "form", "h", "Fragment", "Fragment", "computed", "defineComponent", "h", "inject", "onMounted", "onUnmounted", "provide", "ref", "watch", "watchEffect", "defineComponent", "h", "ref", "defineComponent", "ref", "h", "inject", "defineComponent", "ref", "computed", "tabs", "panels", "provide", "onMounted", "watch", "watchEffect", "h", "Fragment", "onUnmounted", "mySSRIndex", "myIndex", "id", "computed", "defineComponent", "h", "inject", "onMounted", "onUnmounted", "provide", "ref", "watch", "watchEffect", "inject", "ref", "onMounted", "onUnmounted", "id", "defineComponent", "h", "computed", "unregister", "watchEffect", "watch", "provide"]
|
|
7
|
+
}
|