@imposium-hub/components 2.13.7 → 2.14.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 (105) hide show
  1. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.d.ts +9 -0
  2. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js +2 -2
  3. package/dist/cjs/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
  4. package/dist/cjs/components/button-group-field/ButtonGroupField.d.ts +9 -0
  5. package/dist/cjs/components/button-group-field/ButtonGroupField.js +38 -20
  6. package/dist/cjs/components/button-group-field/ButtonGroupField.js.map +1 -1
  7. package/dist/cjs/components/checkbox-field/CheckboxField.d.ts +8 -0
  8. package/dist/cjs/components/checkbox-field/CheckboxField.js +2 -2
  9. package/dist/cjs/components/checkbox-field/CheckboxField.js.map +1 -1
  10. package/dist/cjs/components/color-field/ColorField.d.ts +8 -0
  11. package/dist/cjs/components/color-field/ColorField.js +2 -2
  12. package/dist/cjs/components/color-field/ColorField.js.map +1 -1
  13. package/dist/cjs/components/controlled-list/ControlledList.d.ts +6 -2
  14. package/dist/cjs/components/controlled-list/ControlledList.js +22 -6
  15. package/dist/cjs/components/controlled-list/ControlledList.js.map +1 -1
  16. package/dist/cjs/components/field-wrapper/FieldWrapper.d.ts +11 -0
  17. package/dist/cjs/components/field-wrapper/FieldWrapper.js +25 -6
  18. package/dist/cjs/components/field-wrapper/FieldWrapper.js.map +1 -1
  19. package/dist/cjs/components/number-field/NumberField.d.ts +9 -0
  20. package/dist/cjs/components/number-field/NumberField.js +2 -5
  21. package/dist/cjs/components/number-field/NumberField.js.map +1 -1
  22. package/dist/cjs/components/select-field/SelectField.d.ts +8 -0
  23. package/dist/cjs/components/select-field/SelectField.js +2 -2
  24. package/dist/cjs/components/select-field/SelectField.js.map +1 -1
  25. package/dist/cjs/components/slider-field/SliderField.d.ts +9 -0
  26. package/dist/cjs/components/slider-field/SliderField.js +2 -2
  27. package/dist/cjs/components/slider-field/SliderField.js.map +1 -1
  28. package/dist/cjs/constants/copy.d.ts +3 -0
  29. package/dist/cjs/constants/copy.js +4 -1
  30. package/dist/cjs/constants/copy.js.map +1 -1
  31. package/dist/cjs/constants/icons.d.ts +2 -0
  32. package/dist/cjs/constants/icons.js +3 -1
  33. package/dist/cjs/constants/icons.js.map +1 -1
  34. package/dist/cjs/constants/variables.d.ts +4 -0
  35. package/dist/cjs/constants/variables.js +13 -1
  36. package/dist/cjs/constants/variables.js.map +1 -1
  37. package/dist/cjs/index.d.ts +6 -2
  38. package/dist/cjs/index.js +9 -1
  39. package/dist/cjs/index.js.map +1 -1
  40. package/dist/esm/components/advanced-number-field/AdvancedNumberField.d.ts +9 -0
  41. package/dist/esm/components/advanced-number-field/AdvancedNumberField.js +2 -2
  42. package/dist/esm/components/advanced-number-field/AdvancedNumberField.js.map +1 -1
  43. package/dist/esm/components/button-group-field/ButtonGroupField.d.ts +9 -0
  44. package/dist/esm/components/button-group-field/ButtonGroupField.js +38 -20
  45. package/dist/esm/components/button-group-field/ButtonGroupField.js.map +1 -1
  46. package/dist/esm/components/checkbox-field/CheckboxField.d.ts +8 -0
  47. package/dist/esm/components/checkbox-field/CheckboxField.js +2 -2
  48. package/dist/esm/components/checkbox-field/CheckboxField.js.map +1 -1
  49. package/dist/esm/components/color-field/ColorField.d.ts +8 -0
  50. package/dist/esm/components/color-field/ColorField.js +2 -2
  51. package/dist/esm/components/color-field/ColorField.js.map +1 -1
  52. package/dist/esm/components/controlled-list/ControlledList.d.ts +6 -2
  53. package/dist/esm/components/controlled-list/ControlledList.js +24 -7
  54. package/dist/esm/components/controlled-list/ControlledList.js.map +1 -1
  55. package/dist/esm/components/field-wrapper/FieldWrapper.d.ts +11 -0
  56. package/dist/esm/components/field-wrapper/FieldWrapper.js +24 -6
  57. package/dist/esm/components/field-wrapper/FieldWrapper.js.map +1 -1
  58. package/dist/esm/components/number-field/NumberField.d.ts +9 -0
  59. package/dist/esm/components/number-field/NumberField.js +2 -5
  60. package/dist/esm/components/number-field/NumberField.js.map +1 -1
  61. package/dist/esm/components/select-field/SelectField.d.ts +8 -0
  62. package/dist/esm/components/select-field/SelectField.js +2 -2
  63. package/dist/esm/components/select-field/SelectField.js.map +1 -1
  64. package/dist/esm/components/slider-field/SliderField.d.ts +9 -0
  65. package/dist/esm/components/slider-field/SliderField.js +2 -2
  66. package/dist/esm/components/slider-field/SliderField.js.map +1 -1
  67. package/dist/esm/constants/copy.d.ts +3 -0
  68. package/dist/esm/constants/copy.js +3 -0
  69. package/dist/esm/constants/copy.js.map +1 -1
  70. package/dist/esm/constants/icons.d.ts +2 -0
  71. package/dist/esm/constants/icons.js +4 -2
  72. package/dist/esm/constants/icons.js.map +1 -1
  73. package/dist/esm/constants/variables.d.ts +4 -0
  74. package/dist/esm/constants/variables.js +11 -0
  75. package/dist/esm/constants/variables.js.map +1 -1
  76. package/dist/esm/index.d.ts +6 -2
  77. package/dist/esm/index.js +5 -1
  78. package/dist/esm/index.js.map +1 -1
  79. package/dist/styles.css +130 -13
  80. package/dist/styles.less +369 -209
  81. package/less/components/button.less +5 -1
  82. package/less/components/controlled-list.less +122 -13
  83. package/less/components/dropdown.less +3 -0
  84. package/less/components/font-picker.less +18 -14
  85. package/less/components/form-field.less +224 -182
  86. package/package.json +3 -1
  87. package/src/components/advanced-number-field/AdvancedNumberField.tsx +33 -4
  88. package/src/components/button-group-field/ButtonGroupField.tsx +110 -39
  89. package/src/components/checkbox-field/CheckboxField.tsx +36 -3
  90. package/src/components/color-field/ColorField.tsx +29 -4
  91. package/src/components/config-variable-button/ConfigVariableButton.tsx +144 -0
  92. package/src/components/controlled-list/ControlledList.tsx +68 -14
  93. package/src/components/field-wrapper/FieldWrapper.tsx +80 -6
  94. package/src/components/font-field/FontField.tsx +78 -0
  95. package/src/components/icon-toggle/IconToggle.tsx +63 -0
  96. package/src/components/number-field/NumberField.tsx +34 -8
  97. package/src/components/select-field/SelectField.tsx +29 -4
  98. package/src/components/slider-field/SliderField.tsx +32 -2
  99. package/src/components/text-area-autocomplete/TextAreaAutocomplete.tsx +80 -0
  100. package/src/components/variables-dropdown/VariableDropdown.tsx +98 -0
  101. package/src/constants/copy.ts +4 -0
  102. package/src/constants/fonts.ts +296 -0
  103. package/src/constants/icons.tsx +6 -1
  104. package/src/constants/variables.ts +16 -0
  105. package/src/index.ts +11 -2
