@performant-software/semantic-components 0.5.1

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 (218) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/build/index.js +2 -0
  4. package/build/index.js.map +1 -0
  5. package/build/main.css +786 -0
  6. package/index.js +1 -0
  7. package/package.json +37 -0
  8. package/src/components/AccordionDataList.css +8 -0
  9. package/src/components/AccordionDataList.js +224 -0
  10. package/src/components/AccordionList.css +27 -0
  11. package/src/components/AccordionList.js +596 -0
  12. package/src/components/AccordionSelector.css +3 -0
  13. package/src/components/AccordionSelector.js +359 -0
  14. package/src/components/ArrowButtons.css +4 -0
  15. package/src/components/ArrowButtons.js +38 -0
  16. package/src/components/AssociatedDropdown.css +44 -0
  17. package/src/components/AssociatedDropdown.js +338 -0
  18. package/src/components/BooleanIcon.css +0 -0
  19. package/src/components/BooleanIcon.js +33 -0
  20. package/src/components/CancelButton.css +0 -0
  21. package/src/components/CancelButton.js +25 -0
  22. package/src/components/ColorButton.css +4 -0
  23. package/src/components/ColorButton.js +34 -0
  24. package/src/components/ColorPickerModal.css +3 -0
  25. package/src/components/ColorPickerModal.js +77 -0
  26. package/src/components/ColumnResize.css +9 -0
  27. package/src/components/ColumnResize.js +20 -0
  28. package/src/components/DataList.css +0 -0
  29. package/src/components/DataList.js +531 -0
  30. package/src/components/DataTable.css +43 -0
  31. package/src/components/DataTable.js +596 -0
  32. package/src/components/DataTableColumnSelector.css +10 -0
  33. package/src/components/DataTableColumnSelector.js +146 -0
  34. package/src/components/DateInput.css +6 -0
  35. package/src/components/DateInput.js +58 -0
  36. package/src/components/DatePicker.css +72 -0
  37. package/src/components/DatePicker.js +81 -0
  38. package/src/components/DescriptorField.css +0 -0
  39. package/src/components/DescriptorField.js +42 -0
  40. package/src/components/DownloadButton.css +0 -0
  41. package/src/components/DownloadButton.js +23 -0
  42. package/src/components/Draggable.css +0 -0
  43. package/src/components/Draggable.js +94 -0
  44. package/src/components/DropdownButton.css +3 -0
  45. package/src/components/DropdownButton.js +65 -0
  46. package/src/components/DropdownMenu.css +0 -0
  47. package/src/components/DropdownMenu.js +68 -0
  48. package/src/components/EditModal.css +8 -0
  49. package/src/components/EditModal.js +99 -0
  50. package/src/components/EditPage.css +7 -0
  51. package/src/components/EditPage.js +249 -0
  52. package/src/components/EmbeddedList.css +7 -0
  53. package/src/components/EmbeddedList.js +278 -0
  54. package/src/components/FileInputButton.css +0 -0
  55. package/src/components/FileInputButton.js +54 -0
  56. package/src/components/FileUpload.css +31 -0
  57. package/src/components/FileUpload.js +188 -0
  58. package/src/components/FileUploadModal.css +0 -0
  59. package/src/components/FileUploadModal.js +408 -0
  60. package/src/components/FuzzyDate.css +8 -0
  61. package/src/components/FuzzyDate.js +575 -0
  62. package/src/components/GoogleMap.css +0 -0
  63. package/src/components/GoogleMap.js +105 -0
  64. package/src/components/GooglePlacesSearch.css +0 -0
  65. package/src/components/GooglePlacesSearch.js +43 -0
  66. package/src/components/HorizontalCards.css +50 -0
  67. package/src/components/HorizontalCards.js +226 -0
  68. package/src/components/ItemCollection.css +3 -0
  69. package/src/components/ItemCollection.js +159 -0
  70. package/src/components/ItemList.css +0 -0
  71. package/src/components/ItemList.js +126 -0
  72. package/src/components/Items.css +19 -0
  73. package/src/components/Items.js +365 -0
  74. package/src/components/ItemsToggle.css +0 -0
  75. package/src/components/ItemsToggle.js +168 -0
  76. package/src/components/KeyboardField.css +4 -0
  77. package/src/components/KeyboardField.js +147 -0
  78. package/src/components/LazyDocument.css +21 -0
  79. package/src/components/LazyDocument.js +113 -0
  80. package/src/components/LazyImage.css +21 -0
  81. package/src/components/LazyImage.js +119 -0
  82. package/src/components/LazyVideo.css +21 -0
  83. package/src/components/LazyVideo.js +131 -0
  84. package/src/components/LinkButton.css +8 -0
  85. package/src/components/LinkButton.js +23 -0
  86. package/src/components/LinkLabel.css +8 -0
  87. package/src/components/LinkLabel.js +29 -0
  88. package/src/components/List.css +8 -0
  89. package/src/components/List.js +761 -0
  90. package/src/components/ListFilters.css +0 -0
  91. package/src/components/ListFilters.js +408 -0
  92. package/src/components/ListLoader.css +8 -0
  93. package/src/components/ListLoader.js +32 -0
  94. package/src/components/ListTable.css +3 -0
  95. package/src/components/ListTable.js +86 -0
  96. package/src/components/LoginModal.css +7 -0
  97. package/src/components/LoginModal.js +102 -0
  98. package/src/components/MasonryGrid.css +48 -0
  99. package/src/components/MasonryGrid.js +202 -0
  100. package/src/components/MediaGallery.css +37 -0
  101. package/src/components/MediaGallery.js +148 -0
  102. package/src/components/MediaGrid.css +72 -0
  103. package/src/components/MediaGrid.js +74 -0
  104. package/src/components/MediaList.css +3 -0
  105. package/src/components/MediaList.js +98 -0
  106. package/src/components/ModalDropdown.css +11 -0
  107. package/src/components/ModalDropdown.js +84 -0
  108. package/src/components/NestedAccordion.css +41 -0
  109. package/src/components/NestedAccordion.js +276 -0
  110. package/src/components/PhotoViewer.css +3 -0
  111. package/src/components/PhotoViewer.js +36 -0
  112. package/src/components/PlayButton.css +3 -0
  113. package/src/components/PlayButton.js +37 -0
  114. package/src/components/RemoteDropdown.css +13 -0
  115. package/src/components/RemoteDropdown.js +368 -0
  116. package/src/components/SaveButton.css +0 -0
  117. package/src/components/SaveButton.js +31 -0
  118. package/src/components/Section.css +0 -0
  119. package/src/components/Section.js +41 -0
  120. package/src/components/Selectize.css +11 -0
  121. package/src/components/Selectize.js +297 -0
  122. package/src/components/SelectizeHeader.css +3 -0
  123. package/src/components/SelectizeHeader.js +40 -0
  124. package/src/components/TabbedModal.css +14 -0
  125. package/src/components/TabbedModal.js +165 -0
  126. package/src/components/TabsMenu.css +0 -0
  127. package/src/components/TabsMenu.js +35 -0
  128. package/src/components/TagsList.css +0 -0
  129. package/src/components/TagsList.js +43 -0
  130. package/src/components/Thumbnail.css +0 -0
  131. package/src/components/Thumbnail.js +47 -0
  132. package/src/components/Toaster.css +9 -0
  133. package/src/components/Toaster.js +73 -0
  134. package/src/components/VideoFrameSelector.css +3 -0
  135. package/src/components/VideoFrameSelector.js +148 -0
  136. package/src/components/VideoPlayer.css +3 -0
  137. package/src/components/VideoPlayer.js +55 -0
  138. package/src/components/VideoPlayerButton.css +17 -0
  139. package/src/components/VideoPlayerButton.js +17 -0
  140. package/src/components/ViewXML.css +0 -0
  141. package/src/components/ViewXML.js +72 -0
  142. package/src/i18n/en.json +204 -0
  143. package/src/i18n/i18n.js +24 -0
  144. package/src/index.js +76 -0
  145. package/types/components/AccordionDataList.js.flow +224 -0
  146. package/types/components/AccordionList.js.flow +596 -0
  147. package/types/components/AccordionSelector.js.flow +359 -0
  148. package/types/components/ArrowButtons.js.flow +38 -0
  149. package/types/components/AssociatedDropdown.js.flow +338 -0
  150. package/types/components/BooleanIcon.js.flow +33 -0
  151. package/types/components/CancelButton.js.flow +25 -0
  152. package/types/components/ColorButton.js.flow +34 -0
  153. package/types/components/ColorPickerModal.js.flow +77 -0
  154. package/types/components/ColumnResize.js.flow +20 -0
  155. package/types/components/DataList.js.flow +531 -0
  156. package/types/components/DataTable.js.flow +596 -0
  157. package/types/components/DataTableColumnSelector.js.flow +146 -0
  158. package/types/components/DataView.js.flow +125 -0
  159. package/types/components/DateInput.js.flow +58 -0
  160. package/types/components/DatePicker.js.flow +81 -0
  161. package/types/components/DescriptorField.js.flow +42 -0
  162. package/types/components/DownloadButton.js.flow +23 -0
  163. package/types/components/Draggable.js.flow +94 -0
  164. package/types/components/DropdownButton.js.flow +65 -0
  165. package/types/components/DropdownMenu.js.flow +68 -0
  166. package/types/components/EditModal.js.flow +99 -0
  167. package/types/components/EditPage.js.flow +249 -0
  168. package/types/components/EmbeddedList.js.flow +278 -0
  169. package/types/components/FileInputButton.js.flow +54 -0
  170. package/types/components/FileUpload.js.flow +188 -0
  171. package/types/components/FileUploadModal.js.flow +408 -0
  172. package/types/components/FuzzyDate.js.flow +575 -0
  173. package/types/components/GoogleMap.js.flow +105 -0
  174. package/types/components/GooglePlacesSearch.js.flow +43 -0
  175. package/types/components/HorizontalCards.js.flow +226 -0
  176. package/types/components/ItemCollection.js.flow +159 -0
  177. package/types/components/ItemList.js.flow +126 -0
  178. package/types/components/Items.js.flow +365 -0
  179. package/types/components/ItemsToggle.js.flow +168 -0
  180. package/types/components/KeyboardField.js.flow +147 -0
  181. package/types/components/LazyDocument.js.flow +113 -0
  182. package/types/components/LazyImage.js.flow +119 -0
  183. package/types/components/LazyVideo.js.flow +131 -0
  184. package/types/components/LinkButton.js.flow +23 -0
  185. package/types/components/LinkLabel.js.flow +29 -0
  186. package/types/components/List.js.flow +761 -0
  187. package/types/components/ListFilters.js.flow +408 -0
  188. package/types/components/ListLoader.js.flow +32 -0
  189. package/types/components/ListTable.js.flow +86 -0
  190. package/types/components/LoginModal.js.flow +102 -0
  191. package/types/components/MasonryGrid.js.flow +202 -0
  192. package/types/components/MediaGallery.js.flow +148 -0
  193. package/types/components/MediaGrid.js.flow +74 -0
  194. package/types/components/MediaList.js.flow +98 -0
  195. package/types/components/MenuBar.js.flow +77 -0
  196. package/types/components/MenuSidebar.js.flow +72 -0
  197. package/types/components/ModalDropdown.js.flow +84 -0
  198. package/types/components/NestedAccordion.js.flow +276 -0
  199. package/types/components/PhotoViewer.js.flow +36 -0
  200. package/types/components/PlayButton.js.flow +37 -0
  201. package/types/components/RemoteDropdown.js.flow +368 -0
  202. package/types/components/SaveButton.js.flow +31 -0
  203. package/types/components/Section.js.flow +41 -0
  204. package/types/components/Selectize.js.flow +297 -0
  205. package/types/components/SelectizeHeader.js.flow +40 -0
  206. package/types/components/TabbedModal.js.flow +165 -0
  207. package/types/components/TabsMenu.js.flow +35 -0
  208. package/types/components/TagsList.js.flow +43 -0
  209. package/types/components/Thumbnail.js.flow +47 -0
  210. package/types/components/Toaster.js.flow +73 -0
  211. package/types/components/VideoFrameSelector.js.flow +148 -0
  212. package/types/components/VideoPlayer.js.flow +55 -0
  213. package/types/components/VideoPlayerButton.js.flow +17 -0
  214. package/types/components/ViewXML.js.flow +72 -0
  215. package/types/hooks/Imageable.js.flow +54 -0
  216. package/types/i18n/i18n.js.flow +24 -0
  217. package/types/index.js.flow +78 -0
  218. package/webpack.config.js +3 -0
