UNPKG

react-headings

Version:

HTML headings with auto-incrementing levels for WCAG compliance.

71 lines (70 loc) 2.54 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Section = exports.H = exports.useLevel = void 0; var react_1 = __importDefault(require("react")); var LevelContext = react_1.default.createContext({ level: 1, Component: "h1", }); /** * Returns the current heading and level. */ function useLevel() { return react_1.default.useContext(LevelContext); } exports.useLevel = useLevel; function InternalH(_a, forwardedRef) { var render = _a.render, props = __rest(_a, ["render"]); var context = useLevel(); if (render) { return render(context); } return react_1.default.createElement(context.Component, __assign({ ref: forwardedRef }, props)); } /** * Renders a dynamic HTML heading (h1, h2, etc.) or custom component according to the current level. */ exports.H = react_1.default.forwardRef(InternalH); /** * Renders `component` in the current level and `children` in the next level. * @param component A component containing a heading * @param children The children in the next level */ function Section(_a) { var component = _a.component, children = _a.children; var level = useLevel().level; var nextLevel = Math.min(level + 1, 6); var value = { level: nextLevel, Component: "h" + nextLevel, }; return (react_1.default.createElement(react_1.default.Fragment, null, component, react_1.default.createElement(LevelContext.Provider, { value: value }, children))); } exports.Section = Section;