@redocly/theme 0.4.13 → 0.4.15

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.
@@ -78,5 +78,5 @@ function ColorModeSwitcher() {
78
78
  react_1.default.createElement(ColorModeIcon_1.ColorModeIcon, { mode: activeColorMode })));
79
79
  }
80
80
  exports.ColorModeSwitcher = ColorModeSwitcher;
81
- var Wrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n margin-left: var(--navbar-item-padding-horizontal);\n display: flex;\n align-items: center;\n cursor: pointer;\n"], ["\n margin-left: var(--navbar-item-padding-horizontal);\n display: flex;\n align-items: center;\n cursor: pointer;\n"])));
81
+ var Wrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n margin-left: var(--navbar-item-padding-horizontal);\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n"], ["\n margin-left: var(--navbar-item-padding-horizontal);\n display: flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n"])));
82
82
  var templateObject_1;
@@ -2,8 +2,6 @@ import React from 'react';
2
2
  declare type MarkdownLayoutProps = {
3
3
  tableOfContent: React.ReactNode;
4
4
  markdownWrapper: React.ReactNode;
5
- showPrevButton?: boolean;
6
- showNextButton?: boolean;
7
5
  editPage?: {
8
6
  to: string;
9
7
  text: string;
@@ -11,5 +9,5 @@ declare type MarkdownLayoutProps = {
11
9
  };
12
10
  lastModified?: string | null;
13
11
  };
14
- export declare function MarkdownLayout({ tableOfContent, markdownWrapper, showPrevButton, showNextButton, editPage, lastModified, }: MarkdownLayoutProps): JSX.Element;
12
+ export declare function MarkdownLayout({ tableOfContent, markdownWrapper, editPage, lastModified, }: MarkdownLayoutProps): JSX.Element;
15
13
  export {};
@@ -16,14 +16,14 @@ var PageNavigation_1 = require("../PageNavigation/PageNavigation");
16
16
  var EditPageButton_1 = require("../EditPageButton");
17
17
  var LastUpdated_1 = require("../LastUpdated/LastUpdated");
18
18
  function MarkdownLayout(_a) {
19
- var tableOfContent = _a.tableOfContent, markdownWrapper = _a.markdownWrapper, showPrevButton = _a.showPrevButton, showNextButton = _a.showNextButton, editPage = _a.editPage, lastModified = _a.lastModified;
19
+ var tableOfContent = _a.tableOfContent, markdownWrapper = _a.markdownWrapper, editPage = _a.editPage, lastModified = _a.lastModified;
20
20
  return (react_1.default.createElement(PageWrapper_1.PageWrapper, { "data-component-name": "Markdown/MarkdownLayout" },
21
21
  react_1.default.createElement(ContainerWrapper_1.ContainerWrapper, { withToc: true },
22
22
  react_1.default.createElement(LayoutTop, null,
23
23
  lastModified && react_1.default.createElement(LastUpdated_1.LastUpdated, { lastModified: lastModified }),
24
24
  editPage && (react_1.default.createElement(EditPageButton_1.EditPageButton, { text: editPage.text, to: editPage.to, icon: editPage.icon }))),
25
25
  markdownWrapper,
26
- react_1.default.createElement(PageNavigation_1.PageNavigation, { showPrevButton: showPrevButton, showNextButton: showNextButton })),
26
+ react_1.default.createElement(PageNavigation_1.PageNavigation, null)),
27
27
  tableOfContent));
28
28
  }
29
29
  exports.MarkdownLayout = MarkdownLayout;
@@ -1,7 +1,2 @@
1
1
  /// <reference types="react" />
2
- declare type PageNavigationProps = {
3
- showPrevButton?: boolean;
4
- showNextButton?: boolean;
5
- };
6
- export declare function PageNavigation({ showPrevButton, showNextButton, }: PageNavigationProps): JSX.Element | null;
7
- export {};
2
+ export declare function PageNavigation(): JSX.Element | null;
@@ -13,15 +13,14 @@ 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
15
  var useDefaultThemeSettings_1 = require("../hooks/useDefaultThemeSettings");