@@ -0,0 +1,368 @@
1
+ // @flow
2
+
3
+ import { Timer } from '@performant-software/shared-components';
4
+ import React, { Component, createRef } from 'react';
5
+ import { Dropdown, DropdownSearchInput, Icon } from 'semantic-ui-react';
6
+ import _ from 'underscore';
7
+ import i18n from '../i18n/i18n';
8
+ import './RemoteDropdown.css';
9
+
10
+ type Option = {
11
+ key: string,
12
+ value: string,
13
+ text: any
14
+ };
15
+
16
+ type ApiResponse = {
17
+ data: {
18
+ items: Array<any>,
19
+ list: {
20
+ pages: number
21
+ }
22
+ }
23
+ };
24
+
25
+ type Props = {
26
+ allowAdditions?: boolean,
27
+ className?: string,
28
+ collectionName: string,
29
+ fluid?: boolean,
30
+ multiple?: boolean,
31
+ onAddItem?: (value: string) => Promise<any>,
32
+ onLoad: ({ search: string, page: number}) => Promise<ApiResponse>,
33
+ onSelection: (value: string) => void,
34
+ placeholder?: string,
35
+ renderOption: (item: any) => Option,
36
+ value: string
37
+ };
38
+
39
+ type State = {
40
+ loading: boolean,
41
+ options: Array<Option>,
42
+ page: number,
43
+ pages: number,
44
+ search: string
45
+ };
46
+
47
+ class RemoteDropdown extends Component<Props, State> {
48
+ static defaultProps: any;
49
+ dropdown: DropdownSearchInput;
50
+
51
+ /**
52
+ * Constructs a new RemoteDropdown component.
53
+ *
54
+ * @param props
55
+ */
56
+ constructor(props: Props) {
57
+ super(props);
58
+
59
+ this.state = {
60
+ loading: false,
61
+ options: [],
62
+ page: 1,
63
+ pages: 1,
64
+ search: ''
65
+ };
66
+
67
+ this.dropdown = createRef();
68
+ }
69
+
70
+ /**
71
+ * Resets the component.
72
+ */
73
+ componentDidMount() {
74
+ this.onReset();
75
+ }
76
+
77
+ /**
78
+ * Resets the state and executes the search.
79
+ *
80
+ * @param prevProps
81
+ */
82
+ componentDidUpdate(prevProps: Props) {
83
+ if (this.props.value !== prevProps.value) {
84
+ this.setState({
85
+ page: 1,
86
+ pages: 1,
87
+ search: ''
88
+ }, this.onSearch.bind(this));
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Returns the dropdown class name(s).
94
+ *
95
+ * @returns {string}
96
+ */
97
+ getClassNames() {
98
+ const classNames = ['remote-dropdown'];
99
+ if (this.props.className) {
100
+ classNames.push(this.props.className);
101
+ }
102
+
103
+ return classNames.join(' ');
104
+ }
105
+
106
+ /**
107
+ * Returns the dropdown value as an array.
108
+ *
109
+ * @returns {[]}
110
+ */
111
+ getValues() {
112
+ let values = [];
113
+ const { value } = this.props;
114
+
115
+ if (value && value.length) {
116
+ values = Array.isArray(value) ? value : [value];
117
+ }
118
+
119
+ return values;
120
+ }
121
+
122
+ /**
123
+ * Returns the passed value as a dropdown option.
124
+ *
125
+ * @param value
126
+ *
127
+ * @returns {{text: *, value: *, key: *}}
128
+ */
129
+ getOption(value: string) {
130
+ return {
131
+ key: value,
132
+ text: value,
133
+ value
134
+ };
135
+ }
136
+
137
+ /**
138
+ * Returns the complete list of dropdown options. If applicable, the "Add" and "Load more" options are added to the
139
+ * end of the list.
140
+ *
141
+ * @returns {*[]}
142
+ */
143
+ getOptions() {
144
+ const options = [...this.state.options];
145
+
146
+ /*
147
+ * Add the current dropdown value to the list. Since the value doesn't render unless it exists in the list of
148
+ * options, we'll need to add the value to the list of options if it exists of another page.
149
+ */
150
+ _.each(this.getValues(), (value) => {
151
+ if (!_.findWhere(options, { value })) {
152
+ options.push(this.getOption(value));
153
+ }
154
+ });
155
+
156
+ /*
157
+ * Add the "Add" option if the dropdown allows additions and the search query does not already exist in the list
158
+ * of options.
159
+ */
160
+ const { search } = this.state;
161
+
162
+ if (this.props.allowAdditions && search && !_.findWhere(options, { text: search })) {
163
+ options.push({
164
+ key: 'add',
165
+ value: 'add',
166
+ text: this.renderAddOption(),
167
+ onClick: this.onAddItem.bind(this)
168
+ });
169
+ }
170
+
171
+ /*
172
+ * Add the "Load more" option if the dropdown is paginated and contains more pages.
173
+ */
174
+ if (this.state.page < this.state.pages) {
175
+ options.push({
176
+ key: 'more',
177
+ value: 'more',
178
+ text: this.renderLoadMoreOption(),
179
+ onClick: () => this.setState((state) => ({ page: state.page + 1 }), this.onSearch.bind(this))
180
+ });
181
+ }
182
+
183
+ return options;
184
+ }
185
+
186
+ /**
187
+ * Returns the list of options to display for the search. This list will include the options that match the search
188
+ * criteria with the current value(s) excluded.
189
+ *
190
+ * @returns {*}
191
+ */
192
+ getSearchOptions() {
193
+ return _.filter(this.getOptions(), (option) => !this.getValues().includes(option.value));
194
+ }
195
+
196
+ /**
197
+ * Adds the current search query as a new dropdown option.
198
+ *
199
+ * @param e
200
+ *
201
+ * @returns {*|Q.Promise<any>|Promise<R>|Promise<any>|void}
202
+ */
203
+ onAddItem(e: Event) {
204
+ return this.props.onAddItem && this.props
205
+ .onAddItem(this.state.search)
206
+ .then(() => {
207
+ // Resolve the new value. If multiple are allowed, append the new value to the existing list.
208
+ let value = this.state.search;
209
+ if (this.props.multiple) {
210
+ value = [
211
+ ...this.props.value,
212
+ this.state.search
213
+ ];
214
+ }
215
+
216
+ // Set the new value
217
+ this.onOptionSelection(e, { value });
218
+
219
+ // Close the dropdown (single select only)
220
+ if (!this.props.multiple) {
221
+ this.dropdown.current.close();
222
+ }
223
+ });
224
+ }
225
+
226
+ /**
227
+ * Selects the passed value.
228
+ *
229
+ * @param e
230
+ * @param value
231
+ */
232
+ onOptionSelection(e: Event, { value }: any) {
233
+ this.props.onSelection(value);
234
+ }
235
+
236
+ /**
237
+ * Resets the dropdown state.
238
+ */
239
+ onReset() {
240
+ this.setState({
241
+ options: _.map(this.getValues(), this.getOption.bind(this)),
242
+ page: 1,
243
+ pages: 1,
244
+ search: ''
245
+ });
246
+ }
247
+
248
+ /**
249
+ * Executes the search and sets the rendered options on the state.
250
+ */
251
+ onSearch() {
252
+ const { page, search } = this.state;
253
+
254
+ this.setState({
255
+ loading: true
256
+ }, () => {
257
+ this.props
258
+ .onLoad({ page, search })
259
+ .then(({ data }) => {
260
+ const options = _.map(data[this.props.collectionName], this.props.renderOption.bind(this));
261
+ const { pages } = data.list;
262
+
263
+ this.setState((state) => ({
264
+ loading: false,
265
+ options: [
266
+ ...page > 1 ? (state.options || []) : [],
267
+ ...options
268
+ ],
269
+ page,
270
+ pages
271
+ }));
272
+ });
273
+ });
274
+ }
275
+
276
+ /**
277
+ * Sets the search on the state and re-sets the page counts.
278
+ *
279
+ * @param e
280
+ * @param searchQuery
281
+ */
282
+ onSearchChange(e: Event, { searchQuery }: any) {
283
+ this.setState({
284
+ page: 1,
285
+ pages: 1,
286
+ search: searchQuery
287
+ });
288
+ }
289
+
290
+ /**
291
+ * Renders the RemoteDropdown component.
292
+ *
293
+ * @returns {*}
294
+ */
295
+ render() {
296
+ return (
297
+ <Dropdown
298
+ className={this.getClassNames()}
299
+ clearable
300
+ fluid={this.props.fluid}
301
+ loading={this.state.loading}
302
+ multiple={this.props.multiple}
303
+ onBlur={this.onReset.bind(this)}
304
+ onClose={this.onReset.bind(this)}
305
+ onChange={this.onOptionSelection.bind(this)}
306
+ onOpen={this.onSearch.bind(this)}
307
+ onSearchChange={this.onSearchChange.bind(this)}
308
+ options={this.getOptions()}
309
+ placeholder={this.props.placeholder}
310
+ ref={this.dropdown}
311
+ scrolling
312
+ search={() => this.getSearchOptions()}
313
+ searchInput={{
314
+ className: 'remote-dropdown-search-input',
315
+ onKeyDown: Timer.clearSearchTimer.bind(this),
316
+ onKeyUp: Timer.setSearchTimer.bind(this, this.onSearch.bind(this))
317
+ }}
318
+ searchQuery={this.state.search}
319
+ selectOnBlur={false}
320
+ selection
321
+ value={this.props.value}
322
+ />
323
+ );
324
+ }
325
+
326
+ /**
327
+ * Renders the "Add" dropdown option.
328
+ *
329
+ * @returns {*}
330
+ */
331
+ renderAddOption() {
332
+ return (
333
+ <div
334
+ className='extra-option'
335
+ >
336
+ <Icon name='plus circle' />
337
+ {`${i18n.t('RemoteDropdown.labels.add')} ${this.state.search}`}
338
+ </div>
339
+ );
340
+ }
341
+
342
+ /**
343
+ * Renders the "Load more" dropdown option.
344
+ *
345
+ * @returns {*}
346
+ */
347
+ renderLoadMoreOption() {
348
+ return (
349
+ <div
350
+ className='extra-option'
351
+ >
352
+ <Icon name='refresh' />
353
+ { i18n.t('RemoteDropdown.labels.loadMore') }
354
+ </div>
355
+ );
356
+ }
357
+ }
358
+
359
+ RemoteDropdown.defaultProps = {
360
+ allowAdditions: false,
361
+ className: '',
362
+ fluid: false,
363
+ multiple: false,
364
+ onAddItem: undefined,
365
+ placeholder: null
366
+ };
367
+
368
+ export default RemoteDropdown;
@@ -0,0 +1,31 @@
1
+ // @flow
2
+
3
+ import React from 'react';
4
+ import { Button, Loader } from 'semantic-ui-react';
5
+ import i18n from '../i18n/i18n';
6
+
7
+ type Props = {
8
+ onClick: (item: any) => Promise<any>,
9
+ saving: boolean
10
+ };
11
+
12
+ const SaveButton = (props: Props) => (
13
+ <Button
14
+ onClick={props.onClick.bind(this)}
15
+ primary
16
+ size='medium'
17
+ type='submit'
18
+ >
19
+ { i18n.t('Common.buttons.save') }
20
+ { props.saving && (
21
+ <Loader
22
+ active
23
+ className='saving'
24
+ inline
25
+ size='tiny'
26
+ />
27
+ )}
28
+ </Button>
29
+ );
30
+
31
+ export default SaveButton;
@@ -0,0 +1,41 @@
1
+ // @flow
2
+
3
+ import React, { type Node } from 'react';
4
+ import { Divider, Header } from 'semantic-ui-react';
5
+
6
+ type Props = {
7
+ children: Node,
8
+ divided?: boolean,
9
+ header?: string,
10
+ visible?: boolean
11
+ }
12
+
13
+ const Section = (props: Props) => {
14
+ if (!props.visible) {
15
+ return null;
16
+ }
17
+
18
+ return (
19
+ <div
20
+ className='section'
21
+ >
22
+ { props.header && (
23
+ <Header
24
+ content={props.header}
25
+ />
26
+ )}
27
+ { props.children }
28
+ <Divider
29
+ hidden={!props.divided}
30
+ />
31
+ </div>
32
+ );
33
+ };
34
+
35
+ Section.defaultProps = {
36
+ divided: true,
37
+ header: undefined,
38
+ visible: true
39
+ };
40
+
41
+ export default Section;