{"version":3,"file":"vue-stack.mjs","names":[],"sources":["../src/schemes/control.ts","../src/schemes/action.ts","../src/schemes/dynamic.ts","../src/injections.ts","../src/service.ts","../src/plugin.ts","../src/logger.ts","../src/composables/service.ts","../src/composables/teleport.ts","../src/constants.ts","../src/composables/control.tsx","../src/composables/component.ts","../src/composables/action.tsx","../src/components/VDynamicStacks.tsx","../src/components/VDialog.tsx","../src/components/VSnackbarTransition.tsx","../src/components/VSnackbar.tsx","../src/utils/getScrollParent.ts","../src/components/VMenu.tsx"],"sourcesContent":["import {\n  Ref,\n  Transition,\n  VNode,\n  VNodeChild,\n  PropType,\n  ExtractPropTypes,\n  SetupContext,\n  SlotsType,\n  ComponentPublicInstance,\n  type HTMLAttributes,\n  type StyleValue as VueStyleValue,\n} from 'vue';\nimport { RouteLocationNormalized } from 'vue-router';\nimport { StyleValue, defineSlots, rawNumberProp } from '@fastkit/vue-utils';\nimport { UseKeyboardRef } from '@fastkit/vue-keyboard';\nimport { JavaScriptTransition } from '@fastkit/vue-transitions';\nimport type { VueStackService } from '../service';\n\ntype DelayTimerProps = 'openDelay' | 'closeDelay';\n\n/**\n * Reason for becoming hidden\n *\n * - `indeterminate` Not determined reason\n * - `resolved` - User performed an 'OK'-like action\n * - `canceled` - User performed a 'Cancel'-like action\n */\nexport type StackableCloseReason = 'indeterminate' | 'resolved' | 'canceled';\n\n/**\n * Configuration for closing the stack with the Tab key\n *\n * - `always` Always close.\n * - `not-focused` When the Tab key is pressed and the active element of the document is outside the stack and its activator.\n */\nexport type StackableTabCloseSetting = 'always' | 'not-focused';\n\n/**\n * Configuration for closing the stack with the Tab key\n *\n * If `true` is specified, it is treated as `always`.\n *\n * @see {@link StackableTabCloseSetting}\n */\nexport type StackableTabCloseSpec = boolean | StackableTabCloseSetting;\n\nexport type VStackNavigationGuard = (\n  to: RouteLocationNormalized,\n  from: RouteLocationNormalized,\n) => boolean | Promise<boolean>;\n\n/**\n * Handler function for resolving the stack.\n *\n * Handler function for resolving the stack, which may include validation processes or asynchronous submission tasks.\n *\n * @returns A boolean or undefined value or a Promise that resolves to a boolean or undefined value.\n *   - If `false`, the stack resolution is canceled.\n */\nexport type StackableResolveHandler = (\n  ctx: VStackControl,\n) => boolean | void | undefined | Promise<boolean | void | undefined>;\n\n/**\n * Attributes to apply to the stack element's activator\n */\nexport interface VStackActivatorAttributes {\n  /** VNode ref */\n  ref: Ref;\n  /** Click handler */\n  onClick?: (ev: PointerEvent) => void;\n  /** Context menu handler */\n  onContextmenu?: (ev: PointerEvent) => void;\n  /** Mouse enter handler */\n  onMouseenter?: (ev: MouseEvent) => void;\n  /** Mouse leave handler */\n  onMouseleave?: (ev: MouseEvent) => void;\n  /** Focus handler */\n  onFocus?: (ev: FocusEvent) => void;\n}\n\n/** State of the stack control */\nexport interface VStackControlState {\n  /** Display state */\n  isActive: boolean;\n  /** Activator element */\n  readonly activator: HTMLElement | undefined;\n  /**\n   * Reason for becoming hidden\n   *\n   * @see {@link StackableCloseReason}\n   */\n  closeReason: StackableCloseReason;\n  /** Initial value */\n  initialValue: any;\n  /** Input value */\n  inputValue: any;\n  /**\n   * If the asynchronous resolution handler is in progress, its type.\n   */\n  guardInProgressType: null | 'cancel' | 'resolve';\n  /** During display animation */\n  showing: boolean;\n  /** During hide animation */\n  closing: boolean;\n  /** During guard animation */\n  guardAnimating: boolean;\n  /** Guard animation timer ID */\n  guardAnimateTimeId: number | null;\n  /** Activation order */\n  activateOrder: number;\n  /** Auto-hide timer ID */\n  timeoutId: number | null;\n  /** List of delay request timer IDs */\n  delayTimers: number[];\n  /** Rendering required */\n  needRender: boolean;\n  /** Component mounted */\n  booted: boolean;\n  /** Component destroyed */\n  isDestroyed: boolean;\n  /** Whether the activator element is being hovered. */\n  isActivatorHovered: boolean;\n  /** Whether the stack content is being hovered. */\n  isContentHovered: boolean;\n}\n\n/**\n * Close option\n */\nexport interface VStackCloseOptions {\n  /**\n   * Force close\n   *\n   * When the `persistent` setting is enabled, the stack will not close unless this option is also activated.\n   */\n  force?: boolean;\n  /**\n   * Reason for becoming hidden\n   *\n   * @see {@link StackableCloseReason}\n   */\n  reason?: StackableCloseReason;\n}\n\n/**\n * Check if the specified value is an instance of the stack control\n *\n * @param source - The value to check\n * @returns - If it is a stack control, returns `true`\n */\nexport function isStackControl(source: unknown): source is VStackControl {\n  return (\n    !!source &&\n    typeof source === 'object' &&\n    (source as VStackControl).__isStackControl === true\n  );\n}\n\n/**\n * Stack control\n */\nexport interface VStackControl {\n  readonly __isStackControl: true;\n  readonly props: VStackProps;\n  /** Display state */\n  readonly isActive: boolean;\n  /**\n   * The value entered into the stack\n   *\n   * This is always `undefined` if the `closeReason` is not `resolved`.\n   */\n  value: any;\n  /**\n   * Stack service\n   *\n   * @see {@link VueStackService}\n   */\n  readonly $service: VueStackService;\n  /** List of class attributes */\n  readonly classes: any[];\n  /** List of style attributes */\n  readonly styles: StyleValue[];\n  /** During animation */\n  readonly transitioning: boolean;\n  /** Activation order */\n  readonly activateOrder: number;\n  /** Timeout setting (milliseconds) */\n  readonly timeout: number;\n  /**\n   * Persistently display\n   *\n   * If this setting is enabled, it will attempt to block hide requests or page transitions\n   */\n  readonly persistent: boolean;\n  /** The user has performed a confirmation action, such as 'OK,' for the stack display */\n  readonly isResolved: boolean;\n  /** The user has performed a negative action, such as 'Cancel,' for the stack display */\n  readonly isCanceled: boolean;\n  /** z index */\n  readonly zIndex: number;\n  /** Restore focus after hiding */\n  readonly focusRestorable: boolean;\n  /** Close when the ESC key is pressed */\n  readonly closeOnEsc: boolean;\n  /**\n   * Close when the ESC key is pressed\n   *\n   * @see {@link StackableTabCloseSetting}\n   */\n  readonly closeOnTab: false | StackableTabCloseSetting;\n  /** Close on navigation occurrence */\n  readonly closeOnNavigation: boolean;\n  /** Close when clicking outside the stack area */\n  readonly closeOnOutsideClick: boolean;\n  /** Delay time for display (in milliseconds) */\n  readonly openDelay: number;\n  /** Delay time for hiding (in milliseconds) */\n  readonly closeDelay: number;\n  /** Component destroyed */\n  readonly isDestroyed: boolean;\n  /** Stack content element */\n  readonly contentRef: Ref<HTMLElement | null>;\n  /** Activator element */\n  readonly activator: HTMLElement | undefined;\n  /** Backdrop element */\n  readonly backdropRef: Ref<HTMLElement | null>;\n  /** Stack type */\n  readonly stackType?: string | symbol;\n  /**\n   * Inactivate the stack and disable all display processing\n   */\n  readonly disabled: boolean;\n  /**\n   * If the asynchronous resolution handler is in progress, its type.\n   */\n  readonly guardInProgressType: null | 'cancel' | 'resolve';\n  /**\n   * A boolean flag indicating whether the guard process is currently in progress.\n   * When true, it signifies that the guard is actively executing.\n   */\n  readonly guardInProgress: boolean;\n  /**\n   * The VStackControl instance in the parent hierarchy of the component tree.\n   */\n  readonly parent: VStackControl | undefined;\n  /**\n   * List of VStackControl instances located below this component in the component tree.\n   */\n  readonly children: VStackControl[];\n  /**\n   * List of all nested VStackControl instances, including children.\n   */\n  readonly allChildren: VStackControl[];\n  /**\n   * Whether the mouse pointer is hovering over its activator or stack content.\n   */\n  readonly isHovered: boolean;\n  /**\n   * Whether the specified element is part of its activator or stack element.\n   * @param el - Element\n   */\n  contains(el: Element): boolean;\n\n  /** @private */\n  readonly _: {\n    readonly attrs: Record<string, unknown>;\n    /**\n     * State of the stack control\n     *\n     * @see {@link VStackControlState}\n     */\n    readonly state: VStackControlState;\n    /**\n     * Attributes to apply to the stack element's activator\n     *\n     * @see {@link VStackActivatorAttributes}\n     */\n    readonly activatorAttrs: VStackActivatorAttributes;\n    /** Transition settings */\n    readonly Transition: {\n      readonly Ctor: typeof Transition;\n      readonly props: any;\n    };\n    /**\n     * Keyboard composable\n     *\n     * @see {@link UseKeyboardRef}\n     */\n    readonly keyboard: UseKeyboardRef;\n    /** Listener object related to transitions */\n    readonly transitionListeners: {\n      onBeforeEnter: (el: HTMLElement) => void;\n      onAfterEnter: (el: HTMLElement) => void;\n      onEnterCancelled: (el: HTMLElement) => void;\n      onBeforeLeave: (el: HTMLElement) => void;\n      onAfterLeave: (el: HTMLElement) => void;\n      onLeaveCancelled: (el: HTMLElement) => void;\n    };\n    /** Handler to trap focus */\n    focusTrapper?: (ev: FocusEvent) => void;\n    /**\n     * Set the active state\n     * @param isActive - active state\n     * @param withEmit - Notify of changes\n     */\n    setIsActive(isActive: boolean, withEmit?: boolean): void;\n    /** Clear the auto-hide timer */\n    clearTimeoutId(): void;\n    /** Perform delayed processing */\n    runDelay(prop: number | DelayTimerProps, cb: () => any): void;\n    /** Clear the delayed processing queue */\n    clearDelay(): void;\n    /** Trap focus */\n    trapFocus(ev?: FocusEvent): boolean | void;\n    /** Prepare handler for focus trapping */\n    setupFocusTrapper(): void;\n    /** Remove handler for focus trapping */\n    removeFocusTrapper(): void;\n    /** Update focus trap settings */\n    checkFocusTrap(): void;\n    /** Set rendering request */\n    setNeedRender(needRender: boolean): void;\n    /** Process for determining hide on outside-click */\n    outsideClickCloseConditional(ev: PointerEvent, pre?: boolean): boolean;\n    /** Clear guard effect */\n    clearGuardEffect(): void;\n    joinChild(child: VStackControl): () => void;\n  };\n  /**\n   * Set the activator\n   *\n   * @param query - Specifying the activator element or its query\n   *\n   * @see {@link VStackActivatorQuery}\n   */\n  setActivator(query: VStackActivatorQuery): this;\n  /** Show the stack */\n  show(): Promise<void>;\n  /** Toggle the display state */\n  toggle(): Promise<void>;\n  /**\n   * Close the stack\n   *\n   * @param opts - Close option\n   *\n   * @see {@link VStackCloseOptions}\n   */\n  close(opts?: VStackCloseOptions): Promise<void>;\n  /**\n   * Confirm the stack input\n   *\n   * The stack will close with the `force` option.\n   *\n   * @param payload - The confirmed value (if any)\n   */\n  resolve(payload?: any): Promise<void | undefined | false>;\n  /**\n   * Cancel the stack input\n   *\n   * @param force - Forcefully close\n   */\n  cancel(force?: boolean): Promise<void>;\n  /**\n   * Render the stack\n   *\n   * @param fn - Renderer\n   * @param opts - Rendering options\n   */\n  render(\n    fn: (\n      children: VNodeChild | undefined,\n      opts: {\n        withClickOutside: (node: VNode) => VNode;\n      },\n    ) => VNode,\n    opts?: {\n      transition?: (child?: VNode) => VNode;\n    },\n  ): VNode;\n  /** Bring the stack to the forefront */\n  toFront(): void;\n  /** Reset the stack input */\n  resetValue(): void;\n  /**\n   * Check if the stack is in the foreground\n   * @param filter - Exclude filter for specific stacks\n   */\n  isFront(filter?: (control: VStackControl) => boolean): boolean;\n\n  /**\n   * If the specified element is a comprehensive descendant of this stack or is the same, it returns the included element.\n   *\n   * @param other - The element to be checked.\n   * @param includingActivator - Check if it might be included in the activator element.\n   */\n  getContainsOrSameElement(\n    other: Node | Event | EventTarget | null | undefined,\n    includingActivator?: boolean,\n  ): HTMLElement | undefined;\n  /**\n   * If the specified element is a comprehensive descendant of this stack or is the same, it returns `true`.\n   *\n   * @param other - The element to be checked.\n   * @param includingActivator - Check if it might be included in the activator element.\n   */\n  containsOrSameElement(\n    other: Node | Event | EventTarget | null | undefined,\n    includingActivator?: boolean,\n  ): boolean;\n  /** Execute guard effect */\n  guardEffect(): void;\n}\n\nexport const stackableEmits = {\n  /**\n   * Update display state\n   * @param modelValue - display state\n   */\n  'update:modelValue': (modelValue: boolean) => true,\n  /**\n   * When updating the display state\n   * @param modelValue - display state\n   */\n  change: (modelValue: boolean) => true,\n  /**\n   * When updating the stack input\n   * @param value - Stack input\n   */\n  payload: (value: any) => true,\n  /**\n   * When the stack is displayed\n   * @param control - Stack control\n   */\n  show: (control: VStackControl) => true,\n  /**\n   * When the stack is closed\n   * @param control - Stack control\n   */\n  close: (control: VStackControl) => true,\n  /**\n   * Before the enter transition starts\n   * @param el - Element\n   * @param control - Stack control\n   */\n  beforeEnter: (el: HTMLElement, control: VStackControl) => true,\n  /**\n   * After the enter transition starts\n   * @param el - Element\n   * @param control - Stack control\n   */\n  afterEnter: (el: HTMLElement, control: VStackControl) => true,\n  /**\n   * When the enter transition start is canceled\n   * @param el - Element\n   * @param control - Stack control\n   */\n  enterCancelled: (el: HTMLElement, control: VStackControl) => true,\n  /**\n   * Before the leave transition starts\n   * @param el - Element\n   * @param control - Stack control\n   */\n  beforeLeave: (el: HTMLElement, control: VStackControl) => true,\n  /**\n   * After the leave transition starts\n   * @param el - Element\n   * @param control - Stack control\n   */\n  afterLeave: (el: HTMLElement, control: VStackControl) => true,\n  /**\n   * When the leave transition start is canceled\n   * @param el - Element\n   * @param control - Stack control\n   */\n  leaveCancelled: (el: HTMLElement, control: VStackControl) => true,\n};\n\nexport type StackableEmits = typeof stackableEmits;\n\n/**\n * Payload for the activator slot\n */\nexport interface VStackActivatorPayload {\n  /**\n   * Attributes to apply to the stack element's activator\n   *\n   * @see {@link VStackActivatorAttributes}\n   */\n  get attrs(): VStackActivatorAttributes;\n  /**\n   * Stack control\n   *\n   * @see {@link VStackControl}\n   */\n  get control(): VStackControl;\n}\n\nexport type VStackSlots = {\n  default?: (control: VStackControl) => VNodeChild;\n  /**\n   * Activator rendering slot\n   *\n   * @param payload - Payload for the activator slot\n   *\n   * @see {@link VStackActivatorPayload}\n   */\n  activator?: (payload: VStackActivatorPayload) => VNodeChild;\n};\n\nexport const V_STACK_SLOTS = defineSlots<VStackSlots>();\n\ntype MergeSlots<A extends SlotsType, B extends SlotsType> = SlotsType<\n  NonNullable<A[keyof A]> & NonNullable<B[keyof B]>\n>;\n\nexport type MergeStackBaseSlots<Slots extends SlotsType> = MergeSlots<\n  Slots,\n  typeof V_STACK_SLOTS\n>;\n\nexport interface CreateStackablePropsOptions {\n  /* extends ColorSchemePropsStaticOptions */\n  /** @default \"v-stack-fade\" */\n  defaultTransition?: string;\n  /** @default false */\n  defaultFocusTrap?: boolean;\n  /** @default false */\n  defaultFocusRestorable?: boolean;\n  /** @default false */\n  defaultScrollLock?: boolean;\n  /** @default false */\n  defaultBackdrop?: string | boolean;\n  /** @default true */\n  defaultCloseOnOutsideClick?: boolean;\n  /** @default true */\n  defaultCloseOnNavigation?: boolean;\n  /** @default true */\n  defaultCloseOnEsc?: boolean;\n  /** @default false */\n  defaultCloseOnTab?: StackableTabCloseSpec;\n  /** @default 0 */\n  defaultTimeout?: number;\n  /** @default false */\n  defaultPersistent?: boolean;\n}\n\nexport interface VStackObjectTransitionProp<\n  T extends string | JavaScriptTransition,\n> {\n  transition: T;\n  props?: T extends JavaScriptTransition ? T['props'] : typeof Transition.props;\n}\n\nexport type RawVStackObjectTransitionProp<\n  T extends string | JavaScriptTransition,\n> = string | VStackObjectTransitionProp<T>;\n\n/**\n * Specifying the activator element or its query\n */\nexport type VStackActivatorQuery =\n  | string\n  | Event\n  | Element\n  | ComponentPublicInstance\n  | (() => Element | ComponentPublicInstance | void | undefined | null);\n\nexport type VStackActivatorAttrsObject = HTMLAttributes & Record<string, any>;\n\nexport type VStackActivatorAttrsFn = (ctx: {\n  control: VStackControl;\n}) => VStackActivatorAttrsObject | undefined;\n\nexport type VStackActivatorAttrsSpec =\n  VStackActivatorAttrsFn | VStackActivatorAttrsObject;\n\nexport function createStackableProps<T extends string | JavaScriptTransition>(\n  opts: CreateStackablePropsOptions = {},\n) {\n  const {\n    defaultTransition = 'v-stack-fade',\n    defaultFocusTrap = false,\n    defaultFocusRestorable = false,\n    defaultScrollLock = false,\n    defaultBackdrop = false,\n    defaultCloseOnOutsideClick = true,\n    defaultCloseOnNavigation = true,\n    defaultCloseOnEsc = true,\n    defaultCloseOnTab = false,\n    defaultTimeout = 0,\n    defaultPersistent = false,\n  } = opts;\n\n  return {\n    /** Display state */\n    modelValue: Boolean,\n    /** Do not display until the component is mounted */\n    lazyBoot: Boolean,\n    /** Stack input */\n    value: null,\n    /** Class attributes */\n    class: null,\n    /** Style attributes */\n    style: null as unknown as PropType<VueStyleValue>,\n    /**\n     * Transition settings\n     *\n     * @see {@link RawVStackObjectTransitionProp}\n     */\n    transition: {\n      type: [String, Object, Function] as PropType<\n        RawVStackObjectTransitionProp<T>\n      >,\n      default: defaultTransition,\n    },\n    /**\n     * Always draw the stack even when it is invisible\n     *\n     * If your application relies on drawing small elements in the stack, try this setting\n     */\n    alwaysRender: Boolean,\n    /**\n     * Display a backdrop behind the stack\n     *\n     * If string is specified, it will be displayed in that color\n     */\n    backdrop: {\n      type: [Boolean, String] as PropType<boolean | string>,\n      default: defaultBackdrop,\n    },\n    /**\n     * Trap user focus\n     */\n    focusTrap: {\n      type: Boolean,\n      default: defaultFocusTrap,\n    },\n    /**\n     * Restore focus when stack is hidden\n     */\n    focusRestorable: {\n      type: Boolean,\n      default: defaultFocusRestorable,\n    },\n    /**\n     * Lock document scrolling\n     */\n    scrollLock: {\n      type: Boolean,\n      default: defaultScrollLock,\n    },\n    /**\n     * Show stack on activator click\n     */\n    openOnClick: {\n      type: Boolean,\n      default: undefined,\n    },\n    /**\n     * Show stack when hovering over activator\n     */\n    openOnHover: Boolean,\n    /**\n     * Display stack when opening context menu on activator\n     */\n    openOnContextmenu: Boolean,\n    /**\n     * Show stack when focus is on activator\n     */\n    openOnFocus: {\n      type: Boolean,\n      default: undefined,\n    },\n    /**\n     * Time to delay display (in milliseconds)\n     */\n    openDelay: rawNumberProp(0),\n    /**\n     * Time to delay hiding (in milliseconds)\n     */\n    closeDelay: rawNumberProp(200),\n    /**\n     * Close stack when clicking outside the stack\n     */\n    closeOnOutsideClick: {\n      type: Boolean,\n      default: defaultCloseOnOutsideClick,\n    },\n    /**\n     * Close stack when ECS key is pressed\n     */\n    closeOnEsc: {\n      type: Boolean,\n      default: defaultCloseOnEsc,\n    },\n    /**\n     * Close when the ESC key is pressed\n     *\n     * @see {@link StackableTabCloseSpec}\n     */\n    closeOnTab: {\n      type: [Boolean, String] as PropType<StackableTabCloseSpec>,\n      default: defaultCloseOnTab,\n    },\n    /**\n     * Close stack when navigation occurs\n     */\n    closeOnNavigation: {\n      type: Boolean,\n      default: defaultCloseOnNavigation,\n    },\n    /**\n     * Persistently display\n     *\n     * If this setting is enabled, it will attempt to block hide requests or page transitions\n     */\n    persistent: {\n      type: Boolean,\n      default: defaultPersistent,\n    },\n    /**\n     * Inactivate the stack and disable all display processing\n     */\n    disabled: Boolean,\n    /** z index */\n    zIndex: rawNumberProp(0),\n    /** Timeout setting (milliseconds) */\n    timeout: rawNumberProp(defaultTimeout),\n    /**\n     * Guard navigation while viewing stacks\n     *\n     * @see {@link VStackNavigationGuard}\n     */\n    navigationGuard: {\n      type: [Boolean, Function] as PropType<boolean | VStackNavigationGuard>,\n      default: false,\n    },\n    /**\n     * Show hidden guard effects\n     */\n    guardEffect: {\n      type: [Boolean, String],\n      default: true,\n    },\n    /**\n     * Elements to include in the click-outside-directive check\n     *\n     * By specifying this, it is possible to skip the hiding process when clicking outside the stack elements.\n     */\n    includeElements: Function as PropType<() => Element[]>,\n    /**\n     * Specifying the activator element or its query\n     *\n     * @see {@link VStackActivatorQuery}\n     */\n    activator: {} as PropType<VStackActivatorQuery>,\n    /**\n     * Handler function for when the stack is resolved with a positive value.\n     *\n     * Which may include validation processes or asynchronous submission tasks.\n     *\n     * @returns A boolean or undefined value or a Promise that resolves to a boolean or undefined value.\n     *   - If `false`, the stack resolution is canceled.\n     *\n     * @see {@link StackableResolveHandler}\n     */\n    resolveHandler: Function as PropType<StackableResolveHandler>,\n    /**\n     * Handler function for when the stack is resolved with a negative value.\n     *\n     * Which may include validation processes or asynchronous submission tasks.\n     *\n     * @returns A boolean or undefined value or a Promise that resolves to a boolean or undefined value.\n     *   - If `false`, the stack resolution is canceled.\n     *\n     * @see {@link StackableResolveHandler}\n     */\n    cancelHandler: Function as PropType<StackableResolveHandler>,\n    /**\n     * Additional attributes to apply to the element attributes of the activator slot parameters\n     *\n     * If set, the attributes will be added to the `attrs` property\n     * object of the activator slot.\n     *\n     * @see {@link VStackActivatorAttrsSpec}\n     */\n    activatorAttrs: [Function, Object] as PropType<VStackActivatorAttrsSpec>,\n\n    ...V_STACK_SLOTS(),\n  };\n}\n\nexport type StackablePropsOptions = ReturnType<typeof createStackableProps>;\n\nexport type VStackProps = ExtractPropTypes<StackablePropsOptions>;\n\nexport type VStackSetupContext = SetupContext<typeof stackableEmits>;\n\nexport function createStackableDefine(opts?: CreateStackablePropsOptions) {\n  return {\n    props: createStackableProps(opts),\n    emits: stackableEmits,\n  };\n}\n","import { VNodeChild, PropType, ExtractPropTypes } from 'vue';\nimport { VStackControl } from './control';\nimport type { VueStackService } from '../service';\n\nexport interface VStackActionContext {\n  control: VStackControl;\n  key: string | number;\n  onClick: (control: VStackControl, ev: PointerEvent) => any;\n}\n\nexport type VStackActionFn = (ctx: VStackActionContext) => VNodeChild;\n\nexport interface VStackAction {\n  key: string | number;\n  content: VStackActionFn;\n  onClick?: (control: VStackControl, ev: PointerEvent) => any;\n}\n\nexport function createStackActionProps() {\n  return {\n    actions: {\n      type: [Array] as PropType<VStackAction[]>,\n      default: () => [],\n    },\n  };\n}\n\nexport type VStackActionProps = ExtractPropTypes<\n  ReturnType<typeof createStackActionProps>\n>;\n\nexport interface VStackActionControl {\n  readonly control: VStackControl;\n  readonly actions: VStackAction[];\n  readonly $actions: VNodeChild[];\n}\n\nexport type VStackBuiltinActionType = 'ok' | 'cancel' | 'close';\n\nexport interface VStackBuiltinActionContext {\n  service: VueStackService;\n  control: VStackControl;\n  key: string | number;\n  bindings: {\n    onClick?: (ev: PointerEvent) => void;\n  };\n}\n\nexport type VStackBuiltinAction = (\n  context: VStackBuiltinActionContext,\n) => VNodeChild;\n\nexport type VStackBuiltinActions = Record<\n  VStackBuiltinActionType,\n  VStackBuiltinAction\n>;\n\nexport const BUILTIN_ACTION_HANDLERS: Record<\n  VStackBuiltinActionType,\n  (control: VStackControl, ev: PointerEvent) => any\n> = {\n  ok: (control, ev) => {\n    control.resolve(true);\n  },\n  cancel: (control, ev) => {\n    control.resolve(false);\n  },\n  close: (control, ev) => {\n    control.close({ force: true });\n  },\n};\n","import { ComponentPublicInstance, VNodeChild, h, VNode } from 'vue';\nimport { VStackControl } from './control';\n\nexport interface StackableComponent {\n  new (): ComponentPublicInstance<\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any,\n    any\n  >;\n}\n\ntype ComponentProps<T extends StackableComponent> = InstanceType<T>['$props'];\n\ntype ComponentSlots<T extends StackableComponent> = Omit<\n  InstanceType<T>['$slots'],\n  'default'\n> & {\n  default?: DefaultSlot;\n};\n\ntype SlotLike = (...args: any[]) => any;\n\ntype SlotsLike = Record<keyof any, SlotLike>;\n\ntype NormalizeSlot<Slot extends SlotLike | undefined> = (\n  ...args: Parameters<Exclude<Slot, undefined>>\n) => VNodeChild;\n\ntype RawSlots<Slots extends SlotsLike> = {\n  [K in keyof Slots]: NormalizeSlot<Slots[K]> | VNodeChild;\n};\n\ntype DefaultSlot = (stackControl: VStackControl) => VNodeChild;\n\nexport type DefaultContent = VNodeChild | DefaultSlot;\n\nexport type ExtractDynamicStackProps<\n  T extends StackableComponent,\n  _Slots = ComponentSlots<T>,\n> = (ComponentProps<T> & { content?: DefaultContent }) | null;\n\nexport type ExtractDynamicStackSlots<\n  T extends StackableComponent,\n  _Slots = ComponentSlots<T>,\n> = RawSlots<_Slots extends SlotsLike ? _Slots : SlotsLike>;\n\nexport type DynamicStackPayload<Payload = any> = Promise<Payload>;\n\nexport type StackableLauncher<\n  T extends StackableComponent,\n  Payload = any,\n  _Props = ExtractDynamicStackProps<T>,\n> = ((content: DefaultContent) => DynamicStackPayload<Payload>) &\n  ((props: _Props, content: DefaultContent) => DynamicStackPayload<Payload>) &\n  ((\n    props: _Props,\n    slots: ExtractDynamicStackSlots<T>,\n  ) => DynamicStackPayload<Payload>);\n\nexport interface DynamicStackSettings<T extends StackableComponent> {\n  Ctor: T;\n  props: any;\n  slots: any;\n}\n\nconst isObject = (source: unknown): source is Record<keyof any, any> =>\n  !!source && typeof source === 'object' && !Array.isArray(source);\n\nconst normalizeSlot = (source: unknown) => {\n  if (typeof source === 'function') return source;\n  if (typeof source === 'string') {\n    const tmp: (VNode | string)[] = [];\n    const lines = source.trim().split('\\n');\n    lines.forEach((line, index) => {\n      if (index !== 0) tmp.push(h('br'));\n      tmp.push(line);\n    });\n    return () => tmp;\n  }\n  return () => source;\n};\n\nexport function resolveDynamicStackSettings<T extends StackableComponent>(\n  Ctor: T,\n  contentOrProps: DefaultContent | ExtractDynamicStackProps<T>,\n  contentOrSlots?: DefaultContent | ExtractDynamicStackSlots<T>,\n  propsResolver?: (\n    props: ExtractDynamicStackProps<T>,\n  ) => ExtractDynamicStackProps<T>,\n): DynamicStackSettings<T> {\n  let slots: any;\n  let props: any;\n\n  if (isObject(contentOrProps)) {\n    slots = isObject(contentOrSlots)\n      ? {\n          ...contentOrSlots,\n        }\n      : {\n          default: contentOrSlots,\n        };\n    props = {\n      ...contentOrProps,\n    };\n    if ('content' in props) {\n      slots.default = props.content;\n      delete props.content;\n    }\n  } else {\n    slots = {\n      default: contentOrProps,\n    };\n  }\n\n  for (const key of Object.keys(slots)) {\n    slots[key] = normalizeSlot(slots[key]);\n  }\n\n  if (propsResolver) {\n    props = propsResolver(props);\n  }\n\n  return {\n    Ctor,\n    props: {\n      ...props,\n      lazyBoot: true,\n      modelValue: true,\n    },\n    slots,\n  };\n}\n\nexport type DynamicStackResolver = (value: any) => void;\n\nexport interface DynamicStackInternalSetting {\n  id: number;\n  setting: DynamicStackSettings<any>;\n  remove: () => void;\n  resolve: DynamicStackResolver;\n  reject: () => any;\n}\n","import { InjectionKey } from 'vue';\nimport type { VueStackService } from './service';\n\nexport const VueStackInjectionKey: InjectionKey<VueStackService> =\n  Symbol('VueStack');\n\nexport const V_STACK_CONTAINER_CLASS = 'v-stack-container';\n","import { Ref, ref, markRaw, ComputedRef, computed } from 'vue';\nimport { VStackControl } from './schemes/control';\nimport {\n  DynamicStackInternalSetting,\n  StackableComponent,\n  ExtractDynamicStackProps,\n  DefaultContent,\n  ExtractDynamicStackSlots,\n  DynamicStackPayload,\n  resolveDynamicStackSettings,\n  StackableLauncher,\n} from './schemes/dynamic';\n\nexport type { VStackControl } from './schemes/control';\n\nexport { VueStackInjectionKey } from './injections';\n\nexport interface VueStackServiceOptions {\n  zIndex?: number;\n  snackbarDefaultPosition?: 'top' | 'bottom';\n}\n\n/**\n * Stack service\n */\nexport class VueStackService {\n  private readonly _controls: Ref<(() => VStackControl)[]> = ref([]);\n\n  private readonly __controls: ComputedRef<VStackControl[]>;\n\n  /** z-index as a reference for all stacks */\n  readonly zIndex: number;\n\n  /** Snackbar default position */\n  readonly snackbarDefaultPosition: 'top' | 'bottom';\n\n  private _increment = 0;\n\n  private readonly _dynamicSettings: Ref<DynamicStackInternalSetting[]> = ref(\n    [],\n  );\n\n  /**\n   * List of mounted stack control instances\n   *\n   * @see {@link VStackControl}\n   */\n  get controls() {\n    return this.__controls.value;\n  }\n\n  /**\n   * List of dynamic stack display settings\n   *\n   * @see {@link DynamicStackInternalSetting}\n   */\n  get dynamicSettings() {\n    return this._dynamicSettings.value;\n  }\n\n  constructor(opts: VueStackServiceOptions = {}) {\n    const { zIndex = 32767, snackbarDefaultPosition = 'top' } = opts;\n    this.zIndex = zIndex;\n    this.snackbarDefaultPosition = snackbarDefaultPosition;\n\n    this.__controls = computed(() => this._controls.value.map((c) => c()));\n  }\n\n  /** Generate a new stack ID */\n  genId() {\n    return ++this._increment;\n  }\n\n  /**\n   * Add a stack control\n   *\n   * @param control - Stack control\n   * @returns If added, its index within the list. -1 if it already exists\n   */\n  add(control: VStackControl): number {\n    let index = -1;\n    if (!this.__controls.value.includes(control)) {\n      index = this._controls.value.push(() => control);\n    }\n    return index;\n  }\n\n  /**\n   * Remove stack\n   *\n   * @param control - Stack control\n   * @returns If removed, its index. -1 if it doesn't exist\n   */\n  remove(control: VStackControl): VStackControl[] {\n    const index = this.__controls.value.indexOf(control);\n    return this._controls.value.splice(index, 1).map((c) => c());\n  }\n\n  /**\n   * Check if any stack is animated\n   *\n   * @returns - `true` if animation is in progress\n   */\n  someTransitioning() {\n    return this.controls.some((control) => control.transitioning);\n  }\n\n  /**\n   * Get all displayed stacks\n   *\n   * @returns All displayed stacks\n   */\n  getActiveStacks() {\n    return this.controls.filter((control) => control.isActive);\n  }\n\n  /**\n   * Retrieve the stack currently displayed in the foreground.\n   *\n   * @param filter - Filter to exclude stacks\n   * @returns Stack currently displayed in the foreground\n   */\n  getFront(filter?: (control: VStackControl) => boolean) {\n    const controls = this.controls.filter((control) => control.isActive);\n    if (controls.length === 0) return;\n    let maxControl: VStackControl | undefined;\n    let maxActivateOrder = 0;\n    controls.forEach((control) => {\n      if (filter && !filter(control)) return;\n      const { activateOrder } = control;\n      if (activateOrder > maxActivateOrder) {\n        maxActivateOrder = activateOrder;\n        maxControl = control;\n      }\n    });\n    return maxControl;\n  }\n\n  /**\n   * Update the `--v-stack-current-z-index` CSS custom property on\n   * `document.documentElement` to reflect the z-index of the frontmost\n   * active stack.\n   */\n  updateCurrentZIndexVar() {\n    if (typeof document === 'undefined') return;\n    const front = this.getFront();\n    const maxActivateOrder = front ? front.activateOrder : 0;\n    document.documentElement.style.setProperty(\n      '--v-stack-current-z-index',\n      String(this.zIndex + maxActivateOrder),\n    );\n  }\n\n  /**\n   * Check if the specified stack is currently displayed in the foreground\n   *\n   * @param control - The stack to check\n   * @returns Stack currently displayed in the foreground\n   * @returns `true` if it is currently displayed in the foreground\n   */\n  isFront(\n    control: VStackControl,\n    filter?: (control: VStackControl) => boolean,\n  ) {\n    return this.getFront(filter) === control;\n  }\n\n  private removeDynamicSetting(setting: DynamicStackInternalSetting) {\n    const settings = this._dynamicSettings.value;\n    const index = settings.indexOf(setting);\n    if (index !== -1) {\n      settings.splice(index, 1);\n    }\n  }\n\n  dynamic<T extends StackableComponent, Payload = any>(\n    Ctor: T,\n    content: DefaultContent,\n  ): DynamicStackPayload<Payload>;\n\n  dynamic<T extends StackableComponent, Payload = any>(\n    Ctor: T,\n    props: ExtractDynamicStackProps<T>,\n    content: DefaultContent,\n    propsResolver?: (\n      props: ExtractDynamicStackProps<T>,\n    ) => ExtractDynamicStackProps<T>,\n  ): DynamicStackPayload<Payload>;\n\n  dynamic<T extends StackableComponent, Payload = any>(\n    Ctor: T,\n    props: ExtractDynamicStackProps<T>,\n    slots: ExtractDynamicStackSlots<T>,\n    propsResolver?: (\n      props: ExtractDynamicStackProps<T>,\n    ) => ExtractDynamicStackProps<T>,\n  ): DynamicStackPayload<Payload>;\n\n  dynamic<T extends StackableComponent, Payload = any>(\n    Ctor: T,\n    contentOrProps: DefaultContent | ExtractDynamicStackProps<T>,\n    contentOrSlots?: DefaultContent | ExtractDynamicStackSlots<T>,\n    propsResolver?: (\n      props: ExtractDynamicStackProps<T>,\n    ) => ExtractDynamicStackProps<T>,\n  ): DynamicStackPayload<Payload> {\n    const setting = resolveDynamicStackSettings(\n      Ctor,\n      contentOrProps,\n      contentOrSlots,\n      propsResolver,\n    );\n    return new Promise<any>((resolve, reject) => {\n      const _setting: DynamicStackInternalSetting = markRaw({\n        id: this.genId(),\n        setting,\n        resolve,\n        reject,\n        remove: () => {\n          this.removeDynamicSetting(_setting);\n        },\n      });\n      this._dynamicSettings.value.push(_setting);\n    });\n  }\n\n  createLauncher<T extends StackableComponent, Payload = any>(\n    Ctor: T,\n    propsResolver?: (\n      props: ExtractDynamicStackProps<T>,\n    ) => ExtractDynamicStackProps<T>,\n  ): StackableLauncher<T, Payload> {\n    return ((contentOrProps: any, contentOrSlots: any) =>\n      this.dynamic(\n        Ctor,\n        contentOrProps,\n        contentOrSlots,\n        propsResolver,\n      )) as StackableLauncher<T, Payload>;\n  }\n}\n","import { App } from 'vue';\nimport { onAppUnmount } from '@fastkit/vue-utils';\nimport {\n  VueStackService,\n  VueStackServiceOptions,\n  VueStackInjectionKey,\n} from './service';\n\ndeclare module 'vue' {\n  export interface ComponentCustomProperties {\n    $vstack: VueStackService;\n  }\n}\n\nexport class VueStackPlugin {\n  static install(app: App, opts?: VueStackServiceOptions) {\n    const $vstack = new VueStackService(opts);\n    app.provide(VueStackInjectionKey, $vstack);\n    app.config.globalProperties.$vstack = $vstack;\n\n    onAppUnmount(app, () => {\n      delete (app.config.globalProperties as any).$vstack;\n    });\n  }\n}\n\nexport function installVueStackPlugin(app: App, opts?: VueStackServiceOptions) {\n  return app.use(VueStackPlugin, opts);\n}\n","import { TinyLogger, createTinyError } from '@fastkit/tiny-logger';\n\nconst name = 'vue-stack';\n\nexport const logger = new TinyLogger(name);\n\nexport const VueStackError = createTinyError(name);\n","import { inject } from 'vue';\nimport { VueStackInjectionKey } from '../injections';\nimport { VueStackError } from '../logger';\n\nexport function useVueStack() {\n  const $vstack = inject(VueStackInjectionKey);\n  if (!$vstack) {\n    throw new VueStackError('missing vue stack service.');\n  }\n  return $vstack;\n}\n","import { computed, ComputedRef } from 'vue';\nimport { IN_DOCUMENT } from '@fastkit/helpers';\nimport { V_STACK_CONTAINER_CLASS } from '../injections';\n\nexport function useTeleport(): ComputedRef<Element | undefined> {\n  const teleportTarget = computed(() => {\n    if (!IN_DOCUMENT) return undefined;\n\n    const parent = document.body;\n\n    let container = parent.querySelector(\n      `:scope > .${V_STACK_CONTAINER_CLASS}`,\n    );\n\n    if (!container) {\n      container = document.createElement('div');\n      container.className = V_STACK_CONTAINER_CLASS;\n      parent.appendChild(container);\n    }\n\n    return container;\n  });\n\n  return teleportTarget;\n}\n","export const V_STACK_ACTIVATED_ATTR = 'data-v-stack-activated';\n\nexport const V_STACK_TYPE_ATTR = 'data-v-stack-type';\n","import {\n  reactive,\n  computed,\n  Transition,\n  onBeforeMount,\n  onMounted,\n  onBeforeUnmount,\n  Teleport,\n  watch,\n  ref,\n  h,\n  VNode,\n  withDirectives,\n  vShow,\n  nextTick,\n  DirectiveArguments,\n  cloneVNode,\n  watchEffect,\n  inject,\n  provide,\n  markRaw,\n  type Ref,\n  type InjectionKey,\n} from 'vue';\nimport { toInt, IN_WINDOW, arrayRemove } from '@fastkit/helpers';\nimport { attemptFocus, focusFirstDescendant } from '@fastkit/dom';\nimport { StyleValue } from '@fastkit/vue-utils';\nimport { clickOutsideDirectiveArgument } from '@fastkit/vue-click-outside';\nimport { bodyScrollLockDirectiveArgument } from '@fastkit/vue-body-scroll-lock';\nimport { useKeyboard } from '@fastkit/vue-keyboard';\nimport { useRouter, isNavigationFailure } from 'vue-router';\nimport {\n  VStackControlState,\n  VStackControl,\n  VStackProps,\n  VStackSetupContext,\n  VStackSlots,\n  VStackActivatorAttributes,\n  VStackNavigationGuard,\n  VStackActivatorQuery,\n  StackableTabCloseSetting,\n  type VStackActivatorAttrsSpec,\n  type VStackActivatorAttrsObject,\n} from '../schemes';\nimport { useVueStack } from './service';\nimport { useTeleport } from './teleport';\nimport { V_STACK_ACTIVATED_ATTR, V_STACK_TYPE_ATTR } from '../constants';\n\nexport type VStackCloseReason = 'indeterminate' | 'resolved' | 'canceled';\n\nexport interface UseStackControlOptions {\n  onActivated?: (isActive: boolean, control: VStackControl) => any;\n  onContentMounted?: (content: HTMLElement, control: VStackControl) => any;\n  onContentDetached?: (control: VStackControl) => any;\n  transitionResolver?: (control: VStackControl) => string;\n  /**\n   * A string or symbol used to identify the stack\n   *\n   * If set, the activator element will be given an attribute\n   * in the form of `data-v-stack-type=\"${stackType}\"`.\n   */\n  stackType?: string | symbol;\n  manualAttrs?: boolean;\n  /**\n   * Additional attributes to apply to the element attributes of the activator slot parameters\n   *\n   * If set, the attributes will be added to the `attrs` property\n   * object of the activator slot.\n   *\n   * @see {@link VStackActivatorAttrsSpec}\n   */\n  activatorAttrs?: VStackActivatorAttrsSpec;\n}\n\nconst V_STACK_CONTROL_INJECTION_KEY: InjectionKey<VStackControl> =\n  Symbol('VStackControl');\n\nfunction flattenChildren(stacks: VStackControl[]): VStackControl[] {\n  return stacks.flatMap((stack) => [stack, ...flattenChildren(stack.children)]);\n}\n\nconst outsideClickControlFilter = (control: VStackControl) =>\n  control.closeOnOutsideClick;\n\nconst SUPPORTS_FOCUS_VISIBLE =\n  IN_WINDOW &&\n  typeof CSS !== 'undefined' &&\n  typeof CSS.supports !== 'undefined' &&\n  CSS.supports('selector(:focus-visible)');\n\nexport function useStackControl(\n  props: VStackProps,\n  ctx: VStackSetupContext,\n  opts: UseStackControlOptions = {},\n) {\n  const {\n    onActivated,\n    onContentMounted,\n    onContentDetached,\n    transitionResolver,\n    manualAttrs,\n  } = opts;\n\n  const router = useRouter();\n  const teleportTarget = useTeleport();\n\n  const beforeEachHookRemover = router.beforeEach(async (to, from) => {\n    if (!control.isActive) return true;\n    const result = await navigationGuard.value(to, from);\n    if (!result) {\n      control.guardEffect();\n    }\n    return result;\n  });\n\n  const afterEachHookRemover = router.afterEach((_to, _from, failure) => {\n    if (!isNavigationFailure(failure) && control.closeOnNavigation) {\n      control.close({ force: true });\n    }\n  });\n\n  const activatorRef = ref();\n  const activatorEl = ref<HTMLElement>();\n\n  watchEffect(() => {\n    if (!activatorRef.value) return;\n\n    nextTick(() => {\n      activatorEl.value = refElement(activatorRef.value);\n    });\n  });\n\n  watch(\n    () => props.activator,\n    (activator) => {\n      activatorEl.value = getActivator(activator);\n    },\n    { immediate: true },\n  );\n\n  const parent = inject(V_STACK_CONTROL_INJECTION_KEY, undefined);\n  const $vstack = useVueStack();\n  const state = reactive<VStackControlState>({\n    isActive: props.lazyBoot ? false : props.modelValue,\n    get activator() {\n      return activatorEl.value;\n    },\n    closeReason: 'indeterminate',\n    initialValue: props.value,\n    inputValue: props.value,\n    showing: false,\n    closing: false,\n    activateOrder: 0,\n    timeoutId: null,\n    delayTimers: [],\n    needRender: false,\n    guardAnimating: false,\n    guardAnimateTimeId: null,\n    booted: false,\n    guardInProgressType: null,\n    isDestroyed: false,\n    isActivatorHovered: false,\n    isContentHovered: false,\n  });\n\n  const transitioning = computed(() => state.showing || state.closing);\n  const persistent = computed(() => props.persistent);\n  const closeOnEsc = computed(() => props.closeOnEsc);\n  const closeOnTab = computed<StackableTabCloseSetting | false>(() => {\n    const { closeOnTab: _closeOnTab } = props;\n    return _closeOnTab === true ? 'always' : _closeOnTab;\n  });\n  const closeOnNavigation = computed(() => props.closeOnNavigation);\n  const closeOnOutsideClick = computed(() => props.closeOnOutsideClick);\n  const alwaysRender = computed(() => props.alwaysRender);\n  const guardEffect = computed(() => props.guardEffect);\n  const scrollLock = computed(() => props.scrollLock);\n  const timeout = computed(() => toInt(props.timeout));\n  const openDelay = computed(() => toInt(props.openDelay));\n  const closeDelay = computed(() => toInt(props.closeDelay));\n  const contentRef = ref<null | HTMLElement>(null);\n  const backdropRef = ref<null | HTMLElement>(null);\n  const focusTrap = computed(() => props.focusTrap);\n  const focusRestorable = computed(() => props.focusRestorable);\n\n  // const computedActivator = computed(() => props.activator);\n\n  const openOnFocus = computed(\n    () => props.openOnFocus || (props.openOnFocus == null && props.openOnHover),\n  );\n  const openOnClick = computed(\n    () =>\n      props.openOnClick ||\n      (props.openOnClick == null &&\n        !props.openOnContextmenu &&\n        !props.openOnHover &&\n        !openOnFocus.value),\n  );\n\n  const backdrop = computed(() => {\n    const { backdrop: _backdrop } = props;\n    if (!_backdrop) return;\n    const index = zIndex.value;\n    const style = {\n      zIndex: index,\n      backgroundColor: typeof _backdrop === 'string' ? _backdrop : undefined,\n    };\n    return (\n      <div\n        class=\"v-stack-backdrop\"\n        style={style}\n        v-show={control.isActive}\n        ref={backdropRef}\n      />\n    );\n  });\n  const navigationGuard = computed<VStackNavigationGuard>(() => {\n    const { navigationGuard: _navigationGuard } = props;\n    if (typeof _navigationGuard === 'function') {\n      return _navigationGuard;\n    }\n    return function guard() {\n      if (_navigationGuard || persistent.value || control.guardInProgress)\n        return false;\n      return true;\n    };\n  });\n\n  const inheritedAttrs = computed(() => {\n    if (manualAttrs) return;\n    const { class: classes, style: styles } = props;\n    return {\n      classes: classes as any,\n      styles: [styles] as StyleValue[],\n    };\n  });\n\n  const zIndex = computed(() => {\n    const _zIndex = toInt(props.zIndex);\n    return _zIndex || $vstack.zIndex + control.activateOrder;\n  });\n\n  const keyboard = useKeyboard(\n    [\n      {\n        key: 'Escape',\n        handler: (_ev) => {\n          if (\n            !state.isActive ||\n            !closeOnEsc.value ||\n            !control.isFront() ||\n            control.guardInProgress\n          )\n            return;\n          if (persistent.value) {\n            control.guardEffect();\n            return;\n          }\n          control.cancel(false);\n        },\n      },\n      {\n        key: 'Tab',\n        handler: (_ev) => {\n          const setting = closeOnTab.value;\n          if (\n            !state.isActive ||\n            !setting ||\n            !control.isFront() ||\n            control.guardInProgress\n          )\n            return;\n          if (persistent.value) {\n            control.guardEffect();\n            return;\n          }\n          if (setting === 'always') {\n            control.cancel(false);\n          }\n\n          // @NOTE Not sure if this delay duration is sufficient.\n          setTimeout(() => {\n            if (!containsOrSameElement(document.activeElement, true)) {\n              control.cancel(false);\n            }\n          });\n        },\n      },\n    ],\n    { autorun: true },\n  );\n\n  const setActivatorByEvent = (ev: Event) => {\n    activatorEl.value = (ev.currentTarget ||\n      ev.target ||\n      undefined) as HTMLElement;\n  };\n\n  const isHovered = () => state.isActivatorHovered || state.isContentHovered;\n\n  const isSelfOrNestedHovered = () =>\n    isHovered() || allChildren.value.some((c) => c.isHovered);\n  // const hasActiveChild = () => allChildren.value.some((c) => c.isActive);\n\n  function StackMouseStates(acceptLeave: () => any) {\n    const delay = 100;\n    let closeDelayTimerId: number | null = null;\n\n    const clearCloseDelayTimer = () => {\n      if (closeDelayTimerId !== null) {\n        clearTimeout(closeDelayTimerId);\n        closeDelayTimerId = null;\n      }\n    };\n\n    const startCloseDelayTimer = () => {\n      clearCloseDelayTimer();\n      closeDelayTimerId = window.setTimeout(() => {\n        clearCloseDelayTimer();\n        if (!isSelfOrNestedHovered()) {\n          acceptLeave();\n        }\n      }, delay);\n    };\n\n    const onEnterActivator = () => {\n      state.isActivatorHovered = true;\n      clearCloseDelayTimer();\n    };\n\n    const onLeaveActivator = () => {\n      state.isActivatorHovered = false;\n      startCloseDelayTimer();\n    };\n\n    const onEnterContent = () => {\n      state.isContentHovered = true;\n      clearCloseDelayTimer();\n    };\n\n    const onLeaveContent = () => {\n      state.isContentHovered = false;\n      startCloseDelayTimer();\n    };\n\n    onBeforeUnmount(clearCloseDelayTimer);\n\n    return {\n      get delay() {\n        return delay;\n      },\n      onEnterActivator,\n      onLeaveActivator,\n      onEnterContent,\n      onLeaveContent,\n      clear: clearCloseDelayTimer,\n    };\n  }\n\n  const contains = (el: Element): boolean => {\n    const activator = activatorEl.value;\n    const content = contentRef.value;\n    return !!activator?.contains(el) || !!content?.contains(el) || false;\n  };\n\n  const mouseStates = StackMouseStates(() => {\n    if (!control.isActive) return;\n    const delay = closeDelay.value;\n    const normalizedDelay = Math.max(delay - mouseStates.delay, 0);\n    privateApi.runDelay(normalizedDelay, () => {\n      if (!control.isActive) return;\n      control.close();\n    });\n  });\n\n  const handleMouseenterContent = () => {\n    mouseStates.onEnterContent();\n  };\n\n  const handleMouseleaveContent = () => {\n    // if (hasActiveChild()) return;\n    privateApi.clearDelay();\n    mouseStates.onLeaveContent();\n  };\n\n  const availableEvents = {\n    onClick: (ev: PointerEvent) => {\n      if (props.disabled) return;\n      setActivatorByEvent(ev);\n      control.toggle();\n    },\n    onMouseenter: (ev: MouseEvent) => {\n      if (props.disabled) return;\n      mouseStates.onEnterActivator();\n      if (state.showing) return;\n      // Show immediately when hovered during hide transition\n      // if (control.transitioning) return;\n      privateApi.clearDelay();\n      if (control.isActive) return;\n      setActivatorByEvent(ev);\n      privateApi.runDelay('openDelay', () => {\n        !control.isActive && control.show();\n      });\n    },\n    onMouseleave: (ev: MouseEvent) => {\n      // if (hasActiveChild()) return;\n      privateApi.clearDelay();\n      mouseStates.onLeaveActivator();\n    },\n    onContextmenu: (ev: PointerEvent) => {\n      if (props.disabled || ev.defaultPrevented) return;\n      ev.preventDefault();\n      setActivatorByEvent(ev);\n      control.toggle();\n    },\n    onFocus: (ev: FocusEvent) => {\n      if (props.disabled) return;\n      if (\n        SUPPORTS_FOCUS_VISIBLE &&\n        !(ev.target as HTMLElement).matches(':focus-visible')\n      )\n        return;\n\n      setActivatorByEvent(ev);\n      control.show();\n    },\n  };\n\n  const resolveActivatorAttrsSpec = (\n    spec: VStackActivatorAttrsSpec | undefined,\n  ): VStackActivatorAttrsObject | undefined => {\n    if (typeof spec === 'function') {\n      return spec({ control });\n    }\n    return spec;\n  };\n\n  const stackTypeName =\n    (typeof opts.stackType === 'string'\n      ? opts.stackType\n      : opts.stackType?.description) || undefined;\n\n  const activatorAttrs = computed<VStackActivatorAttributes>(() => {\n    const baseAttr: VStackActivatorAttrsObject = stackTypeName\n      ? {\n          [V_STACK_TYPE_ATTR]: stackTypeName,\n        }\n      : {};\n\n    const setupAttrs = resolveActivatorAttrsSpec(opts.activatorAttrs);\n    const propAttrs = resolveActivatorAttrsSpec(props.activatorAttrs);\n    // `class` is Vue's `ClassValue` (string | object | array), not just a\n    // string, so collect into a loosely-typed array that Vue normalizes when\n    // bound to `attrs.class` below.\n    const classNames: any[] = [];\n    setupAttrs?.class && classNames.push(setupAttrs?.class);\n    propAttrs?.class && classNames.push(propAttrs?.class);\n\n    const attrs: VStackActivatorAttributes & { class?: any } = {\n      ...baseAttr,\n      ...setupAttrs,\n      ...propAttrs,\n      ref: activatorRef,\n    };\n    if (classNames.length) {\n      attrs.class = classNames;\n    }\n    if (openOnClick.value) {\n      attrs.onClick = availableEvents.onClick;\n    }\n    if (props.openOnHover) {\n      attrs.onMouseenter = availableEvents.onMouseenter;\n      attrs.onMouseleave = availableEvents.onMouseleave;\n    }\n    if (props.openOnContextmenu) {\n      attrs.onContextmenu = availableEvents.onContextmenu;\n    }\n    if (openOnFocus.value) {\n      attrs.onFocus = availableEvents.onFocus;\n    }\n    return attrs;\n  });\n\n  const TransitionDefine = computed(() => {\n    if (transitionResolver) {\n      return {\n        Ctor: Transition,\n        props: {\n          name: transitionResolver(control),\n        },\n      };\n    }\n    const { transition } = props;\n    if (typeof transition === 'string') {\n      return {\n        Ctor: Transition,\n        props: {\n          name: transition,\n        },\n      };\n    } else {\n      let Ctor: any = transition.transition;\n      let name: string | undefined;\n\n      if (typeof Ctor === 'string' || Ctor == null) {\n        name = Ctor || undefined;\n        Ctor = Transition;\n      }\n\n      const props = {\n        ...transition.props,\n      };\n\n      if (name) {\n        (props as any).name = name;\n      }\n\n      return {\n        Ctor: Transition,\n        props,\n      };\n    }\n  });\n\n  const attrs = computed(() => {\n    const _attrs = {\n      ...ctx.attrs,\n    };\n    if (manualAttrs) {\n      const { class: classes, style } = props;\n      if (classes) {\n        _attrs.class = classes;\n      }\n      if (style) {\n        _attrs.style = style;\n      }\n    }\n    return _attrs;\n  });\n\n  const privateApi: VStackControl['_'] = {\n    get attrs() {\n      return attrs.value;\n    },\n    get state() {\n      return state;\n    },\n    get activatorAttrs() {\n      return activatorAttrs.value;\n    },\n    get Transition() {\n      return TransitionDefine.value;\n    },\n    get keyboard() {\n      return keyboard;\n    },\n    transitionListeners: {\n      onBeforeEnter: (el) => {\n        ctx.emit('beforeEnter', el, control);\n      },\n      onAfterEnter: (el) => {\n        state.showing = false;\n        state.closing = false;\n        privateApi.clearTimeoutId();\n        if (control.timeout) {\n          state.timeoutId = window.setTimeout(() => {\n            privateApi.clearTimeoutId();\n            control.close({ force: true });\n          }, control.timeout);\n        }\n        if (focusTrap.value && control.isFront()) {\n          privateApi.trapFocus();\n        }\n        ctx.emit('afterEnter', el, control);\n      },\n      onEnterCancelled: (el) => {\n        state.showing = false;\n        state.closing = false;\n        ctx.emit('enterCancelled', el, control);\n      },\n      onBeforeLeave: (el) => {\n        ctx.emit('beforeLeave', el, control);\n      },\n      onAfterLeave: (el) => {\n        state.showing = false;\n        state.closing = false;\n        onContentDetached && onContentDetached(control);\n        nextTick(() => {\n          !control.isActive && privateApi.setNeedRender(false);\n        });\n        ctx.emit('afterLeave', el, control);\n      },\n      onLeaveCancelled: (el) => {\n        state.showing = false;\n        state.closing = false;\n        ctx.emit('leaveCancelled', el, control);\n      },\n    },\n    clearTimeoutId: () => {\n      if (state.timeoutId !== null) {\n        clearTimeout(state.timeoutId);\n        state.timeoutId = null;\n      }\n    },\n    setIsActive(value, withEmit = true) {\n      if (state.isActive === value || (value && props.disabled)) return;\n      privateApi.clearTimeoutId();\n      value && triggerContentMountedTick();\n      state.isActive = value;\n\n      withEmit && ctx.emit('update:modelValue', value);\n      ctx.emit('change', value);\n\n      if (value) {\n        state.showing = true;\n        control.toFront();\n        ctx.emit('show', control);\n      } else {\n        state.closing = true;\n        ctx.emit('close', control);\n      }\n    },\n    clearDelay() {\n      for (const timer of state.delayTimers) {\n        clearTimeout(timer);\n      }\n      state.delayTimers = [];\n    },\n    runDelay(prop, cb) {\n      privateApi.clearDelay();\n      const amount = typeof prop === 'number' ? prop : control[prop];\n      if (!amount) return cb();\n      state.delayTimers.push(window.setTimeout(cb, toInt(amount)));\n    },\n    trapFocus(ev) {\n      const $content = contentRef.value;\n      if (!$content) return;\n\n      const activeElement = ev?.target || document.activeElement;\n      if (activeElement && $content.contains(activeElement as any)) {\n        return;\n      }\n\n      const nodes = [$content, ...Array.from($content.childNodes)];\n\n      for (const node of nodes) {\n        if (\n          attemptFocus(node as HTMLElement) ||\n          focusFirstDescendant(node as HTMLElement)\n        ) {\n          return true;\n        }\n      }\n      return false;\n    },\n    setupFocusTrapper() {\n      privateApi.removeFocusTrapper();\n      privateApi.focusTrapper = (ev) => {\n        if ($vstack.isFront(control)) {\n          privateApi.trapFocus(ev);\n        }\n      };\n      document.addEventListener('focus', privateApi.focusTrapper, true);\n    },\n    removeFocusTrapper() {\n      if (privateApi.focusTrapper) {\n        document.removeEventListener('focus', privateApi.focusTrapper, true);\n        delete privateApi.focusTrapper;\n      }\n    },\n    checkFocusTrap() {\n      if (!IN_WINDOW) return;\n      if (control.isActive && focusTrap.value) {\n        privateApi.setupFocusTrapper();\n      } else {\n        privateApi.removeFocusTrapper();\n      }\n    },\n    setNeedRender(needRender: boolean) {\n      if (!needRender) {\n        state.activateOrder = 0;\n        $vstack.updateCurrentZIndexVar();\n      }\n      state.needRender = alwaysRender.value || needRender;\n    },\n    outsideClickCloseConditional(ev, pre) {\n      if (\n        control.guardInProgress ||\n        !closeOnOutsideClick.value ||\n        state.showing ||\n        !control.isFront(outsideClickControlFilter) ||\n        $vstack.someTransitioning()\n      ) {\n        return false;\n      }\n\n      if (!pre && persistent.value) {\n        control.guardEffect();\n        return false;\n      }\n\n      const target = ev.target as Element;\n      if (allChildren.value.some((c) => c.contains(target))) {\n        return false;\n      }\n\n      return control.isActive;\n    },\n    clearGuardEffect() {\n      if (state.guardAnimateTimeId !== null) {\n        clearTimeout(state.guardAnimateTimeId);\n      }\n      state.guardAnimating = false;\n    },\n    joinChild(child) {\n      nestedChildren.value.push(child);\n      const remover = () => {\n        arrayRemove(nestedChildren.value, child);\n      };\n      onBeforeUnmount(remover);\n      return remover;\n    },\n  };\n\n  const getContainsOrSameElement: VStackControl['getContainsOrSameElement'] = (\n    other,\n    includingActivator,\n  ) => {\n    if (other instanceof Event) {\n      other = other.target;\n    }\n    if (!other || !(other instanceof Node)) return;\n    const content = contentRef.value;\n    if (!content) return;\n    if (content && (content === other || content.contains(other)))\n      return content;\n    if (!includingActivator) return;\n    const activator = activatorEl.value;\n    if (activator && (activator === other || activator.contains(other)))\n      return activator;\n  };\n\n  const containsOrSameElement: VStackControl['containsOrSameElement'] = (\n    other,\n    includingActivator,\n  ) => !!getContainsOrSameElement(other, includingActivator);\n\n  const dispatchResolveHandler = async (type: 'resolve' | 'cancel') => {\n    const handler =\n      type === 'resolve' ? props.resolveHandler : props.cancelHandler;\n    if (!handler) return;\n    try {\n      state.guardInProgressType = type;\n      const result = await handler(control);\n      state.guardInProgressType = null;\n      return result;\n    } catch (err) {\n      state.guardInProgressType = null;\n      throw err;\n    }\n  };\n\n  const nestedChildren: Ref<VStackControl[]> = ref([]);\n\n  const allChildren = computed(() => flattenChildren(nestedChildren.value));\n\n  const control: VStackControl = markRaw({\n    __isStackControl: true,\n    _: privateApi,\n    get props() {\n      return props;\n    },\n    get parent() {\n      return parent;\n    },\n    get children() {\n      return nestedChildren.value;\n    },\n    get allChildren() {\n      return allChildren.value;\n    },\n    get isHovered() {\n      return isHovered();\n    },\n    get $service() {\n      return $vstack;\n    },\n    get stackType() {\n      return opts.stackType;\n    },\n    get transitioning() {\n      return transitioning.value;\n    },\n    get persistent() {\n      return persistent.value;\n    },\n    get closeOnEsc() {\n      return closeOnEsc.value;\n    },\n    get closeOnTab() {\n      return closeOnTab.value;\n    },\n    get closeOnNavigation() {\n      return closeOnNavigation.value;\n    },\n    get closeOnOutsideClick() {\n      return closeOnOutsideClick.value;\n    },\n    get zIndex() {\n      return zIndex.value;\n    },\n    get isActive() {\n      return state.isActive;\n    },\n    get timeout() {\n      return timeout.value;\n    },\n    get classes() {\n      const classes = ['v-stack', inheritedAttrs.value?.classes];\n      if (state.guardAnimating) {\n        classes.push('v-stack-guard-effect');\n      }\n      return classes;\n    },\n    get styles() {\n      const styles: StyleValue[] = [\n        {\n          zIndex: zIndex.value,\n        },\n      ];\n      const inheritedStyle = inheritedAttrs.value?.styles;\n      inheritedStyle && styles.unshift(inheritedStyle);\n      return styles;\n    },\n    get activateOrder() {\n      return state.activateOrder;\n    },\n    get isResolved() {\n      return state.closeReason === 'resolved';\n    },\n    get isCanceled() {\n      return state.closeReason === 'canceled';\n    },\n    get value() {\n      return control.isResolved ? state.inputValue : undefined;\n    },\n    set value(value) {\n      if (state.inputValue !== value) {\n        state.inputValue = value;\n        ctx.emit('payload', value);\n      }\n    },\n    get focusRestorable() {\n      return focusRestorable.value;\n    },\n    get openDelay() {\n      return openDelay.value;\n    },\n    get closeDelay() {\n      return closeDelay.value;\n    },\n    get isDestroyed() {\n      return state.isDestroyed;\n    },\n    get contentRef() {\n      return contentRef;\n    },\n    get activator() {\n      return state.activator;\n    },\n    get backdropRef() {\n      return backdropRef;\n    },\n    get guardInProgressType() {\n      return state.guardInProgressType;\n    },\n    get guardInProgress() {\n      return !!state.guardInProgressType;\n    },\n    get disabled() {\n      return props.disabled;\n    },\n    contains,\n    setActivator(query) {\n      activatorEl.value = getActivator(query);\n      return this;\n    },\n    show() {\n      // Fix for bubbling cue.\n      return new Promise((resolve) =>\n        setTimeout(() => {\n          privateApi.setIsActive(true);\n          resolve();\n        }, 0),\n      );\n    },\n    toggle() {\n      return control.isActive ? control.close() : control.show();\n    },\n\n    close(opts = {}) {\n      const { force = false, reason = 'indeterminate' } = opts;\n      if ((control.guardInProgress || persistent.value) && !force)\n        return Promise.resolve();\n      state.closeReason = reason;\n      privateApi.setIsActive(false);\n      return Promise.resolve();\n    },\n    resetValue() {\n      control.value = state.initialValue;\n    },\n    async resolve(value) {\n      if (control.guardInProgress) return;\n\n      if (\n        (await dispatchResolveHandler(value ? 'resolve' : 'cancel')) === false\n      ) {\n        return false;\n      }\n      if (value !== undefined) {\n        control.value = value;\n      }\n      return this.close({\n        force: true,\n        reason: 'resolved',\n      });\n    },\n    async cancel(force) {\n      if (!control.isActive) return;\n      if (!force && (await dispatchResolveHandler('cancel')) === false) {\n        return;\n      }\n      return control.close({\n        force,\n        reason: 'canceled',\n      });\n    },\n    toFront() {\n      const front = $vstack.getFront();\n      const maxActivateOrder = front ? front.activateOrder : 0;\n      state.activateOrder = maxActivateOrder + 1;\n      $vstack.updateCurrentZIndexVar();\n    },\n\n    isFront(filter?: (control: VStackControl) => boolean) {\n      return $vstack.isFront(control, filter);\n    },\n    guardEffect() {\n      if (!guardEffect.value) return;\n      state.guardAnimating = false;\n      nextTick(() => {\n        state.guardAnimating = true;\n        state.guardAnimateTimeId = window.setTimeout(\n          privateApi.clearGuardEffect,\n          150,\n        );\n      });\n    },\n    getContainsOrSameElement,\n    containsOrSameElement,\n\n    render(fn, opts = {}) {\n      const { booted, needRender } = state;\n      const { default: defaultSlot, activator: activatorSlot } =\n        ctx.slots as VStackSlots;\n\n      const { transitionListeners, Transition: TransitionDefine } = privateApi;\n\n      const $activator =\n        activatorSlot &&\n        activatorSlot({\n          attrs: privateApi.activatorAttrs,\n          control,\n        });\n\n      const $contents: VNode[] = [];\n      // if ($activator) {\n      //   $contents.push(...$activator);\n      // }\n\n      let $child: VNode | undefined;\n\n      if (booted) {\n        if (needRender) {\n          const children = defaultSlot && defaultSlot(control);\n          const _clickOutside = clickOutsideDirectiveArgument({\n            handler: (_ev) => {\n              control.close();\n            },\n            conditional: privateApi.outsideClickCloseConditional,\n            include: props.includeElements,\n          });\n          let usedClickOutside = false;\n          const withClickOutside = (node: VNode) => {\n            usedClickOutside = true;\n            return withDirectives(node, [_clickOutside]);\n          };\n          const node = fn(children, { withClickOutside });\n          const dirs: DirectiveArguments = [\n            [vShow, control.isActive],\n            bodyScrollLockDirectiveArgument(\n              scrollLock.value && control.isActive,\n            ),\n          ];\n          if (!usedClickOutside) {\n            dirs.push(_clickOutside);\n          }\n\n          // If node is a component (not an element), wrap it with a div\n          // to avoid \"Runtime directive used on component with non-element root node\" warning\n          const isElementNode =\n            typeof node.type === 'string' || node.type === undefined;\n          const targetNode = isElementNode\n            ? node\n            : h('div', { style: { display: 'contents' } }, [node]);\n\n          $child = withDirectives(targetNode, dirs);\n\n          const _props: Record<string, any> = {\n            class: control.classes,\n            style: control.styles,\n            ref: contentRef,\n          };\n\n          if (props.openOnHover) {\n            _props.onMouseenter = handleMouseenterContent;\n            _props.onMouseleave = handleMouseleaveContent;\n          }\n          $child = cloneVNode($child, _props);\n        }\n\n        const { transition } = opts;\n        let $transition: VNode;\n\n        if (transition) {\n          $transition = cloneVNode(transition($child), transitionListeners);\n        } else {\n          const { Ctor: TransitionCtor, props: transitionProps } =\n            TransitionDefine;\n\n          $transition = (\n            <TransitionCtor\n              {...transitionProps}\n              {...(transitionListeners as any)}>\n              {$child}\n            </TransitionCtor>\n          );\n        }\n\n        $contents.push(\n          <Teleport to={teleportTarget.value}>\n            {[\n              <Transition name=\"v-stack-fade\">{backdrop.value}</Transition>,\n              $transition,\n            ]}\n          </Teleport>,\n        );\n      }\n\n      return (\n        <>\n          {$activator}\n          {$contents}\n        </>\n      );\n    },\n  });\n\n  provide(V_STACK_CONTROL_INJECTION_KEY, control);\n  parent?._.joinChild(control);\n\n  onBeforeMount(() => {\n    $vstack.add(control);\n  });\n\n  onMounted(() => {\n    state.booted = true;\n    if (props.lazyBoot && props.modelValue) {\n      control.show();\n    }\n    if (control.isActive) {\n      control.toFront();\n      triggerContentMountedTick();\n      privateApi.checkFocusTrap();\n    }\n  });\n\n  let _stopWatchActivatorActiveHandle: (() => void) | undefined;\n\n  const stopWatchActivatorActive = () => {\n    if (_stopWatchActivatorActiveHandle) {\n      _stopWatchActivatorActiveHandle();\n      _stopWatchActivatorActiveHandle = undefined;\n    }\n  };\n\n  onBeforeUnmount(() => {\n    stopWatchActivatorActive();\n    privateApi.clearDelay();\n    privateApi.clearTimeoutId();\n    privateApi.removeFocusTrapper();\n    state.isDestroyed = true;\n    activatorEl.value = undefined;\n    beforeEachHookRemover();\n    afterEachHookRemover();\n    $vstack.remove(control);\n  });\n\n  watch(\n    () => props.modelValue,\n    (modelValue) => {\n      privateApi.setIsActive(modelValue, false);\n    },\n  );\n\n  watch(\n    () => props.value,\n    (value) => {\n      state.inputValue = value;\n      state.initialValue = value;\n    },\n  );\n\n  watch(\n    () => state.isActive,\n    (value) => {\n      if (!value) {\n        state.isContentHovered = false;\n\n        // @TODO In a structure like Tooltip > Modal, the Modal may unintentionally be hidden\n        // for (const child of allChildren.value) {\n        //   child.close();\n        // }\n      }\n\n      if (value) {\n        privateApi.setNeedRender(true);\n      } else if (state.activator) {\n        if (focusRestorable.value) {\n          attemptFocus(state.activator);\n        }\n      }\n      privateApi.checkFocusTrap();\n      onActivated?.(value, control);\n    },\n    { immediate: true },\n  );\n\n  watch(\n    activatorEl,\n    (el, beforeEl) => {\n      beforeEl?.removeAttribute(V_STACK_ACTIVATED_ATTR);\n      stopWatchActivatorActive();\n\n      if (!el) {\n        state.isActivatorHovered = false;\n        return;\n      }\n\n      if (!IN_WINDOW) return;\n\n      _stopWatchActivatorActiveHandle = watch(\n        () => state.isActive,\n        (isActive) => {\n          // @TODO There are cases where el is not an Element, but this is probably due to an unexpected assignment occurring somewhere.\n          // Specifically, it has been confirmed that it is a Proxy instance.\n          if (!(el instanceof Element)) {\n            return;\n          }\n\n          if (isActive) {\n            el.setAttribute(V_STACK_ACTIVATED_ATTR, '');\n          } else {\n            el.removeAttribute(V_STACK_ACTIVATED_ATTR);\n          }\n        },\n        { immediate: true },\n      );\n    },\n    { immediate: true },\n  );\n\n  watch(\n    () => props.alwaysRender,\n    (value) => {\n      if (value) {\n        privateApi.setNeedRender(true);\n      }\n    },\n    { immediate: true },\n  );\n\n  watch(\n    () => props.disabled,\n    (disabled) => {\n      disabled && control.close({ force: true });\n    },\n  );\n\n  function triggerContentMountedTick(count = 0) {\n    const content = contentRef.value;\n    if (content) {\n      // this.autofocus();\n      onContentMounted && onContentMounted(content, control);\n      return;\n    }\n\n    count++;\n\n    if (count < 3) {\n      nextTick(() => {\n        triggerContentMountedTick(count);\n      });\n    }\n  }\n\n  return control;\n}\n\nfunction refElement<T extends object | undefined>(\n  obj: T,\n): HTMLElement | undefined {\n  const el = obj && '$el' in obj ? obj.$el : obj;\n  if (el instanceof HTMLElement) {\n    return el;\n  }\n  return undefined;\n}\n\nfunction getActivator(\n  query: VStackActivatorQuery | undefined,\n): HTMLElement | undefined {\n  if (!IN_WINDOW || !query) return;\n  if (typeof query === 'string')\n    return (document.querySelector(query) as HTMLElement) || undefined;\n  const queryOrEl = typeof query === 'function' ? query() : query;\n  if (!queryOrEl) return;\n  if (queryOrEl instanceof Event) {\n    const { currentTarget } = queryOrEl;\n    if (currentTarget && currentTarget !== document) {\n      return currentTarget as HTMLElement;\n    }\n    return (queryOrEl.target as HTMLElement) || undefined;\n  }\n  return refElement(queryOrEl);\n}\n","import {\n  ExtractPropTypes,\n  VNode,\n  VNodeChild,\n  ComponentPropsOptions,\n  EmitsOptions,\n  SetupContext,\n  SlotsType,\n  PropType,\n  ObjectEmitsOptions,\n} from 'vue';\nimport {\n  VStackControl,\n  StackablePropsOptions,\n  StackableEmits,\n} from '../schemes';\nimport { useStackControl, UseStackControlOptions } from './control';\n\nexport type StackableSetupContext<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions,\n  Slots extends SlotsType,\n  CustomAPI extends Record<keyof any, any>,\n> = {\n  readonly control: VStackControl;\n  readonly props: ExtractPropTypes<StackablePropsOptions & Props>;\n  readonly setupContext: SetupContext<StackableEmits & Emits, Slots>;\n} & CustomAPI;\n\nexport interface DefineStackableSettings<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions,\n  Slots extends SlotsType,\n  CustomAPI extends Record<keyof any, any> = {},\n> {\n  name?: string;\n  setup?: (\n    ctx: StackableSetupContext<Props, Emits, Slots, CustomAPI>,\n  ) =>\n    | ((\n        children: VNodeChild,\n        ctx: StackableSetupContext<Props, Emits, Slots, CustomAPI>,\n      ) => VNode)\n    | void;\n  render?: (\n    children: VNodeChild,\n    ctx: StackableSetupContext<Props, Emits, Slots, CustomAPI>,\n  ) => VNode;\n}\n\n/**\n * @TODO Utility to temporarily deal with the fact that emits options can no longer be merged since vue3.4.\n */\nexport type EmitsToPropOptions<T extends EmitsOptions> = T extends string[]\n  ? {\n      [K in string & `on${Capitalize<T[number]>}`]: PropType<\n        (...args: any[]) => any\n      >;\n    }\n  : T extends ObjectEmitsOptions\n    ? {\n        [\n          K in string & `on${Capitalize<string & keyof T>}`\n        ]: K extends `on${infer C}`\n          ? T[Uncapitalize<C>] extends null\n            ? never // PropType<(...args: any[]) => any>\n            : PropType<\n                (\n                  ...args: T[Uncapitalize<C>] extends (...args: infer P) => any\n                    ? P\n                    : never\n                ) => any\n              >\n          : never;\n      }\n    : {};\n\nexport function setupStackableComponent<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions = EmitsOptions,\n  Slots extends SlotsType = SlotsType,\n  CustomAPI extends Record<keyof any, any> = Record<keyof any, any>,\n>(\n  props: any,\n  setupContext: any,\n  options?: UseStackControlOptions,\n): StackableSetupContext<Props, Emits, Slots, CustomAPI> {\n  const control = useStackControl(props, setupContext, options);\n  return {\n    control,\n    props,\n    setupContext: setupContext as any,\n  } as any;\n}\n","import { computed } from 'vue';\nimport {\n  VStackControl,\n  VStackAction,\n  VStackActionProps,\n  VStackActionControl,\n} from '../schemes';\n\nexport interface UseStackActionOptions {\n  resolver?: (actions: VStackAction[]) => VStackAction[];\n}\n\nexport function useStackAction(\n  props: VStackActionProps,\n  control: VStackControl,\n  opts: UseStackActionOptions = {},\n): VStackActionControl {\n  const { resolver } = opts;\n  const actions = computed(() => {\n    const { actions: _actions } = props;\n    return resolver ? resolver(_actions) : _actions;\n  });\n  const $actions = computed(() =>\n    actions.value.map((action) => {\n      const onClick = (control: VStackControl, ev: PointerEvent) =>\n        action.onClick?.(control, ev);\n\n      const content = action.content({\n        control,\n        key: action.key,\n        onClick,\n      });\n      return content;\n    }),\n  );\n\n  const actionControl: VStackActionControl = {\n    get control() {\n      return control;\n    },\n    get actions() {\n      return actions.value;\n    },\n    get $actions() {\n      return $actions.value;\n    },\n  };\n\n  return actionControl;\n}\n","import { defineComponent, h, cloneVNode } from 'vue';\nimport { useVueStack } from '../composables';\nimport { VStackControl } from '../schemes/control';\n\nexport const VDynamicStacks = defineComponent({\n  name: 'VDynamicStacks',\n  setup(_props, ctx) {\n    const $vstack = useVueStack();\n\n    return () => {\n      const { dynamicSettings: settings } = $vstack;\n\n      const $dynamicStacks = settings.map(\n        ({ id: key, setting, resolve, remove }) => {\n          const { Ctor, props, slots } = setting;\n          const node = cloneVNode(\n            h(\n              Ctor,\n              {\n                ...props,\n                key,\n              },\n              slots,\n            ),\n            {\n              onClose: (control: VStackControl) => {\n                resolve(control.value);\n              },\n              onAfterLeave: () => {\n                remove();\n              },\n            },\n          );\n          return node;\n        },\n      );\n\n      return (\n        <>\n          {ctx.slots.default?.()}\n          {$dynamicStacks}\n        </>\n      );\n    };\n  },\n});\n","import './VDialog.scss';\nimport {\n  defineComponent,\n  ComponentPropsOptions,\n  EmitsOptions,\n  SlotsType,\n} from 'vue';\nimport { createStackableDefine, MergeStackBaseSlots } from '../schemes';\nimport {\n  DefineStackableSettings,\n  setupStackableComponent,\n  EmitsToPropOptions,\n} from '../composables';\nimport { VueStackError } from '../logger';\n\ninterface CreateDialogSchemeOptions {\n  /**\n   * @default \"v-stack-slide-y\"\n   */\n  defaultTransition?: string;\n  /**\n   * @default true\n   */\n  defaultScrollLock?: boolean;\n  /**\n   * @default false\n   */\n  defaultBackdrop?: string | boolean;\n  /** @default true */\n  defaultCloseOnOutsideClick?: boolean;\n  /** @default false */\n  defaultPersistent?: boolean;\n}\n\nfunction createDialogScheme(options: CreateDialogSchemeOptions = {}) {\n  const {\n    defaultTransition = 'v-stack-slide-y',\n    defaultScrollLock = true,\n    defaultBackdrop = false,\n    defaultCloseOnOutsideClick = true,\n    defaultPersistent = false,\n  } = options;\n\n  const { props, emits } = createStackableDefine({\n    defaultTransition,\n    defaultFocusTrap: true,\n    defaultFocusRestorable: true,\n    defaultScrollLock,\n    defaultBackdrop,\n    defaultCloseOnOutsideClick,\n    defaultPersistent,\n  });\n\n  return {\n    props,\n    emits,\n  };\n}\n\nexport interface DefineDialogSettings<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions,\n  Slots extends SlotsType,\n>\n  extends\n    DefineStackableSettings<Props, Emits, Slots>,\n    CreateDialogSchemeOptions {\n  props?: Props;\n  emits?: Emits;\n  slots?: Slots;\n  attrs?: Record<string, any>;\n  manualAttrs?: boolean;\n}\n\nexport function defineDialogComponent<\n  Props extends Readonly<ComponentPropsOptions> = {},\n  Emits extends EmitsOptions = {},\n  Slots extends SlotsType = SlotsType<{}>,\n>(settings: DefineDialogSettings<Props, Emits, Slots>) {\n  const baseScheme = createDialogScheme(settings);\n  const { name, props, emits, manualAttrs } = settings;\n\n  const Component = defineComponent({\n    name,\n    inheritAttrs: false,\n    props: {\n      ...baseScheme.props,\n      ...props,\n    } as typeof baseScheme.props &\n      Props &\n      EmitsToPropOptions<typeof baseScheme.emits & Emits>,\n    emits: {\n      ...baseScheme.emits,\n      ...emits,\n    } as typeof baseScheme.emits & Emits,\n    slots: settings.slots as MergeStackBaseSlots<Slots>,\n    setup(_props: any, _ctx) {\n      const dialogCtx = setupStackableComponent<typeof baseScheme.props>(\n        _props,\n        _ctx,\n        {\n          manualAttrs,\n        },\n      );\n      const { control } = dialogCtx;\n      const render = settings.setup?.(dialogCtx as any) || settings.render;\n      if (!render) {\n        throw new VueStackError('render function is required.');\n      }\n\n      const hostBaseAttrs = settings.attrs || {};\n\n      const hostAttrs = {\n        ...hostBaseAttrs,\n        class: ['v-stack-dialog', hostBaseAttrs.class],\n        tabindex: '0',\n      };\n\n      return () =>\n        control.render((children, { withClickOutside }) => (\n          <div {...hostAttrs}>\n            <div class=\"v-stack-dialog__scroller\">\n              <div class=\"v-stack-dialog__centerer\">\n                {withClickOutside(render(children, dialogCtx as any))}\n              </div>\n            </div>\n          </div>\n        ));\n    },\n  });\n\n  return Component;\n}\n","import { nextTick, RendererElement, ExtractPropTypes } from 'vue';\nimport { ExtractPropInput } from '@fastkit/vue-utils';\nimport { generateJavaScriptTransition } from '@fastkit/vue-transitions';\nimport { addTransitionendEvent } from '@fastkit/dom';\n\nconst HORIZONTAL_MARGIN = 24;\nconst SAFE_TIMEOUT = 1000;\n\nconst getHeight = (el: HTMLElement): Promise<number> => {\n  const { height } = el.getBoundingClientRect();\n  if (height) return Promise.resolve(height);\n  return new Promise((resolve) => {\n    nextTick(() => {\n      resolve(el.getBoundingClientRect().height);\n    });\n  });\n};\n\nexport const stackSnackbarTransitionProps = {\n  top: Boolean,\n  bottom: Boolean,\n  left: Boolean,\n  right: Boolean,\n};\n\nexport type SnackbarTransitionPropsOptions =\n  typeof stackSnackbarTransitionProps;\n\nexport type VSnackbarTransitionProps =\n  ExtractPropInput<SnackbarTransitionPropsOptions>;\n\nexport type VSnackbarTransitionResolvedProps =\n  ExtractPropTypes<SnackbarTransitionPropsOptions>;\n\nexport const VSnackbarTransition = generateJavaScriptTransition({\n  displayName: 'VSnackbarTransition',\n  props: stackSnackbarTransitionProps,\n  setup(props) {\n    const { top, left, right } = props;\n    const hasHorizontal = left || right;\n    const marginProp = top ? 'marginTop' : 'marginBottom';\n    let safeTimer: number | null = null;\n\n    const setOffset = (\n      el: HTMLElement,\n      disableTransition = false,\n    ): Promise<void> =>\n      new Promise((resolve) => {\n        getHeight(el).then((height) => {\n          let offset = -height;\n          if (hasHorizontal) offset -= HORIZONTAL_MARGIN;\n          if (!disableTransition) {\n            el.style[marginProp] = `${offset}px`;\n            return resolve();\n          }\n          el.style.transition = 'none';\n          el.style[marginProp] = `${offset}px`;\n          setTimeout(() => {\n            el.style.transition = '';\n            setTimeout(resolve, 0);\n          }, 30);\n        });\n      });\n\n    const removeOffset = (\n      el: HTMLElement,\n      disableTransition = false,\n    ): Promise<void> => {\n      if (!disableTransition) {\n        el.style[marginProp] = '';\n        return Promise.resolve();\n      }\n\n      return new Promise((resolve) => {\n        el.style.transition = 'none';\n        el.style[marginProp] = '';\n        setTimeout(() => {\n          el.style.transition = '';\n          setTimeout(resolve, 0);\n        }, 0);\n      });\n    };\n\n    const clearSafeTimer = () => {\n      if (safeTimer !== null) {\n        clearTimeout(safeTimer);\n        safeTimer = null;\n      }\n    };\n\n    function reset(_el: RendererElement, disableTransition?: boolean) {\n      removeOffset(_el as HTMLElement, disableTransition);\n      clearSafeTimer();\n    }\n\n    return {\n      onEnter: (_el, done) => {\n        const el = _el as HTMLElement;\n        clearSafeTimer();\n        safeTimer = window.setTimeout(() => {\n          clearSafeTimer();\n          done();\n        }, SAFE_TIMEOUT);\n\n        const beforeTimer = safeTimer;\n\n        setOffset(el, true).then(() => {\n          addTransitionendEvent(\n            el,\n            () => {\n              if (beforeTimer !== safeTimer) return;\n              clearSafeTimer();\n              done();\n            },\n            {\n              once: true,\n              properties: (prop) => prop.indexOf('margin') === 0,\n            },\n          );\n          removeOffset(el);\n        });\n      },\n      onAfterEnter: reset,\n      onEnterCancelled: reset,\n      onLeave: (_el, done) => {\n        const el = _el as HTMLElement;\n        clearSafeTimer();\n        safeTimer = window.setTimeout(() => {\n          clearSafeTimer();\n          done();\n        }, SAFE_TIMEOUT);\n\n        const beforeTimer = safeTimer;\n\n        setOffset(el).then(() => {\n          addTransitionendEvent(\n            el,\n            () => {\n              if (beforeTimer !== safeTimer) return;\n              reset(el, true);\n              done();\n            },\n            {\n              once: true,\n              properties: (prop) => prop.indexOf('margin') === 0,\n            },\n          );\n        });\n      },\n      onAfterLeave: reset,\n      onLeaveCancelled: reset,\n    };\n  },\n});\n","import './VSnackbar.scss';\nimport {\n  defineComponent,\n  computed,\n  ComponentPropsOptions,\n  EmitsOptions,\n  SlotsType,\n} from 'vue';\nimport { createStackableDefine, MergeStackBaseSlots } from '../schemes';\nimport {\n  DefineStackableSettings,\n  setupStackableComponent,\n  EmitsToPropOptions,\n} from '../composables';\nimport {\n  VSnackbarTransition,\n  stackSnackbarTransitionProps,\n  SnackbarTransitionPropsOptions,\n} from './VSnackbarTransition';\nimport { VueStackError } from '../logger';\n\ntype SnackbarPropsOptions = SnackbarTransitionPropsOptions;\n\n/**\n * Snackbar position\n */\ninterface SnackPosition {\n  top: boolean;\n  bottom: boolean;\n  left: boolean;\n  right: boolean;\n}\n\ninterface SnackbarAPI {\n  /**\n   * Snackbar position\n   *\n   * @see {@link SnackPosition}\n   */\n  readonly position: SnackPosition;\n  readonly attrs: Record<string, any>;\n}\n\nexport interface DefineSnackbarSettings<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions,\n  Slots extends SlotsType,\n> extends DefineStackableSettings<\n  Props & SnackbarPropsOptions,\n  Emits,\n  Slots,\n  SnackbarAPI\n> {\n  props?: Props;\n  emits?: Emits;\n  slots?: Slots;\n  /**\n   * @default \"v-stack-fade\"\n   */\n  defaultTransition?: string;\n  /**\n   * @default 6000\n   */\n  defaultTimeout?: number;\n}\n\nexport function defineSnackbarComponent<\n  Props extends Readonly<ComponentPropsOptions> = {},\n  Emits extends EmitsOptions = {},\n  Slots extends SlotsType = SlotsType<{}>,\n>(settings: DefineSnackbarSettings<Props, Emits, Slots>) {\n  const {\n    name,\n    defaultTransition = 'v-stack-fade',\n    defaultTimeout = 6000,\n  } = settings;\n  const { props, emits } = createStackableDefine({\n    defaultTransition,\n    defaultCloseOnOutsideClick: false,\n    defaultCloseOnNavigation: false,\n    defaultTimeout,\n  });\n\n  const stackSnackbarProps = {\n    ...props,\n    ...stackSnackbarTransitionProps,\n  };\n\n  const Component = defineComponent({\n    name,\n    inheritAttrs: false,\n    props: {\n      ...stackSnackbarProps,\n      ...settings.props,\n    } as typeof stackSnackbarProps &\n      Props &\n      EmitsToPropOptions<typeof emits & Emits>,\n    emits: {\n      ...emits,\n      ...settings.emits,\n    } as typeof emits & Emits,\n    slots: settings.slots as MergeStackBaseSlots<Slots>,\n    setup(_props: any, _ctx) {\n      const baseCtx = setupStackableComponent<\n        SnackbarPropsOptions,\n        {},\n        Slots,\n        SnackbarAPI\n      >(_props, _ctx);\n\n      const { control, props } = baseCtx;\n\n      const { snackbarDefaultPosition } = control.$service;\n\n      const snackPosition = computed<SnackPosition>(() => {\n        let { top, bottom, left } = props;\n        const { right } = props;\n\n        if (top === bottom) {\n          top = snackbarDefaultPosition === 'top';\n          bottom = !top;\n        }\n\n        if (left && right) {\n          left = false;\n        }\n\n        return {\n          top,\n          bottom,\n          left,\n          right,\n        };\n      });\n\n      const snackClasses = computed(() => {\n        const { left, right, top, bottom } = snackPosition.value;\n        const hasHorizontal = left || right;\n        return [\n          'v-stack-snackbar',\n          {\n            'v-stack-snackbar--top': top,\n            'v-stack-snackbar--bottom': bottom,\n            'v-stack-snackbar--left': left,\n            'v-stack-snackbar--right': right,\n            'v-stack-snackbar--x-center': !hasHorizontal,\n            'v-stack-snackbar--has-horizontal': hasHorizontal,\n          },\n        ];\n      });\n\n      const snackbarContext: typeof baseCtx = {\n        ...baseCtx,\n        get position() {\n          return snackPosition.value;\n        },\n        get attrs() {\n          return {\n            class: snackClasses.value,\n          };\n        },\n      };\n\n      const render =\n        settings.setup?.(snackbarContext as any) || settings.render;\n      if (!render) {\n        throw new VueStackError('render function is required.');\n      }\n\n      return () =>\n        control.render((children) => render(children, snackbarContext as any), {\n          transition: (child) => (\n            <VSnackbarTransition {...snackPosition.value}>\n              {child}\n            </VSnackbarTransition>\n          ),\n        });\n    },\n  });\n\n  return Component;\n}\n","export function getScrollParent(el?: HTMLElement | null): HTMLElement {\n  while (el) {\n    if (hasScrollbar(el)) return el;\n    el = el.parentElement!;\n  }\n\n  return document.scrollingElement as HTMLElement;\n}\n\nexport function getScrollParents(\n  el?: Element | null,\n  stopAt?: Element | null,\n): HTMLElement[] {\n  const elements: HTMLElement[] = [];\n  if (stopAt && el && !stopAt.contains(el)) return elements;\n\n  const { scrollingElement } = document;\n\n  let hasDocumentScrollingElement = false;\n\n  while (el) {\n    if (hasScrollbar(el)) {\n      elements.push(el as HTMLElement);\n      if (el === scrollingElement) {\n        hasDocumentScrollingElement = true;\n      }\n    }\n    if (el === stopAt) break;\n    el = el.parentElement!;\n  }\n\n  if (scrollingElement && !hasDocumentScrollingElement) {\n    elements.push(scrollingElement as HTMLElement);\n  }\n\n  return elements;\n}\n\nexport function hasScrollbar(el?: Element | null) {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;\n\n  const style = window.getComputedStyle(el);\n  return (\n    style.overflowY === 'scroll' ||\n    (style.overflowY === 'auto' && el.scrollHeight > el.clientHeight)\n  );\n}\n","import './VMenu.scss';\nimport {\n  defineComponent,\n  computed,\n  PropType,\n  reactive,\n  CSSProperties,\n  withDirectives,\n  ref,\n  ComponentPropsOptions,\n  EmitsOptions,\n  Ref,\n  SlotsType,\n  watch,\n  onBeforeUnmount,\n  type ExtractPropTypes,\n} from 'vue';\nimport {\n  useWindow,\n  UseWindowRef,\n  resizeDirectiveArgument,\n  ResizeDirectivePayload,\n} from '@fastkit/vue-resize';\nimport { type ExtractPropInput } from '@fastkit/vue-utils';\nimport { IN_WINDOW } from '@fastkit/helpers';\nimport {\n  createStackableDefine,\n  MergeStackBaseSlots,\n  StackableTabCloseSpec,\n  VStackControl,\n} from '../schemes';\nimport {\n  DefineStackableSettings,\n  setupStackableComponent,\n  StackableSetupContext,\n  EmitsToPropOptions,\n  type UseStackControlOptions,\n} from '../composables';\nimport { logger, VueStackError } from '../logger';\nimport { getScrollParents } from '../utils';\n\nconst DEFAULT_EDGE_MARGIN = 20;\nconst DEFAULT_FORCE_EDGE_MARGIN = false;\nconst DEFAULT_DISTANCE = 10;\nconst DEFAULT_RESIZE_WATCH_DEBOUNCE = 250;\nconst DEFAULT_TRANSITION = 'v-menu-auto';\n\n/**\n * Overlap settings with the activator\n *\n * - `allow` Allow overlapping if display space is insufficient\n * - `disallow` Do not allow overlapping even when display space is insufficient.\n * - `overlap` Overlap on the activator\n *\n * If internal position settings like (left, right, top, bottom)-inner are used, this configuration does not apply to that axis.\n */\nexport type MenuOverlapSettings = 'allow' | 'disallow' | 'overlap';\n\ntype RawMenuOverlapSettings = MenuOverlapSettings | boolean;\n\ninterface CreateMenuSchemeOptions {\n  /**\n   * @default \"v-menu-auto\"\n   */\n  defaultTransition?: string;\n  /**\n   * @default true\n   */\n  defaultScrollLock?: boolean;\n  defaultDistance?: number;\n  defaultEdgeMargin?: number;\n  defaultForceEdgeMargin?: boolean;\n  defaultResizeWatchDebounce?: number;\n  /**\n   * @default false\n   */\n  defaultAllowOverflow?: boolean;\n  /**\n   * @default false\n   */\n  defaultOverlap?: RawMenuOverlapSettings;\n  /** @default true */\n  defaultCloseOnEsc?: boolean;\n  /** @default true */\n  defaultCloseOnTab?: StackableTabCloseSpec;\n  /** @default false */\n  defaultHideOnScroll?: boolean | string | number;\n  /** @default true */\n  defaultHideOnInvisible?: boolean;\n}\n\ntype MenuSizeSpec = number | 'fit' | 'free';\n\ntype RawMenuMaxSize =\n  MenuSizeSpec | ((window: UseWindowRef) => number | undefined);\n\nconst RAW_MENU_SIZE_PROP = {\n  type: [Number, String] as PropType<number | 'fit' | 'free'>,\n  default: undefined,\n};\n\nconst RAW_MENU_MAX_SIZE_PROP = [\n  Number,\n  String,\n  Function,\n] as PropType<RawMenuMaxSize>;\n\nexport function createMenuProps(options: CreateMenuSchemeOptions = {}) {\n  const {\n    defaultDistance = DEFAULT_DISTANCE,\n    defaultEdgeMargin = DEFAULT_EDGE_MARGIN,\n    defaultForceEdgeMargin = DEFAULT_FORCE_EDGE_MARGIN,\n    defaultResizeWatchDebounce = DEFAULT_RESIZE_WATCH_DEBOUNCE,\n    defaultAllowOverflow = false,\n    defaultOverlap = false,\n    defaultHideOnScroll = false,\n    defaultHideOnInvisible = true,\n  } = options;\n\n  return {\n    /**\n     * Horizontal Axis Position\n     *\n     * - `left` To the left of the activator.\n     * - `left-inner` Align to the left edge of the activator.\n     * - `center` Align to the center of the activator.\n     * - `right` To the right of the activator.\n     * - `right-inner` Align to the right edge of the activator.\n     */\n    x: String as PropType<VMenuXPosition>,\n    /**\n     * Vertical Axis Position\n     *\n     * - `top` To the top of the activator.\n     * - `top-inner` Align to the top edge of the activator.\n     * - `center` Align to the center of the activator.\n     * - `bottom` To the bottom of the activator.\n     * - `bottom-inner` Align to the bottom edge of the activator.\n     */\n    y: String as PropType<VMenuYPosition>,\n    /**\n     * Allow overflow from the screen.\n     *\n     * If this setting is not enabled, the element's size will be reduced when exceeding coordinates beyond the screen edge, subtracting the edge margin.\n     */\n    allowOverflow: {\n      type: Boolean,\n      default: defaultAllowOverflow,\n    },\n    /**\n     * width\n     *\n     * Either specify a pixel size or use \"fit\". When \"fit\" is chosen, the width will match that of the activator.\n     */\n    width: RAW_MENU_SIZE_PROP,\n    /**\n     * height\n     *\n     * Either specify a pixel size or use \"fit\". When \"fit\" is chosen, the height will match that of the activator.\n     */\n    height: RAW_MENU_SIZE_PROP,\n    /**\n     * Minimum width\n     *\n     * Either specify a pixel size or use \"fit\". When \"fit\" is chosen, the width will match that of the activator.\n     */\n    minWidth: RAW_MENU_SIZE_PROP,\n    /**\n     * Minimum height\n     *\n     * Either specify a pixel size or use \"fit\". When \"fit\" is chosen, the width will match that of the activator.\n     */\n    minHeight: RAW_MENU_SIZE_PROP,\n    /**\n     * Maximum width\n     *\n     * It is possible to set values that can be configured as CSS or dynamic sizes through callback functions.\n     *\n     * This setting is ignored if `allowOverflow` is enabled.\n     *\n     * @see {@link RAW_MENU_MAX_SIZE_PROP}\n     */\n    maxWidth: RAW_MENU_MAX_SIZE_PROP,\n    /**\n     * Maximum height\n     *\n     * It is possible to set values that can be configured as CSS or dynamic sizes through callback functions.\n     *\n     * This setting is ignored if `allowOverflow` is enabled.\n     *\n     * @see {@link RAW_MENU_MAX_SIZE_PROP}\n     */\n    maxHeight: RAW_MENU_MAX_SIZE_PROP,\n    /**\n     * Distance from the activator (in pixels).\n     *\n     * If a position setting, such as (left, right, top, bottom)-inner, is used, the distance is not applied to that axis.\n     */\n    distance: {\n      type: Number,\n      default: defaultDistance,\n    },\n    /**\n     * Margin from the screen edge\n     *\n     * By default, it is controlled to ensure that the coordinates, subtracted by this margin from the screen edge, do not overflow.\n     */\n    edgeMargin: {\n      type: Number,\n      default: defaultEdgeMargin,\n    },\n    /**\n     * Force margin at edge\n     *\n     * By default, even if `edgeMargin` is set, the activator may snap outside that margin. Enabling this option forces the component to always maintain the specified `edgeMargin` from the screen edge.\n     */\n    forceEdgeMargin: {\n      type: Boolean,\n      default: defaultForceEdgeMargin,\n    },\n    /**\n     * Overlap settings with the activator\n     *\n     * - `allow` | `false` Allow overlapping if display space is insufficient\n     * - `disallow` Do not allow overlapping even when display space is insufficient.\n     * - `overlap` | `true` Overlap on the activator\n     *\n     * If internal position settings like (left, right, top, bottom)-inner are used, this configuration does not apply to that axis.\n     *\n     * @see {@link MenuOverlapSettings}\n     */\n    overlap: {\n      type: [Boolean, String] as PropType<MenuOverlapSettings | boolean>,\n      default: defaultOverlap,\n    },\n    resizeWatchDebounce: {\n      type: Number,\n      default: defaultResizeWatchDebounce,\n    },\n    /**\n     * Hide when scrolling\n     *\n     * If a value is specified, the tooltip will be hidden after scrolling by the specified number of pixels (px).\n     */\n    hideOnScroll: {\n      type: [Boolean, String, Number],\n      default: defaultHideOnScroll,\n    },\n    /**\n     * Hide the stack element when the activator is scrolled out of view.\n     */\n    hideOnInvisible: {\n      type: Boolean,\n      default: defaultHideOnInvisible,\n    },\n  };\n}\n\nfunction createMenuScheme(options: CreateMenuSchemeOptions = {}) {\n  const {\n    defaultTransition = DEFAULT_TRANSITION,\n    defaultScrollLock = false,\n    defaultCloseOnEsc = true,\n    defaultCloseOnTab = true,\n  } = options;\n\n  const { props, emits } = createStackableDefine({\n    defaultTransition,\n    defaultScrollLock,\n    defaultCloseOnEsc,\n    defaultCloseOnTab,\n  });\n\n  return {\n    props: {\n      ...props,\n      ...createMenuProps(options),\n    },\n    emits,\n  };\n}\n\nexport type MenuPropsOptions = ReturnType<typeof createMenuProps>;\n\nexport type MenuInput = ExtractPropInput<MenuPropsOptions>;\n\nexport type MenuEmits = ReturnType<typeof createMenuScheme>['emits'];\n\nexport type VMenuXPosition =\n  'left' | 'left-inner' | 'center' | 'right' | 'right-inner';\n\nexport type VMenuYPosition =\n  'top' | 'top-inner' | 'center' | 'bottom' | 'bottom-inner';\n\nexport interface VMenuRect {\n  left: number;\n  right: number;\n  top: number;\n  bottom: number;\n  width: number;\n  height: number;\n}\n\nexport interface VMenuRectInfo extends VMenuRect {\n  positions: {\n    top: boolean;\n    bottom: boolean;\n    left: boolean;\n    right: boolean;\n    xInner: boolean;\n    yInner: boolean;\n  };\n  bubble: {\n    styles: {\n      '--bubble-top'?: string;\n      '--bubble-bottom'?: string;\n      '--bubble-left'?: string;\n      '--bubble-right'?: string;\n    };\n  };\n}\n\nexport interface VMenuState {\n  pageXOffset: number;\n  pageYOffset: number;\n  rect: VMenuRect | null;\n  activatorRect: VMenuRect | null;\n}\n\nexport interface MenuAPI {\n  readonly control: VStackControl;\n  readonly attrs: Record<string, any>;\n  readonly pageXOffset: number;\n  readonly pageYOffset: number;\n  readonly distance: number;\n  readonly resizeWatchDebounce: number;\n  readonly overlap: MenuOverlapSettings;\n  readonly edgeMargin: number;\n  readonly forceEdgeMargin: boolean;\n  readonly minLeft: number;\n  readonly minTop: number;\n  readonly maxRight: number;\n  readonly maxBottom: number;\n  readonly rect: VMenuRectInfo | null;\n  readonly styles: CSSProperties;\n  readonly scrollerRef: Ref<HTMLElement | null>;\n  readonly bodyRef: Ref<HTMLElement | null>;\n  updatePageOffset(): void;\n  updateMenuRect(menuBodyRect?: ResizeDirectivePayload): void;\n  updateActivatorRect(): void;\n  updateRects(menuBodyRect?: ResizeDirectivePayload): void;\n}\n\nexport interface DefineMenuSettings<\n  Props extends Readonly<ComponentPropsOptions>,\n  Emits extends EmitsOptions,\n  Slots extends SlotsType,\n>\n  extends\n    DefineStackableSettings<Props & MenuPropsOptions, Emits, Slots, MenuAPI>,\n    CreateMenuSchemeOptions,\n    Pick<UseStackControlOptions, 'activatorAttrs' | 'stackType'> {\n  props?: Props;\n  emits?: Emits;\n  slots?: Slots;\n  attrs?:\n    | Record<string, any>\n    | ((\n        ctx: StackableSetupContext<Props, Emits, Slots, MenuAPI>,\n      ) => Record<string, any>);\n}\n\nconst getScrollingElement = () => {\n  if (!IN_WINDOW) return;\n  const { scrollingElement } = document;\n  if (!scrollingElement) {\n    logger.warn('document.scrollingElement is not scrollable.');\n  }\n  return scrollingElement;\n};\n\nexport function defineMenuComponent<\n  Props extends Readonly<ComponentPropsOptions> = {},\n  Emits extends EmitsOptions = {},\n  Slots extends SlotsType = SlotsType<{}>,\n>(settings: DefineMenuSettings<Props, Emits, Slots>) {\n  const baseScheme = createMenuScheme(settings);\n  const {\n    name,\n    props: customProps,\n    emits,\n    activatorAttrs,\n    stackType,\n  } = settings;\n\n  const Component = defineComponent({\n    name,\n    inheritAttrs: false,\n    props: {\n      ...baseScheme.props,\n      ...customProps,\n    } as typeof baseScheme.props &\n      Props &\n      EmitsToPropOptions<typeof baseScheme.emits & Emits>,\n    emits: {\n      ...baseScheme.emits,\n      ...emits,\n    } as typeof baseScheme.emits & Emits,\n    slots: settings.slots as MergeStackBaseSlots<Slots>,\n    setup(_props: any, _ctx) {\n      const __props = _props as ExtractPropTypes<typeof baseScheme.props>;\n\n      let _intersectionObserver: IntersectionObserver | undefined;\n\n      const state: VMenuState = reactive({\n        pageXOffset: 0,\n        pageYOffset: 0,\n        rect: null,\n        activatorRect: null,\n      });\n\n      const startOffsets = ref({\n        pageXOffset: 0,\n        pageYOffset: 0,\n      });\n\n      const menuResizeHandler = (rect: ResizeDirectivePayload) => {\n        menuResizeHandler._clear();\n        menuResizeHandler._id = requestAnimationFrame(() => {\n          updateRects(rect);\n        });\n      };\n      menuResizeHandler._id = undefined as number | undefined;\n      menuResizeHandler._clear = () => {\n        if (menuResizeHandler._id !== undefined) {\n          cancelAnimationFrame(menuResizeHandler._id);\n          menuResizeHandler._id = undefined;\n        }\n      };\n\n      const _disposeIntersectionObserver = () => {\n        if (_intersectionObserver) {\n          _intersectionObserver.disconnect();\n          _intersectionObserver = undefined;\n        }\n      };\n\n      const getActivatorElement = (_control: VStackControl) => {\n        const $activator = _control.activator;\n        return $activator instanceof Event\n          ? ($activator.target as HTMLElement)\n          : $activator;\n      };\n\n      const onActivated = (isActive: boolean, _control: VStackControl) => {\n        if (!isActive) {\n          _disposeIntersectionObserver();\n          return;\n        }\n\n        const scrollingElement = getScrollingElement();\n        if (!scrollingElement) return;\n\n        startOffsets.value = {\n          pageXOffset: scrollingElement.scrollLeft,\n          pageYOffset: scrollingElement.scrollTop,\n        };\n\n        if (!__props.hideOnInvisible) return;\n\n        const activator = getActivatorElement(_control);\n        if (!activator) return;\n\n        _intersectionObserver = new IntersectionObserver(\n          (entries) => {\n            if (!control.isActive) return;\n            for (const entry of entries) {\n              const inview = entry.isIntersecting;\n              if (!inview) {\n                _control.close();\n                break;\n              }\n            }\n          },\n          {\n            // root: scrollingElement,\n          },\n        );\n        _intersectionObserver.observe(activator);\n      };\n\n      const _transition = computed<string>(() => {\n        const { transition } = __props;\n        if (typeof transition === 'string' && transition !== DEFAULT_TRANSITION)\n          return transition;\n        const { x, y } = _positionFlags.value;\n        if (y === 'top') return 'v-stack-slide-y-reverse';\n        if (y === 'bottom') return 'v-stack-slide-y';\n        if (x === 'left') return 'v-stack-slide-x-reverse';\n        if (x === 'right') return 'v-stack-slide-x';\n        if (y === 'top-inner') return 'v-stack-slide-y';\n        if (y === 'bottom-inner') return 'v-stack-slide-y-reverse';\n        if (x === 'left-inner') return 'v-stack-slide-x';\n        if (x === 'right-inner') return 'v-stack-slide-x-reverse';\n        return 'v-stack-scale';\n      });\n\n      const transitionResolver = (): string => {\n        return _transition.value;\n      };\n\n      const baseCtx = setupStackableComponent<\n        MenuPropsOptions,\n        {},\n        Slots,\n        MenuAPI\n      >(_props, _ctx, {\n        onActivated,\n        onContentMounted: () => {\n          updateRects();\n        },\n        transitionResolver,\n        stackType,\n        activatorAttrs,\n      });\n\n      const { props, control } = baseCtx;\n\n      const _scrollerRef = ref<HTMLElement | null>(null);\n      const _bodyRef = ref<HTMLElement | null>(null);\n      const _distance = computed(() => props.distance);\n      const _resizeWatchDebounce = computed(() => props.resizeWatchDebounce);\n      const $window = useWindow();\n      const hideOnScrollOffset = computed<number | undefined>(() => {\n        let { hideOnScroll } = props;\n        if (typeof hideOnScroll === 'string') {\n          hideOnScroll = Number(hideOnScroll);\n        }\n        if (hideOnScroll === true) {\n          hideOnScroll = 0;\n        }\n        if (hideOnScroll === false) return;\n        return hideOnScroll;\n      });\n\n      const _overlap = computed<MenuOverlapSettings>(() => {\n        const { overlap } = props;\n        if (typeof overlap === 'boolean') {\n          return overlap ? 'overlap' : 'allow';\n        }\n        return overlap;\n      });\n      const _edgeMargin = computed(() => props.edgeMargin);\n      const _forceEdgeMargin = computed(() => props.forceEdgeMargin);\n\n      const calcMinEdge = (direction: 'left' | 'top') => {\n        const pageOffset =\n          direction === 'left' ? state.pageXOffset : state.pageYOffset;\n        const min = _edgeMargin.value + pageOffset;\n        if (_forceEdgeMargin.value) return min;\n        const activatorEdge = state.activatorRect?.[direction];\n        if (activatorEdge === undefined) return min;\n        if (activatorEdge < 0) {\n          return pageOffset;\n        }\n        if (activatorEdge < min) {\n          return activatorEdge;\n        }\n        return min;\n      };\n\n      const calcMaxEdge = (direction: 'right' | 'bottom') => {\n        const isX = direction === 'right';\n        const pageOffset = isX ? state.pageXOffset : state.pageYOffset;\n        const windowSize = isX ? $window.width : $window.height;\n        const max = windowSize - _edgeMargin.value + pageOffset;\n        if (_forceEdgeMargin.value) return max;\n        const activatorEdge = state.activatorRect?.[direction];\n        if (activatorEdge === undefined) return max;\n        if (activatorEdge > windowSize) {\n          return pageOffset + windowSize;\n        }\n        if (activatorEdge + pageOffset > max) {\n          return activatorEdge + pageOffset;\n        }\n        return max;\n      };\n\n      const _minLeft = computed(() => calcMinEdge('left'));\n      const _minTop = computed(() => calcMinEdge('top'));\n      const _maxRight = computed(() => calcMaxEdge('right'));\n      const _maxBottom = computed(() => calcMaxEdge('bottom'));\n\n      const resolveMaxSize = (\n        raw: RawMenuMaxSize | undefined,\n      ): MenuSizeSpec | undefined => {\n        if (raw == null) return raw;\n        if (typeof raw === 'function') {\n          return baseCtx.control.isActive ? raw($window) : undefined;\n        }\n        return raw;\n      };\n      const resolveSize = (size: number | 'fit' | 'free' | undefined) =>\n        size === 'free' ? undefined : size;\n\n      const _width = computed(() => resolveSize(props.width));\n      const _height = computed(() => resolveSize(props.height));\n      const _minWidth = computed(() => resolveSize(props.minWidth));\n      const _minHeight = computed(() => resolveSize(props.minHeight));\n      const _maxWidth = computed(() => resolveMaxSize(props.maxWidth));\n      const _maxHeight = computed(() => resolveMaxSize(props.maxHeight));\n\n      const _positionFlags = computed(() => {\n        let { x, y } = props;\n        if (!y && (!x || x === 'left-inner' || x === 'right-inner')) {\n          y = 'bottom';\n        }\n\n        if (!y) {\n          y = 'center';\n        }\n\n        if (!x) {\n          if (y === 'bottom-inner' || y === 'top-inner') {\n            x = 'left';\n          } else {\n            x = 'center';\n          }\n        }\n\n        return {\n          x,\n          y,\n          xInner: x === 'left-inner' || x === 'right-inner',\n          yInner: y === 'top-inner' || y === 'bottom-inner',\n          left: x === 'left' || x === 'left-inner',\n          right: x === 'right' || x === 'right-inner',\n          top: y === 'top' || y === 'top-inner',\n          bottom: y === 'bottom' || y === 'bottom-inner',\n        };\n      });\n\n      const _rect = computed<VMenuRectInfo | null>(() => {\n        const { rect, activatorRect } = state;\n        if (!rect) return null;\n        if (!activatorRect) return null;\n\n        const { allowOverflow } = props;\n        const { pageXOffset, pageYOffset } = state;\n        const minLeft = _minLeft.value;\n        const minTop = _minTop.value;\n        const maxRight = _maxRight.value;\n        const maxBottom = _maxBottom.value;\n        const distance = _distance.value;\n        const overlapSettings = _overlap.value;\n        const isOverlap = overlapSettings === 'overlap';\n        const disallowOverlap = overlapSettings === 'disallow';\n\n        let computedWidth = _width.value;\n        let computedHeight = _height.value;\n        let computedMinWidth = _minWidth.value;\n        const computedMinHeight = _minHeight.value;\n        let computedMaxWidth = _maxWidth.value;\n        let computedMaxHeight = _maxHeight.value;\n\n        let left: number;\n        let top: number;\n        let width: number;\n        let height: number;\n\n        const { width: myWidth, height: myHeight } = rect;\n\n        const {\n          top: activatorTop,\n          left: activatorLeft,\n          right: activatorRight,\n          bottom: activatorBottom,\n          width: activatorWidth,\n          height: activatorHeight,\n        } = activatorRect;\n\n        const _mw = computedWidth;\n        const _mh = computedHeight;\n\n        if (computedWidth === 'fit')\n          computedWidth = Math.max(activatorWidth, myWidth);\n        if (computedHeight === 'fit')\n          computedHeight = Math.max(activatorHeight, myHeight);\n        if (computedMaxWidth === 'fit') computedMaxWidth = activatorWidth;\n        if (computedMaxHeight === 'fit') computedMaxHeight = activatorHeight;\n\n        if (computedMinWidth === 'fit') computedMinWidth = activatorWidth;\n        if (computedMinHeight === 'fit') computedMinWidth = activatorHeight;\n\n        let {\n          top: isTop,\n          bottom: isBottom,\n          left: isLeft,\n          right: isRight,\n        } = _positionFlags.value;\n\n        const { xInner, yInner } = _positionFlags.value;\n\n        width = typeof computedWidth === 'number' ? computedWidth : myWidth;\n        height = typeof computedHeight === 'number' ? computedHeight : myHeight;\n\n        const overlapHeight = isOverlap ? activatorHeight : 0;\n        const overlapWidth = isOverlap ? activatorWidth : 0;\n        const topFree = activatorTop - _edgeMargin.value + overlapHeight;\n        const bottomFree =\n          $window.height - _edgeMargin.value - activatorBottom + overlapHeight;\n        const leftFree = activatorLeft - _edgeMargin.value + overlapWidth;\n        const rightFree =\n          $window.width - _edgeMargin.value - activatorRight + overlapWidth;\n\n        if (typeof computedMinWidth === 'number' && width < computedMinWidth) {\n          width = computedMinWidth;\n        }\n        if (typeof computedMaxWidth === 'number' && width > computedMaxWidth) {\n          width = computedMaxWidth;\n        }\n        if (\n          typeof computedMinHeight === 'number' &&\n          height < computedMinHeight\n        ) {\n          height = computedMinHeight;\n        }\n        if (\n          typeof computedMaxHeight === 'number' &&\n          height > computedMaxHeight\n        ) {\n          height = computedMaxHeight;\n        }\n\n        if (!yInner && (computedMaxHeight == null || _mh !== 'fit')) {\n          if (isBottom) {\n            if (height > bottomFree) {\n              if (bottomFree < topFree) {\n                isBottom = false;\n                isTop = true;\n                computedMaxHeight = topFree;\n              } else {\n                computedMaxHeight = bottomFree;\n              }\n            }\n          } else if (isTop) {\n            if (height > topFree) {\n              if (topFree < bottomFree) {\n                isTop = false;\n                isBottom = true;\n                computedMaxHeight = bottomFree;\n              } else {\n                computedMaxHeight = topFree;\n              }\n            }\n          }\n        }\n\n        if (!xInner && (computedMaxWidth == null || _mw !== 'fit')) {\n          if (isRight) {\n            if (width > rightFree) {\n              if (rightFree < leftFree) {\n                isRight = false;\n                isLeft = true;\n                computedMaxWidth = leftFree;\n              } else {\n                computedMaxWidth = rightFree;\n              }\n            }\n          } else if (isLeft) {\n            if (width > leftFree) {\n              if (leftFree < rightFree) {\n                isLeft = false;\n                isRight = true;\n                computedMaxWidth = rightFree;\n              } else {\n                computedMaxWidth = leftFree;\n              }\n            }\n          }\n        }\n\n        if (\n          !allowOverflow &&\n          typeof computedMaxWidth === 'number' &&\n          width > computedMaxWidth\n        ) {\n          width = computedMaxWidth;\n        }\n\n        if (\n          !allowOverflow &&\n          typeof computedMaxHeight === 'number' &&\n          height > computedMaxHeight\n        ) {\n          height = computedMaxHeight;\n        }\n\n        if (isTop) {\n          if (yInner) {\n            top = activatorTop;\n          } else {\n            top = activatorTop - height;\n            if (isOverlap) top += activatorHeight;\n          }\n        } else if (isBottom) {\n          if (yInner) {\n            top = activatorBottom - height;\n          } else {\n            top = activatorBottom;\n            if (isOverlap) top -= activatorHeight;\n          }\n        } else {\n          top = activatorTop - (height - activatorHeight) / 2;\n        }\n\n        top += pageYOffset;\n\n        if (isLeft) {\n          if (xInner) {\n            left = activatorLeft;\n          } else {\n            left = activatorLeft - width;\n            if (isOverlap) left += activatorWidth;\n          }\n        } else if (isRight) {\n          if (xInner) {\n            left = activatorRight - width;\n          } else {\n            left = activatorRight;\n            if (isOverlap) left -= activatorWidth;\n          }\n        } else {\n          left = activatorLeft - (width - activatorWidth) / 2;\n        }\n\n        left += pageXOffset;\n\n        if (!isOverlap) {\n          if (!yInner) {\n            if (isBottom) {\n              top += distance;\n            } else if (isTop) {\n              top -= distance;\n            }\n          }\n\n          if (!xInner) {\n            if (isRight) {\n              left += distance;\n            } else if (isLeft) {\n              left -= distance;\n            }\n          }\n        }\n\n        let right = left + width;\n        let bottom = top + height;\n\n        // ==================================================\n        // If it extends beyond the screen (plus edge margin), it will move towards the inside.\n        // ==================================================\n\n        const rightOverflow = right - maxRight;\n        if (rightOverflow > 0) {\n          left -= rightOverflow;\n          right -= rightOverflow;\n          if (isRight && disallowOverlap) {\n            const overlapSize = activatorRight + distance + pageXOffset - left;\n            if (overlapSize > 0) {\n              left += overlapSize;\n              right += overlapSize;\n            }\n          }\n        }\n\n        const bottomOverflow = bottom - maxBottom;\n        if (bottomOverflow > 0) {\n          top -= bottomOverflow;\n          bottom -= bottomOverflow;\n          if (isBottom && disallowOverlap) {\n            const overlapSize = activatorBottom + distance + pageYOffset - top;\n            if (overlapSize > 0) {\n              top += overlapSize;\n              bottom += overlapSize;\n            }\n          }\n        }\n\n        const leftOverflow = minLeft - left;\n        if (leftOverflow > 0) {\n          left += leftOverflow;\n          right += leftOverflow;\n          if (isLeft && disallowOverlap) {\n            const overlapSize =\n              right - (activatorLeft - distance + pageXOffset);\n            if (overlapSize > 0) {\n              left -= overlapSize;\n              right -= overlapSize;\n            }\n          }\n        }\n\n        const topOverflow = minTop - top;\n        if (topOverflow > 0) {\n          top += topOverflow;\n          bottom += topOverflow;\n          if (isTop && disallowOverlap) {\n            const overlapSize =\n              bottom - (activatorTop - distance + pageYOffset);\n            if (overlapSize > 0) {\n              top -= overlapSize;\n              bottom -= overlapSize;\n            }\n          }\n        }\n\n        // ==================================================\n        // If allowOverflow is disabled and it extends beyond the screen (plus edge margin), then reduce the size.\n        // ==================================================\n        if (!allowOverflow) {\n          const overflowRight = right - maxRight;\n          if (overflowRight > 0) {\n            width -= overflowRight;\n            right -= overflowRight;\n          }\n          const overflowBottom = bottom - maxBottom;\n          if (overflowBottom > 0) {\n            height -= overflowBottom;\n            bottom -= overflowBottom;\n          }\n          const overflowLeft = minLeft - left;\n          if (overflowLeft > 0) {\n            width -= overflowLeft;\n            left += overflowLeft;\n          }\n          const overflowTop = minTop - top;\n          if (overflowTop > 0) {\n            height -= overflowTop;\n            top += overflowTop;\n          }\n        }\n\n        const bubbleStyles: VMenuRectInfo['bubble']['styles'] = {};\n        if (isTop) {\n          if (yInner) {\n            bubbleStyles['--bubble-top'] = `${activatorHeight * 0.5}px`;\n          } else {\n            bubbleStyles['--bubble-top'] = '100%';\n          }\n        } else if (isBottom) {\n          if (yInner) {\n            bubbleStyles['--bubble-bottom'] = `${activatorHeight * 0.5}px`;\n          } else {\n            bubbleStyles['--bubble-bottom'] = '100%';\n          }\n        } else {\n          bubbleStyles['--bubble-top'] = '50%';\n          // bubbleStyles['--bubble-top'] = `${\n          //   activatorHeight * 0.5 + (activatorTop - top)\n          // }px`;\n        }\n\n        if (isLeft) {\n          if (xInner) {\n            bubbleStyles['--bubble-left'] = `${Math.min(\n              width * 0.5,\n              activatorWidth * 0.5,\n            )}px`;\n          } else {\n            bubbleStyles['--bubble-left'] = '100%';\n          }\n        } else if (isRight) {\n          if (xInner) {\n            bubbleStyles['--bubble-right'] = `${Math.min(\n              width * 0.5,\n              activatorWidth * 0.5,\n            )}px`;\n          } else {\n            bubbleStyles['--bubble-right'] = '100%';\n          }\n        } else {\n          bubbleStyles['--bubble-left'] = `${\n            activatorWidth * 0.5 + (activatorLeft - left)\n          }px`;\n        }\n\n        return {\n          left,\n          right,\n          top,\n          bottom,\n          width,\n          height,\n          positions: {\n            top: isTop,\n            bottom: isBottom,\n            left: isLeft,\n            right: isRight,\n            xInner,\n            yInner,\n          },\n          bubble: {\n            styles: bubbleStyles,\n          },\n        };\n      });\n\n      const _styles = computed<CSSProperties>(() => {\n        const styles: CSSProperties = {\n          position: 'absolute',\n        };\n        const rect = _rect.value;\n        if (rect) {\n          styles.left = `${rect.left}px`;\n          styles.top = `${rect.top}px`;\n          styles.width = `${rect.width}px`;\n          styles.height = `${rect.height}px`;\n\n          Object.assign(styles, rect.bubble.styles);\n        } else {\n          styles.visibility = 'hidden';\n        }\n        return styles;\n      });\n\n      const updatePageOffset = () => {\n        const scrollingElement = getScrollingElement();\n        if (scrollingElement) {\n          state.pageXOffset = scrollingElement.scrollLeft;\n          state.pageYOffset = scrollingElement.scrollTop;\n        }\n      };\n\n      const updateMenuRect = (menuBodyRect?: ResizeDirectivePayload) => {\n        const content = control.contentRef.value;\n        const body = _bodyRef.value;\n\n        if (!content || !body) {\n          state.rect = null;\n          return;\n        }\n\n        const originalDisplay = content.style.display;\n        const originalWidth = content.style.width;\n        const originalHeight = content.style.height;\n        const originalMaxWidth = content.style.maxWidth;\n        const originalMaxHeight = content.style.maxHeight;\n\n        content.style.display = '';\n        content.style.width = '';\n        content.style.height = '';\n        content.style.maxWidth = '';\n        content.style.maxHeight = '';\n\n        const rect = body.getBoundingClientRect();\n\n        content.style.display = originalDisplay;\n        content.style.width = originalWidth;\n        content.style.height = originalHeight;\n        content.style.maxWidth = originalMaxWidth;\n        content.style.maxHeight = originalMaxHeight;\n\n        state.rect = {\n          left: rect.left,\n          right: rect.right,\n          top: rect.top,\n          bottom: rect.bottom,\n          // width: menuBodyRect ? menuBodyRect.width : rect.width,\n          // height: menuBodyRect ? menuBodyRect.height : rect.height,\n          width: rect.width,\n          height: rect.height,\n        };\n      };\n\n      const getCurrentScrollParents = ():\n        | {\n            activator: HTMLElement;\n            parents: HTMLElement[];\n          }\n        | undefined => {\n        const activator = getActivatorElement(control);\n        if (!activator) return;\n        const parents = getScrollParents(activator);\n        return {\n          activator,\n          parents,\n        };\n      };\n\n      const updateActivatorRect = () => {\n        const el = getActivatorElement(control);\n        if (!el) {\n          // state.activatorRect = null;\n          return;\n        }\n        const rect = el.getBoundingClientRect();\n\n        const { width, height } = rect;\n        if (width === 0 && height === 0) return;\n\n        state.activatorRect = {\n          left: rect.left,\n          right: rect.right,\n          top: rect.top,\n          bottom: rect.bottom,\n          width,\n          height,\n        };\n      };\n\n      const updateRects = (menuBodyRect?: ResizeDirectivePayload) => {\n        if (!IN_WINDOW) return;\n        updatePageOffset();\n        updateMenuRect(menuBodyRect);\n        updateActivatorRect();\n      };\n\n      let _currentScrollParents:\n        | {\n            activator: HTMLElement;\n            parents: HTMLElement[];\n          }\n        | undefined;\n      let _activatorResizeObserver: ResizeObserver | undefined;\n      let _activatorResizeRAF_ID: number | undefined;\n\n      const _clearActivatorResizeRAF = () => {\n        if (_activatorResizeRAF_ID !== undefined) {\n          cancelAnimationFrame(_activatorResizeRAF_ID);\n          _activatorResizeRAF_ID = undefined;\n        }\n      };\n\n      const _handleActivatorResize = () => {\n        _clearActivatorResizeRAF();\n        _activatorResizeRAF_ID = requestAnimationFrame(() => {\n          _clearActivatorResizeRAF();\n          updateRects();\n        });\n      };\n\n      const handleScrollerScroll = (ev: Event) => {\n        updateRects();\n\n        const _hideOnScrollOffset = hideOnScrollOffset.value;\n        if (_hideOnScrollOffset === undefined) return;\n        if (\n          Math.abs(state.pageYOffset - startOffsets.value.pageYOffset) >\n            _hideOnScrollOffset ||\n          Math.abs(state.pageXOffset - startOffsets.value.pageXOffset) >\n            _hideOnScrollOffset\n        ) {\n          control.close();\n        }\n      };\n\n      const resetScrollerScroll = () => {\n        if (_activatorResizeObserver) {\n          _activatorResizeObserver.disconnect();\n          _activatorResizeObserver = undefined;\n        }\n        _clearActivatorResizeRAF();\n        if (!_currentScrollParents) return;\n        for (const el of _currentScrollParents.parents) {\n          const eventTarget = el === document.documentElement ? document : el;\n          eventTarget.removeEventListener('scroll', handleScrollerScroll, {\n            capture: false,\n          });\n        }\n        _currentScrollParents = undefined;\n      };\n\n      const setupScrollerScroll = () => {\n        resetScrollerScroll();\n        _currentScrollParents = getCurrentScrollParents();\n        if (!_currentScrollParents) return;\n\n        const { activator, parents } = _currentScrollParents;\n        _activatorResizeObserver = new ResizeObserver(_handleActivatorResize);\n        _activatorResizeObserver.observe(activator);\n\n        for (const el of parents) {\n          const eventTarget = el === document.documentElement ? document : el;\n          eventTarget.addEventListener('scroll', handleScrollerScroll, {\n            capture: false,\n            passive: true,\n          });\n        }\n      };\n\n      watch(\n        () => control.isActive,\n        (isActive) =>\n          isActive ? setupScrollerScroll() : resetScrollerScroll(),\n      );\n\n      onBeforeUnmount(() => {\n        _disposeIntersectionObserver();\n        resetScrollerScroll();\n        menuResizeHandler._clear();\n      });\n\n      const stackMenuCtx: typeof baseCtx = {\n        ...baseCtx,\n        get pageXOffset() {\n          return state.pageXOffset;\n        },\n        get pageYOffset() {\n          return state.pageYOffset;\n        },\n        get distance() {\n          return _distance.value;\n        },\n        get resizeWatchDebounce() {\n          return _resizeWatchDebounce.value;\n        },\n        get overlap() {\n          return _overlap.value;\n        },\n        get edgeMargin() {\n          return _edgeMargin.value;\n        },\n        get minLeft() {\n          return _minLeft.value;\n        },\n        get minTop() {\n          return _minTop.value;\n        },\n        get maxRight() {\n          return _maxRight.value;\n        },\n        get maxBottom() {\n          return _maxBottom.value;\n        },\n        get rect() {\n          return _rect.value;\n        },\n        get styles() {\n          return _styles.value;\n        },\n        get attrs() {\n          return {\n            // class: snackClasses.value,\n            ref: _bodyRef,\n          };\n        },\n        bodyRef: _bodyRef,\n        scrollerRef: _scrollerRef,\n        updatePageOffset,\n        updateMenuRect,\n        updateActivatorRect,\n        updateRects,\n      };\n\n      const render = settings.setup?.(stackMenuCtx as any) || settings.render;\n      if (!render) {\n        throw new VueStackError('render function is required.');\n      }\n\n      const hostAttrs = computed(() => {\n        const { attrs = {} } = settings;\n        const _attrs =\n          typeof attrs === 'function' ? attrs(stackMenuCtx as any) : attrs;\n\n        return {\n          ..._attrs,\n          class: ['v-stack-menu', _attrs.class],\n        };\n      });\n\n      return () =>\n        control.render((children) => (\n          <div {...hostAttrs.value} style={_styles.value} ref={_scrollerRef}>\n            {withDirectives(render(children, stackMenuCtx as any), [\n              resizeDirectiveArgument(menuResizeHandler),\n            ])}\n          </div>\n        ));\n    },\n  });\n\n  return Component;\n}\n"],"mappings":"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"}