@@ -206,52 +192,44 @@ const BrowserBreadcrumbs = ({
onClose={closeAddFolderModal}
/>
)}
-
+
+ }
+ >
+ {listBreadcrumbs}
+
{!hidePathButton && (
)}
diff --git a/portal-ui/src/screens/Console/ObjectBrowser/OBBucketList.tsx b/portal-ui/src/screens/Console/ObjectBrowser/OBBucketList.tsx
index b61871ebd3..6886087ee3 100644
--- a/portal-ui/src/screens/Console/ObjectBrowser/OBBucketList.tsx
+++ b/portal-ui/src/screens/Console/ObjectBrowser/OBBucketList.tsx
@@ -18,7 +18,14 @@ import React, { Fragment, useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { Theme } from "@mui/material/styles";
-import { BucketsIcon, Button, HelpBox, PageLayout, RefreshIcon } from "mds";
+import {
+ BucketsIcon,
+ Button,
+ DataTable,
+ HelpBox,
+ PageLayout,
+ RefreshIcon,
+} from "mds";
import createStyles from "@mui/styles/createStyles";
import { LinearProgress } from "@mui/material";
import Grid from "@mui/material/Grid";
@@ -45,14 +52,13 @@ import AutoColorIcon from "../Common/Components/AutoColorIcon";
import TooltipWrapper from "../Common/TooltipWrapper/TooltipWrapper";
import AButton from "../Common/AButton/AButton";
import makeStyles from "@mui/styles/makeStyles";
-import TableWrapper from "../Common/TableWrapper/TableWrapper";
import { niceBytesInt } from "../../../common/utils";
import PageHeaderWrapper from "../Common/PageHeaderWrapper/PageHeaderWrapper";
import {
Bucket,
+ Error,
HttpResponse,
ListBucketsResponse,
- Error,
} from "../../../api/consoleApi";
import { api } from "../../../api";
import { errorToHandler } from "../../../api/errors";
@@ -189,7 +195,7 @@ const OBListBuckets = () => {
className={`${classes.bucketList} ${obOnly ? "isEmbedded" : ""}`}
>
{filteredRecords.length !== 0 && (
-
.
import React, { Fragment } from "react";
-import { Box, Button } from "@mui/material";
import { useNavigate } from "react-router-dom";
-import { HelpBox, WarnIcon, Grid } from "mds";
+import { Box } from "@mui/material";
+import { Button, Grid, HelpBox, WarnIcon } from "mds";
interface IRegisterCluster {
compactMode?: boolean;
@@ -28,8 +28,9 @@ const RegisterCluster = ({ compactMode = false }: IRegisterCluster) => {
const redirectButton = (
navigate("/support/register")}
>
diff --git a/portal-ui/src/screens/Console/Users/GroupsSelectors.tsx b/portal-ui/src/screens/Console/Users/GroupsSelectors.tsx
index a143166ee4..d09555217f 100644
--- a/portal-ui/src/screens/Console/Users/GroupsSelectors.tsx
+++ b/portal-ui/src/screens/Console/Users/GroupsSelectors.tsx
@@ -146,7 +146,6 @@ const GroupsSelectors = ({
diff --git a/portal-ui/src/utils/stylesUtils.ts b/portal-ui/src/utils/stylesUtils.ts
index d923552a5d..d6f6c189da 100644
--- a/portal-ui/src/utils/stylesUtils.ts
+++ b/portal-ui/src/utils/stylesUtils.ts
@@ -15,7 +15,6 @@
// along with this program. If not, see .
import { IEmbeddedCustomStyles } from "../common/types";
-import { createTheme } from "@mui/material";
export const getOverrideColorVariants: (
customStyles: string
@@ -29,124 +28,250 @@ export const getOverrideColorVariants: (
};
export const generateOverrideTheme = (overrideVars: IEmbeddedCustomStyles) => {
- const theme = createTheme({
- palette: {
- primary: {
- light: overrideVars.buttonStyles.hoverColor || "#073052",
- main: overrideVars.buttonStyles.backgroundColor || "#081C42",
- dark: overrideVars.buttonStyles.activeColor || "#05122B",
- contrastText: overrideVars.buttonStyles.textColor || "#fff",
- },
- secondary: {
- light: "#ff7961",
- main: "#f44336",
- dark: "#ba000d",
- contrastText: "#000",
- },
- background: {
- default: overrideVars.backgroundColor,
- },
- success: {
- main: "#4ccb92",
- },
- warning: {
- main: "#FFBD62",
- },
- error: {
- light: "#e03a48",
- main: "#C83B51",
- contrastText: "#fff",
- },
- },
- typography: {
- fontFamily: ["Inter", "sans-serif"].join(","),
- h1: {
- fontWeight: "bold",
- color: overrideVars.fontColor,
+ let retVal = undefined;
+
+ try {
+ retVal = {
+ bgColor: overrideVars.backgroundColor,
+ fontColor: overrideVars.fontColor,
+ borderColor: overrideVars.borderColor,
+ bulletColor: overrideVars.fontColor,
+ logoColor: "#C51B3F",
+ logoLabelColor: overrideVars.fontColor,
+ logoLabelInverse: "#FFF",
+ loaderColor: overrideVars.loaderColor,
+ boxBackground: overrideVars.boxBackground,
+ buttons: {
+ regular: {
+ enabled: {
+ border: overrideVars.regularButtonStyles.textColor,
+ text: overrideVars.regularButtonStyles.textColor,
+ background: "transparent",
+ iconColor: overrideVars.regularButtonStyles.textColor,
+ },
+ disabled: {
+ border: overrideVars.regularButtonStyles.disabledText,
+ text: overrideVars.regularButtonStyles.disabledText,
+ background: "transparent",
+ iconColor: overrideVars.regularButtonStyles.disabledText,
+ },
+ hover: {
+ border: overrideVars.regularButtonStyles.hoverText,
+ text: overrideVars.regularButtonStyles.hoverText,
+ background: "transparent",
+ iconColor: overrideVars.regularButtonStyles.hoverText,
+ },
+ pressed: {
+ border: overrideVars.regularButtonStyles.activeText,
+ text: overrideVars.regularButtonStyles.activeText,
+ background: "transparent",
+ iconColor: overrideVars.regularButtonStyles.activeText,
+ },
+ },
+ callAction: {
+ enabled: {
+ border: overrideVars.buttonStyles.backgroundColor,
+ text: overrideVars.buttonStyles.textColor,
+ background: overrideVars.buttonStyles.backgroundColor,
+ iconColor: overrideVars.buttonStyles.textColor,
+ },
+ disabled: {
+ border: overrideVars.buttonStyles.disabledColor,
+ text: overrideVars.buttonStyles.disabledText,
+ background: overrideVars.buttonStyles.disabledColor,
+ iconColor: overrideVars.buttonStyles.disabledText,
+ },
+ hover: {
+ border: overrideVars.buttonStyles.hoverColor,
+ text: overrideVars.buttonStyles.hoverText,
+ background: overrideVars.buttonStyles.hoverColor,
+ iconColor: overrideVars.buttonStyles.hoverText,
+ },
+ pressed: {
+ border: overrideVars.buttonStyles.activeColor,
+ text: overrideVars.buttonStyles.activeText,
+ background: overrideVars.buttonStyles.activeColor,
+ iconColor: overrideVars.buttonStyles.activeText,
+ },
+ },
+ secondary: {
+ enabled: {
+ border: overrideVars.secondaryButtonStyles.textColor,
+ text: overrideVars.secondaryButtonStyles.textColor,
+ background: "transparent",
+ iconColor: overrideVars.secondaryButtonStyles.textColor,
+ },
+ disabled: {
+ border: overrideVars.secondaryButtonStyles.disabledText,
+ text: overrideVars.secondaryButtonStyles.disabledText,
+ background: "transparent",
+ iconColor: overrideVars.secondaryButtonStyles.disabledText,
+ },
+ hover: {
+ border: overrideVars.secondaryButtonStyles.hoverText,
+ text: overrideVars.secondaryButtonStyles.hoverText,
+ background: "transparent",
+ iconColor: overrideVars.secondaryButtonStyles.hoverText,
+ },
+ pressed: {
+ border: overrideVars.secondaryButtonStyles.activeText,
+ text: overrideVars.secondaryButtonStyles.activeText,
+ background: "transparent",
+ iconColor: overrideVars.secondaryButtonStyles.activeText,
+ },
+ },
+ text: {
+ enabled: {
+ border: "transparent",
+ text: overrideVars.fontColor,
+ background: "transparent",
+ iconColor: overrideVars.fontColor,
+ },
+ disabled: {
+ border: "transparent",
+ text: overrideVars.fontColor,
+ background: "transparent",
+ iconColor: overrideVars.fontColor,
+ },
+ hover: {
+ border: "transparent",
+ text: overrideVars.fontColor,
+ background: "transparent",
+ iconColor: overrideVars.fontColor,
+ },
+ pressed: {
+ border: "transparent",
+ text: overrideVars.fontColor,
+ background: "transparent",
+ iconColor: overrideVars.fontColor,
+ },
+ },
},
- h2: {
- fontWeight: "bold",
- color: overrideVars.fontColor,
+ login: {
+ formBG: "#fff",
+ bgFilter: "none",
+ promoBG: "#000110",
+ promoHeader: "#fff",
+ promoText: "#A6DFEF",
+ footerElements: "#2781B0",
+ footerDivider: "#F2F2F2",
},
- h3: {
- fontWeight: "bold",
+ pageHeader: {
+ background: overrideVars.boxBackground,
+ border: overrideVars.borderColor,
color: overrideVars.fontColor,
},
- h4: {
- fontWeight: "bold",
+ tooltip: {
+ background: overrideVars.boxBackground,
color: overrideVars.fontColor,
},
- h5: {
- fontWeight: "bold",
- color: overrideVars.fontColor,
+ commonInput: {
+ labelColor: overrideVars.fontColor,
},
- h6: {
- fontWeight: "bold",
- color: overrideVars.fontColor,
+ checkbox: {
+ checkBoxBorder: overrideVars.borderColor,
+ checkBoxColor: overrideVars.okColor,
+ disabledBorder: overrideVars.buttonStyles.disabledColor,
+ disabledColor: overrideVars.buttonStyles.disabledColor,
},
- },
- components: {
- MuiButton: {
- styleOverrides: {
- root: {
- textTransform: "none",
- borderRadius: 3,
- height: 40,
- padding: "0 20px",
- fontSize: 14,
- fontWeight: 600,
- boxShadow: "none",
- "& .min-icon": {
- maxHeight: 18,
- },
- "&.MuiButton-contained.Mui-disabled": {
- backgroundColor: "#EAEDEE",
- fontWeight: 600,
- color: "#767676",
- },
- "& .MuiButton-iconSizeMedium > *:first-of-type": {
- fontSize: 12,
- },
- },
- },
+ iconButton: {
+ buttonBG: overrideVars.buttonStyles.backgroundColor,
+ activeBG: overrideVars.buttonStyles.activeColor,
+ hoverBG: overrideVars.buttonStyles.hoverColor,
+ disabledBG: overrideVars.buttonStyles.disabledColor,
+ color: overrideVars.buttonStyles.textColor,
},
- MuiPaper: {
- styleOverrides: {
- root: {
- backgroundColor: overrideVars.backgroundColor,
- color: overrideVars.fontColor,
- },
- elevation1: {
- boxShadow: "none",
- border: "#EAEDEE 1px solid",
- borderRadius: 3,
- },
- },
+ dataTable: {
+ border: overrideVars.tableColors.border,
+ disabledBorder: overrideVars.tableColors.disabledBorder,
+ disabledBG: overrideVars.tableColors.disabledBG,
+ selected: overrideVars.tableColors.selected,
+ deletedDisabled: overrideVars.tableColors.deletedDisabled,
+ hoverColor: overrideVars.tableColors.hoverColor,
},
- MuiListItem: {
- styleOverrides: {
- root: {
- "&.MuiListItem-root.Mui-selected": {
- background: "inherit",
- "& .MuiTypography-root": {
- fontWeight: "bold",
- },
- },
- },
+ backLink: {
+ color: overrideVars.linkColor,
+ arrow: overrideVars.linkColor,
+ hover: overrideVars.hoverLinkColor,
+ },
+ inputBox: {
+ border: overrideVars.inputBox.border,
+ hoverBorder: overrideVars.inputBox.hoverBorder,
+ color: overrideVars.inputBox.textColor,
+ backgroundColor: overrideVars.inputBox.backgroundColor,
+ error: overrideVars.errorColor,
+ placeholderColor: overrideVars.inputBox.textColor,
+ disabledBorder: overrideVars.buttonStyles.disabledColor,
+ disabledBackground: overrideVars.inputBox.backgroundColor,
+ disabledPlaceholder: overrideVars.buttonStyles.disabledColor,
+ disabledText: overrideVars.buttonStyles.disabledColor,
+ },
+ breadcrumbs: {
+ border: overrideVars.borderColor,
+ linksColor: overrideVars.linkColor,
+ textColor: overrideVars.fontColor,
+ backgroundColor: overrideVars.boxBackground,
+ backButton: {
+ border: overrideVars.borderColor,
+ backgroundColor: overrideVars.boxBackground,
},
},
- MuiTab: {
- styleOverrides: {
- root: {
- textTransform: "none",
- },
+ actionsList: {
+ containerBorderColor: overrideVars.boxBackground,
+ backgroundColor: overrideVars.boxBackground,
+ disabledOptionsTextColor: overrideVars.disabledLinkColor,
+ optionsBorder: overrideVars.borderColor,
+ optionsHoverTextColor: overrideVars.hoverLinkColor,
+ optionsTextColor: overrideVars.linkColor,
+ titleColor: overrideVars.fontColor,
+ },
+ screenTitle: {
+ border: overrideVars.borderColor,
+ subtitleColor: overrideVars.secondaryFontColor,
+ iconColor: overrideVars.fontColor,
+ },
+ modalBox: {
+ closeColor: overrideVars.regularButtonStyles.textColor,
+ closeHoverBG: overrideVars.regularButtonStyles.hoverColor,
+ closeHoverColor: overrideVars.regularButtonStyles.hoverText,
+ containerColor: overrideVars.backgroundColor,
+ overlayColor: "#00000050",
+ titleColor: overrideVars.fontColor,
+ iconColor: {
+ default: overrideVars.fontColor,
+ accept: overrideVars.okColor,
+ delete: overrideVars.errorColor,
},
},
- },
- colors: {
- link: "#2781B0",
- },
- });
+ switchButton: {
+ bulletBGColor: overrideVars.switch.bulletBGColor,
+ bulletBorderColor: overrideVars.switch.bulletBorderColor,
+ disabledBulletBGColor: overrideVars.switch.disabledBulletBGColor,
+ disabledBulletBorderColor:
+ overrideVars.switch.disabledBulletBorderColor,
+ offLabelColor: overrideVars.secondaryFontColor,
+ onLabelColor: overrideVars.fontColor,
+ onBackgroundColor: overrideVars.okColor,
+ switchBackground: overrideVars.switch.switchBackground,
+ disabledBackground: overrideVars.switch.disabledBackground,
+ },
+ dropdownSelector: {
+ hoverText: overrideVars.buttonStyles.hoverText,
+ backgroundColor: overrideVars.boxBackground,
+ hoverBG: overrideVars.buttonStyles.hoverColor,
+ selectedBGColor: overrideVars.buttonStyles.hoverColor,
+ selectedTextColor: overrideVars.buttonStyles.hoverText,
+ optionTextColor: overrideVars.fontColor,
+ },
+ readBox: {
+ borderColor: overrideVars.borderColor,
+ backgroundColor: overrideVars.boxBackground,
+ textColor: overrideVars.fontColor,
+ },
+ };
+ } catch (e) {
+ console.warn("Invalid theme provided. Fallback to original theme.");
+ }
- return theme;
+ return retVal;
};
diff --git a/portal-ui/tests/permissions-3/bucketDeleteAllVersions.ts b/portal-ui/tests/permissions-3/bucketDeleteAllVersions.ts
index aae1b7abd5..c709f31621 100644
--- a/portal-ui/tests/permissions-3/bucketDeleteAllVersions.ts
+++ b/portal-ui/tests/permissions-3/bucketDeleteAllVersions.ts
@@ -21,6 +21,7 @@ import { bucketsElement } from "../utils/elements-menu";
import { testBucketBrowseButtonFor } from "../utils/functions";
import { Selector } from "testcafe";
import * as constants from "../utils/constants";
+import { deleteAllVersions } from "../utils/elements";
fixture("For user with Bucket Read & Write permissions").page(
"http://localhost:9090"
@@ -52,7 +53,7 @@ test
"div.ReactVirtualized__Grid.ReactVirtualized__Table__Grid > div > div:nth-child(1)"
)
.click(elements.deleteButton)
- .click(elements.switchInput)
+ .click(elements.deleteAllVersions)
.click(Selector("button:enabled").withExactText("Delete").nth(1))
.expect(
Selector(
diff --git a/portal-ui/tests/utils/elements.ts b/portal-ui/tests/utils/elements.ts
index a04455d897..958c74a460 100644
--- a/portal-ui/tests/utils/elements.ts
+++ b/portal-ui/tests/utils/elements.ts
@@ -19,14 +19,10 @@ import { Selector } from "testcafe";
//----------------------------------------------------
// Buttons
//----------------------------------------------------
-export const loginSubmitButton = Selector("form button");
-export const closeAlertButton = Selector(
- 'button[class*="ModalError-closeButton"]'
+export const uploadButton = Selector("button:enabled").withAttribute(
+ "id",
+ "upload-main"
);
-
-export const uploadButton = Selector("span")
- .withAttribute("aria-label", "Upload Files")
- .child("button:enabled");
export const createPolicyButton =
Selector("button:enabled").withText("Create Policy");
export const saveButton = Selector("button:enabled").withText("Save");
@@ -55,6 +51,8 @@ export const assignPoliciesButton =
// Switches
//----------------------------------------------------
export const switchInput = Selector(".MuiSwitch-input");
+export const deleteAllVersions =
+ Selector("#delete-versions").sibling("span.switchRail");
//----------------------------------------------------
// Inputs
@@ -109,11 +107,9 @@ export const groupStatusText = Selector("#group-status");
// Tables, table headers and content
//----------------------------------------------------
export const table = Selector(".ReactVirtualized__Table");
-export const bucketsTableDisabled = Selector("#object-list-wrapper")
- .find(".MuiPaper-root")
- .withText(
- "You require additional permissions in order to view Objects in this bucket. Please ask your MinIO administrator to grant you"
- );
+export const bucketsTableDisabled = Selector("#empty-results").withText(
+ "You require additional permissions in order to view Objects in this bucket. Please ask your MinIO administrator to grant you"
+);
export const createGroupUserTable = Selector(
".MuiDialog-container .ReactVirtualized__Table"
);
diff --git a/portal-ui/tests/utils/functions.ts b/portal-ui/tests/utils/functions.ts
index 797b56351c..c75a42afa6 100644
--- a/portal-ui/tests/utils/functions.ts
+++ b/portal-ui/tests/utils/functions.ts
@@ -127,10 +127,6 @@ export const testBucketBrowseButtonFor = (modifier) => {
);
};
-export const uploadFilesButton = () => {
- return Selector("button").withText("Upload Files");
-};
-
export const cleanUpNamedBucketAndUploads = (t, bucket) => {
return new Promise((resolve, reject) => {
const minioClient = new Minio.Client({
diff --git a/restapi/utils.go b/restapi/utils.go
index 8818ca1181..89f7c8610e 100644
--- a/restapi/utils.go
+++ b/restapi/utils.go
@@ -50,12 +50,54 @@ type CustomButtonStyle struct {
HoverText *string `json:"hoverText"`
ActiveColor *string `json:"activeColor"`
ActiveText *string `json:"activeText"`
+ DisabledColor *string `json:"disabledColor"`
+ DisabledText *string `json:"disdabledText"`
+}
+
+type CustomTableStyle struct {
+ Border *string `json:"border"`
+ DisabledBorder *string `json:"disabledBorder"`
+ DisabledBG *string `json:"disabledBG"`
+ Selected *string `json:"selected"`
+ DeletedDisabled *string `json:"deletedDisabled"`
+ HoverColor *string `json:"hoverColor"`
+}
+
+type CustomInputStyle struct {
+ Border *string `json:"border"`
+ HoverBorder *string `json:"hoverBorder"`
+ TextColor *string `json:"textColor"`
+ BackgroundColor *string `json:"backgroundColor"`
+}
+
+type CustomSwitchStyle struct {
+ SwitchBackground *string `json:"switchBackground"`
+ BulletBorderColor *string `json:"bulletBorderColor"`
+ BulletBGColor *string `json:"bulletBGColor"`
+ DisabledBackground *string `json:"disabledBackground"`
+ DisabledBulletBorderColor *string `json:"disabledBulletBorderColor"`
+ DisabledBulletBGColor *string `json:"disabledBulletBGColor"`
}
type CustomStyles struct {
- BackgroundColor *string `json:"backgroundColor"`
- FontColor *string `json:"fontColor"`
- ButtonStyles *CustomButtonStyle `json:"buttonStyles"`
+ BackgroundColor *string `json:"backgroundColor"`
+ FontColor *string `json:"fontColor"`
+ SecondaryFontColor *string `json:"secondaryFontColor"`
+ BorderColor *string `json:"borderColor"`
+ LoaderColor *string `json:"loaderColor"`
+ BoxBackground *string `json:"boxBackground"`
+ OkColor *string `json:"okColor"`
+ ErrorColor *string `json:"errorColor"`
+ WarnColor *string `json:"warnColor"`
+ LinkColor *string `json:"linkColor"`
+ DisabledLinkColor *string `json:"disabledLinkColor"`
+ HoverLinkColor *string `json:"hoverLinkColor"`
+ ButtonStyles *CustomButtonStyle `json:"buttonStyles"`
+ SecondaryButtonStyles *CustomButtonStyle `json:"secondaryButtonStyles"`
+ RegularButtonStyles *CustomButtonStyle `json:"regularButtonStyles"`
+ TableColors *CustomTableStyle `json:"tableColors"`
+ InputBox *CustomInputStyle `json:"inputBox"`
+ Switch *CustomSwitchStyle `json:"switch"`
}
func RandomCharStringWithAlphabet(n int, alphabet string) string {
@@ -163,7 +205,7 @@ func ValidateEncodedStyles(encodedStyles string) error {
return err
}
- if styleElements.BackgroundColor == nil || styleElements.FontColor == nil || styleElements.ButtonStyles == nil {
+ if styleElements.BackgroundColor == nil || styleElements.FontColor == nil || styleElements.ButtonStyles == nil || styleElements.BorderColor == nil || styleElements.OkColor == nil {
return errors.New("specified style is not in the correct format")
}
diff --git a/restapi/utils_test.go b/restapi/utils_test.go
index 9c6a9e7904..4bcdc68fb8 100644
--- a/restapi/utils_test.go
+++ b/restapi/utils_test.go
@@ -257,7 +257,7 @@ func TestValidateEncodedStyles(t *testing.T) {
{
name: "valid",
args: args{
- encodedStyles: "ewogICJiYWNrZ3JvdW5kQ29sb3IiOiAiIzI3ODdjNiIsCiAgImZvbnRDb2xvciI6ICIjZmYwIiwKICAiYnV0dG9uU3R5bGVzIjogewogICAgImJhY2tncm91bmRDb2xvciI6ICIjZWRlYWE4IiwKICAgICJ0ZXh0Q29sb3IiOiAiIzJiMmEyYSIsCiAgICAiaG92ZXJDb2xvciI6ICIjZWRlYWE4IiwKICAgICJob3ZlclRleHQiOiAiIzJiMmEyYSIsCiAgICAiYWN0aXZlQ29sb3IiOiAiI2VkZWFhOCIsCiAgICAiYWN0aXZlVGV4dCI6ICIjMmIyYTJhIgogIH0KfQ==",
+ encodedStyles: "ewogICJiYWNrZ3JvdW5kQ29sb3IiOiAiIzFjMWMxYyIsCiAgImZvbnRDb2xvciI6ICJ3aGl0ZSIsCiAgInNlY29uZGFyeUZvbnRDb2xvciI6ICJncmV5IiwKICAiYm9yZGVyQ29sb3IiOiAieWVsbG93IiwKICAibG9hZGVyQ29sb3IiOiAicmVkIiwKICAiYm94QmFja2dyb3VuZCI6ICIjMDU3OWFmIiwKICAib2tDb2xvciI6ICIjMDhhZjA1IiwKICAiZXJyb3JDb2xvciI6ICIjYmYxZTQ2IiwKICAid2FybkNvbG9yIjogIiNiZmFjMWUiLAogICJsaW5rQ29sb3IiOiAiIzFlYmZiZiIsCiAgImRpc2FibGVkTGlua0NvbG9yIjogIiM5ZGEwYTAiLAogICJob3ZlckxpbmtDb2xvciI6ICIjMGY0ZWJjIiwKICAidGFibGVDb2xvcnMiOiB7CiAgICAiYm9yZGVyIjogIiM0YmJjMGYiLAogICAgImRpc2FibGVkQm9yZGVyIjogIiM3MjhlNjMiLAogICAgImRpc2FibGVkQkciOiAiIzcyOGU2MyIsCiAgICAic2VsZWN0ZWQiOiAiIzU1ZGIwZCIsCiAgICAiZGVsZXRlZERpc2FibGVkIjogIiNlYWI2ZDAiLAogICAgImhvdmVyQ29sb3IiOiAiIzAwZmZmNiIKICB9LAogICJidXR0b25TdHlsZXMiOiB7CiAgICAiYmFja2dyb3VuZENvbG9yIjogIiMwMDczZmYiLAogICAgInRleHRDb2xvciI6ICIjZmZmZmZmIiwKICAgICJob3ZlckNvbG9yIjogIiMyYjhlZmYiLAogICAgImhvdmVyVGV4dCI6ICIjZmZmIiwKICAgICJhY3RpdmVDb2xvciI6ICIjMzg4M2Q4IiwKICAgICJhY3RpdmVUZXh0IjogIiNmZmYiLAogICAgImRpc2FibGVkQ29sb3IiOiAiIzc1OGU4ZCIsCiAgICAiZGlzYWJsZWRUZXh0IjogIiNkOWRkZGQiCiAgfSwKICAic2Vjb25kYXJ5QnV0dG9uU3R5bGVzIjogewogICAgImJhY2tncm91bmRDb2xvciI6ICIjZWEzMzc5IiwKICAgICJ0ZXh0Q29sb3IiOiAiI2VhMzM3OSIsCiAgICAiaG92ZXJDb2xvciI6ICIjZWEzMzAwIiwKICAgICJob3ZlclRleHQiOiAiI2VhMzMwMCIsCiAgICAiYWN0aXZlQ29sb3IiOiAiI2VhMzM3OSIsCiAgICAiYWN0aXZlVGV4dCI6ICIjM2NlYTMzIiwKICAgICJkaXNhYmxlZENvbG9yIjogIiM3ODdjNzciLAogICAgImRpc2FibGVkVGV4dCI6ICIjNzg3Yzc3IgogIH0sCiAgInJlZ3VsYXJCdXR0b25TdHlsZXMiOiB7CiAgICAiYmFja2dyb3VuZENvbG9yIjogIiMwMDczZmYiLAogICAgInRleHRDb2xvciI6ICIjMDA3M2ZmIiwKICAgICJob3ZlckNvbG9yIjogIiMyYjhlZmYiLAogICAgImhvdmVyVGV4dCI6ICIjMDA3M2ZmIiwKICAgICJhY3RpdmVDb2xvciI6ICIjMzg4M2Q4IiwKICAgICJhY3RpdmVUZXh0IjogIiMwMDczZmYiLAogICAgImRpc2FibGVkQ29sb3IiOiAiIzc1OGU4ZCIsCiAgICAiZGlzYWJsZWRUZXh0IjogIiNkOWRkZGQiCiAgfSwKICAiaW5wdXRCb3giOiB7CiAgICAiYm9yZGVyIjogImdyZWVuIiwKICAgICJob3ZlckJvcmRlciI6ICJibHVlIiwKICAgICJ0ZXh0Q29sb3IiOiAid2hpdGUiLAogICAgImJhY2tncm91bmRDb2xvciI6ICIjMjhkNGZmIgogIH0sCiAgInN3aXRjaCI6IHsKICAgICJzd2l0Y2hCYWNrZ3JvdW5kIjogIiMyOGQ0ZmYiLAogICAgImJ1bGxldEJvcmRlckNvbG9yIjogIiNhNmFjYWQiLAogICAgImJ1bGxldEJHQ29sb3IiOiAiI2RjZTFlMiIsCiAgICAiZGlzYWJsZWRCYWNrZ3JvdW5kIjogIiM0NzQ5NDkiLAogICAgImRpc2FibGVkQnVsbGV0Qm9yZGVyQ29sb3IiOiAiIzQ3NDk0OSIsCiAgICAiZGlzYWJsZWRCdWxsZXRCR0NvbG9yIjogIiM3Mzk3YTAiCiAgfQp9",
},
wantErr: false,
},