@redocly/theme 0.18.3-patch.2 → 0.18.3-patch.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/lib/I18n/LanguagePicker.js +17 -10
  2. package/lib/I18n/styledVariables.js +1 -0
  3. package/lib/components/Breadcrumbs/Breadcrumb.js +0 -4
  4. package/lib/components/Breadcrumbs/Breadcrumbs.js +5 -1
  5. package/lib/components/Breadcrumbs/styledVariables.js +2 -1
  6. package/lib/components/Catalog/Catalog.d.ts +5 -0
  7. package/lib/components/Catalog/Catalog.js +18 -16
  8. package/lib/components/Catalog/CatalogCard.js +22 -5
  9. package/lib/components/CodeBlock/styledVariables.js +2 -2
  10. package/lib/components/Filter/Filter.d.ts +2 -1
  11. package/lib/components/Filter/Filter.js +15 -14
  12. package/lib/components/Filter/FilterContent.d.ts +2 -1
  13. package/lib/components/Filter/FilterContent.js +5 -4
  14. package/lib/components/Filter/FilterPopover.d.ts +3 -1
  15. package/lib/components/Filter/FilterPopover.js +4 -4
  16. package/lib/components/Filter/styledVariables.js +1 -1
  17. package/lib/components/Footer/Footer.js +2 -1
  18. package/lib/components/Footer/FooterColumn.js +2 -0
  19. package/lib/components/Footer/styledVariables.js +1 -1
  20. package/lib/components/LastUpdated/LastUpdated.js +1 -0
  21. package/lib/components/Markdown/Admonition.js +12 -9
  22. package/lib/components/Markdown/Mermaid.js +3 -0
  23. package/lib/components/Markdown/styledVariables.d.ts +1 -0
  24. package/lib/components/Markdown/styledVariables.js +17 -7
  25. package/lib/components/Panel/PanelHeader.js +1 -0
  26. package/lib/components/Panel/styledVariables.js +1 -1
  27. package/lib/components/Product/ProductPicker.js +17 -5
  28. package/lib/components/Select/Select.d.ts +13 -6
  29. package/lib/components/Select/Select.js +20 -15
  30. package/lib/components/Select/styledVariables.js +2 -1
  31. package/lib/components/Separator/SeparatorItem.js +1 -0
  32. package/lib/components/Sidebar/HeaderWrapper.js +2 -2
  33. package/lib/components/Sidebar/VersionPicker.d.ts +3 -3
  34. package/lib/components/Sidebar/VersionPicker.js +5 -4
  35. package/lib/components/Sidebar/styledVariables.js +5 -4
  36. package/lib/components/Tag/styledVariables.js +10 -9
  37. package/lib/components/Tiles/TileHeader.js +1 -1
  38. package/lib/config.d.ts +25 -2
  39. package/lib/config.js +12 -3
  40. package/lib/globalStyle.js +35 -33
  41. package/lib/hooks/useMobileMenu.js +5 -6
  42. package/lib/hooks/useModalScrollLock.d.ts +1 -0
  43. package/lib/hooks/useModalScrollLock.js +16 -0
  44. package/lib/icons/AlertIcon/AlertIcon.js +0 -5
  45. package/lib/types/portal/src/shared/types/catalog.d.ts +5 -1
  46. package/lib/ui/Highlight.d.ts +1 -1
  47. package/lib/ui/Highlight.js +1 -1
  48. package/lib/ui/darkColors.js +26 -26
  49. package/lib/utils/css-variables.js +1 -1
  50. package/package.json +1 -1
  51. package/src/I18n/LanguagePicker.tsx +23 -21
  52. package/src/I18n/styledVariables.ts +1 -0
  53. package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -4
  54. package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
  55. package/src/components/Breadcrumbs/styledVariables.ts +2 -1
  56. package/src/components/Catalog/Catalog.tsx +17 -10
  57. package/src/components/Catalog/CatalogCard.tsx +26 -3
  58. package/src/components/CodeBlock/styledVariables.ts +2 -2
  59. package/src/components/Filter/Filter.tsx +28 -26
  60. package/src/components/Filter/FilterContent.tsx +7 -4
  61. package/src/components/Filter/FilterPopover.tsx +13 -3
  62. package/src/components/Filter/styledVariables.ts +1 -1
  63. package/src/components/Footer/Footer.tsx +1 -1
  64. package/src/components/Footer/FooterColumn.tsx +2 -0
  65. package/src/components/Footer/styledVariables.ts +1 -1
  66. package/src/components/LastUpdated/LastUpdated.tsx +1 -2
  67. package/src/components/Markdown/Admonition.tsx +13 -8
  68. package/src/components/Markdown/Mermaid.tsx +3 -0
  69. package/src/components/Markdown/styledVariables.ts +18 -7
  70. package/src/components/Panel/PanelHeader.ts +1 -0
  71. package/src/components/Panel/styledVariables.ts +1 -1
  72. package/src/components/Product/ProductPicker.tsx +18 -13
  73. package/src/components/Select/Select.tsx +47 -26
  74. package/src/components/Select/styledVariables.ts +2 -1
  75. package/src/components/Separator/SeparatorItem.tsx +1 -0
  76. package/src/components/Sidebar/HeaderWrapper.tsx +2 -2
  77. package/src/components/Sidebar/VersionPicker.tsx +5 -4
  78. package/src/components/Sidebar/styledVariables.ts +5 -4
  79. package/src/components/Tag/styledVariables.ts +10 -9
  80. package/src/components/Tiles/TileHeader.ts +1 -1
  81. package/src/config.ts +11 -1
  82. package/src/globalStyle.ts +36 -34
  83. package/src/hooks/useMobileMenu.ts +3 -4
  84. package/src/hooks/useModalScrollLock.ts +12 -0
  85. package/src/icons/AlertIcon/AlertIcon.tsx +0 -5
  86. package/src/types/portal/src/shared/types/catalog.ts +7 -1
  87. package/src/ui/Highlight.tsx +2 -2
  88. package/src/ui/darkColors.tsx +26 -26
  89. package/src/utils/css-variables.ts +4 -2
