UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

76 lines (75 loc) 2.19 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useAriaLive; var _react = require("react"); var _classnames = _interopRequireDefault(require("classnames")); var _componentHelper = require("../../shared/component-helper.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const variantConfig = { text: { delay: 1000, atomic: true, showAnnouncement: false }, content: { delay: -1, atomic: false, showAnnouncement: true } }; const priorityConfig = { low: { politeness: 'polite' }, high: { politeness: 'assertive' } }; function useAriaLive(props) { const [announcement, setAnnouncement] = (0, _react.useState)(''); const timeoutRef = (0, _react.useRef)(null); const { disabled = false, delay, atomic, politeness, relevant, className, children, showAnnouncement, variant, priority, ...rest } = (0, _componentHelper.extendPropsWithContext)(props, variantConfig[props.variant || 'text'], priorityConfig[props.priority || 'low']); const showTextAnnouncement = delay > -1; (0, _react.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 { 'aria-live': disabled && !showTextAnnouncement ? 'off' : politeness, 'aria-atomic': atomic, 'aria-relevant': relevant, className: (0, _classnames.default)('dnb-aria-live', className, !showAnnouncement && 'dnb-sr-only'), children: showTextAnnouncement ? announcement : children, ...rest }; } //# sourceMappingURL=useAriaLive.js.map