@redocly/theme 0.1.28 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CopyButton/CopyButtonWrapper.js +1 -1
  2. package/JsonViewer/JsonViewer.js +1 -1
  3. package/PageNavigation/NextPageLink.js +3 -3
  4. package/PageNavigation/PageNavigation.d.ts +1 -1
  5. package/PageNavigation/PageNavigation.js +7 -1
  6. package/PageNavigation/PreviousPageLink.js +3 -3
  7. package/Profile/Profile.d.ts +8 -0
  8. package/Profile/Profile.js +60 -0
  9. package/Profile/index.d.ts +2 -0
  10. package/Profile/index.js +5 -0
  11. package/TableOfContent/TableOfContent.js +9 -1
  12. package/Tooltip/Tooltip.d.ts +5 -4
  13. package/Tooltip/Tooltip.js +43 -21
  14. package/hooks/__tests__/mocks/MockIntersectionObserver.d.ts +15 -0
  15. package/hooks/__tests__/mocks/MockIntersectionObserver.js +39 -0
  16. package/hooks/useActiveHeading.d.ts +1 -1
  17. package/hooks/useActiveHeading.js +69 -20
  18. package/index.d.ts +1 -0
  19. package/index.js +1 -0
  20. package/mocks/hooks/index.d.ts +3 -3
  21. package/mocks/hooks/index.js +5 -8
  22. package/package.json +1 -1
  23. package/settings.yaml +4 -0
  24. package/src/CopyButton/CopyButtonWrapper.tsx +1 -1
  25. package/src/JsonViewer/JsonViewer.tsx +19 -17
  26. package/src/PageNavigation/NextPageLink.tsx +1 -1
  27. package/src/PageNavigation/PageNavigation.tsx +10 -2
  28. package/src/PageNavigation/PreviousPageLink.tsx +2 -2
  29. package/src/Profile/Profile.tsx +91 -0
  30. package/src/Profile/index.ts +2 -0
  31. package/src/TableOfContent/TableOfContent.tsx +11 -1
  32. package/src/Tooltip/Tooltip.tsx +87 -63
  33. package/src/hooks/useActiveHeading.ts +92 -28
  34. package/src/index.ts +1 -0
  35. package/src/mocks/hooks/index.ts +6 -9
  36. package/src/utils/color.ts +9 -0
  37. package/src/utils/index.ts +1 -0
  38. package/src/utils/theme-helpers.ts +3 -1
  39. package/utils/color.d.ts +2 -0
  40. package/utils/color.js +12 -0
  41. package/utils/index.d.ts +1 -0
  42. package/utils/index.js +1 -0
  43. package/utils/theme-helpers.js +3 -1
@@ -44,7 +44,7 @@ function CopyButtonWrapperComponent(_a) {
44
44
  showTooltip();
45
45
  };
