@gravity-ui/dynamic-forms 5.6.0 → 5.8.0

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 (33) hide show
  1. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoHeader.css +4 -0
  2. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoHeader.js +5 -4
  3. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoInputBase.css +2 -1
  4. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoInputBase.js +6 -6
  5. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoInputDialog.css +2 -1
  6. package/build/cjs/lib/kit/components/Inputs/MonacoInput/MonacoInputDialog.js +2 -2
  7. package/build/cjs/lib/kit/components/Inputs/TableArrayInput/TableArrayInput.css +10 -0
  8. package/build/cjs/lib/kit/components/Inputs/TableArrayInput/TableArrayInput.js +6 -6
  9. package/build/cjs/lib/kit/components/Views/MonacoInputView/MonacoBaseView.css +11 -1
  10. package/build/cjs/lib/kit/components/Views/MonacoInputView/MonacoBaseView.js +11 -6
  11. package/build/cjs/lib/kit/components/Views/MonacoInputView/MonacoViewDialog.css +11 -0
  12. package/build/cjs/lib/kit/components/Views/MonacoInputView/MonacoViewDialog.js +4 -3
  13. package/build/cjs/lib/kit/components/Views/TableArrayView/TableArrayView.css +7 -0
  14. package/build/cjs/lib/kit/components/Views/TableArrayView/TableArrayView.js +6 -6
  15. package/build/esm/lib/core/types/specs.d.ts +7 -1
  16. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoHeader.css +4 -0
  17. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoHeader.d.ts +6 -2
  18. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoHeader.js +5 -4
  19. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoInputBase.css +2 -1
  20. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoInputBase.js +6 -6
  21. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoInputDialog.css +2 -1
  22. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoInputDialog.d.ts +5 -1
  23. package/build/esm/lib/kit/components/Inputs/MonacoInput/MonacoInputDialog.js +2 -2
  24. package/build/esm/lib/kit/components/Inputs/TableArrayInput/TableArrayInput.css +10 -0
  25. package/build/esm/lib/kit/components/Inputs/TableArrayInput/TableArrayInput.js +6 -6
  26. package/build/esm/lib/kit/components/Views/MonacoInputView/MonacoBaseView.css +11 -1
  27. package/build/esm/lib/kit/components/Views/MonacoInputView/MonacoBaseView.js +11 -6
  28. package/build/esm/lib/kit/components/Views/MonacoInputView/MonacoViewDialog.css +11 -0
  29. package/build/esm/lib/kit/components/Views/MonacoInputView/MonacoViewDialog.d.ts +5 -1
  30. package/build/esm/lib/kit/components/Views/MonacoInputView/MonacoViewDialog.js +4 -3
  31. package/build/esm/lib/kit/components/Views/TableArrayView/TableArrayView.css +7 -0
  32. package/build/esm/lib/kit/components/Views/TableArrayView/TableArrayView.js +6 -6
  33. package/package.json +1 -1
@@ -25,4 +25,8 @@
25
25
  align-items: center;
26
26
  background-color: var(--g-color-base-float-hover);
27
27
  box-sizing: border-box;
28
+ }
29
+ .df-monaco-header__title {
30
+ display: flex;
31
+ align-items: center;
28
32
  }
@@ -7,8 +7,9 @@ const icons_1 = require("@gravity-ui/icons");
7
7
  const uikit_1 = require("@gravity-ui/uikit");
8
8
  const utils_1 = require("../../../utils");
9
9
  const b = (0, utils_1.block)('monaco-header');
10
- const MonacoHeader = ({ language, editButton }) => (react_1.default.createElement("div", { className: b() },
11
- react_1.default.createElement("div", null,
12
- react_1.default.createElement(uikit_1.Icon, { data: icons_1.File, size: 18 }),
13
- react_1.default.createElement(uikit_1.Text, { variant: "body-3" }, language)), editButton !== null && editButton !== void 0 ? editButton : null));
10
+ const MonacoHeader = ({ language, dialogButton, headerIconSize, headerIconIndent, headerTitleVariant, }) => (react_1.default.createElement("div", { className: b() },
11
+ react_1.default.createElement("div", { className: b('title') },
12
+ react_1.default.createElement("div", { style: { marginRight: `${headerIconIndent}px` } },
13
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.File, size: headerIconSize })),
14
+ react_1.default.createElement(uikit_1.Text, { variant: headerTitleVariant }, language)), dialogButton !== null && dialogButton !== void 0 ? dialogButton : null));
14
15
  exports.MonacoHeader = MonacoHeader;
@@ -22,10 +22,11 @@
22
22
  height: var(--df-monaco-input-height, 354px);
23
23
  }
24
24
  .df-monaco-input__container {
25
- height: 100%;
25
+ height: calc(100% - 2px);
26
26
  display: flex;
27
27
  flex-direction: column;
28
28
  border: 1px solid var(--g-color-line-generic);
29
+ box-sizing: content-box;
29
30
  }
30
31
  .df-monaco-input__editor {
31
32
  flex: 1;
@@ -15,17 +15,17 @@ const MonacoInputBase = ({ name, input, spec, MonacoComponent, withoutDialog, })
15
15
  const { value, onChange } = input;
16
16
  const MonacoEditor = (0, hooks_1.useMonaco)() || MonacoComponent;
17
17
  const { monacoParams, disabled, layoutTitle } = spec.viewSpec;
18
- const { language, fontSize } = monacoParams !== null && monacoParams !== void 0 ? monacoParams : { language: 'plaintext', fontSize: 11 };
18
+ const { language = 'plaintext', fontSize = 11, headerIconSize = 18, headerIconIndent = 5, headerTitleVariant = 'body-2', headerDialogButtonSize = 'm', headerDialogIconSize = 16, } = monacoParams || {};
19
19
  const [monacoEditorDialog, setMonacoEditorDialog] = react_1.default.useState(false);
20
20
  const [monacoValue, setMonacoValue] = react_1.default.useState(value);
21
21
  const handleMonacoEditorDialogClose = react_1.default.useCallback(() => setMonacoEditorDialog(false), []);
22
22
  const dialogButton = react_1.default.useMemo(() => {
23
23
  if (!withoutDialog) {
24
- return (react_1.default.createElement(uikit_1.Button, { onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
25
- react_1.default.createElement(uikit_1.Icon, { data: icons_1.ChevronsExpandUpRight, size: 16 })));
24
+ return (react_1.default.createElement(uikit_1.Button, { size: headerDialogButtonSize, onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
25
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.ChevronsExpandUpRight, size: headerDialogIconSize })));
26
26
  }
27
27
  return;
28
- }, [withoutDialog, setMonacoEditorDialog, name]);
28
+ }, [withoutDialog, setMonacoEditorDialog, name, headerDialogButtonSize, headerDialogIconSize]);
29
29
  react_1.default.useEffect(() => onChange(monacoValue), [monacoValue]);
