{"ast":null,"code":"import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { VisuallyHidden } from \"@react-aria/visually-hidden\";\nimport _reactDom from \"react-dom\";\nimport _react, { Fragment, useImperativeHandle, useState } from \"react\";\nvar $de8b453f082d29ae3c4c121e2b261$var$LIVEREGION_TIMEOUT_DELAY = 7000;\n\nvar $de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer = _react.createRef();\n\nvar $de8b453f082d29ae3c4c121e2b261$var$node = null;\nvar $de8b453f082d29ae3c4c121e2b261$var$messageId = 0;\nexport function announce(message, assertiveness, timeout) {\n  if (assertiveness === void 0) {\n    assertiveness = 'assertive';\n  }\n\n  if (timeout === void 0) {\n    timeout = $de8b453f082d29ae3c4c121e2b261$var$LIVEREGION_TIMEOUT_DELAY;\n  }\n\n  $de8b453f082d29ae3c4c121e2b261$var$ensureInstance(function (announcer) {\n    return announcer.announce(message, assertiveness, timeout);\n  });\n}\nexport function clearAnnouncer(assertiveness) {\n  $de8b453f082d29ae3c4c121e2b261$var$ensureInstance(function (announcer) {\n    return announcer.clear(assertiveness);\n  });\n}\nexport function destroyAnnouncer() {\n  if ($de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer.current) {\n    _reactDom.unmountComponentAtNode($de8b453f082d29ae3c4c121e2b261$var$node);\n\n    document.body.removeChild($de8b453f082d29ae3c4c121e2b261$var$node);\n    $de8b453f082d29ae3c4c121e2b261$var$node = null;\n  }\n}\n\nfunction $de8b453f082d29ae3c4c121e2b261$var$ensureInstance(callback) {\n  if (!$de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer.current) {\n    $de8b453f082d29ae3c4c121e2b261$var$node = document.createElement('div');\n    $de8b453f082d29ae3c4c121e2b261$var$node.dataset.liveAnnouncer = 'true';\n    document.body.prepend($de8b453f082d29ae3c4c121e2b261$var$node);\n\n    _reactDom.render(_react.createElement($de8b453f082d29ae3c4c121e2b261$var$LiveRegionAnnouncer, {\n      ref: $de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer\n    }), $de8b453f082d29ae3c4c121e2b261$var$node, function () {\n      return callback($de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer.current);\n    });\n  } else {\n    callback($de8b453f082d29ae3c4c121e2b261$var$liveRegionAnnouncer.current);\n  }\n}\n\nvar $de8b453f082d29ae3c4c121e2b261$var$LiveRegionAnnouncer = _react.forwardRef(function (_, ref) {\n  var _useState = useState([]),\n      _useState2 = _slicedToArray(_useState, 2),\n      assertiveMessages = _useState2[0],\n      setAssertiveMessages = _useState2[1];\n\n  var _useState3 = useState([]),\n      _useState4 = _slicedToArray(_useState3, 2),\n      politeMessages = _useState4[0],\n      setPoliteMessages = _useState4[1];\n\n  var clear = function clear(assertiveness) {\n    if (!assertiveness || assertiveness === 'assertive') {\n      setAssertiveMessages([]);\n    }\n\n    if (!assertiveness || assertiveness === 'polite') {\n      setPoliteMessages([]);\n    }\n  };\n\n  var announce = function announce(message, assertiveness, timeout) {\n    if (assertiveness === void 0) {\n      assertiveness = 'assertive';\n    }\n\n    if (timeout === void 0) {\n      timeout = $de8b453f082d29ae3c4c121e2b261$var$LIVEREGION_TIMEOUT_DELAY;\n    }\n\n    var id = $de8b453f082d29ae3c4c121e2b261$var$messageId++;\n\n    if (assertiveness === 'assertive') {\n      setAssertiveMessages(function (messages) {\n        return [].concat(_toConsumableArray(messages), [{\n          id: id,\n          text: message\n        }]);\n      });\n    } else {\n      setPoliteMessages(function (messages) {\n        return [].concat(_toConsumableArray(messages), [{\n          id: id,\n          text: message\n        }]);\n      });\n    }\n\n    if (message !== '') {\n      setTimeout(function () {\n        if (assertiveness === 'assertive') {\n          setAssertiveMessages(function (messages) {\n            return messages.filter(function (message) {\n              return message.id !== id;\n            });\n          });\n        } else {\n          setPoliteMessages(function (messages) {\n            return messages.filter(function (message) {\n              return message.id !== id;\n            });\n          });\n        }\n      }, timeout);\n    }\n  };\n\n  useImperativeHandle(ref, function () {\n    return {\n      announce: announce,\n      clear: clear\n    };\n  });\n  return _react.createElement(Fragment, null, _react.createElement($de8b453f082d29ae3c4c121e2b261$var$MessageBlock, {\n    \"aria-live\": \"assertive\"\n  }, assertiveMessages.map(function (message) {\n    return _react.createElement(\"div\", {\n      key: message.id\n    }, message.text);\n  })), _react.createElement($de8b453f082d29ae3c4c121e2b261$var$MessageBlock, {\n    \"aria-live\": \"polite\"\n  }, politeMessages.map(function (message) {\n    return _react.createElement(\"div\", {\n      key: message.id\n    }, message.text);\n  })));\n});\n\nfunction $de8b453f082d29ae3c4c121e2b261$var$MessageBlock(_ref) {\n  var children = _ref.children,\n      ariaLive = _ref['aria-live'];\n  return _react.createElement(VisuallyHidden, {\n    role: \"log\",\n    \"aria-live\": ariaLive,\n    \"aria-relevant\": \"additions\"\n  }, children);\n}","map":{"version":3,"sources":["packages/@react-aria/live-announcer/src/LiveAnnouncer.tsx"],"names":["LIVEREGION_TIMEOUT_DELAY","liveRegionAnnouncer","React","node","messageId","assertiveness","timeout","ensureInstance","announcer","ReactDOM","document","callback","LiveRegionAnnouncer","useState","clear","setAssertiveMessages","setPoliteMessages","announce","id","messages","text","message","setTimeout","useImperativeHandle","assertiveMessages","politeMessages","ariaLive"],"mappings":"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","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 React, {Fragment, ReactNode, RefObject, useImperativeHandle, useState} from 'react';\nimport ReactDOM from 'react-dom';\nimport {VisuallyHidden} from '@react-aria/visually-hidden';\n\ntype Assertiveness = 'assertive' | 'polite';\ninterface Announcer {\n  announce(message: string, assertiveness: Assertiveness, timeout: number): void,\n  clear(assertiveness: Assertiveness): void\n}\n\n/* Inspired by https://github.com/AlmeroSteyn/react-aria-live */\nconst LIVEREGION_TIMEOUT_DELAY = 7000;\n\nlet liveRegionAnnouncer = React.createRef<Announcer>();\nlet node: HTMLElement = null;\nlet messageId = 0;\n\n/**\n * Announces the message using screen reader technology.\n */\nexport function announce(\n  message: string,\n  assertiveness: Assertiveness = 'assertive',\n  timeout = LIVEREGION_TIMEOUT_DELAY\n) {\n  ensureInstance(announcer => announcer.announce(message, assertiveness, timeout));\n}\n\n/**\n * Stops all queued announcements.\n */\nexport function clearAnnouncer(assertiveness: Assertiveness) {\n  ensureInstance(announcer => announcer.clear(assertiveness));\n}\n\n/**\n * Removes the announcer from the DOM.\n */\nexport function destroyAnnouncer() {\n  if (liveRegionAnnouncer.current) {\n    ReactDOM.unmountComponentAtNode(node);\n    document.body.removeChild(node);\n    node = null;\n  }\n}\n\n/**\n * Ensures we only have one instance of the announcer so that we don't have elements competing.\n */\nfunction ensureInstance(callback: (announcer: Announcer) => void) {\n  if (!liveRegionAnnouncer.current) {\n    node = document.createElement('div');\n    node.dataset.liveAnnouncer = 'true';\n    document.body.prepend(node);\n    ReactDOM.render(\n      <LiveRegionAnnouncer ref={liveRegionAnnouncer} />,\n      node,\n      () => callback(liveRegionAnnouncer.current)\n    );\n  } else {\n    callback(liveRegionAnnouncer.current);\n  }\n}\n\nconst LiveRegionAnnouncer = React.forwardRef((_, ref: RefObject<Announcer>) => {\n  let [assertiveMessages, setAssertiveMessages] = useState([]);\n  let [politeMessages, setPoliteMessages] = useState([]);\n\n  let clear = (assertiveness: Assertiveness) => {\n    if (!assertiveness || assertiveness === 'assertive') {\n      setAssertiveMessages([]);\n    }\n\n    if (!assertiveness || assertiveness === 'polite') {\n      setPoliteMessages([]);\n    }\n  };\n\n  let announce = (message: string, assertiveness = 'assertive', timeout = LIVEREGION_TIMEOUT_DELAY) => {\n    let id = messageId++;\n\n    if (assertiveness === 'assertive') {\n      setAssertiveMessages(messages => [...messages, {id, text: message}]);\n    } else {\n      setPoliteMessages(messages => [...messages, {id, text: message}]);\n    }\n\n    if (message !== '') {\n      setTimeout(() => {\n        if (assertiveness === 'assertive') {\n          setAssertiveMessages(messages => messages.filter(message => message.id !== id));\n        } else {\n          setPoliteMessages(messages => messages.filter(message => message.id !== id));\n        }\n      }, timeout);\n    }\n  };\n\n  useImperativeHandle(ref, () => ({\n    announce,\n    clear\n  }));\n\n  return (\n    <Fragment>\n      <MessageBlock aria-live=\"assertive\">\n        {assertiveMessages.map(message => <div key={message.id}>{message.text}</div>)}\n      </MessageBlock>\n      <MessageBlock aria-live=\"polite\">\n        {politeMessages.map(message => <div key={message.id}>{message.text}</div>)}\n      </MessageBlock>\n    </Fragment>\n  );\n});\n\ninterface MessageBlockProps {\n   children: ReactNode,\n   'aria-live': Assertiveness\n }\n\nfunction MessageBlock({children, 'aria-live': ariaLive}: MessageBlockProps) {\n  return (\n    <VisuallyHidden\n      role=\"log\"\n      aria-live={ariaLive}\n      aria-relevant=\"additions\">\n      {children}\n    </VisuallyHidden>\n  );\n}\n"]},"metadata":{},"sourceType":"module"}