46
46
  var renderCopyButton = function () {
47
- return (react_1.default.createElement(Tooltip_1.Tooltip, { className: "copy-button", tip: utils_1.ClipboardService.isSupported() ? 'Copied' : 'Not supported in your browser', open: tooltip.isOpened },
47
+ return (react_1.default.createElement(Tooltip_1.Tooltip, { className: "copy-button", tip: utils_1.ClipboardService.isSupported() ? 'Copied' : 'Not supported in your browser', isOpen: tooltip.isOpened },
48
48
  react_1.default.createElement(SamplesPanelControls_1.SamplesControlButton, { onClick: copy, "data-cy": dataTestId }, "Copy")));
49
49
  };
50
50
  return children({ renderCopyButton: renderCopyButton });
@@ -141,7 +141,7 @@ function JsonComponent(_a) {
141
141
  exports.Json = (0, react_1.memo)(JsonComponent);
142
142
  exports.JsonViewer = (0, styled_components_1.default)(exports.Json).attrs(function () { return ({
143
143
  'data-component-name': 'JsonViewer/JsonViewer',
144
- }); })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .redoc-json code {\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n padding: inherit;\n border: none;\n }\n\n contain: content;\n overflow-x: auto;\n position: relative;\n padding: 10px;\n border-radius: var(--global-border-radius);\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n font-size: var(--code-font-size);\n font-family: var(--code-font-family);\n white-space: var(--code-wrap, pre);\n\n &.line-numbers {\n padding: 20px 20px 20px 3em;\n\n *[data-line]:not(.collapsed *[data-line]) {\n &:before {\n content: attr(data-line);\n position: absolute;\n left: 0;\n min-width: 2em;\n text-align: right;\n pointer-events: none;\n user-select: none;\n padding: 0 0.5em;\n font-size: 13px;\n }\n }\n }\n\n .callback-function {\n color: gray;\n }\n\n .collapsed > .collapser:after {\n content: '+';\n cursor: pointer;\n }\n\n .ellipsis:after {\n content: ' \u2026 ';\n }\n\n .collapsible {\n padding-left: 2ch;\n display: inline-block;\n }\n\n .hoverable {\n padding: 1px 2px;\n display: inline-block;\n }\n\n .collapsed {\n display: inline-flex;\n }\n\n .hovered {\n background-color: rgba(235, 238, 249, 1);\n }\n\n .collapser {\n background-color: transparent;\n border: 0;\n padding: 0;\n color: #fff;\n width: 0;\n height: 15px;\n cursor: default;\n user-select: none;\n -webkit-user-select: none;\n font-family: var(--code-font-family);\n font-size: var(--code-font-size);\n\n &:after {\n content: '-';\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15px;\n height: 100%;\n padding: 2px 5px 2px 2px;\n transform: translateX(-100%);\n\n &:focus {\n outline: #fff dotted 1px;\n }\n }\n }\n\n .selected {\n outline-width: 1px;\n outline-style: dotted;\n }\n\n .collapsed > .collapsible {\n display: none;\n }\n\n .ellipsis {\n display: none;\n }\n\n .collapsed > .ellipsis {\n display: inline;\n }\n"], ["\n .redoc-json code {\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n padding: inherit;\n border: none;\n }\n\n contain: content;\n overflow-x: auto;\n position: relative;\n padding: 10px;\n border-radius: var(--global-border-radius);\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n font-size: var(--code-font-size);\n font-family: var(--code-font-family);\n white-space: var(--code-wrap, pre);\n\n &.line-numbers {\n padding: 20px 20px 20px 3em;\n\n *[data-line]:not(.collapsed *[data-line]) {\n &:before {\n content: attr(data-line);\n position: absolute;\n left: 0;\n min-width: 2em;\n text-align: right;\n pointer-events: none;\n user-select: none;\n padding: 0 0.5em;\n font-size: 13px;\n }\n }\n }\n\n .callback-function {\n color: gray;\n }\n\n .collapsed > .collapser:after {\n content: '+';\n cursor: pointer;\n }\n\n .ellipsis:after {\n content: ' \u2026 ';\n }\n\n .collapsible {\n padding-left: 2ch;\n display: inline-block;\n }\n\n .hoverable {\n padding: 1px 2px;\n display: inline-block;\n }\n\n .collapsed {\n display: inline-flex;\n }\n\n .hovered {\n background-color: rgba(235, 238, 249, 1);\n }\n\n .collapser {\n background-color: transparent;\n border: 0;\n padding: 0;\n color: #fff;\n width: 0;\n height: 15px;\n cursor: default;\n user-select: none;\n -webkit-user-select: none;\n font-family: var(--code-font-family);\n font-size: var(--code-font-size);\n\n &:after {\n content: '-';\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15px;\n height: 100%;\n padding: 2px 5px 2px 2px;\n transform: translateX(-100%);\n\n &:focus {\n outline: #fff dotted 1px;\n }\n }\n }\n\n .selected {\n outline-width: 1px;\n outline-style: dotted;\n }\n\n .collapsed > .collapsible {\n display: none;\n }\n\n .ellipsis {\n display: none;\n }\n\n .collapsed > .ellipsis {\n display: inline;\n }\n"])));
144
+ }); })(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n .redoc-json code {\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n padding: inherit;\n border: none;\n }\n\n contain: content;\n overflow-x: auto;\n position: relative;\n padding: 10px;\n border-radius: var(--global-border-radius);\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n font-size: var(--code-font-size);\n font-family: var(--code-font-family);\n white-space: var(--code-wrap, pre);\n\n &.line-numbers {\n padding: 20px 20px 20px 3em;\n\n *[data-line]:not(.collapsed *[data-line]) {\n &:before {\n content: attr(data-line);\n position: absolute;\n left: 0;\n min-width: 2em;\n text-align: right;\n pointer-events: none;\n user-select: none;\n padding: 0 0.5em;\n font-size: 13px;\n }\n }\n }\n\n .callback-function {\n color: gray;\n }\n\n .ellipsis:after {\n content: ' \u2026 ';\n }\n\n .collapsible {\n padding-left: 2ch;\n display: inline-block;\n }\n\n .hoverable {\n padding: 1px 2px;\n display: inline-block;\n }\n\n .collapsed {\n white-space: nowrap;\n\n & > .collapser:after {\n content: '+';\n }\n }\n\n .hovered {\n background-color: rgba(235, 238, 249, 1);\n }\n\n .collapser {\n --size: 15px;\n --margin-right: 3px;\n\n display: inline-block;\n background-color: transparent;\n border: 0;\n padding: 1px;\n color: #fff;\n width: var(--size);\n height: var(--size);\n margin-left: calc((var(--size) + var(--margin-right)) * -1);\n margin-right: var(--margin-right);\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n font-family: var(--code-font-family);\n font-size: var(--code-font-size);\n\n &:after {\n content: '-';\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n &:focus {\n outline: #fff dotted 1px;\n }\n }\n\n .selected {\n outline-width: 1px;\n outline-style: dotted;\n }\n\n .collapsed > .collapsible {\n display: none;\n }\n\n .ellipsis {\n display: none;\n }\n\n .collapsed > .ellipsis {\n display: inline;\n }\n"], ["\n .redoc-json code {\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n padding: inherit;\n border: none;\n }\n\n contain: content;\n overflow-x: auto;\n position: relative;\n padding: 10px;\n border-radius: var(--global-border-radius);\n background-color: var(--samples-panel-controls-background-color);\n color: var(--color-content-inverse);\n font-size: var(--code-font-size);\n font-family: var(--code-font-family);\n white-space: var(--code-wrap, pre);\n\n &.line-numbers {\n padding: 20px 20px 20px 3em;\n\n *[data-line]:not(.collapsed *[data-line]) {\n &:before {\n content: attr(data-line);\n position: absolute;\n left: 0;\n min-width: 2em;\n text-align: right;\n pointer-events: none;\n user-select: none;\n padding: 0 0.5em;\n font-size: 13px;\n }\n }\n }\n\n .callback-function {\n color: gray;\n }\n\n .ellipsis:after {\n content: ' \u2026 ';\n }\n\n .collapsible {\n padding-left: 2ch;\n display: inline-block;\n }\n\n .hoverable {\n padding: 1px 2px;\n display: inline-block;\n }\n\n .collapsed {\n white-space: nowrap;\n\n & > .collapser:after {\n content: '+';\n }\n }\n\n .hovered {\n background-color: rgba(235, 238, 249, 1);\n }\n\n .collapser {\n --size: 15px;\n --margin-right: 3px;\n\n display: inline-block;\n background-color: transparent;\n border: 0;\n padding: 1px;\n color: #fff;\n width: var(--size);\n height: var(--size);\n margin-left: calc((var(--size) + var(--margin-right)) * -1);\n margin-right: var(--margin-right);\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n font-family: var(--code-font-family);\n font-size: var(--code-font-size);\n\n &:after {\n content: '-';\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n }\n\n &:focus {\n outline: #fff dotted 1px;\n }\n }\n\n .selected {\n outline-width: 1px;\n outline-style: dotted;\n }\n\n .collapsed > .collapsible {\n display: none;\n }\n\n .ellipsis {\n display: none;\n }\n\n .collapsed > .ellipsis {\n display: inline;\n }\n"])));
145
145
  exports.JsonViewerWrap = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &:hover > ", " {\n opacity: 1;\n }\n"], ["\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &:hover > ", " {\n opacity: 1;\n }\n"])), SamplesPanelControls_1.SampleControls);
146
146
  exports.StyledCodeBlock = (0, styled_components_1.default)(CodeBlock_1.CodeBlock)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n flex: 1;\n\n code {\n font-family: var(--code-font-family);\n font-size: 14px;\n line-height: 18px;\n }\n"], ["\n flex: 1;\n\n code {\n font-family: var(--code-font-family);\n font-size: 14px;\n line-height: 18px;\n }\n"])));
147
147
  var templateObject_1, templateObject_2, templateObject_3;
@@ -14,13 +14,13 @@ var hooks_1 = require("../mocks/hooks");
14
14
  var constants_1 = require("../mocks/constants");
15
15
  var Button_1 = require("../Button/Button");
16
16
  function NextPageLink() {
17
- var _a;
17
+ var _a, _b;
18
18
  var nextPage = ((0, hooks_1.useSidebarSiblingsData)() || {}).nextPage;
19
19
  var navigation = (0, hooks_1.useThemeSettings)(constants_1.DEFAULT_THEME_NAME).navigation;
20
- if (!nextPage || (navigation === null || navigation === void 0 ? void 0 : navigation.hide)) {
20
+ if (!nextPage || (navigation === null || navigation === void 0 ? void 0 : navigation.hide) || ((_a = navigation === null || navigation === void 0 ? void 0 : navigation.nextPageLink) === null || _a === void 0 ? void 0 : _a.hide)) {
21
21
  return react_1.default.createElement("div", null, "\u00A0");
22
22
  }
23
- var label = ((_a = navigation === null || navigation === void 0 ? void 0 : navigation.nextPageLink) === null || _a === void 0 ? void 0 : _a.label) || "Next to ".concat(nextPage.label);
23
+ var label = ((_b = navigation === null || navigation === void 0 ? void 0 : navigation.nextPageLink) === null || _b === void 0 ? void 0 : _b.label) || "Next to ".concat(nextPage.label);
24
24
  return (react_1.default.createElement(StyledButton, { variant: "outlined", size: "large", to: nextPage.link, "data-component-name": "PageNavigation/NextPageLink" }, label));
25
25
  }
26
26
  exports.NextPageLink = NextPageLink;
@@ -1,2 +1,2 @@
1
1
  /// <reference types="react" />
2
- export declare function PageNavigation(): JSX.Element;
2
+ export declare function PageNavigation(): JSX.Element | null;
@@ -12,11 +12,17 @@ var react_1 = __importDefault(require("react"));
12
12
  var styled_components_1 = __importDefault(require("styled-components"));
13
13
  var PreviousPageLink_1 = require("../PageNavigation/PreviousPageLink");
14
14
  var NextPageLink_1 = require("../PageNavigation/NextPageLink");
15
+ var hooks_1 = require("../mocks/hooks");
16
+ var constants_1 = require("../mocks/constants");
15
17
  function PageNavigation() {
18
+ var navigation = (0, hooks_1.useThemeSettings)(constants_1.DEFAULT_THEME_NAME).navigation;
19
+ if (navigation === null || navigation === void 0 ? void 0 : navigation.hide) {
20
+ return null;
21
+ }
16
22
  return (react_1.default.createElement(PageNavigationWrapper, { "data-component-name": "PageNavigation/PageNavigation" },
17
23
  react_1.default.createElement(PreviousPageLink_1.PreviousPageLink, null),
18
24
  react_1.default.createElement(NextPageLink_1.NextPageLink, null)));
19
25
  }
20
26
  exports.PageNavigation = PageNavigation;
21
- var PageNavigationWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n margin: 25px 0px;\n"], ["\n display: flex;\n justify-content: space-between;\n margin: 25px 0px;\n"])));
27
+ var PageNavigationWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n margin: 25px 0;\n"], ["\n display: flex;\n justify-content: space-between;\n margin: 25px 0;\n"])));
22
28
  var templateObject_1;
@@ -14,13 +14,13 @@ var hooks_1 = require("../mocks/hooks");
14
14
  var constants_1 = require("../mocks/constants");
15
15
  var Button_1 = require("../Button/Button");
16
16
  function PreviousPageLink() {
17
- var _a;
17
+ var _a, _b;
18
18
  var prevPage = ((0, hooks_1.useSidebarSiblingsData)() || {}).prevPage;
19
19
  var navigation = (0, hooks_1.useThemeSettings)(constants_1.DEFAULT_THEME_NAME).navigation;
20
- if (!prevPage || (navigation === null || navigation === void 0 ? void 0 : navigation.hide)) {
20
+ if (!prevPage || (navigation === null || navigation === void 0 ? void 0 : navigation.hide) || ((_a = navigation === null || navigation === void 0 ? void 0 : navigation.previousPageLink) === null || _a === void 0 ? void 0 : _a.hide)) {
21
21
  return react_1.default.createElement("div", null, "\u00A0");
22
22
  }
23
- var label = ((_a = navigation === null || navigation === void 0 ? void 0 : navigation.nextPageLink) === null || _a === void 0 ? void 0 : _a.label) || "Back to ".concat(prevPage.label);
23
+ var label = ((_b = navigation === null || navigation === void 0 ? void 0 : navigation.previousPageLink) === null || _b === void 0 ? void 0 : _b.label) || "Back to ".concat(prevPage.label);
24
24
  return (react_1.default.createElement(StyledButton, { variant: "outlined", size: "large", to: prevPage.link, "data-component-name": "PageNavigation/PreviousPageLink" }, label));
25
25
  }
26
26
  exports.PreviousPageLink = PreviousPageLink;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ProfileProps {
3
+ name: string;
4
+ imageUrl?: string;
5
+ color?: string;
6
+ onClick?: () => void;
7
+ }
8
+ export declare const Profile: React.NamedExoticComponent<ProfileProps>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
5
+ };
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.Profile = void 0;
31
+ var react_1 = __importStar(require("react"));
32
+ var styled_components_1 = __importStar(require("styled-components"));
33
+ var utils_1 = require("../utils");
34
+ var RANDOM_BG_COLOR = (0, utils_1.getRandomColor)();
35
+ function ProfileComponent(_a) {
36
+ var _b;
37
+ var name = _a.name, imageUrl = _a.imageUrl, onClick = _a.onClick, color = _a.color;
38
+ if (imageUrl) {
39
+ return (react_1.default.createElement(ProfileWrapper, { onClick: onClick },
40
+ react_1.default.createElement(StyledUserName, { "data-cy": "user-name", color: color }, name),
41
+ imageUrl && (react_1.default.createElement(AvatarWrapper, null,
42
+ react_1.default.createElement("img", { "data-cy": "user-avatar", src: imageUrl, alt: "profile" })))));
43
+ }
44
+ var avatarLetters = "".concat(name.charAt(0).toUpperCase()).concat(((_b = name.split(' ')[1]) === null || _b === void 0 ? void 0 : _b.charAt(0).toUpperCase()) || '');
45
+ return (react_1.default.createElement(ProfileWrapper, { onClick: onClick },
46
+ react_1.default.createElement(StyledUserName, { "data-cy": "user-name", color: color }, name),
47
+ react_1.default.createElement(AvatarWrapper, { background: RANDOM_BG_COLOR },
48
+ react_1.default.createElement("span", null, avatarLetters))));
49
+ }
50
+ exports.Profile = (0, react_1.memo)(ProfileComponent);
51
+ var ProfileWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n cursor: pointer;\n width: auto;\n"], ["\n display: flex;\n align-items: center;\n cursor: pointer;\n width: auto;\n"])));
52
+ var StyledUserName = styled_components_1.default.span(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), function (_a) {
53
+ var color = _a.color;
54
+ return color || 'var(--color-content)';
55
+ });
56
+ var AvatarWrapper = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n width: 40px;\n height: 40px;\n display: flex;\n overflow: hidden;\n position: relative;\n font-size: 1.25rem;\n align-items: center;\n flex-shrink: 0;\n line-height: 1;\n user-select: none;\n border-radius: 50%;\n justify-content: center;\n margin-left: 16px;\n\n ", "\n\n & > img {\n color: transparent;\n width: 100%;\n height: 100%;\n object-fit: cover;\n text-align: center;\n text-indent: 10000px;\n }\n"], ["\n width: 40px;\n height: 40px;\n display: flex;\n overflow: hidden;\n position: relative;\n font-size: 1.25rem;\n align-items: center;\n flex-shrink: 0;\n line-height: 1;\n user-select: none;\n border-radius: 50%;\n justify-content: center;\n margin-left: 16px;\n\n ", "\n\n & > img {\n color: transparent;\n width: 100%;\n height: 100%;\n object-fit: cover;\n text-align: center;\n text-indent: 10000px;\n }\n"])), function (_a) {
57
+ var background = _a.background;
58
+ return (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n span {\n color: ", ";\n filter: invert(100%);\n }\n "], ["\n background-color: ", ";\n span {\n color: ", ";\n filter: invert(100%);\n }\n "])), background, background);
59
+ });
60
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
@@ -0,0 +1,2 @@
1
+ export { Profile } from './Profile';
2
+ export type { ProfileProps } from './Profile';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Profile = void 0;
4
+ var Profile_1 = require("./Profile");
5
+ Object.defineProperty(exports, "Profile", { enumerable: true, get: function () { return Profile_1.Profile; } });
@@ -42,8 +42,16 @@ function TableOfContent(props) {
42
42
  var headings = props.headings, tocMaxDepth = props.tocMaxDepth, contentWrapper = props.contentWrapper;
43
43
  var sidebar = (0, react_1.useRef)(null);
44
44
  (0, useFullHeight_1.useFullHeight)(sidebar);
45
- var activeHeadingId = (0, useActiveHeading_1.useActiveHeading)(contentWrapper);
46
45
  var toc = (0, hooks_1.useThemeSettings)(constants_1.DEFAULT_THEME_NAME).toc;
46
+ var getDisplayedHeaderIds = function () {
47
+ if (!headings) {
48
+ return [];
49
+ }
50
+ return headings
51
+ .filter(function (header) { return header && tocMaxDepth >= header.depth; })
52
+ .map(function (header) { return header === null || header === void 0 ? void 0 : header.id; });
53
+ };
54
+ var activeHeadingId = (0, useActiveHeading_1.useActiveHeading)(contentWrapper, getDisplayedHeaderIds());
47
55
  if (toc === null || toc === void 0 ? void 0 : toc.hide) {
48
56
  return null;
49
57
  }
@@ -1,12 +1,13 @@
1
- import type { PropsWithChildren } from 'react';
1
+ import type { PropsWithChildren, ReactNode } from 'react';
2
2
  import React from 'react';
3
3
  export interface TooltipProps {
4
- tip: string;
5
- open?: boolean;
4
+ tip: string | ReactNode;
5
+ isOpen?: boolean;
6
+ withArrow?: boolean;
6
7
  placement?: 'top' | 'bottom' | 'left' | 'right';
7
8
  className?: string;
8
9
  width?: string;
9
10
  dataTestId?: string;
10
11
  }
11
- export declare function TooltipComponent({ children, open, tip, placement, className, width, dataTestId, }: PropsWithChildren<TooltipProps>): JSX.Element;
12
+ export declare function TooltipComponent({ children, isOpen, tip, withArrow, placement, className, width, dataTestId, }: PropsWithChildren<TooltipProps>): JSX.Element;
12
13
  export declare const Tooltip: React.NamedExoticComponent<PropsWithChildren<TooltipProps>>;
@@ -3,6 +3,17 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
3
3
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
4
  return cooked;
5
5
  };
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
6
17
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
18
  if (k2 === undefined) k2 = k;
8
19
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -32,43 +43,54 @@ var react_1 = __importStar(require("react"));
32
43
  var styled_components_1 = __importStar(require("styled-components"));
33
44
  var hooks_1 = require("../hooks");
34
45
  function TooltipComponent(_a) {
35
- var children = _a.children, open = _a.open, tip = _a.tip, _b = _a.placement, placement = _b === void 0 ? 'top' : _b, _c = _a.className, className = _c === void 0 ? 'default' : _c, width = _a.width, _d = _a.dataTestId, dataTestId = _d === void 0 ? tip : _d;
36
- var _e = (0, hooks_1.useControl)(open), isOpened = _e.isOpened, handleOpen = _e.handleOpen, handleClose = _e.handleClose;
37
- var isControlled = open !== undefined;
46
+ var children = _a.children, isOpen = _a.isOpen, tip = _a.tip, _b = _a.withArrow, withArrow = _b === void 0 ? true : _b, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.className, className = _d === void 0 ? 'default' : _d, width = _a.width, dataTestId = _a.dataTestId;
47
+ var _e = (0, hooks_1.useControl)(isOpen), isOpened = _e.isOpened, handleOpen = _e.handleOpen, handleClose = _e.handleClose;
48
+ var isControlled = isOpen !== undefined;
38
49
  (0, react_1.useEffect)(function () {
39
50
  if (isControlled) {
40
- if (open) {
51
+ if (isOpen) {
41
52
  handleOpen();
42
53
  }
43
54
  else {
44
55
  handleClose();
45
56
  }
46
57
  }
47
- }, [open, isControlled, handleOpen, handleClose]);
48
- var handleEnter = (0, react_1.useCallback)(function () {
49
- handleOpen();
50
- }, [handleOpen]);
51
- var handleLeave = (0, react_1.useCallback)(function () {
52
- handleClose();
53
- }, [handleClose]);
54
- return (react_1.default.createElement(TooltipWrapper, { onMouseEnter: isControlled ? undefined : handleEnter, onMouseLeave: isControlled ? undefined : handleLeave, onClick: isControlled ? undefined : handleLeave, className: "tooltip-".concat(className), "data-component-name": "Tooltip/Tooltip" },
58
+ }, [isOpen, isControlled, handleOpen, handleClose]);
59
+ var controllers = !isControlled && {
60
+ onMouseEnter: handleOpen,
61
+ onMouseLeave: handleClose,
62
+ onClick: handleClose,
63
+ };
64
+ return (react_1.default.createElement(TooltipWrapper, __assign({}, controllers, { className: "tooltip-".concat(className), "data-component-name": "Tooltip/Tooltip" }),
55
65
  children,
56
- isOpened && (react_1.default.createElement(TooltipBody, { "data-cy": dataTestId, placement: placement, width: width }, tip))));
66
+ isOpened && (react_1.default.createElement(TooltipBody, { "data-cy": dataTestId || (typeof tip === 'string' ? tip : ''), placement: placement, width: width, withArrow: withArrow }, tip))));
57
67
  }
