@diplodoc/components 4.24.0 → 4.26.0

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 (163) hide show
  1. package/README.md +1 -1
  2. package/build/cjs/components/BookmarkButton/BookmarkButton.css +1 -1
  3. package/build/cjs/components/BookmarkButton/BookmarkButton.css.map +3 -3
  4. package/build/cjs/components/Breadcrumbs/Breadcrumbs.css.map +1 -1
  5. package/build/cjs/components/ContributorAvatars/ContributorAvatars.css.map +1 -1
  6. package/build/cjs/components/Contributors/Contributors.css.map +1 -1
  7. package/build/cjs/components/Control/Control.css.map +1 -1
  8. package/build/cjs/components/Controls/Controls.css.map +1 -1
  9. package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.css.map +1 -1
  10. package/build/cjs/components/Controls/single-controls/LangControl/LangControl.css.map +1 -1
  11. package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +1 -1
  12. package/build/cjs/components/DocLayout/DocLayout.css.map +1 -1
  13. package/build/cjs/components/DocLeadingPage/DocLeadingPage.css.map +1 -1
  14. package/build/cjs/components/DocLeadingPage/DocLeadingPage.js +1 -1
  15. package/build/cjs/components/DocLeadingPage/DocLeadingPage.js.map +2 -2
  16. package/build/cjs/components/DocPage/DocPage.css +1 -8
  17. package/build/cjs/components/DocPage/DocPage.css.map +3 -3
  18. package/build/cjs/components/DocPage/DocPage.js.map +2 -2
  19. package/build/cjs/components/DocPageTitle/DocPageTitle.css +2 -0
  20. package/build/cjs/components/DocPageTitle/DocPageTitle.css.map +3 -3
  21. package/build/cjs/components/ErrorPage/ErrorPage.css.map +1 -1
  22. package/build/cjs/components/Feedback/Feedback.css.map +1 -1
  23. package/build/cjs/components/Mark/Mark.css.map +1 -1
  24. package/build/cjs/components/MiniToc/MiniToc.css +1 -0
  25. package/build/cjs/components/MiniToc/MiniToc.css.map +3 -3
  26. package/build/cjs/components/MiniToc/MiniToc.d.ts +8 -2
  27. package/build/cjs/components/MiniToc/MiniToc.js +47 -38
  28. package/build/cjs/components/MiniToc/MiniToc.js.map +3 -3
  29. package/build/cjs/components/MobileControls/MobileControl/MobileControl.css.map +1 -1
  30. package/build/cjs/components/MobileControls/MobileControlSheet/MobileControlSheet.css.map +1 -1
  31. package/build/cjs/components/MobileControls/MobileControls.css.map +1 -1
  32. package/build/cjs/components/Notification/Notification.css.map +1 -1
  33. package/build/cjs/components/Paginator/Paginator.css.map +1 -1
  34. package/build/cjs/components/SearchBar/SearchBar.css.map +1 -1
  35. package/build/cjs/components/SearchItem/SearchItem.css.map +1 -1
  36. package/build/cjs/components/SearchPage/SearchPage.css.map +1 -1
  37. package/build/cjs/components/SearchSuggest/index.css.map +1 -1
  38. package/build/cjs/components/ShareButton/ShareButton.css +9 -0
  39. package/build/cjs/components/ShareButton/ShareButton.css.map +7 -0
  40. package/build/cjs/components/ShareButton/ShareButton.d.ts +1 -0
  41. package/build/cjs/components/ShareButton/ShareButton.js +11 -8
  42. package/build/cjs/components/ShareButton/ShareButton.js.map +3 -3
  43. package/build/cjs/components/SubNavigation/SubNavigation.css.map +1 -1
  44. package/build/cjs/components/SubNavigation/SubNavigation.d.ts +1 -1
  45. package/build/cjs/components/SubNavigation/SubNavigation.js +10 -13
  46. package/build/cjs/components/SubNavigation/SubNavigation.js.map +2 -2
  47. package/build/cjs/components/SubNavigation/hooks/useHeadingIntersectionObserver.d.ts +17 -0
  48. package/build/cjs/components/SubNavigation/hooks/useHeadingIntersectionObserver.js +75 -0
  49. package/build/cjs/components/SubNavigation/hooks/useHeadingIntersectionObserver.js.map +7 -0
  50. package/build/cjs/components/SubNavigation/hooks/useMiniTocData.d.ts +1 -3
  51. package/build/cjs/components/SubNavigation/hooks/useMiniTocData.js +2 -6
  52. package/build/cjs/components/SubNavigation/hooks/useMiniTocData.js.map +2 -2
  53. package/build/cjs/components/Subscribe/Subscribe.css.map +1 -1
  54. package/build/cjs/components/Toc/Toc.css.map +1 -1
  55. package/build/cjs/components/Toc/Toc.d.ts +0 -3
  56. package/build/cjs/components/Toc/Toc.js +0 -31
  57. package/build/cjs/components/Toc/Toc.js.map +2 -2
  58. package/build/cjs/components/TocItem/TocItem.css.map +1 -1
  59. package/build/cjs/components/TocLable/TocLabel.css.map +1 -1
  60. package/build/cjs/components/TocNavPanel/TocNavPanel.css.map +1 -1
  61. package/build/cjs/components/ToggleArrow/ToggleArrow.css.map +1 -1
  62. package/build/cjs/components/UpdatedAtDate/UpdatedAtDate.css.map +1 -1
  63. package/build/cjs/components/navigation/CustomNavigation/CustomNavigation.css.map +1 -1
  64. package/build/cjs/components/navigation/MobileDropdown/MobileDropdown.css.map +1 -1
  65. package/build/cjs/components/navigation/Sidebar/Sidebar.css.map +1 -1
  66. package/build/cjs/components/navigation/SidebarContent/SidebarContent.css.map +1 -1
  67. package/build/cjs/components/navigation/SidebarNavigation/SidebarNavigation.css.map +1 -1
  68. package/build/cjs/components/navigation/ToMainMenu/ToMainMenu.css.map +1 -1
  69. package/build/cjs/contexts/LangContext.js.map +2 -2
  70. package/build/cjs/hooks/useStableCallback.d.ts +1 -0
  71. package/build/cjs/{components/Scrollspy/index.js → hooks/useStableCallback.js} +18 -6
  72. package/build/cjs/hooks/useStableCallback.js.map +7 -0
  73. package/build/cjs/index.d.ts +1 -1
  74. package/build/cjs/index.js +1 -1
  75. package/build/cjs/index.js.map +2 -2
  76. package/build/esm/components/BookmarkButton/BookmarkButton.css +1 -1
  77. package/build/esm/components/BookmarkButton/BookmarkButton.css.map +3 -3
  78. package/build/esm/components/Breadcrumbs/Breadcrumbs.css.map +1 -1
  79. package/build/esm/components/ContributorAvatars/ContributorAvatars.css.map +1 -1
  80. package/build/esm/components/Contributors/Contributors.css.map +1 -1
  81. package/build/esm/components/Control/Control.css.map +1 -1
  82. package/build/esm/components/Controls/Controls.css.map +1 -1
  83. package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.css.map +1 -1
  84. package/build/esm/components/Controls/single-controls/LangControl/LangControl.css.map +1 -1
  85. package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +1 -1
  86. package/build/esm/components/DocLayout/DocLayout.css.map +1 -1
  87. package/build/esm/components/DocLeadingPage/DocLeadingPage.css.map +1 -1
  88. package/build/esm/components/DocLeadingPage/DocLeadingPage.js +1 -1
  89. package/build/esm/components/DocLeadingPage/DocLeadingPage.js.map +2 -2
  90. package/build/esm/components/DocPage/DocPage.css +1 -8
  91. package/build/esm/components/DocPage/DocPage.css.map +3 -3
  92. package/build/esm/components/DocPage/DocPage.js.map +2 -2
  93. package/build/esm/components/DocPageTitle/DocPageTitle.css +2 -0
  94. package/build/esm/components/DocPageTitle/DocPageTitle.css.map +3 -3
  95. package/build/esm/components/ErrorPage/ErrorPage.css.map +1 -1
  96. package/build/esm/components/Feedback/Feedback.css.map +1 -1
  97. package/build/esm/components/Mark/Mark.css.map +1 -1
  98. package/build/esm/components/MiniToc/MiniToc.css +1 -0
  99. package/build/esm/components/MiniToc/MiniToc.css.map +3 -3
  100. package/build/esm/components/MiniToc/MiniToc.d.ts +8 -2
  101. package/build/esm/components/MiniToc/MiniToc.js +48 -39
  102. package/build/esm/components/MiniToc/MiniToc.js.map +2 -2
  103. package/build/esm/components/MobileControls/MobileControl/MobileControl.css.map +1 -1
  104. package/build/esm/components/MobileControls/MobileControlSheet/MobileControlSheet.css.map +1 -1
  105. package/build/esm/components/MobileControls/MobileControls.css.map +1 -1
  106. package/build/esm/components/Notification/Notification.css.map +1 -1
  107. package/build/esm/components/Paginator/Paginator.css.map +1 -1
  108. package/build/esm/components/SearchBar/SearchBar.css.map +1 -1
  109. package/build/esm/components/SearchItem/SearchItem.css.map +1 -1
  110. package/build/esm/components/SearchPage/SearchPage.css.map +1 -1
  111. package/build/esm/components/SearchSuggest/index.css.map +1 -1
  112. package/build/esm/components/ShareButton/ShareButton.css +9 -0
  113. package/build/esm/components/ShareButton/ShareButton.css.map +7 -0
  114. package/build/esm/components/ShareButton/ShareButton.d.ts +1 -0
  115. package/build/esm/components/ShareButton/ShareButton.js +11 -8
  116. package/build/esm/components/ShareButton/ShareButton.js.map +2 -2
  117. package/build/esm/components/SubNavigation/SubNavigation.css.map +1 -1
  118. package/build/esm/components/SubNavigation/SubNavigation.d.ts +1 -1
  119. package/build/esm/components/SubNavigation/SubNavigation.js +10 -13
  120. package/build/esm/components/SubNavigation/SubNavigation.js.map +2 -2
  121. package/build/esm/components/SubNavigation/hooks/useHeadingIntersectionObserver.d.ts +17 -0
  122. package/build/esm/components/SubNavigation/hooks/useHeadingIntersectionObserver.js +54 -0
  123. package/build/esm/components/SubNavigation/hooks/useHeadingIntersectionObserver.js.map +7 -0
  124. package/build/esm/components/SubNavigation/hooks/useMiniTocData.d.ts +1 -3
  125. package/build/esm/components/SubNavigation/hooks/useMiniTocData.js +2 -6
  126. package/build/esm/components/SubNavigation/hooks/useMiniTocData.js.map +2 -2
  127. package/build/esm/components/Subscribe/Subscribe.css.map +1 -1
  128. package/build/esm/components/Toc/Toc.css.map +1 -1
  129. package/build/esm/components/Toc/Toc.d.ts +0 -3
  130. package/build/esm/components/Toc/Toc.js +0 -31
  131. package/build/esm/components/Toc/Toc.js.map +2 -2
  132. package/build/esm/components/TocItem/TocItem.css.map +1 -1
  133. package/build/esm/components/TocLable/TocLabel.css.map +1 -1
  134. package/build/esm/components/TocNavPanel/TocNavPanel.css.map +1 -1
  135. package/build/esm/components/ToggleArrow/ToggleArrow.css.map +1 -1
  136. package/build/esm/components/UpdatedAtDate/UpdatedAtDate.css.map +1 -1
  137. package/build/esm/components/navigation/CustomNavigation/CustomNavigation.css.map +1 -1
  138. package/build/esm/components/navigation/MobileDropdown/MobileDropdown.css.map +1 -1
  139. package/build/esm/components/navigation/Sidebar/Sidebar.css.map +1 -1
  140. package/build/esm/components/navigation/SidebarContent/SidebarContent.css.map +1 -1
  141. package/build/esm/components/navigation/SidebarNavigation/SidebarNavigation.css.map +1 -1
  142. package/build/esm/components/navigation/ToMainMenu/ToMainMenu.css.map +1 -1
  143. package/build/esm/contexts/LangContext.js.map +2 -2
  144. package/build/esm/hooks/useStableCallback.d.ts +1 -0
  145. package/build/esm/hooks/useStableCallback.js +12 -0
  146. package/build/esm/hooks/useStableCallback.js.map +7 -0
  147. package/build/esm/index.d.ts +1 -1
  148. package/build/esm/index.js +1 -1
  149. package/build/esm/index.js.map +2 -2
  150. package/build/index.css.map +1 -1
  151. package/build/themes/common/index.css.map +1 -1
  152. package/package.json +3 -1
  153. package/build/cjs/components/Scrollspy/Scrollspy.d.ts +0 -59
  154. package/build/cjs/components/Scrollspy/Scrollspy.js +0 -337
  155. package/build/cjs/components/Scrollspy/Scrollspy.js.map +0 -7
  156. package/build/cjs/components/Scrollspy/index.d.ts +0 -1
  157. package/build/cjs/components/Scrollspy/index.js.map +0 -7
  158. package/build/esm/components/Scrollspy/Scrollspy.d.ts +0 -59
  159. package/build/esm/components/Scrollspy/Scrollspy.js +0 -309
  160. package/build/esm/components/Scrollspy/Scrollspy.js.map +0 -7
  161. package/build/esm/components/Scrollspy/index.d.ts +0 -1
  162. package/build/esm/components/Scrollspy/index.js +0 -3
  163. package/build/esm/components/Scrollspy/index.js.map +0 -7
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "React components for drawing Diplodoc documentation",
4
4
  "author": "YFM Team <yfm-team@yandex.ru>",