16
- function PageNavigation(_a) {
17
- var _b = _a.showPrevButton, showPrevButton = _b === void 0 ? true : _b, _c = _a.showNextButton, showNextButton = _c === void 0 ? true : _c;
16
+ function PageNavigation() {
18
17
  var navigation = (0, useDefaultThemeSettings_1.useDefaultThemeSettings)().navigation;
19
18
  if (navigation === null || navigation === void 0 ? void 0 : navigation.hide) {
20
19
  return null;
21
20
  }
22
21
  return (react_1.default.createElement(PageNavigationWrapper, { "data-component-name": "PageNavigation/PageNavigation" },
23
- showPrevButton && react_1.default.createElement(PreviousPageLink_1.PreviousPageLink, null),
24
- showNextButton && react_1.default.createElement(NextPageLink_1.NextPageLink, null)));
22
+ react_1.default.createElement(PreviousPageLink_1.PreviousPageLink, null),
23
+ react_1.default.createElement(NextPageLink_1.NextPageLink, null)));
25
24
  }
26
25
  exports.PageNavigation = PageNavigation;
27
26
  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"])));
@@ -17,10 +17,10 @@ function PreviousPageLink() {
17
17
  var _a, _b;
18
18
  var prevPage = ((0, hooks_1.useSidebarSiblingsData)() || {}).prevPage;
19
19
  var navigation = (0, useDefaultThemeSettings_1.useDefaultThemeSettings)().navigation;
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)) {
20
+ if (!prevPage || (navigation === null || navigation === void 0 ? void 0 : navigation.hide) || ((_a = navigation === null || navigation === void 0 ? void 0 : navigation.prevPageLink) === null || _a === void 0 ? void 0 : _a.hide)) {
21
21
  return react_1.default.createElement("div", null, "\u00A0");
22
22
  }
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);
23
+ var label = ((_b = navigation === null || navigation === void 0 ? void 0 : navigation.prevPageLink) === 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;
@@ -3,12 +3,51 @@ 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 __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
+ var __read = (this && this.__read) || function (o, n) {
30
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
31
+ if (!m) return o;
32
+ var i = m.call(o), r, ar = [], e;
33
+ try {
34
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
35
+ }
36
+ catch (error) { e = { error: error }; }
37
+ finally {
38
+ try {
39
+ if (r && !r.done && (m = i["return"])) m.call(i);
40
+ }
41
+ finally { if (e) throw e.error; }
42
+ }
43
+ return ar;
44
+ };
6
45
  var __importDefault = (this && this.__importDefault) || function (mod) {
7
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
8
47
  };
9
48
  Object.defineProperty(exports, "__esModule", { value: true });
10
49
  exports.MenuGroup = void 0;
11
- var react_1 = __importDefault(require("react"));
50
+ var react_1 = __importStar(require("react"));
12
51
  var styled_components_1 = __importDefault(require("styled-components"));
13
52
  var ArrowIcon_1 = require("../icons/ArrowIcon/ArrowIcon");
14
53
  var MenuLinkItem_1 = require("../Sidebar/MenuLinkItem");
@@ -16,17 +55,37 @@ var MenuItemLabel_1 = require("../Sidebar/MenuItemLabel");
16
55
  var SeparatorLine_1 = require("../Sidebar/SeparatorLine");
17
56
  function MenuGroup(_a) {
18
57
  var item = _a.item, isExpanded = _a.isExpanded, toggleExpanded = _a.toggleExpanded, children = _a.children;
58
+ var _b = __read((0, react_1.useState)(isExpanded), 2), showChildren = _b[0], setShowChildren = _b[1];
59
+ var timer = (0, react_1.useRef)(null);
60
+ (0, react_1.useEffect)(function () {
61
+ timer.current && clearTimeout(timer.current);
62
+ if (isExpanded) {
63
+ setShowChildren(true);
64
+ }
65
+ else {
66
+ timer.current = setTimeout(function () {
67
+ setShowChildren(false);
68
+ }, 800);
69
+ }
70
+ return function () {
71
+ timer.current && clearTimeout(timer.current);
72
+ };
73
+ }, [isExpanded]);
19
74
  return (react_1.default.createElement(Wrapper, { "data-component-name": "Sidebar/MenuGroup" },
20
75
  react_1.default.createElement(MenuLinkItem_1.MenuLinkItem, { item: item },
21
76
  react_1.default.createElement(MenuGroupLabel, { onClick: toggleExpanded, isAlwaysExpanded: item.expanded === 'always', active: item.active },
22
77
  react_1.default.createElement(MenuGroupArrow, { direction: isExpanded ? 'down' : 'right' }),
23
78
  item.label)),
24
- react_1.default.createElement(MenuWrapper, null, isExpanded ? children : null),
79
+ react_1.default.createElement(MenuWrapper, { isExpanded: isExpanded }, showChildren ? children : null),
25
80
  item.separatorLine ? react_1.default.createElement(SeparatorLine_1.SeparatorLine, null) : null));
26
81
  }
27
82
  exports.MenuGroup = MenuGroup;
28
83
  var Wrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([""], [""])));