58
68
  exports.TooltipComponent = TooltipComponent;
59
69
  exports.Tooltip = (0, react_1.memo)(TooltipComponent);
60
70
  var PLACEMENTS = {
61
- top: (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n margin-top: -10px;\n\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top-width: 6px;\n border-top-style: solid;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n }\n "], ["\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n margin-top: -10px;\n\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top-width: 6px;\n border-top-style: solid;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n }\n "]))),
62
- bottom: (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n margin-bottom: -10px;\n\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-bottom-width: 6px;\n border-bottom-style: solid;\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n }\n "], ["\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n margin-bottom: -10px;\n\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-bottom-width: 6px;\n border-bottom-style: solid;\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n }\n "]))),
63
- left: (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n margin-left: -10px;\n\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left-width: 6px;\n border-left-style: solid;\n top: 50%;\n right: 0;\n transform: translate(99%, -50%);\n }\n "], ["\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n margin-left: -10px;\n\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left-width: 6px;\n border-left-style: solid;\n top: 50%;\n right: 0;\n transform: translate(99%, -50%);\n }\n "]))),
64
- right: (0, styled_components_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n top: 50%;\n right: 0;\n transform: translate(100%, -50%);\n margin-right: -10px;\n\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-right-width: 6px;\n border-right-style: solid;\n top: 50%;\n left: 0;\n transform: translate(-99%, -50%);\n }\n "], ["\n top: 50%;\n right: 0;\n transform: translate(100%, -50%);\n margin-right: -10px;\n\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-right-width: 6px;\n border-right-style: solid;\n top: 50%;\n left: 0;\n transform: translate(-99%, -50%);\n }\n "]))),
71
+ top: (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n margin-top: -10px;\n\n ", "\n "], ["\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n margin-top: -10px;\n\n ", "\n "])), function (_a) {
72
+ var withArrow = _a.withArrow;
73
+ return withArrow && (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top-width: 6px;\n border-top-style: solid;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n }\n "], ["\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-top-width: 6px;\n border-top-style: solid;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n }\n "])));
74
+ }),
75
+ bottom: (0, styled_components_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n margin-bottom: -10px;\n\n ", "\n "], ["\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 99%);\n margin-bottom: -10px;\n\n ", "\n "])), function (_a) {
76
+ var withArrow = _a.withArrow;
77
+ return withArrow && (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-bottom-width: 6px;\n border-bottom-style: solid;\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n }\n "], ["\n &::after {\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n border-bottom-width: 6px;\n border-bottom-style: solid;\n top: 0;\n left: 50%;\n transform: translate(-50%, -99%);\n }\n "])));
78
+ }),
79
+ left: (0, styled_components_1.css)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n margin-left: -10px;\n\n ", "\n "], ["\n top: 50%;\n left: 0;\n transform: translate(-100%, -50%);\n margin-left: -10px;\n\n ", "\n "])), function (_a) {
80
+ var withArrow = _a.withArrow;
81
+ return withArrow && (0, styled_components_1.css)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left-width: 6px;\n border-left-style: solid;\n top: 50%;\n right: 0;\n transform: translate(99%, -50%);\n }\n "], ["\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left-width: 6px;\n border-left-style: solid;\n top: 50%;\n right: 0;\n transform: translate(99%, -50%);\n }\n "])));
82
+ }),
83
+ right: (0, styled_components_1.css)(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n top: 50%;\n right: 0;\n transform: translate(100%, -50%);\n margin-right: -10px;\n\n ", "\n "], ["\n top: 50%;\n right: 0;\n transform: translate(100%, -50%);\n margin-right: -10px;\n\n ", "\n "])), function (_a) {
84
+ var withArrow = _a.withArrow;
85
+ return withArrow && (0, styled_components_1.css)(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-right-width: 6px;\n border-right-style: solid;\n top: 50%;\n left: 0;\n transform: translate(-99%, -50%);\n }\n "], ["\n &::after {\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-right-width: 6px;\n border-right-style: solid;\n top: 50%;\n left: 0;\n transform: translate(-99%, -50%);\n }\n "])));
86
+ }),
65
87
  };
