@redocly/theme 0.4.2 → 0.4.3

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/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './Button';
2
2
  export * from './CopyButton';
3
+ export * from './EditPageButton';
3
4
  export * from './JsonViewer';
4
5
  export * from './Typography';
5
6
  export * from './SidebarLogo';
package/index.js CHANGED
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./Button"), exports);
18
18
  __exportStar(require("./CopyButton"), exports);
19
+ __exportStar(require("./EditPageButton"), exports);
19
20
  __exportStar(require("./JsonViewer"), exports);
20
21
  __exportStar(require("./Typography"), exports);
21
22
  __exportStar(require("./SidebarLogo"), exports);
package/mocks/utils.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare function withPathPrefix(link: string): string;
2
+ export declare function timeAgo(lastModified: string | Date): string;
package/mocks/utils.js CHANGED
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withPathPrefix = void 0;
3
+ exports.timeAgo = exports.withPathPrefix = void 0;
4
4
  function withPathPrefix(link) {
5
5
  return link;
6
6
  }
7
7
  exports.withPathPrefix = withPathPrefix;
8
+ function timeAgo(lastModified) {
9
+ // should return format(lastModified) in new-hope
10
+ var d = new Date(lastModified);
11
+ return "".concat(d.getDate(), "-").concat(d.getMonth() + 1, "-").concat(d.getFullYear());
12
+ }
13
+ exports.timeAgo = timeAgo;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Shared UI components",
5
5
  "author": "team@redocly.com",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import styled from 'styled-components';
3
+
4
+ import { Link } from '@portal/Link';
5
+
6
+ export interface EditPageButtonProps {
7
+ text: string;
8
+ to: string;
9
+ icon: string;
10
+ }
11
+
12
+ export const EditPageButton = ({ text, to, icon }: EditPageButtonProps): JSX.Element => {
13
+ return (
14
+ <EditButton to={to}>
15
+ <ButtonIcon src={icon} />
16
+ <ButtonText>{text}</ButtonText>
17
+ </EditButton>
18
+ );
19
+ };
20
+
21
+ const EditButton = styled(Link)`
22
+ margin-left: auto;
23
+ display: inline-flex;
24
+ color: var(--color-content);
25
+ font-weight: var(--font-weight-bold);
26
+ font-size: var(--font-size-base);
27
+ font-family: var(--font-family-base);
28
+ text-decoration: none;
29
+ `;
30
+
31
+ const ButtonIcon = styled.img`
32
+ height: 14px;
33
+ padding-right: 3px;
34
+ `;
35
+
36
+ const ButtonText = styled.span`
37
+ line-height: 14px;
38
+ `;
@@ -0,0 +1 @@
1
+ export * from '@theme/EditPageButton/EditPageButton';
@@ -1,9 +1,17 @@
1
1
  import React from 'react';
2
2
  import styled from 'styled-components';
3
- import { format } from 'timeago.js';
4
3
 
5
4
  import { useThemeSettings } from '@portal/hooks';
6
5
  import { DEFAULT_THEME_NAME } from '@portal/constants';
6
+ // import { timeAgo } from '@portal/utils';
7
+
8
+ // TODO: use timeago.js instead
9
+ // import { format } from 'timeago.js';
10
+ // Last updated ${format(lastModified)}
11
+ function timeAgo(date: string | Date) {
12
+ const d = new Date(date);
13
+ return `${d.getDate()}-${d.getMonth() + 1}-${d.getFullYear()}`;
14
+ }
7
15
 
8
16
  export interface LastUpdatedProps {
9
17
  lastModified: string | Date;
@@ -18,15 +26,15 @@ export function LastUpdated({ lastModified }: LastUpdatedProps): JSX.Element | n
18
26
 
19
27
  return (
20
28
  <Wrapper data-component-name="LastUpdated/LastUpdated">
21
- Last updated {format(lastModified)}
29
+ Last updated {timeAgo(lastModified)}
22
30
  </Wrapper>
23
31
  );
24
32
  }
25
33
 
26
- const Wrapper = styled.time`
34
+ const Wrapper = styled.div`
27
35
  color: var(--last-updated-text-color);
28
36
  font-size: var(--last-updated-font-size);
29
37
  font-family: var(--last-updated-font-family);
30
38
  line-height: var(--last-updated-line-height);
