@docsvision/management-console 6.2.0-beta.12 → 6.2.0-beta.14

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
@@ -1471,6 +1471,10 @@ declare interface IHelpIconButtonProps {
1471
1471
  transformOrigin?: PopoverOrigin;
1472
1472
  }
1473
1473
 
1474
+ declare interface IInfoBanner {
1475
+ text: string;
1476
+ }
1477
+
1474
1478
  export declare interface IInformationIconProps {
1475
1479
  className?: string;
1476
1480
  color?: string;
@@ -1700,6 +1704,8 @@ declare enum IncomingMessageState {
1700
1704
  Paused = 4
1701
1705
  }
1702
1706
 
1707
+ export declare function InfoBanner({ text }: IInfoBanner): JSX.Element;
1708
+
1703
1709
  export declare function InformationIcon(props: IInformationIconProps): JSX.Element;
1704
1710
 
1705
1711
  declare interface INumberComponentProps extends Omit<OutlinedTextFieldProps, "variant" | "value" | "onChange" | "type" | "defaultValue"> {
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import React__default, { useState, useEffect, createElement, useRef, useMemo, useContext, memo, isValidElement, cloneElement, Children, createContext, useCallback, useDebugValue, useLayoutEffect, forwardRef as forwardRef$1, Fragment as Fragment$1, Component, useReducer } from "react";
3
3
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
4
- import { Accordion as Accordion$1, AccordionSummary, AccordionDetails, Typography as Typography$3, Button as Button$3, Box, CircularProgress as CircularProgress$3, Tooltip as Tooltip$2, Breadcrumbs, IconButton as IconButton$3, Popover as Popover$4, SvgIcon as SvgIcon$3, TableCell as TableCell$2, Grid as Grid$1, Paper as Paper$3, Chip as Chip$1, MenuItem as MenuItem$2, List as List$4, ListItemButton, ListItemIcon as ListItemIcon$1, ListItemText as ListItemText$1, ListItem as ListItem$1, Input as Input$3, TextField as TextField$3, InputAdornment as InputAdornment$3, Stack, FormControlLabel as FormControlLabel$1, Checkbox as Checkbox$1, RadioGroup, Radio, createTheme as createTheme$3, TableContainer, Table as Table$1, TableHead, TableRow as TableRow$1, TableBody as TableBody$1, capitalize as capitalize$2, ThemeProvider as ThemeProvider$1, Dialog as Dialog$2, DialogTitle, DialogContent as DialogContent$2, DialogActions as DialogActions$2 } from "@mui/material";
4
+ import { Accordion as Accordion$1, AccordionSummary, AccordionDetails, Typography as Typography$3, Button as Button$3, Box, CircularProgress as CircularProgress$3, Tooltip as Tooltip$2, Breadcrumbs, IconButton as IconButton$3, Popover as Popover$4, SvgIcon as SvgIcon$3, TableCell as TableCell$2, Grid as Grid$1, Paper as Paper$3, Chip as Chip$1, MenuItem as MenuItem$2, List as List$4, ListItemButton, ListItemIcon as ListItemIcon$1, ListItemText as ListItemText$1, ListItem as ListItem$1, Input as Input$3, TextField as TextField$3, InputAdornment as InputAdornment$3, Stack, FormControlLabel as FormControlLabel$1, Checkbox as Checkbox$1, RadioGroup, Radio, createTheme as createTheme$3, TableContainer, Table as Table$1, TableHead, TableRow as TableRow$1, TableBody as TableBody$1, FormControl as FormControl$3, capitalize as capitalize$2, ThemeProvider as ThemeProvider$1, Dialog as Dialog$2, DialogTitle, DialogContent as DialogContent$2, DialogActions as DialogActions$2 } from "@mui/material";
5
5
  import * as ReactDOM from "react-dom";
6
6
  import ReactDOM__default, { flushSync } from "react-dom";
7
7
  import { unstable_createGetCssVar, createSpacing as createSpacing$2, useTheme as useTheme$4, GlobalStyles as GlobalStyles$1, unstable_memoTheme, keyframes, css as css$2, styled as styled$1, alpha as alpha$2, lighten as lighten$2, darken as darken$2, decomposeColor as decomposeColor$2, recomposeColor as recomposeColor$2, getThemeProps as getThemeProps$2 } from "@mui/system";
@@ -66,7 +66,7 @@ function Accordion(props) {
66
66
  }
67
67
  function AlertBanner({ text }) {
68
68
  if (text) {
69
- return /* @__PURE__ */ jsx("div", { className: "alert-banner", children: /* @__PURE__ */ jsx(Typography$3, { variant: "subtitle2", color: "inherit", children: text }) });
69
+ return /* @__PURE__ */ jsx("div", { className: "alert-banner", children: /* @__PURE__ */ jsx(Typography$3, { color: "inherit", children: text }) });
70
70
  }
71
71
  }
72
72
  function ButtonWithLoading(props) {
@@ -52799,7 +52799,7 @@ function ErrorBlock({ text, close }) {
52799
52799
  ] });
52800
52800
  }
