@redocly/theme 0.1.17 → 0.1.20
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.
- package/Footer/CustomFooter.d.ts +7 -0
- package/Footer/CustomFooter.js +31 -0
- package/Footer/CustomFooterNavItem.d.ts +7 -0
- package/Footer/CustomFooterNavItem.js +25 -0
- package/Footer/Footer.d.ts +6 -2
- package/Footer/Footer.js +1 -1
- package/Footer/FooterColumn.d.ts +2 -2
- package/Footer/FooterColumn.js +3 -2
- package/Footer/FooterColumns.d.ts +6 -4
- package/Footer/FooterColumns.js +3 -3
- package/Footer/FooterCopyright.d.ts +6 -4
- package/Navbar/Navbar.d.ts +2 -1
- package/Navbar/Navbar.js +2 -1
- package/Navbar/NavbarDropdown.d.ts +8 -0
- package/Navbar/NavbarDropdown.js +21 -0
- package/Navbar/NavbarItem.d.ts +3 -36
- package/Navbar/NavbarItem.js +22 -13
- package/Navbar/NavbarMenu.d.ts +2 -1
- package/Navbar/NavbarMenu.js +1 -1
- package/globalStyle.js +1 -1
- package/package.json +1 -1
- package/src/Footer/CustomFooter.tsx +45 -0
- package/src/Footer/CustomFooterNavItem.tsx +40 -0
- package/src/Footer/Footer.tsx +6 -2
- package/src/Footer/FooterColumn.tsx +4 -4
- package/src/Footer/FooterColumns.tsx +9 -9
- package/src/Footer/FooterCopyright.tsx +6 -6
- package/src/Navbar/Navbar.tsx +5 -2
- package/src/Navbar/NavbarDropdown.tsx +44 -0
- package/src/Navbar/NavbarItem.tsx +44 -51
- package/src/Navbar/NavbarMenu.tsx +6 -3
- package/src/globalStyle.ts +1 -0
- package/src/types/portal/index.d.ts +0 -1
- package/src/types/portal/src/client/app/Sidebar/types.d.ts +1 -1
- package/src/types/portal/src/server/{utils → content}/content-provider.d.ts +9 -9
- package/src/types/portal/src/server/{version-store.d.ts → content/versions-config.d.ts} +7 -7
- package/src/types/portal/src/server/plugins/markdown/types.d.ts +14 -11
- package/src/types/portal/src/server/plugins/portal-config/types.d.ts +16 -19
- package/src/types/portal/src/server/plugins/types.d.ts +23 -15
- package/src/types/portal/src/server/store.d.ts +32 -33
- package/src/types/portal/src/server/utils/fs.d.ts +2 -1
- package/src/types/portal/src/server/utils/index.d.ts +0 -1
- package/src/types/portal/src/server/utils/paths.d.ts +3 -3
- package/src/types/portal/src/server/utils/reporter/formatter.d.ts +2 -1
- package/src/types/portal/src/server/utils/reporter/reporter.d.ts +2 -1
- package/src/types/portal/src/shared/constants.d.ts +2 -0
- package/src/types/portal/src/shared/models/active-item.d.ts +3 -0
- package/src/types/portal/src/shared/models/config.d.ts +28 -0
- package/src/types/portal/src/shared/models/index.d.ts +6 -0
- package/src/types/portal/src/shared/models/json-index.d.ts +5 -0
- package/src/types/portal/src/shared/models/operation-parameter.d.ts +6 -0
- package/src/types/portal/src/shared/models/search-data.d.ts +5 -0
- package/src/types/portal/src/shared/models/search-document.d.ts +11 -0
- package/src/types/portal/src/shared/types.d.ts +8 -2
- package/src/types/portal/src/shared/urls.d.ts +2 -0
- package/src/types/portal/src/shared/utils.d.ts +8 -2
- package/src/types/portal/src/client/app/media-css.d.ts +0 -7
- package/src/types/portal/src/client/styling/default.d.ts +0 -601
- package/src/types/portal/src/client/styling/index.d.ts +0 -10
- package/src/types/portal/src/client/styling/resolve.d.ts +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.CustomFooter = void 0;
|
|
11
|
+
var react_1 = __importDefault(require("react"));
|
|
12
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
|
+
var CustomFooterNavItem_1 = require("../Footer/CustomFooterNavItem");
|
|
14
|
+
var FooterCopyright_1 = require("../Footer/FooterCopyright");
|
|
15
|
+
function CustomFooter(_a) {
|
|
16
|
+
var data = _a.data;
|
|
17
|
+
if (!data) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return (react_1.default.createElement(FooterContainer, { "data-component-name": "Footer/CustomFooter" },
|
|
21
|
+
data.links.map(function (navItem, index) {
|
|
22
|
+
return (react_1.default.createElement(CustomFooterNavItem_1.CustomFooterNavItem, { key: "".concat(navItem.label, "_").concat(index), "data-cy": navItem.label, navItem: navItem }));
|
|
23
|
+
}),
|
|
24
|
+
react_1.default.createElement(FooterCopyright_1.FooterCopyright, { copyrightText: data.copyrightText })));
|
|
25
|
+
}
|
|
26
|
+
exports.CustomFooter = CustomFooter;
|
|
27
|
+
var FooterContainer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n list-style: none;\n margin: 0;\n padding: 0;\n display: block;\n background-color: var(--footer-background-color);\n text-align: center;\n font-family: var(--font-family-base);\n\n ", " {\n display: block;\n }\n"], ["\n list-style: none;\n margin: 0;\n padding: 0;\n display: block;\n background-color: var(--footer-background-color);\n text-align: center;\n font-family: var(--font-family-base);\n\n ", " {\n display: block;\n }\n"])), function (_a) {
|
|
28
|
+
var theme = _a.theme;
|
|
29
|
+
return theme.mediaQueries.medium;
|
|
30
|
+
});
|
|
31
|
+
var templateObject_1;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { ResolvedNavItem } from '@theme/types/portal';
|
|
3
|
+
interface CustomFooterNavItemProps {
|
|
4
|
+
navItem: ResolvedNavItem;
|
|
5
|
+
}
|
|
6
|
+
export declare function CustomFooterNavItem({ navItem }: CustomFooterNavItemProps): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.CustomFooterNavItem = void 0;
|
|
11
|
+
var react_1 = __importDefault(require("react"));
|
|
12
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
|
+
var Link_1 = require("../mocks/Link");
|
|
14
|
+
function CustomFooterNavItem(_a) {
|
|
15
|
+
var navItem = _a.navItem;
|
|
16
|
+
var item = navItem;
|
|
17
|
+
return (react_1.default.createElement(FooterItem, { "data-component-name": "Navbar/NavbarItem" },
|
|
18
|
+
react_1.default.createElement(FooterLink, { to: item.link },
|
|
19
|
+
react_1.default.createElement(FooterLabel, null, item.label))));
|
|
20
|
+
}
|
|
21
|
+
exports.CustomFooterNavItem = CustomFooterNavItem;
|
|
22
|
+
var FooterItem = styled_components_1.default.li(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: inline-block;\n text-align: center;\n line-height: var(--line-height-base);\n font-size: var(--navbar-item-font-size);\n margin: calc(var(--spacing-unit) * 2) calc(var(--spacing-unit) * 3);\n font-weight: var(--font-weight-regular);\n"], ["\n display: inline-block;\n text-align: center;\n line-height: var(--line-height-base);\n font-size: var(--navbar-item-font-size);\n margin: calc(var(--spacing-unit) * 2) calc(var(--spacing-unit) * 3);\n font-weight: var(--font-weight-regular);\n"])));
|
|
23
|
+
var FooterLink = (0, styled_components_1.default)(Link_1.Link)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n color: var(--footer-text-color);\n text-decoration: none;\n"], ["\n color: var(--footer-text-color);\n text-decoration: none;\n"])));
|
|
24
|
+
var FooterLabel = styled_components_1.default.span(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n cursor: pointer;\n vertical-align: middle;\n"], ["\n cursor: pointer;\n vertical-align: middle;\n"])));
|
|
25
|
+
var templateObject_1, templateObject_2, templateObject_3;
|
package/Footer/Footer.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { NavGroupRecord } from '@theme/types/portal';
|
|
3
|
+
interface FooterProps {
|
|
4
|
+
data: NavGroupRecord;
|
|
5
|
+
}
|
|
6
|
+
export declare function Footer({ data: { columns, copyrightText } }: FooterProps): JSX.Element | null;
|
|
7
|
+
export {};
|
package/Footer/Footer.js
CHANGED
|
@@ -13,7 +13,7 @@ var styled_components_1 = __importDefault(require("styled-components"));
|
|
|
13
13
|
var FooterColumns_1 = require("../Footer/FooterColumns");
|
|
14
14
|
var FooterCopyright_1 = require("../Footer/FooterCopyright");
|
|
15
15
|
function Footer(_a) {
|
|
16
|
-
var
|
|
16
|
+
var _b = _a.data, columns = _b.columns, copyrightText = _b.copyrightText;
|
|
17
17
|
if (!((columns === null || columns === void 0 ? void 0 : columns.length) || copyrightText)) {
|
|
18
18
|
return null;
|
|
19
19
|
}
|
package/Footer/FooterColumn.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
2
|
+
import type { ResolvedNavItem } from '@theme/types/portal';
|
|
3
3
|
interface FooterColumnProps {
|
|
4
|
-
column:
|
|
4
|
+
column: ResolvedNavItem;
|
|
5
5
|
}
|
|
6
6
|
export declare function FooterColumn({ column }: FooterColumnProps): JSX.Element;
|
|
7
7
|
export {};
|
package/Footer/FooterColumn.js
CHANGED
|
@@ -12,10 +12,11 @@ var react_1 = __importDefault(require("react"));
|
|
|
12
12
|
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
13
|
var Link_1 = require("../mocks/Link");
|
|
14
14
|
function FooterColumn(_a) {
|
|
15
|
+
var _b;
|
|
15
16
|
var column = _a.column;
|
|
16
17
|
return (react_1.default.createElement(FooterColumnContainer, { "data-component-name": "Footer/FooterColumn" },
|
|
17
|
-
react_1.default.createElement(FooterColumnTitle, null, column.
|
|
18
|
-
|
|
18
|
+
react_1.default.createElement(FooterColumnTitle, null, column.label), (_b = column === null || column === void 0 ? void 0 : column.items) === null || _b === void 0 ? void 0 :
|
|
19
|
+
_b.map(function (columnItem, columnItemIndex) {
|
|
19
20
|
if (columnItem.type === 'error') {
|
|
20
21
|
return null;
|
|
21
22
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
columns
|
|
5
|
-
}
|
|
2
|
+
import type { NavGroup } from '@theme/types/portal';
|
|
3
|
+
interface FooterColumnsProps {
|
|
4
|
+
columns: NavGroup;
|
|
5
|
+
}
|
|
6
|
+
export declare function FooterColumns({ columns }: FooterColumnsProps): JSX.Element | null;
|
|
6
7
|
export declare const FooterColumnsContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
7
8
|
export declare const FooterRow: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
9
|
+
export {};
|
package/Footer/FooterColumns.js
CHANGED
|
@@ -12,12 +12,12 @@ var react_1 = __importDefault(require("react"));
|
|
|
12
12
|
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
13
|
var FooterColumn_1 = require("../Footer/FooterColumn");
|
|
14
14
|
function FooterColumns(_a) {
|
|
15
|
-
var
|
|
16
|
-
if (!(columns === null || columns === void 0 ? void 0 : columns.length)) {
|
|
15
|
+
var columns = _a.columns;
|
|
16
|
+
if (typeof columns === 'string' || typeof columns === 'undefined' || !(columns === null || columns === void 0 ? void 0 : columns.length)) {
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
return (react_1.default.createElement(exports.FooterColumnsContainer, { "data-component-name": "Footer/FooterColumns" },
|
|
20
|
-
react_1.default.createElement(exports.FooterRow, null, columns.map(function (column, index) { return (react_1.default.createElement(FooterColumn_1.FooterColumn, { key: index, column: column })); }))));
|
|
20
|
+
react_1.default.createElement(exports.FooterRow, null, columns.map(function (column, index) { return (react_1.default.createElement(FooterColumn_1.FooterColumn, { key: "".concat(column.label, "_").concat(index), column: column })); }))));
|
|
21
21
|
}
|
|
22
22
|
exports.FooterColumns = FooterColumns;
|
|
23
23
|
exports.FooterColumnsContainer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n padding: 3em 20px 1em 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: 1200px;\n margin: 0 auto;\n\n ", " {\n padding: 5.625em 20px 3.9375em 20px;\n }\n\n ", " {\n color: black;\n display: none;\n }\n"], ["\n padding: 3em 20px 1em 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: 1200px;\n margin: 0 auto;\n\n ", " {\n padding: 5.625em 20px 3.9375em 20px;\n }\n\n ", " {\n color: black;\n display: none;\n }\n"])), function (_a) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
copyrightText
|
|
5
|
-
}
|
|
2
|
+
import type { NavGroup } from '@theme/types/portal';
|
|
3
|
+
interface FooterCopyrightProps {
|
|
4
|
+
copyrightText: NavGroup;
|
|
5
|
+
}
|
|
6
|
+
export declare function FooterCopyright({ copyrightText }: FooterCopyrightProps): JSX.Element | null;
|
|
7
|
+
export {};
|
package/Navbar/Navbar.d.ts
CHANGED
package/Navbar/Navbar.js
CHANGED
|
@@ -10,11 +10,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.NavbarContainer = exports.Navbar = void 0;
|
|
11
11
|
var react_1 = __importDefault(require("react"));
|
|
12
12
|
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
|
+
var Navbar_1 = require("../Navbar");
|
|
13
14
|
function Navbar(_a) {
|
|
14
15
|
var menu = _a.menu, logo = _a.logo, search = _a.search;
|
|
15
16
|
return (react_1.default.createElement(exports.NavbarContainer, { "data-component-name": "Navbar/Navbar" },
|
|
16
17
|
logo,
|
|
17
|
-
menu,
|
|
18
|
+
react_1.default.createElement(Navbar_1.NavbarMenu, { menuItems: menu }),
|
|
18
19
|
search));
|
|
19
20
|
}
|
|
20
21
|
exports.Navbar = Navbar;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { ResolvedNavLinkItem } from '@theme/types/portal';
|
|
3
|
+
interface NavbarDropdownProps {
|
|
4
|
+
items: ResolvedNavLinkItem[];
|
|
5
|
+
}
|
|
6
|
+
export declare function NavbarDropdown({ items }: NavbarDropdownProps): JSX.Element;
|
|
7
|
+
export declare const DropdownWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DropdownWrapper = exports.NavbarDropdown = void 0;
|
|
11
|
+
var react_1 = __importDefault(require("react"));
|
|
12
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
|
+
var Link_1 = require("../mocks/Link");
|
|
14
|
+
function NavbarDropdown(_a) {
|
|
15
|
+
var items = _a.items;
|
|
16
|
+
return (react_1.default.createElement(exports.DropdownWrapper, { "data-component-name": "Navbar/NavbarDropdown" }, items.map(function (item, index) { return (react_1.default.createElement("div", { key: "".concat(item.label, "_").concat(index) },
|
|
17
|
+
react_1.default.createElement(Link_1.Link, { to: item.link }, item.label))); })));
|
|
18
|
+
}
|
|
19
|
+
exports.NavbarDropdown = NavbarDropdown;
|
|
20
|
+
exports.DropdownWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: none;\n position: absolute;\n background: var(--navbar-item-active-background-color);\n border-radius: var(--navbar-item-border-radius);\n padding: 10px 15px;\n width: max-content;\n line-height: 1rem;\n box-shadow: var(--navbar-dropdown-shadow);\n & > div {\n text-align: left;\n padding: 10px 0px;\n cursor: pointer;\n a {\n color: var(--navbar-text-color);\n text-decoration: none;\n }\n :hover {\n text-decoration: underline;\n }\n }\n"], ["\n display: none;\n position: absolute;\n background: var(--navbar-item-active-background-color);\n border-radius: var(--navbar-item-border-radius);\n padding: 10px 15px;\n width: max-content;\n line-height: 1rem;\n box-shadow: var(--navbar-dropdown-shadow);\n & > div {\n text-align: left;\n padding: 10px 0px;\n cursor: pointer;\n a {\n color: var(--navbar-text-color);\n text-decoration: none;\n }\n :hover {\n text-decoration: underline;\n }\n }\n"])));
|
|
21
|
+
var templateObject_1;
|
package/Navbar/NavbarItem.d.ts
CHANGED
|
@@ -1,40 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
3
|
-
Drilldown = "drilldown"
|
|
4
|
-
}
|
|
5
|
-
export declare type ResolvedNavLinkItem = {
|
|
6
|
-
type: 'link';
|
|
7
|
-
link: string;
|
|
8
|
-
label: string;
|
|
9
|
-
items?: ResolvedNavItem[];
|
|
10
|
-
external?: boolean;
|
|
11
|
-
version?: string;
|
|
12
|
-
default?: string;
|
|
13
|
-
httpVerb?: string;
|
|
14
|
-
separatorLine?: boolean;
|
|
15
|
-
active?: boolean;
|
|
16
|
-
};
|
|
17
|
-
export declare type ResolvedNavGroupItem = {
|
|
18
|
-
type: 'group';
|
|
19
|
-
link?: string;
|
|
20
|
-
label: string;
|
|
21
|
-
items: ResolvedNavItem[];
|
|
22
|
-
version?: string;
|
|
23
|
-
default?: string;
|
|
24
|
-
menuStyle?: MenuStyle;
|
|
25
|
-
separatorLine?: boolean;
|
|
26
|
-
active?: boolean;
|
|
27
|
-
};
|
|
28
|
-
export declare type ResolvedNavItem = ResolvedNavLinkItem | ResolvedNavGroupItem | {
|
|
29
|
-
type: 'separator';
|
|
30
|
-
label?: string;
|
|
31
|
-
separatorLine?: boolean;
|
|
32
|
-
} | {
|
|
33
|
-
type: 'error';
|
|
34
|
-
label: string;
|
|
35
|
-
};
|
|
2
|
+
import type { ResolvedNavItem } from '@theme/types/portal';
|
|
36
3
|
interface NavbarItemProps {
|
|
37
|
-
navItem:
|
|
4
|
+
navItem: ResolvedNavItem;
|
|
38
5
|
}
|
|
39
|
-
export declare function NavbarItem({ navItem }: NavbarItemProps): JSX.Element;
|
|
6
|
+
export declare function NavbarItem({ navItem }: NavbarItemProps): JSX.Element | null;
|
|
40
7
|
export {};
|
package/Navbar/NavbarItem.js
CHANGED
|
@@ -7,35 +7,44 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.NavbarItem =
|
|
10
|
+
exports.NavbarItem = void 0;
|
|
11
11
|
var react_1 = __importDefault(require("react"));
|
|
12
12
|
var styled_components_1 = __importDefault(require("styled-components"));
|
|
13
13
|
var react_router_dom_1 = require("react-router-dom");
|
|
14
14
|
var Link_1 = require("../mocks/Link");
|
|
15
15
|
var utils_1 = require("../mocks/utils");
|
|
16
|
-
var
|
|
17
|
-
(function (MenuStyle) {
|
|
18
|
-
MenuStyle["Drilldown"] = "drilldown";
|
|
19
|
-
})(MenuStyle = exports.MenuStyle || (exports.MenuStyle = {}));
|
|
16
|
+
var NavbarDropdown_1 = require("../Navbar/NavbarDropdown");
|
|
20
17
|
function NavbarItem(_a) {
|
|
21
18
|
var navItem = _a.navItem;
|
|
22
19
|
var pathname = (0, react_router_dom_1.useLocation)().pathname;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
if (navItem.link) {
|
|
21
|
+
var item = navItem;
|
|
22
|
+
var isActive = pathname === (0, utils_1.withPathPrefix)(item.link);
|
|
23
|
+
return (react_1.default.createElement(NavMenuItem, { active: isActive, "data-component-name": "Navbar/NavbarItem" },
|
|
24
|
+
react_1.default.createElement(NavLink, { to: item.link, active: isActive },
|
|
25
|
+
react_1.default.createElement(NavLabel, null, item.label))));
|
|
26
|
+
}
|
|
27
|
+
if (navItem.items) {
|
|
28
|
+
var item = navItem;
|
|
29
|
+
return (react_1.default.createElement(NavMenuItemWithDropdownWrapper, null,
|
|
30
|
+
react_1.default.createElement(NavMenuItem, { active: false, "data-component-name": "Navbar/NavbarItem" },
|
|
31
|
+
react_1.default.createElement(NavLabel, null, item.label)),
|
|
32
|
+
react_1.default.createElement(NavbarDropdown_1.NavbarDropdown, { items: item.items })));
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
27
35
|
}
|
|
28
36
|
exports.NavbarItem = NavbarItem;
|
|
29
|
-
var
|
|
37
|
+
var NavMenuItemWithDropdownWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: inline-block;\n position: relative;\n border-radius: var(--navbar-item-border-radius);\n &:hover {\n background: var(--navbar-item-active-background-color);\n ", " {\n display: block;\n }\n }\n"], ["\n display: inline-block;\n position: relative;\n border-radius: var(--navbar-item-border-radius);\n &:hover {\n background: var(--navbar-item-active-background-color);\n ", " {\n display: block;\n }\n }\n"])), NavbarDropdown_1.DropdownWrapper);
|
|
38
|
+
var NavMenuItem = styled_components_1.default.li(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: inline-block;\n padding: 20px calc(var(--sidebar-spacing-horizontal) * 2);\n text-align: center;\n line-height: 1;\n font-size: var(--navbar-item-font-size);\n margin-left: var(--navbar-item-margin-horizontal);\n margin-right: var(--navbar-item-margin-horizontal);\n border-radius: var(--navbar-item-border-radius);\n font-weight: var(--navbar-item-font-weight);\n background: ", ";\n"], ["\n display: inline-block;\n padding: 20px calc(var(--sidebar-spacing-horizontal) * 2);\n text-align: center;\n line-height: 1;\n font-size: var(--navbar-item-font-size);\n margin-left: var(--navbar-item-margin-horizontal);\n margin-right: var(--navbar-item-margin-horizontal);\n border-radius: var(--navbar-item-border-radius);\n font-weight: var(--navbar-item-font-weight);\n background: ", ";\n"])), function (_a) {
|
|
30
39
|
var active = _a.active;
|
|
31
40
|
return (active ? 'var(--navbar-item-active-background-color)' : 'none');
|
|
32
41
|
});
|
|
33
|
-
var NavLink = (0, styled_components_1.default)(Link_1.Link)(
|
|
42
|
+
var NavLink = (0, styled_components_1.default)(Link_1.Link)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n color: ", ";\n text-decoration: ", ";\n"], ["\n color: ", ";\n text-decoration: ", ";\n"])), function (_a) {
|
|
34
43
|
var active = _a.active;
|
|
35
44
|
return active ? 'var(--navbar-item-active-text-color)' : 'var(--navbar-text-color)';
|
|
36
45
|
}, function (_a) {
|
|
37
46
|
var active = _a.active;
|
|
38
47
|
return active ? 'var(--navbar-item-active-text-decoration)' : 'none';
|
|
39
48
|
});
|
|
40
|
-
var NavLabel = styled_components_1.default.span(
|
|
41
|
-
var templateObject_1, templateObject_2, templateObject_3;
|
|
49
|
+
var NavLabel = styled_components_1.default.span(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n cursor: pointer;\n vertical-align: middle;\n"], ["\n cursor: pointer;\n vertical-align: middle;\n"])));
|
|
50
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
package/Navbar/NavbarMenu.d.ts
CHANGED
package/Navbar/NavbarMenu.js
CHANGED
|
@@ -17,7 +17,7 @@ function NavbarMenu(_a) {
|
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
19
|
return (react_1.default.createElement(NavItemsContainer, { "data-component-name": "Navbar/NavbarMenu" }, menuItems.map(function (navItem, index) {
|
|
20
|
-
return react_1.default.createElement(NavbarItem_1.NavbarItem, { key: index, "data-cy": navItem.label, navItem: navItem });
|
|
20
|
+
return (react_1.default.createElement(NavbarItem_1.NavbarItem, { key: "".concat(navItem.label, "_").concat(index), "data-cy": navItem.label, navItem: navItem }));
|
|
21
21
|
})));
|
|
22
22
|
}
|
|
23
23
|
exports.NavbarMenu = NavbarMenu;
|
package/globalStyle.js
CHANGED
|
@@ -22,7 +22,7 @@ var links = (0, styled_components_1.css)(templateObject_13 || (templateObject_13
|
|
|
22
22
|
var openapiAndGraphqlDocs = (0, styled_components_1.css)(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n /* === ref docs and graphql docs specific === */\n\n /**\n * @tokens OpenAPI-GraphQL Logo\n */\n --logo-max-height: 285px;\n --logo-max-width: 285px;\n --logo-padding: 2px;\n\n /**\n * @tokens OpenAPI-GraphQL Layout\n */\n --layout-buttons-top-offset: 20px; // @presenter Spacing\n --layout-buttons-height: 36px; // @presenter Spacing\n --layout-buttons-width: 36px; // @presenter Spacing\n\n --layout-stacked-small-max-width: 90%;\n --layout-stacked-medium-max-width: 75%;\n --layout-stacked-large-max-width: 1200px;\n\n --layout-three-panel-small-max-width: 100%;\n --layout-three-panel-medium-max-width: 100%;\n --layout-three-panel-large-max-width: 1800px;\n\n --layout-middle-panel-small-max-width: none;\n --layout-middle-panel-medium-max-width: none;\n --layout-middle-panel-large-max-width: none;\n\n /**\n * @tokens OpenAPI-GraphQL Schema\n */\n --schema-lines-color: var(--global-border-color); // @presenter Color\n --schema-default-details-width: 70%;\n --schema-type-name-color: var(--color-content-secondary); // @presenter Color\n --schema-type-title-color: var(--color-content-secondary); // @presenter Color\n --schema-require-label-color: var(--color-error-900); // @presenter Color\n --schema-labels-text-size: 0.9em; // @presenter Spacing\n --schema-nesting-spacing: 1em; // @presenter Spacing\n --schema-nested-background-color: var(--color-secondary-200); // @presenter Color\n --schema-chevron-color: var(--color-content); // @presenter Color\n --schema-chevron-size: 9px; // @presenter Spacing\n\n --schema-controls-color: var(--color-emphasis-800); // @presenter Color\n --schema-controls-background-color: var(--color-secondary-400); // @presenter Color\n --schema-controls-hover-background-color: var(--color-secondary-500); // @presenter Color\n --schema-controls-border-color: var(--color-secondary-600); // @presenter Color\n\n --field-name-font-size: var(--code-font-size); // @presenter FontSize\n --field-name-font-family: var(--code-font-family); // @presenter FontFamily\n --field-example-color: var(--color-content); // @presenter Color\n --field-example-background-color: var(--inline-code-background-color); // @presenter Color\n --field-constraint-color: var(--color-content); // @presenter Color\n --field-constraint-background-color: var(--inline-code-background-color); // @presenter Color\n\n /**\n * @tokens OpenAPI-GraphQL Search\n * @presenter Color\n */\n --search-input-border-bottom: #e6e6e6;\n --search-results-background-color: #f2f2f2;\n --search-results-active-item-background-color: #e6e6e6;\n --search-marked-background-color: #ffff03;\n --search-popup-header-background-color: var(--color-secondary-200);\n --search-clear-button-background-color: var(--color-secondary-400);\n --search-clear-button-hover-background-color: var(--color-secondary-600);\n\n /*\n * @tokens OpenAPI-GraphQL Badge\n */\n --badge-color: var(--color-emphasis-100); // @presenter Color\n --badge-background-color: var(--color-primary-500); // @presenter Color\n --deprecated-badge-color: var(--color-emphasis-100); // @presenter Color\n --deprecated-badge-background-color: var(--color-warning-500); // @presenter Color\n\n --http-badge-font-size: 12px; // @presenter FontSize\n --http-badge-line-height: 20px; // @presenter LineHeight\n --http-badge-font-family: var(--code-font-family); // @presenter FontFamily\n --http-badge-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --http-badge-border-radius: 16px; // @presenter BorderRadius\n --http-badge-color: var(--color-content-inverse); // @presenter Color\n\n --http-badge-menu-font-size: 8px; // @presenter FontSize\n --http-badge-menu-line-height: 14px; // @presenter FontSize\n\n /**\n * @tokens OpenAPI-GraphQL Other\n */\n --recursive-label-color: var(--color-warning-500); // @presenter Color\n --spinner-color: var(--color-primary-500); // @presenter Color\n --linear-progress-color: var(--color-accent-500); // @presenter Color\n --linear-progress-background-color: var(--color-accent-100); // @presenter Color\n\n /* Floating action button */\n --fab-color: #0065fb; // @presenter Color\n --fab-background-color: #f2f2f2; // @presenter Color\n\n // @tokens End\n"], ["\n /* === ref docs and graphql docs specific === */\n\n /**\n * @tokens OpenAPI-GraphQL Logo\n */\n --logo-max-height: 285px;\n --logo-max-width: 285px;\n --logo-padding: 2px;\n\n /**\n * @tokens OpenAPI-GraphQL Layout\n */\n --layout-buttons-top-offset: 20px; // @presenter Spacing\n --layout-buttons-height: 36px; // @presenter Spacing\n --layout-buttons-width: 36px; // @presenter Spacing\n\n --layout-stacked-small-max-width: 90%;\n --layout-stacked-medium-max-width: 75%;\n --layout-stacked-large-max-width: 1200px;\n\n --layout-three-panel-small-max-width: 100%;\n --layout-three-panel-medium-max-width: 100%;\n --layout-three-panel-large-max-width: 1800px;\n\n --layout-middle-panel-small-max-width: none;\n --layout-middle-panel-medium-max-width: none;\n --layout-middle-panel-large-max-width: none;\n\n /**\n * @tokens OpenAPI-GraphQL Schema\n */\n --schema-lines-color: var(--global-border-color); // @presenter Color\n --schema-default-details-width: 70%;\n --schema-type-name-color: var(--color-content-secondary); // @presenter Color\n --schema-type-title-color: var(--color-content-secondary); // @presenter Color\n --schema-require-label-color: var(--color-error-900); // @presenter Color\n --schema-labels-text-size: 0.9em; // @presenter Spacing\n --schema-nesting-spacing: 1em; // @presenter Spacing\n --schema-nested-background-color: var(--color-secondary-200); // @presenter Color\n --schema-chevron-color: var(--color-content); // @presenter Color\n --schema-chevron-size: 9px; // @presenter Spacing\n\n --schema-controls-color: var(--color-emphasis-800); // @presenter Color\n --schema-controls-background-color: var(--color-secondary-400); // @presenter Color\n --schema-controls-hover-background-color: var(--color-secondary-500); // @presenter Color\n --schema-controls-border-color: var(--color-secondary-600); // @presenter Color\n\n --field-name-font-size: var(--code-font-size); // @presenter FontSize\n --field-name-font-family: var(--code-font-family); // @presenter FontFamily\n --field-example-color: var(--color-content); // @presenter Color\n --field-example-background-color: var(--inline-code-background-color); // @presenter Color\n --field-constraint-color: var(--color-content); // @presenter Color\n --field-constraint-background-color: var(--inline-code-background-color); // @presenter Color\n\n /**\n * @tokens OpenAPI-GraphQL Search\n * @presenter Color\n */\n --search-input-border-bottom: #e6e6e6;\n --search-results-background-color: #f2f2f2;\n --search-results-active-item-background-color: #e6e6e6;\n --search-marked-background-color: #ffff03;\n --search-popup-header-background-color: var(--color-secondary-200);\n --search-clear-button-background-color: var(--color-secondary-400);\n --search-clear-button-hover-background-color: var(--color-secondary-600);\n\n /*\n * @tokens OpenAPI-GraphQL Badge\n */\n --badge-color: var(--color-emphasis-100); // @presenter Color\n --badge-background-color: var(--color-primary-500); // @presenter Color\n --deprecated-badge-color: var(--color-emphasis-100); // @presenter Color\n --deprecated-badge-background-color: var(--color-warning-500); // @presenter Color\n\n --http-badge-font-size: 12px; // @presenter FontSize\n --http-badge-line-height: 20px; // @presenter LineHeight\n --http-badge-font-family: var(--code-font-family); // @presenter FontFamily\n --http-badge-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --http-badge-border-radius: 16px; // @presenter BorderRadius\n --http-badge-color: var(--color-content-inverse); // @presenter Color\n\n --http-badge-menu-font-size: 8px; // @presenter FontSize\n --http-badge-menu-line-height: 14px; // @presenter FontSize\n\n /**\n * @tokens OpenAPI-GraphQL Other\n */\n --recursive-label-color: var(--color-warning-500); // @presenter Color\n --spinner-color: var(--color-primary-500); // @presenter Color\n --linear-progress-color: var(--color-accent-500); // @presenter Color\n --linear-progress-background-color: var(--color-accent-100); // @presenter Color\n\n /* Floating action button */\n --fab-color: #0065fb; // @presenter Color\n --fab-background-color: #f2f2f2; // @presenter Color\n\n // @tokens End\n"])));
|
|
23
23
|
var footer = (0, styled_components_1.css)(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n /**\n * @tokens Footer\n */\n --footer-background-color: var(--color-primary-500); // @presenter Color\n --footer-text-color: #fff; // @presenter Color\n\n // @tokens End\n"], ["\n /**\n * @tokens Footer\n */\n --footer-background-color: var(--color-primary-500); // @presenter Color\n --footer-text-color: #fff; // @presenter Color\n\n // @tokens End\n"])));
|
|
24
24
|
var logo = (0, styled_components_1.css)(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n /**\n * @tokens Logo\n */\n --logo-height: 2rem; // @presenter Spacing\n --logo-margin: var(--sidebar-margin-left); // @presenter Spacing\n\n // @tokens End\n"], ["\n /**\n * @tokens Logo\n */\n --logo-height: 2rem; // @presenter Spacing\n --logo-margin: var(--sidebar-margin-left); // @presenter Spacing\n\n // @tokens End\n"])));
|
|
25
|
-
var navbar = (0, styled_components_1.css)(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n /**\n * @tokens Navbar\n */\n --navbar-height: 60px; // @presenter Spacing\n --navbar-text-color: #fff; // @presenter Color\n --navbar-background-color: var(--color-primary-500); // @presenter Color\n\n /**\n * @tokens Navbar Item\n * */\n --navbar-item-font-size: 16px; // @presenter FontSize\n --navbar-item-margin-horizontal: 0; // @presenter Spacing\n --navbar-item-margin-vertical: 0; // @presenter Spacing\n --navbar-item-border-radius: 10px; // @presenter BorderRadius\n --navbar-item-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --navbar-item-active-background-color: #1b75fa; // @presenter Color\n --navbar-item-active-text-color: var(--navbar-text-color); // @presenter Color\n --navbar-item-active-text-decoration: none;\n\n // @tokens End\n"], ["\n /**\n * @tokens Navbar\n */\n --navbar-height: 60px; // @presenter Spacing\n --navbar-text-color: #fff; // @presenter Color\n --navbar-background-color: var(--color-primary-500); // @presenter Color\n\n /**\n * @tokens Navbar Item\n * */\n --navbar-item-font-size: 16px; // @presenter FontSize\n --navbar-item-margin-horizontal: 0; // @presenter Spacing\n --navbar-item-margin-vertical: 0; // @presenter Spacing\n --navbar-item-border-radius: 10px; // @presenter BorderRadius\n --navbar-item-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --navbar-item-active-background-color: #1b75fa; // @presenter Color\n --navbar-item-active-text-color: var(--navbar-text-color); // @presenter Color\n --navbar-item-active-text-decoration: none;\n\n // @tokens End\n"])));
|
|
25
|
+
var navbar = (0, styled_components_1.css)(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n /**\n * @tokens Navbar\n */\n --navbar-height: 60px; // @presenter Spacing\n --navbar-text-color: #fff; // @presenter Color\n --navbar-background-color: var(--color-primary-500); // @presenter Color\n --navbar-drowpdown-shadow: 4px 4px 15px -2px rgba(0, 0, 0, 0.5);\n\n /**\n * @tokens Navbar Item\n * */\n --navbar-item-font-size: 16px; // @presenter FontSize\n --navbar-item-margin-horizontal: 0; // @presenter Spacing\n --navbar-item-margin-vertical: 0; // @presenter Spacing\n --navbar-item-border-radius: 10px; // @presenter BorderRadius\n --navbar-item-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --navbar-item-active-background-color: #1b75fa; // @presenter Color\n --navbar-item-active-text-color: var(--navbar-text-color); // @presenter Color\n --navbar-item-active-text-decoration: none;\n\n // @tokens End\n"], ["\n /**\n * @tokens Navbar\n */\n --navbar-height: 60px; // @presenter Spacing\n --navbar-text-color: #fff; // @presenter Color\n --navbar-background-color: var(--color-primary-500); // @presenter Color\n --navbar-drowpdown-shadow: 4px 4px 15px -2px rgba(0, 0, 0, 0.5);\n\n /**\n * @tokens Navbar Item\n * */\n --navbar-item-font-size: 16px; // @presenter FontSize\n --navbar-item-margin-horizontal: 0; // @presenter Spacing\n --navbar-item-margin-vertical: 0; // @presenter Spacing\n --navbar-item-border-radius: 10px; // @presenter BorderRadius\n --navbar-item-font-weight: var(--font-weight-bold); // @presenter FontWeight\n --navbar-item-active-background-color: #1b75fa; // @presenter Color\n --navbar-item-active-text-color: var(--navbar-text-color); // @presenter Color\n --navbar-item-active-text-decoration: none;\n\n // @tokens End\n"])));
|
|
26
26
|
var toc = (0, styled_components_1.css)(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n /**\n * @tokens TOC\n * */\n --toc-width: 240px;\n\n // @tokens End\n"], ["\n /**\n * @tokens TOC\n * */\n --toc-width: 240px;\n\n // @tokens End\n"])));
|
|
27
27
|
var markdown = (0, styled_components_1.css)(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n /**\n * @tokens Markdown\n * */\n --content-wrapper-max-width: 910px;\n --content-wrapper-padding-vertical: 25px; // @presenter Spacing\n --content-wrapper-padding-horizontal: 0px; // @presenter Spacing\n\n // @tokens End\n"], ["\n /**\n * @tokens Markdown\n * */\n --content-wrapper-max-width: 910px;\n --content-wrapper-padding-vertical: 25px; // @presenter Spacing\n --content-wrapper-padding-horizontal: 0px; // @presenter Spacing\n\n // @tokens End\n"])));
|
|
28
28
|
var blockquote = (0, styled_components_1.css)(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n /**\n * @tokens Blockquote\n * */\n // TODO: fix typo\n --bloquote-margin-vertical: 1.5em; // @presenter Spacing\n --bloquote-margin-horizontal: 0; // @presenter Spacing\n --bloquote-padding-vertical: 0; // @presenter Spacing\n --bloquote-padding-horizontal: calc(var(--spacing-unit) * 4); // @presenter Spacing\n --bloquote-background-color: transparent; // @presenter Color\n\n // @tokens End\n"], ["\n /**\n * @tokens Blockquote\n * */\n // TODO: fix typo\n --bloquote-margin-vertical: 1.5em; // @presenter Spacing\n --bloquote-margin-horizontal: 0; // @presenter Spacing\n --bloquote-padding-vertical: 0; // @presenter Spacing\n --bloquote-padding-horizontal: calc(var(--spacing-unit) * 4); // @presenter Spacing\n --bloquote-background-color: transparent; // @presenter Color\n\n // @tokens End\n"])));
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { CustomFooterNavItem } from '@theme/Footer/CustomFooterNavItem';
|
|
5
|
+
import { FooterCopyright } from '@theme/Footer/FooterCopyright';
|
|
6
|
+
import { NavGroupRecord, ResolvedNavItem } from '@theme/types/portal';
|
|
7
|
+
|
|
8
|
+
interface FooterProps {
|
|
9
|
+
data: NavGroupRecord;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function CustomFooter({ data }: FooterProps): JSX.Element | null {
|
|
13
|
+
if (!data) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<FooterContainer data-component-name="Footer/CustomFooter">
|
|
19
|
+
{(data.links as ResolvedNavItem[]).map((navItem, index) => {
|
|
20
|
+
return (
|
|
21
|
+
<CustomFooterNavItem
|
|
22
|
+
key={`${navItem.label}_${index}`}
|
|
23
|
+
data-cy={navItem.label}
|
|
24
|
+
navItem={navItem}
|
|
25
|
+
/>
|
|
26
|
+
);
|
|
27
|
+
})}
|
|
28
|
+
<FooterCopyright copyrightText={data.copyrightText} />
|
|
29
|
+
</FooterContainer>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const FooterContainer = styled.div`
|
|
34
|
+
list-style: none;
|
|
35
|
+
margin: 0;
|
|
36
|
+
padding: 0;
|
|
37
|
+
display: block;
|
|
38
|
+
background-color: var(--footer-background-color);
|
|
39
|
+
text-align: center;
|
|
40
|
+
font-family: var(--font-family-base);
|
|
41
|
+
|
|
42
|
+
${({ theme }) => theme.mediaQueries.medium} {
|
|
43
|
+
display: block;
|
|
44
|
+
}
|
|
45
|
+
`;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
import { Link } from '@portal/Link';
|
|
5
|
+
import type { ResolvedNavItem, ResolvedNavLinkItem } from '@theme/types/portal';
|
|
6
|
+
|
|
7
|
+
interface CustomFooterNavItemProps {
|
|
8
|
+
navItem: ResolvedNavItem;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function CustomFooterNavItem({ navItem }: CustomFooterNavItemProps): JSX.Element {
|
|
12
|
+
const item = navItem as ResolvedNavLinkItem;
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<FooterItem data-component-name="Navbar/NavbarItem">
|
|
16
|
+
<FooterLink to={item.link}>
|
|
17
|
+
<FooterLabel>{item.label}</FooterLabel>
|
|
18
|
+
</FooterLink>
|
|
19
|
+
</FooterItem>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const FooterItem = styled.li`
|
|
24
|
+
display: inline-block;
|
|
25
|
+
text-align: center;
|
|
26
|
+
line-height: var(--line-height-base);
|
|
27
|
+
font-size: var(--navbar-item-font-size);
|
|
28
|
+
margin: calc(var(--spacing-unit) * 2) calc(var(--spacing-unit) * 3);
|
|
29
|
+
font-weight: var(--font-weight-regular);
|
|
30
|
+
`;
|
|
31
|
+
|
|
32
|
+
const FooterLink = styled(Link)`
|
|
33
|
+
color: var(--footer-text-color);
|
|
34
|
+
text-decoration: none;
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
const FooterLabel = styled.span`
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
vertical-align: middle;
|
|
40
|
+
`;
|
package/src/Footer/Footer.tsx
CHANGED
|
@@ -3,9 +3,13 @@ import styled from 'styled-components';
|
|
|
3
3
|
|
|
4
4
|
import { FooterColumns } from '@theme/Footer/FooterColumns';
|
|
5
5
|
import { FooterCopyright } from '@theme/Footer/FooterCopyright';
|
|
6
|
-
import type {
|
|
6
|
+
import type { NavGroupRecord } from '@theme/types/portal';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
interface FooterProps {
|
|
9
|
+
data: NavGroupRecord;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function Footer({ data: { columns, copyrightText } }: FooterProps): JSX.Element | null {
|
|
9
13
|
if (!(columns?.length || copyrightText)) {
|
|
10
14
|
return null;
|
|
11
15
|
}
|
|
@@ -2,17 +2,17 @@ import React from 'react';
|
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
4
|
import { Link } from '@portal/Link';
|
|
5
|
-
import type {
|
|
5
|
+
import type { ResolvedNavItem } from '@theme/types/portal';
|
|
6
6
|
|
|
7
7
|
interface FooterColumnProps {
|
|
8
|
-
column:
|
|
8
|
+
column: ResolvedNavItem;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export function FooterColumn({ column }: FooterColumnProps): JSX.Element {
|
|
12
12
|
return (
|
|
13
13
|
<FooterColumnContainer data-component-name="Footer/FooterColumn">
|
|
14
|
-
<FooterColumnTitle>{column.
|
|
15
|
-
{column
|
|
14
|
+
<FooterColumnTitle>{column.label}</FooterColumnTitle>
|
|
15
|
+
{column?.items?.map((columnItem, columnItemIndex) => {
|
|
16
16
|
if (columnItem.type === 'error') {
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
@@ -2,14 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
4
|
import { FooterColumn } from '@theme/Footer/FooterColumn';
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
columns
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
}): JSX.Element | null {
|
|
12
|
-
if (!columns?.length) {
|
|
5
|
+
import type { NavGroup } from '@theme/types/portal';
|
|
6
|
+
|
|
7
|
+
interface FooterColumnsProps {
|
|
8
|
+
columns: NavGroup;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function FooterColumns({ columns }: FooterColumnsProps): JSX.Element | null {
|
|
12
|
+
if (typeof columns === 'string' || typeof columns === 'undefined' || !columns?.length) {
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ export function FooterColumns({
|
|
|
17
17
|
<FooterColumnsContainer data-component-name="Footer/FooterColumns">
|
|
18
18
|
<FooterRow>
|
|
19
19
|
{columns.map((column, index) => (
|
|
20
|
-
<FooterColumn key={index} column={column} />
|
|
20
|
+
<FooterColumn key={`${column.label}_${index}`} column={column} />
|
|
21
21
|
))}
|
|
22
22
|
</FooterRow>
|
|
23
23
|
</FooterColumnsContainer>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
|
-
import type {
|
|
4
|
+
import type { NavGroup } from '@theme/types/portal';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
copyrightText
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
}): JSX.Element | null {
|
|
6
|
+
interface FooterCopyrightProps {
|
|
7
|
+
copyrightText: NavGroup;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function FooterCopyright({ copyrightText = '' }: FooterCopyrightProps): JSX.Element | null {
|
|
11
11
|
return copyrightText ? (
|
|
12
12
|
<Wrapper data-component-name="Footer/FooterCopyright">{copyrightText}</Wrapper>
|
|
13
13
|
) : null;
|
package/src/Navbar/Navbar.tsx
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import styled from 'styled-components';
|
|
3
3
|
|
|
4
|
+
import { ResolvedConfigLinks } from '@theme/types/portal';
|
|
5
|
+
import { NavbarMenu } from '@theme/Navbar';
|
|
6
|
+
|
|
4
7
|
interface NavbarProps {
|
|
5
|
-
menu:
|
|
8
|
+
menu: ResolvedConfigLinks;
|
|
6
9
|
logo: React.ReactNode;
|
|
7
10
|
search: React.ReactNode;
|
|
8
11
|
}
|
|
@@ -11,7 +14,7 @@ export function Navbar({ menu, logo, search }: NavbarProps): JSX.Element {
|
|
|
11
14
|
return (
|
|
12
15
|
<NavbarContainer data-component-name="Navbar/Navbar">
|
|
13
16
|
{logo}
|
|
14
|
-
{menu}
|
|
17
|
+
<NavbarMenu menuItems={menu} />
|
|
15
18
|
{search}
|
|
16
19
|
</NavbarContainer>
|
|
17
20
|
);
|