29
- var MenuWrapper = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding-left: var(--sidebar-item-nested-offset);\n"], ["\n padding-left: var(--sidebar-item-nested-offset);\n"])));
84
+ var MenuWrapper = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding-left: var(--sidebar-item-nested-offset);\n overflow: hidden;\n ", ";\n"], ["\n padding-left: var(--sidebar-item-nested-offset);\n overflow: hidden;\n ", ";\n"])), function (props) {
85
+ return props.isExpanded
86
+ ? "max-height: 9999px;\n transition: max-height .8s cubic-bezier(0.5, 0, 1, 0) 0s;"
87
+ : "max-height: 0px;\n\t transition: max-height .8s cubic-bezier(0, 1, 0, 1) -.1s;";
88
+ });
30
89
  var MenuGroupLabel = (0, styled_components_1.default)(MenuItemLabel_1.MenuItemLabel)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n padding-left: var(--sidebar-item-padding-horizontal);\n cursor: ", ";\n font-family: var(--sidebar-item-group-font-family);\n font-size: var(--sidebar-item-group-font-size);\n text-transform: var(--sidebar-text-group-transform);\n color: var(--sidebar-item-group-text-color);\n background: var(--sidebar-item-group-background-color);\n ", ";\n"], ["\n padding-left: var(--sidebar-item-padding-horizontal);\n cursor: ", ";\n font-family: var(--sidebar-item-group-font-family);\n font-size: var(--sidebar-item-group-font-size);\n text-transform: var(--sidebar-text-group-transform);\n color: var(--sidebar-item-group-text-color);\n background: var(--sidebar-item-group-background-color);\n ", ";\n"])), function (props) { return (props.isAlwaysExpanded ? 'default' : 'pointer'); }, function (props) {
31
90
  return props.active
32
91
  ? "color: var(--sidebar-item-group-active-text-color);\n background-color: var(--sidebar-item-group-active-background-color);"