@@ -1,6 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import FieldWrapper from '../field-wrapper/FieldWrapper';
3
3
  import { IToolTipConfig, renderTooltip, renderTooltipProps } from '../Tooltip';
4
+ import { getOverrideHandler } from '../../constants/variables';
5
+ import Button from '../button/Button';
6
+ import { ICON_TIMES } from '../../constants/icons';
4
7
 
5
8
  interface IButtonGroupOption {
6
9
  value: string | boolean;
@@ -22,6 +25,15 @@ interface IButtonGroupFieldProps {
22
25
  labelPosition?: string;
23
26
  labelWidth?: string | number;
24
27
  disabled?: boolean;
28
+
29
+ override?: any;
30
+ showCopyPropIds?: boolean;
31
+ propKey?: string;
32
+ setOverride?(e): void;
33
+ removeOverride?(): void;
34
+ inventory?: any;
35
+ onClose?(e: boolean): void;
36
+ activeOverride?: string;
25
37
  }
26
38
 
27
39
  class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
@@ -50,55 +62,114 @@ class ButtonGroupField extends React.PureComponent<IButtonGroupFieldProps> {
50
62
  }
51
63
  };
52
64
 
65
+ public renderRemoveButton() {
66
+ const { removeOverride } = this.props;
67
+ return (
68
+ <div className='item'>
69
+ <div className='buttons'>
70
+ <Button
71
+ style='subtle'
72
+ color='danger'
73
+ onClick={() => removeOverride()}>
74
+ {ICON_TIMES}
75
+ </Button>
76
+ </div>
77
+ </div>
78
+ );
79
+ }
80
+
53
81
  public render = (): JSX.Element => {
54
- const { value, label, options, width, tooltip, info, labelPosition, labelWidth, disabled } =
55
- this.props;
82
+ const {
83
+ options,
84
+ width,
85
+ tooltip,
86
+ info,
87
+ labelPosition,
88
+ labelWidth,
89
+ disabled,
90
+ propKey,
91
+ showCopyPropIds,
92
+ inventory,
93
+ override,
94
+ setOverride,
95
+ onClose,
96
+ onChange,
97
+ activeOverride,
98
+ removeOverride
99
+ } = this.props;
100
+
56
101
  const optionStyle: any = { width: `${100 / options.length}%` };
57
102
 
103
+ const inputField = () => {
104
+ const { hasOverride, previewItem } = getOverrideHandler(propKey, override, inventory);
105
+ const value = hasOverride ? previewItem : this.props.value;
106
+ return (
107
+ <div className={`${hasOverride ? 'override_variable text' : ''}`}>
108
+ <div className='button-group'>
109
+ {options.map((option, i) => {
110
+ const optionKey = option.value;
111
+ const optionLabel = option.label;
112
+ const icon = option.icon ? option.icon : null;
113
+ const tooltipId = `${optionKey}-${i}`;
114
+ const activeOption = optionKey === value;
115
+ const activeClass = activeOption
116
+ ? 'active'
117
+ : disabled
118
+ ? 'disabled'
119
+ : '';
120
+ const onClick = !activeOption
121
+ ? () => {
122
+ onChange(optionKey);
123
+ }
124
+ : null;
125
+
126
+ return (
127
+ <div
128
+ key={`option-${optionKey}`}
129
+ style={optionStyle}
130
+ className={`button-group-option ${activeClass} ${
131
+ hasOverride ? 'disabled' : ''
132
+ }`}
133
+ {...renderTooltipProps(tooltipId, option.tooltip)}
134
+ onClick={
135
+ typeof option.onDoubleClick === 'function'
136
+ ? () =>
137
+ this.handleMultipleClicks(
138
+ onClick,
139
+ option.onDoubleClick
140
+ )
141
+ : onClick
142
+ }>
143
+ {!icon ? optionLabel : icon}
144
+ {renderTooltip(tooltipId, option.tooltip)}
145
+ </div>
146
+ );
147
+ })}
148
+ </div>
149
+ </div>
150
+ );
151
+ };
152
+
58
153
  return (
59
154
  <FieldWrapper
60
155
  customClass='button-group-field'
61
- label={label}
156
+ label={this.props.label}
62
157
  tooltip={tooltip}
63
158
  info={info}
64
159
  labelPosition={labelPosition}
65
160
  width={width}
66
- labelWidth={labelWidth}>
67
- <div className='button-group'>
68
- {options.map((option, i) => {
69
- const optionKey = option.value;
70
- const optionLabel = option.label;
71
- const icon = option.icon ? option.icon : null;
72
- const tooltipId = `${optionKey}-${i}`;
73
- const activeOption = optionKey === value;
74
- const activeClass = activeOption ? 'active' : disabled ? 'disabled' : '';
75
- const onClick = !activeOption
76
- ? () => {
77
- this.props.onChange(optionKey);
78
- }
79
- : null;
80
-
81
- return (
82
- <div
83
- key={`option-${optionKey}`}
84
- style={optionStyle}
85
- className={`button-group-option ${activeClass}`}
86
- {...renderTooltipProps(tooltipId, option.tooltip)}
87
- onClick={
88
- typeof option.onDoubleClick === 'function'
89
- ? () =>
90
- this.handleMultipleClicks(
91
- onClick,
92
- option.onDoubleClick
93
- )
94
- : onClick
95
- }>
96
- {!icon ? optionLabel : icon}
97
- {renderTooltip(tooltipId, option.tooltip)}
98
- </div>
99
- );
100
- })}
101
- </div>
161
+ labelWidth={labelWidth}
162
+ propKey={propKey}
163
+ showCopyPropIds={showCopyPropIds}
164
+ inventory={inventory}
165
+ setOverride={setOverride}
166
+ onClose={onClose}
167
+ activeOverride={activeOverride}
168
+ removeOverride={removeOverride}
169
+ override={override}
170
+ type='text'
171
+ buttonGroup={true}>
172
+ {inputField()}
102
173
  </FieldWrapper>
103
174
  );
104
175
  };
