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,68 @@
|
|
|
1
|
+
.FilteredList {
|
|
2
|
+
max-height: 250px;
|
|
3
|
+
position: relative;
|
|
4
|
+
}
|
|
5
|
+
.FilteredList.popup {
|
|
6
|
+
padding: 0;
|
|
7
|
+
visibility: hidden;
|
|
8
|
+
position: absolute;
|
|
9
|
+
background: white;
|
|
10
|
+
z-index: 4;
|
|
11
|
+
box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
|
|
12
|
+
transition: all 0.2s ease-out;
|
|
13
|
+
top: calc(100% + 4px);
|
|
14
|
+
opacity: 0;
|
|
15
|
+
border-radius: 2px;
|
|
16
|
+
}
|
|
17
|
+
.FilteredList.popup.visible {
|
|
18
|
+
opacity: 1;
|
|
19
|
+
visibility: visible;
|
|
20
|
+
}
|
|
21
|
+
.FilteredList.inline {
|
|
22
|
+
max-height: 225px;
|
|
23
|
+
margin-top: 5px;
|
|
24
|
+
}
|
|
25
|
+
.FilteredList .child {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-flow: row nowrap;
|
|
28
|
+
align-items: center;
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
font-size: 14px;
|
|
31
|
+
color: #222222;
|
|
32
|
+
height: 30px;
|
|
33
|
+
padding: 5px 10px;
|
|
34
|
+
padding-right: 15px;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
38
|
+
border-left: 5px solid #4AC263;
|
|
39
|
+
padding-left: 15px;
|
|
40
|
+
margin-left: -5px;
|
|
41
|
+
}
|
|
42
|
+
.FilteredList .child.hidden {
|
|
43
|
+
height: 0 !important;
|
|
44
|
+
padding: 0 !important;
|
|
45
|
+
}
|
|
46
|
+
.FilteredList .child.selected {
|
|
47
|
+
background-color: #F0F0F0;
|
|
48
|
+
padding-left: 10px;
|
|
49
|
+
margin-left: 0px;
|
|
50
|
+
}
|
|
51
|
+
.FilteredList .child.active {
|
|
52
|
+
background-color: #eeeeee;
|
|
53
|
+
}
|
|
54
|
+
.FilteredList .child {
|
|
55
|
+
margin-top: 8px;
|
|
56
|
+
}
|
|
57
|
+
.FilteredList .child.hidden {
|
|
58
|
+
margin-top: 0;
|
|
59
|
+
}
|
|
60
|
+
.FilteredList .child:not(.hidden) ~ .child {
|
|
61
|
+
margin-top: 0;
|
|
62
|
+
}
|
|
63
|
+
.FilteredList .child:not(.hidden) ~ .child:last-child {
|
|
64
|
+
margin-bottom: 8px;
|
|
65
|
+
}
|
|
66
|
+
.FilteredList .child:not(.hidden):last-child {
|
|
67
|
+
margin-bottom: 8px;
|
|
68
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
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 './FilteredList.css';
|
|
8
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
9
|
+
import './FilteredList.css'
|
|
10
|
+
import Scrollable from "./Scrollable";
|
|
11
|
+
import {classNames, orNoop, ref, stopPropagation, isFunction, isObject} from "./Tools";
|
|
12
|
+
import {PureComponent} from "./ReactConstants";
|
|
13
|
+
|
|
14
|
+
export const getLabel = (labels, id) => isFunction(labels) ? labels(id) : labels[id]
|
|
15
|
+
|
|
16
|
+
class FilteredList extends PureComponent {
|
|
17
|
+
|
|
18
|
+
static defaultProps = {
|
|
19
|
+
data: [],
|
|
20
|
+
labels: {},
|
|
21
|
+
selected: {},
|
|
22
|
+
inline: false,
|
|
23
|
+
selectSingle: true,
|
|
24
|
+
filter: () => true,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
constructor(props) {
|
|
28
|
+
super(props);
|
|
29
|
+
this.state = {selected: -1};
|
|
30
|
+
this.hidden = {};
|
|
31
|
+
this.elements = {};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
componentDidMount() {
|
|
35
|
+
orNoop(__props(this).nextProvider)(this.next);
|
|
36
|
+
orNoop(__props(this).prevProvider)(this.prev);
|
|
37
|
+
orNoop(__props(this).selectedProvider)(this.selected);
|
|
38
|
+
orNoop(__props(this).resetProvider)(this.reset);
|
|
39
|
+
|
|
40
|
+
this.updateList(__props(this))
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
componentDidUpdate(prevProps, prevState, snapshot) {
|
|
44
|
+
if (__props(this).data === __data(prevProps))
|
|
45
|
+
return;
|
|
46
|
+
|
|
47
|
+
this.updateList(__props(this))
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
updateList = (props) => {
|
|
51
|
+
const {data} = props;
|
|
52
|
+
const {selected} = __state(this);
|
|
53
|
+
this.list = data || [];
|
|
54
|
+
|
|
55
|
+
if (!this.list.includes(selected))
|
|
56
|
+
this.setState({selected: -1})
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
render() {
|
|
60
|
+
const {data, labels, filter, className, selected, inline, childComponent, childProps, style, scroll} = __props(this);
|
|
61
|
+
return (
|
|
62
|
+
<Scrollable className={classNames('FilteredList', className, inline ? 'inline' : 'popup')}
|
|
63
|
+
ref={ref('el', this)} style={style} scrollBarMode={scroll}>
|
|
64
|
+
{(data || []).filter(id => id !== false && id != null).map(id => <ItemWrapper
|
|
65
|
+
id={id}
|
|
66
|
+
key={id}
|
|
67
|
+
label={getLabel(labels, id)}
|
|
68
|
+
childComponent={childComponent}
|
|
69
|
+
childProps={childProps}
|
|
70
|
+
element={el => this.elements[id] = el}
|
|
71
|
+
onClick={e => {
|
|
72
|
+
stopPropagation(e);
|
|
73
|
+
this.onSelect(id);
|
|
74
|
+
}}
|
|
75
|
+
onMouseEnter={e => this.setState({selected: id})}
|
|
76
|
+
onMouseLeave={e => id === __state(this).selected && this.setState({selected: -1})}
|
|
77
|
+
className={classNames('child', __state(this).selected === id && 'active', selected === id || (isObject(selected) && selected[id]) && 'selected')}
|
|
78
|
+
classProvider={it => (this.hidden[id] = !filter(it)) && 'hidden'}
|
|
79
|
+
/>)}
|
|
80
|
+
</Scrollable>
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
onSelect = (id) => {
|
|
85
|
+
this.setState({selected: id});
|
|
86
|
+
__props(this).onSelect(id);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
selected = () => {
|
|
90
|
+
const {selected: value} = __state(this);
|
|
91
|
+
const {selectSingle} = __props(this);
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if (value === -1 || this.hidden[value]) {
|
|
95
|
+
let filtered = this.list.filter(id => !this.hidden[id]);
|
|
96
|
+
if (selectSingle && __length(filtered) === 1)
|
|
97
|
+
return filtered[0];
|
|
98
|
+
|
|
99
|
+
return null;
|
|
100
|
+
} else {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
next = () => {
|
|
106
|
+
const list = this.list;
|
|
107
|
+
const selected = __state(this).selected;
|
|
108
|
+
let position = list.findIndex(id => selected === id);
|
|
109
|
+
if (this.hidden[list[position]])
|
|
110
|
+
position = -1;
|
|
111
|
+
|
|
112
|
+
while (++position < __length(list)) {
|
|
113
|
+
if (!this.hidden[list[position]])
|
|
114
|
+
break
|
|
115
|
+
}
|
|
116
|
+
if (position < __length(list)) {
|
|
117
|
+
let id = list[position];
|
|
118
|
+
this.setState({selected: id});
|
|
119
|
+
this.updateScroll(id)
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
prev = () => {
|
|
124
|
+
const list = this.list;
|
|
125
|
+
const selected = __state(this).selected;
|
|
126
|
+
let position = list.findIndex(id => selected === id);
|
|
127
|
+
if (this.hidden[list[position]])
|
|
128
|
+
position = __length(list);
|
|
129
|
+
|
|
130
|
+
while (--position >= 0) {
|
|
131
|
+
if (!this.hidden[list[position]])
|
|
132
|
+
break
|
|
133
|
+
}
|
|
134
|
+
if (position >= 0) {
|
|
135
|
+
let id = list[position];
|
|
136
|
+
this.setState({selected: id});
|
|
137
|
+
this.updateScroll(id)
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
updateScroll = (id) => {
|
|
142
|
+
let child = this.elements[id];
|
|
143
|
+
let container = this.el;
|
|
144
|
+
const scrollTop = container.getScroll();
|
|
145
|
+
const height = container.getHeight();
|
|
146
|
+
let isVisible = scrollTop <= child.offsetTop && scrollTop + height >= child.offsetTop + __clientHeight(child);
|
|
147
|
+
if (!isVisible) {
|
|
148
|
+
let scrollToBottom = child.offsetTop + __clientHeight(child) - height;
|
|
149
|
+
let scrollToTop = child.offsetTop;
|
|
150
|
+
if (Math.abs(scrollTop - scrollToTop) < Math.abs(scrollTop - scrollToBottom)) {
|
|
151
|
+
container.setScroll(scrollToTop)
|
|
152
|
+
} else {
|
|
153
|
+
container.setScroll(scrollToBottom)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
reset = () => {
|
|
159
|
+
this.setState({selected: -1});
|
|
160
|
+
this.el.scrollTop = 0;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
scrollTo = (id) => this.el.setScroll(this.elements[id] && this.elements[id].offsetTop);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export default FilteredList;
|
|
167
|
+
|
|
168
|
+
class ItemWrapper extends React.Component {
|
|
169
|
+
render() {
|
|
170
|
+
const {id, label, onClick, onMouseDown, onMouseEnter, onMouseLeave, classProvider, className, childComponent, childProps} = __props(this);
|
|
171
|
+
const child = React.createElement(childComponent, {
|
|
172
|
+
...childProps,
|
|
173
|
+
id,
|
|
174
|
+
label,
|
|
175
|
+
dataConsumer: (data) => this.data = data,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
const cssClass = orNoop(classProvider)(__data(this));
|
|
179
|
+
return (
|
|
180
|
+
<div className={classNames('ItemWrapper', cssClass, className)}
|
|
181
|
+
onMouseEnter={onMouseEnter}
|
|
182
|
+
onMouseLeave={onMouseLeave}
|
|
183
|
+
onMouseDown={onMouseDown}
|
|
184
|
+
onClick={onClick}
|
|
185
|
+
ref={ref('el', this)}
|
|
186
|
+
>
|
|
187
|
+
{child}
|
|
188
|
+
</div>
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
componentDidMount() {
|
|
193
|
+
orNoop(__props(this).element)(this.el);
|
|
194
|
+
this.forceUpdate();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
@import "./global.scss";
|
|
2
|
+
|
|
3
|
+
.FilteredList {
|
|
4
|
+
max-height: 250px;
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&.popup {
|
|
8
|
+
padding: 0;
|
|
9
|
+
visibility: hidden;
|
|
10
|
+
position: absolute;
|
|
11
|
+
background: white;
|
|
12
|
+
z-index: 4;
|
|
13
|
+
box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12);
|
|
14
|
+
transition: all 0.2s ease-out;
|
|
15
|
+
top: calc(100% + 4px);
|
|
16
|
+
opacity: 0;
|
|
17
|
+
border-radius: 2px;
|
|
18
|
+
|
|
19
|
+
&.visible {
|
|
20
|
+
opacity: 1;
|
|
21
|
+
visibility: visible;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
&.inline {
|
|
26
|
+
max-height: 225px;
|
|
27
|
+
margin-top: 5px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.child {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-flow: row nowrap;
|
|
33
|
+
align-items: center;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
|
|
36
|
+
font-size: 14px;
|
|
37
|
+
color: rgb(34, 34, 34);
|
|
38
|
+
height: 30px;
|
|
39
|
+
padding: 5px 10px;
|
|
40
|
+
padding-right: 15px;
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
transition: 0.2s cubic-bezier(.4, 0, .2, 1);
|
|
44
|
+
|
|
45
|
+
border-left: 5px solid #4AC263;
|
|
46
|
+
padding-left: 15px;
|
|
47
|
+
margin-left: -5px;
|
|
48
|
+
|
|
49
|
+
&.hidden {
|
|
50
|
+
height: 0 !important;
|
|
51
|
+
padding: 0 !important;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&.selected {
|
|
55
|
+
background-color: #F0F0F0;
|
|
56
|
+
padding-left: 10px;
|
|
57
|
+
margin-left: 0px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&.active {
|
|
61
|
+
background-color: rgb(238, 238, 238);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.child {
|
|
66
|
+
margin-top: 8px;
|
|
67
|
+
|
|
68
|
+
&.hidden {
|
|
69
|
+
margin-top: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&:not(.hidden) {
|
|
73
|
+
~ .child {
|
|
74
|
+
margin-top: 0;
|
|
75
|
+
|
|
76
|
+
&:last-child {
|
|
77
|
+
margin-bottom: 8px;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&:last-child {
|
|
82
|
+
margin-bottom: 8px;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.Button.FloatingActionButton {
|
|
2
|
+
position: absolute;
|
|
3
|
+
right: 16px;
|
|
4
|
+
bottom: 16px;
|
|
5
|
+
width: 56px;
|
|
6
|
+
height: 56px;
|
|
7
|
+
padding: 16px;
|
|
8
|
+
transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
9
|
+
}
|
|
10
|
+
.Button.FloatingActionButton.raised {
|
|
11
|
+
transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s ease-out, background-color 0.2s ease-out, box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
12
|
+
}
|
|
13
|
+
.Button.FloatingActionButton.mini {
|
|
14
|
+
width: 40px;
|
|
15
|
+
height: 40px;
|
|
16
|
+
padding: 8px;
|
|
17
|
+
}
|
|
18
|
+
.Button.FloatingActionButton.hidden {
|
|
19
|
+
bottom: -100px;
|
|
20
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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 './FloatingActionButton.css';
|
|
8
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
9
|
+
import PropTypes from 'prop-types';
|
|
10
|
+
import './FloatingActionButton.css'
|
|
11
|
+
import Button from "./Button";
|
|
12
|
+
import {classNames} from "./Tools";
|
|
13
|
+
import MaterialIcon from "./MaterialIcon";
|
|
14
|
+
|
|
15
|
+
const FloatingActionButton = ({icon, onClick, mini, className, hidden}) => {
|
|
16
|
+
return <Button onClick={onClick} round={true} className={classNames("FloatingActionButton", className, mini && 'mini', hidden && 'hidden')}>
|
|
17
|
+
<MaterialIcon icon={icon}/>
|
|
18
|
+
</Button>;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
22
|
+
FloatingActionButton.propTypes = {
|
|
23
|
+
icon: MaterialIcon.propTypes.icon,
|
|
24
|
+
mini: PropTypes.bool,
|
|
25
|
+
hidden: PropTypes.bool,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
FloatingActionButton.defaultProps = {
|
|
30
|
+
icon: 'add',
|
|
31
|
+
mini: false,
|
|
32
|
+
hidden: false,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export default FloatingActionButton;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.Button.FloatingActionButton {
|
|
2
|
+
position: absolute;
|
|
3
|
+
right: 16px;
|
|
4
|
+
bottom: 16px;
|
|
5
|
+
|
|
6
|
+
width: 56px;
|
|
7
|
+
height: 56px;
|
|
8
|
+
padding: 16px;
|
|
9
|
+
|
|
10
|
+
transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
11
|
+
|
|
12
|
+
&.raised {
|
|
13
|
+
transition: bottom 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s ease-out, background-color 0.2s ease-out, box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&.mini {
|
|
17
|
+
width: 40px;
|
|
18
|
+
height: 40px;
|
|
19
|
+
padding: 8px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&.hidden {
|
|
23
|
+
bottom: -100px;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.FormUploadProgress {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0;
|
|
4
|
+
right: 0;
|
|
5
|
+
top: 0;
|
|
6
|
+
bottom: 0;
|
|
7
|
+
background-color: rgba(255, 255, 255, 0.6);
|
|
8
|
+
z-index: 2;
|
|
9
|
+
}
|
|
10
|
+
.FormUploadProgress.animated.mounting, .FormUploadProgress.animated.mounted {
|
|
11
|
+
transition-delay: 500ms;
|
|
12
|
+
}
|
|
13
|
+
.FormUploadProgress .wrapper {
|
|
14
|
+
position: sticky;
|
|
15
|
+
top: 40%;
|
|
16
|
+
margin-top: 40%;
|
|
17
|
+
margin-left: 50%;
|
|
18
|
+
transform: translateX(-50%);
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-flow: column;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
align-items: center;
|
|
23
|
+
}
|
|
24
|
+
.FormUploadProgress .wrapper .CircleProgress, .FormUploadProgress .wrapper .SpinningProgress {
|
|
25
|
+
position: absolute;
|
|
26
|
+
width: 107px;
|
|
27
|
+
height: 107px;
|
|
28
|
+
top: 0;
|
|
29
|
+
left: 0;
|
|
30
|
+
}
|
|
31
|
+
.FormUploadProgress .wrapper .CircleProgress .line, .FormUploadProgress .wrapper .SpinningProgress .line {
|
|
32
|
+
stroke: #2196F3;
|
|
33
|
+
}
|
|
34
|
+
.FormUploadProgress .wrapper > .progress {
|
|
35
|
+
width: 107px;
|
|
36
|
+
height: 107px;
|
|
37
|
+
min-height: 107px;
|
|
38
|
+
display: flex;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
align-items: center;
|
|
41
|
+
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
background: white;
|
|
44
|
+
position: relative;
|
|
45
|
+
}
|
|
46
|
+
.FormUploadProgress .wrapper > .progress > .value {
|
|
47
|
+
display: inline-block;
|
|
48
|
+
margin-top: 5px;
|
|
49
|
+
font-weight: bold;
|
|
50
|
+
line-height: 16px;
|
|
51
|
+
font-size: 13px;
|
|
52
|
+
text-align: center;
|
|
53
|
+
color: #818181;
|
|
54
|
+
}
|
|
55
|
+
.FormUploadProgress .wrapper .cancel {
|
|
56
|
+
min-width: 107px;
|
|
57
|
+
margin-top: 20px;
|
|
58
|
+
background-color: white;
|
|
59
|
+
color: #F96B5C;
|
|
60
|
+
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
|
|
61
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 './FormUploadProgress.css';
|
|
8
|
+
import ReactCreateElement from './ReactCreateElement';
|
|
9
|
+
import './FormUploadProgress.css'
|
|
10
|
+
import Button from "./Button";
|
|
11
|
+
import Animated from "./Animated";
|
|
12
|
+
import CircleProgress from "./CircleProgress";
|
|
13
|
+
import SpinningProgress from "./SpinningProgress";
|
|
14
|
+
import {formatAbbreviation, formatNumberWithMaxLength} from "./Size";
|
|
15
|
+
import PropTypes from "prop-types";
|
|
16
|
+
import {preventDefault} from "./Tools";
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
const defaultValueFormat = (value, loaded, total) => {
|
|
20
|
+
if (total == null)
|
|
21
|
+
return Math.floor(Number.isFinite(value) ? value : 0) + '%';
|
|
22
|
+
|
|
23
|
+
const abbreviation = formatAbbreviation(total);
|
|
24
|
+
return <>
|
|
25
|
+
{formatNumberWithMaxLength(loaded, 1, abbreviation, 4)}
|
|
26
|
+
/
|
|
27
|
+
{formatNumberWithMaxLength(total, 1, abbreviation, 4)}
|
|
28
|
+
<br/>
|
|
29
|
+
{abbreviation}
|
|
30
|
+
</>
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const FormUploadProgress = ({
|
|
34
|
+
value,
|
|
35
|
+
cancel,
|
|
36
|
+
loaded,
|
|
37
|
+
total,
|
|
38
|
+
formatValue,
|
|
39
|
+
processingLabel,
|
|
40
|
+
cancelLabel,
|
|
41
|
+
}) => {
|
|
42
|
+
return (
|
|
43
|
+
<Animated value={total > 0}>
|
|
44
|
+
<div className="FormUploadProgress">
|
|
45
|
+
<div className="wrapper">
|
|
46
|
+
<div className="progress">
|
|
47
|
+
{loaded === total && <SpinningProgress/>}
|
|
48
|
+
{loaded !== total && <CircleProgress value={value}/>}
|
|
49
|
+
<div className={'value'}>{formatValue(value, loaded, total)}</div>
|
|
50
|
+
</div>
|
|
51
|
+
{cancel && <Button className={"cancel"} disabled={loaded === total} onClick={e => {
|
|
52
|
+
preventDefault(e);
|
|
53
|
+
cancel();
|
|
54
|
+
}}>
|
|
55
|
+
{loaded === total && processingLabel}
|
|
56
|
+
{loaded !== total && cancelLabel}
|
|
57
|
+
</Button>}
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</Animated>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
FormUploadProgress.defaultProps = {
|
|
65
|
+
value: 0,
|
|
66
|
+
formatValue: defaultValueFormat,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
70
|
+
FormUploadProgress.propTypes = {
|
|
71
|
+
value: PropTypes.number,
|
|
72
|
+
loaded: PropTypes.number,
|
|
73
|
+
total: PropTypes.number,
|
|
74
|
+
formatValue: PropTypes.func,
|
|
75
|
+
processingLabel: PropTypes.oneOfType([
|
|
76
|
+
PropTypes.string,
|
|
77
|
+
PropTypes.element
|
|
78
|
+
]),
|
|
79
|
+
cancelLabel: PropTypes.oneOfType([
|
|
80
|
+
PropTypes.string,
|
|
81
|
+
PropTypes.element
|
|
82
|
+
]),
|
|
83
|
+
cancel: PropTypes.func,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export default FormUploadProgress;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
@import "./global.scss";
|
|
2
|
+
|
|
3
|
+
.FormUploadProgress {
|
|
4
|
+
position: absolute;
|
|
5
|
+
left: 0;
|
|
6
|
+
right: 0;
|
|
7
|
+
top: 0;
|
|
8
|
+
bottom: 0;
|
|
9
|
+
background-color: rgba(255, 255, 255, 0.6);
|
|
10
|
+
z-index: 2;
|
|
11
|
+
|
|
12
|
+
&.animated {
|
|
13
|
+
&.mounting, &.mounted {
|
|
14
|
+
transition-delay: 500ms;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.wrapper {
|
|
19
|
+
position: sticky;
|
|
20
|
+
top: 40%;
|
|
21
|
+
margin-top: 40%;
|
|
22
|
+
margin-left: 50%;
|
|
23
|
+
transform: translateX(-50%);
|
|
24
|
+
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-flow: column;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
align-items: center;
|
|
29
|
+
|
|
30
|
+
.CircleProgress, .SpinningProgress {
|
|
31
|
+
position: absolute;
|
|
32
|
+
width: 107px;
|
|
33
|
+
height: 107px;
|
|
34
|
+
top: 0;
|
|
35
|
+
left: 0;
|
|
36
|
+
|
|
37
|
+
.line {
|
|
38
|
+
stroke: $colorBlue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
> .progress {
|
|
43
|
+
width: 107px;
|
|
44
|
+
height: 107px;
|
|
45
|
+
min-height: 107px;
|
|
46
|
+
|
|
47
|
+
display: flex;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
align-items: center;
|
|
50
|
+
|
|
51
|
+
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
|
|
52
|
+
border-radius: 50%;
|
|
53
|
+
background: white;
|
|
54
|
+
position: relative;
|
|
55
|
+
|
|
56
|
+
> .value {
|
|
57
|
+
display: inline-block;
|
|
58
|
+
margin-top: 5px;
|
|
59
|
+
|
|
60
|
+
font-weight: bold;
|
|
61
|
+
line-height: 16px;
|
|
62
|
+
font-size: 13px;
|
|
63
|
+
text-align: center;
|
|
64
|
+
|
|
65
|
+
color: #818181;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.cancel {
|
|
70
|
+
min-width: 107px;
|
|
71
|
+
margin-top: 20px;
|
|
72
|
+
background-color: white;
|
|
73
|
+
color: #F96B5C;
|
|
74
|
+
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
}
|