31
- padding-bottom: 20px;
39
+ padding-bottom: 30px;
32
40
  `;
@@ -1,14 +1,23 @@
1
1
  import React from 'react';
2
+ import styled from 'styled-components';
2
3
 
3
4
  import { PageWrapper } from '@theme/Markdown/PageWrapper';
4
5
  import { ContainerWrapper } from '@theme/Markdown/ContainerWrapper';
5
6
  import { PageNavigation } from '@theme/PageNavigation/PageNavigation';
7
+ import { EditPageButton } from '@theme/EditPageButton';
8
+ import { LastUpdated } from '@theme/LastUpdated/LastUpdated';
6
9
 
7
10
  type MarkdownLayoutProps = {
8
11
  tableOfContent: React.ReactNode;
9
12
  markdownWrapper: React.ReactNode;
10
13
  showPrevButton?: boolean;
11
14
  showNextButton?: boolean;
15
+ editPage?: {
16
+ to: string;
17
+ text: string;
18
+ icon: string;
19
+ };
20
+ lastModified?: string | Date;
12
21
  };
13
22
 
14
23
  export function MarkdownLayout({
@@ -16,10 +25,18 @@ export function MarkdownLayout({
16
25
  markdownWrapper,
17
26
  showPrevButton,
18
27
  showNextButton,
28
+ editPage,
29
+ lastModified,
19
30
  }: MarkdownLayoutProps): JSX.Element {
20
31
  return (
21
32
  <PageWrapper data-component-name="Markdown/MarkdownLayout">
22
33
  <ContainerWrapper withToc={true}>
34
+ <LayoutTop>
35
+ {lastModified && <LastUpdated lastModified={lastModified} />}
36
+ {editPage && (
37
+ <EditPageButton text={editPage.text} to={editPage.to} icon={editPage.icon} />
38
+ )}
39
+ </LayoutTop>
23
40
  {markdownWrapper}
24
41
  <PageNavigation showPrevButton={showPrevButton} showNextButton={showNextButton} />
25
42
  </ContainerWrapper>
@@ -27,3 +44,9 @@ export function MarkdownLayout({
27
44
  </PageWrapper>
28
45
  );
29
46
  }
47
+
48
+ const LayoutTop = styled.div`
49
+ display: flex;
50
+ justify-content: space-between;
51
+ flex-flow: row nowrap;
52
+ `;
@@ -1,12 +1,14 @@
1
1
  import { createGlobalStyle, css } from 'styled-components';
2
2
 
3
+ import { darkMode } from './ui/darkColors';
4
+
3
5
  const baseColors = css`
4
6
  /* === Palette === */
5
7
 
6
8
  /**
7
- * @tokens Base Colors
8
- * @presenter Color
9
- */
9
+ * @tokens Base Colors
10
+ * @presenter Color
11
+ */
10
12
 
11
13
  --color-primary-50: #87ceeb;
12
14
  --color-primary-100: #62a1ff;
@@ -85,22 +87,7 @@ const baseColors = css`
85
87
  --color-error-800: #ff1414;
86
88
  --color-error-900: #ff0000;
87
89
 
88
- // @tokens End
89
- `;
90
- const baseDarkColors = css`
91
- /**
92
- * @tokens Base Dark Colors
93
- * @presenter Color
94
- */
95
- --color-primary-100: #969ca6;
96
- --color-primary-200: #7f8693;
97
- --color-primary-300: #7d7d80;
98
- --color-primary-400: #4b4f56;
99
- --color-primary-500: #404042;
100
- --color-primary-600: #36383d;
101
- --color-primary-700: #28282a;
102
- --color-primary-800: #202021;
103
- --color-primary-900: #000000;
90
+ --colors-translucent: rgb(226 230 236 / 37%);
104
91
 
105
92
  // @tokens End
106
93
  `;
@@ -295,8 +282,8 @@ const common = css`
295
282
  */
296
283
  --border-color: var(--color-secondary-300);
297
284
  --border-color-secondary: var(--color-emphasis-600);
298
- --background-color: transparent;
299
-
285
+ --background-color: var(--color-secondary-50);
286
+ --box-shadow: 0px 0px 20px 0px var(--color-secondary-500);
300
287
  /**
301
288
  * @tokens Spacings
302
289
  * @presenter Spacing
@@ -425,7 +412,7 @@ const sidebar = css`
425
412
  * @tokens Sidebar colors
426
413
  * @presenter Color
427
414
  */
428
- --sidebar-background-color: #fff;
415
+ --sidebar-background-color: var(--background-color);
429
416
  --sidebar-border-color: var(--border-color);
430
417
 
