@symply.io/basic-components 1.0.0-alpha.1
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/.gitignore +15 -0
- package/AlertDialog/index.d.ts +5 -0
- package/AlertDialog/index.js +47 -0
- package/AlertDialog/types.d.ts +11 -0
- package/AlertDialog/types.js +1 -0
- package/BasicModal/Content.d.ts +4 -0
- package/BasicModal/Content.js +37 -0
- package/BasicModal/index.d.ts +5 -0
- package/BasicModal/index.js +54 -0
- package/BasicModal/types.d.ts +22 -0
- package/BasicModal/types.js +1 -0
- package/DigitInput/index.d.ts +7 -0
- package/DigitInput/index.js +35 -0
- package/DigitInput/types.d.ts +9 -0
- package/DigitInput/types.js +1 -0
- package/DigitInput/useInteractions.d.ts +11 -0
- package/DigitInput/useInteractions.js +24 -0
- package/DynamicHeaderBar/HeaderBar.d.ts +13 -0
- package/DynamicHeaderBar/HeaderBar.js +31 -0
- package/DynamicHeaderBar/HeaderButtons.d.ts +7 -0
- package/DynamicHeaderBar/HeaderButtons.js +43 -0
- package/DynamicHeaderBar/HeaderLine.d.ts +6 -0
- package/DynamicHeaderBar/HeaderLine.js +12 -0
- package/DynamicHeaderBar/index.d.ts +21 -0
- package/DynamicHeaderBar/index.js +57 -0
- package/DynamicHeaderBar/types.d.ts +33 -0
- package/DynamicHeaderBar/types.js +6 -0
- package/FormRadioGroup/index.d.ts +5 -0
- package/FormRadioGroup/index.js +35 -0
- package/FormRadioGroup/types.d.ts +16 -0
- package/FormRadioGroup/types.js +1 -0
- package/FormSelector/MultipleSelector.d.ts +4 -0
- package/FormSelector/MultipleSelector.js +34 -0
- package/FormSelector/SimpleSelector.d.ts +4 -0
- package/FormSelector/SimpleSelector.js +34 -0
- package/FormSelector/index.d.ts +3 -0
- package/FormSelector/index.js +3 -0
- package/FormSelector/types.d.ts +27 -0
- package/FormSelector/types.js +1 -0
- package/FormSelector/useInteractions.d.ts +6 -0
- package/FormSelector/useInteractions.js +12 -0
- package/HelpCaption/index.d.ts +10 -0
- package/HelpCaption/index.js +34 -0
- package/HelpCaption/useInteractions.d.ts +6 -0
- package/HelpCaption/useInteractions.js +12 -0
- package/LICENSE +21 -0
- package/LoadingModal/index.d.ts +5 -0
- package/LoadingModal/index.js +27 -0
- package/LoadingModal/types.d.ts +8 -0
- package/LoadingModal/types.js +1 -0
- package/MenuButtonGroup/MenuItem.d.ts +12 -0
- package/MenuButtonGroup/MenuItem.js +21 -0
- package/MenuButtonGroup/index.d.ts +13 -0
- package/MenuButtonGroup/index.js +100 -0
- package/NumberInput/index.d.ts +13 -0
- package/NumberInput/index.js +38 -0
- package/NumberInput/useInteractions.d.ts +17 -0
- package/NumberInput/useInteractions.js +54 -0
- package/PasswordInput/ConfirmPassword.d.ts +10 -0
- package/PasswordInput/ConfirmPassword.js +38 -0
- package/PasswordInput/Password.d.ts +18 -0
- package/PasswordInput/Password.js +68 -0
- package/PasswordInput/index.d.ts +4 -0
- package/PasswordInput/index.js +4 -0
- package/PhoneNumberInput/index.d.ts +11 -0
- package/PhoneNumberInput/index.js +44 -0
- package/PhoneNumberInput/useInteractions.d.ts +9 -0
- package/PhoneNumberInput/useInteractions.js +30 -0
- package/README.md +499 -0
- package/TabGroup/index.d.ts +5 -0
- package/TabGroup/index.js +46 -0
- package/TabGroup/types.d.ts +11 -0
- package/TabGroup/types.js +1 -0
- package/TextInput/index.d.ts +12 -0
- package/TextInput/index.js +35 -0
- package/TextInput/useInteractions.d.ts +6 -0
- package/TextInput/useInteractions.js +12 -0
- package/ToastPrompt/Logics.d.ts +12 -0
- package/ToastPrompt/Logics.js +37 -0
- package/ToastPrompt/Presentation.d.ts +16 -0
- package/ToastPrompt/Presentation.js +80 -0
- package/ToastPrompt/index.d.ts +13 -0
- package/ToastPrompt/index.js +29 -0
- package/VideoPlayerModal/index.d.ts +6 -0
- package/VideoPlayerModal/index.js +42 -0
- package/VideoPlayerModal/types.d.ts +8 -0
- package/VideoPlayerModal/types.js +1 -0
- package/index.d.ts +29 -0
- package/index.js +29 -0
- package/package.json +74 -0
package/.gitignore
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
13
|
+
var t = {};
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
15
|
+
t[p] = s[p];
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
19
|
+
t[p[i]] = s[p[i]];
|
20
|
+
}
|
21
|
+
return t;
|
22
|
+
};
|
23
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
24
|
+
import { forwardRef, cloneElement } from "react";
|
25
|
+
import useTheme from "@mui/material/styles/useTheme";
|
26
|
+
import Button from "@mui/material/Button";
|
27
|
+
import Dialog from "@mui/material/Dialog";
|
28
|
+
import DialogTitle from "@mui/material/DialogTitle";
|
29
|
+
import DialogActions from "@mui/material/DialogActions";
|
30
|
+
import DialogContent from "@mui/material/DialogContent";
|
31
|
+
import useMediaQuery from "@mui/material/useMediaQuery";
|
32
|
+
import Slide from "@mui/material/Slide";
|
33
|
+
var Transition = forwardRef(function Transition(props, ref) {
|
34
|
+
return _jsx(Slide, __assign({ direction: "up" }, props, { ref: ref }), void 0);
|
35
|
+
});
|
36
|
+
var AlertDialog = function (props) {
|
37
|
+
var _a = props.title, title = _a === void 0 ? "Info" : _a, _b = props.maxWidth, maxWidth = _b === void 0 ? "md" : _b, children = props.children, open = props.open, onClose = props.onClose, DialogButtons = props.DialogButtons, rest = __rest(props, ["title", "maxWidth", "children", "open", "onClose", "DialogButtons"]);
|
38
|
+
var theme = useTheme();
|
39
|
+
var fullScreen = useMediaQuery(theme.breakpoints.down("sm"));
|
40
|
+
return (_jsxs(Dialog, __assign({ maxWidth: maxWidth, fullScreen: fullScreen, TransitionComponent: Transition, open: open, onClose: function (_, reason) {
|
41
|
+
if (reason !== "backdropClick") {
|
42
|
+
onClose();
|
43
|
+
}
|
44
|
+
}, "aria-labelledby": "alert-dialog-title", "aria-describedby": "alert-dialog-description" }, rest, { children: [_jsx(DialogTitle, __assign({ id: "alert-dialog-title" }, { children: title }), void 0), _jsx(DialogContent, { children: children }, void 0), _jsx(DialogActions, { children: DialogButtons ? (cloneElement(DialogButtons)) : (_jsx(Button, __assign({ onClick: onClose, color: "primary" }, { children: "OK" }), void 0)) }, void 0)] }), void 0));
|
45
|
+
};
|
46
|
+
export default AlertDialog;
|
47
|
+
export * from "./types";
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { ReactElement } from "react";
|
2
|
+
import { DialogProps } from "@mui/material/Dialog";
|
3
|
+
import { DialogContentProps } from "@mui/material/DialogContent";
|
4
|
+
export interface AlertDialogProps {
|
5
|
+
title?: string;
|
6
|
+
maxWidth?: DialogProps["maxWidth"];
|
7
|
+
children: DialogContentProps["children"];
|
8
|
+
open: boolean;
|
9
|
+
onClose: () => void;
|
10
|
+
DialogButtons?: ReactElement;
|
11
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,37 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
13
|
+
import { cloneElement } from "react";
|
14
|
+
import useTheme from "@mui/material/styles/useTheme";
|
15
|
+
import DialogTitle from "@mui/material/DialogTitle";
|
16
|
+
import DialogContent from "@mui/material/DialogContent";
|
17
|
+
import DialogActions from "@mui/material/DialogActions";
|
18
|
+
import DialogContentText from "@mui/material/DialogContentText";
|
19
|
+
import Button from "@mui/material/Button";
|
20
|
+
import IconButton from "@mui/material/IconButton";
|
21
|
+
import CloseIcon from "@mui/icons-material/Close";
|
22
|
+
import Grid from "@mui/material/Grid";
|
23
|
+
function Content(props) {
|
24
|
+
var children = props.children, title = props.title, desc = props.desc, _a = props.color, color = _a === void 0 ? "primary" : _a, loading = props.loading, disabled = props.disabled, buttons = props.buttons, _b = props.submitText, submitText = _b === void 0 ? "Save" : _b, _c = props.cancelText, cancelText = _c === void 0 ? "Cancel" : _c, _d = props.showTopRightCloseButton, showTopRightCloseButton = _d === void 0 ? false : _d, _e = props.hideBottomButtons, hideBottomButtons = _e === void 0 ? false : _e, _f = props.noForm, noForm = _f === void 0 ? false : _f, onClose = props.onClose, onSubmit = props.onSubmit;
|
25
|
+
var theme = useTheme();
|
26
|
+
return (_jsxs(_Fragment, { children: [_jsxs(DialogTitle, __assign({ id: "form-dialog-title", sx: {
|
27
|
+
"& > h6": {
|
28
|
+
fontWeight: "700",
|
29
|
+
},
|
30
|
+
} }, { children: [title, showTopRightCloseButton ? (_jsx(IconButton, __assign({ "aria-label": "close", onClick: onClose, sx: {
|
31
|
+
position: "absolute",
|
32
|
+
right: 8,
|
33
|
+
top: 8,
|
34
|
+
color: theme.palette.grey[500],
|
35
|
+
} }, { children: _jsx(CloseIcon, {}, void 0) }), void 0)) : null] }), void 0), _jsxs(DialogContent, __assign({ sx: { paddingTop: theme.spacing(1.25) } }, { children: [desc && _jsx(DialogContentText, { children: desc }, void 0), Boolean(children) && cloneElement(children)] }), void 0), !hideBottomButtons && (_jsx(DialogActions, __assign({ sx: { padding: theme.spacing(1.25) } }, { children: _jsx(Grid, __assign({ container: true, spacing: 2, justifyContent: "flex-end", alignItems: "center", sx: { margin: 0 } }, { children: buttons || (_jsxs(_Fragment, { children: [_jsx(Grid, __assign({ item: true, xs: 12, md: 3, xl: 2 }, { children: _jsx(Button, __assign({ onClick: onClose, variant: "outlined", color: color, disabled: loading, fullWidth: true }, { children: cancelText }), void 0) }), void 0), _jsx(Grid, __assign({ item: true, xs: 12, md: 3, xl: 2 }, { children: _jsx(Button, __assign({ type: noForm ? "button" : "submit", onClick: noForm ? onSubmit : undefined, variant: "contained", color: color, disabled: loading || disabled, fullWidth: true }, { children: submitText }), void 0) }), void 0)] }, void 0)) }), void 0) }), void 0))] }, void 0));
|
36
|
+
}
|
37
|
+
export default Content;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
13
|
+
var t = {};
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
15
|
+
t[p] = s[p];
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
19
|
+
t[p[i]] = s[p[i]];
|
20
|
+
}
|
21
|
+
return t;
|
22
|
+
};
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
24
|
+
import { forwardRef } from "react";
|
25
|
+
import Grid from "@mui/material/Grid";
|
26
|
+
import Dialog from "@mui/material/Dialog";
|
27
|
+
import Slide from "@mui/material/Slide";
|
28
|
+
import useMediaQuery from "@mui/material/useMediaQuery";
|
29
|
+
import useTheme from "@mui/material/styles/useTheme";
|
30
|
+
import Content from "./Content";
|
31
|
+
var Transition = forwardRef(function Transition(props, ref) {
|
32
|
+
return _jsx(Slide, __assign({ direction: "up" }, props, { ref: ref }), void 0);
|
33
|
+
});
|
34
|
+
function BasicModal(props) {
|
35
|
+
var onClose = props.onClose, onSubmit = props.onSubmit, _a = props.maxWidth, maxWidth = _a === void 0 ? "sm" : _a, _b = props.open, open = _b === void 0 ? false : _b, _c = props.noForm, noForm = _c === void 0 ? false : _c, rest = __rest(props, ["onClose", "onSubmit", "maxWidth", "open", "noForm"]);
|
36
|
+
var theme = useTheme();
|
37
|
+
var fullScreen = useMediaQuery(theme.breakpoints.down("sm"));
|
38
|
+
return (_jsx(Dialog, __assign({ open: open, onClose: function (_, reason) {
|
39
|
+
if (reason !== "backdropClick") {
|
40
|
+
onClose();
|
41
|
+
}
|
42
|
+
}, maxWidth: maxWidth, fullWidth: true, TransitionComponent: Transition, "aria-labelledby": "form-dialog-title", fullScreen: fullScreen, disableEscapeKeyDown: true }, { children: _jsx(Grid, __assign({ container: true, direction: "column", sx: {
|
43
|
+
height: "100%",
|
44
|
+
overflowY: "hidden",
|
45
|
+
}, component: noForm ? "div" : "form", onSubmit: noForm
|
46
|
+
? undefined
|
47
|
+
: function (e) {
|
48
|
+
e.preventDefault();
|
49
|
+
e.stopPropagation();
|
50
|
+
onSubmit();
|
51
|
+
} }, { children: _jsx(Content, __assign({}, rest, { noForm: noForm, onClose: onClose, onSubmit: onSubmit }), void 0) }), void 0) }), void 0));
|
52
|
+
}
|
53
|
+
export default BasicModal;
|
54
|
+
export * from "./types";
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { ReactNode } from "react";
|
2
|
+
import { ButtonProps } from "@mui/material/Button";
|
3
|
+
export interface BasicModalContentProps {
|
4
|
+
children: ReactNode;
|
5
|
+
color?: ButtonProps["color"];
|
6
|
+
title: string;
|
7
|
+
desc?: string;
|
8
|
+
loading?: boolean;
|
9
|
+
disabled?: boolean;
|
10
|
+
buttons?: ReactNode;
|
11
|
+
submitText?: string;
|
12
|
+
cancelText?: string;
|
13
|
+
showTopRightCloseButton?: boolean;
|
14
|
+
hideBottomButtons?: boolean;
|
15
|
+
noForm?: boolean;
|
16
|
+
onClose: () => void;
|
17
|
+
onSubmit: () => void;
|
18
|
+
}
|
19
|
+
export interface BasicModalProps extends BasicModalContentProps {
|
20
|
+
open?: boolean;
|
21
|
+
maxWidth?: "xs" | "sm" | "md" | "lg" | "xl";
|
22
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { TextFieldProps } from "@mui/material/TextField";
|
3
|
+
import { DigitInputProps } from "./types";
|
4
|
+
declare type TextProps = Omit<TextFieldProps, "onChange">;
|
5
|
+
declare function DigitInput(props: DigitInputProps & TextProps): JSX.Element;
|
6
|
+
export default DigitInput;
|
7
|
+
export * from "./types";
|
@@ -0,0 +1,35 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
13
|
+
var t = {};
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
15
|
+
t[p] = s[p];
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
19
|
+
t[p[i]] = s[p[i]];
|
20
|
+
}
|
21
|
+
return t;
|
22
|
+
};
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
24
|
+
import Tooltip from "@mui/material/Tooltip";
|
25
|
+
import Field from "@mui/material/TextField";
|
26
|
+
import useInteractions from "./useInteractions";
|
27
|
+
function DigitInput(props) {
|
28
|
+
var onChange = props.onChange, value = props.value, _a = props.size, size = _a === void 0 ? "small" : _a, tooltip = props.tooltip, error = props.error, helperText = props.helperText, _b = props.maxLength, maxLength = _b === void 0 ? 999 : _b, _c = props.minLength, minLength = _c === void 0 ? 0 : _c, endAdornment = props.endAdornment, rest = __rest(props, ["onChange", "value", "size", "tooltip", "error", "helperText", "maxLength", "minLength", "endAdornment"]);
|
29
|
+
var _d = useInteractions({ onChange: onChange }), tooltipOpen = _d.tooltipOpen, handleChange = _d.handleChange, onOpenTooltip = _d.onOpenTooltip, onCloseTooltip = _d.onCloseTooltip;
|
30
|
+
return (_jsx(Tooltip, __assign({ title: tooltip !== null && tooltip !== void 0 ? tooltip : "", open: !!tooltip && tooltipOpen }, { children: _jsx(Field, __assign({ size: size, margin: "dense", type: "number", value: value === undefined || value === null ? "" : value, onFocus: onOpenTooltip, onBlur: onCloseTooltip, inputProps: { maxLength: maxLength, minLength: minLength }, InputProps: {
|
31
|
+
endAdornment: endAdornment,
|
32
|
+
}, onChange: handleChange }, rest), void 0) }), void 0));
|
33
|
+
}
|
34
|
+
export default DigitInput;
|
35
|
+
export * from "./types";
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { ChangeEvent } from "react";
|
2
|
+
interface InteractionProps {
|
3
|
+
onChange: (value: string) => void;
|
4
|
+
}
|
5
|
+
declare function useInteractions(props: InteractionProps): {
|
6
|
+
tooltipOpen: boolean;
|
7
|
+
handleChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
8
|
+
onOpenTooltip: () => void;
|
9
|
+
onCloseTooltip: () => void;
|
10
|
+
};
|
11
|
+
export default useInteractions;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { useState, useCallback } from "react";
|
2
|
+
function useInteractions(props) {
|
3
|
+
var onChange = props.onChange;
|
4
|
+
var _a = useState(false), tooltipOpen = _a[0], setTooltipOpen = _a[1];
|
5
|
+
var handleChange = useCallback(function (event) {
|
6
|
+
event.preventDefault();
|
7
|
+
if (!event.target.value || /^\d+$/g.test(event.target.value)) {
|
8
|
+
onChange(event.target.value);
|
9
|
+
}
|
10
|
+
}, []);
|
11
|
+
var onOpenTooltip = useCallback(function () {
|
12
|
+
setTooltipOpen(true);
|
13
|
+
}, []);
|
14
|
+
var onCloseTooltip = useCallback(function () {
|
15
|
+
setTooltipOpen(false);
|
16
|
+
}, []);
|
17
|
+
return {
|
18
|
+
tooltipOpen: tooltipOpen,
|
19
|
+
handleChange: handleChange,
|
20
|
+
onOpenTooltip: onOpenTooltip,
|
21
|
+
onCloseTooltip: onCloseTooltip,
|
22
|
+
};
|
23
|
+
}
|
24
|
+
export default useInteractions;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { ReactElement, CSSProperties } from "react";
|
2
|
+
import { HeaderButtonProps } from "./types";
|
3
|
+
export interface HeaderBarProps {
|
4
|
+
title: string;
|
5
|
+
color?: CSSProperties["color"];
|
6
|
+
subtitle?: string | ReactElement;
|
7
|
+
bottomEl?: ReactElement;
|
8
|
+
buttons?: Array<HeaderButtonProps>;
|
9
|
+
showBackButton?: boolean;
|
10
|
+
onBack?: () => void;
|
11
|
+
}
|
12
|
+
declare function HeaderBar(props: HeaderBarProps): JSX.Element;
|
13
|
+
export default HeaderBar;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
13
|
+
import { cloneElement, useMemo } from "react";
|
14
|
+
import useTheme from "@mui/material/styles/useTheme";
|
15
|
+
import useMediaQuery from "@mui/material/useMediaQuery";
|
16
|
+
import Typography from "@mui/material/Typography";
|
17
|
+
import Grid from "@mui/material/Grid";
|
18
|
+
import IconButton from "@mui/material/IconButton";
|
19
|
+
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
20
|
+
import HeaderLine from "./HeaderLine";
|
21
|
+
import HeaderButtons from "./HeaderButtons";
|
22
|
+
function HeaderBar(props) {
|
23
|
+
var title = props.title, color = props.color, subtitle = props.subtitle, bottomEl = props.bottomEl, _a = props.buttons, buttons = _a === void 0 ? [] : _a, showBackButton = props.showBackButton, onBack = props.onBack;
|
24
|
+
var theme = useTheme();
|
25
|
+
var isLessThanSm = useMediaQuery(theme.breakpoints.down("sm"));
|
26
|
+
var hasButtons = useMemo(function () { return buttons.length > 0; }, [buttons.length]);
|
27
|
+
return (_jsxs(Grid, __assign({ sx: { mb: 1 } }, { children: [_jsxs(Grid, __assign({ container: true, direction: "row", justifyContent: "flex-start", alignItems: "center" }, { children: [_jsx(Grid, __assign({ item: true, xs: 12, sm: hasButtons ? 6 : 12, md: hasButtons ? 5 : 12, lg: hasButtons ? 4 : 12, xl: hasButtons ? 3 : 12 }, { children: _jsxs(Grid, __assign({ container: true, direction: "row", justifyContent: "flex-start", alignItems: "center" }, { children: [showBackButton && (_jsx(IconButton, __assign({ onClick: function () {
|
28
|
+
onBack ? onBack() : window.history.back();
|
29
|
+
} }, { children: _jsx(ArrowBackIcon, { fontSize: "small" }, void 0) }), void 0)), _jsx(Typography, __assign({ align: "left", variant: isLessThanSm ? "h6" : "h3", sx: { fontWeight: 600 } }, { children: title }), void 0)] }), void 0) }), void 0), hasButtons ? (_jsx(Grid, __assign({ item: true, xs: 12, sm: 6, md: 7, lg: 8, xl: 9 }, { children: _jsx(HeaderButtons, { buttons: buttons }, void 0) }), void 0)) : (_jsx(_Fragment, {}, void 0))] }), void 0), _jsx(Grid, __assign({ container: true, direction: "row" }, { children: _jsx(Grid, __assign({ item: true, xs: 12, sx: { mt: 1 } }, { children: _jsx(HeaderLine, { color: color }, void 0) }), void 0) }), void 0), subtitle && (_jsx(Grid, __assign({ container: true, direction: "row" }, { children: _jsx(Grid, __assign({ item: true, xs: 12, sx: { mt: 1 } }, { children: typeof subtitle === "string" ? (_jsx(Typography, { children: subtitle }, void 0)) : (cloneElement(subtitle)) }), void 0) }), void 0)), bottomEl && (_jsx(Grid, __assign({ container: true, direction: "row" }, { children: _jsx(Grid, __assign({ item: true, xs: 12, sx: { mt: 1 } }, { children: cloneElement(bottomEl) }), void 0) }), void 0))] }), void 0));
|
30
|
+
}
|
31
|
+
export default HeaderBar;
|
@@ -0,0 +1,43 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
13
|
+
import Fab from "@mui/material/Fab";
|
14
|
+
import Grid from "@mui/material/Grid";
|
15
|
+
import Button from "@mui/material/Button";
|
16
|
+
import useMediaQuery from "@mui/material/useMediaQuery";
|
17
|
+
import useTheme from "@mui/material/styles/useTheme";
|
18
|
+
import MenuButtonGroup from "../MenuButtonGroup";
|
19
|
+
import { HeaderButtonCategory } from "./types";
|
20
|
+
function HeaderButtons(props) {
|
21
|
+
var buttons = props.buttons;
|
22
|
+
var theme = useTheme();
|
23
|
+
var isLessThanSm = useMediaQuery(theme.breakpoints.down("sm"));
|
24
|
+
return (_jsx(Grid, __assign({ container: true, spacing: 1, direction: "row", justifyContent: "flex-end", alignItems: "center" }, { children: buttons.map(function (button) {
|
25
|
+
switch (button.type) {
|
26
|
+
case HeaderButtonCategory.TextButton: {
|
27
|
+
var _a = button.variant, variant = _a === void 0 ? "contained" : _a, text = button.text, onClick = button.onClick, color = button.color, size = button.size, startIcon = button.startIcon, endIcon = button.endIcon, disabled = button.disabled;
|
28
|
+
return (_jsx(Grid, __assign({ item: true, xs: isLessThanSm ? 12 : undefined, style: { textAlign: "end" } }, { children: _jsx(Button, __assign({ fullWidth: isLessThanSm, variant: variant, onClick: onClick, color: color, size: isLessThanSm ? "small" : size, startIcon: startIcon, endIcon: endIcon, disabled: disabled }, { children: text }), void 0) }), text));
|
29
|
+
}
|
30
|
+
case HeaderButtonCategory.IconButton: {
|
31
|
+
var title = button.title, onClick = button.onClick, color = button.color, _b = button.size, size = _b === void 0 ? "medium" : _b, icon = button.icon;
|
32
|
+
return (_jsx(Grid, __assign({ item: true, style: { textAlign: "end" } }, { children: _jsx(Fab, __assign({ onClick: onClick, color: color, title: title, size: isLessThanSm ? "small" : size }, { children: icon }), void 0) }), title));
|
33
|
+
}
|
34
|
+
case HeaderButtonCategory.MenuButton: {
|
35
|
+
var btns = button.buttons, buttonText = button.buttonText, disabled = button.disabled, variant = button.variant, size = button.size;
|
36
|
+
return (_jsx(Grid, __assign({ item: true, xs: isLessThanSm ? 12 : undefined, style: { textAlign: "end" } }, { children: _jsx(MenuButtonGroup, { size: isLessThanSm ? "small" : size, variant: variant, buttons: btns, buttonText: buttonText, disabled: disabled }, void 0) }), buttonText));
|
37
|
+
}
|
38
|
+
default:
|
39
|
+
return _jsx(_Fragment, {}, void 0);
|
40
|
+
}
|
41
|
+
}) }), void 0));
|
42
|
+
}
|
43
|
+
export default HeaderButtons;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import Divider from "@mui/material/Divider";
|
3
|
+
import useTheme from "@mui/material/styles/useTheme";
|
4
|
+
function HeaderLine(props) {
|
5
|
+
var color = props.color;
|
6
|
+
var theme = useTheme();
|
7
|
+
return (_jsx(Divider, { sx: {
|
8
|
+
height: "3px",
|
9
|
+
backgroundColor: color || theme.palette.primary.main,
|
10
|
+
} }, void 0));
|
11
|
+
}
|
12
|
+
export default HeaderLine;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { ReactElement } from "react";
|
2
|
+
import { SxProps } from "@mui/material/styles";
|
3
|
+
import { HeaderBarProps } from "./HeaderBar";
|
4
|
+
interface HeaderProviderProps {
|
5
|
+
sx?: SxProps;
|
6
|
+
children: ReactElement;
|
7
|
+
}
|
8
|
+
interface HeaderContextProps {
|
9
|
+
onInit: (props: HeaderBarProps) => void;
|
10
|
+
onShow: () => void;
|
11
|
+
onHide: () => void;
|
12
|
+
}
|
13
|
+
export declare function HeaderProvider(props: HeaderProviderProps): JSX.Element;
|
14
|
+
export declare function useHeaderBar(): HeaderContextProps;
|
15
|
+
export { default } from "./HeaderBar";
|
16
|
+
export { default as HeaderButtons } from "./HeaderButtons";
|
17
|
+
export { default as HeaderLine } from "./HeaderLine";
|
18
|
+
export * from "./HeaderBar";
|
19
|
+
export * from "./HeaderButtons";
|
20
|
+
export * from "./HeaderLine";
|
21
|
+
export * from "./types";
|
@@ -0,0 +1,57 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
13
|
+
import { cloneElement, createContext, useContext, useState, useCallback, } from "react";
|
14
|
+
import Grid from "@mui/material/Grid";
|
15
|
+
import HeaderBar from "./HeaderBar";
|
16
|
+
var HeaderContext = createContext({
|
17
|
+
onInit: function () { },
|
18
|
+
onShow: function () { },
|
19
|
+
onHide: function () { },
|
20
|
+
});
|
21
|
+
export function HeaderProvider(props) {
|
22
|
+
var children = props.children, _a = props.sx, sx = _a === void 0 ? {} : _a;
|
23
|
+
var _b = useState(false), visible = _b[0], setVisible = _b[1];
|
24
|
+
var _c = useState({ title: "" }), headerProps = _c[0], setHeaderProps = _c[1];
|
25
|
+
var _d = useState(0), height = _d[0], setHeight = _d[1];
|
26
|
+
var onInit = useCallback(function (args) {
|
27
|
+
setHeaderProps(args);
|
28
|
+
}, []);
|
29
|
+
var onShow = useCallback(function () {
|
30
|
+
setVisible(true);
|
31
|
+
}, []);
|
32
|
+
var onHide = useCallback(function () {
|
33
|
+
setVisible(false);
|
34
|
+
}, []);
|
35
|
+
var measureRef = useCallback(function (node) {
|
36
|
+
if (node && headerProps) {
|
37
|
+
setHeight(node.getBoundingClientRect().height);
|
38
|
+
}
|
39
|
+
}, [headerProps]);
|
40
|
+
return (_jsx(HeaderContext.Provider, __assign({ value: { onInit: onInit, onHide: onHide, onShow: onShow } }, { children: _jsxs(_Fragment, { children: [visible ? (_jsx(Grid, __assign({ container: true, direction: "row", sx: __assign({}, sx), ref: measureRef }, { children: _jsx(Grid, __assign({ item: true, xs: 12 }, { children: _jsx(HeaderBar, __assign({}, headerProps), void 0) }), void 0) }), void 0)) : (_jsx(_Fragment, {}, void 0)), cloneElement(children, {
|
41
|
+
sx: {
|
42
|
+
p: 3,
|
43
|
+
py: 1,
|
44
|
+
pt: height ? "calc(".concat(height, "px)") : undefined,
|
45
|
+
},
|
46
|
+
})] }, void 0) }), void 0));
|
47
|
+
}
|
48
|
+
export function useHeaderBar() {
|
49
|
+
return useContext(HeaderContext);
|
50
|
+
}
|
51
|
+
export { default } from "./HeaderBar";
|
52
|
+
export { default as HeaderButtons } from "./HeaderButtons";
|
53
|
+
export { default as HeaderLine } from "./HeaderLine";
|
54
|
+
export * from "./HeaderBar";
|
55
|
+
export * from "./HeaderButtons";
|
56
|
+
export * from "./HeaderLine";
|
57
|
+
export * from "./types";
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import { ReactElement } from "react";
|
2
|
+
import { ButtonProps } from "@mui/material/Button";
|
3
|
+
import { IconButtonProps } from "@mui/material/IconButton";
|
4
|
+
import { MenuButtonGroupProps } from "../MenuButtonGroup";
|
5
|
+
export declare enum HeaderButtonCategory {
|
6
|
+
IconButton = "icon",
|
7
|
+
TextButton = "text",
|
8
|
+
MenuButton = "menu"
|
9
|
+
}
|
10
|
+
interface HeaderTextButtonProps {
|
11
|
+
text: string;
|
12
|
+
type: HeaderButtonCategory.TextButton;
|
13
|
+
variant?: ButtonProps["variant"];
|
14
|
+
color?: ButtonProps["color"];
|
15
|
+
size?: ButtonProps["size"];
|
16
|
+
startIcon?: ButtonProps["startIcon"];
|
17
|
+
endIcon?: ButtonProps["endIcon"];
|
18
|
+
disabled?: boolean;
|
19
|
+
onClick: ButtonProps["onClick"];
|
20
|
+
}
|
21
|
+
interface HeaderIconButtonProps {
|
22
|
+
title: string;
|
23
|
+
icon: ReactElement;
|
24
|
+
type: HeaderButtonCategory.IconButton;
|
25
|
+
color?: IconButtonProps["color"];
|
26
|
+
size?: IconButtonProps["size"];
|
27
|
+
onClick: IconButtonProps["onClick"];
|
28
|
+
}
|
29
|
+
declare type HeaderMenuButtonProps = {
|
30
|
+
type: HeaderButtonCategory.MenuButton;
|
31
|
+
} & MenuButtonGroupProps;
|
32
|
+
export declare type HeaderButtonProps = HeaderTextButtonProps | HeaderIconButtonProps | HeaderMenuButtonProps;
|
33
|
+
export {};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
13
|
+
import Radio from "@mui/material/Radio";
|
14
|
+
import Tooltip from "@mui/material/Tooltip";
|
15
|
+
import FormLabel from "@mui/material/FormLabel";
|
16
|
+
import Typography from "@mui/material/Typography";
|
17
|
+
import RadioGroup from "@mui/material/RadioGroup";
|
18
|
+
import FormControl from "@mui/material/FormControl";
|
19
|
+
import FormControlLabel from "@mui/material/FormControlLabel";
|
20
|
+
function FormRadioGroup(props) {
|
21
|
+
var formLabel = props.formLabel, color = props.color, value = props.value, options = props.options, disabled = props.disabled, tooltip = props.tooltip, onChange = props.onChange;
|
22
|
+
return (_jsxs(FormControl, __assign({ sx: { mt: 3 }, component: "fieldset", disabled: disabled }, { children: [tooltip ? (_jsx(Tooltip, __assign({ title: tooltip, placement: "right", disableTouchListener: true }, { children: _jsx(FormLabel, __assign({ sx: { lineHeight: "24px" }, component: "legend" }, { children: formLabel }), void 0) }), void 0)) : (_jsx(FormLabel, __assign({ sx: { lineHeight: "24px" }, component: "legend" }, { children: formLabel }), void 0)), _jsx(RadioGroup, __assign({ value: value, onChange: function (event) {
|
23
|
+
onChange(event.target.value);
|
24
|
+
}, sx: {
|
25
|
+
my: 1,
|
26
|
+
"& label span:first-child span:first-child": {
|
27
|
+
margin: "-5px 0 -5px 0",
|
28
|
+
},
|
29
|
+
} }, { children: options.map(function (opt) {
|
30
|
+
var _a;
|
31
|
+
return (_jsx(FormControlLabel, { value: opt.value, control: _jsx(Radio, { color: color || "primary" }, void 0), label: _jsx(Typography, { children: opt.label }, void 0), disabled: ((_a = opt.disabled) !== null && _a !== void 0 ? _a : false) || disabled }, String(opt.value)));
|
32
|
+
}) }), void 0)] }), void 0));
|
33
|
+
}
|
34
|
+
export default FormRadioGroup;
|
35
|
+
export * from "./types";
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { RadioProps } from "@mui/material/Radio";
|
2
|
+
interface IRadioOption {
|
3
|
+
label: string;
|
4
|
+
value: string | boolean | number;
|
5
|
+
disabled?: boolean;
|
6
|
+
}
|
7
|
+
export interface FormRadioGroupProps {
|
8
|
+
color?: RadioProps["color"];
|
9
|
+
formLabel: string;
|
10
|
+
options: Array<IRadioOption>;
|
11
|
+
value: string | boolean | number;
|
12
|
+
disabled?: boolean;
|
13
|
+
tooltip?: string;
|
14
|
+
onChange: (value: string | boolean | number) => void;
|
15
|
+
}
|
16
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|