@redocly/theme
Version:
Shared UI components lib
131 lines (127 loc) • 5.68 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TableOfContent = TableOfContent;
const React = __importStar(require("react"));
const styled_components_1 = __importDefault(require("styled-components"));
const hooks_1 = require("../../core/hooks");
const utils_1 = require("../../core/utils");
function TableOfContent(props) {
const { headings, contentWrapper, className } = props;
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
const { translate } = useTranslate();
const telemetry = useTelemetry();
const sidebar = React.useRef(null);
(0, hooks_1.useFullHeight)(sidebar);
const { markdown: { toc = {} } = {} } = (0, hooks_1.useThemeConfig)();
const displayedHeadings = (0, utils_1.getDisplayedHeadings)(headings, toc.depth || 3);
const leastDepth = (0, utils_1.getLeastDepth)(displayedHeadings);
const { heading: activeHeading, handleHeadingClick } = (0, hooks_1.useActiveHeading)(contentWrapper, displayedHeadings);
if (toc === null || toc === void 0 ? void 0 : toc.hide) {
return null;
}
return (React.createElement(TableOfContentMenu, { "data-component-name": "TableOfContent/TableOfContent", className: className },
React.createElement(TableOfContentItems, { ref: sidebar },
displayedHeadings.length ? (React.createElement(TableOfContentHeader, { "data-translation-key": "toc.header" }, translate('toc.header', toc.header || 'On this page'))) : null,
displayedHeadings.map((heading, idx) => {
if (!heading) {
return null;
}
const href = '#' + heading.id;
return (React.createElement(TableOfContentMenuItem, { key: href + idx, href: href, depth: heading.depth - leastDepth + 1 || 0, className: activeHeading === heading.id ? 'active' : '', dangerouslySetInnerHTML: { __html: heading.value || '' }, "data-testid": `toc-${heading.value}`, onClick: (e) => {
e.preventDefault();
telemetry.sendTocItemClickedMessage();
handleHeadingClick(heading.id);
} }));
}))));
}
const TableOfContentMenu = styled_components_1.default.aside `
background-color: var(--toc-bg-color);
flex-shrink: 0;
display: none !important;
@media screen and (min-width: ${utils_1.breakpoints.medium}) {
width: var(--toc-width);
display: block !important;
}
`;
const TableOfContentHeader = styled_components_1.default.div `
font-family: var(--toc-heading-font-family);
font-size: var(--toc-heading-font-size);
font-weight: var(--toc-heading-font-weight);
padding: var(--toc-item-padding-vertical) var(--toc-item-padding-horizontal);
color: var(--toc-heading-text-color);
text-transform: var(--toc-heading-text-transform);
line-height: var(--toc-heading-line-height);
`;
const TableOfContentItems = styled_components_1.default.div `
position: sticky;
top: calc(var(--navbar-height) + var(--toc-offset-top));
max-height: calc(100vh - var(--navbar-height) - var(--toc-offset-top));
overflow-y: auto;
width: var(--toc-width);
border-left: solid 1px var(--toc-border-color);
`;
const TableOfContentMenuItem = styled_components_1.default.a `
display: block;
color: var(--toc-item-text-color);
font-weight: var(--toc-item-font-weight);
background-color: var(--toc-item-bg-color);
cursor: pointer;
font-size: var(--toc-item-font-size);
padding: var(--toc-item-padding-vertical) var(--toc-item-padding-horizontal);
padding-left: calc(var(--toc-item-nested-offset) * ${({ depth }) => depth});
transition:
background-color 0.3s,
color 0.3s;
text-decoration: none;
word-break: break-word;
font-family: var(--heading-font-family, var(--toc-item-font-family));
line-height: var(--toc-item-line-height);
border-left: solid 2px transparent;
:hover {
color: var(--toc-item-text-color-active);
}
&.active {
color: var(--toc-item-text-color-active);
border-left: solid 2px var(--toc-item-border-color-active);
}
:empty {
padding: 0;
}
`;
//# sourceMappingURL=TableOfContent.js.map