66
- var TooltipWrapper = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n position: relative;\n display: inline-block;\n"], ["\n position: relative;\n display: inline-block;\n"])));
67
- var TooltipBody = styled_components_1.default.span(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n pointer-events: none;\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"], ["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n pointer-events: none;\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"])), function (_a) {
88
+ var TooltipWrapper = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: relative;\n display: inline-block;\n"], ["\n position: relative;\n display: inline-block;\n"])));
89
+ var TooltipBody = styled_components_1.default.span(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n pointer-events: none;\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"], ["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n pointer-events: none;\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"])), function (_a) {
68
90
  var width = _a.width;
69
91
  return width || '120px';
70
92
  }, function (_a) {
71
93
  var placement = _a.placement;
72
- return "".concat(PLACEMENTS[placement], ";");
94
+ return (0, styled_components_1.css)(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n ", ";\n "], ["\n ", ";\n "])), PLACEMENTS[placement]);
73
95
  });
74
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
96
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11;
@@ -0,0 +1,15 @@
1
+ export declare class MockIntersectionObserver {
2
+ readonly root: Element | Document | null;
3
+ readonly rootMargin: string;
4
+ readonly thresholds: ReadonlyArray<number>;
5
+ private viewPort;
6
+ private entries;
7
+ private readonly callback;
8
+ constructor(callback: IntersectionObserverCallback, options?: IntersectionObserverInit);
9
+ private intersect;
10
+ isInViewPort(target: HTMLElement): boolean;
11
+ observe(target: HTMLElement): void;
12
+ unobserve(target: HTMLElement): void;
13
+ disconnect(): void;
14
+ takeRecords(): any[];
15
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockIntersectionObserver = void 0;
4
+ var MockIntersectionObserver = /** @class */ (function () {
5
+ function MockIntersectionObserver(callback, options) {
6
+ var _this = this;
7
+ this.intersect = function () {
8
+ _this.entries.map(function (entry) {
9
+ entry.isIntersecting = _this.isInViewPort(entry.target);
10
+ });
11
+ _this.callback(_this.entries, _this);
12
+ };
13
+ this.viewPort = (options === null || options === void 0 ? void 0 : options.root) ? options.root : window;
14
+ this.entries = [];
15
+ this.root = null;
16
+ this.rootMargin = '0px';
17
+ this.thresholds = [1];
18
+ this.callback = callback;
19
+ this.viewPort.addEventListener('scroll', this.intersect);
20
+ }
21
+ MockIntersectionObserver.prototype.isInViewPort = function (target) {
22
+ return target.id !== 'toc-0';
23
+ };
24
+ MockIntersectionObserver.prototype.observe = function (target) {
25
+ this.entries.push({ isIntersecting: false, target: target });
26
+ };
27
+ MockIntersectionObserver.prototype.unobserve = function (target) {
28
+ this.entries = this.entries.filter(function (ob) { return ob.target !== target; });
29
+ };
30
+ MockIntersectionObserver.prototype.disconnect = function () {
31
+ this.viewPort.removeEventListener('scroll', this.intersect);
32
+ this.entries = [];
33
+ };
34
+ MockIntersectionObserver.prototype.takeRecords = function () {
35
+ return this.entries;
36
+ };
37
+ return MockIntersectionObserver;
38
+ }());
39
+ exports.MockIntersectionObserver = MockIntersectionObserver;
@@ -1,2 +1,2 @@
1
1
  export declare type UseActiveHeadingReturnType = string | undefined;
2
- export declare function useActiveHeading(contentElement: Element | null): UseActiveHeadingReturnType;
2
+ export declare function useActiveHeading(contentElement: HTMLDivElement | null, displayedHeaders: Array<string | undefined>): UseActiveHeadingReturnType;
@@ -18,33 +18,82 @@ var __read = (this && this.__read) || function (o, n) {
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.useActiveHeading = void 0;
20
20
  var react_1 = require("react");
21
- function useActiveHeading(contentElement) {
21
+ var react_router_dom_1 = require("react-router-dom");
22
+ function useActiveHeading(contentElement, displayedHeaders) {
22
23
  var _a = __read((0, react_1.useState)(undefined), 2), heading = _a[0], setHeading = _a[1];
23
- var headings = (0, react_1.useMemo)(function () { return contentElement && contentElement.querySelectorAll('.heading-anchor'); }, [contentElement]);
24
- var handler = (0, react_1.useCallback)(
25
- // throttle(
26
- function () {
27
- if (!headings) {
24
+ var _b = __read((0, react_1.useState)([]), 2), headingElements = _b[0], setHeadingElements = _b[1];
25
+ var headingElementsRef = (0, react_1.useRef)({});
26
+ var history = (0, react_router_dom_1.useHistory)();
27
+ var getVisibleHeadings = function () {
28
+ var visibleHeadings = [];
29
+ for (var key in headingElementsRef.current) {
30
+ var headingElement = headingElementsRef.current[key];
31
+ if (headingElement.isIntersecting) {
32
+ visibleHeadings.push(headingElement);
33
+ }
34
+ }
35
+ return visibleHeadings;
36
+ };
37
+ var getIndexFromId = function (id) {
38
+ return headingElements.findIndex(function (item) { return item.id === id; });
39
+ };
40
+ var findHeaders = function (allContent) {
41
+ var allHeaders = allContent.querySelectorAll('.heading-anchor');
42
+ return Array.from(allHeaders);
43
+ };
44
+ var intersectionCallback = function (headings) {
45
+ var _a;
46
+ headingElementsRef.current = headings.reduce(function (map, headingElement) {
47
+ map[headingElement.target.id] = headingElement;
48
+ return map;
49
+ }, headingElementsRef.current);
50
+ var totalHeight = window.scrollY + window.innerHeight;
51
+ // handle bottom of the page
52
+ if (totalHeight >= document.body.scrollHeight) {
53
+ var newHeading = ((_a = headingElements[(headingElements === null || headingElements === void 0 ? void 0 : headingElements.length) - 1]) === null || _a === void 0 ? void 0 : _a.id) || undefined;
54
+ setHeading(newHeading);
28
55
  return;
29
56
  }
30
- for (var i = 0; i < headings.length; i++) {
31
- if (headings[i].offsetTop > window.scrollY) {
32
- var newHeading = i === 0 ? undefined : headings[i - 1].getAttribute('id') || undefined;
33
- setHeading(newHeading);
34
- return;
35
- }
57
+ var visibleHeadings = getVisibleHeadings();
58
+ if (!visibleHeadings.length) {
59
+ return;
60
+ }
61
+ if (visibleHeadings.length === 1) {
62
+ setHeading(visibleHeadings[0].target.id);
63
+ return;
64
+ }
65
+ visibleHeadings.sort(function (a, b) {
66
+ return getIndexFromId(a.target.id) - getIndexFromId(b.target.id);
67
+ });
68
+ setHeading(visibleHeadings[0].target.id);
69
+ };
70
+ (0, react_1.useEffect)(function () {
71
+ if (!contentElement) {
72
+ return;
36
73
  }
37
- }, [headings]);
74
+ setHeadingElements(findHeaders(contentElement));
75
+ var unlisten = history.listen(function () {
76
+ setHeadingElements(findHeaders(contentElement));
77
+ });
78
+ return function () { return unlisten(); };
79
+ }, [contentElement]);
38
80
  (0, react_1.useEffect)(function () {
39
- if (typeof window === 'undefined' || !headings || !headings.length) {
40
- return undefined;
81
+ if (!(headingElements === null || headingElements === void 0 ? void 0 : headingElements.length)) {
82
+ return;
41
83
  }
42
- window.addEventListener('scroll', handler, {
43
- capture: false,
84
+ headingElementsRef.current = {};
85
+ // Bottom rootMargin -30% changes part of the view where IntersectionObserver starts to detect headers
86
+ var observer = new IntersectionObserver(intersectionCallback, {
87
+ rootMargin: '0px 0px -30% 0px',
88
+ threshold: 1,
89
+ });
90
+ headingElements === null || headingElements === void 0 ? void 0 : headingElements.forEach(function (element) {
91
+ if (displayedHeaders.includes(element.id)) {
92
+ observer.observe(element);
93
+ }
44
94
  });
45
- handler();
46
- return function () { return window.removeEventListener('scroll', handler); };
47
- }, [handler, headings]);
95
+ return function () { return observer.disconnect(); };
96
+ }, [headingElements, displayedHeaders]);
48
97
  return heading;
49
98
  }
50
99
  exports.useActiveHeading = useActiveHeading;
package/index.d.ts CHANGED
@@ -14,3 +14,4 @@ export * from './utils';
14
14
  export * from './globalStyle';
15
15
  export * from './OperationBadge';
16
16
  export * from './TableOfContent';
17
+ export * from './Profile';
package/index.js CHANGED
@@ -30,3 +30,4 @@ __exportStar(require("./utils"), exports);
30
30
  __exportStar(require("./globalStyle"), exports);
31
31
  __exportStar(require("./OperationBadge"), exports);
32
32
  __exportStar(require("./TableOfContent"), exports);
33
+ __exportStar(require("./Profile"), exports);
@@ -7,9 +7,9 @@ interface PageLink {
7
7
  link: string;
8
8
  type: 'link';
9
9
  }
10
- export declare function useThemeSettings(name: string): RawTheme['settings'];
10
+ export declare function useThemeSettings(_: string): RawTheme['settings'];
11
11
  export declare function useSidebarSiblingsData(): {
12
- nextPage: PageLink;
13
- prevPage: PageLink;
12
+ nextPage: PageLink | null;
13
+ prevPage: PageLink | null;
14
14
  };
15
15
  export {};
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useSidebarSiblingsData = exports.useThemeSettings = void 0;
4
- function useThemeSettings(name) {
4
+ function useThemeSettings(_) {
5
5
  return {
6
- name: name,
7
- settings: {
8
- toc: { header: 'header', hide: false },
9
- navigation: {
10
- nextPageLink: { label: 'next page' },
11
- previousPageLink: { label: 'prev page' },
12
- },
6
+ toc: { header: 'header', hide: false },
7
+ navigation: {
8
+ nextPageLink: { label: 'next page theme settings label' },
9
+ previousPageLink: { label: 'prev page theme settings label' },
13
10
  },
14
11
  };
15
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.1.28",
3
+ "version": "0.1.31",
4
4
  "description": "Shared UI components",
5
5
  "author": "team@redocly.com",
6
6
  "license": "SEE LICENSE IN LICENSE",
package/settings.yaml CHANGED
@@ -7,6 +7,10 @@ toc:
7
7
  label: On this page
8
8
  navigation:
9
9
  hide: false
10
+ nextPageLink:
11
+ hide: false
12
+ prevPageLink:
13
+ hide: false
10
14
  navbar:
11
15
  hide: false
12
16
  sidebar:
@@ -37,7 +37,7 @@ function CopyButtonWrapperComponent({
37
37
  <Tooltip
38
38
  className="copy-button"
39
39
  tip={ClipboardService.isSupported() ? 'Copied' : 'Not supported in your browser'}
40
- open={tooltip.isOpened}
40
+ isOpen={tooltip.isOpened}
41
41
  >
42
42
  <SamplesControlButton onClick={copy} data-cy={dataTestId}>
43
43
  Copy