{"version":3,"file":"toast.mjs","sources":["../src/toast/ToastRoot.ts","../src/toast/ToastClose.ts","../src/toast/ToastClose.vue","../src/toast/ToastProvider.ts","../src/toast/utils.ts","../src/toast/ToastAnnounce.ts","../src/toast/collection.ts","../src/toast/ToastViewport.ts","../src/toast/ToastRootImpl.ts","../src/toast/ToastRootImpl.vue","../src/toast/ToastRoot.vue","../src/toast/ToastViewport.vue"],"sourcesContent":["import type { EmitsToHookProps, PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/typeUtils.ts'\nimport { type Ref, shallowRef } from 'vue'\nimport { createContext, useControllableStateV2 } from '../hooks/index.ts'\nimport { usePresence } from '../presence/usePresence.ts'\n\nexport interface ToastRootProps {\n  open?: boolean\n  defaultOpen?: boolean\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_TOAST_ROOT_PROPS = {\n  open: undefined,\n  defaultOpen: undefined,\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<ToastRootProps>\n\nexport type ToastRootEmits = {\n  'update:open': [open: boolean]\n}\n\nexport interface ToastContext {\n  el: Ref<HTMLElement | undefined>\n  open: Ref<boolean>\n  onChangeOpen: (v: boolean) => void\n  onClose: () => void\n  setOnClose: (onClose: () => void) => void\n}\n\nexport const [provideToastRootContext, useToastRootContext] = createContext<ToastContext>('Toast')\n\nexport interface UseToastRootProps extends EmitsToHookProps<ToastRootEmits> {\n  open?: () => boolean | undefined\n  defaultOpen?: ToastRootProps['defaultOpen']\n  forceMount?: ToastRootProps['forceMount']\n}\n\nexport function useToastRoot(props: UseToastRootProps = {}): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n}> {\n  const { defaultOpen = true } = props\n\n  const el = shallowRef<HTMLElement>()\n\n  const open = useControllableStateV2(\n    props.open,\n    props.onUpdateOpen,\n    defaultOpen,\n  )\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(el, open)\n\n  let _onClose = () => { }\n\n  provideToastRootContext({\n    el,\n    open,\n    onChangeOpen(v) {\n      open.value = v\n    },\n    onClose: () => _onClose(),\n    setOnClose(onClose) {\n      _onClose = onClose\n    },\n  })\n\n  return {\n    isPresent,\n  }\n}\n\nexport type SwipeEvent = { currentTarget: EventTarget & HTMLLIElement } & Omit<\n  CustomEvent<{ originalEvent: PointerEvent, delta: { x: number, y: number } }>,\n  'currentTarget'\n>\n\nexport const TOAST_SWIPE_START = 'toast.swipeStart'\nexport const TOAST_SWIPE_MOVE = 'toast.swipeMove'\nexport const TOAST_SWIPE_CANCEL = 'toast.swipeCancel'\nexport const TOAST_SWIPE_END = 'toast.swipeEnd'\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useToastRootContext } from './ToastRoot.ts'\n\nexport interface ToastCloseProps {\n  as?: PrimitiveProps['as']\n}\n\nexport const DEFAULT_TOAST_CLOSE_PROPS = {\n  as: 'button',\n} satisfies PrimitiveDefaultProps<ToastCloseProps>\n\nexport interface UseToastCloseProps {\n  altText?: string\n}\n\nexport function useToastClose(): RadixPrimitiveReturns {\n  const interactiveContext = useToastRootContext('ToastClose')\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    interactiveContext.onClose()\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'type': 'button',\n        'data-radix-toast-announce-exclude': '',\n        onClick,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_TOAST_CLOSE_PROPS, type ToastCloseProps, useToastClose } from './ToastClose.ts'\n\ndefineOptions({\n  name: 'ToastClose',\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<ToastCloseProps>(), DEFAULT_TOAST_CLOSE_PROPS)\n\nconst toastClose = useToastClose()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(toastClose.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n","import { type MaybeRef, type MaybeRefOrGetter, type Ref, shallowRef } from 'vue'\nimport { createContext, type MutableRefObject, useRef } from '../hooks/index.ts'\n\nexport interface ToastProviderProps {\n  /**\n   * An author-localized label for each toast. Used to help screen reader users\n   * associate the interruption with a toast.\n   * @defaultValue 'Notification'\n   */\n  label?: string\n  /**\n   * Time in milliseconds that each toast should remain visible for.\n   * @defaultValue 5000\n   */\n  duration?: number\n  /**\n   * Direction of pointer swipe that should close the toast.\n   * @defaultValue 'right'\n   */\n  swipeDirection?: MaybeRef<SwipeDirection>\n  /**\n   * Distance in pixels that the swipe must pass before a close is triggered.\n   * @defaultValue 50\n   */\n  swipeThreshold?: MaybeRefOrGetter<number>\n}\n\nexport type SwipeDirection = 'up' | 'down' | 'left' | 'right'\n\nexport interface ToastProviderContext {\n  label: string\n  duration: number\n  swipeDirection: Ref<SwipeDirection>\n  swipeThreshold: MaybeRefOrGetter<number>\n  toastCount: Ref<number>\n  viewport: Ref<HTMLElement | undefined>\n  onToastAdd: () => void\n  onToastRemove: () => void\n  isFocusedToastEscapeKeyDownRef: MutableRefObject<boolean>\n  isClosePausedRef: MutableRefObject<boolean>\n}\n\nexport const [provideToastProviderContext, useToastProviderContext] = createContext<ToastProviderContext>('Toast')\n\nexport function useToastProvider(props: ToastProviderProps = {}) {\n  const {\n    label = 'Notification',\n    duration = 5000,\n    swipeDirection = 'right',\n    swipeThreshold = 50,\n  } = props\n  const viewport = shallowRef<HTMLElement>()\n  const toastCount = shallowRef(0)\n  const isFocusedToastEscapeKeyDownRef = useRef(false)\n  const isClosePausedRef = useRef(false)\n\n  provideToastProviderContext({\n    label,\n    duration,\n    swipeDirection: shallowRef(swipeDirection),\n    swipeThreshold,\n    toastCount,\n    viewport,\n    onToastAdd() {\n      toastCount.value += 1\n    },\n    onToastRemove() {\n      toastCount.value -= 1\n    },\n    isFocusedToastEscapeKeyDownRef,\n    isClosePausedRef,\n  })\n}\n","import type { SwipeDirection } from './ToastProvider'\n\nexport function getAnnounceTextContent(container: HTMLElement): string[] {\n  const textContent: string[] = []\n\n  // error TS2488: Type 'NodeListOf<ChildNode>' must have a '[Symbol.iterator]()' method that returns an iterator. (2488) is fixed.\n  const childNodes = Array.from(container?.childNodes || [])\n\n  for (const node of childNodes) {\n    if (node.nodeType === node.TEXT_NODE && node.textContent)\n      textContent.push(node.textContent)\n\n    if (isHTMLElement(node)) {\n      const isHidden = node.ariaHidden || node.hidden || node.style.display === 'none'\n      const isExcluded = node.dataset.radixToastAnnounceExclude === ''\n\n      if (!isHidden) {\n        if (isExcluded) {\n          const altText = node.dataset.radixToastAnnounceAlt\n          if (altText)\n            textContent.push(altText)\n        }\n        else {\n          textContent.push(...getAnnounceTextContent(node))\n        }\n      }\n    }\n  }\n\n  // We return a collection of text rather than a single concatenated string.\n  // This allows SR VO to naturally pause break between nodes while announcing.\n  return textContent\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\nexport function handleAndDispatchCustomEvent< E extends CustomEvent, OriginalEvent extends Event>(\n  name: string,\n  handler: ((event: E) => void) | undefined,\n  detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n) {\n  const currentTarget = detail.originalEvent.currentTarget as HTMLElement\n  const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail })\n  if (handler)\n    currentTarget.addEventListener(name, handler as EventListener, { once: true })\n\n  currentTarget.dispatchEvent(event)\n}\n\nexport function isDeltaInDirection(delta: { x: number, y: number }, direction: SwipeDirection, threshold = 0) {\n  const deltaX = Math.abs(delta.x)\n  const deltaY = Math.abs(delta.y)\n  const isDeltaX = deltaX > deltaY\n\n  if (direction === 'left' || direction === 'right')\n    return isDeltaX && deltaX > threshold\n\n  return !isDeltaX && deltaY > threshold\n}\n\nexport function useNextFrame(callback = () => {}) {\n  let raf1 = 0\n  let raf2 = 0\n  raf1 = window.requestAnimationFrame(() => (raf2 = window.requestAnimationFrame(callback)))\n\n  return () => {\n    window.cancelAnimationFrame(raf1)\n    window.cancelAnimationFrame(raf2)\n  }\n}\n\nexport function isHTMLElement(node: any): node is HTMLElement {\n  return node.nodeType === node.ELEMENT_NODE\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nexport function getTabbableCandidates(container: HTMLElement) {\n  const nodes: HTMLElement[] = []\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode(node: HTMLInputElement) {\n      const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden'\n      if (node.disabled || node.hidden || isHiddenInput)\n        return NodeFilter.FILTER_SKIP\n      // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n      // runtime's understanding of tabbability, so this automatically accounts\n      // for any kind of element that could be tabbed to.\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP\n    },\n  })\n  while (walker.nextNode()) {\n    nodes.push(walker.currentNode as HTMLElement)\n  }\n  // we do not take into account the order of nodes with positive `tabIndex` as it\n  // hinders accessibility to have tab order different from visual order.\n  return nodes\n}\n","import { onBeforeUnmount, onMounted, shallowRef } from 'vue'\nimport { useToastProviderContext } from './ToastProvider.ts'\nimport { useNextFrame } from './utils.ts'\n\nexport function useToastAnnounce() {\n  const context = useToastProviderContext('ToastAnnounce')\n  const renderAnnounceText = shallowRef(false)\n  const isAnnounced = shallowRef(false)\n\n  let timer: number = 0\n  let clear: () => void\n\n  onMounted(() => {\n    // cleanup after announcing\n    timer = window.setTimeout(() => {\n      isAnnounced.value = true\n      timer = 0\n    }, 1000)\n\n    // render text content in the next frame to ensure toast is announced in NVDA\n    clear = useNextFrame(() => {\n      renderAnnounceText.value = true\n    })\n  })\n\n  onBeforeUnmount(() => {\n    if (timer)\n      window.clearTimeout(timer)\n    clear?.()\n  })\n\n  return {\n    isAnnounced,\n    renderAnnounceText,\n    label: context.label,\n  }\n}\n","import { createCollection } from '../collection/index.ts'\n\nexport const [Collection, useCollection] = createCollection<HTMLLIElement>('Toast')\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveElAttrs, RadixPrimitiveGetAttrs, RadixPrimitiveReturns } from '../shared/typeUtils.ts'\nimport { isClient } from '@vueuse/core'\nimport { computed, onBeforeUnmount, onMounted, onWatcherCleanup, type Ref, watchEffect } from 'vue'\nimport { useDismissableLayerBranch } from '../dismissable-layer/index.ts'\nimport { useRef } from '../hooks/useRef.ts'\nimport { focusFirst } from '../shared/focusFirst.ts'\nimport { type IAttrsData, mergePrimitiveAttrs } from '../shared/mergeProps.ts'\nimport { VISUALLY_HIDDEN_STYLE } from '../visually-hidden/VisuallyHidden.ts'\nimport { Collection, useCollection } from './collection.ts'\nimport { useToastProviderContext } from './ToastProvider.ts'\nimport { getTabbableCandidates } from './utils.ts'\n\nexport interface ToastViewportProps {\n  as?: PrimitiveProps['as']\n  /**\n   * The keys to use as the keyboard shortcut that will move focus to the toast viewport.\n   * @defaultValue ['F8']\n   */\n  hotkey?: string[]\n  /**\n   * An author-localized label for the toast viewport to provide context for screen reader users\n   * when navigating page landmarks. The available `{hotkey}` placeholder will be replaced for you.\n   * @defaultValue 'Notifications ({hotkey})'\n   */\n  label?: string\n}\n\nexport const VIEWPORT_PAUSE = 'toast.viewportPause'\nexport const VIEWPORT_RESUME = 'toast.viewportResume'\n\nexport interface UseToastViewportProps {\n  hotkey?: string[]\n  label?: string\n}\n\nexport function useToastViewport(props: UseToastViewportProps = {}): RadixPrimitiveReturns<{\n  isShowFocusProxy: Ref<boolean>\n  wrapperAttrs: () => PrimitiveElAttrs\n  headFocusProxy: () => PrimitiveElAttrs\n  tailFocusProxy: () => PrimitiveElAttrs\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const {\n    hotkey = ['F8'],\n    label = 'Notifications ({hotkey})',\n  } = props\n\n  const context = useToastProviderContext('ToastViewport')\n\n  const wrapperRef = useRef<HTMLElement>()\n  function setWrapperEl(v: any) {\n    wrapperRef.value = v\n  }\n  let headFocusProxyRef: HTMLElement | undefined\n  function setHeadFocusProxyEl(v: any) {\n    headFocusProxyRef = v\n  }\n  let tailFocusProxyRef: HTMLElement | undefined\n  function setTailFocusProxyRef(v: any) {\n    tailFocusProxyRef = v\n  }\n  const viewportRef = useRef<HTMLElement>()\n\n  const collеctionContext = Collection.provideCollectionContext(viewportRef)\n  const getItems = useCollection(collеctionContext)\n\n  function setViewportEl(v: HTMLElement | undefined) {\n    viewportRef.value = v\n    context.viewport.value = v\n  }\n\n  const ariaLabel = label.replace('{hotkey}', hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, ''))\n\n  const hasToasts = computed(() => context.toastCount.value > 0)\n\n  if (isClient) {\n    function handlePause() {\n      if (!context.isClosePausedRef.value) {\n        const pauseEvent = new CustomEvent(VIEWPORT_PAUSE)\n        viewportRef.value?.dispatchEvent(pauseEvent)\n        context.isClosePausedRef.value = true\n      }\n    }\n\n    function handleResume() {\n      if (context.isClosePausedRef.value) {\n        const resumeEvent = new CustomEvent(VIEWPORT_RESUME)\n        viewportRef.value?.dispatchEvent(resumeEvent)\n        context.isClosePausedRef.value = false\n      }\n    }\n\n    function handleFocusOutResume(event: FocusEvent) {\n      const isFocusMovingOutside = !wrapperRef.value?.contains(event.relatedTarget as HTMLElement)\n      if (isFocusMovingOutside)\n        handleResume()\n    }\n\n    function handlePointerLeaveResume() {\n      const isFocusInside = wrapperRef.value?.contains(document.activeElement)\n      if (!isFocusInside)\n        handleResume()\n    }\n\n    watchEffect(() => {\n      const wrapper = wrapperRef.value\n      if (!hasToasts.value || !wrapper || !viewportRef.value)\n        return\n\n      // Toasts are not in the viewport React tree so we need to bind DOM events\n      wrapper.addEventListener('focusin', handlePause)\n      wrapper.addEventListener('focusout', handleFocusOutResume)\n      wrapper.addEventListener('pointermove', handlePause)\n      wrapper.addEventListener('pointerleave', handlePointerLeaveResume)\n      window.addEventListener('blur', handlePause)\n      window.addEventListener('focus', handleResume)\n\n      onWatcherCleanup(() => {\n        wrapper.removeEventListener('focusin', handlePause)\n        wrapper.removeEventListener('focusout', handleFocusOutResume)\n        wrapper.removeEventListener('pointermove', handlePause)\n        wrapper.removeEventListener('pointerleave', handlePointerLeaveResume)\n        window.removeEventListener('blur', handlePause)\n        window.removeEventListener('focus', handleResume)\n      })\n    })\n  }\n\n  function getSortedTabbableCandidates({ tabbingDirection }: { tabbingDirection: 'forwards' | 'backwards' }) {\n    const toastItems = getItems()\n\n    const tabbableCandidates: HTMLElement[][] = []\n\n    for (const toastItem of toastItems) {\n      const toastNode = toastItem\n      const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)]\n\n      tabbableCandidates.push(tabbingDirection === 'forwards' ? toastTabbableCandidates : toastTabbableCandidates.reverse())\n    }\n\n    return (tabbingDirection === 'forwards' ? tabbableCandidates.reverse() : tabbableCandidates).flat()\n  }\n\n  function handleViewportKeydown(event: KeyboardEvent) {\n    const isMetaKey = event.altKey || event.ctrlKey || event.metaKey\n    const isTabKey = event.key === 'Tab' && !isMetaKey\n\n    if (!isTabKey)\n      return\n\n    const focusedElement = document.activeElement\n    const isTabbingBackwards = event.shiftKey\n    const targetIsViewport = event.target === viewportRef.value\n\n    // If we're back tabbing after jumping to the viewport then we simply\n    // proxy focus out to the preceding document\n    if (targetIsViewport && isTabbingBackwards) {\n      headFocusProxyRef?.focus()\n      return\n    }\n\n    const tabbingDirection = isTabbingBackwards ? 'backwards' : 'forwards'\n    const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection })\n    const index = sortedCandidates.findIndex(candidate => candidate === focusedElement)\n\n    if (focusFirst(sortedCandidates.slice(index + 1))) {\n      event.preventDefault()\n    }\n    else {\n      // If we can't focus that means we're at the edges so we\n      // proxy to the corresponding exit point and let the browser handle\n      // tab/shift+tab keypress and implicitly pass focus to the next valid element in the document\n      if (isTabbingBackwards)\n        headFocusProxyRef?.focus()\n      else\n        tailFocusProxyRef?.focus()\n    }\n  }\n\n  function handleDocumentKeydown(event: KeyboardEvent) {\n    // we use `event.code` as it is consistent regardless of meta keys that were pressed.\n    // for example, `event.key` for `Control+Alt+t` is `†` and `t !== †`\n    const isHotkeyPressed = hotkey.every(key => (event as any)[key] || event.code === key)\n    if (isHotkeyPressed)\n      viewportRef.value?.focus()\n  }\n\n  onMounted(() => {\n    // We programmatically manage tabbing as we are unable to influence\n    // the source order with portals, this allows us to reverse the\n    // tab order so that it runs from most recent toast to least\n\n    // Toasts are not in the viewport React tree so we need to bind DOM events\n    viewportRef.value?.addEventListener('keydown', handleViewportKeydown)\n\n    document.addEventListener('keydown', handleDocumentKeydown)\n  })\n\n  onBeforeUnmount(() => {\n    viewportRef.value?.removeEventListener('keydown', handleViewportKeydown)\n\n    document.removeEventListener('keydown', handleDocumentKeydown)\n  })\n\n  function useFocusProxyHandler(cb: () => void) {\n    return (event: FocusEvent) => {\n      const prevFocusedElement = event.relatedTarget as HTMLElement | null\n      const isFocusFromOutsideViewport = !context.viewport.value?.contains(prevFocusedElement)\n      if (!isFocusFromOutsideViewport)\n        return\n      cb()\n    }\n  }\n\n  const handleHeadFocusProxyFocus = useFocusProxyHandler(() => {\n    const tabbableCandidates = getSortedTabbableCandidates({\n      tabbingDirection: 'forwards',\n    })\n    focusFirst(tabbableCandidates)\n  })\n\n  const handleTailFocusProxyFocus = useFocusProxyHandler(() => {\n    const tabbableCandidates = getSortedTabbableCandidates({\n      tabbingDirection: 'backwards',\n    })\n    focusFirst(tabbableCandidates)\n  })\n\n  const dismissableLayerBranch = useDismissableLayerBranch({ elRef: wrapperRef })\n\n  const headFocusProxyAttrs: IAttrsData = {\n    'ref': setHeadFocusProxyEl,\n    'aria-hidden': true,\n    'tabindex': 0,\n    'style': {\n      ...VISUALLY_HIDDEN_STYLE,\n      position: 'fixed',\n    },\n    'onFocus': handleHeadFocusProxyFocus,\n  }\n\n  const tailFocusProxyAttrs: IAttrsData = {\n    'ref': setTailFocusProxyRef,\n    'aria-hidden': true,\n    'tabindex': 0,\n    'style': {\n      ...VISUALLY_HIDDEN_STYLE,\n      position: 'fixed',\n    },\n    'onFocus': handleTailFocusProxyFocus,\n  }\n\n  return {\n    isShowFocusProxy: hasToasts,\n    wrapperAttrs() {\n      const attrs: IAttrsData = {\n        'ref': setWrapperEl,\n        'role': 'region',\n        'aria-label': ariaLabel,\n        'tabindex': -1,\n        'style': {\n          // incase list has size when empty (e.g. padding), we remove pointer events so\n          // it doesn't prevent interactions with page elements that it overlays\n          pointerEvents: hasToasts.value ? undefined : 'none',\n        },\n      }\n\n      return dismissableLayerBranch.attrs([attrs])\n    },\n    headFocusProxy() {\n      return headFocusProxyAttrs\n    },\n    tailFocusProxy() {\n      return tailFocusProxyAttrs\n    },\n    attrs(extraAttrs) {\n      const attrs = {\n        elRef: setViewportEl,\n        tabindex: -1,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { EmitsToHookProps, PrimitiveDefaultProps, PrimitiveElAttrs, RadixPrimitiveGetAttrs, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { isClient } from '@vueuse/core'\nimport { computed, onBeforeUnmount, onMounted, onWatcherCleanup, type Ref, toValue, watch, watchEffect } from 'vue'\nimport { DATA_COLLECTION_ITEM } from '../collection/Collection.ts'\nimport { type DismissableLayerEmits, useDismissableLayer } from '../dismissable-layer/index.ts'\nimport { useToastProviderContext } from './ToastProvider.ts'\nimport { type SwipeEvent, TOAST_SWIPE_CANCEL, TOAST_SWIPE_END, TOAST_SWIPE_MOVE, TOAST_SWIPE_START, useToastRootContext } from './ToastRoot.ts'\nimport { VIEWPORT_PAUSE, VIEWPORT_RESUME } from './ToastViewport.ts'\nimport { getAnnounceTextContent, handleAndDispatchCustomEvent, isDeltaInDirection } from './utils.ts'\n\nexport interface ToastRootImplProps {\n  as?: PrimitiveProps['as']\n  type?: 'foreground' | 'background'\n  /**\n   * Time in milliseconds that toast should remain visible for. Overrides value\n   * given to `ToastProvider`.\n   */\n  duration?: number\n}\n\nexport const DEFAULT_TOAST_ROOT_IMPL_PROPS = {\n  as: 'li',\n} satisfies PrimitiveDefaultProps<ToastRootImplProps>\n\nexport type ToastRootImplEmits = {\n  escapeKeydown: DismissableLayerEmits['escapeKeydown']\n  pause: []\n  resume: []\n  swipeStart: [event: SwipeEvent]\n  swipeMove: [event: SwipeEvent]\n  swipeEnd: [event: SwipeEvent]\n  swipeCancel: [event: SwipeEvent]\n}\n\nexport interface UseToastRootImplProps extends EmitsToHookProps<ToastRootImplEmits> {\n  type?: ToastRootImplProps['type']\n  duration?: () => number | undefined\n}\n\nexport function useToastRootImpl(props: UseToastRootImplProps): RadixPrimitiveReturns<{\n  type: 'foreground' | 'background'\n  viewport: Ref<HTMLElement | undefined>\n  announceTextContent: Ref<string | undefined>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const {\n    type = 'foreground',\n  } = props\n\n  const context = useToastProviderContext('ToastRootImpl')\n  const contextToastRoot = useToastRootContext('ToastRootImpl')\n\n  function setElRef(node: HTMLElement | undefined) {\n    contextToastRoot.el.value = node\n  }\n\n  let pointerStartRef: { x: number, y: number } | undefined\n  let swipeDeltaRef: { x: number, y: number } | undefined\n  const duration = () => props.duration?.() || context.duration\n  let closeTimerStartTimeRef = 0\n  let closeTimerRemainingTimeRef = duration()\n  let closeTimerRef = 0\n  const { onToastAdd, onToastRemove } = context\n\n  function handleClose() {\n    // focus viewport if focus is within toast to read the remaining toast\n    // count to SR users and ensure focus isn't lost\n    const isFocusInToast = contextToastRoot.el.value?.contains(document.activeElement)\n    if (isFocusInToast)\n      context.viewport.value?.focus()\n    contextToastRoot.onChangeOpen(false)\n  }\n  contextToastRoot.setOnClose(handleClose)\n\n  function startTimer(duration: number) {\n    if (!duration || duration === Infinity)\n      return\n    window.clearTimeout(closeTimerRef)\n    closeTimerStartTimeRef = new Date().getTime()\n    closeTimerRef = window.setTimeout(handleClose, duration)\n  }\n\n  function handleResume() {\n    startTimer(closeTimerRemainingTimeRef)\n    props.onResume?.()\n  }\n\n  function handlePause() {\n    const elapsedTime = new Date().getTime() - closeTimerStartTimeRef\n    closeTimerRemainingTimeRef = closeTimerRemainingTimeRef - elapsedTime\n    window.clearTimeout(closeTimerRef)\n    props.onPause?.()\n  }\n\n  watch(context.viewport, (viewport) => {\n    if (!viewport)\n      return\n\n    viewport.addEventListener(VIEWPORT_PAUSE, handlePause)\n    viewport.addEventListener(VIEWPORT_RESUME, handleResume)\n\n    onWatcherCleanup(() => {\n      viewport.removeEventListener(VIEWPORT_PAUSE, handlePause)\n      viewport.removeEventListener(VIEWPORT_RESUME, handleResume)\n    })\n  }, { immediate: true })\n\n  // start timer when toast opens or duration changes.\n  // we include `open` in deps because closed !== unmounted when animating\n  // so it could reopen before being completely unmounted\n  if (isClient) {\n    watchEffect(() => {\n      if (!contextToastRoot.open.value || context.isClosePausedRef.value)\n        return\n\n      startTimer(duration())\n      onWatcherCleanup(() => {\n        window.clearTimeout(closeTimerRef)\n      })\n    })\n  }\n\n  onMounted(() => {\n    onToastAdd()\n  })\n\n  onBeforeUnmount(() => {\n    onToastRemove()\n  })\n\n  const announceTextContent = computed(() => {\n    if (!contextToastRoot.el.value)\n      return undefined\n    let text = ''\n\n    for (const item of getAnnounceTextContent(contextToastRoot.el.value)) {\n      text += `${item} `\n    }\n\n    return text\n  })\n\n  function onSwipeStart(event: SwipeEvent) {\n    props.onSwipeStart?.(event)\n    if (event.defaultPrevented)\n      return\n    event.currentTarget?.setAttribute('data-swipe', 'start')\n  }\n\n  function onSwipeMove(event: SwipeEvent) {\n    props.onSwipeMove?.(event)\n    if (event.defaultPrevented)\n      return\n    event.currentTarget.setAttribute('data-swipe', 'move')\n    event.currentTarget.style.setProperty('--radix-toast-swipe-move-x', `${event.detail.delta.x}px`)\n    event.currentTarget.style.setProperty('--radix-toast-swipe-move-y', `${event.detail.delta.y}px`)\n  }\n\n  function onSwipeCancel(event: SwipeEvent) {\n    props.onSwipeCancel?.(event)\n    if (event.defaultPrevented)\n      return\n    event.currentTarget.setAttribute('data-swipe', 'cancel')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-move-x')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-move-y')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-end-x')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-end-y')\n  }\n\n  function onSwipeEnd(event: SwipeEvent) {\n    props.onSwipeCancel?.(event)\n    if (event.defaultPrevented)\n      return\n    event.currentTarget.setAttribute('data-swipe', 'end')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-move-x')\n    event.currentTarget.style.removeProperty('--radix-toast-swipe-move-y')\n    event.currentTarget.style.setProperty('--radix-toast-swipe-end-x', `${event.detail.delta.x}px`)\n    event.currentTarget.style.setProperty('--radix-toast-swipe-end-y', `${event.detail.delta.y}px`)\n    contextToastRoot.onChangeOpen(false)\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.key !== 'Escape')\n      return\n\n    props.onEscapeKeydown?.(event)\n\n    if (!event.defaultPrevented) {\n      context.isFocusedToastEscapeKeyDownRef.value = true\n      handleClose()\n    }\n  }\n\n  function onPointerdown(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.button !== 0)\n      return\n    pointerStartRef = { x: event.clientX, y: event.clientY }\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (!pointerStartRef)\n      return\n    const x = event.clientX - pointerStartRef.x\n    const y = event.clientY - pointerStartRef.y\n    const hasSwipeMoveStarted = Boolean(swipeDeltaRef)\n    const isHorizontalSwipe = ['left', 'right'].includes(context.swipeDirection.value)\n    const clamp = ['left', 'up'].includes(context.swipeDirection.value)\n      ? Math.min\n      : Math.max\n    const clampedX = isHorizontalSwipe ? clamp(0, x) : 0\n    const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0\n    const moveStartBuffer = event.pointerType === 'touch' ? 10 : 2\n    const delta = { x: clampedX, y: clampedY }\n    const eventDetail = { originalEvent: event, delta }\n    if (hasSwipeMoveStarted) {\n      swipeDeltaRef = delta\n      handleAndDispatchCustomEvent(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail)\n    }\n    else if (isDeltaInDirection(delta, context.swipeDirection.value, moveStartBuffer)) {\n      swipeDeltaRef = delta\n      handleAndDispatchCustomEvent(TOAST_SWIPE_START, onSwipeStart, eventDetail);\n      (event.target as HTMLElement).setPointerCapture(event.pointerId)\n    }\n    else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) {\n      // User is swiping in wrong direction so we disable swipe gesture\n      // for the current pointer down interaction\n      pointerStartRef = undefined\n    }\n  }\n\n  function onPointerup(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    const delta = swipeDeltaRef\n    const target = event.target as HTMLElement\n    if (target.hasPointerCapture(event.pointerId)) {\n      target.releasePointerCapture(event.pointerId)\n    }\n    swipeDeltaRef = undefined\n    pointerStartRef = undefined\n\n    if (!delta)\n      return\n\n    const toast = event.currentTarget\n    const eventDetail = { originalEvent: event, delta }\n    if (isDeltaInDirection(delta, context.swipeDirection.value, toValue(context.swipeThreshold))) {\n      handleAndDispatchCustomEvent(TOAST_SWIPE_END, onSwipeEnd, eventDetail)\n    }\n    else {\n      handleAndDispatchCustomEvent(TOAST_SWIPE_CANCEL, onSwipeCancel, eventDetail)\n    }\n    // Prevent click event from triggering on items within the toast when\n    // pointer up is part of a swipe gesture\n    const onClick = (event: Event) => {\n      event.preventDefault()\n    }\n    toast?.addEventListener('click', onClick, { once: true })\n  }\n\n  const dismissableLayer = useDismissableLayer(\n    {\n      el: contextToastRoot.el,\n      disableOutsidePointerEvents() {\n        return false\n      },\n      onEscapeKeydown: props.onEscapeKeydown,\n    },\n  )\n\n  const style = {\n    userSelect: 'none',\n    touchAction: 'none',\n  } as const\n\n  return {\n    type,\n    viewport: context.viewport,\n    announceTextContent,\n    attrs(extraAttrs = []) {\n      const attrs: PrimitiveElAttrs = {\n        'elRef': setElRef,\n        [DATA_COLLECTION_ITEM]: true,\n        'role': 'status',\n        'aria-live': 'off',\n        'aria-atomic': true,\n        'tabindex': 0,\n        'data-state': contextToastRoot.open.value ? 'open' : 'closed',\n        'data-swipe-direction': context.swipeDirection.value,\n        'style': style,\n        onKeydown,\n        onPointerdown,\n        onPointermove,\n        onPointerup,\n      }\n\n      return dismissableLayer.attrs([attrs, ...extraAttrs])\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { VISUALLY_HIDDEN_STYLE } from '../visually-hidden/VisuallyHidden.ts'\nimport { useToastAnnounce } from './ToastAnnounce.ts'\nimport { type ToastRootImplEmits, type ToastRootImplProps, useToastRootImpl } from './ToastRootImpl.ts'\n\ndefineOptions({\n  name: 'ToastRootImpl',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ToastRootImplProps>(), {\n  as: 'li',\n  type: 'foreground',\n})\nconst emit = defineEmits<ToastRootImplEmits>()\n\nconst toastRootImpl = useToastRootImpl(convertPropsToHookProps(\n  props,\n  ['duration'],\n  (): Required<EmitsToHookProps<ToastRootImplEmits>> => ({\n    onEscapeKeydown(event) {\n      emit('escapeKeydown', event)\n    },\n    onPause() {\n      emit('pause')\n    },\n    onResume() {\n      emit('resume')\n    },\n    onSwipeStart(event) {\n      emit('swipeStart', event)\n    },\n    onSwipeMove(event) {\n      emit('swipeMove', event)\n    },\n    onSwipeEnd(event) {\n      emit('swipeEnd', event)\n    },\n    onSwipeCancel(event) {\n      emit('swipeCancel', event)\n    },\n  }),\n))\n\nconst toastAnnounce = useToastAnnounce()\n</script>\n\n<template>\n  <template v-if=\"toastRootImpl.viewport.value\">\n    <Teleport v-if=\"!toastAnnounce.isAnnounced.value\" to=\"body\">\n      <span\n        v-if=\"toastRootImpl.announceTextContent.value\"\n        role=\"status\"\n        :aria-live=\"toastRootImpl.type === 'foreground' ? 'assertive' : 'polite'\"\n        aria-atomic\n        :style=\"VISUALLY_HIDDEN_STYLE\"\n      >\n        <span v-if=\"toastAnnounce.renderAnnounceText.value\">\n          {{ toastAnnounce.label }} {{ toastRootImpl.announceTextContent.value }}\n        </span>\n      </span>\n    </Teleport>\n    <Teleport :to=\"toastRootImpl.viewport.value\">\n      <Primitive v-bind=\"normalizeAttrs(toastRootImpl.attrs([$attrs, { as }]))\">\n        <slot />\n      </Primitive>\n    </Teleport>\n  </template>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps, type EmitsToHookProps } from '../shared/index.ts'\nimport { DEFAULT_TOAST_ROOT_PROPS, type ToastRootEmits, type ToastRootProps, useToastRoot } from './ToastRoot.ts'\nimport ToastRootImpl from './ToastRootImpl.vue'\n\ndefineOptions({\n  name: 'ToastRoot',\n})\nconst props = withDefaults(defineProps<ToastRootProps>(), DEFAULT_TOAST_ROOT_PROPS)\nconst emit = defineEmits<ToastRootEmits>()\n\nconst toastRoot = useToastRoot(convertPropsToHookProps(\n  props,\n  ['open'],\n  (): Required<EmitsToHookProps<ToastRootEmits>> => ({\n    onUpdateOpen(open) {\n      emit('update:open', open)\n    },\n  }),\n))\n</script>\n\n<template>\n  <ToastRootImpl v-if=\"toastRoot.isPresent.value\">\n    <slot />\n  </ToastRootImpl>\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { type ToastViewportProps, useToastViewport } from './ToastViewport.ts'\n\ndefineOptions({\n  name: 'ToastViewport',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ToastViewportProps>(), {\n  as: 'ol',\n  hotkey: () => ['F8'],\n  label: 'Notifications ({hotkey})',\n})\n\nconst toastViewport = useToastViewport(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <div v-bind=\"toastViewport.wrapperAttrs()\">\n    <span\n      v-if=\"toastViewport.isShowFocusProxy.value\"\n      v-bind=\"toastViewport.headFocusProxy()\"\n    />\n    <Primitive v-bind=\"normalizeAttrs(toastViewport.attrs([$attrs, { as }]))\">\n      <slot />\n    </Primitive>\n    <span\n      v-if=\"toastViewport.isShowFocusProxy.value\"\n      v-bind=\"toastViewport.tailFocusProxy()\"\n    />\n  </div>\n</template>\n"],"names":["duration","event"],"mappings":"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"}