@pie-lib/config-ui 11.30.3-next.0 → 11.30.3-next.162

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 (120) hide show
  1. package/CHANGELOG.md +19 -67
  2. package/esm/package.json +3 -0
  3. package/lib/alert-dialog.js +35 -42
  4. package/lib/alert-dialog.js.map +1 -1
  5. package/lib/checkbox.js +56 -71
  6. package/lib/checkbox.js.map +1 -1
  7. package/lib/choice-configuration/feedback-menu.js +29 -64
  8. package/lib/choice-configuration/feedback-menu.js.map +1 -1
  9. package/lib/choice-configuration/index.js +202 -262
  10. package/lib/choice-configuration/index.js.map +1 -1
  11. package/lib/choice-utils.js +6 -18
  12. package/lib/choice-utils.js.map +1 -1
  13. package/lib/feedback-config/feedback-selector.js +79 -115
  14. package/lib/feedback-config/feedback-selector.js.map +1 -1
  15. package/lib/feedback-config/group.js +26 -40
  16. package/lib/feedback-config/group.js.map +1 -1
  17. package/lib/feedback-config/index.js +47 -90
  18. package/lib/feedback-config/index.js.map +1 -1
  19. package/lib/form-section.js +31 -33
  20. package/lib/form-section.js.map +1 -1
  21. package/lib/help.js +39 -80
  22. package/lib/help.js.map +1 -1
  23. package/lib/index.js +1 -31
  24. package/lib/index.js.map +1 -1
  25. package/lib/input.js +21 -54
  26. package/lib/input.js.map +1 -1
  27. package/lib/inputs.js +61 -95
  28. package/lib/inputs.js.map +1 -1
  29. package/lib/langs.js +58 -101
  30. package/lib/langs.js.map +1 -1
  31. package/lib/layout/config-layout.js +40 -70
  32. package/lib/layout/config-layout.js.map +1 -1
  33. package/lib/layout/index.js +0 -3
  34. package/lib/layout/index.js.map +1 -1
  35. package/lib/layout/layout-contents.js +72 -103
  36. package/lib/layout/layout-contents.js.map +1 -1
  37. package/lib/layout/settings-box.js +27 -56
  38. package/lib/layout/settings-box.js.map +1 -1
  39. package/lib/mui-box/index.js +41 -57
  40. package/lib/mui-box/index.js.map +1 -1
  41. package/lib/number-text-field-custom.js +79 -161
  42. package/lib/number-text-field-custom.js.map +1 -1
  43. package/lib/number-text-field.js +80 -114
  44. package/lib/number-text-field.js.map +1 -1
  45. package/lib/radio-with-label.js +30 -31
  46. package/lib/radio-with-label.js.map +1 -1
  47. package/lib/settings/display-size.js +16 -32
  48. package/lib/settings/display-size.js.map +1 -1
  49. package/lib/settings/index.js +14 -47
  50. package/lib/settings/index.js.map +1 -1
  51. package/lib/settings/panel.js +159 -229
  52. package/lib/settings/panel.js.map +1 -1
  53. package/lib/settings/settings-radio-label.js +28 -30
  54. package/lib/settings/settings-radio-label.js.map +1 -1
  55. package/lib/settings/toggle.js +35 -46
  56. package/lib/settings/toggle.js.map +1 -1
  57. package/lib/tabs/index.js +22 -57
  58. package/lib/tabs/index.js.map +1 -1
  59. package/lib/tags-input/index.js +50 -99
  60. package/lib/tags-input/index.js.map +1 -1
  61. package/lib/two-choice.js +46 -90
  62. package/lib/two-choice.js.map +1 -1
  63. package/lib/with-stateful-model.js +8 -31
  64. package/lib/with-stateful-model.js.map +1 -1
  65. package/package.json +20 -12
  66. package/src/__tests__/alert-dialog.test.jsx +283 -0
  67. package/src/__tests__/checkbox.test.jsx +249 -0
  68. package/src/__tests__/form-section.test.jsx +334 -0
  69. package/src/__tests__/help.test.jsx +184 -0
  70. package/src/__tests__/input.test.jsx +192 -0
  71. package/src/__tests__/langs.test.jsx +435 -15
  72. package/src/__tests__/number-text-field-custom.test.jsx +438 -0
  73. package/src/__tests__/number-text-field.test.jsx +295 -102
  74. package/src/__tests__/radio-with-label.test.jsx +259 -0
  75. package/src/__tests__/settings-panel.test.js +66 -83
  76. package/src/__tests__/settings.test.jsx +515 -0
  77. package/src/__tests__/tabs.test.jsx +193 -0
  78. package/src/__tests__/two-choice.test.js +104 -18
  79. package/src/__tests__/with-stateful-model.test.jsx +145 -0
  80. package/src/alert-dialog.jsx +21 -19
  81. package/src/checkbox.jsx +42 -46
  82. package/src/choice-configuration/__tests__/feedback-menu.test.jsx +157 -4
  83. package/src/choice-configuration/__tests__/index.test.jsx +198 -56
  84. package/src/choice-configuration/feedback-menu.jsx +6 -6
  85. package/src/choice-configuration/index.jsx +201 -196
  86. package/src/feedback-config/__tests__/feedback-config.test.jsx +130 -60
  87. package/src/feedback-config/__tests__/feedback-selector.test.jsx +87 -40
  88. package/src/feedback-config/feedback-selector.jsx +52 -53
  89. package/src/feedback-config/group.jsx +21 -22
  90. package/src/feedback-config/index.jsx +27 -29
  91. package/src/form-section.jsx +26 -18
  92. package/src/help.jsx +20 -28
  93. package/src/input.jsx +1 -1
  94. package/src/inputs.jsx +34 -50
  95. package/src/langs.jsx +41 -46
  96. package/src/layout/__tests__/config.layout.test.jsx +55 -38
  97. package/src/layout/config-layout.jsx +38 -32
  98. package/src/layout/layout-contents.jsx +38 -39
  99. package/src/layout/settings-box.jsx +16 -19
  100. package/src/mui-box/index.jsx +35 -43
  101. package/src/number-text-field-custom.jsx +30 -36
  102. package/src/number-text-field.jsx +45 -29
  103. package/src/radio-with-label.jsx +25 -13
  104. package/src/settings/display-size.jsx +12 -11
  105. package/src/settings/panel.jsx +97 -91
  106. package/src/settings/settings-radio-label.jsx +25 -13
  107. package/src/settings/toggle.jsx +30 -29
  108. package/src/tabs/index.jsx +8 -8
  109. package/src/tags-input/__tests__/index.test.jsx +88 -37
  110. package/src/tags-input/index.jsx +35 -38
  111. package/src/two-choice.jsx +15 -19
  112. package/src/__tests__/__snapshots__/langs.test.jsx.snap +0 -32
  113. package/src/__tests__/__snapshots__/settings-panel.test.js.snap +0 -115
  114. package/src/__tests__/__snapshots__/two-choice.test.js.snap +0 -171
  115. package/src/choice-configuration/__tests__/__snapshots__/feedback-menu.test.jsx.snap +0 -51
  116. package/src/choice-configuration/__tests__/__snapshots__/index.test.jsx.snap +0 -519
  117. package/src/feedback-config/__tests__/__snapshots__/feedback-config.test.jsx.snap +0 -27
  118. package/src/feedback-config/__tests__/__snapshots__/feedback-selector.test.jsx.snap +0 -38
  119. package/src/layout/__tests__/__snapshots__/config.layout.test.jsx.snap +0 -59
  120. package/src/tags-input/__tests__/__snapshots__/index.test.jsx.snap +0 -170