@@ -13,6 +13,15 @@ interface ICheckboxFieldProps {
13
13
  info?: string;
14
14
  labelPosition?: string;
15
15
  labelWidth?: string | number;
16
+
17
+ override?: any;
18
+ showCopyPropIds?: boolean;
19
+ propKey?: string;
20
+ setOverride?(e): void;
21
+ removeOverride?(): void;
22
+ inventory?: any;
23
+ onClose?(e: boolean): void;
24
+ activeOverride?: string;
16
25
  }
17
26
 
18
27
  class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
@@ -28,18 +37,42 @@ class CheckboxField extends React.PureComponent<ICheckboxFieldProps> {
28
37
  }
29
38
 
30
39
  public render() {
31
- const { value, label, width, tooltip, info, labelPosition, labelWidth } = this.props;
40
+ const {
41
+ value,
42
+ width,
43
+ tooltip,
44
+ info,
45
+ labelPosition,
46
+ labelWidth,
47
+ showCopyPropIds,
48
+ propKey,
49
+ override,
50
+ inventory,
51
+ setOverride,
52
+ removeOverride,
53
+ onClose,
54
+ activeOverride
55
+ } = this.props;
32
56
  const icon = value === true ? ICON_CHECK : null;
33
57
 
34
58
  return (
35
59
  <FieldWrapper
36
60
  customClass='checkbox-field'
37
- label={label}
61
+ label={this.props.label}
38
62
  tooltip={tooltip}
39
63
  info={info}
40
64
  labelPosition={labelPosition}
41
65
  labelWidth={labelWidth}
42
- width={width}>
66
+ width={width}
67
+ propKey={propKey}
68
+ showCopyPropIds={showCopyPropIds}
69
+ inventory={inventory}
70
+ setOverride={setOverride}
71
+ onClose={onClose}
72
+ activeOverride={activeOverride}
73
+ removeOverride={removeOverride}
74
+ override={override}
75
+ type='boolean'>
43
76
  <div
44
77
  className='checkbox'
45
78
  onClick={(e) => this.toggle(e)}>
@@ -19,6 +19,15 @@ interface IColorFieldProps {
19
19
  pickerPosition?: string;
20
20
  labelWidth?: string | number;
21
21
  disabled?: boolean;
22
+
23
+ override?: any;
24
+ showCopyPropIds?: boolean;
25
+ propKey?: string;
26
+ setOverride?(e): void;
27
+ removeOverride?(): void;
28
+ inventory?: any;
29
+ onClose?(e: boolean): void;
30
+ activeOverride?: string;
22
31
  }
23
32
 
24
33
  interface IColorFieldState {
@@ -103,7 +112,6 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
103
112
 
104
113
  public render() {
105
114
  const {
106
- label,
107
115
  width,
108
116
  buttons,
109
117
  tooltip,
@@ -114,7 +122,15 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
114
122
  labelPosition,
115
123
  pickerPosition,
116
124
  labelWidth,
117
- disabled
125
+ disabled,
126
+ override,
127
+ showCopyPropIds,
128
+ propKey,
129
+ inventory,
130
+ setOverride,
131
+ removeOverride,
132
+ onClose,
133
+ activeOverride
118
134
  } = this.props;
119
135
  const { pickerOpen } = this.state;
120
136
  const disableAlpha = !enableAlpha;
@@ -141,13 +157,22 @@ class ColorField extends React.PureComponent<IColorFieldProps, IColorFieldState>
141
157
  return (
142
158
  <FieldWrapper
143
159
  customClass='color-field'
144
- label={label}
160
+ label={this.props.label}
145
161
  tooltip={tooltip}
146
162
  buttons={buttons}
147
163
  info={info}
148
164
  labelPosition={labelPosition}
149
165
  labelWidth={labelWidth}
150
- width={width}>
166
+ width={width}
167
+ propKey={propKey}
168
+ showCopyPropIds={showCopyPropIds}
169
+ inventory={inventory}
170
+ setOverride={setOverride}
171
+ onClose={onClose}
172
+ activeOverride={activeOverride}
173
+ removeOverride={removeOverride}
174
+ override={override}
175
+ type='color'>
151
176
  <div style={transparentBg}>
152
177
  <div
153
178
  className='swatch'
@@ -0,0 +1,144 @@
1
+ import React, { useState, useRef } from 'react';
2
+ import { ICON_BRACKET_CURLY } from '../../constants/icons';
3
+ import Button from '../button/Button';
4
+ import ImposiumDropdown from '../dropdown/Dropdown';
5
+ import moize from 'moize';
6
+ import VariableDropDown from '../variables-dropdown/VariableDropdown';
7
+ import { ControlListType } from '../controlled-list/ControlledList';
8
+
9
+ interface IConfigVariableButtonProps {
10
+ type: ControlListType;
11
+ icon?: any;
12
+ inventory: any;
13
+ setOverride?(e): void;
14
+ onClose?(e): void;
15
+ removeOverride?(): void;
16
+ activeOverride?: string;
17
+ }
18
+
19
+ const ConfigVariableButton: React.FC<IConfigVariableButtonProps> = ({
20
+ type,
21
+ inventory,
22
+ setOverride,
23
+ onClose,
24
+ activeOverride,
25
+ removeOverride,
26
+ icon
27
+ }) => {
28
+ const [show, setShow] = useState(false);
29
+ const variablesButtonRef = useRef();
30
+
31
+ const close = () => {
32
+ setShow(!show);
33
+ if (onClose) {
34
+ onClose(!show);
35
+ }
36
+ };
37
+
38
+ const setOverrideHandler = (o) => {
39
+ setOverride(o);
40
+ setShow(!show);
41
+ };
42
+
43
+ const removeOverrideHandler = () => {
44
+ removeOverride();
45
+ setShow(!show);
46
+ };
47
+
48
+ return (
49
+ <>
50
+ <Button
51
+ tooltip='Configure Variables'
52
+ customClass={icon ? 'icon-toggle' : ''}
53
+ onClick={() => {
54
+ close();
55
+ }}
56
+ buttonRef={variablesButtonRef}
57
+ size='small'
58
+ style='subtle'>
59
+ {ICON_BRACKET_CURLY}
60
+ </Button>
61
+
62
+ <ImposiumDropdown
63
+ key='variables-dropdown'
64
+ position='bottomleft'
65
+ show={show}
66
+ toggleRef={variablesButtonRef}
67
+ customClass='variables'
68
+ onOutsideClick={() => close()}>
69
+ <VariableDropDown
70
+ returnVariables={show}
71
+ type={type}
72
+ inventory={inventory}
73
+ setOverride={setOverrideHandler}
74
+ removeOverride={removeOverrideHandler}
75
+ activeOverride={activeOverride}
76
+ />
77
+ </ImposiumDropdown>
78
+ </>
79
+ );
80
+ };
81
+
82
+ const mGetConfigVariableButton = (
83
+ enabled,
84
+ type,
85
+ inventory,
86
+ setOverride,
87
+ onClose,
88
+ icon,
89
+ activeOverride,
90
+ removeOverride
91
+ ) => {
92
+ if (enabled || activeOverride !== undefined) {
93
+ return (
94
+ <ConfigVariableButton
95
+ type={type}
96
+ inventory={inventory}
97
+ setOverride={(o) => setOverride(o)}
98
+ onClose={(o) => {
99
+ if (enabled) onClose(o);
100
+ }}
101
+ icon={icon}
102
+ activeOverride={activeOverride}
103
+ removeOverride={removeOverride}
104
+ />
105
+ );
106
+ } else {
107
+ return null;
108
+ }
109
+ };
110
+
111
+ export const getConfigVariableButton = moize(mGetConfigVariableButton);
112
+
113
+ export const fieldLabel = (
114
+ labelText,
115
+ propKey,
116
+ showCopyPropIds,
117
+ type: string,
118
+ inventory,
119
+ setOverride,
120
+ onClose,
121
+ activeOverride,
122
+ removeOverride,
123
+ icon?
124
+ ) => {
125
+ const label = propKey ? (
126
+ <span>
127
+ {labelText}
128
+ {getConfigVariableButton(
129
+ showCopyPropIds,
130
+ type,
131
+ inventory,
132
+ (o) => setOverride(o),
133
+ (o) => onClose(o),
134
+ icon,
135
+ activeOverride,
136
+ removeOverride
137
+ )}
138
+ </span>
139
+ ) : (
140
+ labelText
141
+ );
142
+
143
+ return label;
144
+ };
@@ -1,17 +1,23 @@
1
1
  import * as React from 'react';
2
2
  import Button from '../button/Button';
3
- import { ICON_TIMES } from '../../constants/icons';
3
+ import { ICON_BRACKET_CURLY, ICON_CHECK, ICON_TIMES } from '../../constants/icons';
4
+
5
+ export type ControlListType = 'text' | 'number' | 'color' | 'textarea' | 'boolean' | 'icon';
4
6
 
5
7
  interface IControlledListProps {
6
8
  items?: any[];
7
9
  removable?: boolean;
8
10
  onRemove?(index): void;
11
+ type?: ControlListType;
12
+ content?: any;
13
+ propKey?: string;
14
+ previewMultiplier?: number;
9
15
  }
10
16
 
11
17
  class ControlledList extends React.PureComponent<IControlledListProps> {
12
- private inputRef: any;
13
-
14
- private submitHandler: any;
18
+ constructor(props: IControlledListProps) {
19
+ super(props);
20
+ }
15
21
 
16
22
  public renderRemoveButton(index) {
17
23
  const { removable } = this.props;
@@ -31,19 +37,67 @@ class ControlledList extends React.PureComponent<IControlledListProps> {
31
37
  }
32
38
 
33
39
  public render() {
34
- const { items } = this.props;
40
+ const { items, type, content, previewMultiplier } = this.props;
35
41
  let buttons: JSX.Element[];
36
-
37
42
  if (items) {
38
43
  buttons = items.map((item, i) => {
39
- return (
40
- <div
41
- className='item'
42
- key={`item-${i}`}>
43
- {item}
44
- {this.renderRemoveButton(i)}
45
- </div>
46
- );
44
+ switch (type) {
45
+ case 'text':
46
+ case 'number':
47
+ const previewValue =
48
+ typeof item === 'number' ? `${item * previewMultiplier}` : item;
49
+ return (
50
+ <div
51
+ className='item'
52
+ key={`item-${i}`}>
53
+ <input
54
+ type='text'
55
+ value={
56
+ previewValue ? `{{ ${previewValue} }}` : 'PREVIEW NOT SET'
57
+ }
58
+ readOnly
59
+ />
60
+ </div>
61
+ );
62
+ case 'textarea':
63
+ return (
64
+ <div
65
+ className='item textarea rta'
66
+ key={`item-${i}`}>
67
+ <textarea
68
+ className='rta__textarea'
69
+ value={item}
70
+ disabled={true}
71
+ />
72
+ </div>
73
+ );
74
+ case 'boolean':
75
+ const icon = content ? ICON_BRACKET_CURLY : item ? ICON_CHECK : null;
76
+ return (
77
+ <div
78
+ className={`item ${content ? 'icon-toggle' : 'checkbox'}`}
79
+ key={`item-${i}`}>
80
+ {icon}
81
+ </div>
82
+ );
83
+ case 'color':
84
+ return (
85
+ <div
86
+ className='item color'
87
+ key={`item-${i}`}
88
+ style={{ backgroundColor: item }}
89
+ />
90
+ );
91
+ default:
92
+ return (
93
+ <div
94
+ className='item'
95
+ key={`item-${i}`}>
96
+ {item}
97
+ {this.renderRemoveButton(i)}
98
+ </div>
99
+ );
100
+ }
47
101
  });
48
102
  }
49
103
 
@@ -3,6 +3,9 @@ import { generateUUID } from '../../Util';
3
3
  import { renderTooltipProps, renderTooltip, IToolTipConfig } from '../Tooltip';
4
4
  import { ICON_TIMES_CIRCLE, ICON_INFO_CIRCLE } from '../../constants/icons';
5
5
  import Button from '../button/Button';
6
+ import { fieldLabel } from '../config-variable-button/ConfigVariableButton';
7
+ import ControlledList from '../controlled-list/ControlledList';
8
+ import { getOverrideHandler } from '../../constants/variables';
6
9
 
7
10
  interface IFieldWrapperProps {
8
11
  buttons?: any;
@@ -15,6 +18,20 @@ interface IFieldWrapperProps {
15
18
  labelPosition?: string;
16
19
  labelWidth?: string | number;
17
20
  header?: boolean;
21
+
22
+ type?: any;
23
+ override?: any;
24
+ showCopyPropIds?: boolean;
25
+ propKey?: string;
26
+ setOverride?(e): void;
27
+ removeOverride?(): void;
28
+ inventory?: any;
29
+ onClose?(e: boolean): void;
30
+ activeOverride?: string;
31
+
32
+ buttonGroup?: boolean;
33
+
34
+ previewMultiplier?: number;
18
35
  }
19
36
 
20
37
  interface IFieldWrapperState {
@@ -43,17 +60,44 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
43
60
  }
44
61
 
45
62
  private getLabelClass() {
46
- if (!this.props.label) {
63
+ const { propKey, label, labelPosition } = this.props;
64
+
65
+ if (!label && propKey) {
66
+ return 'label-left';
67
+ } else if (!label) {
47
68
  return 'no-label';
48
69
  } else {
49
- const labelPos = this.props.labelPosition ? this.props.labelPosition : 'left';
70
+ const labelPos = labelPosition ? labelPosition : 'left';
50
71
  return `label-${labelPos}`;
51
72
  }
52
73
  }
53
74
 
54
75
  private renderLabel() {
55
76
  const { showInfo } = this.state;
56
- const { info, label, labelWidth } = this.props;
77
+ const {
78
+ info,
79
+ labelWidth,
80
+ propKey,
81
+ showCopyPropIds,
82
+ inventory,
83
+ setOverride,
84
+ onClose,
85
+ activeOverride,
86
+ removeOverride,
87
+ type
88
+ } = this.props;
89
+
90
+ const label = fieldLabel(
91
+ this.props.label,
92
+ propKey,
93
+ showCopyPropIds,
94
+ type,
95
+ inventory,
96
+ (o) => setOverride(o),
97
+ (o) => onClose(o),
98
+ activeOverride,
99
+ () => removeOverride()
100
+ );
57
101
 
58
102
  const iconInfo = showInfo ? ICON_TIMES_CIRCLE : ICON_INFO_CIRCLE;
59
103
  const style = {};
@@ -88,9 +132,39 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
88
132
  }
89
133
 
90
134
  public render() {
91
- const { label, width, customClass, header } = this.props;
135
+ const {
136
+ label,
137
+ width,
138
+ header,
139
+ propKey,
140
+ override,
141
+ inventory,
142
+ type,
143
+ customClass,
144
+ buttonGroup,
145
+ previewMultiplier
146
+ } = this.props;
92
147
  const labelJSX = this.renderLabel();
93
148
 
149
+ const { hasOverride, previewItem } = getOverrideHandler(propKey, override, inventory);
150
+
151
+ const className = hasOverride ? `${customClass} override_variable ${type}` : customClass;
152
+
153
+ const children = () => {
154
+ if (hasOverride && !buttonGroup) {
155
+ return (
156
+ <ControlledList
157
+ items={[previewItem]}
158
+ removable={true}
159
+ type={type}
160
+ previewMultiplier={previewMultiplier}
161
+ />
162
+ );
163
+ } else {
164
+ return this.props.children;
165
+ }
166
+ };
167
+
94
168
  const style = {};
95
169
  let fieldProps = {};
96
170
  if (!label) {
@@ -104,13 +178,13 @@ class FieldWrapper extends React.PureComponent<IFieldWrapperProps, IFieldWrapper
104
178
  <>
105
179
  {header && this.renderButtons()}
106
180
  <div
107
- className={`form-field ${customClass} ${this.getLabelClass()}`}
181
+ className={`form-field ${className} ${this.getLabelClass()}`}
108
182
  style={style}>
109
183
  {labelJSX}
110
184
  <div
111
185
  className={`form-field-content ${this.getLabelClass()}`}
112
186
  {...fieldProps}>
113
- {this.props.children}
187
+ {children()}
114
188
  {!header && this.renderButtons()}
115
189
  </div>
116
190
  {renderTooltip(this.tooltipId, this.props.tooltip)}