52801
52801
  function ErrorMessage(props) {
52802
- return /* @__PURE__ */ jsx("p", { className: classNames("error-message", props.className), children: props.message });
52802
+ return /* @__PURE__ */ jsx(Typography$3, { component: "p", variant: "caption", className: classNames("error-message", props.className), children: props.message });
52803
52803
  }
52804
52804
  function ExpandButton$1(props) {
52805
52805
  const { expanded, dataTestId, className, ...buttonProps } = props;
@@ -58959,17 +58959,22 @@ function TextMessage(props) {
58959
58959
  const { content, wrapperClassName, footer, footerClassName, header, headerClassName, contentClassName } = props;
58960
58960
  const textContent = getTextContent$1(content, contentClassName);
58961
58961
  return /* @__PURE__ */ jsxs("div", { className: classNames("text-message__wrapper", wrapperClassName), children: [
58962
- header && /* @__PURE__ */ jsx("p", { className: headerClassName, children: header }),
58962
+ header && /* @__PURE__ */ jsx(Typography$3, { component: "p", className: headerClassName, children: header }),
58963
58963
  textContent,
58964
- footer && /* @__PURE__ */ jsx("p", { className: footerClassName, children: footer })
58964
+ footer && /* @__PURE__ */ jsx(Typography$3, { component: "p", className: footerClassName, children: footer })
58965
58965
  ] });
58966
58966
  }
58967
58967
  function getTextContent$1(content, className) {
58968
58968
  if (typeof content === "string") {
58969
- return /* @__PURE__ */ jsx("p", { className, children: content });
58969
+ return /* @__PURE__ */ jsx(Typography$3, { component: "p", className, children: content });
58970
58970
  }
58971
58971
  return /* @__PURE__ */ jsx("ul", { className: classNames("text-message__list", className), children: content.map((m2) => /* @__PURE__ */ jsx("li", { children: m2 }, m2)) });
58972
58972
  }
58973
+ function InfoBanner({ text }) {
58974
+ if (text) {
58975
+ return /* @__PURE__ */ jsx("div", { className: "info-banner", "data-testid": "info-banner", children: /* @__PURE__ */ jsx(Typography$3, { variant: "subtitle2", color: "inherit", children: text }) });
58976
+ }
58977
+ }
58973
58978
  const KeyboardArrowRightIcon = createSvgIcon(/* @__PURE__ */ jsx("path", {
58974
58979
  d: "M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6z"
58975
58980
  }));
@@ -59004,7 +59009,7 @@ function CellTextContent({ content, multiline = false }) {
59004
59009
  const shouldShowTooltip = isWidthOverflowing || isHeightOverflowing;
59005
59010
  setShowTooltip(shouldShowTooltip);
59006
59011
  }, [contentRef, content]);
59007
- return /* @__PURE__ */ jsx(LightTooltip, { title: content, placement: "top-start", disableHoverListener: !showTooltip, children: /* @__PURE__ */ jsx("div", { ref: contentRef, className: multiline ? "cell-text-content-multiline" : "cell-text-content", children: /* @__PURE__ */ jsx("span", { children: content }) }) });
59012
+ return /* @__PURE__ */ jsx(LightTooltip, { title: content, placement: "top-start", disableHoverListener: !showTooltip, children: /* @__PURE__ */ jsx("div", { ref: contentRef, className: multiline ? "cell-text-content-multiline" : "cell-text-content", children: /* @__PURE__ */ jsx(Typography$3, { variant: "body2", children: content }) }) });
59008
59013
  }
59009
59014
  function CellWithFixedWidth(props) {
59010
59015
  const { content, maxWidth: maxWidth2 } = props;
@@ -59066,7 +59071,7 @@ function DatabaseSettingsCard(props) {
59066
59071
  /* @__PURE__ */ jsxs(Grid$1, { container: true, alignItems: "center", justifyContent: "space-between", wrap: "nowrap", className: "database-settings-card__head", children: [
59067
59072
  /* @__PURE__ */ jsxs(Grid$1, { container: true, alignItems: "center", children: [
59068
59073
  /* @__PURE__ */ jsx(StorageRounded, { color: "secondary", fontSize: "large" }),
59069
- /* @__PURE__ */ jsx("p", { className: "database-settings-card__title", children: title })
59074
+ /* @__PURE__ */ jsx(Typography$3, { variant: "h5", className: "database-settings-card__title", children: title })
59070
59075
  ] }),
59071
59076
  /* @__PURE__ */ jsx(Grid$1, { children: isDefault && /* @__PURE__ */ jsx(Chip$1, { className: "database-settings-card__chip", size: "small", label }) })
59072
59077
  ] }),
@@ -59082,7 +59087,7 @@ function DropdownBody(props) {
59082
59087
  const shouldShowTooltip = contentRef.current?.scrollWidth > contentRef.current?.offsetWidth;
59083
59088
  setShowTooltip(shouldShowTooltip);
59084
59089
  }, [displayName]);
59085
- return /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: showTooltip ? displayName : "", disableFocusListener: true, disableTouchListener: true, children: /* @__PURE__ */ jsx("span", { ref: contentRef, className: "dropdown-body", children: displayName }) });
59090
+ return /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: showTooltip ? displayName : "", disableFocusListener: true, disableTouchListener: true, children: /* @__PURE__ */ jsx(Typography$3, { component: "span", ref: contentRef, className: "dropdown-body", children: displayName }) });
59086
59091
  }