431
418
  /**
@@ -779,7 +766,7 @@ const apiReferencePanels = css`
779
766
  --panel-schemas-font-family: var(--panel-font-family); // @presenter FontFamily
780
767
  --panel-schemas-font-size: var(--panel-font-size); // @presenter FontSize
781
768
  --panel-schemas-font-weight: var(--panel-font-weight); // @presenter
782
- --panel-schemas-background-color: var(--color-emphasis-50); // @presenter Color
769
+ --panel-schemas-background-color: var(--background-color); // @presenter Color
783
770
  --panel-schemas-border: var(--panel-border); // @presenter Border
784
771
  --panel-schemas-chevron-icon-color: var(--text-color); // @presenter Color
785
772
 
@@ -792,7 +779,7 @@ const apiReferencePanels = css`
792
779
  --panel-schemas-body-font-size: var(--panel-body-font-size); // @presenter FontSize
793
780
  --panel-schemas-body-font-weight: var(--panel-body-font-weight); // @presenter FontWeight
794
781
  --panel-schemas-body-padding: 0 var(--panel-body-padding) var(--panel-body-padding) var(--panel-body-padding);
795
- --panel-schemas-body-background-color: var(--color-emphasis-50); // @presenter Color
782
+ --panel-schemas-body-background-color: var(--background-color); // @presenter Color
796
783
  --panel-schemas-body-border: unset; // @presenter Border
797
784
 
798
785
  /**
@@ -805,7 +792,7 @@ const apiReferencePanels = css`
805
792
  --panel-schemas-heading-font-weight: var(--panel-heading-font-weight); // @presenter FontWeight
806
793
  --panel-schemas-heading-line-height: var(--panel-heading-line-height); // @presenter LineHeight
807
794
  --panel-schemas-heading-padding: var(--panel-heading-padding);
808
- --panel-schemas-heading-background-color: var(--color-emphasis-50); // @presenter Color
795
+ --panel-schemas-heading-background-color: var(--background-color); // @presenter Color
809
796
  --panel-schemas-heading-border: unset; // @presenter Border
810
797
 
811
798
  /**
@@ -848,7 +835,7 @@ const apiReferencePanels = css`
848
835
  * @tokens Panel samples common
849
836
  */
850
837
 
851
- --panel-samples-block-background-color: var(--color-emphasis-50); // @presenter Color
838
+ --panel-samples-block-background-color: var(--background-color); // @presenter Color
852
839
  --panel-samples-width: 50%;
853
840
 
854
841
  --panel-samples-text-color: var(--text-color-inverse); // @presenter Color
@@ -1171,7 +1158,7 @@ const tooltip = css`
1171
1158
  */
1172
1159
 
1173
1160
  --copy-button-tooltip-text-color: #000;
1174
- --copy-button-tooltip-background-color: var(--color-secondary-50);
1161
+ --copy-button-tooltip-background-color: var(--background-color);
1175
1162
 
1176
1163
  .tooltip-copy-button {
1177
1164
  --tooltip-text-color: var(--copy-button-tooltip-text-color);
@@ -1197,7 +1184,7 @@ const code = css`
1197
1184
  --inline-code-font-size: var(--code-font-size); // @presenter FontSize
1198
1185
  --inline-code-font-family: var(--code-font-family); // @presenter FontFamily
1199
1186
  --inline-code-text-color: #e53935; // @presenter Color
1200
- --inline-code-background-color: var(--color-secondary-100); // @presenter Color
1187
+ --inline-code-background-color: var(--colors-translucent); // @presenter Color
1201
1188
  --inline-code-border-color: var(--border-color); // @presenter Color
1202
1189
  --inline-code-border-radius: var(--border-radius); // @presenter BorderRadius
1203
1190
 
@@ -1346,7 +1333,7 @@ const apiReferenceDocs = css`
1346
1333
  --schema-inline-code-font-family: var(--inline-code-font-family); // @presenter FontFamily
1347
1334
  --schema-inline-code-font-size: var(--inline-code-font-size); // @presenter FontSize
1348
1335
  --schema-inline-code-text-color: var(--text-color); // @presenter Color
1349
- --schema-inline-background-color: var(--color-secondary-100); // @presenter Color
1336
+ --schema-inline-background-color: var(--colors-translucent); // @presenter Color
1350
1337
  --schema-inline-border-color: var(--border-color); // @presenter Color
1351
1338
  --schema-inline-border: 1px solid var(--schema-inline-border-color); // @presenter Border
1352
1339
 
@@ -1408,7 +1395,7 @@ const apiReferenceDocs = css`
1408
1395
  */
1409
1396
 
1410
1397
  --schema-nested-offset: 1em; // @presenter Spacing
1411
- --schema-nested-background-color: var(--color-secondary-100); // @presenter Color
1398
+ --schema-nested-background-color: var(--colors-translucent); // @presenter Color
1412
1399
 