30
30
  const options = (0, useMonacoOptions_1.useMonacoOptions)(fontSize, disabled !== null && disabled !== void 0 ? disabled : false);
31
31
  if (!MonacoEditor) {
@@ -33,10 +33,10 @@ const MonacoInputBase = ({ name, input, spec, MonacoComponent, withoutDialog, })
33
33
  }
34
34
  return (react_1.default.createElement("div", { className: b() },
35
35
  react_1.default.createElement("div", { className: b('container'), "data-qa": name },
36
- react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, editButton: dialogButton }),
36
+ react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, dialogButton: dialogButton, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
37
37
  react_1.default.createElement("div", { className: b('editor') },
38
38
  react_1.default.createElement(MonacoEditor, { language: language, value: monacoValue, onChange: setMonacoValue, options: options }))),
39
- react_1.default.createElement(MonacoInputDialog_1.MonacoInputDialog, { name: name, title: layoutTitle, fontSize: fontSize, value: monacoValue, visible: monacoEditorDialog, language: language, changeMonacoValue: setMonacoValue, onChange: onChange, onClose: handleMonacoEditorDialogClose, MonacoComponent: MonacoComponent })));
39
+ react_1.default.createElement(MonacoInputDialog_1.MonacoInputDialog, { name: name, title: layoutTitle, fontSize: fontSize, value: monacoValue, visible: monacoEditorDialog, language: language, changeMonacoValue: setMonacoValue, onChange: onChange, onClose: handleMonacoEditorDialogClose, MonacoComponent: MonacoComponent, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant })));
40
40
  };
41
41
  exports.MonacoInputBase = MonacoInputBase;
42
42
  const MonacoInput = (props) => (react_1.default.createElement(exports.MonacoInputBase, Object.assign({}, props)));
@@ -25,10 +25,11 @@
25
25
  padding: var(--df-monaco-input-dialog-dialog-footer-padding, var(--g-spacing-2) var(--g-spacing-8) var(--g-spacing-8));
26
26
  }
27
27
  .df-monaco-input-dialog__container {
28
- height: 100%;
28
+ height: calc(100% - 2px);
29
29
  display: flex;
30
30
  flex-direction: column;
31
31
  border: 1px solid var(--g-color-line-generic);
32
+ box-sizing: content-box;
32
33
  }
