pcm-shared-components 0.0.49 → 0.0.52
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/Buttons/CustomFab/{CustomFab.js → index.js} +4 -3
- package/dist/components/Buttons/GenericDialogWindow/components/InnerDialogComponent.js +51 -0
- package/dist/components/Buttons/GenericDialogWindow/components/OpenDialog.js +31 -0
- package/dist/components/Buttons/GenericDialogWindow/index.js +88 -0
- package/dist/components/Buttons/HelpButton/{HelpButton.js → index.js} +10 -6
- package/dist/components/Buttons/HelpButton/service/local_storage.js +11 -0
- package/dist/components/Buttons/ImageCanvasDraw/index.js +44 -42
- package/dist/components/Buttons/ImageCanvasDraw/service/local_storage.js +0 -1
- package/dist/components/Buttons/ImageCanvasDraw/{testMap.test.js → storybook/testMap.test.js} +0 -0
- package/dist/components/PcSharedComponentThemeInheritor.js/index.js +12 -0
- package/dist/index.js +4 -4
- package/dist/styles/tailwind.css +1 -1
- package/package.json +1 -1
|
@@ -31,10 +31,12 @@ const useStyles = makeStyles(() => ({
|
|
|
31
31
|
Icon: {
|
|
32
32
|
width: ({
|
|
33
33
|
iconSize
|
|
34
|
-
}) =>
|
|
34
|
+
}) => iconSize,
|
|
35
35
|
height: ({
|
|
36
36
|
iconSize
|
|
37
|
-
}) =>
|
|
37
|
+
}) => iconSize,
|
|
38
|
+
// width: ({iconSize}) => `${iconSize}px !important`,
|
|
39
|
+
// height: ({iconSize}) => `${iconSize}px !important`,
|
|
38
40
|
marginTop: 'auto',
|
|
39
41
|
marginBottom: 'auto'
|
|
40
42
|
},
|
|
@@ -62,7 +64,6 @@ const CustomFab = props => {
|
|
|
62
64
|
} = props;
|
|
63
65
|
const defaultTheme = createTheme(theme);
|
|
64
66
|
const classes = useStyles(props);
|
|
65
|
-
console.log('debug boxShadow', boxShadow);
|
|
66
67
|
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
67
68
|
theme: defaultTheme
|
|
68
69
|
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React, { useState, forwardRef, useImperativeHandle } from 'react';
|
|
2
|
+
import ImageCanvasDraw from '../../ImageCanvasDraw';
|
|
3
|
+
import { cedarShade } from '../../ImageCanvasDraw/storybook/testMap.test'; //!forwardRef needed to allow the parent component to access the child functions
|
|
4
|
+
|
|
5
|
+
const InnerDialogComponent = /*#__PURE__*/forwardRef((props, ref) => {
|
|
6
|
+
// Filter out the parentProps object from the props,
|
|
7
|
+
// There are the props passed down to the actual components
|
|
8
|
+
const [state, setState] = useState(Object.fromEntries(Object.entries(props).filter(([key, value]) => key !== 'parentProps'))); //Passed by the Parent props
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
setCanSave,
|
|
12
|
+
setIsLoading,
|
|
13
|
+
setSaveButtonLabel,
|
|
14
|
+
//Allows us to set the label on the save button
|
|
15
|
+
closeDialog,
|
|
16
|
+
//
|
|
17
|
+
data //Any data this component needs to function..
|
|
18
|
+
|
|
19
|
+
} = props.parentProps;
|
|
20
|
+
console.log('debug data: ', data); //-----------------------------------
|
|
21
|
+
//! Used to alow the parent component to call the functions inside this child
|
|
22
|
+
//-----------------------------------
|
|
23
|
+
|
|
24
|
+
useImperativeHandle(ref, () => ({
|
|
25
|
+
childRefSave
|
|
26
|
+
}));
|
|
27
|
+
|
|
28
|
+
const childRefSave = () => {
|
|
29
|
+
setIsLoading(true); //Simulate a save
|
|
30
|
+
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
setIsLoading(false);
|
|
33
|
+
closeDialog();
|
|
34
|
+
}, 2000);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return /*#__PURE__*/React.createElement("div", null, "something here to show...", /*#__PURE__*/React.createElement("button", {
|
|
38
|
+
onClick: () => {
|
|
39
|
+
setCanSave(true);
|
|
40
|
+
}
|
|
41
|
+
}, "Click here to signal to the dialog that we are ready to save."), /*#__PURE__*/React.createElement(ImageCanvasDraw, {
|
|
42
|
+
outputFormat: 'blob',
|
|
43
|
+
showDownloadButton: true,
|
|
44
|
+
onSave: data => {
|
|
45
|
+
console.log('Data received by th onSave of the ImageCanvasDraw: ', data);
|
|
46
|
+
closeDialog();
|
|
47
|
+
},
|
|
48
|
+
b64DataUrl: cedarShade
|
|
49
|
+
}));
|
|
50
|
+
});
|
|
51
|
+
export default InnerDialogComponent;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import CustomFab from '../../CustomFab';
|
|
3
|
+
import InnerDialogComponent from './InnerDialogComponent';
|
|
4
|
+
import GenericDialogWindow from '../index';
|
|
5
|
+
export const OpenDialog = () => {
|
|
6
|
+
const [open, setOpen] = useState(false);
|
|
7
|
+
|
|
8
|
+
const onClose = () => {
|
|
9
|
+
setOpen(false);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
|
|
13
|
+
className: "flex flex-col"
|
|
14
|
+
}, "Once the button is clicked the dialog will open which is actually what we are trying to display in this Story"), /*#__PURE__*/React.createElement(CustomFab, {
|
|
15
|
+
onClick: () => {
|
|
16
|
+
setOpen(!open);
|
|
17
|
+
},
|
|
18
|
+
buttonText: "Click to open Generic Dialog",
|
|
19
|
+
iconSize: 0
|
|
20
|
+
}), /*#__PURE__*/React.createElement(GenericDialogWindow, {
|
|
21
|
+
open: open,
|
|
22
|
+
onClose: onClose,
|
|
23
|
+
component: /*#__PURE__*/React.createElement(InnerDialogComponent, null),
|
|
24
|
+
data: 'this is anything I need to pass down to the InnerDialogComponent',
|
|
25
|
+
i18nextStrings: {
|
|
26
|
+
saveButtonLabel: 'save me',
|
|
27
|
+
backButtonLabel: 'backup!'
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
31
|
+
export default OpenDialog;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React, { useState, useRef } from 'react';
|
|
2
|
+
import { Button, Dialog, DialogActions, DialogContent, IconButton, Typography, Toolbar, AppBar } from '@mui/material';
|
|
3
|
+
import ArrowBackIcon from '@mui/icons-material/ArrowBack'; // import GridLoading from 'app/main/components/loading/loading';
|
|
4
|
+
|
|
5
|
+
let debounce;
|
|
6
|
+
export const GenericDialogWindow = props => {
|
|
7
|
+
const {
|
|
8
|
+
open,
|
|
9
|
+
component,
|
|
10
|
+
data,
|
|
11
|
+
onClose,
|
|
12
|
+
showSaveButton = false,
|
|
13
|
+
i18nextStrings = {
|
|
14
|
+
saveButtonLabel: 'save',
|
|
15
|
+
backButtonLabel: 'back'
|
|
16
|
+
}
|
|
17
|
+
} = props; //---------------------------------------------------
|
|
18
|
+
// Hooks
|
|
19
|
+
//---------------------------------------------------
|
|
20
|
+
|
|
21
|
+
const [can_save, setCanSave] = useState(false);
|
|
22
|
+
const [is_loading, setIsLoading] = useState(false);
|
|
23
|
+
const [save_button_label, setSaveButtonLabel] = useState(i18nextStrings.saveButtonLabel);
|
|
24
|
+
const childRef = useRef();
|
|
25
|
+
|
|
26
|
+
const onSave = () => {
|
|
27
|
+
clearTimeout(debounce);
|
|
28
|
+
debounce = setTimeout(() => {
|
|
29
|
+
//! Allows this parent component to call a sub function inside of the child component
|
|
30
|
+
childRef.current ? childRef.current.childRefSave() : undefined;
|
|
31
|
+
}, 300);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const closeDialog = () => {
|
|
35
|
+
onClose();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return /*#__PURE__*/React.createElement(Dialog, {
|
|
39
|
+
open: open,
|
|
40
|
+
onClose: closeDialog,
|
|
41
|
+
fullScreen: true,
|
|
42
|
+
className: "print:hide-me"
|
|
43
|
+
}, /*#__PURE__*/React.createElement(AppBar, {
|
|
44
|
+
position: 'relative'
|
|
45
|
+
}, /*#__PURE__*/React.createElement(Toolbar, {
|
|
46
|
+
variant: "dense",
|
|
47
|
+
style: {
|
|
48
|
+
display: 'grid'
|
|
49
|
+
}
|
|
50
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
className: "flex flex-row justify-between "
|
|
52
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
53
|
+
className: "flex flex-row justify-start"
|
|
54
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
55
|
+
edge: "start",
|
|
56
|
+
color: "inherit",
|
|
57
|
+
onClick: closeDialog,
|
|
58
|
+
"aria-label": "close"
|
|
59
|
+
}, /*#__PURE__*/React.createElement(ArrowBackIcon, null)), /*#__PURE__*/React.createElement(Typography, {
|
|
60
|
+
className: "my-auto",
|
|
61
|
+
variant: "h5",
|
|
62
|
+
color: "inherit"
|
|
63
|
+
}, i18nextStrings.backButton)), can_save && showSaveButton && /*#__PURE__*/React.createElement(Button, {
|
|
64
|
+
color: "inherit",
|
|
65
|
+
onClick: onSave
|
|
66
|
+
}, save_button_label)))), /*#__PURE__*/React.createElement(DialogContent, {
|
|
67
|
+
className: "pt-4 pl-0 pr-0"
|
|
68
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
className: "w-full h-full"
|
|
70
|
+
}, component ? /*#__PURE__*/React.cloneElement(component, {
|
|
71
|
+
parentProps: {
|
|
72
|
+
setCanSave,
|
|
73
|
+
setIsLoading,
|
|
74
|
+
setSaveButtonLabel,
|
|
75
|
+
closeDialog,
|
|
76
|
+
data: data
|
|
77
|
+
},
|
|
78
|
+
ref: childRef
|
|
79
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null))), /*#__PURE__*/React.createElement(DialogActions, {
|
|
80
|
+
className: "justify-between pl-16"
|
|
81
|
+
}, showSaveButton && /*#__PURE__*/React.createElement(Button, {
|
|
82
|
+
variant: "contained",
|
|
83
|
+
color: "primary",
|
|
84
|
+
onClick: onSave,
|
|
85
|
+
disabled: !can_save
|
|
86
|
+
}, save_button_label)), is_loading && /*#__PURE__*/React.createElement(React.Fragment, null, "Loading..."));
|
|
87
|
+
};
|
|
88
|
+
export default GenericDialogWindow;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import CustomFab from '../CustomFab
|
|
2
|
+
import CustomFab from '../CustomFab';
|
|
3
3
|
import HelpOutlineIcon from '@mui/icons-material/HelpOutline';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { ThemeProvider } from '@mui/system';
|
|
6
|
-
import { createTheme } from '@mui/material/styles';
|
|
6
|
+
import { createTheme, useTheme } from '@mui/material/styles';
|
|
7
|
+
import { setStorage } from './service/local_storage';
|
|
7
8
|
export const HelpButton = props => {
|
|
8
9
|
const {
|
|
9
10
|
onClickLink,
|
|
@@ -14,7 +15,10 @@ export const HelpButton = props => {
|
|
|
14
15
|
iconSize,
|
|
15
16
|
theme
|
|
16
17
|
} = props;
|
|
17
|
-
const
|
|
18
|
+
const compTheme = theme ? theme : useTheme();
|
|
19
|
+
setStorage(compTheme);
|
|
20
|
+
console.log('debug theme,', compTheme);
|
|
21
|
+
const defaultTheme = createTheme(compTheme);
|
|
18
22
|
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
19
23
|
theme: defaultTheme
|
|
20
24
|
}, /*#__PURE__*/React.createElement(CustomFab, {
|
|
@@ -24,8 +28,8 @@ export const HelpButton = props => {
|
|
|
24
28
|
color: color,
|
|
25
29
|
size: size,
|
|
26
30
|
iconSize: iconSize,
|
|
27
|
-
variant: '
|
|
28
|
-
theme:
|
|
31
|
+
variant: 'circular',
|
|
32
|
+
theme: compTheme,
|
|
29
33
|
onClick: () => {
|
|
30
34
|
window.open(onClickLink, "_blank");
|
|
31
35
|
}
|
|
@@ -39,7 +43,7 @@ HelpButton.defaultProps = {
|
|
|
39
43
|
tooltipText: '',
|
|
40
44
|
size: 'large',
|
|
41
45
|
iconSize: 24,
|
|
42
|
-
theme:
|
|
46
|
+
theme: undefined
|
|
43
47
|
};
|
|
44
48
|
HelpButton.propTypes = {
|
|
45
49
|
/** On click link, it's the URL to navigate too */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const STORAGE_NAME = 'PC_TEST_THEME';
|
|
2
|
+
export const setStorage = value => {
|
|
3
|
+
try {
|
|
4
|
+
//Need to filter out the b64DataUrl object from the state or else it might slow down the browser...
|
|
5
|
+
let new_value = Object.fromEntries(Object.entries(value).filter(([key, value]) => key !== 'b64DataUrl'));
|
|
6
|
+
localStorage.setItem(STORAGE_NAME, JSON.stringify(new_value));
|
|
7
|
+
} catch (error) {
|
|
8
|
+
console.error('Error in setting storage for IMAGE Draw:', error);
|
|
9
|
+
setStorage('');
|
|
10
|
+
}
|
|
11
|
+
};
|
|
@@ -6,6 +6,8 @@ import ChevronRightIcon from '@mui/icons-material/ChevronRight';
|
|
|
6
6
|
import Button from '@mui/material/Button';
|
|
7
7
|
import { getStorage, setStorage } from './service/local_storage';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
|
+
import { ThemeProvider } from '@mui/system';
|
|
10
|
+
import { createTheme } from '@mui/material/styles';
|
|
9
11
|
/**
|
|
10
12
|
* Displays an image that can is used to draw on to generate maps with highlighted routes.
|
|
11
13
|
*
|
|
@@ -26,8 +28,10 @@ const ImageCanvasDraw = props => {
|
|
|
26
28
|
onSave,
|
|
27
29
|
outputFormat,
|
|
28
30
|
showDownloadButton,
|
|
29
|
-
b64DataUrl
|
|
31
|
+
b64DataUrl,
|
|
32
|
+
theme
|
|
30
33
|
} = props;
|
|
34
|
+
const defaultTheme = createTheme(theme);
|
|
31
35
|
const [state, setState] = useState({
|
|
32
36
|
drawerOpen: true,
|
|
33
37
|
color: "darkorange",
|
|
@@ -109,47 +113,45 @@ const ImageCanvasDraw = props => {
|
|
|
109
113
|
}
|
|
110
114
|
}, children);
|
|
111
115
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, "loading...");
|
|
152
|
-
}
|
|
116
|
+
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
117
|
+
theme: defaultTheme
|
|
118
|
+
}, state.width && state.width !== 0 ? /*#__PURE__*/React.createElement("div", {
|
|
119
|
+
className: "flex flex-row overflow-hidden"
|
|
120
|
+
}, state.drawerOpen ? /*#__PURE__*/React.createElement("div", {
|
|
121
|
+
className: "flex flex-row",
|
|
122
|
+
style: {
|
|
123
|
+
width: 'auto'
|
|
124
|
+
}
|
|
125
|
+
}, /*#__PURE__*/React.createElement(Controls, {
|
|
126
|
+
state: state,
|
|
127
|
+
setState: setState,
|
|
128
|
+
saveableCanvas: saveableCanvas,
|
|
129
|
+
onSave: onSave,
|
|
130
|
+
outputFormat: outputFormat,
|
|
131
|
+
showDownloadButton: showDownloadButton
|
|
132
|
+
}), /*#__PURE__*/React.createElement(DrawerButtonOpenClose, null, /*#__PURE__*/React.createElement(ChevronLeftIcon, null))) : /*#__PURE__*/React.createElement("div", {
|
|
133
|
+
className: "flex flex-row justify-end"
|
|
134
|
+
}, /*#__PURE__*/React.createElement(DrawerButtonOpenClose, null, /*#__PURE__*/React.createElement(ChevronRightIcon, null))), state.width !== 0 && /*#__PURE__*/React.createElement("div", {
|
|
135
|
+
className: "overflow-scroll"
|
|
136
|
+
}, /*#__PURE__*/React.createElement(CanvasDraw, {
|
|
137
|
+
className: "",
|
|
138
|
+
ref: saveableCanvas,
|
|
139
|
+
onChange: evt => console.log("onChange", evt) // enablePanAndZoom //Don't enable pan and zoom or else it gets too complicated when saving...
|
|
140
|
+
// zoomExtents={{ min: 0.33, max: 10 }}
|
|
141
|
+
,
|
|
142
|
+
clampLinesToDocument: true,
|
|
143
|
+
hideInterface: false,
|
|
144
|
+
hideGrid: false,
|
|
145
|
+
backgroundColor: 'rgba(34,34,34,0.2)',
|
|
146
|
+
brushColor: state.color,
|
|
147
|
+
brushRadius: state.brushRadius,
|
|
148
|
+
lazyRadius: state.lazyRadius,
|
|
149
|
+
canvasWidth: Number(state.width) / Number(state.imageScale),
|
|
150
|
+
canvasHeight: Number(state.height) / Number(state.imageScale),
|
|
151
|
+
catenaryColor: 'black',
|
|
152
|
+
gridColor: "#ccc",
|
|
153
|
+
imgSrc: state.b64DataUrl
|
|
154
|
+
}))) : /*#__PURE__*/React.createElement(React.Fragment, null, "loading..."));
|
|
153
155
|
};
|
|
154
156
|
|
|
155
157
|
export default ImageCanvasDraw;
|
|
@@ -11,7 +11,6 @@ export const setStorage = value => {
|
|
|
11
11
|
try {
|
|
12
12
|
//Need to filter out the b64DataUrl object from the state or else it might slow down the browser...
|
|
13
13
|
let new_value = Object.fromEntries(Object.entries(value).filter(([key, value]) => key !== 'b64DataUrl'));
|
|
14
|
-
console.log('debug new_value', new_value);
|
|
15
14
|
localStorage.setItem(STORAGE_NAME, JSON.stringify(new_value));
|
|
16
15
|
} catch (error) {
|
|
17
16
|
console.error('Error in setting storage for IMAGE Draw:', error);
|
package/dist/components/Buttons/ImageCanvasDraw/{testMap.test.js → storybook/testMap.test.js}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Theme, ThemeProvider } from "@mui/material/styles";
|
|
3
|
+
export const PcSharedComponentThemeInheritor = props => {
|
|
4
|
+
const {
|
|
5
|
+
theme = Theme,
|
|
6
|
+
children = React.ReactNode
|
|
7
|
+
} = props;
|
|
8
|
+
return /*#__PURE__*/React.createElement(ThemeProvider, {
|
|
9
|
+
theme: theme
|
|
10
|
+
}, children);
|
|
11
|
+
};
|
|
12
|
+
export default PcSharedComponentThemeInheritor;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import './styles/tailwind.css';
|
|
2
2
|
import TestButton from './components/Buttons/TestButton';
|
|
3
3
|
import CodeHighlight from './components/Tools/CodeHighlight/CodeHighlight';
|
|
4
|
-
import CustomFab from './components/Buttons/CustomFab
|
|
5
|
-
import HelpButton from './components/Buttons/HelpButton
|
|
6
|
-
import
|
|
7
|
-
export { TestButton, CodeHighlight, CustomFab, HelpButton,
|
|
4
|
+
import CustomFab from './components/Buttons/CustomFab';
|
|
5
|
+
import HelpButton from './components/Buttons/HelpButton';
|
|
6
|
+
import PcSharedComponentThemeInheritor from './components/PcSharedComponentThemeInheritor.js';
|
|
7
|
+
export { TestButton, CodeHighlight, CustomFab, HelpButton, PcSharedComponentThemeInheritor };
|
package/dist/styles/tailwind.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--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: }.relative{position:relative}.m-auto{margin:auto}.mx-6{margin-left:.6rem;margin-right:.6rem}.my-auto{margin-top:auto;margin-bottom:auto}.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}.mt-6{margin-top:.6rem}.mb-
|
|
1
|
+
*,:after,:before{--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: }.relative{position:relative}.m-auto{margin:auto}.mx-6{margin-left:.6rem;margin-right:.6rem}.my-auto{margin-top:auto;margin-bottom:auto}.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}.mt-6{margin-top:.6rem}.mb-6{margin-bottom:.6rem}.mb-2{margin-bottom:.2rem}.ml-6{margin-left:.6rem}.mt-12{margin-top:1.2rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-full{height:100%}.w-full{width:100%}.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-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.rounded-md{border-radius:.6rem}.border{border-width:1px}.border-transparent{border-color:#0000}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(67 160 71/var(--tw-bg-opacity))}.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-4{padding-top:.4rem}.pl-0{padding-left:0}.pr-0{padding-right:0}.pl-16{padding-left:1.6rem}.text-sm{font-size:1.4rem;line-height:2rem}.text-2xl{font-size:2.4rem;line-height:3.2rem}.text-xl{font-size:2rem;line-height:2.8rem}.font-medium{font-weight:500}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.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}.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}
|