1413
1400
  /**
1414
1401
  * @tokens API Reference Schema Buttons
@@ -1465,7 +1452,7 @@ const apiReferenceDocs = css`
1465
1452
  --linear-progress-background-color: var(--color-accent-100); // @presenter Color
1466
1453
 
1467
1454
  --fab-icon-color: var(--color-primary-500); // @presenter Color
1468
- --fab-background-color: var(--color-emphasis-50); // @presenter Color
1455
+ --fab-background-color: var(--background-color); // @presenter Color
1469
1456
  --fab-box-shadow: 0 0 20px rgba(43, 43, 43, 0.3); // @presenter Shadow
1470
1457
 
1471
1458
  --fab-hover-background: var(--color-emphasis-200); // @presenter Color
@@ -1785,7 +1772,7 @@ const search = css`
1785
1772
  --search-input-hover-border: none; // @presenter Color
1786
1773
  --search-input-placeholder-color: var(--search-input-text-color);
1787
1774
 
1788
- --search-popover-background-color: #fff; // @presenter Color
1775
+ --search-popover-background-color: var(--background-color); // @presenter Color
1789
1776
  --search-popover-border-radius: var(--search-input-border-radius); // @presenter BorderRadius
1790
1777
  --search-popover-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12),
1791
1778
  0 8px 10px -5px rgba(0, 0, 0, 0.4); // @presenter BoxShadow
@@ -1820,7 +1807,7 @@ const search = css`
1820
1807
  * @presenter Color
1821
1808
  */
1822
1809
 
1823
- --search-modal-background: #fff;
1810
+ --search-modal-background: var(--background-color);
1824
1811
  --search-modal-text-color: var(--text-color);
1825
1812
  --search-modal-border: none;
1826
1813
  --search-modal-box-shadow: none;
@@ -1853,10 +1840,6 @@ const lastUpdated = css`
1853
1840
  --last-updated-line-height: var(--line-height-base);
1854
1841
  `;
1855
1842
 
1856
- export const darkMode = css`
1857
- ${baseDarkColors}
1858
- `;
1859
-
1860
1843
  export const styles = css`
1861
1844
  :root {
1862
1845
  ${baseColors}
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './Button';
2
2
  export * from './CopyButton';
3
+ export * from './EditPageButton';
3
4
  export * from './JsonViewer';
4
5
  export * from './Typography';
5
6
  export * from './SidebarLogo';
@@ -1,3 +1,9 @@
1
1
  export function withPathPrefix(link: string): string {
2
2
  return link;
3
3
  }
4
+
5
+ export function timeAgo(lastModified: string | Date): string {
6
+ // should return format(lastModified) in new-hope
7
+ const d = new Date(lastModified);
8
+ return `${d.getDate()}-${d.getMonth() + 1}-${d.getFullYear()}`;
9
+ }
@@ -0,0 +1,28 @@
1
+ import { css } from 'styled-components';
2
+
3
+ export const darkMode = css`
4
+ /**
5
+ * @tokens Dark Colors
6
+ * @presenter Color
7
+ */
8
+
9
+ --color-primary-300: #1e5ab1;
10
+ --color-primary-500: #003c95;
11
+
12
+ --color-accent-50: #6c91c0;
13
+
14
+ --color-secondary-50: #031e48;
15
+ --color-secondary-200: #142d62;
16
+ --color-secondary-300: #3f517c;
17
+ --color-secondary-500: #222222;
18
+
19
+ --color-emphasis-100: #5c5e62;
20
+ --color-emphasis-800: #f0f0f0;
21
+
22
+ --color-success-50: #627565;
23
+ --color-error-50: #bda3a7;
24
+ --color-warning-50: #8c8469;
25
+
26
+ background-color: var(--background-color);
27
+ color: var(--text-color);
28
+ `;
@@ -0,0 +1 @@
1
+ export declare const darkMode: import("styled-components").FlattenSimpleInterpolation;
@@ -0,0 +1,10 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.darkMode = void 0;
8
+ var styled_components_1 = require("styled-components");
9
+ exports.darkMode = (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n /**\n * @tokens Dark Colors\n * @presenter Color\n */\n\n --color-primary-300: #1e5ab1;\n --color-primary-500: #003c95;\n\n --color-accent-50: #6c91c0;\n\n --color-secondary-50: #031e48;\n --color-secondary-200: #142d62;\n --color-secondary-300: #3f517c;\n --color-secondary-500: #222222;\n\n --color-emphasis-100: #5c5e62;\n --color-emphasis-800: #f0f0f0;\n\n --color-success-50: #627565;\n --color-error-50: #bda3a7;\n --color-warning-50: #8c8469;\n\n background-color: var(--background-color);\n color: var(--text-color);\n"], ["\n /**\n * @tokens Dark Colors\n * @presenter Color\n */\n\n --color-primary-300: #1e5ab1;\n --color-primary-500: #003c95;\n\n --color-accent-50: #6c91c0;\n\n --color-secondary-50: #031e48;\n --color-secondary-200: #142d62;\n --color-secondary-300: #3f517c;\n --color-secondary-500: #222222;\n\n --color-emphasis-100: #5c5e62;\n --color-emphasis-800: #f0f0f0;\n\n --color-success-50: #627565;\n --color-error-50: #bda3a7;\n --color-warning-50: #8c8469;\n\n background-color: var(--background-color);\n color: var(--text-color);\n"])));
10
+ var templateObject_1;