33
34
  .df-monaco-input-dialog__editor {
34
35
  flex: 1;
@@ -10,7 +10,7 @@ const utils_1 = require("../../../utils");
10
10
  const MonacoHeader_1 = require("./MonacoHeader");
11
11
  const useMonacoOptions_1 = require("./useMonacoOptions");
12
12
  const b = (0, utils_1.block)('monaco-input-dialog');
13
- const MonacoInputDialog = ({ name, value, title, visible, language, onChange, onClose, changeMonacoValue, fontSize, MonacoComponent, }) => {
13
+ const MonacoInputDialog = ({ name, value, title, visible, language, onChange, onClose, changeMonacoValue, fontSize, MonacoComponent, headerIconSize, headerIconIndent, headerTitleVariant, }) => {
14
14
  const MonacoEditor = (0, hooks_1.useMonaco)() || MonacoComponent;
15
15
  const handleClose = react_1.default.useCallback(() => {
16
16
  onChange(value);
@@ -24,7 +24,7 @@ const MonacoInputDialog = ({ name, value, title, visible, language, onChange, on
24
24
  react_1.default.createElement(uikit_1.Dialog.Header, { caption: title, className: b('dialog-header') }),
25
25
  react_1.default.createElement(uikit_1.Dialog.Body, null,
26
26
  react_1.default.createElement("div", { className: b('container'), "data-qa": `${name}-dialog` },
27
- react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language }),
27
+ react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
28
28
  react_1.default.createElement("div", { className: b('editor') },
29
29
  react_1.default.createElement(MonacoEditor, { language: language, value: value, onChange: changeMonacoValue, options: options })))),
30
30
  react_1.default.createElement(uikit_1.Dialog.Footer, { textButtonApply: (0, i18n_1.default)('button_cancel'), onClickButtonApply: handleClose })));
@@ -23,6 +23,10 @@
23
23
  .df-table-array__table .g-table__cell {
24
24
  border-bottom: 0px transparent;
25
25
  }
26
+ .df-table-array__column-title {
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ }
26
30
  .df-table-array__row .g-table__cell {
27
31
  border-bottom: 0px transparent;
28
32
  border-top: 1px solid var(--g-color-line-generic);
@@ -62,6 +66,12 @@
62
66
  max-width: 50px;
63
67
  min-width: 50px;
64
68
  }
69
+ .df-table-array__cell-without-limit_arr, .df-table-array__cell-without-limit_obj {
70
+ padding-left: var(--df-table-array-cell-obj-padding-left, var(--g-spacing-half));
71
+ }
72
+ .df-table-array__cell-without-limit_arr > .simple-vertical-accordeon, .df-table-array__cell-without-limit_obj > .simple-vertical-accordeon {
73
+ margin-bottom: var(--df-table-array-cell-obj-simple-vertical-accordeon-margin-bottom, var(--g-spacing-0));
74
+ }
65
75
  .df-table-array__idx {
66
76
  padding-top: var(--df-table-array-idx-padding-top, 6px);
67
77
  }
@@ -47,12 +47,12 @@ const TableArrayInput = ({ spec, name, arrayInput, input }) => {
47
47
  template: ({ key }) => (react_1.default.createElement(uikit_1.Button, { view: "flat-secondary", onClick: () => onItemRemove(key), key: `remove-${key}`, qa: `${name}-item-remove-${key}` },
48
48
  react_1.default.createElement(uikit_1.Icon, { data: icons_1.TrashBin, size: 16 }))),
49
49
  };
50
- const columns = table.map(({ property, label, description }) => ({
50
+ const columns = table.map(({ property, label, description, width }) => ({
51
51
  id: property,
52
52
  name: !description
53
- ? label
54
- : () => (react_1.default.createElement(uikit_1.Flex, { gap: 0.5, alignItems: "center" },
55
- label,
53
+ ? () => (react_1.default.createElement("div", { className: b('column-title'), style: { minWidth: width, maxWidth: width } }, label))
54
+ : () => (react_1.default.createElement(uikit_1.Flex, { gap: 0.5, alignItems: "center", style: { minWidth: width, maxWidth: width } },
55
+ react_1.default.createElement("div", { className: b('column-title') }, label),
56
56
  react_1.default.createElement(uikit_1.HelpMark, { popoverProps: {
57
57
  placement: common_1.COMMON_POPOVER_PLACEMENT,
58
58
  } },
@@ -64,11 +64,11 @@ const TableArrayInput = ({ spec, name, arrayInput, input }) => {
64
64
  return null;
65
65
  }
66
66
  const preparedEntitySpec = Object.assign(Object.assign({}, entitySpec), { viewSpec: Object.assign(Object.assign({}, entitySpec.viewSpec), { layoutTitle: table.map(({ label }) => label).join(` ${idx + 1} `) + ` ${idx + 1}` }) });
67
- return (react_1.default.createElement("div", { className: b('cell', {
67
+ return (react_1.default.createElement("div", { className: b(width ? 'cell-without-limit' : 'cell', {
68
68
  bool: (0, core_1.isBooleanSpec)(preparedEntitySpec),
69
69
  arr: (0, core_1.isArraySpec)(preparedEntitySpec),
70
70
  obj: (0, core_1.isObjectSpec)(preparedEntitySpec),
71
- }), key: `${name}.<${key}>.${property}` },
71
+ }), style: { minWidth: width, maxWidth: width }, key: `${name}.<${key}>.${property}` },
72
72
  react_1.default.createElement(core_1.Controller, { value: (_c = (_b = input.value) === null || _b === void 0 ? void 0 : _b[`<${key}>`]) === null || _c === void 0 ? void 0 : _c[property], spec: preparedEntitySpec, name: `${name}.<${key}>.${property}`, parentOnChange: parentOnChange, parentOnUnmount: noop_1.default })));
73
73
  },
74
74
  }));
@@ -18,6 +18,16 @@
18
18
  */
19
19
  /* Border-radius */
20
20
  .df-monaco-base-view {
21
- border: 1px solid var(--g-color-line-generic);
22
21
  width: var(--df-monaco-base-view-width, 550px);
22
+ height: var(--df-monaco-base-view-height, 354px);
23
+ }
24
+ .df-monaco-base-view__container {
25
+ height: calc(100% - 2px);
26
+ display: flex;
27
+ flex-direction: column;
28
+ border: 1px solid var(--g-color-line-generic);
29
+ box-sizing: content-box;
30
+ }
31
+ .df-monaco-base-view__editor {
32
+ flex: 1;
23
33
  }
@@ -11,21 +11,26 @@ const MonacoHeader_1 = require("../../Inputs/MonacoInput/MonacoHeader");
11
11
  const useMonacoOptions_1 = require("../../Inputs/MonacoInput/useMonacoOptions");
12
12
  const MonacoViewDialog_1 = require("./MonacoViewDialog");
13
13
  const b = (0, utils_1.block)('monaco-base-view');
14
- const MonacoBaseView = ({ value, spec }) => {
14
+ const MonacoBaseView = ({ value, spec, name }) => {
15
15
  const { monacoParams, layoutTitle } = spec.viewSpec;
16
16
  const MonacoEditor = (0, hooks_1.useMonaco)();
17
- const { language, fontSize } = monacoParams !== null && monacoParams !== void 0 ? monacoParams : { language: 'plaintext', fontSize: 12 };
17
+ const { language = 'plaintext', fontSize = 11, headerIconSize = 18, headerIconIndent = 5, headerTitleVariant = 'body-2', headerDialogButtonSize = 'm', headerDialogIconSize = 16, } = monacoParams || {};
18
18
  const options = (0, useMonacoOptions_1.useMonacoOptions)(fontSize, true);
19
19
  const [monacoEditorDialog, setMonacoEditorDialog] = react_1.default.useState(false);
20
20
  const handleMonacoEditorDialogClose = react_1.default.useCallback(() => setMonacoEditorDialog(false), []);
21
+ const dialogButton = react_1.default.useMemo(() => {
22
+ return (react_1.default.createElement(uikit_1.Button, { size: headerDialogButtonSize, onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
23
+ react_1.default.createElement(uikit_1.Icon, { data: icons_1.ChevronsExpandUpRight, size: headerDialogIconSize })));
24
+ }, [setMonacoEditorDialog, name, headerDialogButtonSize, headerDialogIconSize]);
21
25
  if (!value || !MonacoEditor) {
22
26
  return null;
23
27
  }
24
28
  return (react_1.default.createElement("div", { className: b() },
25
- react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, editButton: react_1.default.createElement(uikit_1.Button, { onClick: () => setMonacoEditorDialog(true) },
26
- react_1.default.createElement(uikit_1.Icon, { data: icons_1.ChevronsExpandUpRight, size: 16 })) }),
27
- react_1.default.createElement(MonacoEditor, { language: language, value: value, height: '250', options: options }),
28
- react_1.default.createElement(MonacoViewDialog_1.MonacoViewDialog, { title: layoutTitle, fontSize: fontSize, value: value, visible: monacoEditorDialog, language: language, onClose: handleMonacoEditorDialogClose })));
29
+ react_1.default.createElement("div", { className: b('container'), "data-qa": name },
30
+ react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, dialogButton: dialogButton, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
31
+ react_1.default.createElement("div", { className: b('editor') },
32
+ react_1.default.createElement(MonacoEditor, { language: language, value: value, options: options }))),
33
+ react_1.default.createElement(MonacoViewDialog_1.MonacoViewDialog, { title: layoutTitle, fontSize: fontSize, value: value, visible: monacoEditorDialog, language: language, onClose: handleMonacoEditorDialogClose, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant })));
29
34
  };
30
35
  const MonacoView = (props) => react_1.default.createElement(MonacoBaseView, Object.assign({}, props));
31
36
  exports.MonacoView = MonacoView;
@@ -17,11 +17,22 @@
17
17
  }
18
18
  */
19
19
  /* Border-radius */
20
+ .df-monaco-view-dialog {
21
+ width: var(--df-monaco-view-dialog-width, 966px);
22
+ height: var(--df-monaco-view-dialog-height, 804px);
23
+ }
20
24
  .df-monaco-view-dialog .g-dialog-footer {
21
25
  padding: var(--df-monaco-view-dialog-footer-padding, var(--g-spacing-4));
22
26
  }
23
27
  .df-monaco-view-dialog__container {
28
+ height: calc(100% - 2px);
29
+ display: flex;
30
+ flex-direction: column;
24
31
  border: 1px solid var(--g-color-line-generic);
32
+ box-sizing: content-box;
33
+ }
34
+ .df-monaco-view-dialog__editor {
35
+ flex: 1;
25
36
  }
26
37
  .df-monaco-view-dialog__dialog-header {
27
38
  height: var(--df-monaco-view-dialog-header-height, 48px);
@@ -10,7 +10,7 @@ const utils_1 = require("../../../utils");
10
10
  const MonacoHeader_1 = require("../../Inputs/MonacoInput/MonacoHeader");
11
11
  const useMonacoOptions_1 = require("../../Inputs/MonacoInput/useMonacoOptions");
12
12
  const b = (0, utils_1.block)('monaco-view-dialog');
13
- const MonacoViewDialog = ({ value, title, visible, language, onClose, fontSize, }) => {
13
+ const MonacoViewDialog = ({ value, title, visible, language, onClose, fontSize, headerIconSize, headerIconIndent, headerTitleVariant, }) => {
14
14
  const MonacoEditor = (0, hooks_1.useMonaco)();
15
15
  const handleClose = react_1.default.useCallback(() => {
16
16
  onClose();
@@ -23,8 +23,9 @@ const MonacoViewDialog = ({ value, title, visible, language, onClose, fontSize,
23
23
  react_1.default.createElement(uikit_1.Dialog.Header, { caption: title, className: b('dialog-header') }),
24
24
  react_1.default.createElement(uikit_1.Dialog.Body, null,
25
25
  react_1.default.createElement("div", { className: b('container') },
26
- react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language }),
27
- react_1.default.createElement(MonacoEditor, { language: language, height: "600", width: "900", value: value, options: options }))),
26
+ react_1.default.createElement(MonacoHeader_1.MonacoHeader, { language: language, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
27
+ react_1.default.createElement("div", { className: b('editor') },
28
+ react_1.default.createElement(MonacoEditor, { language: language, value: value, options: options })))),
28
29
  react_1.default.createElement(uikit_1.Dialog.Footer, { textButtonApply: (0, i18n_1.default)('button_cancel'), onClickButtonApply: handleClose })));
29
30
  };
30
31
  exports.MonacoViewDialog = MonacoViewDialog;
@@ -20,6 +20,10 @@
20
20
  .df-table-array-view__table {
21
21
  margin-bottom: var(--df-table-array-view-table-margin-bottom, var(--g-spacing-3));
22
22
  }
23
+ .df-table-array-view__column-title {
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ }
23
27
  .df-table-array-view__cell {
24
28
  max-width: var(--df-table-array-view-cell-min-width, 150px);
25
29
  min-width: var(--df-table-array-view-cell-max-width, 150px);
@@ -33,4 +37,7 @@
33
37
  .df-table-array-view__cell_bool {
34
38
  max-width: 50px;
35
39
  min-width: 50px;
40
+ }
41
+ .df-table-array-view__cell-without-limit_arr > .simple-vertical-accordeon, .df-table-array-view__cell-without-limit_obj > .simple-vertical-accordeon {
42
+ margin-bottom: var(--df-spacing-last-child, var(--g-spacing-0));
36
43
  }
@@ -22,27 +22,27 @@ const TableArrayView = ({ value = [], spec, name }) => {
22
22
  sticky: 'left',
23
23
  template: (__, idx) => (react_1.default.createElement("div", { className: b('idx'), key: `idx-${idx}` }, idx + 1)),
24
24
  };
25
- const columns = table.map(({ property, label, description }) => ({
25
+ const columns = table.map(({ property, label, description, width }) => ({
26
26
  id: property,
27
27
  name: description && showLayoutDescription
28
- ? () => (react_1.default.createElement(uikit_1.Flex, { gap: 0.5, alignItems: "center" },
29
- label,
28
+ ? () => (react_1.default.createElement(uikit_1.Flex, { gap: 0.5, alignItems: "center", style: { minWidth: width, maxWidth: width } },
29
+ react_1.default.createElement("div", { className: b('column-title') }, label),
30
30
  react_1.default.createElement(uikit_1.HelpMark, { popoverProps: {
31
31
  placement: common_1.COMMON_POPOVER_PLACEMENT,
32
32
  } },
33
33
  react_1.default.createElement(HTMLContent_1.HTMLContent, { html: description }))))
34
- : label,
34
+ : () => (react_1.default.createElement("div", { className: b('column-title'), style: { minWidth: width, maxWidth: width } }, label)),
35
35
  template: (_, idx) => {
36
36
  var _a;
37
37
  const entitySpec = (_a = items === null || items === void 0 ? void 0 : items.properties) === null || _a === void 0 ? void 0 : _a[property];
38
38
  if (!entitySpec) {
39
39
  return null;
40
40
  }
41
- return (react_1.default.createElement("div", { className: b('cell', {
41
+ return (react_1.default.createElement("div", { className: b(width ? 'cell-without-limit' : 'cell', {
42
42
  bool: (0, core_1.isBooleanSpec)(entitySpec),
43
43
  arr: (0, core_1.isArraySpec)(entitySpec),
44
44
  obj: (0, core_1.isObjectSpec)(entitySpec),
45
- }), key: `${name}[${idx}].${property}` },
45
+ }), style: { minWidth: width, maxWidth: width }, key: `${name}[${idx}].${property}` },
46
46
  react_1.default.createElement(core_1.ViewController, { spec: entitySpec, name: `${name}[${idx}].${property}` })));
47
47
  },
48
48
  }));
@@ -1,4 +1,4 @@
1
- import type { AlertProps, LabelProps } from '@gravity-ui/uikit';
1
+ import type { AlertProps, ButtonSize, LabelProps, TextProps } from '@gravity-ui/uikit';
2
2
  import type { ColorTextBaseProps } from '@gravity-ui/uikit/build/esm/components/Text/colorText/colorText';
3
3
  import type { ReadAsMethod, SpecTypes } from '../constants';
4
4
  import type { ArrayValue, ObjectValue } from './';
@@ -25,6 +25,7 @@ export interface ArraySpec<LinkType = any, InputComponentProps extends Record<st
25
25
  label: string;
26
26
  property: string;
27
27
  description?: string;
28
+ width?: number;
28
29
  }[];
29
30
  link?: LinkType;
30
31
  placeholder?: string;
@@ -140,6 +141,11 @@ export interface StringSpec<LinkType = any, InputComponentProps extends Record<s
140
141
  monacoParams?: {
141
142
  language?: string;
142
143
  fontSize?: number;
144
+ headerIconSize?: number;
145
+ headerIconIndent?: number;
146
+ headerTitleVariant?: TextProps['variant'];
147
+ headerDialogButtonSize?: ButtonSize;
148
+ headerDialogIconSize?: number;
143
149
  };
144
150
  hideValues?: string[];
145
151
  placeholder?: string;
@@ -25,4 +25,8 @@
25
25
  align-items: center;
26
26
  background-color: var(--g-color-base-float-hover);
27
27
  box-sizing: border-box;
28
+ }
29
+ .df-monaco-header__title {
30
+ display: flex;
31
+ align-items: center;
28
32
  }
@@ -1,8 +1,12 @@
1
1
  import React from 'react';
2
+ import { type TextProps } from '@gravity-ui/uikit';
2
3
  import './MonacoHeader.css';
3
4
  interface MonacoHeaderProps {
4
- language?: string;
5
- editButton?: React.ReactNode;
5
+ language: string;
6
+ dialogButton?: React.ReactNode;
7
+ headerIconSize: number;
8
+ headerIconIndent: number;
9
+ headerTitleVariant: TextProps['variant'];
6
10
  }
7
11
  export declare const MonacoHeader: React.FC<MonacoHeaderProps>;
8
12
  export {};
@@ -4,7 +4,8 @@ import { Icon, Text } from '@gravity-ui/uikit';
4
4
  import { block } from '../../../utils';
5
5
  import './MonacoHeader.css';
6
6
  const b = block('monaco-header');
7
- export const MonacoHeader = ({ language, editButton }) => (React.createElement("div", { className: b() },
8
- React.createElement("div", null,
9
- React.createElement(Icon, { data: File, size: 18 }),
10
- React.createElement(Text, { variant: "body-3" }, language)), editButton !== null && editButton !== void 0 ? editButton : null));
7
+ export const MonacoHeader = ({ language, dialogButton, headerIconSize, headerIconIndent, headerTitleVariant, }) => (React.createElement("div", { className: b() },
8
+ React.createElement("div", { className: b('title') },
9
+ React.createElement("div", { style: { marginRight: `${headerIconIndent}px` } },
10
+ React.createElement(Icon, { data: File, size: headerIconSize })),
11
+ React.createElement(Text, { variant: headerTitleVariant }, language)), dialogButton !== null && dialogButton !== void 0 ? dialogButton : null));
@@ -22,10 +22,11 @@
22
22
  height: var(--df-monaco-input-height, 354px);
23
23
  }
24
24
  .df-monaco-input__container {
25
- height: 100%;
25
+ height: calc(100% - 2px);
26
26
  display: flex;
27
27
  flex-direction: column;
28
28
  border: 1px solid var(--g-color-line-generic);
29
+ box-sizing: content-box;
29
30
  }
30
31
  .df-monaco-input__editor {
31
32
  flex: 1;
@@ -12,17 +12,17 @@ export const MonacoInputBase = ({ name, input, spec, MonacoComponent, withoutDia
12
12
  const { value, onChange } = input;
13
13
  const MonacoEditor = useMonaco() || MonacoComponent;
14
14
  const { monacoParams, disabled, layoutTitle } = spec.viewSpec;
15
- const { language, fontSize } = monacoParams !== null && monacoParams !== void 0 ? monacoParams : { language: 'plaintext', fontSize: 11 };
15
+ const { language = 'plaintext', fontSize = 11, headerIconSize = 18, headerIconIndent = 5, headerTitleVariant = 'body-2', headerDialogButtonSize = 'm', headerDialogIconSize = 16, } = monacoParams || {};
16
16
  const [monacoEditorDialog, setMonacoEditorDialog] = React.useState(false);
17
17
  const [monacoValue, setMonacoValue] = React.useState(value);
18
18
  const handleMonacoEditorDialogClose = React.useCallback(() => setMonacoEditorDialog(false), []);
19
19
  const dialogButton = React.useMemo(() => {
20
20
  if (!withoutDialog) {
21
- return (React.createElement(Button, { onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
22
- React.createElement(Icon, { data: ChevronsExpandUpRight, size: 16 })));
21
+ return (React.createElement(Button, { size: headerDialogButtonSize, onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
22
+ React.createElement(Icon, { data: ChevronsExpandUpRight, size: headerDialogIconSize })));
23
23
  }
24
24
  return;
25
- }, [withoutDialog, setMonacoEditorDialog, name]);
25
+ }, [withoutDialog, setMonacoEditorDialog, name, headerDialogButtonSize, headerDialogIconSize]);
26
26
  React.useEffect(() => onChange(monacoValue), [monacoValue]);
27
27
  const options = useMonacoOptions(fontSize, disabled !== null && disabled !== void 0 ? disabled : false);
28
28
  if (!MonacoEditor) {
@@ -30,9 +30,9 @@ export const MonacoInputBase = ({ name, input, spec, MonacoComponent, withoutDia
30
30
  }
31
31
  return (React.createElement("div", { className: b() },
32
32
  React.createElement("div", { className: b('container'), "data-qa": name },
33
- React.createElement(MonacoHeader, { language: language, editButton: dialogButton }),
33
+ React.createElement(MonacoHeader, { language: language, dialogButton: dialogButton, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
34
34
  React.createElement("div", { className: b('editor') },
35
35
  React.createElement(MonacoEditor, { language: language, value: monacoValue, onChange: setMonacoValue, options: options }))),
36
- React.createElement(MonacoInputDialog, { name: name, title: layoutTitle, fontSize: fontSize, value: monacoValue, visible: monacoEditorDialog, language: language, changeMonacoValue: setMonacoValue, onChange: onChange, onClose: handleMonacoEditorDialogClose, MonacoComponent: MonacoComponent })));
36
+ React.createElement(MonacoInputDialog, { name: name, title: layoutTitle, fontSize: fontSize, value: monacoValue, visible: monacoEditorDialog, language: language, changeMonacoValue: setMonacoValue, onChange: onChange, onClose: handleMonacoEditorDialogClose, MonacoComponent: MonacoComponent, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant })));
37
37
  };
38
38
  export const MonacoInput = (props) => (React.createElement(MonacoInputBase, Object.assign({}, props)));
@@ -25,10 +25,11 @@
25
25
  padding: var(--df-monaco-input-dialog-dialog-footer-padding, var(--g-spacing-2) var(--g-spacing-8) var(--g-spacing-8));
26
26
  }
27
27
  .df-monaco-input-dialog__container {
28
- height: 100%;
28
+ height: calc(100% - 2px);
29
29
  display: flex;
30
30
  flex-direction: column;
31
31
  border: 1px solid var(--g-color-line-generic);
32
+ box-sizing: content-box;
32
33
  }
33
34
  .df-monaco-input-dialog__editor {
34
35
  flex: 1;
@@ -1,17 +1,21 @@
1
1
  import React from 'react';
2
+ import { type TextProps } from '@gravity-ui/uikit';
2
3
  import type { MonacoEditorProps } from 'react-monaco-editor/lib/types';
3
4
  import './MonacoInputDialog.css';
4
5
  interface MonacoInputDialogProps {
5
6
  name: string;
6
7
  visible: boolean;
7
8
  value: string;
8
- language?: string;
9
+ language: string;
9
10
  title: string | undefined;
10
11
  fontSize: number | undefined;
11
12
  onChange: (value: string) => void;
12
13
  onClose: () => void;
13
14
  changeMonacoValue: (value: string) => void;
14
15
  MonacoComponent?: React.ComponentType<MonacoEditorProps>;
16
+ headerIconSize: number;
17
+ headerIconIndent: number;
18
+ headerTitleVariant: TextProps['variant'];
15
19
  }
16
20
  export declare const MonacoInputDialog: React.FC<MonacoInputDialogProps>;
17
21
  export {};
@@ -7,7 +7,7 @@ import { MonacoHeader } from './MonacoHeader';
7
7
  import { useMonacoOptions } from './useMonacoOptions';
8
8
  import './MonacoInputDialog.css';
9
9
  const b = block('monaco-input-dialog');
10
- export const MonacoInputDialog = ({ name, value, title, visible, language, onChange, onClose, changeMonacoValue, fontSize, MonacoComponent, }) => {
10
+ export const MonacoInputDialog = ({ name, value, title, visible, language, onChange, onClose, changeMonacoValue, fontSize, MonacoComponent, headerIconSize, headerIconIndent, headerTitleVariant, }) => {
11
11
  const MonacoEditor = useMonaco() || MonacoComponent;
12
12
  const handleClose = React.useCallback(() => {
13
13
  onChange(value);
@@ -21,7 +21,7 @@ export const MonacoInputDialog = ({ name, value, title, visible, language, onCha
21
21
  React.createElement(Dialog.Header, { caption: title, className: b('dialog-header') }),
22
22
  React.createElement(Dialog.Body, null,
23
23
  React.createElement("div", { className: b('container'), "data-qa": `${name}-dialog` },
24
- React.createElement(MonacoHeader, { language: language }),
24
+ React.createElement(MonacoHeader, { language: language, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
25
25
  React.createElement("div", { className: b('editor') },
26
26
  React.createElement(MonacoEditor, { language: language, value: value, onChange: changeMonacoValue, options: options })))),
27
27
  React.createElement(Dialog.Footer, { textButtonApply: i18n('button_cancel'), onClickButtonApply: handleClose })));
@@ -23,6 +23,10 @@
23
23
  .df-table-array__table .g-table__cell {
24
24
  border-bottom: 0px transparent;
25
25
  }
26
+ .df-table-array__column-title {
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ }
26
30
  .df-table-array__row .g-table__cell {
27
31
  border-bottom: 0px transparent;
28
32
  border-top: 1px solid var(--g-color-line-generic);
@@ -62,6 +66,12 @@
62
66
  max-width: 50px;
63
67
  min-width: 50px;
64
68
  }
69
+ .df-table-array__cell-without-limit_arr, .df-table-array__cell-without-limit_obj {
70
+ padding-left: var(--df-table-array-cell-obj-padding-left, var(--g-spacing-half));
71
+ }
72
+ .df-table-array__cell-without-limit_arr > .simple-vertical-accordeon, .df-table-array__cell-without-limit_obj > .simple-vertical-accordeon {
73
+ margin-bottom: var(--df-table-array-cell-obj-simple-vertical-accordeon-margin-bottom, var(--g-spacing-0));
74
+ }
65
75
  .df-table-array__idx {
66
76
  padding-top: var(--df-table-array-idx-padding-top, 6px);
67
77
  }
@@ -44,12 +44,12 @@ export const TableArrayInput = ({ spec, name, arrayInput, input }) => {
44
44
  template: ({ key }) => (React.createElement(Button, { view: "flat-secondary", onClick: () => onItemRemove(key), key: `remove-${key}`, qa: `${name}-item-remove-${key}` },
45
45
  React.createElement(Icon, { data: TrashBin, size: 16 }))),
46
46
  };
47
- const columns = table.map(({ property, label, description }) => ({
47
+ const columns = table.map(({ property, label, description, width }) => ({
48
48
  id: property,
49
49
  name: !description
50
- ? label
51
- : () => (React.createElement(Flex, { gap: 0.5, alignItems: "center" },
52
- label,
50
+ ? () => (React.createElement("div", { className: b('column-title'), style: { minWidth: width, maxWidth: width } }, label))
51
+ : () => (React.createElement(Flex, { gap: 0.5, alignItems: "center", style: { minWidth: width, maxWidth: width } },
52
+ React.createElement("div", { className: b('column-title') }, label),
53
53
  React.createElement(HelpMark, { popoverProps: {
54
54
  placement: COMMON_POPOVER_PLACEMENT,
55
55
  } },
@@ -61,11 +61,11 @@ export const TableArrayInput = ({ spec, name, arrayInput, input }) => {
61
61
  return null;
62
62
  }
63
63
  const preparedEntitySpec = Object.assign(Object.assign({}, entitySpec), { viewSpec: Object.assign(Object.assign({}, entitySpec.viewSpec), { layoutTitle: table.map(({ label }) => label).join(` ${idx + 1} `) + ` ${idx + 1}` }) });
64
- return (React.createElement("div", { className: b('cell', {
64
+ return (React.createElement("div", { className: b(width ? 'cell-without-limit' : 'cell', {
65
65
  bool: isBooleanSpec(preparedEntitySpec),
66
66
  arr: isArraySpec(preparedEntitySpec),
67
67
  obj: isObjectSpec(preparedEntitySpec),
68
- }), key: `${name}.<${key}>.${property}` },
68
+ }), style: { minWidth: width, maxWidth: width }, key: `${name}.<${key}>.${property}` },
69
69
  React.createElement(Controller, { value: (_c = (_b = input.value) === null || _b === void 0 ? void 0 : _b[`<${key}>`]) === null || _c === void 0 ? void 0 : _c[property], spec: preparedEntitySpec, name: `${name}.<${key}>.${property}`, parentOnChange: parentOnChange, parentOnUnmount: noop })));
70
70
  },
71
71
  }));
@@ -18,6 +18,16 @@
18
18
  */
19
19
  /* Border-radius */
20
20
  .df-monaco-base-view {
21
- border: 1px solid var(--g-color-line-generic);
22
21
  width: var(--df-monaco-base-view-width, 550px);
22
+ height: var(--df-monaco-base-view-height, 354px);
23
+ }
24
+ .df-monaco-base-view__container {
25
+ height: calc(100% - 2px);
26
+ display: flex;
27
+ flex-direction: column;
28
+ border: 1px solid var(--g-color-line-generic);
29
+ box-sizing: content-box;
30
+ }
31
+ .df-monaco-base-view__editor {
32
+ flex: 1;
23
33
  }
@@ -8,20 +8,25 @@ import { useMonacoOptions } from '../../Inputs/MonacoInput/useMonacoOptions';
8
8
  import { MonacoViewDialog } from './MonacoViewDialog';
9
9
  import './MonacoBaseView.css';
10
10
  const b = block('monaco-base-view');
11
- const MonacoBaseView = ({ value, spec }) => {
11
+ const MonacoBaseView = ({ value, spec, name }) => {
12
12
  const { monacoParams, layoutTitle } = spec.viewSpec;
13
13
  const MonacoEditor = useMonaco();
14
- const { language, fontSize } = monacoParams !== null && monacoParams !== void 0 ? monacoParams : { language: 'plaintext', fontSize: 12 };
14
+ const { language = 'plaintext', fontSize = 11, headerIconSize = 18, headerIconIndent = 5, headerTitleVariant = 'body-2', headerDialogButtonSize = 'm', headerDialogIconSize = 16, } = monacoParams || {};
15
15
  const options = useMonacoOptions(fontSize, true);
16
16
  const [monacoEditorDialog, setMonacoEditorDialog] = React.useState(false);
17
17
  const handleMonacoEditorDialogClose = React.useCallback(() => setMonacoEditorDialog(false), []);
18
+ const dialogButton = React.useMemo(() => {
19
+ return (React.createElement(Button, { size: headerDialogButtonSize, onClick: () => setMonacoEditorDialog(true), qa: `${name}-open-dialog` },
20
+ React.createElement(Icon, { data: ChevronsExpandUpRight, size: headerDialogIconSize })));
21
+ }, [setMonacoEditorDialog, name, headerDialogButtonSize, headerDialogIconSize]);
18
22
  if (!value || !MonacoEditor) {
19
23
  return null;
20
24
  }
21
25
  return (React.createElement("div", { className: b() },
22
- React.createElement(MonacoHeader, { language: language, editButton: React.createElement(Button, { onClick: () => setMonacoEditorDialog(true) },
23
- React.createElement(Icon, { data: ChevronsExpandUpRight, size: 16 })) }),
24
- React.createElement(MonacoEditor, { language: language, value: value, height: '250', options: options }),
25
- React.createElement(MonacoViewDialog, { title: layoutTitle, fontSize: fontSize, value: value, visible: monacoEditorDialog, language: language, onClose: handleMonacoEditorDialogClose })));
26
+ React.createElement("div", { className: b('container'), "data-qa": name },
27
+ React.createElement(MonacoHeader, { language: language, dialogButton: dialogButton, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
28
+ React.createElement("div", { className: b('editor') },
29
+ React.createElement(MonacoEditor, { language: language, value: value, options: options }))),
30
+ React.createElement(MonacoViewDialog, { title: layoutTitle, fontSize: fontSize, value: value, visible: monacoEditorDialog, language: language, onClose: handleMonacoEditorDialogClose, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant })));
26
31
  };
27
32
  export const MonacoView = (props) => React.createElement(MonacoBaseView, Object.assign({}, props));
@@ -17,11 +17,22 @@
17
17
  }
18
18
  */
19
19
  /* Border-radius */
20
+ .df-monaco-view-dialog {
21
+ width: var(--df-monaco-view-dialog-width, 966px);
22
+ height: var(--df-monaco-view-dialog-height, 804px);
23
+ }
20
24
  .df-monaco-view-dialog .g-dialog-footer {
21
25
  padding: var(--df-monaco-view-dialog-footer-padding, var(--g-spacing-4));
22
26
  }
23
27
  .df-monaco-view-dialog__container {
28
+ height: calc(100% - 2px);
29
+ display: flex;
30
+ flex-direction: column;
24
31
  border: 1px solid var(--g-color-line-generic);
32
+ box-sizing: content-box;
33
+ }
34
+ .df-monaco-view-dialog__editor {
35
+ flex: 1;
25
36
  }
26
37
  .df-monaco-view-dialog__dialog-header {
27
38
  height: var(--df-monaco-view-dialog-header-height, 48px);
@@ -1,12 +1,16 @@
1
1
  import React from 'react';
2
+ import { type TextProps } from '@gravity-ui/uikit';
2
3
  import './MonacoViewDialog.css';
3
4
  interface MonacoViewDialogProps {
4
5
  visible: boolean;
5
6
  value: string;
6
- language?: string;
7
+ language: string;
7
8
  title: string | undefined;
8
9
  fontSize: number | undefined;
9
10
  onClose: () => void;
11
+ headerIconSize: number;
12
+ headerIconIndent: number;
13
+ headerTitleVariant: TextProps['variant'];
10
14
  }
11
15
  export declare const MonacoViewDialog: React.FC<MonacoViewDialogProps>;
12
16
  export {};
@@ -7,7 +7,7 @@ import { MonacoHeader } from '../../Inputs/MonacoInput/MonacoHeader';
7
7
  import { useMonacoOptions } from '../../Inputs/MonacoInput/useMonacoOptions';
8
8
  import './MonacoViewDialog.css';
9
9
  const b = block('monaco-view-dialog');
10
- export const MonacoViewDialog = ({ value, title, visible, language, onClose, fontSize, }) => {
10
+ export const MonacoViewDialog = ({ value, title, visible, language, onClose, fontSize, headerIconSize, headerIconIndent, headerTitleVariant, }) => {
11
11
  const MonacoEditor = useMonaco();
12
12
  const handleClose = React.useCallback(() => {
13
13
  onClose();
@@ -20,7 +20,8 @@ export const MonacoViewDialog = ({ value, title, visible, language, onClose, fon
20
20
  React.createElement(Dialog.Header, { caption: title, className: b('dialog-header') }),
21
21
  React.createElement(Dialog.Body, null,
22
22
  React.createElement("div", { className: b('container') },
23
- React.createElement(MonacoHeader, { language: language }),
24
- React.createElement(MonacoEditor, { language: language, height: "600", width: "900", value: value, options: options }))),
23
+ React.createElement(MonacoHeader, { language: language, headerIconSize: headerIconSize, headerIconIndent: headerIconIndent, headerTitleVariant: headerTitleVariant }),
24
+ React.createElement("div", { className: b('editor') },
25
+ React.createElement(MonacoEditor, { language: language, value: value, options: options })))),
25
26
  React.createElement(Dialog.Footer, { textButtonApply: i18n('button_cancel'), onClickButtonApply: handleClose })));
26
27
  };
@@ -20,6 +20,10 @@
20
20
  .df-table-array-view__table {
21
21
  margin-bottom: var(--df-table-array-view-table-margin-bottom, var(--g-spacing-3));
22
22
  }
23
+ .df-table-array-view__column-title {
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ }
23
27
  .df-table-array-view__cell {
24
28
  max-width: var(--df-table-array-view-cell-min-width, 150px);
25
29
  min-width: var(--df-table-array-view-cell-max-width, 150px);
@@ -33,4 +37,7 @@
33
37
  .df-table-array-view__cell_bool {
34
38
  max-width: 50px;
35
39
  min-width: 50px;
40
+ }
41
+ .df-table-array-view__cell-without-limit_arr > .simple-vertical-accordeon, .df-table-array-view__cell-without-limit_obj > .simple-vertical-accordeon {
42
+ margin-bottom: var(--df-spacing-last-child, var(--g-spacing-0));
36
43
  }
@@ -19,27 +19,27 @@ export const TableArrayView = ({ value = [], spec, name }) => {
19
19
  sticky: 'left',
20
20
  template: (__, idx) => (React.createElement("div", { className: b('idx'), key: `idx-${idx}` }, idx + 1)),
21
21
  };
22
- const columns = table.map(({ property, label, description }) => ({
22
+ const columns = table.map(({ property, label, description, width }) => ({
23
23
  id: property,
24
24
  name: description && showLayoutDescription
25
- ? () => (React.createElement(Flex, { gap: 0.5, alignItems: "center" },
26
- label,
25
+ ? () => (React.createElement(Flex, { gap: 0.5, alignItems: "center", style: { minWidth: width, maxWidth: width } },
26
+ React.createElement("div", { className: b('column-title') }, label),
27
27
  React.createElement(HelpMark, { popoverProps: {
28
28
  placement: COMMON_POPOVER_PLACEMENT,
29
29
  } },
30
30
  React.createElement(HTMLContent, { html: description }))))
31
- : label,
31
+ : () => (React.createElement("div", { className: b('column-title'), style: { minWidth: width, maxWidth: width } }, label)),
32
32
  template: (_, idx) => {
33
33
  var _a;
34
34
  const entitySpec = (_a = items === null || items === void 0 ? void 0 : items.properties) === null || _a === void 0 ? void 0 : _a[property];
35
35
  if (!entitySpec) {
36
36
  return null;
37
37
  }
38
- return (React.createElement("div", { className: b('cell', {
38
+ return (React.createElement("div", { className: b(width ? 'cell-without-limit' : 'cell', {
39
39
  bool: isBooleanSpec(entitySpec),
40
40
  arr: isArraySpec(entitySpec),
41
41
  obj: isObjectSpec(entitySpec),
42
- }), key: `${name}[${idx}].${property}` },
42
+ }), style: { minWidth: width, maxWidth: width }, key: `${name}[${idx}].${property}` },
43
43
  React.createElement(ViewController, { spec: entitySpec, name: `${name}[${idx}].${property}` })));
44
44
  },
45
45
  }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/dynamic-forms",
3
- "version": "5.6.0",
3
+ "version": "5.8.0",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "build/cjs/index.js",