{"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;AAqCM,SAAS,0CAAY,KAAwB,EAAE,KAAoB,EAAE,GAAuC;IACjH,IAAI,OACF,GAAG,SACH,KAAK,WACL,OAAO,EACR,GAAG,MAAM,KAAK;IAEf,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,SAAS,QAAQ,WAAW,MAC9B;QAGF,MAAM,KAAK,CAAC;QACZ,OAAO;YACL,MAAM,KAAK;QACb;IACF,GAAG;QAAC;QAAO;KAAQ;IAEnB,IAAI,UAAU,CAAA,GAAA,yCAAI;IAClB,IAAI,gBAAgB,CAAA,GAAA,yCAAQ;IAC5B,IAAI,kBAAkB,CAAA,GAAA,yCAA0B,EAAE,CAAA,GAAA,+CAAW,GAAG;IAEhE,wGAAwG;IACxG,mJAAmJ;IACnJ,2CAA2C;IAC3C,IAAI,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,eAAO,EAAE;IACzC,CAAA,GAAA,yCAAc,EAAE;QACd,aAAa;IACf,GAAG,EAAE;IAEL,IAAI,aAAa,CAAA,GAAA,yCAAa,EAAE,OAAO;QAAC,WAAW;IAAI;IAEvD,OAAO;QACL,YAAY;YACV,GAAG,UAAU;YACb,MAAM;YACN,cAAc;YACd,mBAAmB,KAAK,CAAC,kBAAkB,IAAI;YAC/C,oBAAoB,KAAK,CAAC,mBAAmB,IAAI;YACjD,UAAU;QACZ;QACA,cAAc;YACZ,MAAM;YACN,eAAe;YACf,eAAe,YAAY,YAAY;QACzC;QACA,YAAY;YACV,IAAI;QACN;QACA,kBAAkB;YAChB,IAAI;QACN;QACA,kBAAkB;YAChB,cAAc,gBAAgB,MAAM,CAAC;YACrC,SAAS,IAAM,MAAM,KAAK,CAAC;QAC7B;IACF;AACF","sources":["packages/react-aria/src/toast/useToast.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '../button/useButton';\n\nimport {AriaLabelingProps, DOMAttributes, FocusableElement, RefObject} from '@react-types/shared';\nimport {filterDOMProps} from '../utils/filterDOMProps';\nimport intlMessages from '../../intl/toast/*.json';\nimport {QueuedToast, ToastState} from 'react-stately/useToastState';\n// @ts-ignore\nimport {useEffect, useState} from 'react';\nimport {useId, useSlotId} from '../utils/useId';\nimport {useLayoutEffect} from '../utils/useLayoutEffect';\nimport {useLocalizedStringFormatter} from '../i18n/useLocalizedStringFormatter';\n\nexport interface AriaToastProps<T> extends AriaLabelingProps {\n  /** The toast object. */\n  toast: QueuedToast<T>\n}\n\nexport interface ToastAria {\n  /** Props for the toast container, non-modal dialog element. */\n  toastProps: DOMAttributes,\n  /** Props for the toast content alert message. */\n  contentProps: DOMAttributes,\n  /** Props for the toast title element. */\n  titleProps: DOMAttributes,\n  /** Props for the toast description element, if any. */\n  descriptionProps: DOMAttributes,\n  /** Props for the toast close button. */\n  closeButtonProps: AriaButtonProps\n}\n\n/**\n * Provides the behavior and accessibility implementation for a toast component.\n * Toasts display brief, temporary notifications of actions, errors, or other events in an application.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function useToast<T>(props: AriaToastProps<T>, state: ToastState<T>, ref: RefObject<FocusableElement | null>): ToastAria {\n  let {\n    key,\n    timer,\n    timeout\n  } = props.toast;\n\n  useEffect(() => {\n    if (timer == null || timeout == null) {\n      return;\n    }\n\n    timer.reset(timeout);\n    return () => {\n      timer.pause();\n    };\n  }, [timer, timeout]);\n\n  let titleId = useId();\n  let descriptionId = useSlotId();\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-aria/toast');\n\n  // This is required for NVDA announcements, without it NVDA will NOT announce the toast when it appears.\n  // Originally was tied to animationStart/End via https://github.com/adobe/react-spectrum/pull/6223/commits/e22e319df64958e822ab7cd9685e96818cae9ba5\n  // but toasts don't always have animations.\n  let [isVisible, setIsVisible] = useState(false);\n  useLayoutEffect(() => {\n    setIsVisible(true);\n  }, []);\n\n  let toastProps = filterDOMProps(props, {labelable: true});\n\n  return {\n    toastProps: {\n      ...toastProps,\n      role: 'alertdialog',\n      'aria-modal': 'false',\n      'aria-labelledby': props['aria-labelledby'] || titleId,\n      'aria-describedby': props['aria-describedby'] || descriptionId,\n      tabIndex: 0\n    },\n    contentProps: {\n      role: 'alert',\n      'aria-atomic': 'true',\n      'aria-hidden': isVisible ? undefined : 'true'\n    },\n    titleProps: {\n      id: titleId\n    },\n    descriptionProps: {\n      id: descriptionId\n    },\n    closeButtonProps: {\n      'aria-label': stringFormatter.format('close'),\n      onPress: () => state.close(key)\n    }\n  };\n}\n"],"names":[],"version":3,"file":"useToast.mjs.map"}