pcm-shared-components 0.0.172 → 0.0.175
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/dist/components/Loaders/LoadingBackdrop/{styles.css → css/style.css} +1 -1
- package/dist/components/Loaders/LoadingBackdrop/index.js +13 -4
- package/dist/components/Loaders/WaitingGalaxy/css/style.css +65 -0
- package/dist/components/Loaders/WaitingGalaxy/index.js +47 -0
- package/dist/components/TextBoxes/CurrencyTextInput/index.js +258 -0
- package/dist/index.js +2 -1
- package/dist/styles/tailwind.css +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import "./
|
|
2
|
+
import "./css/style.css";
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
+
import WaitingGalaxy from '../../Loaders/WaitingGalaxy';
|
|
4
5
|
/**
|
|
5
6
|
* A backdrop loading panel that covers the entire screen and displays a loading spinner with the logo of your choice
|
|
6
7
|
* ## Importing the component
|
|
@@ -11,7 +12,8 @@ import {LoadingBackdrop} from 'pcm-shared-components';
|
|
|
11
12
|
*/
|
|
12
13
|
|
|
13
14
|
export const LoadingBackdrop = ({
|
|
14
|
-
isLoading = false
|
|
15
|
+
isLoading = false,
|
|
16
|
+
useGalaxySpinner
|
|
15
17
|
}) => {
|
|
16
18
|
return /*#__PURE__*/React.createElement("div", {
|
|
17
19
|
style: {
|
|
@@ -26,10 +28,13 @@ export const LoadingBackdrop = ({
|
|
|
26
28
|
}, /*#__PURE__*/React.createElement("div", {
|
|
27
29
|
className: "logo"
|
|
28
30
|
}, /*#__PURE__*/React.createElement("img", {
|
|
31
|
+
className: "ml-4",
|
|
29
32
|
width: "120",
|
|
30
33
|
src: '/assets/images/logos/logo2.svg',
|
|
31
34
|
alt: "logo"
|
|
32
|
-
})), /*#__PURE__*/React.createElement(
|
|
35
|
+
})), useGalaxySpinner ? /*#__PURE__*/React.createElement(WaitingGalaxy, {
|
|
36
|
+
className: "mt-12"
|
|
37
|
+
}) : /*#__PURE__*/React.createElement("div", {
|
|
33
38
|
className: "spinner-wrapper"
|
|
34
39
|
}, /*#__PURE__*/React.createElement("div", {
|
|
35
40
|
className: "spinner"
|
|
@@ -50,10 +55,14 @@ export const LoadingBackdrop = ({
|
|
|
50
55
|
export default LoadingBackdrop; // Specifies the default values for the props:
|
|
51
56
|
|
|
52
57
|
LoadingBackdrop.defaultProps = {
|
|
53
|
-
isLoading: false
|
|
58
|
+
isLoading: false,
|
|
59
|
+
useGalaxySpinner: false
|
|
54
60
|
}; // Type of
|
|
55
61
|
|
|
56
62
|
LoadingBackdrop.propTypes = {
|
|
63
|
+
/** Displays the galaxy spinner instead of the circular spinner */
|
|
64
|
+
useGalaxySpinner: PropTypes.bool,
|
|
65
|
+
|
|
57
66
|
/** Controls if the backdrop is to be displayed */
|
|
58
67
|
isLoading: PropTypes.bool
|
|
59
68
|
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
.galaxy_loader {
|
|
2
|
+
/* position: absolute; */
|
|
3
|
+
top: calc(50% - 34px);
|
|
4
|
+
left: calc(50% - 34px);
|
|
5
|
+
width: 64px;
|
|
6
|
+
height: 64px;
|
|
7
|
+
border-radius: 50%;
|
|
8
|
+
perspective: 800px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.inner_galaxy_line {
|
|
12
|
+
position: absolute;
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 100%;
|
|
16
|
+
border-radius: 50%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.inner_galaxy_line.galaxy_line_one {
|
|
20
|
+
left: 0%;
|
|
21
|
+
top: 0%;
|
|
22
|
+
animation: rotate-galaxy_line_one 1s linear infinite;
|
|
23
|
+
border-bottom: 3px solid rgb(92, 132, 48);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.inner_galaxy_line.galaxy_line_two {
|
|
27
|
+
right: 0%;
|
|
28
|
+
top: 0%;
|
|
29
|
+
animation: rotate-galaxy_line_two 1s linear infinite;
|
|
30
|
+
border-right: 3px solid #726646;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.inner_galaxy_line.galaxy_line_three {
|
|
34
|
+
right: 0%;
|
|
35
|
+
bottom: 0%;
|
|
36
|
+
animation: rotate-galaxy_line_three 1s linear infinite;
|
|
37
|
+
border-top: 3px solid rgb(241, 100, 47);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@keyframes rotate-galaxy_line_one {
|
|
41
|
+
0% {
|
|
42
|
+
transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
|
|
43
|
+
}
|
|
44
|
+
100% {
|
|
45
|
+
transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@keyframes rotate-galaxy_line_two {
|
|
50
|
+
0% {
|
|
51
|
+
transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
|
|
52
|
+
}
|
|
53
|
+
100% {
|
|
54
|
+
transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@keyframes rotate-galaxy_line_three {
|
|
59
|
+
0% {
|
|
60
|
+
transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
|
|
61
|
+
}
|
|
62
|
+
100% {
|
|
63
|
+
transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { ThemeProvider } from '@mui/system';
|
|
4
|
+
import { createTheme, useTheme } from '@mui/material/styles';
|
|
5
|
+
import './css/style.css';
|
|
6
|
+
/**
|
|
7
|
+
* ## Importing the component in your project
|
|
8
|
+
*
|
|
9
|
+
```js
|
|
10
|
+
|
|
11
|
+
import {WaitingGalaxy} from 'pcm-shared-components';
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
*
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export const WaitingGalaxy = props => {
|
|
18
|
+
const {
|
|
19
|
+
className,
|
|
20
|
+
theme
|
|
21
|
+
} = props;
|
|
22
|
+
const compTheme = theme ? theme : useTheme();
|
|
23
|
+
const defaultTheme = createTheme(compTheme);
|
|
24
|
+
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
25
|
+
theme: defaultTheme
|
|
26
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
className: ` galaxy_loader m-auto ${className}`
|
|
28
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
29
|
+
className: "inner_galaxy_line galaxy_line_one"
|
|
30
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
className: "inner_galaxy_line galaxy_line_two"
|
|
32
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
33
|
+
className: "inner_galaxy_line galaxy_line_three"
|
|
34
|
+
})));
|
|
35
|
+
};
|
|
36
|
+
export default WaitingGalaxy;
|
|
37
|
+
WaitingGalaxy.defaultProps = {
|
|
38
|
+
className: '',
|
|
39
|
+
theme: undefined
|
|
40
|
+
};
|
|
41
|
+
WaitingGalaxy.propTypes = {
|
|
42
|
+
/** Classes applied to the body of the component*/
|
|
43
|
+
className: PropTypes.string,
|
|
44
|
+
|
|
45
|
+
/** Theme object to use on this component, if none provided then the MUI5 theme provider theme is used*/
|
|
46
|
+
theme: PropTypes.object
|
|
47
|
+
};
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { ThemeProvider } from '@mui/system';
|
|
4
|
+
import { createTheme, useTheme } from '@mui/material/styles';
|
|
5
|
+
import FormControl from '@mui/material/FormControl';
|
|
6
|
+
import InputLabel from '@mui/material/InputLabel';
|
|
7
|
+
import Input from '@mui/material/Input';
|
|
8
|
+
import { InputAdornment } from '@mui/material';
|
|
9
|
+
import TextField from '@mui/material/TextField';
|
|
10
|
+
let debounce;
|
|
11
|
+
/**
|
|
12
|
+
* ## Importing the component in your project
|
|
13
|
+
*
|
|
14
|
+
```js
|
|
15
|
+
|
|
16
|
+
import {CurrencyTextInput} from 'pcm-shared-components';
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
export const CurrencyTextInput = props => {
|
|
23
|
+
const {
|
|
24
|
+
value,
|
|
25
|
+
label,
|
|
26
|
+
variant,
|
|
27
|
+
fullWidth,
|
|
28
|
+
onChange,
|
|
29
|
+
onChangeDebounce,
|
|
30
|
+
currencySymbol,
|
|
31
|
+
className,
|
|
32
|
+
decimalPlaces,
|
|
33
|
+
maximumValue,
|
|
34
|
+
minimumValue,
|
|
35
|
+
textAlign,
|
|
36
|
+
useThousandSeparator,
|
|
37
|
+
fontSize,
|
|
38
|
+
textPadding,
|
|
39
|
+
theme
|
|
40
|
+
} = props;
|
|
41
|
+
const compTheme = theme ? theme : useTheme();
|
|
42
|
+
const defaultTheme = createTheme(compTheme); //Hooks
|
|
43
|
+
|
|
44
|
+
const [localValue, setLocalValue] = useState(value);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
clearTimeout(debounce);
|
|
47
|
+
debounce = setTimeout(() => {
|
|
48
|
+
onChangeDebounce(localValue);
|
|
49
|
+
}, 700);
|
|
50
|
+
}, [localValue]); //---------------------------------------------------
|
|
51
|
+
// Functions used to sanitize the number
|
|
52
|
+
//---------------------------------------------------
|
|
53
|
+
|
|
54
|
+
const sanitizeDecimalDots = value => {
|
|
55
|
+
//Ensures we only have one decimal dot in our number
|
|
56
|
+
try {
|
|
57
|
+
return String(value).replace(/[.](?=.*[.])/g, "");
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error(error);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return value;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const sanitizeDigits = value => {
|
|
66
|
+
//Ensures we only have digits in our number
|
|
67
|
+
try {
|
|
68
|
+
//Allow normal numbers, negative number and dots
|
|
69
|
+
const isNegativeNumber = value[0] === '-';
|
|
70
|
+
let returnVal = String(value).replace(/[^\d.]/gi, '');
|
|
71
|
+
return `${isNegativeNumber ? '-' : ''}${returnVal}`; //Only allow numbers and dots
|
|
72
|
+
// return String(value).replace(/[^\d.]/gi, '');
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error(error);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return value;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const sanitizeDecimalPlaces = value => {
|
|
81
|
+
try {
|
|
82
|
+
// Only apply this rule if we have a decimal place with something in it or else skip because it's causing inconsistent number formatting when entering the digits
|
|
83
|
+
const decimalCheck = String(value).split('.');
|
|
84
|
+
|
|
85
|
+
if (decimalCheck.length === 2 && decimalCheck[1].length > 0) {
|
|
86
|
+
return Number(value).toLocaleString(undefined, {
|
|
87
|
+
minimumFractionDigits: 1,
|
|
88
|
+
maximumFractionDigits: decimalPlaces,
|
|
89
|
+
useGrouping: false
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error(error);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return value;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const sanitizeMinMaxValues = value => {
|
|
100
|
+
try {
|
|
101
|
+
if (!isNaN(value)) {
|
|
102
|
+
if (Number(value) > maximumValue) {
|
|
103
|
+
return maximumValue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (Number(value) < minimumValue) {
|
|
107
|
+
return minimumValue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.error(error);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return value;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const sanitizeThousandPlaces = value => {
|
|
118
|
+
try {
|
|
119
|
+
// Only apply the thousand grouping on the numbers before the decimal
|
|
120
|
+
if (useThousandSeparator && !isNaN(value)) {
|
|
121
|
+
const digits = String(value).split('.');
|
|
122
|
+
|
|
123
|
+
if (digits[0].length > 0) {
|
|
124
|
+
const thousandFormatted = Number(digits[0]).toLocaleString(undefined, {
|
|
125
|
+
useGrouping: true
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
if (digits.length === 2) {
|
|
129
|
+
//Let's keep any additional DOT and decimal places even if they are empty
|
|
130
|
+
return `${thousandFormatted}.${digits[1]}`;
|
|
131
|
+
} else {
|
|
132
|
+
return thousandFormatted;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} catch (error) {
|
|
137
|
+
console.error(error);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return value;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const handleCurrencyFormatting = value => {
|
|
144
|
+
let returnVal = value;
|
|
145
|
+
|
|
146
|
+
try {
|
|
147
|
+
returnVal = sanitizeMinMaxValues(returnVal);
|
|
148
|
+
returnVal = sanitizeDecimalDots(returnVal);
|
|
149
|
+
returnVal = sanitizeDigits(returnVal);
|
|
150
|
+
returnVal = sanitizeDecimalPlaces(returnVal);
|
|
151
|
+
returnVal = sanitizeThousandPlaces(returnVal);
|
|
152
|
+
} catch (error) {
|
|
153
|
+
console.error(error);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return returnVal;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const handleOnChange = event => {
|
|
160
|
+
setLocalValue(event.target.value);
|
|
161
|
+
onChange(event.target.value);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
165
|
+
theme: defaultTheme
|
|
166
|
+
}, /*#__PURE__*/React.createElement(TextField, {
|
|
167
|
+
id: "input-with-icon-textfield",
|
|
168
|
+
className: ` ${className}`,
|
|
169
|
+
fullWidth: fullWidth,
|
|
170
|
+
label: label,
|
|
171
|
+
value: handleCurrencyFormatting(value),
|
|
172
|
+
onChange: event => {
|
|
173
|
+
handleOnChange(event);
|
|
174
|
+
},
|
|
175
|
+
inputProps: {
|
|
176
|
+
autoComplete: "new-password",
|
|
177
|
+
style: {
|
|
178
|
+
textAlign: textAlign,
|
|
179
|
+
fontSize: fontSize,
|
|
180
|
+
padding: textPadding
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
InputProps: {
|
|
184
|
+
startAdornment: /*#__PURE__*/React.createElement(InputAdornment, {
|
|
185
|
+
position: "start"
|
|
186
|
+
}, currencySymbol)
|
|
187
|
+
},
|
|
188
|
+
variant: variant
|
|
189
|
+
}));
|
|
190
|
+
};
|
|
191
|
+
export default CurrencyTextInput;
|
|
192
|
+
CurrencyTextInput.defaultProps = {
|
|
193
|
+
value: 0,
|
|
194
|
+
label: 'Some Label',
|
|
195
|
+
variant: 'outlined',
|
|
196
|
+
fullWidth: true,
|
|
197
|
+
onChange: () => {},
|
|
198
|
+
onChangeDebounce: () => {},
|
|
199
|
+
currencySymbol: '$',
|
|
200
|
+
useThousandSeparator: true,
|
|
201
|
+
className: '',
|
|
202
|
+
decimalPlaces: 2,
|
|
203
|
+
maximumValue: 10000000000000,
|
|
204
|
+
minimumValue: -10000000000000,
|
|
205
|
+
textAlign: 'right',
|
|
206
|
+
fontSize: 16,
|
|
207
|
+
textPadding: 4,
|
|
208
|
+
theme: undefined
|
|
209
|
+
};
|
|
210
|
+
CurrencyTextInput.propTypes = {
|
|
211
|
+
/** Value to be enter and display in input */
|
|
212
|
+
value: PropTypes.string,
|
|
213
|
+
|
|
214
|
+
/** The label content*/
|
|
215
|
+
label: PropTypes.string,
|
|
216
|
+
|
|
217
|
+
/** Controls the look of the text field*/
|
|
218
|
+
variant: PropTypes.oneOf(['filled', 'outlined', 'standard']),
|
|
219
|
+
|
|
220
|
+
/** Determines if the text field will be full width or fit content*/
|
|
221
|
+
fullWidth: PropTypes.bool,
|
|
222
|
+
|
|
223
|
+
/** Determines if the final number grouping will contain the thousand separator */
|
|
224
|
+
useThousandSeparator: PropTypes.bool,
|
|
225
|
+
|
|
226
|
+
/** Callback fired when the value is changed*/
|
|
227
|
+
onChange: PropTypes.func,
|
|
228
|
+
|
|
229
|
+
/** Same as onChange except only fires 700ms after the users has completed typing to prevent performance issues. Returns the new value */
|
|
230
|
+
onChangeDebounce: PropTypes.func,
|
|
231
|
+
|
|
232
|
+
/** Defines the currency symbol string.*/
|
|
233
|
+
currencySymbol: PropTypes.string,
|
|
234
|
+
|
|
235
|
+
/** Classes to add to the wrapper control*/
|
|
236
|
+
className: PropTypes.string,
|
|
237
|
+
|
|
238
|
+
/** Controls the font size in in pt example: 14*/
|
|
239
|
+
fontSize: PropTypes.number,
|
|
240
|
+
|
|
241
|
+
/** Controls the padding around the font */
|
|
242
|
+
textPadding: PropTypes.number,
|
|
243
|
+
|
|
244
|
+
/** Defines the default number of decimal places to show on the formatted value.*/
|
|
245
|
+
decimalPlaces: PropTypes.number,
|
|
246
|
+
|
|
247
|
+
/** Maximum value that can be enter*/
|
|
248
|
+
maximumValue: PropTypes.number,
|
|
249
|
+
|
|
250
|
+
/** Minimum value that can be entered*/
|
|
251
|
+
minimumValue: PropTypes.number,
|
|
252
|
+
|
|
253
|
+
/** Align the numbers in the textField.*/
|
|
254
|
+
textAlign: PropTypes.oneOf(['left', 'right']),
|
|
255
|
+
|
|
256
|
+
/** Theme object to use on this component, if none provided then the MUI5 theme provider theme is used*/
|
|
257
|
+
theme: PropTypes.object
|
|
258
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,5 @@ import coreLocals from './locals/coreLocals';
|
|
|
20
20
|
import currencySymbol from './locals/currencySymbol';
|
|
21
21
|
import DateRangeCalendar from './components/Date/DateRangeCalendar';
|
|
22
22
|
import SimpleLabel from './components/Labels/SimpleLabel';
|
|
23
|
-
|
|
23
|
+
import CurrencyTextInput from './components/TextBoxes/CurrencyTextInput';
|
|
24
|
+
export { TestButton, CodeHighlight, CustomFab, HelpButton, GenericDialogWindow, PcSharedComponentThemeInheritor, ImageCanvasDraw, PCMScrollbar, TwoColumnDisplay, SimpleTab, HrefLink, GenericAppBar, ReusablePopupMenu, SearchBar, TillButton, DropdownButton, translationResources, coreLocals, currencySymbol, DateRangeCalendar, SimpleLabel, CurrencyTextInput };
|
package/dist/styles/tailwind.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.static{position:static}.absolute{position:absolute}.relative{position:relative}.top-0{top:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.m-auto{margin:auto}.m-12{margin:1.2rem}.mx-6{margin-left:.6rem;margin-right:.6rem}.my-auto{margin-top:auto;margin-bottom:auto}.my-4{margin-top:.4rem;margin-bottom:.4rem}.mx-2{margin-left:.2rem;margin-right:.2rem}.my-12{margin-top:1.2rem;margin-bottom:1.2rem}.my-6{margin-top:.6rem;margin-bottom:.6rem}.mx-8{margin-left:.8rem;margin-right:.8rem}.ml-0{margin-left:0}.mr-0{margin-right:0}.
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2196f380;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.static{position:static}.absolute{position:absolute}.relative{position:relative}.top-0{top:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.m-auto{margin:auto}.m-12{margin:1.2rem}.mx-6{margin-left:.6rem;margin-right:.6rem}.my-auto{margin-top:auto;margin-bottom:auto}.my-4{margin-top:.4rem;margin-bottom:.4rem}.mx-2{margin-left:.2rem;margin-right:.2rem}.my-12{margin-top:1.2rem;margin-bottom:1.2rem}.my-6{margin-top:.6rem;margin-bottom:.6rem}.mx-8{margin-left:.8rem;margin-right:.8rem}.ml-0{margin-left:0}.mr-0{margin-right:0}.ml-4{margin-left:.4rem}.mt-12{margin-top:1.2rem}.mt-6{margin-top:.6rem}.mb-2{margin-bottom:.2rem}.mr-12{margin-right:1.2rem}.ml-6{margin-left:.6rem}.mb-6{margin-bottom:.6rem}.ml-12{margin-left:1.2rem}.mb-24{margin-bottom:2.4rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.h-screen{height:100vh}.w-full{width:100%}.w-auto{width:auto}.w-1\/2{width:50%}.w-2\/5{width:40%}.grow{flex-grow:1}.cursor-not-allowed{cursor:not-allowed}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.4rem}.rounded-md{border-radius:.6rem}.border{border-width:1px}.border-2{border-width:2px}.border-transparent{border-color:#0000}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(67 160 71/var(--tw-bg-opacity))}.bg-yellow-100\/50{background-color:#fff9c480}.p-6{padding:.6rem}.px-4{padding-left:.4rem;padding-right:.4rem}.py-2{padding-top:.2rem;padding-bottom:.2rem}.px-2{padding-left:.2rem;padding-right:.2rem}.pt-12{padding-top:1.2rem}.pt-4{padding-top:.4rem}.pl-0{padding-left:0}.pr-0{padding-right:0}.pb-4{padding-bottom:.4rem}.text-center{text-align:center}.font-sans{font-family:Muli,Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-sm{font-size:1.4rem;line-height:2rem}.text-xl{font-size:2rem;line-height:2.8rem}.text-2xl{line-height:3.2rem}.text-24,.text-2xl{font-size:2.4rem}.font-medium{font-weight:500}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(117 117 117/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(158 158 158/var(--tw-text-opacity))}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px 0 #0000000f;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px 0 var(--tw-shadow-color)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.drop-shadow-none{--tw-drop-shadow:drop-shadow(0 0 #0000)}.drop-shadow-none,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(56 142 60/var(--tw-bg-opacity))}.hover\:bg-gray-100\/75:hover{background-color:#f5f5f5bf}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(97 97 97/var(--tw-text-opacity))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(76 175 80/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}@media (min-width:960px){.md\:pt-0{padding-top:0}}
|