react-ui-basics 0.0.175 → 0.0.178

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 (162) hide show
  1. package/Animated.js.map +1 -1
  2. package/AutocompleteSelect.js.map +1 -1
  3. package/Button.js.map +1 -1
  4. package/CalendarMonthView.css +20 -0
  5. package/CalendarMonthView.d.ts +12 -0
  6. package/CalendarMonthView.js +52 -0
  7. package/CalendarMonthView.js.map +1 -0
  8. package/Checkbox.js.map +1 -1
  9. package/CircleProgress.js.map +1 -1
  10. package/CommonFields.js.map +1 -1
  11. package/DNDContainer.js.map +1 -1
  12. package/DNDDraggable.js.map +1 -1
  13. package/DNDDroppable.js.map +1 -1
  14. package/DatePicker.css +93 -0
  15. package/DatePicker.d.ts +32 -0
  16. package/DatePicker.js +116 -0
  17. package/DatePicker.js.map +1 -0
  18. package/DateTools.d.ts +39 -0
  19. package/DateTools.js +73 -0
  20. package/DateTools.js.map +1 -0
  21. package/Dialog.js.map +1 -1
  22. package/DropFileInput.js.map +1 -1
  23. package/DroppableHorizontalList.js.map +1 -1
  24. package/DroppableList.js.map +1 -1
  25. package/Dropzone.js.map +1 -1
  26. package/FilteredList.js.map +1 -1
  27. package/FloatingActionButton.js.map +1 -1
  28. package/FormUploadProgress.js.map +1 -1
  29. package/ImageGallery.js.map +1 -1
  30. package/MaterialIcon.js.map +1 -1
  31. package/Modal.js.map +1 -1
  32. package/ModalMenu.js.map +1 -1
  33. package/ReactConstants.js.map +1 -1
  34. package/ReactCreateElement.js.map +1 -1
  35. package/ReadyListener.js.map +1 -1
  36. package/Scrollable.js.map +1 -1
  37. package/ScrollableTable.js.map +1 -1
  38. package/Size.js.map +1 -1
  39. package/Snackbar.js.map +1 -1
  40. package/SpinningProgress.js.map +1 -1
  41. package/Switch.js.map +1 -1
  42. package/Table.js.map +1 -1
  43. package/Tabs.css +65 -0
  44. package/Tabs.d.ts +22 -0
  45. package/TextField.js.map +1 -1
  46. package/Tools.d.ts +2 -2
  47. package/Tools.js.map +1 -1
  48. package/bundle.css +726 -587
  49. package/index.js +4 -0
  50. package/index.js.map +1 -1
  51. package/package.json +1 -1
  52. package/router/HistoryTools.js.map +1 -1
  53. package/router/Link.js.map +1 -1
  54. package/router/NavLink.js.map +1 -1
  55. package/router/Route.js.map +1 -1
  56. package/router/index.js.map +1 -1
  57. package/src/Animated.css +7 -0
  58. package/src/Animated.js +219 -0
  59. package/src/Animated.scss +8 -0
  60. package/src/AutocompleteSelect.css +256 -0
  61. package/src/AutocompleteSelect.js +473 -0
  62. package/src/AutocompleteSelect.scss +322 -0
  63. package/src/Button.css +138 -0
  64. package/src/Button.js +104 -0
  65. package/src/Button.scss +177 -0
  66. package/src/CalendarMonthView.css +20 -0
  67. package/src/CalendarMonthView.scss +25 -0
  68. package/src/CalendarMonthView.tsx +80 -0
  69. package/src/Checkbox.css +56 -0
  70. package/src/Checkbox.js +52 -0
  71. package/src/Checkbox.scss +87 -0
  72. package/src/CircleProgress.css +11 -0
  73. package/src/CircleProgress.js +38 -0
  74. package/src/CircleProgress.scss +13 -0
  75. package/src/CommonFields.js +21 -0
  76. package/src/DNDContainer.css +26 -0
  77. package/src/DNDContainer.js +263 -0
  78. package/src/DNDContainer.scss +33 -0
  79. package/src/DNDDraggable.js +55 -0
  80. package/src/DNDDroppable.js +58 -0
  81. package/src/DatePicker.css +93 -0
  82. package/src/DatePicker.scss +118 -0
  83. package/src/DatePicker.tsx +179 -0
  84. package/src/DateTools.ts +85 -0
  85. package/src/Dialog.css +36 -0
  86. package/src/Dialog.js +160 -0
  87. package/src/Dialog.scss +42 -0
  88. package/src/DropFileInput.css +24 -0
  89. package/src/DropFileInput.js +45 -0
  90. package/src/DropFileInput.scss +28 -0
  91. package/src/DroppableHorizontalList.js +190 -0
  92. package/src/DroppableList.css +14 -0
  93. package/src/DroppableList.js +201 -0
  94. package/src/DroppableList.scss +27 -0
  95. package/src/Dropzone.css +54 -0
  96. package/src/Dropzone.js +140 -0
  97. package/src/Dropzone.scss +66 -0
  98. package/src/FilteredList.css +68 -0
  99. package/src/FilteredList.js +196 -0
  100. package/src/FilteredList.scss +86 -0
  101. package/src/FloatingActionButton.css +20 -0
  102. package/src/FloatingActionButton.js +35 -0
  103. package/src/FloatingActionButton.scss +25 -0
  104. package/src/FormUploadProgress.css +61 -0
  105. package/src/FormUploadProgress.js +87 -0
  106. package/src/FormUploadProgress.scss +78 -0
  107. package/src/ImageGallery.css +196 -0
  108. package/src/ImageGallery.js +935 -0
  109. package/src/ImageGallery.scss +256 -0
  110. package/src/MaterialIcon.js +1837 -0
  111. package/src/Modal.css +61 -0
  112. package/src/Modal.js +160 -0
  113. package/src/Modal.scss +73 -0
  114. package/src/ModalMenu.css +30 -0
  115. package/src/ModalMenu.js +59 -0
  116. package/src/ModalMenu.scss +36 -0
  117. package/src/ReactConstants.ts +42 -0
  118. package/src/ReactCreateElement.js +5 -0
  119. package/src/ReadyListener.js +53 -0
  120. package/src/ResizeObserver.ts +50 -0
  121. package/src/Scrollable.css +80 -0
  122. package/src/Scrollable.js +388 -0
  123. package/src/Scrollable.scss +100 -0
  124. package/src/ScrollableTable.css +6 -0
  125. package/src/ScrollableTable.scss +12 -0
  126. package/src/ScrollableTable.tsx +39 -0
  127. package/src/Size.js +56 -0
  128. package/src/Snackbar.css +40 -0
  129. package/src/Snackbar.js +71 -0
  130. package/src/Snackbar.scss +47 -0
  131. package/src/SpinningProgress.css +49 -0
  132. package/src/SpinningProgress.js +19 -0
  133. package/src/SpinningProgress.scss +57 -0
  134. package/src/Switch.css +69 -0
  135. package/src/Switch.js +54 -0
  136. package/src/Switch.scss +73 -0
  137. package/src/Table.css +94 -0
  138. package/src/Table.scss +121 -0
  139. package/src/Table.tsx +360 -0
  140. package/src/Tabs.css +65 -0
  141. package/src/Tabs.scss +77 -0
  142. package/src/Tabs.tsx +63 -0
  143. package/src/TextField.css +122 -0
  144. package/src/TextField.js +162 -0
  145. package/src/TextField.scss +160 -0
  146. package/src/Tools.test.js +105 -0
  147. package/src/Tools.ts +231 -0
  148. package/src/global.css +1 -0
  149. package/src/global.scss +6 -0
  150. package/src/index.js +84 -0
  151. package/src/router/HistoryTools.js +32 -0
  152. package/src/router/Link.js +27 -0
  153. package/src/router/NavLink.js +25 -0
  154. package/src/router/README.md +55 -0
  155. package/src/router/Route.js +209 -0
  156. package/src/router/Route.test.js +139 -0
  157. package/src/router/index.js +14 -0
  158. package/src/store/ProxyTools.js +91 -0
  159. package/src/store/ProxyTools.test.js +97 -0
  160. package/src/store/Store.ts +91 -0
  161. package/store/ProxyTools.js.map +1 -1
  162. package/store/Store.js.map +1 -1
