@redocly/theme 0.51.0 → 0.52.0-next.1

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.
@@ -17,19 +17,19 @@ function SearchAiMessage({ role, content, isThinking, resources, className, }) {
17
17
  const { useMarkdownText, useTranslate } = (0, hooks_1.useThemeHooks)();
18
18
  const markDownContent = useMarkdownText(content || '');
19
19
  const { translate } = useTranslate();
20
- return (react_1.default.createElement(SearchAiMessageWrapper, { "data-component-name": "Search/SearchAiMessage", role: role, className: className },
20
+ return (react_1.default.createElement(SearchAiMessageWrapper, { "data-component-name": "Search/SearchAiMessage", role: role, className: className, "data-testid": "search-ai-message" },
21
21
  role === constants_1.AiSearchConversationRole.ASSISTANT && (react_1.default.createElement(AiStarsIcon_1.AiStarsIcon, { size: "32px", background: "var(--search-ai-icon-bg-color)", borderRadius: "var(--border-radius-lg)", color: "var(--search-ai-icon-color)", margin: "0 var(--spacing-xs) 0 0" })),
22
22
  react_1.default.createElement(MessageWrapper, { role: role },
23
23
  role === constants_1.AiSearchConversationRole.ASSISTANT ? (react_1.default.createElement(react_1.default.Fragment, null,
24
- react_1.default.createElement(ResponseText, { as: "div", children: markDownContent }),
25
- !isThinking && resources && resources.length > 0 && (react_1.default.createElement(ResourcesWrapper, null,
24
+ react_1.default.createElement(ResponseText, { as: "div", children: markDownContent, "data-testid": "response-text" }),
25
+ !isThinking && resources && resources.length > 0 && (react_1.default.createElement(ResourcesWrapper, { "data-testid": "resources-wrapper" },
26
26
  react_1.default.createElement(ResourcesTitle, { "data-translation-key": "search.ai.resourcesFound" },
27
27
  resources.length,
28
28
  " ",
29
29
  translate('search.ai.resourcesFound', 'resources found')),
30
30
  react_1.default.createElement(ResourceTagsWrapper, null, resources.map((resource, idx) => (react_1.default.createElement(Link_1.Link, { key: idx, to: resource.url, target: "_blank" },
31
31
  react_1.default.createElement(ResourceTag, { borderless: true, icon: react_1.default.createElement(DocumentIcon_1.DocumentIcon, { color: "--search-ai-resource-tag-icon-color" }) }, resource.title))))))))) : (content),
32
- isThinking && content.length === 0 && (react_1.default.createElement(ThinkingDotsWrapper, null,
32
+ isThinking && content.length === 0 && (react_1.default.createElement(ThinkingDotsWrapper, { "data-testid": "thinking-dots-wrapper" },
33
33
  react_1.default.createElement(ThinkingDot, null),
34
34
  react_1.default.createElement(ThinkingDot, null),
35
35
  react_1.default.createElement(ThinkingDot, null))))));
@@ -950,19 +950,36 @@ const pages = (0, styled_components_1.css) `
950
950
  --page-403-oidc-description-margin: var(--spacing-md) var(--spacing-sm);
951
951
 
952
952
  // @tokens End
953
+
954
+ /**
955
+ * @tokens 500 Page
956
+ * @presenter Color
957
+ */
958
+
959
+ --page-500-font-family: var(--font-family-base); // @presenter FontFamily
960
+ --page-500-margin-vertical: var(--spacing-xl);
961
+ --page-500-margin-horizontal: calc(var(--spacing-xxl) * 2);
962
+ --page-500-gap: var(--spacing-lg);
963
+ --page-500-max-width: 680px;
964
+
965
+ --page-500-status-text-color: var(--text-color-helper);
966
+ --page-500-status-font-size: var(--font-size-lg); // @presenter FontSize
967
+ --page-500-status-font-weight: var(--font-weight-semibold); // @presenter FontWeight
968
+ --page-500-status-line-height: var(--line-height-lg); // @presenter LineHeight
969
+
970
+ --page-500-title-text-color: var(--text-color-primary);
971
+ --page-500-title-font-size: 42px; // @presenter FontSize
972
+ --page-500-title-font-weight: var(--font-weight-bold); // @presenter FontWeight
973
+ --page-500-title-line-height: 50px; // @presenter LineHeight
974
+ --page-500-status-line-height: var(--line-height-lg); // @presenter LineHeight
975
+
976
+ --page-500-description-text-color: var(--text-color-secondary);
977
+ --page-500-description-font-size: var(--font-size-xl); // @presenter FontSize
978
+ --page-500-description-font-weight: var(--font-weight-regular); // @presenter FontWeight
979
+ --page-500-description-line-height: var(--line-height-xl); // @presenter LineHeight
980
+
981
+ // @tokens End
953
982
  `;
954
- // //
955
- // --color-raspberry-1: #612241;
956
- // --color-raspberry-2: #77214c;
957
- // --color-raspberry-3: #901d56;
958
- // --color-raspberry-4: #b3185e;
959
- // --color-raspberry-5: #d6236a;
960
- // --color-raspberry-6: #f9316d;
961
- // --color-raspberry-7: #fb6382;
962
- // --color-raspberry-8: #fd838f;
963
- // --color-raspberry-9: #feacad;
964
- // --color-raspberry-10: #fed9d5;
965
- // --color-raspberry-11: #fef0ef;
966
983
  const error = (0, styled_components_1.css) `
967
984
  --error-bubble-padding: var(--spacing-sm);
968
985
  --error-bubble-gap: var(--spacing-xxs);
package/lib/index.d.ts CHANGED
@@ -228,5 +228,6 @@ export * from './layouts/Forbidden';
228
228
  export * from './layouts/OIDCForbidden';
229
229
  export * from './layouts/ThreePanelLayout';
230
230
  export * from './layouts/CodeWalkthroughLayout';
231
+ export * from './layouts/InternalServerErrorLayout';
231
232
  export * as markdoc from './markdoc/default';
232
233
  export * from './components/DatePicker/DatePicker';
package/lib/index.js CHANGED
@@ -281,6 +281,7 @@ __exportStar(require("./layouts/Forbidden"), exports);
281
281
  __exportStar(require("./layouts/OIDCForbidden"), exports);
282
282
  __exportStar(require("./layouts/ThreePanelLayout"), exports);
283
283
  __exportStar(require("./layouts/CodeWalkthroughLayout"), exports);
284
+ __exportStar(require("./layouts/InternalServerErrorLayout"), exports);
284
285
  /* Markdoc */
285
286
  exports.markdoc = __importStar(require("./markdoc/default"));
286
287
  /* DatePicker */
@@ -0,0 +1 @@
1
+ export declare function InternalServerErrorLayout(): JSX.Element;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InternalServerErrorLayout = InternalServerErrorLayout;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const hooks_1 = require("../core/hooks");
10
+ const Button_1 = require("../components/Button/Button");
11
+ const ArrowLeftIcon_1 = require("../icons/ArrowLeftIcon/ArrowLeftIcon");
12
+ function InternalServerErrorLayout() {
13
+ const { useTranslate } = (0, hooks_1.useThemeHooks)();
14
+ const { translate } = useTranslate();
15
+ return (react_1.default.createElement(Wrapper, { "data-component-name": "layouts/InternalServerError" },
16
+ react_1.default.createElement(StatusText, null, "500"),
17
+ react_1.default.createElement(Title, { "data-translation-key": "page.internalServerError.title" }, translate('page.internalServerError.title', 'Internal Server Error')),
18
+ react_1.default.createElement(Description, { "data-translation-key": "page.internalServerError.description" }, translate('page.internalServerError.description', 'Something went wrong on our end. Please try again later or contact support if the problem persists.')),
19
+ react_1.default.createElement(Button_1.Button, { variant: "primary", size: "large", to: "/", "data-translation-key": "page.homeButton", icon: react_1.default.createElement(ArrowLeftIcon_1.ArrowLeftIcon, null) }, translate('page.homeButton', 'Go home'))));
20
+ }
21
+ const Wrapper = styled_components_1.default.div `
22
+ height: 100%;
23
+ max-width: var(--page-500-max-width);
24
+ display: flex;
25
+ flex-direction: column;
26
+ justify-content: center;
27
+ margin: var(--page-500-margin-vertical) var(--page-500-margin-horizontal);
28
+ font-family: var(--page-500-font-family);
29
+ gap: var(--page-500-gap);
30
+ `;
31
+ const StatusText = styled_components_1.default.div `
32
+ color: var(--page-500-status-text-color);
33
+ font-size: var(--page-500-status-font-size);
34
+ line-height: var(--page-500-status-line-height);
35
+ font-weight: var(--page-500-status-font-weight);
36
+ `;
37
+ const Title = styled_components_1.default.div `
38
+ color: var(--page-500-title-text-color);
39
+ font-size: var(--page-500-title-font-size);
40
+ line-height: var(--page-500-title-line-height);
41
+ font-weight: var(--page-500-title-font-weight);
42
+ `;
43
+ const Description = styled_components_1.default.div `
44
+ color: var(--page-500-description-text-color);
45
+ font-size: var(--page-500-description-font-size);
46
+ line-height: var(--page-500-description-line-height);
47
+ font-weight: var(--page-500-description-font-weight);
48
+ `;
49
+ //# sourceMappingURL=InternalServerErrorLayout.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.51.0",
3
+ "version": "0.52.0-next.1",
4
4
  "description": "Shared UI components lib",
5
5
  "keywords": [
6
6
  "theme",
@@ -39,7 +39,7 @@
39
39
  "@markdoc/markdoc": "0.5.1",
40
40
  "@shikijs/types": "1.24.2",
41
41
  "@testing-library/jest-dom": "6.1.5",
42
- "@testing-library/react": "14.1.2",
42
+ "@testing-library/react": "15.0.6",
43
43
  "@testing-library/user-event": "14.5.1",
44
44
  "@types/file-saver": "2.0.7",
45
45
  "@types/highlight-words-core": "1.2.3",
@@ -48,11 +48,11 @@
48
48
  "@types/lodash.debounce": "4.0.9",
49
49
  "@types/lodash.throttle": "4.1.9",
50
50
  "@types/node": "22.10.5",
51
+ "@types/nprogress": "0.2.3",
51
52
  "@types/react": "18.3.9",
52
53
  "@types/react-dom": "18.3.5",
53
54
  "@types/styled-components": "5.1.34",
54
55
  "@types/styled-system": "5.1.22",
55
- "@types/nprogress": "0.2.3",
56
56
  "concurrently": "7.6.0",
57
57
  "jest": "29.5.0",
58
58
  "jest-environment-jsdom": "29.5.0",
@@ -75,19 +75,20 @@
75
75
  "webpack": "5.94.0"
76
76
  },
77
77
  "dependencies": {
78
+ "@tanstack/react-virtual": "3.13.0",
78
79
  "copy-to-clipboard": "3.3.3",
79
80
  "file-saver": "2.0.5",
80
81
  "highlight-words-core": "1.2.2",
81
82
  "hotkeys-js": "3.10.1",
83
+ "i18next": "22.4.15",
82
84
  "jszip": "3.10.1",
83
85
  "lodash.debounce": "4.0.8",
84
86
  "lodash.throttle": "4.1.1",
87
+ "nprogress": "0.2.0",
85
88
  "react-calendar": "4.2.1",
86
89
  "react-date-picker": "10.0.3",
87
90
  "timeago.js": "4.0.2",
88
- "i18next": "22.4.15",
89
- "nprogress": "0.2.0",
90
- "@redocly/config": "0.22.0"
91
+ "@redocly/config": "0.22.1"
91
92
  },
92
93
  "scripts": {
93
94
  "watch": "tsc -p tsconfig.build.json && (concurrently \"tsc -w -p tsconfig.build.json\" \"tsc-alias -w -p tsconfig.build.json\")",
@@ -36,6 +36,7 @@ export function SearchAiMessage({
36
36
  data-component-name="Search/SearchAiMessage"
37
37
  role={role}
38
38
  className={className}
39
+ data-testid="search-ai-message"
39
40
  >
40
41
  {role === AiSearchConversationRole.ASSISTANT && (
41
42
  <AiStarsIcon
@@ -49,9 +50,9 @@ export function SearchAiMessage({
49
50
  <MessageWrapper role={role}>
50
51
  {role === AiSearchConversationRole.ASSISTANT ? (
51
52
  <>
52
- <ResponseText as="div" children={markDownContent} />
53
+ <ResponseText as="div" children={markDownContent} data-testid="response-text" />
53
54
  {!isThinking && resources && resources.length > 0 && (
54
- <ResourcesWrapper>
55
+ <ResourcesWrapper data-testid="resources-wrapper">
55
56
  <ResourcesTitle data-translation-key="search.ai.resourcesFound">
56
57
  {resources.length} {translate('search.ai.resourcesFound', 'resources found')}
57
58
  </ResourcesTitle>
@@ -74,7 +75,7 @@ export function SearchAiMessage({
74
75
  content
75
76
  )}
76
77
  {isThinking && content.length === 0 && (
77
- <ThinkingDotsWrapper>
78
+ <ThinkingDotsWrapper data-testid="thinking-dots-wrapper">
78
79
  <ThinkingDot />
79
80
  <ThinkingDot />
80
81
  <ThinkingDot />
@@ -962,19 +962,36 @@ const pages = css`
962
962
  --page-403-oidc-description-margin: var(--spacing-md) var(--spacing-sm);
963
963
 
964
964
  // @tokens End
965
+
966
+ /**
967
+ * @tokens 500 Page
968
+ * @presenter Color
969
+ */
970
+
971
+ --page-500-font-family: var(--font-family-base); // @presenter FontFamily
972
+ --page-500-margin-vertical: var(--spacing-xl);
973
+ --page-500-margin-horizontal: calc(var(--spacing-xxl) * 2);
974
+ --page-500-gap: var(--spacing-lg);
975
+ --page-500-max-width: 680px;
976
+
977
+ --page-500-status-text-color: var(--text-color-helper);
978
+ --page-500-status-font-size: var(--font-size-lg); // @presenter FontSize
979
+ --page-500-status-font-weight: var(--font-weight-semibold); // @presenter FontWeight
980
+ --page-500-status-line-height: var(--line-height-lg); // @presenter LineHeight
981
+
982
+ --page-500-title-text-color: var(--text-color-primary);
983
+ --page-500-title-font-size: 42px; // @presenter FontSize
984
+ --page-500-title-font-weight: var(--font-weight-bold); // @presenter FontWeight
985
+ --page-500-title-line-height: 50px; // @presenter LineHeight
986
+ --page-500-status-line-height: var(--line-height-lg); // @presenter LineHeight
987
+
988
+ --page-500-description-text-color: var(--text-color-secondary);
989
+ --page-500-description-font-size: var(--font-size-xl); // @presenter FontSize
990
+ --page-500-description-font-weight: var(--font-weight-regular); // @presenter FontWeight
991
+ --page-500-description-line-height: var(--line-height-xl); // @presenter LineHeight
992
+
993
+ // @tokens End
965
994
  `;
966
- // //
967
- // --color-raspberry-1: #612241;
968
- // --color-raspberry-2: #77214c;
969
- // --color-raspberry-3: #901d56;
970
- // --color-raspberry-4: #b3185e;
971
- // --color-raspberry-5: #d6236a;
972
- // --color-raspberry-6: #f9316d;
973
- // --color-raspberry-7: #fb6382;
974
- // --color-raspberry-8: #fd838f;
975
- // --color-raspberry-9: #feacad;
976
- // --color-raspberry-10: #fed9d5;
977
- // --color-raspberry-11: #fef0ef;
978
995
  const error = css`
979
996
  --error-bubble-padding: var(--spacing-sm);
980
997
  --error-bubble-gap: var(--spacing-xxs);
package/src/index.ts CHANGED
@@ -253,6 +253,7 @@ export * from '@redocly/theme/layouts/Forbidden';
253
253
  export * from '@redocly/theme/layouts/OIDCForbidden';
254
254
  export * from '@redocly/theme/layouts/ThreePanelLayout';
255
255
  export * from '@redocly/theme/layouts/CodeWalkthroughLayout';
256
+ export * from '@redocly/theme/layouts/InternalServerErrorLayout';
256
257
  /* Markdoc */
257
258
  export * as markdoc from '@redocly/theme/markdoc/default';
258
259
  /* DatePicker */
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { useThemeHooks } from '@redocly/theme/core/hooks';
5
+ import { Button } from '@redocly/theme/components/Button/Button';
6
+ import { ArrowLeftIcon } from '@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon';
7
+
8
+ export function InternalServerErrorLayout(): JSX.Element {
9
+ const { useTranslate } = useThemeHooks();
10
+ const { translate } = useTranslate();
11
+
12
+ return (
13
+ <Wrapper data-component-name="layouts/InternalServerError">
14
+ <StatusText>500</StatusText>
15
+ <Title data-translation-key="page.internalServerError.title">
16
+ {translate('page.internalServerError.title', 'Internal Server Error')}
17
+ </Title>
18
+ <Description data-translation-key="page.internalServerError.description">
19
+ {translate(
20
+ 'page.internalServerError.description',
21
+ 'Something went wrong on our end. Please try again later or contact support if the problem persists.',
22
+ )}
23
+ </Description>
24
+ <Button
25
+ variant="primary"
26
+ size="large"
27
+ to="/"
28
+ data-translation-key="page.homeButton"
29
+ icon={<ArrowLeftIcon />}
30
+ >
31
+ {translate('page.homeButton', 'Go home')}
32
+ </Button>
33
+ </Wrapper>
34
+ );
35
+ }
36
+
37
+ const Wrapper = styled.div`
38
+ height: 100%;
39
+ max-width: var(--page-500-max-width);
40
+ display: flex;
41
+ flex-direction: column;
42
+ justify-content: center;
43
+ margin: var(--page-500-margin-vertical) var(--page-500-margin-horizontal);
44
+ font-family: var(--page-500-font-family);
45
+ gap: var(--page-500-gap);
46
+ `;
47
+
48
+ const StatusText = styled.div`
49
+ color: var(--page-500-status-text-color);
50
+ font-size: var(--page-500-status-font-size);
51
+ line-height: var(--page-500-status-line-height);
52
+ font-weight: var(--page-500-status-font-weight);
53
+ `;
54
+
55
+ const Title = styled.div`
56
+ color: var(--page-500-title-text-color);
57
+ font-size: var(--page-500-title-font-size);
58
+ line-height: var(--page-500-title-line-height);
59
+ font-weight: var(--page-500-title-font-weight);
60
+ `;
61
+
62
+ const Description = styled.div`
63
+ color: var(--page-500-description-text-color);
64
+ font-size: var(--page-500-description-font-size);
65
+ line-height: var(--page-500-description-line-height);
66
+ font-weight: var(--page-500-description-font-weight);
67
+ `;