59087
59092
  function getDisplayName(label, options, value) {
59088
59093
  if (typeof value === "undefined" || value === null) return label;
@@ -59092,7 +59097,7 @@ function getDisplayName(label, options, value) {
59092
59097
  const DropdownOption2 = React__default.forwardRef(function DropdownOption22({ displayName, ...menuItemProps }, ref2) {
59093
59098
  const contentRef = React__default.useRef(null);
59094
59099
  const showTooltip = contentRef.current?.scrollWidth > contentRef.current?.offsetWidth;
59095
- return /* @__PURE__ */ jsx(MenuItem$2, { ref: ref2, ...menuItemProps, children: /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: showTooltip ? displayName : "", disableFocusListener: true, disableTouchListener: true, children: /* @__PURE__ */ jsx("span", { ref: contentRef, className: "dropdown-option__content", children: displayName }) }) });
59100
+ return /* @__PURE__ */ jsx(MenuItem$2, { ref: ref2, ...menuItemProps, children: /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: showTooltip ? displayName : "", disableFocusListener: true, disableTouchListener: true, children: /* @__PURE__ */ jsx(Typography$3, { component: "span", ref: contentRef, className: "dropdown-option__content", children: displayName }) }) });
59096
59101
  });
59097
59102
  function EditorWrapper({ children, isChanged, isEditable }) {
59098
59103
  return /* @__PURE__ */ jsx("div", { className: classNames(classIf(isChanged, "changed"), classIf(isEditable, "editable"), "editor-wrapper"), children });
@@ -59136,10 +59141,10 @@ function EditorCollectionEditor(props) {
59136
59141
  ] });
59137
59142
  }
59138
59143
  function EditorDescription({ text }) {
59139
- return text ? /* @__PURE__ */ jsx("div", { className: "editor-description", children: text }) : null;
59144
+ return text ? /* @__PURE__ */ jsx(Typography$3, { variant: "body2", className: "editor-description", children: text }) : null;
59140
59145
  }
59141
59146
  function EditorName({ text }) {
59142
- return /* @__PURE__ */ jsx("div", { className: "editor-name", children: text });
59147
+ return /* @__PURE__ */ jsx(Typography$3, { variant: "h5", className: "editor-name", children: text });
59143
59148
  }
