securityos/node_modules/next/dist/client/route-announcer.js

84 lines
3.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
0 && (module.exports = {
RouteAnnouncer: null,
default: null
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
RouteAnnouncer: function() {
return RouteAnnouncer;
},
default: function() {
return _default;
}
});
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
const _react = /*#__PURE__*/ _interop_require_default._(require("react"));
const _router = require("./router");
const nextjsRouteAnnouncerStyles = {
border: 0,
clip: "rect(0 0 0 0)",
height: "1px",
margin: "-1px",
overflow: "hidden",
padding: 0,
position: "absolute",
top: 0,
width: "1px",
// https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
whiteSpace: "nowrap",
wordWrap: "normal"
};
const RouteAnnouncer = ()=>{
const { asPath } = (0, _router.useRouter)();
const [routeAnnouncement, setRouteAnnouncement] = _react.default.useState("");
// Only announce the path change, but not for the first load because screen
// reader will do that automatically.
const previouslyLoadedPath = _react.default.useRef(asPath);
// Every time the path changes, announce the new pages title following this
// priority: first the document title (from head), otherwise the first h1, or
// if none of these exist, then the pathname from the URL. This methodology is
// inspired by Marcy Suttons accessible client routing user testing. More
// information can be found here:
// https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/
_react.default.useEffect(()=>{
// If the path hasn't change, we do nothing.
if (previouslyLoadedPath.current === asPath) return;
previouslyLoadedPath.current = asPath;
if (document.title) {
setRouteAnnouncement(document.title);
} else {
const pageHeader = document.querySelector("h1");
var _pageHeader_innerText;
const content = (_pageHeader_innerText = pageHeader == null ? void 0 : pageHeader.innerText) != null ? _pageHeader_innerText : pageHeader == null ? void 0 : pageHeader.textContent;
setRouteAnnouncement(content || asPath);
}
}, // TODO: switch to pathname + query object of dynamic route requirements
[
asPath
]);
return /*#__PURE__*/ _react.default.createElement("p", {
"aria-live": "assertive" // Make the announcement immediately.
,
id: "__next-route-announcer__",
role: "alert",
style: nextjsRouteAnnouncerStyles
}, routeAnnouncement);
};
const _default = RouteAnnouncer;
if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
Object.defineProperty(exports.default, '__esModule', { value: true });
Object.assign(exports.default, exports);
module.exports = exports.default;
}
//# sourceMappingURL=route-announcer.js.map