react-ui-basics 0.0.174 → 0.0.177
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.
- package/Animated.js.map +1 -0
- package/AutocompleteSelect.js +9 -23
- package/AutocompleteSelect.js.map +1 -0
- package/Button.js.map +1 -0
- package/CalendarMonthView.css +20 -0
- package/CalendarMonthView.d.ts +12 -0
- package/CalendarMonthView.js +52 -0
- package/CalendarMonthView.js.map +1 -0
- package/Checkbox.js.map +1 -0
- package/CircleProgress.js.map +1 -0
- package/CommonFields.js.map +1 -0
- package/DNDContainer.js.map +1 -0
- package/DNDDraggable.js.map +1 -0
- package/DNDDroppable.js.map +1 -0
- package/DatePicker.css +93 -0
- package/DatePicker.d.ts +32 -0
- package/DatePicker.js +116 -0
- package/DatePicker.js.map +1 -0
- package/DateTools.d.ts +39 -0
- package/DateTools.js +73 -0
- package/DateTools.js.map +1 -0
- package/Dialog.js.map +1 -0
- package/DropFileInput.js.map +1 -0
- package/DroppableHorizontalList.js.map +1 -0
- package/DroppableList.js.map +1 -0
- package/Dropzone.js.map +1 -0
- package/FilteredList.js +234 -139
- package/FilteredList.js.map +1 -0
- package/FloatingActionButton.js.map +1 -0
- package/FormUploadProgress.js.map +1 -0
- package/ImageGallery.js.map +1 -0
- package/MaterialIcon.js.map +1 -0
- package/Modal.js.map +1 -0
- package/ModalMenu.js.map +1 -0
- package/ReactConstants.js.map +1 -0
- package/ReactCreateElement.js.map +1 -0
- package/ReadyListener.js.map +1 -0
- package/Scrollable.js.map +1 -0
- package/ScrollableTable.js.map +1 -0
- package/Size.js.map +1 -0
- package/Snackbar.js.map +1 -0
- package/SpinningProgress.js.map +1 -0
- package/Switch.js.map +1 -0
- package/Table.js.map +1 -0
- package/TextField.js.map +1 -0
- package/Tools.d.ts +2 -2
- package/Tools.js.map +1 -0
- package/bundle.css +816 -677
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/package.json +1 -1
- package/router/HistoryTools.js.map +1 -1
- package/router/Link.js.map +1 -1
- package/router/NavLink.js.map +1 -1
- package/router/Route.js.map +1 -1
- package/router/index.js.map +1 -1
- package/src/Animated.css +7 -0
- package/src/Animated.js +219 -0
- package/src/Animated.scss +8 -0
- package/src/AutocompleteSelect.css +256 -0
- package/src/AutocompleteSelect.js +473 -0
- package/src/AutocompleteSelect.scss +322 -0
- package/src/Button.css +138 -0
- package/src/Button.js +104 -0
- package/src/Button.scss +177 -0
- package/src/CalendarMonthView.css +20 -0
- package/src/CalendarMonthView.scss +25 -0
- package/src/CalendarMonthView.tsx +80 -0
- package/src/Checkbox.css +56 -0
- package/src/Checkbox.js +52 -0
- package/src/Checkbox.scss +87 -0
- package/src/CircleProgress.css +11 -0
- package/src/CircleProgress.js +38 -0
- package/src/CircleProgress.scss +13 -0
- package/src/CommonFields.js +21 -0
- package/src/DNDContainer.css +26 -0
- package/src/DNDContainer.js +263 -0
- package/src/DNDContainer.scss +33 -0
- package/src/DNDDraggable.js +55 -0
- package/src/DNDDroppable.js +58 -0
- package/src/DatePicker.css +93 -0
- package/src/DatePicker.scss +118 -0
- package/src/DatePicker.tsx +179 -0
- package/src/DateTools.ts +85 -0
- package/src/Dialog.css +36 -0
- package/src/Dialog.js +160 -0
- package/src/Dialog.scss +42 -0
- package/src/DropFileInput.css +24 -0
- package/src/DropFileInput.js +45 -0
- package/src/DropFileInput.scss +28 -0
- package/src/DroppableHorizontalList.js +190 -0
- package/src/DroppableList.css +14 -0
- package/src/DroppableList.js +201 -0
- package/src/DroppableList.scss +27 -0
- package/src/Dropzone.css +54 -0
- package/src/Dropzone.js +140 -0
- package/src/Dropzone.scss +66 -0
- package/src/FilteredList.css +68 -0
- package/src/FilteredList.js +196 -0
- package/src/FilteredList.scss +86 -0
- package/src/FloatingActionButton.css +20 -0
- package/src/FloatingActionButton.js +35 -0
- package/src/FloatingActionButton.scss +25 -0
- package/src/FormUploadProgress.css +61 -0
- package/src/FormUploadProgress.js +87 -0
- package/src/FormUploadProgress.scss +78 -0
- package/src/ImageGallery.css +196 -0
- package/src/ImageGallery.js +935 -0
- package/src/ImageGallery.scss +256 -0
- package/src/MaterialIcon.js +1837 -0
- package/src/Modal.css +61 -0
- package/src/Modal.js +160 -0
- package/src/Modal.scss +73 -0
- package/src/ModalMenu.css +30 -0
- package/src/ModalMenu.js +59 -0
- package/src/ModalMenu.scss +36 -0
- package/src/ReactConstants.ts +42 -0
- package/src/ReactCreateElement.js +5 -0
- package/src/ReadyListener.js +53 -0
- package/src/ResizeObserver.ts +50 -0
- package/src/Scrollable.css +80 -0
- package/src/Scrollable.js +388 -0
- package/src/Scrollable.scss +100 -0
- package/src/ScrollableTable.css +6 -0
- package/src/ScrollableTable.scss +12 -0
- package/src/ScrollableTable.tsx +39 -0
- package/src/Size.js +56 -0
- package/src/Snackbar.css +40 -0
- package/src/Snackbar.js +71 -0
- package/src/Snackbar.scss +47 -0
- package/src/SpinningProgress.css +49 -0
- package/src/SpinningProgress.js +19 -0
- package/src/SpinningProgress.scss +57 -0
- package/src/Switch.css +69 -0
- package/src/Switch.js +54 -0
- package/src/Switch.scss +73 -0
- package/src/Table.css +94 -0
- package/src/Table.scss +121 -0
- package/src/Table.tsx +360 -0
- package/src/TextField.css +122 -0
- package/src/TextField.js +162 -0
- package/src/TextField.scss +160 -0
- package/src/Tools.test.js +105 -0
- package/src/Tools.ts +231 -0
- package/src/global.css +1 -0
- package/src/global.scss +6 -0
- package/src/index.js +84 -0
- package/src/router/HistoryTools.js +32 -0
- package/src/router/Link.js +27 -0
- package/src/router/NavLink.js +25 -0
- package/src/router/README.md +55 -0
- package/src/router/Route.js +209 -0
- package/src/router/Route.test.js +139 -0
- package/src/router/index.js +14 -0
- package/src/store/ProxyTools.js +91 -0
- package/src/store/ProxyTools.test.js +97 -0
- package/src/store/Store.ts +91 -0
- package/store/ProxyTools.js.map +1 -1
- package/store/Store.js.map +1 -1
- package/FilteredList.d.ts +0 -61
|
@@ -0,0 +1,190 @@
|
|
|
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, {Component} 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 './DroppableList.css'
|
|
9
|
+
import DNDDroppable from "./DNDDroppable";
|
|
10
|
+
import {classNames, orNoop, setTimeout, NOOP} from "./Tools";
|
|
11
|
+
import DNDDraggable from "./DNDDraggable";
|
|
12
|
+
import {addListener} from "./DNDContainer";
|
|
13
|
+
import {stateGS, setState, propsGetter, props as getProps, render, componentDidUpdate, componentDidMount, children} from "./ReactConstants";
|
|
14
|
+
|
|
15
|
+
class DroppableHorizontalList extends Component {
|
|
16
|
+
|
|
17
|
+
constructor(properties) {
|
|
18
|
+
super(properties);
|
|
19
|
+
const that = this;
|
|
20
|
+
that.state = {};
|
|
21
|
+
|
|
22
|
+
const props = propsGetter(that);
|
|
23
|
+
const resetting = stateGS(that);
|
|
24
|
+
const draggables = {};
|
|
25
|
+
let list;
|
|
26
|
+
|
|
27
|
+
const init = () => {
|
|
28
|
+
list = [];
|
|
29
|
+
React.Children.forEach(props()[ReactConstants[4]], child => {
|
|
30
|
+
child && child.type === DNDDraggable && list.push(getProps(child).id);
|
|
31
|
+
})
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
init();
|
|
35
|
+
|
|
36
|
+
that[ReactConstants[2]] = (prevProps) => {
|
|
37
|
+
if (prevProps[ReactConstants[4]] !== props()[ReactConstants[4]]) {
|
|
38
|
+
init();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
let dropped;
|
|
43
|
+
let dragging;
|
|
44
|
+
let oldIndex;
|
|
45
|
+
let newIndex;
|
|
46
|
+
|
|
47
|
+
that[ReactConstants[0]] = () => {
|
|
48
|
+
let inTransition = false;
|
|
49
|
+
orNoop(props().provideDraggableEnhancer)(initializer => it => {
|
|
50
|
+
orNoop(initializer)(it);
|
|
51
|
+
it.createPositionListener = (e, style) => {
|
|
52
|
+
const offset = __pageX(e);
|
|
53
|
+
return e => {
|
|
54
|
+
__pageX(e) && (style.transform = 'translateX(' + (__pageX(e) - offset) + 'px)');
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
it.initDraggedStyles = NOOP;
|
|
58
|
+
it.onDragEnd = () => {
|
|
59
|
+
const style = it.element.style;
|
|
60
|
+
inTransition = true;
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
const droppingDuration = props().droppingDuration || 100;
|
|
63
|
+
style.transition = 'transform ' + droppingDuration + 'ms linear';
|
|
64
|
+
style.transform = '';
|
|
65
|
+
style.zIndex = '10';
|
|
66
|
+
setTimeout(() => {
|
|
67
|
+
style.transition = '';
|
|
68
|
+
style.zIndex = '';
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
inTransition = false;
|
|
71
|
+
}, 50) // ignore mouseenter on the old position
|
|
72
|
+
}, droppingDuration)
|
|
73
|
+
}, 1);
|
|
74
|
+
};
|
|
75
|
+
addListener(it.element, it, 'mouseenter', (e) => {
|
|
76
|
+
!(dragging || inTransition) && setState(it, {hover: true});
|
|
77
|
+
});
|
|
78
|
+
addListener(it.element, it, 'mouseleave', (e) => {
|
|
79
|
+
!dragging && setState(it, {hover: false});
|
|
80
|
+
});
|
|
81
|
+
it.onUnmount = () => {
|
|
82
|
+
delete draggables[getProps(it).id];
|
|
83
|
+
};
|
|
84
|
+
draggables[getProps(it).id] = it;
|
|
85
|
+
})
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const onHover = (e, draggable) => {
|
|
89
|
+
const offset = __pageX(e) - that.scrollOffsetX;
|
|
90
|
+
const transformLeft = 'translateX(' + __width(draggable) + 'px)';
|
|
91
|
+
const transformRight = 'translateX(-' + __width(draggable) + 'px)';
|
|
92
|
+
list.forEach((id, i) => {
|
|
93
|
+
if (i !== oldIndex) {
|
|
94
|
+
const d = draggables[id];
|
|
95
|
+
const bounds = d.bounds;
|
|
96
|
+
const style = d.element.style;
|
|
97
|
+
if (i > oldIndex) {
|
|
98
|
+
if (offset >= __left(bounds))
|
|
99
|
+
style.transform = transformRight;
|
|
100
|
+
else
|
|
101
|
+
style.transform = '';
|
|
102
|
+
} else {
|
|
103
|
+
if (offset <= bounds.right)
|
|
104
|
+
style.transform = transformLeft;
|
|
105
|
+
else
|
|
106
|
+
style.transform = '';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
let i = list.findIndex(id => {
|
|
112
|
+
let bounds = draggables[id].bounds;
|
|
113
|
+
return offset >= __left(bounds) && offset <= bounds.right
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
newIndex = i !== -1 ? i : __length(list);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const onDragStart = (e, draggable) => {
|
|
120
|
+
dragging = true;
|
|
121
|
+
dropped = false;
|
|
122
|
+
oldIndex = list.indexOf(getProps(draggable).id);
|
|
123
|
+
that.scrollOffsetX = __pageX(e) - e.clientX;
|
|
124
|
+
|
|
125
|
+
list.forEach((id) => {
|
|
126
|
+
draggables[id].bounds = draggables[id].element.getBoundingClientRect();
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const reset = (ignoredIndex, transition) => {
|
|
131
|
+
list.forEach((id, i) => {
|
|
132
|
+
if (i !== ignoredIndex) {
|
|
133
|
+
const s = draggables[id].element.style;
|
|
134
|
+
s.transform = '';
|
|
135
|
+
s.transition = transition;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const onDragEnd = (draggable) => {
|
|
141
|
+
const index = list.indexOf(getProps(draggable).id);
|
|
142
|
+
|
|
143
|
+
if (dropped) {
|
|
144
|
+
reset(index, '');
|
|
145
|
+
} else {
|
|
146
|
+
resetting(true, () => {
|
|
147
|
+
reset(index, '');
|
|
148
|
+
});
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
resetting(false);
|
|
151
|
+
}, props().droppingDuration || 100);
|
|
152
|
+
}
|
|
153
|
+
dragging = false;
|
|
154
|
+
};
|
|
155
|
+
const onDrop = (data) => {
|
|
156
|
+
dropped = true;
|
|
157
|
+
const draggable = draggables[list[oldIndex]];
|
|
158
|
+
const style = draggable.element.style;
|
|
159
|
+
|
|
160
|
+
const diff = (newIndex - oldIndex) * draggable.bounds.width;
|
|
161
|
+
const transform = style.transform;
|
|
162
|
+
const position = transform.substring(11, __length(transform) - 3);
|
|
163
|
+
style.transform = 'translateX(' + (position - diff) + 'px)'; // set translateX against new position on the list to prevent long slide
|
|
164
|
+
orNoop(props().onDrop)(data, oldIndex, newIndex);
|
|
165
|
+
|
|
166
|
+
reset(newIndex, 'unset');
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
that[ReactConstants[3]] = () => {
|
|
170
|
+
const _props = props();
|
|
171
|
+
const {className, initializer} = _props;
|
|
172
|
+
return <DNDDroppable className={classNames(
|
|
173
|
+
'DroppableList',
|
|
174
|
+
className,
|
|
175
|
+
resetting() && 'resetting',
|
|
176
|
+
)}
|
|
177
|
+
initializer={initializer}
|
|
178
|
+
onHover={onHover}
|
|
179
|
+
onDragStart={onDragStart}
|
|
180
|
+
onDragEnd={onDragEnd}
|
|
181
|
+
onDrop={onDrop}
|
|
182
|
+
>
|
|
183
|
+
{_props[ReactConstants[4]]}
|
|
184
|
+
</DNDDroppable>;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
export default DroppableHorizontalList;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
.DNDContainer .DroppableList .Draggable {
|
|
2
|
+
transform: unset;
|
|
3
|
+
transition: unset;
|
|
4
|
+
opacity: 1;
|
|
5
|
+
}
|
|
6
|
+
.DNDContainer .DroppableList .Draggable.dragged {
|
|
7
|
+
transition: unset !important;
|
|
8
|
+
}
|
|
9
|
+
.DNDContainer .DroppableList.hover .Draggable {
|
|
10
|
+
transition: transform 0.2s ease-in;
|
|
11
|
+
}
|
|
12
|
+
.DNDContainer .DroppableList.resetting .Draggable {
|
|
13
|
+
transition: transform 0.1s ease-in;
|
|
14
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
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, {Component} 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 './DroppableList.css';
|
|
8
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
9
|
+
import './DroppableList.css'
|
|
10
|
+
import DNDDroppable from "./DNDDroppable";
|
|
11
|
+
import {classNames, orNoop, setTimeout, NOOP} from "./Tools";
|
|
12
|
+
import DNDDraggable from "./DNDDraggable";
|
|
13
|
+
import {addListener} from "./DNDContainer";
|
|
14
|
+
import {stateGS, setState, propsGetter, props as getProps, render, componentDidUpdate, componentDidMount, children} from "./ReactConstants";
|
|
15
|
+
|
|
16
|
+
class DroppableList extends Component {
|
|
17
|
+
|
|
18
|
+
constructor(properties) {
|
|
19
|
+
super(properties);
|
|
20
|
+
const that = this;
|
|
21
|
+
that.state = {};
|
|
22
|
+
|
|
23
|
+
const props = propsGetter(that);
|
|
24
|
+
const resetting = stateGS(that);
|
|
25
|
+
const draggables = {};
|
|
26
|
+
let list;
|
|
27
|
+
|
|
28
|
+
const init = () => {
|
|
29
|
+
list = [];
|
|
30
|
+
React.Children.forEach(props()[ReactConstants[4]], child => {
|
|
31
|
+
child && child.type === DNDDraggable && list.push(getProps(child).id);
|
|
32
|
+
})
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
init();
|
|
36
|
+
|
|
37
|
+
that[ReactConstants[2]] = (prevProps) => {
|
|
38
|
+
if (prevProps[ReactConstants[4]] !== props()[ReactConstants[4]]) {
|
|
39
|
+
init();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
let dropped;
|
|
44
|
+
let dragging;
|
|
45
|
+
let oldIndex;
|
|
46
|
+
let newIndex;
|
|
47
|
+
|
|
48
|
+
that[ReactConstants[0]] = () => {
|
|
49
|
+
let inTransition = false;
|
|
50
|
+
orNoop(props().provideDraggableEnhancer)(initializer => it => {
|
|
51
|
+
orNoop(initializer)(it);
|
|
52
|
+
it.createPositionListener = (e, style) => {
|
|
53
|
+
const offsetTop = __pageY(e);
|
|
54
|
+
return e => {
|
|
55
|
+
__pageY(e) && (style.transform = 'translateY(' + (__pageY(e) - offsetTop - that.scrollDiff) + 'px)');
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
it.initDraggedStyles = NOOP;
|
|
59
|
+
it.onDragEnd = () => {
|
|
60
|
+
const style = it.element.style;
|
|
61
|
+
inTransition = true;
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
const droppingDuration = props().droppingDuration || 100;
|
|
64
|
+
style.transition = 'transform ' + droppingDuration + 'ms linear';
|
|
65
|
+
style.transform = '';
|
|
66
|
+
style.zIndex = '10';
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
style.transition = '';
|
|
69
|
+
style.zIndex = '';
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
inTransition = false;
|
|
72
|
+
}, 50) // ignore mouseenter on the old position
|
|
73
|
+
}, droppingDuration)
|
|
74
|
+
}, 1);
|
|
75
|
+
};
|
|
76
|
+
addListener(it.element, it, 'mouseenter', (e) => {
|
|
77
|
+
!(dragging || inTransition) && setState(it, {hover: true});
|
|
78
|
+
});
|
|
79
|
+
addListener(it.element, it, 'mouseleave', (e) => {
|
|
80
|
+
!dragging && setState(it, {hover: false});
|
|
81
|
+
});
|
|
82
|
+
it.onUnmount = () => {
|
|
83
|
+
delete draggables[getProps(it).id];
|
|
84
|
+
};
|
|
85
|
+
draggables[getProps(it).id] = it;
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
orNoop(props().provideScrollListener)(e => {
|
|
89
|
+
if (!dragging)
|
|
90
|
+
return
|
|
91
|
+
|
|
92
|
+
that.scrollDiff = that.scroll - orNoop(props().getScrollPosition)() || 0;
|
|
93
|
+
})
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const onHover = (e, draggable) => {
|
|
97
|
+
const y = __pageY(e) - that.scrollOffsetY - that.scrollDiff;
|
|
98
|
+
const transformUp = 'translateY(' + __height(draggable) + 'px)';
|
|
99
|
+
const transformDown = 'translateY(-' + __height(draggable) + 'px)';
|
|
100
|
+
list.forEach((id, i) => {
|
|
101
|
+
if (i !== oldIndex) {
|
|
102
|
+
const d = draggables[id];
|
|
103
|
+
const bounds = d.bounds;
|
|
104
|
+
const style = d.element.style;
|
|
105
|
+
if (i > oldIndex) {
|
|
106
|
+
if (y >= __top(bounds))
|
|
107
|
+
style.transform = transformDown;
|
|
108
|
+
else
|
|
109
|
+
style.transform = '';
|
|
110
|
+
} else {
|
|
111
|
+
if (y <= bounds.bottom)
|
|
112
|
+
style.transform = transformUp;
|
|
113
|
+
else
|
|
114
|
+
style.transform = '';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
let i = list.findIndex(id => {
|
|
120
|
+
let bounds = draggables[id].bounds;
|
|
121
|
+
return y >= __top(bounds) && y <= bounds.bottom
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
newIndex = i !== -1 ? i : __length(list);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const onDragStart = (e, draggable) => {
|
|
128
|
+
dragging = true;
|
|
129
|
+
dropped = false;
|
|
130
|
+
oldIndex = list.indexOf(getProps(draggable).id);
|
|
131
|
+
that.scrollOffsetY = __pageY(e) - e.clientY;
|
|
132
|
+
that.scroll = orNoop(props().getScrollPosition)() || 0;
|
|
133
|
+
that.scrollDiff = 0;
|
|
134
|
+
|
|
135
|
+
list.forEach((id) => {
|
|
136
|
+
draggables[id].bounds = draggables[id].element.getBoundingClientRect();
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const reset = (ignoredIndex, transition) => {
|
|
141
|
+
list.forEach((id, i) => {
|
|
142
|
+
if (i !== ignoredIndex) {
|
|
143
|
+
const s = draggables[id].element.style;
|
|
144
|
+
s.transform = '';
|
|
145
|
+
s.transition = transition;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const onDragEnd = (draggable) => {
|
|
151
|
+
const index = list.indexOf(getProps(draggable).id);
|
|
152
|
+
|
|
153
|
+
if (dropped) {
|
|
154
|
+
reset(index, '');
|
|
155
|
+
} else {
|
|
156
|
+
resetting(true, () => {
|
|
157
|
+
reset(index, '');
|
|
158
|
+
});
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
resetting(false);
|
|
161
|
+
}, props().droppingDuration || 100);
|
|
162
|
+
}
|
|
163
|
+
dragging = false;
|
|
164
|
+
};
|
|
165
|
+
const onDrop = (data) => {
|
|
166
|
+
dropped = true;
|
|
167
|
+
const draggable = draggables[list[oldIndex]];
|
|
168
|
+
const style = draggable.element.style;
|
|
169
|
+
|
|
170
|
+
const diff = (newIndex - oldIndex) * draggable.bounds.height;
|
|
171
|
+
const transform = style.transform;
|
|
172
|
+
const position = transform.substring(11, __length(transform) - 3);
|
|
173
|
+
style.transform = 'translateY(' + (position - diff) + 'px)'; // set translateY against new position on the list to prevent long slide
|
|
174
|
+
|
|
175
|
+
orNoop(props().onDrop)(data, oldIndex, newIndex);
|
|
176
|
+
|
|
177
|
+
reset(newIndex, 'unset');
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
that[ReactConstants[3]] = () => {
|
|
181
|
+
const _props = props();
|
|
182
|
+
const {className, initializer} = _props;
|
|
183
|
+
return <DNDDroppable className={classNames(
|
|
184
|
+
'DroppableList',
|
|
185
|
+
className,
|
|
186
|
+
resetting() && 'resetting',
|
|
187
|
+
)}
|
|
188
|
+
initializer={initializer}
|
|
189
|
+
onHover={onHover}
|
|
190
|
+
onDragStart={onDragStart}
|
|
191
|
+
onDragEnd={onDragEnd}
|
|
192
|
+
onDrop={onDrop}
|
|
193
|
+
>
|
|
194
|
+
{_props[ReactConstants[4]]}
|
|
195
|
+
</DNDDroppable>;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
export default DroppableList;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.DNDContainer {
|
|
2
|
+
.DroppableList {
|
|
3
|
+
|
|
4
|
+
.Draggable {
|
|
5
|
+
//transform: unset !important;
|
|
6
|
+
transform: unset;
|
|
7
|
+
transition: unset;
|
|
8
|
+
opacity: 1;
|
|
9
|
+
|
|
10
|
+
&.dragged {
|
|
11
|
+
transition: unset !important;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&.hover {
|
|
16
|
+
.Draggable {
|
|
17
|
+
transition: transform 0.2s ease-in;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&.resetting {
|
|
22
|
+
.Draggable {
|
|
23
|
+
transition: transform 0.1s ease-in;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
package/src/Dropzone.css
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
.Dropzone {
|
|
2
|
+
position: relative;
|
|
3
|
+
}
|
|
4
|
+
.Dropzone > .overlay {
|
|
5
|
+
position: absolute;
|
|
6
|
+
left: 0;
|
|
7
|
+
right: 0;
|
|
8
|
+
top: 0;
|
|
9
|
+
bottom: 0;
|
|
10
|
+
background-color: #38ADC4;
|
|
11
|
+
z-index: 1;
|
|
12
|
+
opacity: 0;
|
|
13
|
+
transition: all 0.2s ease;
|
|
14
|
+
transition-delay: 100ms;
|
|
15
|
+
visibility: hidden;
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
align-items: center;
|
|
19
|
+
}
|
|
20
|
+
.Dropzone > .overlay .drop {
|
|
21
|
+
border-radius: 4px;
|
|
22
|
+
border: 1px dashed #FFFFFF;
|
|
23
|
+
position: absolute;
|
|
24
|
+
top: 18px;
|
|
25
|
+
left: 18px;
|
|
26
|
+
right: 18px;
|
|
27
|
+
bottom: 18px;
|
|
28
|
+
display: flex;
|
|
29
|
+
justify-content: center;
|
|
30
|
+
align-items: center;
|
|
31
|
+
font-weight: 500;
|
|
32
|
+
font-size: 18px;
|
|
33
|
+
color: #FFFFFF;
|
|
34
|
+
}
|
|
35
|
+
.Dropzone.dragging > .overlay {
|
|
36
|
+
opacity: 0.7;
|
|
37
|
+
visibility: visible;
|
|
38
|
+
transition-delay: 0s;
|
|
39
|
+
}
|
|
40
|
+
.Dropzone.dragging > * {
|
|
41
|
+
pointer-events: none;
|
|
42
|
+
}
|
|
43
|
+
.Dropzone > input.file {
|
|
44
|
+
position: absolute;
|
|
45
|
+
left: 0;
|
|
46
|
+
right: 0;
|
|
47
|
+
top: 0;
|
|
48
|
+
bottom: 0;
|
|
49
|
+
width: 100%;
|
|
50
|
+
height: 100%;
|
|
51
|
+
opacity: 0;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
z-index: 1;
|
|
54
|
+
}
|
package/src/Dropzone.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
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 './Dropzone.css';
|
|
8
|
+
import PropTypes from "prop-types";
|
|
9
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
10
|
+
import './Dropzone.css'
|
|
11
|
+
import {classNames, setOf, preventDefault, stopPropagation, UNDEFINED, createRef} from "./Tools";
|
|
12
|
+
import {propsGetter, PureComponent, render, stateGS} from "./ReactConstants";
|
|
13
|
+
|
|
14
|
+
const toArray = (o) => {
|
|
15
|
+
if (o instanceof Array)
|
|
16
|
+
return o;
|
|
17
|
+
|
|
18
|
+
const l = [];
|
|
19
|
+
for (let i = 0; i < __length(o); i++) {
|
|
20
|
+
l.push(o[i])
|
|
21
|
+
}
|
|
22
|
+
return l;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const prevent = (e) => {
|
|
26
|
+
preventDefault(e);
|
|
27
|
+
stopPropagation(e);
|
|
28
|
+
return false;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const ignoredTypes = setOf([
|
|
32
|
+
'text',
|
|
33
|
+
'Text',
|
|
34
|
+
'text/plain',
|
|
35
|
+
]);
|
|
36
|
+
|
|
37
|
+
const ignore = dt => dt && (!dt.types[0] || ignoredTypes[dt.types[0]]);
|
|
38
|
+
|
|
39
|
+
class Dropzone extends PureComponent {
|
|
40
|
+
|
|
41
|
+
constructor(properties) {
|
|
42
|
+
super(properties);
|
|
43
|
+
const that = this;
|
|
44
|
+
that.state = {};
|
|
45
|
+
|
|
46
|
+
let entries = [];
|
|
47
|
+
|
|
48
|
+
const props = propsGetter(that);
|
|
49
|
+
const isDragging = stateGS(that);
|
|
50
|
+
|
|
51
|
+
const onDrop = (e) => {
|
|
52
|
+
const dt = e.dataTransfer;
|
|
53
|
+
const files = toArray(dt && dt.files || __target(e).files);
|
|
54
|
+
props().onDrop(files);
|
|
55
|
+
isDragging(false);
|
|
56
|
+
entries = [];
|
|
57
|
+
prevent(e);
|
|
58
|
+
};
|
|
59
|
+
const onDragOver = (e) => {
|
|
60
|
+
const dt = e.dataTransfer;
|
|
61
|
+
if (ignore(dt)) return;
|
|
62
|
+
|
|
63
|
+
dt && (dt.dropEffect = 'copy');
|
|
64
|
+
!isDragging() && isDragging(true);
|
|
65
|
+
prevent(e);
|
|
66
|
+
};
|
|
67
|
+
const onDragEnter = (e) => {
|
|
68
|
+
const dt = e.dataTransfer;
|
|
69
|
+
if (ignore(dt)) return;
|
|
70
|
+
if (entries.indexOf(__target(e)) === -1) {
|
|
71
|
+
entries.push(__target(e))
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
dt && (dt.dropEffect = 'copy');
|
|
75
|
+
!isDragging() && isDragging(true);
|
|
76
|
+
prevent(e);
|
|
77
|
+
};
|
|
78
|
+
const onDragLeave = (e) => {
|
|
79
|
+
entries = entries.filter(el => el !== __target(e));
|
|
80
|
+
|
|
81
|
+
if (__length(entries) === 0)
|
|
82
|
+
isDragging(false);
|
|
83
|
+
|
|
84
|
+
prevent(e)
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const inputRef = createRef()
|
|
88
|
+
|
|
89
|
+
that[ReactConstants[3]] = () => {
|
|
90
|
+
const {children, className, disabled, clickable, multiple, droppable, overlayLabel, accept} = props();
|
|
91
|
+
|
|
92
|
+
return <div className={classNames('Dropzone', className, isDragging() && 'dragging')}
|
|
93
|
+
onDragLeave={!disabled && droppable && onDragLeave || UNDEFINED}
|
|
94
|
+
onDragOver={!disabled && droppable && onDragOver || UNDEFINED}
|
|
95
|
+
onDragEnter={!disabled && droppable && onDragEnter || UNDEFINED}
|
|
96
|
+
onDrop={!disabled && droppable && onDrop || UNDEFINED}
|
|
97
|
+
>
|
|
98
|
+
{overlayLabel && <div className="overlay">
|
|
99
|
+
<div className={'drop'}>
|
|
100
|
+
{overlayLabel}
|
|
101
|
+
</div>
|
|
102
|
+
</div>}
|
|
103
|
+
{!disabled && clickable && <input className={'file'}
|
|
104
|
+
ref={inputRef}
|
|
105
|
+
type="file"
|
|
106
|
+
accept={accept}
|
|
107
|
+
multiple={!!multiple}
|
|
108
|
+
onClick={() => {
|
|
109
|
+
inputRef().value = '';
|
|
110
|
+
}}
|
|
111
|
+
onChange={onDrop}/>}
|
|
112
|
+
{children}
|
|
113
|
+
</div>
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
Dropzone.defaultProps = {
|
|
119
|
+
clickable: true,
|
|
120
|
+
multiple: true,
|
|
121
|
+
droppable: true,
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
125
|
+
Dropzone.propTypes = {
|
|
126
|
+
[ReactConstants[5]]: PropTypes.string,
|
|
127
|
+
overlayLabel: PropTypes.oneOfType([
|
|
128
|
+
PropTypes.string,
|
|
129
|
+
PropTypes.element
|
|
130
|
+
]),
|
|
131
|
+
clickable: PropTypes.bool,
|
|
132
|
+
droppable: PropTypes.bool,
|
|
133
|
+
multiple: PropTypes.bool,
|
|
134
|
+
disabled: PropTypes.bool,
|
|
135
|
+
onDrop: PropTypes.func.isRequired,
|
|
136
|
+
accept: PropTypes.string,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export default Dropzone;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
.Dropzone {
|
|
2
|
+
position: relative;
|
|
3
|
+
|
|
4
|
+
> .overlay {
|
|
5
|
+
position: absolute;
|
|
6
|
+
left: 0;
|
|
7
|
+
right: 0;
|
|
8
|
+
top: 0;
|
|
9
|
+
bottom: 0;
|
|
10
|
+
background-color: #38ADC4;
|
|
11
|
+
z-index: 1;
|
|
12
|
+
opacity: 0;
|
|
13
|
+
transition: all 0.2s ease;
|
|
14
|
+
transition-delay: 100ms;
|
|
15
|
+
visibility: hidden;
|
|
16
|
+
|
|
17
|
+
display: flex;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
align-items: center;
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
.drop {
|
|
23
|
+
border-radius: 4px;
|
|
24
|
+
border: 1px dashed #FFFFFF;
|
|
25
|
+
position: absolute;
|
|
26
|
+
top: 18px;
|
|
27
|
+
left: 18px;
|
|
28
|
+
right: 18px;
|
|
29
|
+
bottom: 18px;
|
|
30
|
+
|
|
31
|
+
display: flex;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
align-items: center;
|
|
34
|
+
|
|
35
|
+
font-weight: 500;
|
|
36
|
+
font-size: 18px;
|
|
37
|
+
|
|
38
|
+
color: #FFFFFF;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&.dragging {
|
|
43
|
+
> .overlay {
|
|
44
|
+
opacity: 0.7;
|
|
45
|
+
visibility: visible;
|
|
46
|
+
transition-delay: 0s;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
> * {
|
|
50
|
+
pointer-events: none;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
> input.file {
|
|
55
|
+
position: absolute;
|
|
56
|
+
left: 0;
|
|
57
|
+
right: 0;
|
|
58
|
+
top: 0;
|
|
59
|
+
bottom: 0;
|
|
60
|
+
width: 100%;
|
|
61
|
+
height: 100%;
|
|
62
|
+
opacity: 0;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
z-index: 1;
|
|
65
|
+
}
|
|
66
|
+
}
|