@@ -21,14 +21,18 @@ const LanguagePicker = (props) => {
21
21
  if (!locale) {
22
22
  return null;
23
23
  }
24
- const selected = locale.name || locale.code;
25
- const languageItems = locales.map((locale) => (react_1.default.createElement(LanguageItem, { onClick: () => {
26
- const newLangPathname = (0, utils_1.withPathPrefix)((0, utils_1.getPathnameForLocale)(location.pathname, defaultLocale, locale.code, locales));
24
+ const value = locale.code;
25
+ const languageItems = locales.map((locale) => ({
26
+ element: react_1.default.createElement(LanguageItem, { role: "link" }, locale.name || locale.code || ''),
27
+ value: locale.code,
28
+ title: locale.name || locale.code || '',
29
+ }));
30
+ return (react_1.default.createElement(LanguageSelect, { value: value, options: languageItems, onChange: (value) => {
31
+ const newLangPathname = (0, utils_1.withPathPrefix)((0, utils_1.getPathnameForLocale)(location.pathname, defaultLocale, value, locales));
27
32
  const newUrlWithLanguage = `${newLangPathname}${location.search}${location.hash}`;
28
33
  history.push(newUrlWithLanguage);
29
- props.onChangeLanguage(locale.code);
30
- }, key: locale.code, role: "link" }, locale.name || locale.code || '')));
31
- return (react_1.default.createElement(LanguageSelect, { selected: selected, options: languageItems, triggerEvent: "hover", placement: props.placement, alignment: props.alignment, icon: react_1.default.createElement(icons_1.LanguageIcon, null), onlyIcon: props.onlyIcon }));
34
+ props.onChangeLanguage(value);
35
+ }, triggerEvent: "hover", placement: props.placement, alignment: props.alignment, icon: react_1.default.createElement(icons_1.LanguageIcon, null), onlyIcon: props.onlyIcon, withArrow: false }));
32
36
  };
33
37
  exports.LanguagePicker = LanguagePicker;
34
38
  const LanguageSelect = (0, styled_components_1.default)(Select_1.Select).attrs(() => ({
@@ -36,6 +40,13 @@ const LanguageSelect = (0, styled_components_1.default)(Select_1.Select).attrs((
36
40
  'data-component-name': 'I18n/LanguagePicker',
37
41
  },
38
42
  })) `
43
+ --select-list-item-active-background-color: var(
44
+ --language-picker-list-item-active-background-color
45
+ );
46
+ --select-list-item-hover-background-color: var(
47
+ --language-picker-list-item-hover-background-color
48
+ );
49
+
39
50
  display: none;
40
51
  font-size: var(--language-picker-font-size);
41
52
  font-weight: var(--language-picker-font-weight);
@@ -73,10 +84,6 @@ const LanguageSelect = (0, styled_components_1.default)(Select_1.Select).attrs((
73
84
  padding: var(--language-picker-list-item-vertical-padding)
74
85
  var(--language-picker-list-item-horizontal-padding);
75
86
  }
76
-
77
- :hover {
78
- background-color: var(--language-picker-list-item-active-background-color);
79
- }
80
87
  }
81
88
 
82
89
  ${({ theme }) => theme.mediaQueries.medium} {
@@ -33,6 +33,7 @@ exports.languagePicker = (0, styled_components_1.css) `
33
33
  --language-picker-list-item-vertical-padding: var(--select-list-item-vertical-padding); // @presenter Spacing
34
34
  --language-picker-list-item-border-radius: var(--select-list-item-border-radius); // @presenter BorderRadius
35
35
  --language-picker-list-item-active-background-color: var(--select-list-item-active-background-color); // @presenter Color
36
+ --language-picker-list-item-hover-background-color: var(--select-list-item-hover-background-color); // @presenter Color
36
37
 
37
38
  // @tokens End
38
39
  `;
@@ -18,10 +18,6 @@ const BreadcrumbText = styled_components_1.default.div `
18
18
  const BreadcrumbWrapper = styled_components_1.default.div `
19
19
  border-radius: var(--border-radius);
20
20
 
21
- &:first-child {
22
- padding-left: 0;
23
- }
24
-
25
21
  ${(props) => props.isLink &&
26
22
  `
27
23
  &:hover {
@@ -24,7 +24,7 @@ const Breadcrumbs = (props) => {
24
24
  total_breadcrumbs: breadcrumbs.length,
25
25
  });
26
26
  } }),
27
- isLast ? null : react_1.default.createElement("div", null, "/")));
27
+ isLast ? null : react_1.default.createElement("span", null, "/")));
28
28
  })));
