UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

75 lines (74 loc) 3.08 kB
"use client"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; const _excluded = ["disabled", "delay", "atomic", "politeness", "relevant", "className", "children", "showAnnouncement", "variant", "priority"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import { useEffect, useRef, useState } from 'react'; import classnames from 'classnames'; import { extendPropsWithContext } from '../../shared/component-helper'; const variantConfig = { text: { delay: 1000, atomic: true, showAnnouncement: false }, content: { delay: -1, atomic: false, showAnnouncement: true } }; const priorityConfig = { low: { politeness: 'polite' }, high: { politeness: 'assertive' } }; export default function useAriaLive(props) { const [announcement, setAnnouncement] = useState(''); const timeoutRef = useRef(null); const _extendPropsWithConte = extendPropsWithContext(props, variantConfig[props.variant || 'text'], priorityConfig[props.priority || 'low']), { disabled = false, delay, atomic, politeness, relevant, className, children, showAnnouncement, variant, priority } = _extendPropsWithConte, rest = _objectWithoutProperties(_extendPropsWithConte, _excluded); const showTextAnnouncement = delay > -1; useEffect(() => { if (showTextAnnouncement) { var _ref; setAnnouncement(''); const isTest = process.env.NODE_ENV === 'test'; const timer = setTimeout(() => { if (!disabled) { setAnnouncement(children); } clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(() => setAnnouncement(''), isTest ? 100 : delay + 1000); }, (_ref = isTest ? 0 : delay) !== null && _ref !== void 0 ? _ref : 1000); return () => { clearTimeout(timer); clearTimeout(timeoutRef.current); }; } }, [delay, children, disabled, showTextAnnouncement]); return _objectSpread({ 'aria-live': disabled && !showTextAnnouncement ? 'off' : politeness, 'aria-atomic': atomic, 'aria-relevant': relevant, className: classnames('dnb-aria-live', className, !showAnnouncement && 'dnb-sr-only'), children: showTextAnnouncement ? announcement : children }, rest); } //# sourceMappingURL=useAriaLive.js.map