@onehat/ui 0.4.69 → 0.4.71

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 (97) hide show
  1. package/package.json +2 -1
  2. package/src/Components/Accordion/Accordion.js +1 -0
  3. package/src/Components/Blank.js +1 -0
  4. package/src/Components/Buttons/BackButton.js +1 -0
  5. package/src/Components/Buttons/Button.js +5 -4
  6. package/src/Components/Buttons/CartButtonWithBadge.js +1 -0
  7. package/src/Components/Buttons/IconButton.js +9 -8
  8. package/src/Components/Buttons/PlusMinusButton.js +5 -4
  9. package/src/Components/Buttons/SquareButton.js +19 -18
  10. package/src/Components/Container/Container.js +1 -0
  11. package/src/Components/Container/ContainerColumn.js +4 -3
  12. package/src/Components/Container/ScreenContainer.js +13 -13
  13. package/src/Components/Container/Splitter.js +33 -28
  14. package/src/Components/Editor/InlineEditor.js +32 -30
  15. package/src/Components/Fab/DynamicFab.js +14 -13
  16. package/src/Components/Fab/FabWithTooltip.js +1 -0
  17. package/src/Components/Filter/DateRange.js +8 -7
  18. package/src/Components/Filter/NumberRange.js +8 -7
  19. package/src/Components/Form/Field/CKEditor/CKEditor.js +1 -0
  20. package/src/Components/Form/Field/Checkbox/CheckboxGroup.js +1 -0
  21. package/src/Components/Form/Field/Color.js +41 -40
  22. package/src/Components/Form/Field/Combo/Combo.js +173 -172
  23. package/src/Components/Form/Field/Combo/PageSizeCombo.js +1 -0
  24. package/src/Components/Form/Field/Date.js +117 -116
  25. package/src/Components/Form/Field/DisplayField.js +6 -5
  26. package/src/Components/Form/Field/File.js +1 -0
  27. package/src/Components/Form/Field/FormikForm.js +1 -0
  28. package/src/Components/Form/Field/Input.js +15 -14
  29. package/src/Components/Form/Field/Json.js +8 -6
  30. package/src/Components/Form/Field/Number.js +31 -30
  31. package/src/Components/Form/Field/RadioGroup/RadioGroup.js +1 -0
  32. package/src/Components/Form/Field/Select/PageSizeSelect.js +1 -0
  33. package/src/Components/Form/Field/Select/Select.js +9 -8
  34. package/src/Components/Form/Field/Slider.js +15 -14
  35. package/src/Components/Form/Field/Tag/Tag.js +25 -24
  36. package/src/Components/Form/Field/Tag/ValueBox.js +32 -31
  37. package/src/Components/Form/Field/Text.js +9 -8
  38. package/src/Components/Form/Field/TextArea.js +9 -8
  39. package/src/Components/Form/Field/Toggle.js +16 -15
  40. package/src/Components/Form/FieldSet.js +27 -26
  41. package/src/Components/Form/Form.js +105 -104
  42. package/src/Components/Form/Label.js +15 -14
  43. package/src/Components/Grid/Grid.js +48 -46
  44. package/src/Components/Grid/GridHeaderRow.js +42 -40
  45. package/src/Components/Grid/GridRow.js +119 -80
  46. package/src/Components/Grid/HeaderColumnSelectorHandle.js +9 -8
  47. package/src/Components/Grid/HeaderReorderHandle.js +9 -8
  48. package/src/Components/Grid/HeaderResizeHandle.js +9 -8
  49. package/src/Components/Grid/NoRecordsFound.js +4 -3
  50. package/src/Components/Grid/RowDragHandle.js +1 -0
  51. package/src/Components/Grid/RowSelectHandle.js +1 -0
  52. package/src/Components/Hoc/Secondary/withSecondaryEditor.js +1 -1
  53. package/src/Components/Hoc/Secondary/withSecondaryWindowedEditor.js +6 -5
  54. package/src/Components/Hoc/withAlert.js +35 -34
  55. package/src/Components/Hoc/withContextMenu.js +27 -26
  56. package/src/Components/Hoc/withDnd.js +1 -0
  57. package/src/Components/Hoc/withEditor.js +1 -1
  58. package/src/Components/Hoc/withFilters.js +19 -18
  59. package/src/Components/Hoc/withModal.js +7 -6
  60. package/src/Components/Hoc/withToast.js +1 -0
  61. package/src/Components/Hoc/withWindowedEditor.js +6 -5
  62. package/src/Components/Layout/AsyncOperation.js +1 -0
  63. package/src/Components/Layout/CenterBox.js +9 -8
  64. package/src/Components/Layout/Footer.js +11 -10
  65. package/src/Components/Layout/ScreenHeader.js +5 -4
  66. package/src/Components/Layout/TextWithTooltip.js +1 -0
  67. package/src/Components/Messages/ConfirmationMessage.js +6 -5
  68. package/src/Components/Messages/ErrorMessage.js +40 -39
  69. package/src/Components/Messages/Loading.js +1 -0
  70. package/src/Components/Messages/OkMessage.js +11 -10
  71. package/src/Components/Messages/Unauthorized.js +1 -0
  72. package/src/Components/Messages/WaitMessage.js +16 -15
  73. package/src/Components/Panel/AccordionGridPanel.js +1 -0
  74. package/src/Components/Panel/FormPanel.js +1 -0
  75. package/src/Components/Panel/Header.js +59 -58
  76. package/src/Components/Panel/Mask.js +1 -0
  77. package/src/Components/Panel/Panel.js +7 -6
  78. package/src/Components/Picker/Picker.js +1 -0
  79. package/src/Components/Report/Report.js +35 -34
  80. package/src/Components/Screens/Manager.js +1 -0
  81. package/src/Components/Screens/ReportsManager.js +1 -0
  82. package/src/Components/Tab/Tab.js +1 -0
  83. package/src/Components/Tab/TabBar.js +67 -66
  84. package/src/Components/Toolbar/FilterToolbar.js +14 -11
  85. package/src/Components/Toolbar/Pagination.js +26 -25
  86. package/src/Components/Toolbar/PaginationToolbar.js +13 -12
  87. package/src/Components/Toolbar/Toolbar.js +13 -12
  88. package/src/Components/Tooltip/Tooltip.js +1 -0
  89. package/src/Components/Tree/Tree.js +12 -11
  90. package/src/Components/Tree/TreeNode.js +20 -19
  91. package/src/Components/Tree/TreeNodeDragHandle.js +11 -10
  92. package/src/Components/Viewer/MeterTypeText.js +8 -7
  93. package/src/Components/Viewer/TextWithLinks.js +16 -15
  94. package/src/Components/Viewer/Viewer.js +23 -22
  95. package/src/Components/Window/UploadsDownloadsWindow.js +6 -5
  96. package/src/Components/index.js +1 -0
  97. package/src/Hooks/useAsyncRenderers.js +53 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onehat/ui",