5
5
  "license": "MIT",
6
- "version": "4.24.0",
6
+ "version": "4.26.0",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git@github.com:yandex-cloud/docs-components.git"
@@ -53,6 +53,7 @@
53
53
  "typecheck": "tsc -p . --noEmit",
54
54
  "test": "exit 0",
55
55
  "test:playwright": "npx playwright test --config playwright/playwright.config.ts",
56
+ "test:playwright:update": "UPDATE_SNAPSHOTS=true npx playwright test --config playwright/playwright.config.ts --update-snapshots",
56
57
  "playwright:docker": "sh ./playwright/playwright-docker.sh",
57
58
  "playwright:docker:windows": "sh ./playwright/playwright-docker-windows.sh",
58
59
  "dev": "run-s build _dev:watch",
@@ -78,6 +79,7 @@
78
79
  "@gravity-ui/uikit": "^6.2.0",
79
80
  "@popperjs/core": "^2.11.2",
80
81
  "bem-cn-lite": "4.1.0",
82
+ "clsx": "^2.1.1",
81
83
  "hoist-non-react-statics": "^3.3.2",
82
84
  "i18next": "^24.2.2",
83
85
  "isomorphic-dompurify": "^2.20.0",
@@ -1,59 +0,0 @@
1
- import React, { HTMLProps, ReactElement } from 'react';
2
- import { Router } from '../../models';
3
- import { InnerProps } from '../../utils';
4
- interface ScrollspyDefaultProps {
5
- currentClassName: string;
6
- overflowedClassName: string;
7
- sectionOffset: number;
8
- headerHeight: number;
9
- }
10
- export interface ScrollspyProps extends Partial<ScrollspyDefaultProps>, Partial<HTMLProps<HTMLUListElement>> {
11
- items: string[];
12
- children: ReactElement[];
13
- router: Router;
14
- onSectionClick?: (event: MouseEvent) => void;
15
- className?: string;
16
- overflowedClassName?: string;
17
- scrollToListItem?: boolean;
18
- /** Is used to identify items for {@link onActiveItemTitleChange} */
19
- titles?: string[];
20
- /** Is called with active item's corresponding value in {@link titles}, if one exists */
21
- onActiveItemTitleChange?: (title: string) => void;
22
- }
23
- interface ScrollspyState {
24
- targetItems: HTMLElement[];
25
- inViewState: boolean[];
26
- }
27
- type ScrollspyInnerProps = InnerProps<ScrollspyProps, ScrollspyDefaultProps>;
28
- export declare class Scrollspy extends React.Component<ScrollspyInnerProps, ScrollspyState> {
29
- static defaultProps: ScrollspyDefaultProps;
30
- containerRef: React.RefObject<HTMLUListElement>;
31
- itemRefs: React.RefObject<HTMLDivElement>[];
32
- scrollByClick: boolean;
33
- prevOffset: number;
34
- hasActiveHash: boolean;
35
- firstItemIndexInView: number;
36
- lastItemIndexInView: number;
37
- overflowChecked: boolean;
38
- constructor(props: ScrollspyInnerProps);
39
- componentDidMount(): void;
40
- componentDidUpdate(prevProps: Readonly<ScrollspyProps>, prevState: Readonly<ScrollspyState>): void;
41
- componentWillUnmount(): void;
42
- render(): React.JSX.Element;
43
- private updateFirstItemIndexInView;
44
- private getContainerValues;
45
- private updateScrollValues;
46
- private syncScroll;
47
- private scrollToListItem;
48
- private initItems;
49
- private initSections;
50
- private saveActiveItems;
51
- private getViewState;
52
- private getActiveItemTitle;
53
- private handleScroll;
54
- private handleScrollDebounced;
55
- private pauseScrollHandler;
56
- private handleSectionClick;
57
- private checkListOverflow;
58
- }
59
- export {};
@@ -1,337 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
- var __getProtoOf = Object.getPrototypeOf;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
- var __spreadValues = (a, b) => {
12
- for (var prop in b || (b = {}))
13
- if (__hasOwnProp.call(b, prop))
14
- __defNormalProp(a, prop, b[prop]);
15
- if (__getOwnPropSymbols)
16
- for (var prop of __getOwnPropSymbols(b)) {
17
- if (__propIsEnum.call(b, prop))
18
- __defNormalProp(a, prop, b[prop]);
19
- }
20
- return a;
21
- };
22
- var __objRest = (source, exclude) => {
23
- var target = {};
24
- for (var prop in source)
25
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
26
- target[prop] = source[prop];
27
- if (source != null && __getOwnPropSymbols)
28
- for (var prop of __getOwnPropSymbols(source)) {
29
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
30
- target[prop] = source[prop];
31
- }
32
- return target;
33
- };
34
- var __export = (target, all) => {
35
- for (var name in all)
36
- __defProp(target, name, { get: all[name], enumerable: true });
37
- };
38
- var __copyProps = (to, from, except, desc) => {
39
- if (from && typeof from === "object" || typeof from === "function") {
40
- for (let key of __getOwnPropNames(from))
41
- if (!__hasOwnProp.call(to, key) && key !== except)
42
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
43
- }
44
- return to;
45
- };
46
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
47
- // If the importer is in node compatibility mode or this is not an ESM
48
- // file that has been converted to a CommonJS file using a Babel-
49
- // compatible transform (i.e. "__esModule" has not been set), then set
50
- // "default" to the CommonJS "module.exports" for node compatibility.
51
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
52
- mod
53
- ));
54
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
55
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
56
-
57
- // src/components/Scrollspy/Scrollspy.tsx
58
- var Scrollspy_exports = {};
59
- __export(Scrollspy_exports, {
60
- Scrollspy: () => Scrollspy
61
- });
62
- module.exports = __toCommonJS(Scrollspy_exports);
63
- var import_react = __toESM(require("react"));
64
- var import_debounce = __toESM(require("lodash/debounce"));
65
- var import_isEqual = __toESM(require("lodash/isEqual"));
66
- var import_scroll_into_view_if_needed = __toESM(require("scroll-into-view-if-needed"));
67
- var Scrollspy = class extends import_react.default.Component {
68
- constructor(props) {
69
- super(props);
70
- __publicField(this, "containerRef", import_react.default.createRef());
71
- __publicField(this, "itemRefs", this.props.items.map(() => import_react.default.createRef()));
72
- __publicField(this, "scrollByClick");
73
- __publicField(this, "prevOffset");
74
- __publicField(this, "hasActiveHash");
75
- __publicField(this, "firstItemIndexInView");
76
- __publicField(this, "lastItemIndexInView");
77
- __publicField(this, "overflowChecked");
78
- __publicField(this, "updateScrollValues", () => {
79
- const containerEl = this.containerRef.current;
80
- if (!containerEl) {
81
- return;
82
- }
83
- const { childHeight, maxItemsInView } = this.getContainerValues(containerEl);
84
- this.lastItemIndexInView = Math.round(containerEl.scrollTop / childHeight) + maxItemsInView - 1;
85
- this.updateFirstItemIndexInView(maxItemsInView);
86
- });
87
- __publicField(this, "scrollToListItem", () => {
88
- if (!this.props.scrollToListItem) {
89
- return;
90
- }
91
- let itemIndex = this.state.inViewState.findIndex((isActive) => isActive);
92
- if (itemIndex < 0) {
93
- itemIndex = 0;
94
- }
95
- const ref = this.itemRefs[itemIndex] && this.itemRefs[itemIndex].current;
96
- if (ref) {
97
- (0, import_scroll_into_view_if_needed.default)(ref, {
98
- scrollMode: "if-needed",
99
- block: "nearest",
100
- inline: "nearest",
101
- behavior: "smooth"
102
- });
103
- }
104
- });
105
- __publicField(this, "initSections", () => {
106
- this.saveActiveItems();
107
- });
108
- __publicField(this, "handleScroll", () => {
109
- if (this.scrollByClick) {
110
- window.removeEventListener("scroll", this.handleScrollDebounced);
111
- window.addEventListener("scroll", this.handleScroll);
112
- this.scrollByClick = false;
113
- }
114
- this.saveActiveItems();
115
- });
116
- // eslint-disable-next-line @typescript-eslint/member-ordering, react/sort-comp
117
- __publicField(this, "handleScrollDebounced", (0, import_debounce.default)(this.handleScroll, 100));
118
- __publicField(this, "handleSectionClick", (event) => {
119
- const { onSectionClick } = this.props;
120
- const { target } = event;
121
- if (target && target.tagName === "A") {
122
- event.stopPropagation();
123
- this.pauseScrollHandler();
124
- this.saveActiveItems(target.hash);
125
- if (onSectionClick) {
126
- onSectionClick(event);
127
- }
128
- }
129
- });
130
- __publicField(this, "checkListOverflow", () => {
131
- var _a, _b, _c;
132
- const { containerRef, itemRefs } = this;
133
- const { overflowedClassName } = this.props;
134
- const containerHeight = (_b = (_a = containerRef.current) == null ? void 0 : _a.offsetHeight) != null ? _b : 0;
135
- const itemsHeight = itemRefs.reduce(
136
- (heightSum, item) => {
137
- var _a2, _b2;
138
- return heightSum + ((_b2 = (_a2 = item.current) == null ? void 0 : _a2.offsetHeight) != null ? _b2 : 0);
139
- },
140
- 0
141
- );
142
- if (containerHeight < itemsHeight) {
143
- (_c = containerRef.current) == null ? void 0 : _c.classList.add(overflowedClassName);
144
- }
145
- });
146
- this.state = {
147
- targetItems: [],
148
- inViewState: []
149
- };
150
- this.overflowChecked = false;
151
- this.scrollByClick = false;
152
- this.prevOffset = 0;
153
- this.hasActiveHash = false;
154
- this.firstItemIndexInView = -1;
155
- this.lastItemIndexInView = -1;
156
- }
157
- componentDidMount() {
158
- this.initItems();
159
- window.addEventListener("scroll", this.handleScroll);
160
- const containerEl = this.containerRef.current;
161
- if (containerEl) {
162
- containerEl.addEventListener("scroll", this.updateScrollValues);
163
- }
164
- this.checkListOverflow();
165
- }
166
- componentDidUpdate(prevProps, prevState) {
167
- const { items, router } = this.props;
168
- const { inViewState } = this.state;
169
- if (!(0, import_isEqual.default)(inViewState, prevState.inViewState)) {
170
- this.scrollToListItem();
171
- }
172
- if (!(0, import_isEqual.default)(items, prevProps.items) || prevProps.router.pathname !== router.pathname) {
173
- this.initItems();
174
- }
175
- if (!this.overflowChecked) {
176
- this.overflowChecked = true;
177
- this.checkListOverflow();
178
- }
179
- if (router.hash !== prevProps.router.hash) {
180
- this.pauseScrollHandler();
181
- this.saveActiveItems(router.hash);
182
- }
183
- }
184
- componentWillUnmount() {
185
- window.removeEventListener("scroll", this.handleScroll);
186
- const containerEl = this.containerRef.current;
187
- if (containerEl) {
188
- containerEl.removeEventListener("scroll", this.updateScrollValues);
189
- }
190
- }
191
- render() {
192
- const _a = this.props, { children, currentClassName, className } = _a, rest = __objRest(_a, ["children", "currentClassName", "className"]);
193
- const { inViewState } = this.state;
194
- const items = children.map((child, index) => {
195
- if (!child) {
196
- return null;
197
- }
198
- const ChildTag = child.type;
199
- let childClassNames = child.props.className;
200
- if (inViewState[index] && currentClassName.length > 0) {
201
- childClassNames += ` ${currentClassName}`;
202
- this.syncScroll(index);
203
- }
204
- return /* @__PURE__ */ import_react.default.createElement(
205
- ChildTag,
206
- {
207
- key: child.key,
208
- className: childClassNames,
209
- onClick: this.handleSectionClick,
210
- ref: this.itemRefs[index],
211
- "aria-current": inViewState[index] ? "location" : void 0
212
- },
213
- child.props.children
214
- );
215
- });
216
- return /* @__PURE__ */ import_react.default.createElement("ul", __spreadValues({ className, ref: this.containerRef }, rest), items);
217
- }
218
- updateFirstItemIndexInView(maxItemsInView) {
219
- this.firstItemIndexInView = Math.max(this.lastItemIndexInView - (maxItemsInView - 1), 0);
220
- }
221
- getContainerValues(containerEl) {
222
- const { children } = this.props;
223
- const childHeight = Math.round(containerEl.scrollHeight / children.length);
224
- const maxItemsInView = Math.round(containerEl.clientHeight / childHeight);
225
- return { childHeight, maxItemsInView };
226
- }
227
- syncScroll(index) {
228
- const { children } = this.props;
229
- const containerEl = this.containerRef.current;
230
- if (!containerEl) {
231
- return;
232
- }
233
- const { childHeight, maxItemsInView } = this.getContainerValues(containerEl);
234
- if (this.lastItemIndexInView === -1) {
235
- this.lastItemIndexInView = maxItemsInView - 1;
236
- }
237
- this.updateFirstItemIndexInView(maxItemsInView);
238
- let itemInView = false;
239
- if (index >= this.lastItemIndexInView) {
240
- this.lastItemIndexInView = Math.min(index + 1, children.length - 1);
241
- } else if (index <= this.firstItemIndexInView) {
242
- this.lastItemIndexInView = Math.max(index + maxItemsInView - 2, maxItemsInView - 1);
243
- } else {
244
- itemInView = true;
245
- }
246
- this.updateFirstItemIndexInView(maxItemsInView);
247
- const endIsNear = index + maxItemsInView / 2 > children.length;
248
- if (itemInView) {
249
- return;
250
- } else if (endIsNear) {
251
- containerEl.scrollTop = containerEl.scrollHeight;
252
- } else {
253
- containerEl.scrollTop = childHeight * this.firstItemIndexInView;
254
- }
255
- }
256
- initItems() {
257
- const { items } = this.props;
258
- const targetItems = items.map((item) => document.getElementById(item.split("#")[1])).filter(Boolean);
259
- this.setState({ targetItems }, this.initSections);
260
- this.scrollToListItem();
261
- }
262
- saveActiveItems(hash) {
263
- const { titles, onActiveItemTitleChange } = this.props;
264
- const visibleItems = this.getViewState(hash);
265
- const activeItemTitle = this.getActiveItemTitle(titles, visibleItems);
266
- if (activeItemTitle && onActiveItemTitleChange) {
267
- onActiveItemTitleChange(activeItemTitle);
268
- }
269
- this.setState({ inViewState: visibleItems });
270
- }
271
- getViewState(hash) {
272
- const { targetItems, inViewState } = this.state;
273
- const { headerHeight } = this.props;
274
- const currentOffset = window.pageYOffset;
275
- const isScrollUp = currentOffset < this.prevOffset;
276
- this.prevOffset = currentOffset;
277
- const pureHash = (hash == null ? void 0 : hash.startsWith("#")) ? hash.substring(1) : hash;
278
- let newActiveIndex;
279
- if (pureHash) {
280
- newActiveIndex = targetItems.findIndex(
281
- (item) => item && item.getAttribute("id") === pureHash
282
- );
283
- } else {
284
- newActiveIndex = targetItems.reduce((res, item, index) => {
285
- if (!item) {
286
- return res;
287
- }
288
- const isScrolledPast = item.getBoundingClientRect().top < headerHeight + 1;
289
- return isScrolledPast ? index : res;
290
- }, -1);
291
- }
292
- if (targetItems.length && newActiveIndex === -1) {
293
- newActiveIndex = 0;
294
- }
295
- if (newActiveIndex === -1) {
296
- return inViewState;
297
- }
298
- const prevActiveIndex = inViewState.findIndex(Boolean);
299
- const getNewInViewState = () => {
300
- if (newActiveIndex === prevActiveIndex) {
301
- return inViewState;
302
- }
303
- const result = new Array(targetItems.length).fill(false);
304
- result[newActiveIndex] = true;
305
- return result;
306
- };
307
- if (pureHash) {
308
- this.hasActiveHash = true;
309
- return getNewInViewState();
310
- }
311
- if (this.hasActiveHash) {
312
- if (isScrollUp || newActiveIndex > prevActiveIndex) {
313
- this.hasActiveHash = false;
314
- return getNewInViewState();
315
- }
316
- return inViewState;
317
- }
318
- return getNewInViewState();
319
- }
320
- getActiveItemTitle(titles, inViewState) {
321
- var _a;
322
- const activeIndex = inViewState.findIndex(Boolean);
323
- return (_a = titles == null ? void 0 : titles[activeIndex]) != null ? _a : null;
324
- }
325
- pauseScrollHandler() {
326
- this.scrollByClick = true;
327
- window.removeEventListener("scroll", this.handleScroll);
328
- window.addEventListener("scroll", this.handleScrollDebounced);
329
- }
330
- };
331
- __publicField(Scrollspy, "defaultProps", {
332
- currentClassName: "Scrollspy",
333
- overflowedClassName: "Overflowed",
334
- sectionOffset: 20,
335
- headerHeight: 0
336
- });
337
- //# sourceMappingURL=Scrollspy.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/Scrollspy/Scrollspy.tsx"],
4
- "sourcesContent": ["import React, {HTMLProps, ReactElement} from 'react';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nimport {Router} from '../../models';\nimport {InnerProps} from '../../utils';\n\ninterface ScrollspyDefaultProps {\n currentClassName: string;\n overflowedClassName: string;\n sectionOffset: number;\n headerHeight: number;\n}\n\nexport interface ScrollspyProps\n extends Partial<ScrollspyDefaultProps>,\n Partial<HTMLProps<HTMLUListElement>> {\n items: string[];\n children: ReactElement[];\n router: Router;\n onSectionClick?: (event: MouseEvent) => void;\n className?: string;\n overflowedClassName?: string;\n scrollToListItem?: boolean;\n /** Is used to identify items for {@link onActiveItemTitleChange} */\n titles?: string[];\n /** Is called with active item's corresponding value in {@link titles}, if one exists */\n onActiveItemTitleChange?: (title: string) => void;\n}\n\ninterface ScrollspyState {\n targetItems: HTMLElement[];\n inViewState: boolean[];\n}\n\ntype ScrollspyInnerProps = InnerProps<ScrollspyProps, ScrollspyDefaultProps>;\n\nexport class Scrollspy extends React.Component<ScrollspyInnerProps, ScrollspyState> {\n static defaultProps: ScrollspyDefaultProps = {\n currentClassName: 'Scrollspy',\n overflowedClassName: 'Overflowed',\n sectionOffset: 20,\n headerHeight: 0,\n };\n\n containerRef = React.createRef<HTMLUListElement>();\n itemRefs = this.props.items.map(() => React.createRef<HTMLDivElement>());\n\n scrollByClick: boolean;\n prevOffset: number;\n hasActiveHash: boolean;\n firstItemIndexInView: number;\n lastItemIndexInView: number;\n overflowChecked: boolean;\n\n constructor(props: ScrollspyInnerProps) {\n super(props);\n\n this.state = {\n targetItems: [],\n inViewState: [],\n };\n\n this.overflowChecked = false;\n this.scrollByClick = false;\n this.prevOffset = 0;\n this.hasActiveHash = false;\n this.firstItemIndexInView = -1;\n this.lastItemIndexInView = -1;\n }\n\n componentDidMount() {\n this.initItems();\n window.addEventListener('scroll', this.handleScroll);\n\n const containerEl = this.containerRef.current;\n if (containerEl) {\n containerEl.addEventListener('scroll', this.updateScrollValues);\n }\n\n this.checkListOverflow();\n }\n\n componentDidUpdate(prevProps: Readonly<ScrollspyProps>, prevState: Readonly<ScrollspyState>) {\n const {items, router} = this.props;\n const {inViewState} = this.state;\n\n if (!isEqual(inViewState, prevState.inViewState)) {\n this.scrollToListItem();\n }\n\n if (!isEqual(items, prevProps.items) || prevProps.router.pathname !== router.pathname) {\n this.initItems();\n }\n\n if (!this.overflowChecked) {\n this.overflowChecked = true;\n\n this.checkListOverflow();\n }\n\n if (router.hash !== prevProps.router.hash) {\n this.pauseScrollHandler();\n this.saveActiveItems(router.hash);\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.handleScroll);\n\n const containerEl = this.containerRef.current;\n if (containerEl) {\n containerEl.removeEventListener('scroll', this.updateScrollValues);\n }\n }\n\n render() {\n const {children, currentClassName, className, ...rest} = this.props;\n const {inViewState} = this.state;\n\n const items = children.map((child, index) => {\n if (!child) {\n return null;\n }\n\n const ChildTag = child.type;\n let childClassNames = child.props.className;\n\n if (inViewState[index] && currentClassName.length > 0) {\n childClassNames += ` ${currentClassName}`;\n\n this.syncScroll(index);\n }\n\n return (\n <ChildTag\n key={child.key}\n className={childClassNames}\n onClick={this.handleSectionClick}\n ref={this.itemRefs[index]}\n aria-current={inViewState[index] ? 'location' : undefined}\n >\n {child.props.children}\n </ChildTag>\n );\n });\n\n return (\n <ul className={className} ref={this.containerRef} {...rest}>\n {items}\n </ul>\n );\n }\n\n private updateFirstItemIndexInView(maxItemsInView: number) {\n this.firstItemIndexInView = Math.max(this.lastItemIndexInView - (maxItemsInView - 1), 0);\n }\n\n private getContainerValues(containerEl: HTMLUListElement) {\n const {children} = this.props;\n\n /* Average values */\n const childHeight = Math.round(containerEl.scrollHeight / children.length);\n const maxItemsInView = Math.round(containerEl.clientHeight / childHeight);\n\n return {childHeight, maxItemsInView};\n }\n\n private updateScrollValues = () => {\n const containerEl = this.containerRef.current;\n\n if (!containerEl) {\n return;\n }\n\n const {childHeight, maxItemsInView} = this.getContainerValues(containerEl);\n this.lastItemIndexInView =\n Math.round(containerEl.scrollTop / childHeight) + maxItemsInView - 1;\n\n this.updateFirstItemIndexInView(maxItemsInView);\n };\n\n private syncScroll(index: number) {\n const {children} = this.props;\n const containerEl = this.containerRef.current;\n\n if (!containerEl) {\n return;\n }\n\n const {childHeight, maxItemsInView} = this.getContainerValues(containerEl);\n\n if (this.lastItemIndexInView === -1) {\n this.lastItemIndexInView = maxItemsInView - 1;\n }\n\n this.updateFirstItemIndexInView(maxItemsInView);\n\n let itemInView = false;\n if (index >= this.lastItemIndexInView) {\n this.lastItemIndexInView = Math.min(index + 1, children.length - 1);\n } else if (index <= this.firstItemIndexInView) {\n this.lastItemIndexInView = Math.max(index + maxItemsInView - 2, maxItemsInView - 1);\n } else {\n itemInView = true;\n }\n\n this.updateFirstItemIndexInView(maxItemsInView);\n\n const endIsNear = index + maxItemsInView / 2 > children.length;\n if (itemInView) {\n return;\n } else if (endIsNear) {\n containerEl.scrollTop = containerEl.scrollHeight;\n } else {\n containerEl.scrollTop = childHeight * this.firstItemIndexInView;\n }\n }\n\n private scrollToListItem = () => {\n if (!this.props.scrollToListItem) {\n return;\n }\n\n let itemIndex = this.state.inViewState.findIndex((isActive) => isActive);\n\n if (itemIndex < 0) {\n itemIndex = 0;\n }\n\n const ref = this.itemRefs[itemIndex] && this.itemRefs[itemIndex].current;\n\n if (ref) {\n scrollIntoView(ref, {\n scrollMode: 'if-needed',\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n });\n }\n };\n\n private initItems() {\n const {items} = this.props;\n const targetItems = items\n .map((item) => document.getElementById(item.split('#')[1]))\n .filter(Boolean) as HTMLElement[];\n\n this.setState({targetItems}, this.initSections);\n this.scrollToListItem();\n }\n\n private initSections = () => {\n this.saveActiveItems();\n };\n\n private saveActiveItems(hash?: string) {\n const {titles, onActiveItemTitleChange} = this.props;\n\n const visibleItems = this.getViewState(hash);\n const activeItemTitle = this.getActiveItemTitle(titles, visibleItems);\n\n if (activeItemTitle && onActiveItemTitleChange) {\n onActiveItemTitleChange(activeItemTitle);\n }\n\n this.setState({inViewState: visibleItems});\n }\n\n private getViewState(hash?: string) {\n const {targetItems, inViewState} = this.state;\n const {headerHeight} = this.props;\n const currentOffset = window.pageYOffset;\n\n const isScrollUp = currentOffset < this.prevOffset;\n this.prevOffset = currentOffset;\n\n const pureHash = hash?.startsWith('#') ? hash.substring(1) : hash;\n\n let newActiveIndex: number;\n if (pureHash) {\n newActiveIndex = targetItems.findIndex(\n (item) => item && item.getAttribute('id') === pureHash,\n );\n } else {\n newActiveIndex = targetItems.reduce<number>((res, item, index) => {\n if (!item) {\n return res;\n }\n\n const isScrolledPast = item.getBoundingClientRect().top < headerHeight + 1;\n return isScrolledPast ? index : res;\n }, -1);\n }\n\n if (targetItems.length && newActiveIndex === -1) {\n newActiveIndex = 0;\n }\n\n if (newActiveIndex === -1) {\n return inViewState;\n }\n\n const prevActiveIndex = inViewState.findIndex(Boolean);\n const getNewInViewState = () => {\n if (newActiveIndex === prevActiveIndex) {\n return inViewState;\n }\n const result = new Array<boolean>(targetItems.length).fill(false);\n result[newActiveIndex] = true;\n return result;\n };\n\n if (pureHash) {\n this.hasActiveHash = true;\n return getNewInViewState();\n }\n\n // not changing active item until scroll up or the next item becomes active\n if (this.hasActiveHash) {\n if (isScrollUp || newActiveIndex > prevActiveIndex) {\n this.hasActiveHash = false;\n return getNewInViewState();\n }\n return inViewState;\n }\n\n return getNewInViewState();\n }\n\n private getActiveItemTitle(titles: string[] | undefined, inViewState: boolean[]) {\n const activeIndex = inViewState.findIndex(Boolean);\n return titles?.[activeIndex] ?? null;\n }\n\n private handleScroll = () => {\n if (this.scrollByClick) {\n // the end of smooth auto-scroll\n window.removeEventListener('scroll', this.handleScrollDebounced);\n window.addEventListener('scroll', this.handleScroll);\n this.scrollByClick = false;\n }\n this.saveActiveItems();\n };\n\n // eslint-disable-next-line @typescript-eslint/member-ordering, react/sort-comp\n private handleScrollDebounced = debounce(this.handleScroll, 100);\n\n private pauseScrollHandler() {\n // wait for the end of smooth auto-scroll\n this.scrollByClick = true;\n window.removeEventListener('scroll', this.handleScroll);\n window.addEventListener('scroll', this.handleScrollDebounced);\n }\n\n private handleSectionClick = (event: MouseEvent) => {\n const {onSectionClick} = this.props;\n const {target} = event;\n\n if (target && (target as HTMLElement).tagName === 'A') {\n event.stopPropagation();\n this.pauseScrollHandler();\n this.saveActiveItems((target as HTMLAnchorElement).hash);\n\n if (onSectionClick) {\n onSectionClick(event);\n }\n }\n };\n\n private checkListOverflow = () => {\n const {containerRef, itemRefs} = this;\n const {overflowedClassName} = this.props;\n\n const containerHeight = containerRef.current?.offsetHeight ?? 0;\n const itemsHeight = itemRefs.reduce(\n (heightSum, item) => heightSum + (item.current?.offsetHeight ?? 0),\n 0,\n );\n\n if (containerHeight < itemsHeight) {\n containerRef.current?.classList.add(overflowedClassName);\n }\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["React", "scrollIntoView", "debounce", "_a", "_b", "isEqual"]
7
- }
@@ -1 +0,0 @@
1
- export * from './Scrollspy';
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/components/Scrollspy/index.ts"],
4
- "sourcesContent": ["export * from './Scrollspy';\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,8BAAc,wBAAd;",
6
- "names": []
7
- }
@@ -1,59 +0,0 @@
1
- import React, { HTMLProps, ReactElement } from 'react';
2
- import { Router } from '../../models';
3
- import { InnerProps } from '../../utils';
4
- interface ScrollspyDefaultProps {
5
- currentClassName: string;
6
- overflowedClassName: string;
7
- sectionOffset: number;
8
- headerHeight: number;
9
- }
10
- export interface ScrollspyProps extends Partial<ScrollspyDefaultProps>, Partial<HTMLProps<HTMLUListElement>> {
11
- items: string[];
12
- children: ReactElement[];
13
- router: Router;
14
- onSectionClick?: (event: MouseEvent) => void;
15
- className?: string;
16
- overflowedClassName?: string;
17
- scrollToListItem?: boolean;
18
- /** Is used to identify items for {@link onActiveItemTitleChange} */
19
- titles?: string[];
20
- /** Is called with active item's corresponding value in {@link titles}, if one exists */
21
- onActiveItemTitleChange?: (title: string) => void;
22
- }
23
- interface ScrollspyState {
24
- targetItems: HTMLElement[];
25
- inViewState: boolean[];
26
- }
27
- type ScrollspyInnerProps = InnerProps<ScrollspyProps, ScrollspyDefaultProps>;
28
- export declare class Scrollspy extends React.Component<ScrollspyInnerProps, ScrollspyState> {
29
- static defaultProps: ScrollspyDefaultProps;
30
- containerRef: React.RefObject<HTMLUListElement>;
31
- itemRefs: React.RefObject<HTMLDivElement>[];
32
- scrollByClick: boolean;
33
- prevOffset: number;
34
- hasActiveHash: boolean;
35
- firstItemIndexInView: number;
36
- lastItemIndexInView: number;
37
- overflowChecked: boolean;
38
- constructor(props: ScrollspyInnerProps);
39
- componentDidMount(): void;
40
- componentDidUpdate(prevProps: Readonly<ScrollspyProps>, prevState: Readonly<ScrollspyState>): void;
41
- componentWillUnmount(): void;
42
- render(): React.JSX.Element;
43
- private updateFirstItemIndexInView;
44
- private getContainerValues;
45
- private updateScrollValues;
46
- private syncScroll;
47
- private scrollToListItem;
48
- private initItems;
49
- private initSections;
50
- private saveActiveItems;
51
- private getViewState;
52
- private getActiveItemTitle;
53
- private handleScroll;
54
- private handleScrollDebounced;
55
- private pauseScrollHandler;
56
- private handleSectionClick;
57
- private checkListOverflow;
58
- }
59
- export {};