59144
59149
  function EditorInnerWrapper(props) {
59145
59150
  const { label, description, children, className } = props;
@@ -59154,7 +59159,7 @@ function GroupPanel(props) {
59154
59159
  return /* @__PURE__ */ jsx(List$4, { component: Paper$3, children: groups && Object.keys(groups).map((group) => {
59155
59160
  return /* @__PURE__ */ jsxs(ListItemButton, { onClick: () => selectGroup(group), selected: selectedGroup === group, children: [
59156
59161
  /* @__PURE__ */ jsx(ListItemIcon$1, { children: /* @__PURE__ */ jsx(GroupIcon, {}) }),
59157
- /* @__PURE__ */ jsx(ListItemText$1, { primary: group })
59162
+ /* @__PURE__ */ jsx(ListItemText$1, { slotProps: { primary: { variant: "body2" } }, primary: group })
59158
59163
  ] }, group);
59159
59164
  }) });
59160
59165
  }
@@ -83676,6 +83681,35 @@ const theme = createTheme$3({
83676
83681
  h1: {
83677
83682
  fontSize: "2rem",
83678
83683
  fontWeight: 600
83684
+ },
83685
+ h4: {
83686
+ fontSize: "1.2rem",
83687
+ fontWeight: 600
83688
+ },
83689
+ h5: {
83690
+ fontSize: "1.1rem",
83691
+ fontWeight: 600
83692
+ },
83693
+ h6: {
83694
+ fontSize: "1rem",
83695
+ fontWeight: 600,
83696
+ lineHeight: "normal"
83697
+ },
83698
+ subtitle1: {
83699
+ fontSize: "1.5rem",
83700
+ fontWeight: 400,
83701
+ lineHeight: 1.5
83702
+ },
83703
+ subtitle2: {
83704
+ fontSize: "1.2rem",
83705
+ fontWeight: 400
83706
+ },
83707
+ body2: {
83708
+ fontSize: ".85rem",
83709
+ lineHeight: 1.5
83710
+ },
83711
+ caption: {
83712
+ fontSize: ".8rem"
83679
83713
  }
83680
83714
  },
83681
83715
  components: {
@@ -83706,12 +83740,22 @@ function DropdownWithEllipsis(props) {
83706
83740
  const { options, value, label, handleChange, dataTestId, field, className, noOptionsText } = props;
83707
83741
  const anchorRef = useRef(null);
83708
83742
  const [menuWidth, setMenuWidth] = useState(void 0);
83743
+ const [isOpen, setIsOpen] = useState(false);
83709
83744
  useLayoutEffect(() => {
83710
83745
  setMenuWidth(anchorRef.current?.offsetWidth);
83711
83746
  }, []);
83747
+ const handleKeyDown2 = (event) => {
83748
+ if (options.length === 0 && event.key === "Tab") {
83749
+ setIsOpen(false);
83750
+ return;
83751
+ }
83752
+ };
83712
83753
  const selectProps = {
83713
83754
  ...commonMuiProps.select,
83714
83755
  variant: "outlined",
83756
+ open: isOpen,
83757
+ onOpen: () => setIsOpen(true),
83758
+ onClose: () => setIsOpen(false),
83715
83759
  MenuProps: {
83716
83760
  keepMounted: true,
83717
83761
  ...commonMuiProps.select.MenuProps,
@@ -83730,6 +83774,7 @@ function DropdownWithEllipsis(props) {
83730
83774
  ref: anchorRef,
83731
83775
  onChange: (event) => handleChange(event.target.value),
83732
83776
  className,
83777
+ onKeyDown: handleKeyDown2,
83733
83778
  variant: "outlined",
83734
83779
  size: "small",
83735
83780
  slotProps: { select: selectProps },
@@ -83912,6 +83957,227 @@ function AdvancedSettings(props) {
83912
83957
  };
83913
83958
  return /* @__PURE__ */ jsx("div", { className: "advanced-settings", children: /* @__PURE__ */ jsx(Button$3, { name: id, variant: "contained", size: "small", color: "secondary", hidden, onClick: goToConfigurationPage, children: label }) });
83914
83959
  }
83960
+ var LogBackupStrategyType = /* @__PURE__ */ ((LogBackupStrategyType2) => {
83961
+ LogBackupStrategyType2[LogBackupStrategyType2["Period"] = 0] = "Period";
83962
+ LogBackupStrategyType2[LogBackupStrategyType2["Quantity"] = 1] = "Quantity";
83963
+ LogBackupStrategyType2[LogBackupStrategyType2["Disabled"] = 2] = "Disabled";
83964
+ return LogBackupStrategyType2;
83965
+ })(LogBackupStrategyType || {});
83966
+ LogBackupStrategyType.Period;
83967
+ const LOG_BACKUP_STRATEGY_PERIOD_IN_DAYS_DEFAULT = 7;
83968
+ const LOG_BACKUP_STRATEGY_QUANTITY_IN_MESSAGES_DEFAULT = 3e3;
83969
+ const LOG_BACKUP_STRATEGY_BACKUP_FOLDER_DEFAULT = "";
83970
+ const LOG_BACKUP_STRATEGY_VALUE_DEFAULT = {
83971
+ strategyType: LogBackupStrategyType,
83972
+ periodInDays: LOG_BACKUP_STRATEGY_PERIOD_IN_DAYS_DEFAULT,
83973
+ quantityInMessages: LOG_BACKUP_STRATEGY_QUANTITY_IN_MESSAGES_DEFAULT,
83974
+ backupFolder: LOG_BACKUP_STRATEGY_BACKUP_FOLDER_DEFAULT
83975
+ };
83976
+ const LOG_BACKUP_STRATEGY_NUMBER_INPUT_WIDTH = 160;
83977
+ const LOG_BACKUP_STRATEGY_PERIOD_MIN_VALUE = 1;
83978
+ const LOG_BACKUP_STRATEGY_PERIOD_MAX_VALUE = 2147483647;
83979
+ const LOG_BACKUP_STRATEGY_MESSAGES_MIN_VALUE = 0;
83980
+ const LOG_BACKUP_STRATEGY_MESSAGES_MAX_VALUE = 2147483647;
83981
+ function getLogBackupStrategyOptions(services) {
83982
+ const resources = services.resources;
83983
+ const { numberGroupSeparator, numberDecimalSeparator } = services.applicationSettings.culture;
83984
+ return [
83985
+ {
83986
+ name: "LogBackupStrategy_Period",
83987
+ type: LogBackupStrategyType.Period,
83988
+ label: resources.LogBackupStrategy_PeriodStrategy,
83989
+ controls: [
83990
+ {
83991
+ name: "period-in-days",
83992
+ instance: NumberComponent,
83993
+ getProperties: (field) => ({
83994
+ name: "periodInDays",
83995
+ numberGroupSeparator,
83996
+ numberDecimalSeparator,
83997
+ sx: {
83998
+ minWidth: LOG_BACKUP_STRATEGY_NUMBER_INPUT_WIDTH,
83999
+ maxWidth: LOG_BACKUP_STRATEGY_NUMBER_INPUT_WIDTH
84000
+ },
84001
+ slotProps: {
84002
+ htmlInput: {
84003
+ className: "log-backup-strategy-folder__number_text-center"
84004
+ }
84005
+ },
84006
+ value: field.value.periodInDays,
84007
+ allowDecimals: false,
84008
+ minValue: LOG_BACKUP_STRATEGY_PERIOD_MIN_VALUE,
84009
+ maxValue: LOG_BACKUP_STRATEGY_PERIOD_MAX_VALUE,
84010
+ onChange: (value) => field.onChange({ ...field.value, periodInDays: value }),
84011
+ onBlur: (ev) => {
84012
+ if (ev.target.value === "") {
84013
+ field.onChange({ ...field.value, periodInDays: LOG_BACKUP_STRATEGY_PERIOD_MIN_VALUE });
84014
+ }
84015
+ }
84016
+ })
84017
+ }
84018
+ ]
84019
+ },
84020
+ {
84021
+ name: "LogBackupStrategy_Quantity",
84022
+ type: LogBackupStrategyType.Quantity,
84023
+ label: resources.LogBackupStrategy_QuantityStrategy,
84024
+ controls: [
84025
+ {
84026
+ name: "quantity-in-messages",
84027
+ instance: NumberComponent,
84028
+ getProperties: (field) => ({
84029
+ name: "quantityInMessages",
84030
+ numberGroupSeparator,
84031
+ numberDecimalSeparator,
84032
+ sx: {
84033
+ minWidth: LOG_BACKUP_STRATEGY_NUMBER_INPUT_WIDTH,
84034
+ maxWidth: LOG_BACKUP_STRATEGY_NUMBER_INPUT_WIDTH
84035
+ },
84036
+ slotProps: {
84037
+ htmlInput: {
84038
+ className: "log-backup-strategy-folder__number_text-center"
84039
+ }
84040
+ },
84041
+ value: field.value.quantityInMessages,
84042
+ allowDecimals: false,
84043
+ minValue: LOG_BACKUP_STRATEGY_MESSAGES_MIN_VALUE,
84044
+ maxValue: LOG_BACKUP_STRATEGY_MESSAGES_MAX_VALUE,
84045
+ onChange: (value) => field.onChange({ ...field.value, quantityInMessages: value }),
84046
+ onBlur: (ev) => {
84047
+ if (ev.target.value === "") {
84048
+ field.onChange({ ...field.value, quantityInMessages: LOG_BACKUP_STRATEGY_MESSAGES_MIN_VALUE });
84049
+ }
84050
+ }
84051
+ })
84052
+ }
84053
+ ]
84054
+ },
84055
+ {
84056
+ name: "LogBackupStrategy_Disabled",
84057
+ type: LogBackupStrategyType.Disabled,
84058
+ label: resources.LogBackupStrategy_DisabledStrategy
84059
+ }
84060
+ ];
84061
+ }
84062
+ class LogBackupStrategyLogic extends ComponentLogic {
84063
+ constructor() {
84064
+ super(...arguments);
84065
+ this.domain = y("LogBackupStrategyLogic");
84066
+ this.componentDidMount = c$1("componentDidMount");
84067
+ this.$options = this.domain.createStore([], { name: "$options" });
84068
+ }
84069
+ initOptions() {
84070
+ v({
84071
+ clock: this.componentDidMount,
84072
+ fn: () => getLogBackupStrategyOptions(this.options.services),
84073
+ target: this.$options
84074
+ });
84075
+ }
84076
+ init() {
84077
+ this.initOptions();
84078
+ }
84079
+ }
84080
+ function convertLabelToNode(label, controls, field, services) {
84081
+ return replaceControls(
84082
+ label,
84083
+ controls,
84084
+ field
84085
+ );
84086
+ }
84087
+ function replaceControls(label, controlsDescriptions, field) {
84088
+ const controls = label.matchAll(/\[.+?\]/g);
84089
+ let index = 0;
84090
+ const nodes = [];
84091
+ for (const control of controls) {
84092
+ const controlSubstr = control[0];
84093
+ const controlSubstrIndex = control.index;
84094
+ const text = label.slice(index, controlSubstrIndex);
84095
+ nodes.push(/* @__PURE__ */ jsx("span", { children: text }));
84096
+ const controlDescriptionIndex = controlSubstr.replaceAll(/[\[\]]/g, "");
84097
+ const controlName = controlsDescriptions[controlDescriptionIndex].name;
84098
+ const ControlComponent = controlsDescriptions[controlDescriptionIndex].instance;
84099
+ const controlProperties = controlsDescriptions[controlDescriptionIndex].getProperties(field);
84100
+ nodes.push(
84101
+ /* @__PURE__ */ jsx(
84102
+ "div",
84103
+ {
84104
+ className: `log-backup-strategy__option_control-wrapper ${controlName}`,
84105
+ "data-testid": `log-backup-strategy-option-control-wrapper-${controlName}`,
84106
+ onClick: (ev) => ev.preventDefault(),
84107
+ children: /* @__PURE__ */ jsx(ControlComponent, { ...controlProperties })
84108
+ }
84109
+ )
84110
+ );
84111
+ index = index + text.length + controlSubstr.length;
84112
+ }
84113
+ nodes.push(/* @__PURE__ */ jsx("span", { children: label.slice(index) }));
84114
+ return /* @__PURE__ */ jsx("div", { className: "log-backup-strategy__option_label", children: nodes });
84115
+ }
84116
+ function LogBackupStrategyOption(props) {
84117
+ const { name, type: type2, label, services, controls = [], field, fieldName } = props;
84118
+ const key = `${fieldName}_${props.type}`;
84119
+ return /* @__PURE__ */ jsx("div", { "data-testid": "log-backup-strategy_option-wrapper", children: /* @__PURE__ */ jsx(
84120
+ FormControlLabel$1,
84121
+ {
84122
+ label: convertLabelToNode(label, controls, field),
84123
+ control: /* @__PURE__ */ createElement(
84124
+ Radio,
84125
+ {
84126
+ ...field,
84127
+ key,
84128
+ id: key,
84129
+ name,
84130
+ color: "primary",
84131
+ onChange: (ev) => field.onChange({ ...field.value, strategyType: Number(ev.target.value) }),
84132
+ value: type2,
84133
+ checked: field.value.strategyType === type2,
84134
+ "data-testid": `log-backup-strategy_option_${type2}`
84135
+ }
84136
+ )
84137
+ },
84138
+ `${key}_label}`
84139
+ ) });
84140
+ }
84141
+ function LogBackupStrategy(props) {
84142
+ const { id: fieldName, value } = props;
84143
+ const services = useContext(ServicesContext);
84144
+ const logic = useLogic({ ...props, services }, LogBackupStrategyLogic);
84145
+ const options = e(logic.$options);
84146
+ const { resetField, control } = useCustomFormContext();
84147
+ const { field, fieldState } = useController({
84148
+ name: props.id,
84149
+ control,
84150
+ defaultValue: { ...LOG_BACKUP_STRATEGY_VALUE_DEFAULT, ...props.value || {} }
84151
+ });
84152
+ useEffect(() => {
84153
+ logic.componentDidMount();
84154
+ }, [logic]);
84155
+ return /* @__PURE__ */ jsx(EditorContainer, { resetValue: () => {
84156
+ resetField(props.id);
84157
+ }, isChanged: fieldState.isDirty, ...props, children: /* @__PURE__ */ jsxs(FormControl$3, { size: "small", children: [
84158
+ /* @__PURE__ */ jsx(RadioGroup, { children: options.map((option) => /* @__PURE__ */ jsx(LogBackupStrategyOption, { ...option, field, fieldName, services }, `${fieldName}_${option.type}`)) }),
84159
+ /* @__PURE__ */ jsx(
84160
+ EditorInnerWrapper,
84161
+ {
84162
+ label: services.resources.LogBackupStrategy_Title,
84163
+ description: services.resources.LogBackupStrategy_Description,
84164
+ children: /* @__PURE__ */ jsx(
84165
+ TextField$3,
84166
+ {
84167
+ variant: "outlined",
84168
+ size: "small",
84169
+ className: "log-backup-strategy-folder__input",
84170
+ value: field.value.backupFolder,
84171
+ fullWidth: true,
84172
+ required: field.value.strategyType,
84173
+ onChange: (e2) => field.onChange({ ...field.value, backupFolder: e2.target.value || "" }),
84174
+ slotProps: { htmlInput: { "data-testid": "log-backup-strategy-folder" } }
84175
+ }
84176
+ )
84177
+ }
84178
+ )
84179
+ ] }) });
84180
+ }
83915
84181
  var TableLocationType = /* @__PURE__ */ ((TableLocationType2) => {
83916
84182
  TableLocationType2[TableLocationType2["UseDefaultOrCurrent"] = 0] = "UseDefaultOrCurrent";
83917
84183
  TableLocationType2[TableLocationType2["UseOwnDatabase"] = 1] = "UseOwnDatabase";
@@ -85471,7 +85737,7 @@ function DropdownWithTooltip(props) {
85471
85737
  },
85472
85738
  renderValue: (selected) => {
85473
85739
  const selectedOption = options.find((option) => option.value === Number(selected));
85474
- return /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: selectedOption?.tooltip, children: /* @__PURE__ */ jsx("span", { className: "database-generation-settings__selected-value", children: selectedOption?.displayName }) });
85740
+ return /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: selectedOption?.tooltip, children: /* @__PURE__ */ jsx(Typography$3, { component: "span", className: "database-generation-settings__selected-value", children: selectedOption?.displayName }) });
85475
85741
  }
85476
85742
  };
85477
85743
  return /* @__PURE__ */ jsx(
@@ -85485,7 +85751,7 @@ function DropdownWithTooltip(props) {
85485
85751
  className,
85486
85752
  size: "small",
85487
85753
  slotProps: { select: { ...selectProps, inputProps: { "data-testid": dataTestId } } },
85488
- children: options.map((option) => /* @__PURE__ */ jsx(MenuItem, { value: option.value, "data-testid": `${dataTestId}-option-${option.value}`, children: /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: option.tooltip, children: /* @__PURE__ */ jsx("span", { children: option.displayName }) }) }, `${name}_${option.value}`))
85754
+ children: options.map((option) => /* @__PURE__ */ jsx(MenuItem, { value: option.value, "data-testid": `${dataTestId}-option-${option.value}`, children: /* @__PURE__ */ jsx(LightTooltip, { placement: "top", title: option.tooltip, children: /* @__PURE__ */ jsx(Typography$3, { component: "span", children: option.displayName }) }) }, `${name}_${option.value}`))
85489
85755
  }
85490
85756
  );
85491
85757
  }