3
- "version": "0.4.69",
3
+ "version": "0.4.71",
4
4
  "description": "Base UI for OneHat apps",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -58,6 +58,7 @@
58
58
  "@k-renwick/colour-mixer": "^1.2.1",
59
59
  "@legendapp/motion": "^2.4.0",
60
60
  "@onehat/data": "^1.22.0",
61
+ "clsx": "^2.1.1",
61
62
  "nativewind": "4.1.23",
62
63
  "normalize-css-color": "^1.0.2",
63
64
  "@react-native-community/slider": "^4.5.2",
@@ -6,6 +6,7 @@ import {
6
6
  VStack,
7
7
  VStackNative,
8
8
  } from '@project-components/Gluestack';
9
+ import clsx from 'clsx';
9
10
  import inArray from '../../Functions/inArray.js';
10
11
  import emptyFn from '../../Functions/emptyFn.js';
11
12
  import _ from 'lodash';
@@ -1,4 +1,5 @@
1
1
  import { Box } from '@project-components/Gluestack';
2
+ import clsx from 'clsx';
2
3
  import _ from 'lodash';
3
4
 
4
5
  export default function Blank(props) {
@@ -2,6 +2,7 @@ import { forwardRef } from 'react';
2
2
  import {
3
3
  Icon,
4
4
  } from '@project-components/Gluestack';
5
+ import clsx from 'clsx';
5
6
  import Button from './Button';
6
7
  import AngleLeft from '../Icons/AngleLeft.js';
7
8
 
@@ -6,6 +6,7 @@ import {
6
6
  ButtonIcon,
7
7
  ButtonGroup,
8
8
  } from '@project-components/Gluestack';
9
+ import clsx from 'clsx';
9
10
  import withComponent from '../Hoc/withComponent.js';
10
11
  import withTooltip from '../Hoc/withTooltip.js';
11
12
  import _ from 'lodash';
@@ -51,10 +52,10 @@ const ButtonComponent = forwardRef((props, ref) => {
51
52
  self.ref = ref.current;
52
53
  }
53
54
 
54
- let className = `
55
- Button
56
- flex
57
- `;
55
+ let className = clsx(
56
+ 'Button',
57
+ 'flex',
58
+ );
58
59
  if (propsToPass.className) {
59
60
  className += ' ' + propsToPass.className;
60
61
  }
@@ -4,6 +4,7 @@ import {
4
4
  Pressable,
5
5
  Text,
6
6
  } from '@project-components/Gluestack';
7
+ import clsx from 'clsx';
7
8
  import {
8
9
  Ionicons,
9
10
  } from '@expo/vector-icons';
@@ -1,4 +1,5 @@
1
1
  import { forwardRef } from 'react';
2
+ import clsx from 'clsx';
2
3
  import Button from './Button';
3
4
  import UiGlobals from '../../UiGlobals.js';
4
5
  import _ from 'lodash';
@@ -12,14 +13,14 @@ const IconButtonElement = forwardRef((props, ref) => {
12
13
  throw Error('IconButton requires an icon prop');
13
14
  }
14
15
 
15
- let buttonClassName = `
16
- IconButton
17
- rounded-md
18
- self-center
19
- px-[10px]
20
- py-[10px]
21
- ${styles.ICON_BUTTON_CLASSNAME}
22
- `;
16
+ let buttonClassName = clsx(
17
+ 'IconButton',
18
+ 'rounded-md',
19
+ 'self-center',
20
+ 'px-[10px]',
21
+ 'py-[10px]',
22
+ styles.ICON_BUTTON_CLASSNAME,
23
+ );
23
24
  if (props.className) {
24
25
  buttonClassName += ' ' + props.className;
25
26
  }
@@ -3,6 +3,7 @@ import {
3
3
  HStack,
4
4
  HStackNative,
5
5
  } from '@project-components/Gluestack';
6
+ import clsx from 'clsx';
6
7
  import IconButton from './IconButton.js';
7
8
  import Plus from '../Icons/Plus.js';
8
9
  import Minus from '../Icons/Minus.js';
@@ -22,10 +23,10 @@ const PlusMinusButton = React.forwardRef((props, ref) => {
22
23
  className: 'text-black',
23
24
  };
24
25
 
25
- let className = `
26
- PlusMinusButton-HStack
27
- items-center
28
- `;
26
+ let className = clsx(
27
+ 'PlusMinusButton-HStack',
28
+ 'items-center',
29
+ );
29
30
  if (props.className) {
30
31
  className += ' ' + props.className
31
32
  }
@@ -1,4 +1,5 @@
1
1
  import IconButton from './IconButton.js';
2
+ import clsx from 'clsx';
2
3
 
3
4
  // This component is used to create a square button with an icon and text
4
5
  // For example, the Gingerich app uses this for EqStatusesSwitch and WoPrioritiesSwitch
@@ -23,20 +24,20 @@ export default function SquareButton(props) {
23
24
  throw Error('text missing. If you want to hide the text, use showText={false}');
24
25
  }
25
26
 
26
- let className = `
27
- SquareButton
28
- rounded-md
29
- p-2
30
- h-[100px]
31
- w-[100px]
32
- flex
33
- flex-col
34
- justify-center
35
- items-center
36
- bg-grey-200
37
- hover:bg-grey-400
38
- disabled:bg-grey-100
39
- `;
27
+ let className = clsx(
28
+ 'SquareButton',
29
+ 'rounded-md',
30
+ 'p-2',
31
+ 'h-[100px]',
32
+ 'w-[100px]',
33
+ 'flex',
34
+ 'flex-col',
35
+ 'justify-center',
36
+ 'items-center',
37
+ 'bg-grey-200',
38
+ 'hover:bg-grey-400',
39
+ 'disabled:bg-grey-100',
40
+ );
40
41
  if (isActive && activeClassName) {
41
42
  className += ' ' + activeClassName;
42
43
  }
@@ -47,10 +48,10 @@ export default function SquareButton(props) {
47
48
  // backgroundColor: bg,
48
49
  }}
49
50
  _icon={{
50
- className: `
51
- h-[40px]
52
- w-[40px]
53
- `,
51
+ className: clsx(
52
+ 'h-[40px]',
53
+ 'w-[40px]',
54
+ ),
54
55
  style: {
55
56
  color,
56
57
  }
@@ -3,6 +3,7 @@ import {
3
3
  HStack,
4
4
  VStack,
5
5
  } from '@project-components/Gluestack';
6
+ import clsx from 'clsx';
6
7
  import {
7
8
  HORIZONTAL,
8
9
  VERTICAL,
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  VStack,
3
3
  } from '@project-components/Gluestack';
4
+ import clsx from 'clsx';
4
5
  import _ from 'lodash';
5
6
 
6
7
  // This component allows us to stack multiple children in a Container slot (e.g. east)
@@ -8,9 +9,9 @@ import _ from 'lodash';
8
9
  // which the Container will translate into classNames for the VStack component.
9
10
 
10
11
  export default function ContainerColumn(props) {
11
- let className = `
12
- ContainerColumn
13
- `;
12
+ let className = clsx(
13
+ 'ContainerColumn'
14
+ );
14
15
  if (props.className) {
15
16
  className += ` ${props.className}`;
16
17
  }
@@ -9,6 +9,7 @@ import {
9
9
  VStack,
10
10
  VStackNative,
11
11
  } from '@project-components/Gluestack';
12
+ import clsx from 'clsx';
12
13
  import withComponent from '../Hoc/withComponent.js';
13
14
  // import { useHeaderHeight } from '@react-navigation/elements';
14
15
  // import testProps from '../OneHat/functions/testProps';
@@ -16,9 +17,7 @@ import withComponent from '../Hoc/withComponent.js';
16
17
  function ScreenContainer(props) {
17
18
  const {
18
19
  screenName = 'ScreenContainer',
19
- p = 0,
20
20
  safeArea = false,
21
- bg = '#fff',
22
21
  scrollEnabled = false,
23
22
  keyboardAvoiding = false,
24
23
  subtractHeaderHeight = true,
@@ -35,21 +34,22 @@ function ScreenContainer(props) {
35
34
  if (safeArea !== false) {
36
35
  safeAreaProps.safeArea = true;
37
36
  }
37
+ let className = clsx(
38
+ screenName,
39
+ 'items-center',
40
+ 'justify-start',
41
+ 'flex-1',
42
+ 'w-full',
43
+ 'overflow-visible'
44
+ );
45
+ if (props.className) {
46
+ className += ` ${props.className}`;
47
+ }
38
48
 
39
49
  const column = <VStackNative
40
50
  onLayout={onLayout}
41
51
  {...safeAreaProps}
42
- className={`
43
- items-center
44
- justify-start
45
- flex-1
46
- w-full
47
- overflow-visible
48
- `}
49
- style={{
50
- padding: p,
51
- backgroundColor: bg,
52
- }}
52
+ className={className}
53
53
  >
54
54
  {props.children}
55
55
  </VStackNative>;
@@ -2,6 +2,7 @@ import {
2
2
  HStack,
3
3
  VStack,
4
4
  } from '@project-components/Gluestack';
5
+ import clsx from 'clsx';
5
6
  import {
6
7
  HORIZONTAL,
7
8
  VERTICAL,
@@ -21,40 +22,44 @@ function Splitter(props) {
21
22
 
22
23
  if (mode === VERTICAL) {
23
24
  return <HStack
24
- className={`
25
- Splitter
26
- h-[3px]
27
- w-full
28
- items-center
29
- justify-center
30
- ${isDragging ? "bg-secondary-600" : "bg-primary-600"}
31
- `}
25
+ className={clsx(
26
+ 'Splitter',
27
+ 'h-[3px]',
28
+ 'w-full',
29
+ 'items-center',
30
+ 'justify-center',
31
+ isDragging ? 'bg-secondary-600' : 'bg-primary-600'
32
+ )}
32
33
  >
33
- <HStack className={`
34
- handle
35
- h-[2px]
36
- w-[10%]
37
- bg-[#ccc]
38
- `}></HStack>
34
+ <HStack
35
+ className={clsx(
36
+ 'handle',
37
+ 'h-[2px]',
38
+ 'w-[10%]',
39
+ 'bg-[#ccc]'
40
+ )}
41
+ />
39
42
  </HStack>;
40
43
  }
41
44
  return <VStack
42
45
  style={styles.ewResize}
43
- className={`
44
- Splitter
45
- h-full
46
- w-[3px]
47
- items-center
48
- justify-center
49
- ${isDragging ? "bg-secondary-600" : "bg-primary-600"}
50
- `}
46
+ className={clsx(
47
+ 'Splitter',
48
+ 'h-full',
49
+ 'w-[3px]',
50
+ 'items-center',
51
+ 'justify-center',
52
+ isDragging ? 'bg-secondary-600' : 'bg-primary-600',
53
+ )}
51
54
  >
52
- <VStack className={`
53
- handle
54
- w-[2px]
55
- h-[10%]
56
- bg-[#ccc]
57
- `}></VStack>
55
+ <VStack
56
+ className={clsx(
57
+ 'handle',
58
+ 'h-[2px]',
59
+ 'w-[10%]',
60
+ 'bg-[#ccc]'
61
+ )}
62
+ />
58
63
  </VStack>;
59
64
  }
60
65
 
@@ -3,6 +3,7 @@ import {
3
3
  Box,
4
4
  VStack,
5
5
  } from '@project-components/Gluestack';
6
+ import clsx from 'clsx';
6
7
  import withComponent from '../Hoc/withComponent.js';
7
8
  import {
8
9
  UI_MODE_WEB,
@@ -112,29 +113,30 @@ function InlineEditor(props) {
112
113
  onEditorCancel();
113
114
  }
114
115
  }}
115
- className={`
116
- InlineEditor-mask
117
- fixed
118
- w-screen
119
- h-screen
120
- top-0
121
- left-0
122
- bg-black
123
- opacity-30 z-0
124
- `}
116
+ className={clsx(
117
+ 'InlineEditor-mask',
118
+ 'fixed',
119
+ 'w-screen',
120
+ 'h-screen',
121
+ 'top-0',
122
+ 'left-0',
123
+ 'bg-black',
124
+ 'opacity-30',
125
+ 'z-0',
126
+ )}
125
127
  />
126
128
  <VStack
127
129
  ref={inlineEditorRef}
128
130
  {...testProps('inlineEditor')}
129
- className={`
130
- InlineEditor-VStack
131
- absolute
132
- z-10
133
- min-w-full
134
- inline-block
135
- max-h-[100px]
136
- ${isEditorShown ? "h-[100px]" : "h-[0px]"}
137
- `}
131
+ className={clsx(
132
+ 'InlineEditor-VStack',
133
+ 'absolute',
134
+ 'z-10',
135
+ 'min-w-full',
136
+ 'inline-block',
137
+ 'max-h-[100px]',
138
+ isEditorShown ? 'h-[100px]' : 'h-[0px]',
139
+ )}
138
140
  >
139
141
  <Form
140
142
  editorType={EDITOR_TYPE__INLINE}
@@ -149,17 +151,17 @@ function InlineEditor(props) {
149
151
  onClose={onEditorClose}
150
152
  parent={self}
151
153
  reference="form"
152
- className={`
153
- InlineEditor-Form
154
- flex-1
155
- bg-white
156
- px-0
157
- py-1
158
- border-t-4
159
- border-b-4
160
- border-t-primary-100
161
- border-b-primary-100
162
- `}
154
+ className={clsx(
155
+ 'InlineEditor-Form',
156
+ 'flex-1',
157
+ 'bg-white',
158
+ 'px-0',
159
+ 'py-1',
160
+ 'border-t-4',
161
+ 'border-b-4',
162
+ 'border-t-primary-100',
163
+ 'border-b-primary-100',
164
+ )}
163
165
  />
164
166
  </VStack>
165
167
  </>;
@@ -4,6 +4,7 @@ import {
4
4
  Fab, FabIcon, FabLabel,
5
5
  VStack,
6
6
  } from '@project-components/Gluestack';
7
+ import clsx from 'clsx';
7
8
  import IconButton from '../Buttons/IconButton.js';
8
9
  import FabWithTooltip from './FabWithTooltip.js';
9
10
  import EllipsisVertical from '../Icons/EllipsisVertical.js';
@@ -31,13 +32,13 @@ export default function DynamicFab(props) {
31
32
  verticalOffset = 50; // to shift the entire expanded group up
32
33
 
33
34
 
34
- let className = `
35
- DynamicFab
36
- fixed
37
- pb-[20px]
38
- bottom-4
39
- right-4
40
- `;
35
+ let className = clsx(
36
+ 'DynamicFab',
37
+ 'fixed',
38
+ 'pb-[20px]',
39
+ 'bottom-4',
40
+ 'right-4',
41
+ );
41
42
  if (props.className) {
42
43
  className += ` ${props.className}`;
43
44
  }
@@ -67,12 +68,12 @@ export default function DynamicFab(props) {
67
68
  }}
68
69
  >
69
70
  <IconButton
70
- className={`
71
- bg-primary-600
72
- text-white
73
- hover:bg-primary-700
74
- active:bg-primary-800
75
- `}
71
+ className={clsx(
72
+ 'bg-primary-600',
73
+ 'text-white',
74
+ 'hover:bg-primary-700',
75
+ 'active:bg-primary-800',
76
+ )}
76
77
  tooltipPlacement={tooltipPlacement}
77
78
  onPress={() => {
78
79
  onPress();
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Fab,
3
3
  } from '@project-components/Gluestack';
4
+ import clsx from 'clsx';
4
5
  import withTooltip from '../Hoc/withTooltip.js';
5
6
 
6
7
  export default withTooltip(Fab);
@@ -4,6 +4,7 @@ import {
4
4
  HStackNative,
5
5
  Text,
6
6
  } from '@project-components/Gluestack';
7
+ import clsx from 'clsx';
7
8
  import Date from '../Form/Field/Date.js';
8
9
  import testProps from '../../Functions/testProps.js';
9
10
  import withValue from '../Hoc/withValue.js';
@@ -80,13 +81,13 @@ const
80
81
  return null;
81
82
  }
82
83
 
83
- let className = `
84
- flex-1
85
- justify-center
86
- items-center
87
- px-1
88
- py-[2px]
89
- `;
84
+ let className = clsx(
85
+ 'flex-1',
86
+ 'justify-center',
87
+ 'items-center',
88
+ 'px-1',
89
+ 'py-[2px]',
90
+ );
90
91
  if (props.className) {
91
92
  className += ' ' + props.className;
92
93
  }
@@ -3,6 +3,7 @@ import {
3
3
  HStack,
4
4
  Text,
5
5
  } from '@project-components/Gluestack';
6
+ import clsx from 'clsx';
6
7
  import Number from '../Form/Field/Number.js';
7
8
  import withTooltip from '../Hoc/withTooltip.js';
8
9
  import withValue from '../Hoc/withValue.js';
@@ -63,13 +64,13 @@ const
63
64
 
64
65
  }, [value]);
65
66
 
66
- let className = `
67
- flex-1
68
- justify-center
69
- items-center
70
- px-1
71
- py-[2px]
72
- `;
67
+ let className = clsx(
68
+ 'flex-1',
69
+ 'justify-center',
70
+ 'items-center',
71
+ 'px-1',
72
+ 'py-[2px]',
73
+ );
73
74
  if (props.className) {
74
75
  className += ' ' + props.className;
75
76
  }
@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef, } from 'react';
2
2
  import {
3
3
  HStack,
4
4
  } from '@project-components/Gluestack';
5
+ import clsx from 'clsx';
5
6
  import UiGlobals from '../../../../UiGlobals.js';
6
7
  import { CKEditor } from '@ckeditor/ckeditor5-react'; // https://ckeditor.com/docs/ckeditor5/latest/installation/frameworks/react.html
7
8
  import './ckeditor.css';
@@ -2,6 +2,7 @@ import React, { useState, useEffect, } from 'react';
2
2
  import {
3
3
  Checkbox, CheckboxGroup,
4
4
  } from '@project-components/Gluestack';
5
+ import clsx from 'clsx';
5
6
  import testProps from '../../../../Functions/testProps.js';
6
7
  import withData from '../../../Hoc/withData.js';
7
8
  import withValue from '../../../Hoc/withValue.js';