UNPKG

@redocly/theme

Version:

Shared UI components lib

118 lines (114 loc) 5.32 kB
"use strict"; 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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __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, useOtelTelemetry } = (0, hooks_1.useThemeHooks)(); const { translate } = useTranslate(); const otelTelemetry = useOtelTelemetry(); 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 activeHeadingId = (0, hooks_1.useActiveHeading)(contentWrapper, (0, utils_1.getDisplayedHeadingsIds)(displayedHeadings)); if (toc === null || toc === void 0 ? void 0 : toc.hide) { return null; } return (React.createElement(React.Fragment, null, 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: activeHeadingId === heading.id ? 'active' : '', dangerouslySetInnerHTML: { __html: heading.value || '' }, "data-testid": `toc-${heading.value}`, onClick: () => otelTelemetry.send({ type: 'toc_item.clicked' }) })); }))))); } 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