@@ -85555,6 +85821,7 @@ function registerEditors() {
85555
85821
  editorFactory.register("LdapCatalogs", LdapCatalogs);
85556
85822
  editorFactory.register("ReadonlyEditor", ReadonlyEditor);
85557
85823
  editorFactory.register("AdvancedSettings", AdvancedSettings);
85824
+ editorFactory.register("LogBackupStrategy", LogBackupStrategy);
85558
85825
  editorFactory.register("DatabaseGenerationSettings", DatabaseGenerationSettings);
85559
85826
  }
85560
85827
  serviceName(function(s2) {
@@ -87365,6 +87632,11 @@ function Toolbar$1() {
87365
87632
  return await services.localizationService.getResources();
87366
87633
  };
87367
87634
  const changeLocale = async () => {
87635
+ const { resources, formControl } = services;
87636
+ if (formControl.isDirty) {
87637
+ const canProceed = window.confirm(resources.UnsavedChangesConfirmation);
87638
+ if (!canProceed) return;
87639
+ }
87368
87640
  disableLocaleButton(true);
87369
87641
  let index;
87370
87642
  if (localeIndexInAvailableLocales + 1 < applicationSettings.availableLocales.length) {
@@ -88568,7 +88840,6 @@ function ReloadIcon(props) {
88568
88840
  const { className, color: color2, loading, onClick } = props;
88569
88841
  return /* @__PURE__ */ jsx("div", { onClick, className: classNames("reload-icon", className, classIf(loading, "loading")), children: /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: color2, children: /* @__PURE__ */ jsx("path", { d: "M12,18A6,6 0 0,1 6,12C6,11 6.25,10.03 6.7,9.2L5.24,7.74C4.46,8.97 4,10.43 4,12A8,8 0 0,0 12,20V23L16,19L12,15M12,4V1L8,5L12,9V6A6,6 0 0,1 18,12C18,13 17.75,13.97 17.3,14.8L18.76,16.26C19.54,15.03 20,13.57 20,12A8,8 0 0,0 12,4Z" }) }) });
88570
88842
  }
88571
- const ICON_COLOR = "#607d8b";
88572
88843
  function ExpandButton(props) {
88573
88844
  const { expanded, dataTestId, className, disabled, ...elementProps } = props;
88574
88845
  const expandedClass = expanded ? "expand-button__expanded" : "expand-button__collapsed";
@@ -88582,12 +88853,13 @@ function ExpandButton(props) {
88582
88853
  }
88583
88854
  );
88584
88855
  }
88856
+ const ICON_COLOR = "#607d8b";
88585
88857
  function ServerList(props) {
88586
88858
  const { services, servers, selectServer, reloadServerList, selectedServerId, loading } = props;
88587
88859
  const [expanded, setExpanded] = useState(true);
88588
88860
  return /* @__PURE__ */ jsxs("div", { className: "server-list", children: [
88589
88861
  /* @__PURE__ */ jsxs("div", { className: "server-list__title", children: [
88590
- /* @__PURE__ */ jsxs("div", { className: "server-list__title__text", children: [
88862
+ /* @__PURE__ */ jsxs(Typography$3, { variant: "h5", className: "server-list__title__text", children: [
88591
88863
  /* @__PURE__ */ jsx(ExpandButton, { onClick: () => setExpanded(!expanded), expanded: servers?.length > 0 && expanded, disabled: !servers?.length }),
88592
88864
  `${services.resources.Servers} (${servers?.length ?? 0})`
88593
88865
  ] }),
@@ -88601,7 +88873,7 @@ function ServerList(props) {
88601
88873
  {
88602
88874
  className: "server-list__item-content" + classIf(selectedServerId === server.id, "selected"),
88603
88875
  onClick: () => selectServer(server),
88604
- children: server.name
88876
+ children: /* @__PURE__ */ jsx(Typography$3, { variant: "body2", component: "span", children: server.name })
88605
88877
  }
88606
88878
  )
88607
88879
  ] }, server.id);
@@ -88680,23 +88952,6 @@ class ServersPageLogic extends ComponentLogic {
88680
88952
  function ServerIcon() {
88681
88953
  return /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "24px", height: "24px", fill: ICON_COLOR, children: /* @__PURE__ */ jsx("path", { d: "M2 4.6V9.4C2 10.3 2.5 11 3.2 11H20.9C21.5 11 22.1 10.3 22.1 9.4V4.6C22 3.7 21.5 3 20.8 3H3.2C2.5 3 2 3.7 2 4.6M10 8V6H9V8H10M5 8H7V6H5V8M20 9H4V5H20V9M2 14.6V19.4C2 20.3 2.5 21 3.2 21H20.9C21.5 21 22.1 20.3 22.1 19.4V14.6C22.1 13.7 21.6 13 20.9 13H3.2C2.5 13 2 13.7 2 14.6M10 18V16H9V18H10M5 18H7V16H5V18M20 19H4V15H20V19Z" }) });
88682
88954
  }
88683
- function ServerDescriptionCard(props) {
88684
- const { name, operatingSystem, services } = props;
88685
- const resources = services.resources;
88686
- const fields = [
88687
- { label: resources.ServerName, value: name },
88688
- { label: resources.OperatingSystem, value: operatingSystem }
88689
- ];
88690
- return /* @__PURE__ */ jsxs("div", { className: "server-description-card", children: [
88691
- /* @__PURE__ */ jsx(InformationIcon, { className: "server-description-card__info-icon", color: ICON_COLOR }),
88692
- /* @__PURE__ */ jsx("div", { className: "server-description-card__data", children: fields.map((field) => {
88693
- return /* @__PURE__ */ jsxs(React__default.Fragment, { children: [
88694
- /* @__PURE__ */ jsx("label", { children: field.label }),
88695
- /* @__PURE__ */ jsx("div", { children: field.value })
88696
- ] }, field.label);
88697
- }) })
88698
- ] });
88699
- }
88700
88955
  function ComponentList(props) {
88701
88956
  const { components, services, onComponentClick, onDeleteClick } = props;
88702
88957
  const onDeleteIconClick = async (event, component) => {
@@ -88717,7 +88972,7 @@ function ComponentList(props) {
88717
88972
  components.map((component) => {
88718
88973
  return /* @__PURE__ */ jsxs("div", { className: "component-list__item", onClick: () => onComponentClick(component), children: [
88719
88974
  /* @__PURE__ */ jsx(ComponentIcon, { color: ICON_COLOR }),
88720
- /* @__PURE__ */ jsx("div", { className: "component-list__item__content", children: component.serviceName }),
88975
+ /* @__PURE__ */ jsx(Typography$3, { className: "component-list__item__content", children: component.serviceName }),
88721
88976
  /* @__PURE__ */ jsx(
88722
88977
  DeleteIcon,
88723
88978
  {
@@ -88731,6 +88986,26 @@ function ComponentList(props) {
88731
88986
  })
88732
88987
  ] });
88733
88988
  }
88989
+ function ServerDescriptionCard(props) {
88990
+ const { name, operatingSystem, services } = props;
88991
+ const resources = services.resources;
88992
+ const fields = [
88993
+ { label: resources.ServerName, value: name },
88994
+ { label: resources.OperatingSystem, value: operatingSystem }
88995
+ ];
88996
+ return /* @__PURE__ */ jsxs("div", { className: "server-description-card", children: [
88997
+ /* @__PURE__ */ jsx(InformationIcon, { className: "server-description-card__info-icon", color: ICON_COLOR }),
88998
+ /* @__PURE__ */ jsx("div", { className: "server-description-card__data", children: fields.map((field) => {
88999
+ return /* @__PURE__ */ jsxs(React__default.Fragment, { children: [
89000
+ /* @__PURE__ */ jsxs("label", { children: [
89001
+ field.label,
89002
+ ":"
89003
+ ] }),
89004
+ /* @__PURE__ */ jsx(Typography$3, { component: "span", variant: "body2", children: field.value })
89005
+ ] }, field.label);
89006
+ }) })
89007
+ ] });
89008
+ }
88734
89009
  function ServerDescriptionPanel(props) {
88735
89010
  const { serverDescription, loadingServices, services } = props;
88736
89011
  const onComponentClick = (component) => {
@@ -88744,7 +89019,7 @@ function ServerDescriptionPanel(props) {
88744
89019
  return /* @__PURE__ */ jsx(LoadingMore, { loading: true });
88745
89020
  }
88746
89021
  if (!serverDescription) {
88747
- return /* @__PURE__ */ jsx("div", { className: "server-description-panel__title", children: services.resources.SelectServer });
89022
+ return /* @__PURE__ */ jsx(Typography$3, { variant: "subtitle2", className: "server-description-panel__title", children: services.resources.SelectServer });
88748
89023
  }
88749
89024
  return /* @__PURE__ */ jsxs(Fragment, { children: [
88750
89025
  /* @__PURE__ */ jsx(
@@ -122316,7 +122591,7 @@ function ExtendedConfiguration(props) {
122316
122591
  ] })
122317
122592
  ] }),
122318
122593
  /* @__PURE__ */ jsxs("div", { className: "extended-configuration", children: [
122319
- /* @__PURE__ */ jsx(Typography$3, { variant: "h4", color: "secondary", children: resources.AdvancedSettings }),
122594
+ /* @__PURE__ */ jsx(Typography$3, { variant: "h1", color: "secondary", children: resources.AdvancedSettings }),
122320
122595
  /* @__PURE__ */ jsx(SearchRow, { changeSearchText: (searchText2) => logic.changeSearchText(searchText2), searchText, services: props.services }),
122321
122596
  /* @__PURE__ */ jsx(Paper$3, { className: "extended-configuration__table", children: /* @__PURE__ */ jsx(
122322
122597
  DataGrid,
@@ -125398,7 +125673,7 @@ function ConfigurationLocksPage(props) {
125398
125673
  resources,
125399
125674
  pendingUnlockOperations
125400
125675
  }
125401
- ) : /* @__PURE__ */ jsx("p", { className: "configuration-locks-page__text", children: resources.ConfigurationLocks_Empty }))
125676
+ ) : /* @__PURE__ */ jsx(Typography$3, { component: "p", className: "configuration-locks-page__text", children: resources.ConfigurationLocks_Empty }))
125402
125677
  ] }) });
125403
125678
  }
125404
125679
  function ConfigurationLocksRouteComponent(props) {
@@ -125829,6 +126104,7 @@ export {
125829
126104
  GroupPanel,
125830
126105
  HandPointRightIcon,
125831
126106
  HelpIconButton,
126107
+ InfoBanner,
125832
126108
  InformationIcon,
125833
126109
  KEYCODE_ESCAPE,
125834
126110
  LayoutService,