29
29
  };
30
30
  exports.Breadcrumbs = Breadcrumbs;
@@ -40,6 +40,10 @@ const Container = styled_components_1.default.div `
40
40
  padding: var(--breadcrumbs-padding);
41
41
  }
42
42
 
43
+ > span {
44
+ padding: var(--breadcrumbs-gap);
45
+ }
46
+
43
47
  @media print {
44
48
  display: none;
45
49
  }
@@ -11,7 +11,8 @@ exports.breadcrumbs = (0, styled_components_1.css) `
11
11
  --breadcrumbs-font-size: var(--font-size-base); // @presenter FontSize
12
12
  --breadcrumbs-active-text-color: var(--text-primary); // @presenter Color
13
13
  --breadcrumbs-hover-text-decoration: underline; // @presenter TextDecoration
14
- --breadcrumbs-padding: 0 var(--spacing-xs); // @presenter Spacing
14
+ --breadcrumbs-padding: 0; // @presenter Spacing
15
+ --breadcrumbs-gap: var(--spacing-xs);
15
16
  --breadcrumbs-margin-bottom: var(--spacing-lg); // @presenter Spacing
16
17
 
17
18
  // @tokens End
@@ -7,3 +7,8 @@ export default function Catalog(props: {
7
7
  };
8
8
  }): JSX.Element;
9
9
  export declare const FilterControls: import("styled-components").StyledComponent<"div", any, {}, never>;
10
+ export declare const CatalogPageContent: import("styled-components").StyledComponent<"main", any, {}, never>;
11
+ export declare const CatalogTitle: import("styled-components").StyledComponent<"h2", any, {}, never>;
12
+ export declare const CatalogDescription: import("styled-components").StyledComponent<"p", any, {}, never>;
13
+ export declare const CatalogPageWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
14
+ export declare const CatalogPageDescriptionWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FilterControls = void 0;
6
+ exports.CatalogPageDescriptionWrapper = exports.CatalogPageWrapper = exports.CatalogDescription = exports.CatalogTitle = exports.CatalogPageContent = exports.FilterControls = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const Highlight_1 = require("../../ui/Highlight");
@@ -15,6 +15,7 @@ const FilterContent_1 = require("../../components/Filter/FilterContent");
15
15
  const FilterPopover_1 = require("../../components/Filter/FilterPopover");
16
16
  const Button_1 = require("../../components/Button");
17
17
  const PlusIcon_1 = require("../../icons/PlusIcon");
18
+ const useModalScrollLock_1 = __importDefault(require("../../hooks/useModalScrollLock"));
18
19
  const useCatalog_1 = require("./useCatalog");