@@ -1,61 +1,53 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { withStyles } from '@material-ui/core/styles';
3
+ import { styled } from '@mui/material/styles';
4
4
  import debug from 'debug';
5
- import classNames from 'classnames';
6
5
 
7
6
  const log = debug('pie-elements:config-ui:mui-box');
8
7
 
9
- const MuiBox = withStyles((theme) => {
10
- const light = theme.palette.type === 'light';
8
+ const StyledMuiBox = styled('div')(({ theme, focused }) => {
9
+ const light = theme.palette.mode === 'light';
11
10
  const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';
12
11
 
13
- log(theme.palette.primary[theme.palette.type || 'light']);
12
+ log(theme.palette.primary[theme.palette.mode || 'light']);
14
13
 
15
14
  return {
16
- muiBox: {
17
- paddingTop: theme.spacing.unit,
18
- paddingBottom: theme.spacing.unit,
19
- position: 'relative',
20
- '&:before': {
21
- left: 0,
22
- right: 0,
23
- bottom: 0,
24
- height: '1px',
25
- content: '""',
26
- position: 'absolute',
27
- transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
28
- pointerEvents: 'none',
29
- backgroundColor: bottomLineColor,
30
- },
31
- '&:hover:before': {
32
- height: '2px',
33
- },
34
- '&:after': {
35
- left: 0,
36
- right: 0,
37
- bottom: 0,
38
- height: '2px',
39
- content: '""',
40
- position: 'absolute',
41
- transform: 'scaleX(0)',
42
- transition: 'transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',
43
- pointerEvents: 'none',
44
- backgroundColor: theme.palette.primary[theme.palette.type], //'#304ffe'
45
- },
15
+ paddingTop: theme.spacing(1),
16
+ paddingBottom: theme.spacing(1),
17
+ position: 'relative',
18
+ '&:before': {
19
+ left: 0,
20
+ right: 0,
21
+ bottom: 0,
22
+ height: '1px',
23
+ content: '""',
24
+ position: 'absolute',
25
+ transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
26
+ pointerEvents: 'none',
27
+ backgroundColor: bottomLineColor,
46
28
  },
47
- focused: {
48
- '&:after': {
49
- transform: 'scaleX(1)',
50
- },
29
+ '&:hover:before': {
30
+ height: '2px',
31
+ },
32
+ '&:after': {
33
+ left: 0,
34
+ right: 0,
35
+ bottom: 0,
36
+ height: '2px',
37
+ content: '""',
38
+ position: 'absolute',
39
+ transform: focused ? 'scaleX(1)' : 'scaleX(0)',
40
+ transition: 'transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms',
41
+ pointerEvents: 'none',
42
+ backgroundColor: theme.palette.primary[theme.palette.mode], //'#304ffe'
51
43
  },
52
44
  };
53
- })(({ children, classes, focused }) => {
54
- const names = classNames(classes.muiBox, focused && classes.focused);
55
-
56
- return <div className={names}>{children}</div>;
57
45
  });
58
46
 
47
+ const MuiBox = ({ children, focused }) => {
48
+ return <StyledMuiBox focused={focused}>{children}</StyledMuiBox>;
49
+ };
50
+
59
51
  MuiBox.propTypes = {
60
52
  children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,
61
53
  focused: PropTypes.bool.isRequired,
@@ -1,33 +1,31 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import TextField from '@material-ui/core/TextField';
4
- import classNames from 'classnames';
5
- import { withStyles } from '@material-ui/core/styles';
3
+ import TextField from '@mui/material/TextField';
4
+ import { styled } from '@mui/material/styles';
6
5
  import isFinite from 'lodash/isFinite';
7
- import IconButton from '@material-ui/core/IconButton';
8
- import InputAdornment from '@material-ui/core/InputAdornment';
9
- import Remove from '@material-ui/icons/Remove';
10
- import Add from '@material-ui/icons/Add';
6
+ import IconButton from '@mui/material/IconButton';
7
+ import InputAdornment from '@mui/material/InputAdornment';
8
+ import Remove from '@mui/icons-material/Remove';
9
+ import Add from '@mui/icons-material/Add';
11
10
  import * as math from 'mathjs';
12
11
 
13
- const styles = () => ({
14
- input: {
15
- '& input[type=number]': {
16
- '-moz-appearance': 'textfield',
17
- },
18
- '& input[type=number]::-webkit-outer-spin-button': {
19
- '-webkit-appearance': 'none',
20
- margin: 0,
21
- },
22
- '& input[type=number]::-webkit-inner-spin-button': {
23
- '-webkit-appearance': 'none',
24
- margin: 0,
25
- },
12
+ const StyledTextField = styled(TextField)(() => ({
13
+ '& input[type=number]': {
14
+ MozAppearance: 'textfield',
26
15
  },
27
- iconButton: {
28
- padding: '2px',
16
+ '& input[type=number]::-webkit-outer-spin-button': {
17
+ WebkitAppearance: 'none',
18
+ margin: 0,
29
19
  },
30
- });
20
+ '& input[type=number]::-webkit-inner-spin-button': {
21
+ WebkitAppearance: 'none',
22
+ margin: 0,
23
+ },
24
+ }));
25
+
26
+ const StyledIconButton = styled(IconButton)(() => ({
27
+ padding: '2px',
28
+ }));
31
29
 
32
30
  const fallbackNumber = (min, max) => {
33
31
  if (!isFinite(min) && !isFinite(max)) {
@@ -45,7 +43,6 @@ const fallbackNumber = (min, max) => {
45
43
 
46
44
  export class NumberTextFieldCustom extends React.Component {
47
45
  static propTypes = {
48
- classes: PropTypes.object.isRequired,
49
46
  className: PropTypes.string,
50
47
  customValues: PropTypes.array,
51
48
  disabled: PropTypes.bool,
@@ -242,7 +239,6 @@ export class NumberTextFieldCustom extends React.Component {
242
239
  render() {
243
240
  const {
244
241
  className,
245
- classes,
246
242
  label,
247
243
  disabled,
248
244
  error,
@@ -257,7 +253,7 @@ export class NumberTextFieldCustom extends React.Component {
257
253
  type = 'number',
258
254
  } = this.props;
259
255
  const { value } = this.state;
260
- const names = classNames(className, classes.input);
256
+ const names = className;
261
257
  //Logic to disable the increment and decrement buttons
262
258
  let disabledStart = false;
263
259
  let disabledEnd = false;
@@ -270,7 +266,7 @@ export class NumberTextFieldCustom extends React.Component {
270
266
  }
271
267
 
272
268
  return (
273
- <TextField
269
+ <StyledTextField
274
270
  variant={variant}
275
271
  inputRef={(ref) => (this.inputRef = ref)}
276
272
  disabled={disabled}
@@ -303,24 +299,22 @@ export class NumberTextFieldCustom extends React.Component {
303
299
  disableUnderline: disableUnderline,
304
300
  startAdornment: (
305
301
  <InputAdornment position="start">
306
- <IconButton
307
- className={classes.iconButton}
302
+ <StyledIconButton
308
303
  disabled={disabled ? disabled : disabledStart}
309
304
  onClick={(e) => this.changeValue(e, -1, true)}
310
- >
305
+ size="large">
311
306
  <Remove fontSize="small" />
312
- </IconButton>
307
+ </StyledIconButton>
313
308
  </InputAdornment>
314
309
  ),
315
310
  endAdornment: (
316
311
  <InputAdornment position="end">
317
- <IconButton
318
- className={classes.iconButton}
312
+ <StyledIconButton
319
313
  disabled={disabled ? disabled : disabledEnd}
320
314
  onClick={(e) => this.changeValue(e, 1, true)}
321
- >
315
+ size="large">
322
316
  <Add fontSize="small" />
323
- </IconButton>
317
+ </StyledIconButton>
324
318
  </InputAdornment>
325
319
  ),
326
320
  }}
@@ -334,4 +328,4 @@ export class NumberTextFieldCustom extends React.Component {
334
328
  }
335
329
  }
336
330
 
337
- export default withStyles(styles)(NumberTextFieldCustom);
331
+ export default NumberTextFieldCustom;
@@ -1,21 +1,39 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
- import TextField from '@material-ui/core/TextField';
4
- import classNames from 'classnames';
5
- import { withStyles } from '@material-ui/core/styles';
3
+ import TextField from '@mui/material/TextField';
4
+ import { styled } from '@mui/material/styles';
6
5
  import debug from 'debug';
7
6
  import isFinite from 'lodash/isFinite';
8
- import InputAdornment from '@material-ui/core/InputAdornment';
7
+ import InputAdornment from '@mui/material/InputAdornment';
9
8
  const log = debug('@pie-lib:config-ui:number-text-field');
10
9
 
11
- const styles = (theme) => ({
12
- root: {
13
- marginRight: theme.spacing.unit,
14
- '& label': {
15
- width: 'max-content',
10
+ const StyledTextField = styled(TextField)(({ theme }) => ({
11
+ marginRight: theme.spacing(1),
12
+ '& .MuiInputLabel-root': {
13
+ width: 'auto',
14
+ minWidth: 'max-content',
15
+ maxWidth: 'none',
16
+ whiteSpace: 'nowrap',
17
+ overflow: 'visible',
18
+ transform: 'translate(0, 8px) scale(0.75)',
19
+ transformOrigin: 'top left',
20
+ position: 'relative',
21
+ },
22
+ '& .MuiInputBase-root, & .MuiInput-root, & .MuiFilledInput-root, & .MuiOutlinedInput-root': {
23
+ height: 'auto',
24
+ minHeight: 'auto',
25
+ },
26
+ '& .MuiInputBase-input': {
27
+ height: 'auto',
28
+ minHeight: 'auto',
29
+ padding: '8px 12px',
30
+ },
31
+ '& .MuiInput-root, & .MuiFilledInput-root': {
32
+ '&:before, &:after, &:hover:not(.Mui-disabled):before': {
33
+ display: 'none',
16
34
  },
17
35
  },
18
- });
36
+ }));
19
37
 
20
38
  const fallbackNumber = (min, max) => {
21
39
  if (!isFinite(min) && !isFinite(max)) {
@@ -33,7 +51,6 @@ const fallbackNumber = (min, max) => {
33
51
  export class NumberTextField extends React.Component {
34
52
  static propTypes = {
35
53
  disabled: PropTypes.bool,
36
- classes: PropTypes.object.isRequired,
37
54
  className: PropTypes.string,
38
55
  inputClassName: PropTypes.string,
39
56
  onChange: PropTypes.func.isRequired,
@@ -146,7 +163,6 @@ export class NumberTextField extends React.Component {
146
163
  render() {
147
164
  const {
148
165
  className,
149
- classes,
150
166
  label,
151
167
  disabled,
152
168
  suffix,
@@ -157,41 +173,41 @@ export class NumberTextField extends React.Component {
157
173
  showErrorWhenOutsideRange,
158
174
  variant,
159
175
  } = this.props;
160
- const names = classNames(classes.root, className);
161
176
 
162
177
  const error = showErrorWhenOutsideRange && this.getError();
163
178
  return (
164
- <TextField
165
- variant={variant || 'standard'}
179
+ <StyledTextField
180
+ variant={disableUnderline ? 'filled' : (variant || 'standard')}
166
181
  inputRef={(ref) => {
167
182
  this.inputRef = ref;
168
183
  }}
169
184
  disabled={disabled}
170
185
  label={label}
186
+ InputLabelProps={{
187
+ shrink: true,
188
+ }}
171
189
  value={this.state.value}
172
190
  error={!!error}
173
191
  helperText={error}
174
192
  onChange={this.onChange}
175
193
  onBlur={this.onBlur}
176
- onKeyPress={(e) => {
194
+ onKeyDown={(e) => {
177
195
  // once the Enter key is pressed, we force input blur
178
196
  if (e.key === 'Enter' && this.inputRef) {
179
197
  this.inputRef.blur();
180
198
  }
181
199
  }}
182
200
  type="number"
183
- className={names}
184
- InputLabelProps={{
185
- shrink: true,
186
- }}
187
- InputProps={{
188
- endAdornment: suffix && <InputAdornment position="end">{suffix}</InputAdornment>,
189
- className: inputClassName,
190
- disableUnderline: disableUnderline,
191
- }}
192
- inputProps={{
193
- min,
194
- max,
201
+ className={className}
202
+ slotProps={{
203
+ input: {
204
+ endAdornment: suffix && <InputAdornment position="end">{suffix}</InputAdornment>,
205
+ className: inputClassName,
206
+ inputProps: {
207
+ min,
208
+ max,
209
+ },
210
+ },
195
211
  }}
196
212
  margin="normal"
197
213
  />
@@ -199,4 +215,4 @@ export class NumberTextField extends React.Component {
199
215
  }
200
216
  }
201
217
 
202
- export default withStyles(styles)(NumberTextField);
218
+ export default NumberTextField;
@@ -1,22 +1,34 @@
1
- import FormControlLabel from '@material-ui/core/FormControlLabel';
2
- import Radio from '@material-ui/core/Radio';
1
+ import FormControlLabel from '@mui/material/FormControlLabel';
2
+ import Radio from '@mui/material/Radio';
3
3
  import React from 'react';
4
- import { withStyles } from '@material-ui/core/styles';
4
+ import PropTypes from 'prop-types';
5
+ import { styled } from '@mui/material/styles';
5
6
  import { color } from '@pie-lib/render-ui';
6
7
 
7
- export default withStyles({
8
- label: {
8
+ const StyledFormControlLabel = styled(FormControlLabel)(() => ({
9
+ '& .MuiFormControlLabel-label': {
9
10
  left: '-5px',
10
11
  position: 'relative',
11
12
  },
12
- customColor: {
13
- color: `${color.tertiary()} !important`,
14
- },
15
- })(({ label, value, checked, onChange, classes }) => (
16
- <FormControlLabel
13
+ }));
14
+
15
+ const StyledRadio = styled(Radio)(() => ({
16
+ color: `${color.tertiary()} !important`,
17
+ }));
18
+
19
+ const RadioWithLabel = ({ label, value, checked, onChange }) => (
20
+ <StyledFormControlLabel
17
21
  value={value}
18
- classes={{ label: classes.label }}
19
- control={<Radio className={classes.customColor} checked={checked} onChange={onChange} />}
22
+ control={<StyledRadio checked={checked} onChange={onChange} />}
20
23
  label={label}
21
24
  />
22
- ));
25
+ );
26
+
27
+ RadioWithLabel.propTypes = {
28
+ label: PropTypes.string,
29
+ value: PropTypes.string,
30
+ checked: PropTypes.bool,
31
+ onChange: PropTypes.func,
32
+ };
33
+
34
+ export default RadioWithLabel;
@@ -1,22 +1,23 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import Typography from '@material-ui/core/Typography';
4
- import { withStyles } from '@material-ui/core/styles';
3
+ import Typography from '@mui/material/Typography';
4
+ import { styled } from '@mui/material/styles';
5
5
  import NumberTextField from '../number-text-field';
6
6
 
7
- const DisplaySize = withStyles((theme) => ({
8
- displaySize: {
9
- display: 'flex',
10
- paddingTop: theme.spacing.unit,
11
- },
12
- }))(({ size, label, classes, onChange }) => {
7
+ const StyledDisplaySize = styled('div')(({ theme }) => ({
8
+ display: 'flex',
9
+ paddingTop: theme.spacing(1),
10
+ }));
11
+
12
+ const DisplaySize = ({ size, label, onChange }) => {
13
13
  const updateSize = (key, v) => {
14
14
  onChange({ ...size, [key]: v });
15
15
  };
16
+
16
17
  return (
17
18
  <div>
18
19
  <Typography>{label}</Typography>
19
- <div className={classes.displaySize}>
20
+ <StyledDisplaySize>
20
21
  <NumberTextField
21
22
  label="Width"
22
23
  type="number"
@@ -35,10 +36,10 @@ const DisplaySize = withStyles((theme) => ({
35
36
  value={size.height}
36
37
  onChange={(e, v) => updateSize('height', v)}
37
38
  />
38
- </div>
39
+ </StyledDisplaySize>
39
40
  </div>
40
41
  );
41
- });
42
+ };
42
43
 
43
44
  DisplaySize.propTypes = {
44
45
  size: PropTypes.shape({