@@ -0,0 +1,388 @@
1
+ import ReactConstants from "./../ReactConstants";
2
+ import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields";
3
+ import React from 'react';
4
+ import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers";
5
+ import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers";
6
+ import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers";
7
+ import './Scrollable.css';
8
+ import ReactCreateElement from './ReactCreateElement';
9
+ import PropTypes from 'prop-types';
10
+ import './Scrollable.css'
11
+ import {classNames, preventDefault, WINDOW, addEventListener, removeEventListener, setTimeout, clearTimeout, setInterval, clearInterval, createRef, orNoop, NOOP} from "./Tools";
12
+ import {propsGetter, stateGS, PureComponent, render, componentDidMount, componentDidUpdate, componentWillUnmount} from "./ReactConstants";
13
+
14
+ export const SCROLLBAR_MODE_HIDDEN = 'hidden';
15
+ export const SCROLLBAR_MODE_VISIBLE = 'visible';
16
+ export const SCROLLBAR_MODE_AUTO = 'auto';
17
+
18
+ let NATIVE_SCROLL_WIDTH = -1;
19
+ let NATIVE_SCROLL_HEIGHT = -1;
20
+
21
+ const WITHOUT_SCROLL = 'without-scroll';
22
+ const WITH_SCROLL = 'with-scroll';
23
+
24
+ const createFieldGetter = field => el => el[field];
25
+ const scrollHeightOf = createFieldGetter('scrollHeight');
26
+ const scrollWidthOf = createFieldGetter('scrollWidth');
27
+ const offsetHeightOf = createFieldGetter('offsetHeight');
28
+ const offsetWidthOf = createFieldGetter('offsetWidth');
29
+ const styleOf = createFieldGetter('style');
30
+ const scrollBarModeOf = createFieldGetter('scrollBarMode');
31
+ const onScroll = createFieldGetter('onScroll');
32
+ const horizontalScrollBarModeOf = createFieldGetter('horizontalScrollBarMode');
33
+
34
+ class Scrollable extends PureComponent {
35
+
36
+ constructor(properties) {
37
+ super(properties);
38
+ const that = this;
39
+ that.state = {};
40
+
41
+ const props = propsGetter(that);
42
+ const status = stateGS(that);
43
+ const statusH = stateGS(that);
44
+
45
+ const containerRef = createRef();
46
+ const viewportRef = createRef();
47
+ const scrollbarRef = createRef();
48
+ const horizontalScrollbarRef = createRef();
49
+ const thumbRef = createRef();
50
+ const horizontalThumbRef = createRef();
51
+
52
+ let resizeInterval;
53
+ let initTimeout;
54
+
55
+ const clear = () => {
56
+ clearInterval(resizeInterval);
57
+ clearTimeout(initTimeout);
58
+ };
59
+
60
+ const init = () => {
61
+ clear();
62
+
63
+ if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN && horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {
64
+ status(WITHOUT_SCROLL);
65
+ statusH(WITHOUT_SCROLL);
66
+ return;
67
+ }
68
+
69
+ const viewport = viewportRef();
70
+ const scrollbar = scrollbarRef();
71
+ const scrollbarH = horizontalScrollbarRef();
72
+ const container = containerRef();
73
+ const thumb = thumbRef();
74
+ const thumbH = horizontalThumbRef();
75
+
76
+ let scrolling = false;
77
+ let scrolledToBottom = false;
78
+ let scrolledToTop = false;
79
+ let adjustedScrollWidth = false;
80
+ let lastY = 0;
81
+ let lastX = 0;
82
+ let ratio = 0;
83
+ let ratioH = 0;
84
+ const onScrollListener = onScroll(props())
85
+
86
+ viewport.onscroll = (e) => {
87
+ const scrollHeight = scrollHeightOf(viewport);
88
+ const offsetHeight = offsetHeightOf(viewport);
89
+ const scrollWidth = scrollWidthOf(viewport);
90
+ const offsetWidth = offsetWidthOf(viewport);
91
+ const scrollbarHeight = offsetHeightOf(scrollbar);
92
+ const scrollbarWidth = offsetWidthOf(scrollbarH);
93
+ let position = __scrollTop(viewport) / (scrollHeight - offsetHeight);
94
+ const positionH = __scrollLeft(viewport) / (scrollWidth - offsetWidth);
95
+
96
+ if (position > 1) {
97
+ viewport.scrollTop = scrollHeight - offsetHeight;
98
+ position = 1
99
+ }
100
+
101
+ styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';
102
+ styleOf(thumbH).left = (positionH * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';
103
+
104
+ if (position >= 0.98) {
105
+ !scrolledToBottom && orNoop(props().onScrolledToBottom)();
106
+ scrolledToBottom = true;
107
+ } else {
108
+ scrolledToBottom = false;
109
+ }
110
+
111
+ if (position <= 0.02) {
112
+ !scrolledToTop && orNoop(props().onScrolledToTop)();
113
+ scrolledToTop = true;
114
+ } else {
115
+ scrolledToTop = false;
116
+ }
117
+
118
+ onScrollListener && onScrollListener(e)
119
+ };
120
+ const reset = () => {
121
+ removeEventListener(WINDOW, 'mouseup', reset);
122
+ removeEventListener(WINDOW, 'mousemove', moveListener);
123
+ __style(viewport).scrollBehavior = ''
124
+ scrolling = false;
125
+ };
126
+ const moveListener = (e) => {
127
+ if (!scrolling)
128
+ return;
129
+
130
+ if (scrolling === 'v') {
131
+ viewport.scrollTop += (e.clientY - lastY) * ratio;
132
+ lastY = e.clientY;
133
+ } else if (scrolling === 'h') {
134
+ viewport.scrollLeft += (e.clientX - lastX) * ratioH;
135
+ lastX = e.clientX;
136
+ }
137
+ };
138
+ thumb.onmousedown = (e) => {
139
+ lastY = e.clientY;
140
+ scrolling = 'v';
141
+ ratio = scrollHeightOf(viewport) / offsetHeightOf(viewport);
142
+ __style(viewport).scrollBehavior = 'unset'
143
+
144
+ addEventListener(WINDOW, 'mouseup', reset);
145
+ addEventListener(WINDOW, 'mousemove', moveListener);
146
+ };
147
+ thumb.ondragstart = preventDefault;
148
+ thumb.onmouseup = reset;
149
+
150
+ thumbH.onmousedown = (e) => {
151
+ lastX = e.clientX;
152
+ scrolling = 'h';
153
+ ratioH = scrollWidthOf(viewport) / offsetWidthOf(viewport);
154
+ __style(viewport).scrollBehavior = 'unset'
155
+
156
+ addEventListener(WINDOW, 'mouseup', reset);
157
+ addEventListener(WINDOW, 'mousemove', moveListener);
158
+ };
159
+ thumbH.ondragstart = preventDefault;
160
+ thumbH.onmouseup = reset;
161
+
162
+ scrollbar.onclick = (e) => {
163
+ if (__target(e) === scrollbar) {
164
+ let thumbPosition = parseInt(__top(styleOf(thumb)));
165
+ viewport.scrollTop += offsetHeightOf(viewport) * 0.9 * (e.offsetY < thumbPosition ? -1 : 1);
166
+ }
167
+ };
168
+ scrollbarH.onclick = (e) => {
169
+ if (__target(e) === scrollbarH) {
170
+ let thumbPosition = parseInt(__left(styleOf(thumbH)));
171
+ viewport.scrollLeft += offsetWidthOf(viewport) * 0.9 * (e.offsetX < thumbPosition ? -1 : 1);
172
+ }
173
+ };
174
+
175
+ const adjustScrollWidth = () => {
176
+ if (NATIVE_SCROLL_WIDTH < 0) {
177
+ NATIVE_SCROLL_WIDTH = viewport.offsetWidth - __clientWidth(viewport);
178
+ if (NATIVE_SCROLL_WIDTH === 0 && scrollHeightOf(viewport) !== offsetHeightOf(viewport)) {
179
+ NATIVE_SCROLL_WIDTH = -1;
180
+ }
181
+ }
182
+ if (NATIVE_SCROLL_HEIGHT < 0) {
183
+ NATIVE_SCROLL_HEIGHT = viewport.offsetHeight - __clientHeight(viewport);
184
+ if (NATIVE_SCROLL_HEIGHT === 0 && scrollWidthOf(viewport) !== offsetWidthOf(viewport)) {
185
+ NATIVE_SCROLL_HEIGHT = -1;
186
+ }
187
+ }
188
+
189
+ if (!adjustedScrollWidth) {
190
+ if (NATIVE_SCROLL_WIDTH >= 0 && status() !== WITHOUT_SCROLL) {
191
+ styleOf(viewport).paddingRight = (NATIVE_SCROLL_WIDTH) + __clientWidth(scrollbar) + 'px';
192
+ styleOf(viewport).marginRight = -(NATIVE_SCROLL_WIDTH) - __clientWidth(scrollbar) + 'px';
193
+ }
194
+ if (NATIVE_SCROLL_HEIGHT >= 0 && statusH() !== WITHOUT_SCROLL) {
195
+ styleOf(viewport).paddingBottom = (NATIVE_SCROLL_HEIGHT) + __clientHeight(scrollbarH) + 'px';
196
+ styleOf(viewport).marginBottom = -(NATIVE_SCROLL_HEIGHT) - __clientHeight(scrollbarH) + 'px';
197
+ }
198
+ adjustedScrollWidth = true;
199
+ }
200
+ };
201
+
202
+ adjustScrollWidth();
203
+
204
+ const showScrollbar = (scrollbar, viewport, adjustScrollWidth) => {
205
+ styleOf(scrollbar).visibility = 'inherit';
206
+ styleOf(scrollbar).bottom = '0'; //enable scrollbar
207
+ styleOf(viewport).overflowY = '';
208
+ adjustScrollWidth();
209
+ status() !== WITH_SCROLL && status(WITH_SCROLL);
210
+ };
211
+
212
+ const hideScrollbar = (scrollbar, viewport) => {
213
+ styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar
214
+ styleOf(viewport).overflowY = 'inherit';
215
+ styleOf(viewport).paddingRight = '0';
216
+ styleOf(viewport).marginRight = '0';
217
+ status() !== WITHOUT_SCROLL && status(WITHOUT_SCROLL);
218
+ };
219
+
220
+ const showHorizontalScrollbar = (scrollbar, viewport, adjustScrollWidth) => {
221
+ styleOf(scrollbar).visibility = 'inherit';
222
+ styleOf(scrollbar).right = '0'; //enable scrollbar
223
+ styleOf(viewport).overflowX = '';
224
+ adjustScrollWidth();
225
+ statusH() !== WITH_SCROLL && statusH(WITH_SCROLL);
226
+ };
227
+
228
+ const hideHorizontalScrollbar = (scrollbar, viewport) => {
229
+ styleOf(scrollbar).visibility = 'hidden'; //disable scrollbar
230
+ styleOf(viewport).overflowX = 'inherit';
231
+ styleOf(viewport).paddingBottom = '0';
232
+ styleOf(viewport).marginBottom = '0';
233
+ statusH() !== WITHOUT_SCROLL && statusH(WITHOUT_SCROLL);
234
+ };
235
+
236
+ const updateVerticalScrollbar = () => {
237
+ const scrollHeight = scrollHeightOf(viewport);
238
+ const scrollbarHeight = offsetHeightOf(scrollbar);
239
+
240
+ !adjustedScrollWidth && adjustScrollWidth();
241
+
242
+ const newRatio = scrollHeight / scrollbarHeight;
243
+ if ((ratio === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
244
+
245
+ const offsetHeight = offsetHeightOf(viewport);
246
+ const horizontalScrollBarOffset = statusH() !== WITHOUT_SCROLL ? __clientHeight(scrollbarH) + Math.max(NATIVE_SCROLL_HEIGHT, 0) : 0;
247
+
248
+ let containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;
249
+ if (containerOffsetHeight === scrollHeight && status() === WITHOUT_SCROLL)
250
+ return;
251
+
252
+ if (props().autoScrollTop && scrollHeight - offsetHeight - __scrollTop(viewport) <= 20 && newRatio < ratio && Number.isFinite(newRatio) && Number.isFinite(ratio)) {
253
+ viewport.scrollTop = 0; // scroll to top if scrollbar gets smaller
254
+ }
255
+
256
+ ratio = newRatio;
257
+ styleOf(thumb).height = (scrollbarHeight / newRatio) + 'px';
258
+
259
+ styleOf(container).height = scrollHeight - horizontalScrollBarOffset + 'px';
260
+ containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;
261
+
262
+ if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {
263
+ if (status() !== WITHOUT_SCROLL)
264
+ hideScrollbar(scrollbar, viewport);
265
+
266
+ return
267
+ }
268
+
269
+ if (containerOffsetHeight < scrollHeight) {
270
+ adjustedScrollWidth = false;
271
+ showScrollbar(scrollbar, viewport, adjustScrollWidth);
272
+ } else {
273
+ hideScrollbar(scrollbar, viewport);
274
+ }
275
+
276
+ scrolledToBottom = false;
277
+ scrolledToTop = false;
278
+
279
+ const position = __scrollTop(viewport) / (scrollHeight - offsetHeight);
280
+ styleOf(thumb).top = (position * (scrollbarHeight - offsetHeightOf(thumb))) + 'px';
281
+ };
282
+
283
+ const updateHorizontalScrollbar = () => {
284
+
285
+ const scrollWidth = scrollWidthOf(viewport);
286
+ const scrollbarWidth = offsetWidthOf(scrollbarH);
287
+
288
+ !adjustedScrollWidth && adjustScrollWidth();
289
+
290
+ const newRatio = scrollWidth / scrollbarWidth;
291
+ if ((ratioH === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
292
+
293
+ const offsetWidth = offsetWidthOf(viewport);
294
+
295
+ const verticalScrollBarOffset = status() !== WITHOUT_SCROLL ? __clientWidth(scrollbar) + Math.max(NATIVE_SCROLL_WIDTH, 0) : 0;
296
+ let containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;
297
+
298
+ if (containerOffsetWidth === scrollWidth && statusH() === WITHOUT_SCROLL)
299
+ return;
300
+
301
+ ratioH = newRatio;
302
+ styleOf(thumbH).width = (scrollbarWidth / newRatio) + 'px';
303
+
304
+
305
+ if (horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {
306
+ if (statusH() !== WITHOUT_SCROLL)
307
+ hideHorizontalScrollbar(scrollbarH, viewport);
308
+
309
+ return
310
+ }
311
+
312
+ styleOf(container).width = (scrollWidth - verticalScrollBarOffset) + 'px';
313
+ containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;
314
+
315
+ if (containerOffsetWidth < scrollWidth) {
316
+ adjustedScrollWidth = false;
317
+ showHorizontalScrollbar(scrollbarH, viewport, adjustScrollWidth);
318
+ } else {
319
+ hideHorizontalScrollbar(scrollbarH, viewport);
320
+ }
321
+
322
+ const position = __scrollLeft(viewport) / (scrollWidth - offsetWidth);
323
+ styleOf(thumbH).left = (position * (scrollbarWidth - offsetWidthOf(thumbH))) + 'px';
324
+ };
325
+
326
+ initTimeout = setTimeout(() => {
327
+ resizeInterval = setInterval(() => {
328
+ updateVerticalScrollbar();
329
+ updateHorizontalScrollbar();
330
+ }, 50);
331
+ }, 200)
332
+ };
333
+
334
+ that[ReactConstants[0]] = init;
335
+ that[ReactConstants[1]] = clear;
336
+
337
+ that[ReactConstants[2]] = (prevProps) => {
338
+ if (scrollBarModeOf(props()) !== scrollBarModeOf(prevProps))
339
+ init();
340
+ else if (onScroll(props()) !== onScroll(prevProps))
341
+ init();
342
+ };
343
+
344
+ that.setScroll = (y) => {
345
+ viewportRef().scrollTop = y
346
+ };
347
+ that.getScroll = () => __scrollTop(viewportRef());
348
+ that.getScrollHeight = () => scrollHeightOf(viewportRef());
349
+ that.getHeight = () => __clientHeight(containerRef());
350
+
351
+ that[ReactConstants[3]] = () => {
352
+ const _props = props();
353
+ const {className, children} = _props;
354
+ return (
355
+ <div className={classNames('Scrollable', className, status() || WITH_SCROLL, statusH() + '-horizontal')} style={styleOf(_props)} ref={containerRef}>
356
+ <div className="viewport" ref={viewportRef}>
357
+ {children}
358
+ </div>
359
+ <div className={classNames('scrollbar', scrollBarModeOf(_props) || SCROLLBAR_MODE_AUTO)} ref={scrollbarRef}>
360
+ <div className="thumb" ref={thumbRef}/>
361
+ </div>
362
+ <div className={classNames('scrollbar horizontal', horizontalScrollBarModeOf(_props))} ref={horizontalScrollbarRef}>
363
+ <div className="thumb" ref={horizontalThumbRef}/>
364
+ </div>
365
+ </div>
366
+ )
367
+ };
368
+ }
369
+ }
370
+
371
+ export default Scrollable
372
+
373
+ Scrollable.defaultProps = {
374
+ autoScrollTop: true,
375
+ horizontalScrollBarMode: SCROLLBAR_MODE_HIDDEN
376
+ };
377
+
378
+ if (process.env.NODE_ENV !== 'production') {
379
+ Scrollable.propTypes = {
380
+ scrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),
381
+ horizontalScrollBarMode: PropTypes.oneOf([SCROLLBAR_MODE_AUTO, SCROLLBAR_MODE_HIDDEN, SCROLLBAR_MODE_VISIBLE]),
382
+ [ReactConstants[5]]: PropTypes.string,
383
+ style: PropTypes.object,
384
+ onScrolledToBottom: PropTypes.func,
385
+ onScrolledToTop: PropTypes.func,
386
+ autoScrollTop: PropTypes.bool,
387
+ }
388
+ }
@@ -0,0 +1,100 @@
1
+ .Scrollable {
2
+ max-height: 250px;
3
+ max-width: 250px;
4
+ padding-right: 5px;
5
+ position: relative;
6
+ display: flex;
7
+ flex-flow: column;
8
+ align-items: stretch;
9
+ overflow: hidden;
10
+
11
+ &:hover > .scrollbar.auto {
12
+ transition-delay: 0s;
13
+ opacity: 1;
14
+ }
15
+
16
+ .viewport {
17
+ overflow-y: scroll;
18
+ overflow-x: scroll;
19
+ max-height: 100%;
20
+ scroll-behavior: smooth;
21
+
22
+ scrollbar-width: none;
23
+
24
+ //force hide scrollbar for mac-os
25
+ &::-webkit-scrollbar {
26
+ display: none;
27
+ }
28
+ }
29
+
30
+ &.with-scroll {
31
+ }
32
+
33
+ &.without-scroll-horizontal {
34
+ max-width: unset;
35
+ }
36
+
37
+ &.without-scroll {
38
+ padding-right: 0;
39
+ max-height: unset;
40
+
41
+ > .viewport {
42
+ padding-right: 0;
43
+ margin-right: 0;
44
+ }
45
+
46
+ > .scrollbar {
47
+ visibility: hidden;
48
+ }
49
+ }
50
+
51
+ .scrollbar {
52
+ position: absolute;
53
+ right: 0px;
54
+ top: 0px;
55
+ width: 5px;
56
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
57
+ transition-delay: 0.5s;
58
+ z-index: 1;
59
+
60
+ &.auto, &.hidden {
61
+ opacity: 0;
62
+ }
63
+
64
+ .thumb {
65
+ background-color: rgba(0, 0, 0, 0.3);
66
+ width: 5px;
67
+ position: absolute;
68
+ right: 0px;
69
+ top: 0px;
70
+ user-select: none;
71
+ will-change: top;
72
+ border-radius: 2px;
73
+
74
+ &:hover {
75
+ background-color: rgba(0, 0, 0, 0.5);
76
+ }
77
+
78
+ &:active {
79
+ background-color: rgba(0, 0, 0, 0.7);
80
+ }
81
+ }
82
+ }
83
+
84
+ .scrollbar.horizontal {
85
+ left: 0px;
86
+ right: 0px;
87
+ height: 5px;
88
+ bottom: 0;
89
+
90
+ width: unset;
91
+ top: unset;
92
+
93
+ .thumb {
94
+ height: 5px;
95
+ left: 0px;
96
+ bottom: 0px;
97
+ will-change: left;
98
+ }
99
+ }
100
+ }
@@ -0,0 +1,6 @@
1
+ .ScrollableTable .Scrollable .scrollbar {
2
+ top: 56px;
3
+ }
4
+ .ScrollableTable .Table {
5
+ position: static;
6
+ }
@@ -0,0 +1,12 @@
1
+ .ScrollableTable {
2
+
3
+ .Scrollable {
4
+ .scrollbar {
5
+ top: 56px;
6
+ }
7
+ }
8
+
9
+ .Table {
10
+ position: static;
11
+ }
12
+ }
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import Table, {TableProps, TableState} from "./Table";
3
+ import Scrollable from "./Scrollable";
4
+ import "./ScrollableTable.css";
5
+ import {props, render, PureComponent} from "./ReactConstants";
6
+ import {createRef} from "./Tools";
7
+
8
+ export interface WithScrollable {
9
+ getScrollable: () => Scrollable
10
+ }
11
+
12
+ export interface ScrollableTableProps<T> extends TableProps<T> {
13
+ scrollableProps?: any
14
+ }
15
+
16
+ class ScrollableTable<T> extends PureComponent<ScrollableTableProps<T>, TableState<T>> implements WithScrollable {
17
+
18
+ constructor(properties) {
19
+ super(properties);
20
+ const that = this;
21
+
22
+ const scrollableRef = createRef();
23
+
24
+ that[render] = () => {
25
+ return <div className={`ScrollableTable`}>
26
+ <Scrollable ref={scrollableRef} {...props(that).scrollableProps}>
27
+ <Table {...props(that)}/>
28
+ </Scrollable>
29
+ </div>;
30
+ }
31
+ that.getScrollable = () => scrollableRef()
32
+ }
33
+
34
+ getScrollable(): Scrollable {
35
+ return undefined;
36
+ }
37
+ }
38
+
39
+ export default ScrollableTable
package/src/Size.js ADDED
@@ -0,0 +1,56 @@
1
+ import ReactConstants from "./../ReactConstants";
2
+ import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields";
3
+ import React from 'react';
4
+ import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers";
5
+ import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers";
6
+ import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers";
7
+ import ReactCreateElement from './ReactCreateElement';
8
+ import {isUndefined} from "./Tools";
9
+
10
+ const Size = ({value}) => (
11
+ <span className="Size">
12
+ {formatNumber(value, 1)}&nbsp;{formatAbbreviation(value)}
13
+ </span>
14
+ );
15
+
16
+ export const formatNumberWithMaxLength = (size, fractionalLength, toAbbreviation, maxLength) => {
17
+ let result;
18
+ if (isUndefined(fractionalLength))
19
+ fractionalLength = 1;
20
+ if (isUndefined(maxLength))
21
+ maxLength = -1;
22
+
23
+ do {
24
+ result = formatNumber(size, fractionalLength, toAbbreviation);
25
+ fractionalLength--;
26
+ } while (maxLength !== -1 && fractionalLength >= 0 && __length(result) > maxLength);
27
+ return result;
28
+ };
29
+
30
+ function formatNumber(size, fractionalLength, toAbbreviation) {
31
+ if (size < 1000 && !toAbbreviation || toAbbreviation === 'B')
32
+ return size + '';
33
+ size /= 1024;
34
+ if (size < 1000 && !toAbbreviation || toAbbreviation === 'KB')
35
+ return size.toFixed(fractionalLength);
36
+ size /= 1024;
37
+ if (size < 1000 && !toAbbreviation || toAbbreviation === 'MB')
38
+ return size.toFixed(fractionalLength);
39
+ size /= 1024;
40
+ return size.toFixed(fractionalLength);
41
+ };
42
+
43
+ export const formatAbbreviation = (size) => {
44
+ if (size < 1000)
45
+ return 'B';
46
+ size /= 1024;
47
+ if (size < 1000)
48
+ return 'KB';
49
+ size /= 1024;
50
+ if (size < 1000)
51
+ return 'MB';
52
+ size /= 1024;
53
+ return 'GB';
54
+ };
55
+
56
+ export default Size
@@ -0,0 +1,40 @@
1
+ .Snackbar {
2
+ transform: translateX(-50%);
3
+ overflow: hidden;
4
+ background-color: #323232;
5
+ padding: 14px 24px 14px 24px;
6
+ color: #fff;
7
+ min-width: 288px;
8
+ max-width: 568px;
9
+ position: fixed;
10
+ bottom: -50px;
11
+ left: 50%;
12
+ display: flex;
13
+ flex-wrap: nowrap;
14
+ align-items: center;
15
+ opacity: 0;
16
+ transition: bottom 0.25s ease, opacity 0.2s ease;
17
+ border-radius: 4px;
18
+ box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
19
+ }
20
+ .Snackbar.shown {
21
+ bottom: 15px;
22
+ opacity: 1;
23
+ }
24
+ .Snackbar .message {
25
+ overflow: hidden;
26
+ line-height: 1.2em;
27
+ min-height: 1.2em;
28
+ max-height: 2.4em;
29
+ flex: 1;
30
+ }
31
+ .Snackbar .action {
32
+ text-transform: uppercase;
33
+ font-weight: bold;
34
+ margin-left: 48px;
35
+ color: #bf3727;
36
+ }
37
+ .Snackbar .action a {
38
+ text-decoration: none;
39
+ color: #bf3727;
40
+ }