19
20
  function Catalog(props) {
20
21
  const { catalogConfig } = props.pageProps;
@@ -25,20 +26,21 @@ function Catalog(props) {
25
26
  addFilter: 'theme.catalog.filters.select.addFilter',
26
27
  };
27
28
  const { translate } = (0, index_1.useTranslate)();
29
+ (0, useModalScrollLock_1.default)(isAddingFilter);
28
30
  return (react_1.default.createElement(Highlight_1.HighlightContext.Provider, { value: [filterTerm] },
29
- react_1.default.createElement(CatalogPageWrapper, null,
31
+ react_1.default.createElement(exports.CatalogPageWrapper, null,
30
32
  react_1.default.createElement(FilterTagsWrapper, null,
31
33
  react_1.default.createElement(Button_1.Button, { variant: "text", size: "small", icon: react_1.default.createElement(PlusIcon_1.PlusIcon, null), onClick: () => setIsAddingFilter(true) }, translate(translationKeys.addFilter, 'Add filter')),
32
34
  react_1.default.createElement(FilterTags_1.FilterTags, { filters: filters })),
33
35
  react_1.default.createElement(FilterContent_1.FilterContent, { setFilterTerm: setFilterTerm, filters: filters, filterTerm: filterTerm, isMobile: false, filterValuesCasing: catalogConfig.filterValuesCasing }),
34
- isAddingFilter && (react_1.default.createElement(FilterPopover_1.FilterPopover, { setIsAddingFilter: setIsAddingFilter, filters: filters })),
35
- react_1.default.createElement(CatalogPageContent, null,
36
- react_1.default.createElement(CatalogPageDescriptionWrapper, null,
37
- catalogConfig.title ? (react_1.default.createElement(CatalogTitle, null,
36
+ isAddingFilter && (react_1.default.createElement(FilterPopover_1.FilterPopover, { setIsAddingFilter: setIsAddingFilter, filters: filters, filterValuesCasing: catalogConfig.filterValuesCasing })),
37
+ react_1.default.createElement(exports.CatalogPageContent, null,
38
+ react_1.default.createElement(exports.CatalogPageDescriptionWrapper, null,
39
+ catalogConfig.title ? (react_1.default.createElement(exports.CatalogTitle, null,
38
40
  ' ',
39
41
  translate(catalogConfig.titleTranslationKey, catalogConfig.title),
40
42
  ' ')) : null,
41
- catalogConfig.description ? (react_1.default.createElement(CatalogDescription, null,
43
+ catalogConfig.description ? (react_1.default.createElement(exports.CatalogDescription, null,
42
44
  ' ',
43
45
  translate(catalogConfig.descriptionTranslationKey, catalogConfig.description),
44
46
  ' ')) : null),
@@ -79,11 +81,11 @@ exports.FilterControls = styled_components_1.default.div `
79
81
  border-bottom: 1px solid var(--border-secondary);
80
82
  background: var(--bg-raised);
81
83
  `;
82
- const CatalogPageContent = styled_components_1.default.main `
84
+ exports.CatalogPageContent = styled_components_1.default.main `
83
85
  flex: 1;
84
86
  padding: var(--mobile-catalog-page-padding);
85
87
 
86
- ${({ theme }) => theme.mediaQueries.small} {
88
+ ${({ theme }) => theme.mediaQueries.medium} {
87
89
  padding: var(--catalog-page-padding);
88
90
  }
89
91
  `;
@@ -93,7 +95,7 @@ const CatalogCards = styled_components_1.default.div `
93
95
  gap: 32px;
94
96
  margin: var(--catalog-cards-group-margin);
95
97
  `;
96
- const CatalogTitle = (0, styled_components_1.default)(H2_1.H2) `
98
+ exports.CatalogTitle = (0, styled_components_1.default)(H2_1.H2) `
97
99
  color: var(--catalog-title-text-color);
98
100
  font-weight: var(--catalog-title-font-weight);
99
101
  font-size: var(--catalog-title-font-size);
@@ -102,13 +104,13 @@ const CatalogTitle = (0, styled_components_1.default)(H2_1.H2) `
102
104
  margin: 0;
103
105
  }
104
106
  `;
105
- const CatalogDescription = styled_components_1.default.p `
107
+ exports.CatalogDescription = styled_components_1.default.p `
106
108
  color: var(--catalog-description-text-color);
107
109
  font-weight: var(--catalog-description-font-weight);
108
110
  font-size: var(--catalog-description-font-size);
109
111
  margin: var(--catalog-description-margin-top) 0 var(--catalog-description-margin-bottom) 0;
110
112
  `;
111
- const CatalogPageWrapper = styled_components_1.default.div `
113
+ exports.CatalogPageWrapper = styled_components_1.default.div `
112
114
  --sidebar-width: var(--catalog-sidebar-width, 285px);
113
115
 
114
116
  display: flex;
@@ -134,7 +136,7 @@ const CatalogPageWrapper = styled_components_1.default.div `
134
136
  font-weight: var(--link-font-weight);
135
137
  }
136
138
 
137
- ${({ theme }) => theme.mediaQueries.small} {
139
+ ${({ theme }) => theme.mediaQueries.medium} {
138
140
  flex-direction: row;
139
141
  }
140
142
  `;
@@ -143,7 +145,7 @@ const FilterTagsWrapper = styled_components_1.default.div.attrs({ 'data-cy': 'Ca
143
145
  display: flex;
144
146
  overflow-x: scroll;
145
147
 
146
- ${({ theme }) => theme.mediaQueries.small} {
148
+ ${({ theme }) => theme.mediaQueries.medium} {
147
149
  display: none;
148
150
  }
149
151
 
@@ -165,10 +167,10 @@ const FilterTagsWrapper = styled_components_1.default.div.attrs({ 'data-cy': 'Ca
165
167
  }
166
168
  }
167
169
  `;
168
- const CatalogPageDescriptionWrapper = styled_components_1.default.div `
170
+ exports.CatalogPageDescriptionWrapper = styled_components_1.default.div `
169
171
  display: none;
170
172
 
171
- ${({ theme }) => theme.mediaQueries.small} {
173
+ ${({ theme }) => theme.mediaQueries.medium} {
172
174
  display: block;
173
175
  }
174
176
  `;
@@ -36,21 +36,38 @@ const icons_1 = require("../../icons");
36
36
  const telemetry_1 = require("../../mocks/telemetry");
37
37
  const utils_1 = require("../../utils");
38
38
  function CatalogCard({ item }) {
39
- var _a;
39
+ var _a, _b;
40
+ const hasTags = item.scorecardStatus || ((_a = item.tags) === null || _a === void 0 ? void 0 : _a.length);
40
41
  return (React.createElement(Link_1.Link, { key: item.docsLink || item.link, to: item.docsLink || item.link },
41
42
  React.createElement(StyledCard, { onClick: () => telemetry_1.telemetry.send('catalog_item_clicked', {}) },
42
43
  React.createElement(CardTitle, null,
43
44
  React.createElement(Highlight_1.Highlight, null, item.title)),
44
45
  React.createElement(CardContent, null,
45
46
  React.createElement(CardDescription, null,
46
- React.createElement(Highlight_1.Highlight, null, (_a = item.description) !== null && _a !== void 0 ? _a : '')),
47
+ React.createElement(Highlight_1.Highlight, null, (_b = item.description) !== null && _b !== void 0 ? _b : '')),
47
48
  React.createElement(CardFooter, null,
48
- item.tags && (React.createElement(CardTags, null, item.tags.map((tag, index) => (React.createElement(CardTag, { key: tag + index, color: (0, utils_1.slug)(tag) },
49
- React.createElement(Highlight_1.Highlight, null, tag)))))),
49
+ hasTags && (React.createElement(CardTags, null,
50
+ (item.tags || []).map((tag, index) => (React.createElement(CardTag, { key: tag + index, color: (0, utils_1.slug)(tag) },
51
+ React.createElement(Highlight_1.Highlight, null, tag)))),
52
+ (item.scorecardLevel && item.scorecardStatus && (React.createElement(CardTag, { color: statusToColor(item.scorecardStatus), className: "tag-variant-scorecard-level" },
53
+ React.createElement(Highlight_1.Highlight, null, item.scorecardLevel)))) ||
54
+ null)),
50
55
  React.createElement(SelectButton, null,
51
56
  React.createElement(icons_1.PointingArrowIcon, null)))))));
52
57
  }
53
58
  exports.CatalogCard = CatalogCard;
59
+ function statusToColor(status) {
60
+ switch (status) {
61
+ case 'Below minimum':
62
+ return 'error';
63
+ case 'Minimum':
64
+ return 'warning';
65
+ case 'Highest':
66
+ return 'success';
67
+ default:
68
+ return '';
69
+ }
70
+ }
54
71
  const SelectButton = styled_components_1.default.div `
55
72
  border: 1px solid var(--catalog-card-button-border-color);
56
73
  border-radius: 100%;
@@ -86,7 +103,7 @@ const StyledCard = styled_components_1.default.div.attrs({ 'data-cy': 'Catalog/C
86
103
  transform: rotate(-45deg);
87
104
  border-color: var(--catalog-card-hover-border-color);
88
105
  background: var(--catalog-card-button-hover-background);
89
-
106
+
90
107
  svg {
91
108
  fill: var(--catalog-card-icon-hover-color);
92
109
  }
@@ -50,7 +50,7 @@ exports.code = (0, styled_components_1.css) `
50
50
  --code-block-controls-text-color: var(--text-secondary); // @presenter Color
51
51
  --code-block-controls-background-color: var(--bg-overlay); // @presenter Color
52
52
  --code-block-controls-border: 1px solid var(--border-primary); // @presenter Border
53
- --code-block-controls-padding: 0 5px; // @presenter Spacing
53
+ --code-block-controls-padding: 0 var(--spacing-xs); // @presenter Spacing
54
54
  --code-block-icon-controls-background-color: var(--code-block-controls-background-color);
55
55
  --code-block-text-controls-background-color: var(--code-block-controls-background-color);
56
56
 
@@ -68,7 +68,7 @@ exports.code = (0, styled_components_1.css) `
68
68
  --code-block-tokens-constant-color: var(--code-block-tokens-default-color); // @presenter Color
69
69
  --code-block-tokens-symbol-color: var(--code-block-tokens-default-color); // @presenter Color
70
70
  --code-block-tokens-boolean-color: var(--color-geekblue-7); // @presenter Color
71
- --code-block-tokens-string-color: var(--color-green-6); // @presenter Color
71
+ --code-block-tokens-string-color: var(--color-cyan-6); // @presenter Color
72
72
  --code-block-tokens-property-string-color: var(--text-secondary); // @presenter Color
73
73
  --code-block-tokens-selector-color: var(--code-block-tokens-string-color); // @presenter Color
74
74
  --code-block-tokens-attr-name-color: var(--code-block-tokens-string-color); // @presenter Color
@@ -1,8 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import type { ResolvedFilter } from '../../types/portal/src/shared/types/catalog';
3
+ import type { ThemeConfig } from '../../config';
3
4
  export declare function Filter({ filter, filterValuesCasing, }: {
4
5
  filter: ResolvedFilter & {
5
6
  selectedOptions: any;
6
7
  };
7
- filterValuesCasing?: 'sentence';
8
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
8
9
  }): JSX.Element | null;
@@ -11,7 +11,7 @@ const hooks_1 = require("../../mocks/hooks");
11
11
  const icons_1 = require("../../icons");
12
12
  const Select_1 = require("../../components/Select");
13
13
  function Filter({ filter, filterValuesCasing, }) {
14
- var _a, _b;
14
+ var _a;
15
15
  const { translate } = (0, hooks_1.useTranslate)();
16
16
  const translationKeys = {
17
17
  selectAll: 'theme.catalog.filters.select.all',
@@ -25,30 +25,23 @@ function Filter({ filter, filterValuesCasing, }) {
25
25
  selectOptions = [
26
26
  {
27
27
  value: '',
28
- component: (react_1.default.createElement(FilterOption, { key: "all", role: "link", onClick: () => filter.selectOption('') },
28
+ element: (react_1.default.createElement(FilterOption, { key: "all", onClick: () => filter.selectOption('') },
29
29
  react_1.default.createElement(FilterOptionLabel, null, translate(translationKeys.selectAll, 'All')),
30
30
  react_1.default.createElement(FilterOptionCount, null, defaultOptionCount))),
31
31
  },
32
32
  ];
33
33
  selectOptions.push(...filter.filteredOptions.map((option) => ({
34
34
  value: option.value,
35
- component: (react_1.default.createElement(FilterOption, { key: option.value, role: "link", onClick: () => filter.selectOption(option.value) },
35
+ element: (react_1.default.createElement(FilterOption, { key: option.value },
36
36
  react_1.default.createElement(FilterOptionLabel, null, changeCasing(translate(option.value), filterValuesCasing)),
37
37
  react_1.default.createElement(FilterOptionCount, null, option.count))),
38
38
  })));
39
39
  }
40
- let selectedOptionComponent;
41
- if (filter.type === 'select') {
42
- const selectedOption = (_a = filter.selectedOptions.values().next()) === null || _a === void 0 ? void 0 : _a.value;
43
- selectedOptionComponent =
44
- ((_b = selectOptions.find((option) => option.value === selectedOption)) === null || _b === void 0 ? void 0 : _b.component) ||
45
- selectOptions[0].component;
46
- }
47
40
  return (react_1.default.createElement(FilterGroup, { key: filter.property + filter.title },
48
41
  react_1.default.createElement(FilterTitle, null,
49
42
  translate(filter.titleTranslationKey, filter.title),
50
43
  " "),
51
- filter.type === 'select' ? (react_1.default.createElement(StyledSelect, { withArrow: true, selected: selectedOptionComponent, options: selectOptions.map((option) => option.component) })) : filter.type === 'date-range' ? (react_1.default.createElement(react_1.default.Fragment, null,
44
+ filter.type === 'select' ? (react_1.default.createElement(StyledSelect, { value: (_a = filter.selectedOptions.values().next()) === null || _a === void 0 ? void 0 : _a.value, onChange: (value) => filter.selectOption(value), options: selectOptions })) : filter.type === 'date-range' ? (react_1.default.createElement(react_1.default.Fragment, null,
52
45
  react_1.default.createElement(DatePickerWrapper, null,
53
46
  react_1.default.createElement("span", null, "From:"),
54
47
  react_1.default.createElement(react_date_picker_1.DatePicker, { closeCalendar: true, format: "y-MM-dd", dayPlaceholder: "DD", monthPlaceholder: "MM", yearPlaceholder: "YYYY", value: filter.selectedOptions.from ? new Date(filter.selectedOptions.from) : null, minDetail: "decade", maxDate: new Date(), onChange: (from) => {
@@ -72,10 +65,18 @@ function Filter({ filter, filterValuesCasing, }) {
72
65
  }
73
66
  exports.Filter = Filter;
74
67
  function changeCasing(str, casing) {
75
- if (casing !== 'sentence')
68
+ if (!casing || casing === 'original' || !str)
76
69
  return str;
77
- const words = str.split(/[\s-_]+/);
78
- return words.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
70
+ if (casing === 'lowercase') {
71
+ return str.toLowerCase();
72
+ }
73
+ if (casing === 'uppercase') {
74
+ return str.toUpperCase();
75
+ }
76
+ if (casing === 'sentence') {
77
+ const words = str.split(/[\s-_]+/);
78
+ return words.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
79
+ }
79
80
  }
80
81
  const FilterGroup = styled_components_1.default.div `
81
82
  padding: var(--filter-group-padding);
@@ -1,11 +1,12 @@
1
1
  /// <reference types="react" />
2
+ import type { ThemeConfig } from '../../index.js';
2
3
  import type { ResolvedFilter } from '../../types/portal/src/shared/types/catalog';
3
4
  interface FilterContentProps {
4
5
  setFilterTerm: (value: string) => void;
5
6
  filters: ResolvedFilter[];
6
7
  filterTerm: string;
7
8
  isMobile: boolean;
8
- filterValuesCasing?: 'sentence';
9
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
9
10
  }
10
11
  export declare function FilterContent({ setFilterTerm, filters, filterTerm, isMobile, filterValuesCasing, }: FilterContentProps): JSX.Element;
11
12
  export declare const FilterItems: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -9,7 +9,8 @@ const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const _theme_1 = require("../../index.js");
10
10
  const hooks_1 = require("../../mocks/hooks");
11
11
  const Catalog_1 = require("../../components/Catalog");
12
- const index_1 = require("../../components/Filter/index");
12
+ const Filter_1 = require("../../components/Filter");
13
+ const Sidebar_1 = require("../../components/Sidebar");
13
14
  const FilterPopover_1 = require("../../components/Filter/FilterPopover");
14
15
  function FilterContent({ setFilterTerm, filters, filterTerm, isMobile, filterValuesCasing, }) {
15
16
  const { translate } = (0, hooks_1.useTranslate)();
@@ -31,11 +32,11 @@ function FilterContent({ setFilterTerm, filters, filterTerm, isMobile, filterVal
31
32
  return (react_1.default.createElement(FilterContentWrapper, { isMobile: isMobile },
32
33
  react_1.default.createElement(Catalog_1.FilterControls, null,
33
34
  react_1.default.createElement(FilterPopover_1.StyledInput, { placeholder: translate(translationKeys.placeholder, 'Type to filter...'), value: filterTerm, onChange: (e) => setFilterTerm(e.target.value) })),
34
- react_1.default.createElement(exports.FilterItems, null, filters.map((filter, idx) => (react_1.default.createElement(index_1.Filter, { filter: filter, key: filter.property + '-' + idx, filterValuesCasing: filterValuesCasing })))),
35
+ react_1.default.createElement(exports.FilterItems, null, filters.map((filter, idx) => (react_1.default.createElement(Filter_1.Filter, { filter: filter, key: filter.property + '-' + idx, filterValuesCasing: filterValuesCasing })))),
35
36
  hasActiveFilters && (react_1.default.createElement(_theme_1.Button, { size: "small", onClick: handleClearAll }, translate(translationKeys.placeholder, 'Clear all filters')))));
36
37
  }
37
38
  exports.FilterContent = FilterContent;
38
- const FilterContentWrapper = styled_components_1.default.div `
39
+ const FilterContentWrapper = (0, styled_components_1.default)(Sidebar_1.Sidebar) `
39
40
  width: var(--sidebar-width);
40
41
  display: none;
41
42
 
@@ -44,7 +45,7 @@ const FilterContentWrapper = styled_components_1.default.div `
44
45
  margin: var(--filter-content-clear-button-margin);
45
46
  }
46
47
 
47
- ${({ theme, isMobile }) => !isMobile && theme.mediaQueries.small} {
48
+ ${({ theme, isMobile }) => !isMobile && theme.mediaQueries.medium} {
48
49
  display: block;
49
50
  border-right: 1px solid var(--filter-content-border-color);
50
51
 
@@ -1,10 +1,12 @@
1
1
  /// <reference types="react" />
2
+ import type { ThemeConfig } from '../../index.js';
2
3
  import type { ResolvedFilter } from '../../types/portal/src/shared/types/catalog';
3
4
  interface FilterPopoverProps {
4
5
  setIsAddingFilter: (value: boolean) => void;
5
6
  filters: ResolvedFilter[];
7
+ filterValuesCasing?: NonNullable<ThemeConfig['catalog']>[string]['filterValuesCasing'];
6
8
  }
7
- export declare function FilterPopover({ setIsAddingFilter, filters }: FilterPopoverProps): JSX.Element;
9
+ export declare function FilterPopover({ setIsAddingFilter, filters, filterValuesCasing, }: FilterPopoverProps): JSX.Element;
8
10
  export declare const StyledInput: import("styled-components").StyledComponent<"input", any, {
9
11
  'data-cy': string;
10
12
  }, "data-cy">;
@@ -9,11 +9,11 @@ const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const _theme_1 = require("../../index.js");
10
10
  const FilterContent_1 = require("../../components/Filter/FilterContent");
11
11
  const hooks_1 = require("../../mocks/hooks");
12
- function FilterPopover({ setIsAddingFilter, filters }) {
12
+ function FilterPopover({ setIsAddingFilter, filters, filterValuesCasing, }) {
13
13
  const [filterTerm, setFilterTerm] = react_1.default.useState('');
14
14
  const filteredFilters = filters
15
15
  .map((filter) => {
16
- const options = filter.options.filter((option) => option.value.includes(filterTerm));
16
+ const options = filter.options.filter((option) => option.value.toLowerCase().includes(filterTerm.toLowerCase()));
17
17
  return options.length
18
18
  ? Object.assign(Object.assign({}, filter), { filteredOptions: options }) : null;
19
19
  })
@@ -27,7 +27,7 @@ function FilterPopover({ setIsAddingFilter, filters }) {
27
27
  react_1.default.createElement(FilterPopoverHeader, null,
28
28
  react_1.default.createElement(FilterPopoverHeaderLabel, null, "Add Filter"),
29
29
  react_1.default.createElement(FilterPopoverHeaderButton, { onClick: () => setIsAddingFilter(false) }, translate(translationKeys.placeholder, 'Done'))),
30
- react_1.default.createElement(FilterContent_1.FilterContent, { setFilterTerm: setFilterTerm, filters: filters, filterTerm: filterTerm, isMobile: true }),
30
+ react_1.default.createElement(FilterContent_1.FilterContent, { setFilterTerm: setFilterTerm, filters: filters, filterTerm: filterTerm, filterValuesCasing: filterValuesCasing, isMobile: true }),
31
31
  react_1.default.createElement(_theme_1.FilterControls, null,
32
32
  react_1.default.createElement(exports.StyledInput, { placeholder: translate(translationKeys.placeholder, 'Type to filter...'), value: filterTerm, onChange: (e) => setFilterTerm(e.target.value) })),
33
33
  react_1.default.createElement(FilterContent_1.FilterItems, null, filteredFilters.map((filter, idx) => (react_1.default.createElement(_theme_1.Filter, { filter: filter, key: filter.property + '-' + idx }))))));
@@ -44,7 +44,7 @@ const FilterPopoverWrapper = styled_components_1.default.aside `
44
44
  background-color: var(--filter-popover-background-color);
45
45
  display: block;
46
46
 
47
- ${({ theme }) => theme.mediaQueries.small} {
47
+ ${({ theme }) => theme.mediaQueries.medium} {
48
48
  display: none;
49
49
  }
50
50
  `;
@@ -32,7 +32,7 @@ exports.filter = (0, styled_components_1.css) `
32
32
  --filter-option-count-background-color: var(--bg-raised);
33
33
 
34
34
  --filter-content-border-color: var(--border-secondary);
35
- --filter-content-items-padding: 0 var(--mobile-catalog-filter-padding-horizontal);
35
+ --filter-content-items-padding: 0 var(--spacing-lg);
36
36
  --filter-content-clear-button-margin: var(--spacing-base) auto 0 auto;
37
37
  --filter-content-clear-button-width: calc(var(--spacing-unit) * 40);
38
38
  --filter-controls-background-color: var(--bg-base);
@@ -13,12 +13,13 @@ const hooks_1 = require("../../hooks");
13
13
  const ui_1 = require("../../ui");
14
14
  const NavbarLogo_1 = require("../../components/NavbarLogo");
15
15
  function Footer() {
16
+ var _a;
16
17
  const { footer, logo } = (0, hooks_1.useThemeConfig)() || {};
17
18
  const { items, copyrightText } = footer || {};
18
19
  if ((0, utils_1.isEmptyArray)(items) || (footer === null || footer === void 0 ? void 0 : footer.hide)) {
19
20
  return null;
20
21
  }
21
- return (react_1.default.createElement(FooterPresentationalComponent, { items: items, copyrightText: copyrightText, logo: logo }));
22
+ return (react_1.default.createElement(FooterPresentationalComponent, { items: items, copyrightText: copyrightText, logo: ((_a = footer === null || footer === void 0 ? void 0 : footer.logo) === null || _a === void 0 ? void 0 : _a.hide) ? undefined : logo }));
22
23
  }
23
24
  exports.Footer = Footer;
24
25
  function FooterPresentationalComponent({ items, copyrightText, logo, className, }) {
@@ -53,6 +53,8 @@ const FooterColumnContainer = styled_components_1.default.div `
53
53
  flex: 1;
54
54
  margin: 0 0 var(--mobile-footer-column-margin-bottom) 0;
55
55
  min-width: var(--footer-column-min-width);
56
+ align-content: center;
57
+ flex-wrap: wrap;
56
58
 
57
59
  ${({ theme }) => theme.mediaQueries.small} {
58
60
  text-align: left;
@@ -44,7 +44,7 @@ exports.footer = (0, styled_components_1.css) `
44
44
  --footer-copyright-text-align: start;
45
45
 
46
46
  --footer-logo-display: block;
47
- --footer-logo-margin-right: 86px; // @presenter Spacing
47
+ --footer-logo-margin-right: 0; // @presenter Spacing
48
48
  --footer-logo-margin-bottom: var(--spacing-xl); // @presenter Spacing
49
49
 
50
50
  --footer-language-picker-display: block;
@@ -55,6 +55,7 @@ function LastUpdated(props) {
55
55
  : translate(translationKey, 'Last updated on');
56
56
  return (React.createElement(Wrapper, { className: props.className, "data-component-name": "LastUpdated/LastUpdated", rawOnPrint: format === 'timeago', "data-print-datetime": isoDate, "data-translation-key": translationKey },
57
57
  text,
58
+ " ",
58
59
  React.createElement("time", { dateTime: isoDate }, lastUpdatedString)));
59
60
  }
60
61
  exports.LastUpdated = LastUpdated;
@@ -10,16 +10,17 @@ const AlertIcon_1 = require("../../icons/AlertIcon/AlertIcon");
10
10
  function Admonition({ type = 'info', name, children, className, 'data-source': dataSource, 'data-hash': dataHash, }) {
11
11
  return (react_1.default.createElement(Wrapper, { type: type, className: className, "data-component-name": "Markdown/Admonition", "data-source": dataSource, "data-hash": dataHash },
12
12
  react_1.default.createElement(AlertIcon_1.AlertIcon, { type: type }),
13
- name ? react_1.default.createElement(Heading, { type: type }, name) : null,
14
- react_1.default.createElement(Content, null, children)));
13
+ react_1.default.createElement(TextContainer, null,
14
+ name ? react_1.default.createElement(Heading, { type: type }, name) : null,
15
+ react_1.default.createElement(Content, null, children))));
15
16
  }
16
17
  exports.Admonition = Admonition;
17
18
  const Wrapper = styled_components_1.default.div `
18
- position: relative;
19
- align-items: center;
19
+ display: flex;
20
+ flex-direction: row;
21
+ gap: var(--spacing-base);
20
22
  margin: var(--admonition-margin-vertical) var(--admonition-margin-horizontal);
21
23
  padding: var(--admonition-padding-vertical) var(--admonition-padding-horizontal);
22
- padding-left: calc(var(--admonition-padding-horizontal) * 2 + var(--admonition-icon-size));
23
24
  border-radius: var(--admonition-border-radius);
24
25
  font-size: var(--admonition-font-size);
25
26
  font-weight: var(--admonition-font-weight);
@@ -34,10 +35,12 @@ const Wrapper = styled_components_1.default.div `
34
35
  border: var(--admonition-${type}-border);
35
36
  `}
36
37
  `;
37
- const Heading = styled_components_1.default.h5 `
38
- display: block;
39
- margin: 0 0 10px;
40
-
38
+ const TextContainer = styled_components_1.default.div `
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: var(--spacing-unit);
42
+ `;
43
+ const Heading = styled_components_1.default.div `
41
44
  letter-spacing: var(--admonition-heading-letter-spacing);
42
45
  color: ${({ type }) => `var(--admonition-${type}-heading-text-color)`};
43
46
 
@@ -12,6 +12,9 @@ function Mermaid({ diagramHtml, 'data-source': dataSource, 'data-hash': dataHash
12
12
  }
13
13
  exports.Mermaid = Mermaid;
14
14
  const Wrapper = styled_components_1.default.div `
15
+ background-color: var(--mermaid-background-color);
16
+ border-radius: var(--mermaid-border-radius);
17
+
15
18
  .mermaid > svg {
16
19
  font-size: var(--font-size-base) !important;
17
20
  max-width: 100%;
@@ -1,2 +1,3 @@
1
1
  export declare const admonition: import("styled-components").FlattenSimpleInterpolation;
2
2
  export declare const markdown: import("styled-components").FlattenSimpleInterpolation;
3
+ export declare const mermaid: import("styled-components").FlattenSimpleInterpolation;