@@ -6,7 +6,7 @@ function useThemeSettings(_) {
6
6
  toc: { header: 'header', hide: false },
7
7
  navigation: {
8
8
  nextPageLink: { label: 'next page theme settings label' },
9
- previousPageLink: { label: 'prev page theme settings label' },
9
+ prevPageLink: { label: 'prev page theme settings label' },
10
10
  },
11
11
  colorMode: {
12
12
  modes: ['light', 'dark'],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.4.13",
3
+ "version": "0.4.15",
4
4
  "description": "Shared UI components",
5
5
  "author": "team@redocly.com",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -48,4 +48,5 @@ const Wrapper = styled.div`
48
48
  display: flex;
49
49
  align-items: center;
50
50
  cursor: pointer;
51
+ user-select: none;
51
52
  `;
@@ -10,8 +10,6 @@ import { LastUpdated } from '@theme/LastUpdated/LastUpdated';
10
10
  type MarkdownLayoutProps = {
11
11
  tableOfContent: React.ReactNode;
12
12
  markdownWrapper: React.ReactNode;
13
- showPrevButton?: boolean;
14
- showNextButton?: boolean;
15
13
  editPage?: {
16
14
  to: string;
17
15
  text: string;
@@ -23,8 +21,6 @@ type MarkdownLayoutProps = {
23
21
  export function MarkdownLayout({
24
22
  tableOfContent,
25
23
  markdownWrapper,
26
- showPrevButton,
27
- showNextButton,
28
24
  editPage,
29
25
  lastModified,
30
26
  }: MarkdownLayoutProps): JSX.Element {
@@ -38,7 +34,7 @@ export function MarkdownLayout({
38
34
  )}
39
35
  </LayoutTop>
40
36
  {markdownWrapper}
41
- <PageNavigation showPrevButton={showPrevButton} showNextButton={showNextButton} />
37
+ <PageNavigation />
42
38
  </ContainerWrapper>
43
39
  {tableOfContent}
44
40
  </PageWrapper>
@@ -5,15 +5,7 @@ import { PreviousPageLink } from '@theme/PageNavigation/PreviousPageLink';
5
5
  import { NextPageLink } from '@theme/PageNavigation/NextPageLink';
6
6
  import { useDefaultThemeSettings } from '@theme/hooks/useDefaultThemeSettings';
7
7
 
8
- type PageNavigationProps = {
9
- showPrevButton?: boolean;
10
- showNextButton?: boolean;
11
- };
12
-
13
- export function PageNavigation({
14
- showPrevButton = true,
15
- showNextButton = true,
16
- }: PageNavigationProps): JSX.Element | null {
8
+ export function PageNavigation(): JSX.Element | null {
17
9
  const { navigation } = useDefaultThemeSettings();
18
10
 
19
11
  if (navigation?.hide) {
@@ -22,8 +14,8 @@ export function PageNavigation({
22
14
 
23
15
  return (
24
16
  <PageNavigationWrapper data-component-name="PageNavigation/PageNavigation">
25
- {showPrevButton && <PreviousPageLink />}
26
- {showNextButton && <NextPageLink />}
17
+ <PreviousPageLink />
18
+ <NextPageLink />
27
19
  </PageNavigationWrapper>
28
20
  );
29
21
  }
@@ -15,11 +15,11 @@ export function PreviousPageLink(): JSX.Element {
15
15
  const { prevPage }: PreviousPageType = useSidebarSiblingsData() || {};
16
16
  const { navigation } = useDefaultThemeSettings();
17
17
 
18
- if (!prevPage || navigation?.hide || navigation?.previousPageLink?.hide) {
18
+ if (!prevPage || navigation?.hide || navigation?.prevPageLink?.hide) {
19
19
  return <div>&nbsp;</div>;
20
20
  }
21
21
 
22
- const label = navigation?.previousPageLink?.label || `Back to ${prevPage.label}`;
22
+ const label = navigation?.prevPageLink?.label || `Back to ${prevPage.label}`;
23
23
 
24
24
  return (
25
25
  <StyledButton
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useEffect, useRef, useState } from 'react';
2
2
  import styled from 'styled-components';
3
3
 
4
4
  import type { ItemState } from '@theme/Sidebar/types/ItemState';
@@ -20,6 +20,22 @@ export function MenuGroup({
20
20
  toggleExpanded,
21
21
  children,
22
22
  }: React.PropsWithChildren<MenuGroupProps>): JSX.Element {
23
+ const [showChildren, setShowChildren] = useState<boolean>(isExpanded);
24
+ const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
25
+ useEffect(() => {
26
+ timer.current && clearTimeout(timer.current);
27
+ if (isExpanded) {
28
+ setShowChildren(true);
29
+ } else {
30
+ timer.current = setTimeout(() => {
31
+ setShowChildren(false);
32
+ }, 800);
33
+ }
34
+ return () => {
35
+ timer.current && clearTimeout(timer.current);
36
+ };
37
+ }, [isExpanded]);
38
+
23
39
  return (
24
40
  <Wrapper data-component-name="Sidebar/MenuGroup">
25
41
  <MenuLinkItem item={item}>
@@ -33,7 +49,7 @@ export function MenuGroup({
33
49
  </MenuGroupLabel>
34
50
  </MenuLinkItem>
35
51
 
36
- <MenuWrapper>{isExpanded ? children : null}</MenuWrapper>
52
+ <MenuWrapper isExpanded={isExpanded}>{showChildren ? children : null}</MenuWrapper>
37
53
 
38
54
  {item.separatorLine ? <SeparatorLine /> : null}
39
55
  </Wrapper>
@@ -42,8 +58,15 @@ export function MenuGroup({
42
58
 
43
59
  const Wrapper = styled.div``;
44
60
 
45
- const MenuWrapper = styled.div`
61
+ const MenuWrapper = styled.div<{ isExpanded?: boolean }>`
46
62
  padding-left: var(--sidebar-item-nested-offset);
63
+ overflow: hidden;
64
+ ${(props) =>
65
+ props.isExpanded
66
+ ? `max-height: 9999px;
67
+ transition: max-height .8s cubic-bezier(0.5, 0, 1, 0) 0s;`
68
+ : `max-height: 0px;
69
+ transition: max-height .8s cubic-bezier(0, 1, 0, 1) -.1s;`};
47
70
  `;
48
71
 
49
72
  const MenuGroupLabel = styled(MenuItemLabel)<{ isAlwaysExpanded?: boolean }>`
@@ -14,7 +14,7 @@ export function useThemeSettings(_: string): RawTheme['settings'] {
14
14
  toc: { header: 'header', hide: false },
15
15
  navigation: {
16
16
  nextPageLink: { label: 'next page theme settings label' },
17
- previousPageLink: { label: 'prev page theme settings label' },
17
+ prevPageLink: { label: 'prev page theme settings label' },
18
18
  },
19
19
  colorMode: {
20
20
  modes: ['light', 'dark'],