@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.
Files changed (90) hide show
  1. package/.gitignore +15 -0
  2. package/AlertDialog/index.d.ts +5 -0
  3. package/AlertDialog/index.js +47 -0
  4. package/AlertDialog/types.d.ts +11 -0
  5. package/AlertDialog/types.js +1 -0
  6. package/BasicModal/Content.d.ts +4 -0
  7. package/BasicModal/Content.js +37 -0
  8. package/BasicModal/index.d.ts +5 -0
  9. package/BasicModal/index.js +54 -0
  10. package/BasicModal/types.d.ts +22 -0
  11. package/BasicModal/types.js +1 -0
  12. package/DigitInput/index.d.ts +7 -0
  13. package/DigitInput/index.js +35 -0
  14. package/DigitInput/types.d.ts +9 -0
  15. package/DigitInput/types.js +1 -0
  16. package/DigitInput/useInteractions.d.ts +11 -0
  17. package/DigitInput/useInteractions.js +24 -0
  18. package/DynamicHeaderBar/HeaderBar.d.ts +13 -0
  19. package/DynamicHeaderBar/HeaderBar.js +31 -0
  20. package/DynamicHeaderBar/HeaderButtons.d.ts +7 -0
  21. package/DynamicHeaderBar/HeaderButtons.js +43 -0
  22. package/DynamicHeaderBar/HeaderLine.d.ts +6 -0
  23. package/DynamicHeaderBar/HeaderLine.js +12 -0
  24. package/DynamicHeaderBar/index.d.ts +21 -0
  25. package/DynamicHeaderBar/index.js +57 -0
  26. package/DynamicHeaderBar/types.d.ts +33 -0
  27. package/DynamicHeaderBar/types.js +6 -0
  28. package/FormRadioGroup/index.d.ts +5 -0
  29. package/FormRadioGroup/index.js +35 -0
  30. package/FormRadioGroup/types.d.ts +16 -0
  31. package/FormRadioGroup/types.js +1 -0
  32. package/FormSelector/MultipleSelector.d.ts +4 -0
  33. package/FormSelector/MultipleSelector.js +34 -0
  34. package/FormSelector/SimpleSelector.d.ts +4 -0
  35. package/FormSelector/SimpleSelector.js +34 -0
  36. package/FormSelector/index.d.ts +3 -0
  37. package/FormSelector/index.js +3 -0
  38. package/FormSelector/types.d.ts +27 -0
  39. package/FormSelector/types.js +1 -0
  40. package/FormSelector/useInteractions.d.ts +6 -0
  41. package/FormSelector/useInteractions.js +12 -0
  42. package/HelpCaption/index.d.ts +10 -0
  43. package/HelpCaption/index.js +34 -0
  44. package/HelpCaption/useInteractions.d.ts +6 -0
  45. package/HelpCaption/useInteractions.js +12 -0
  46. package/LICENSE +21 -0
  47. package/LoadingModal/index.d.ts +5 -0
  48. package/LoadingModal/index.js +27 -0
  49. package/LoadingModal/types.d.ts +8 -0
  50. package/LoadingModal/types.js +1 -0
  51. package/MenuButtonGroup/MenuItem.d.ts +12 -0
  52. package/MenuButtonGroup/MenuItem.js +21 -0
  53. package/MenuButtonGroup/index.d.ts +13 -0
  54. package/MenuButtonGroup/index.js +100 -0
  55. package/NumberInput/index.d.ts +13 -0
  56. package/NumberInput/index.js +38 -0
  57. package/NumberInput/useInteractions.d.ts +17 -0
  58. package/NumberInput/useInteractions.js +54 -0
  59. package/PasswordInput/ConfirmPassword.d.ts +10 -0
  60. package/PasswordInput/ConfirmPassword.js +38 -0
  61. package/PasswordInput/Password.d.ts +18 -0
  62. package/PasswordInput/Password.js +68 -0
  63. package/PasswordInput/index.d.ts +4 -0
  64. package/PasswordInput/index.js +4 -0
  65. package/PhoneNumberInput/index.d.ts +11 -0
  66. package/PhoneNumberInput/index.js +44 -0
  67. package/PhoneNumberInput/useInteractions.d.ts +9 -0
  68. package/PhoneNumberInput/useInteractions.js +30 -0
  69. package/README.md +499 -0
  70. package/TabGroup/index.d.ts +5 -0
  71. package/TabGroup/index.js +46 -0
  72. package/TabGroup/types.d.ts +11 -0
  73. package/TabGroup/types.js +1 -0
  74. package/TextInput/index.d.ts +12 -0
  75. package/TextInput/index.js +35 -0
  76. package/TextInput/useInteractions.d.ts +6 -0
  77. package/TextInput/useInteractions.js +12 -0
  78. package/ToastPrompt/Logics.d.ts +12 -0
  79. package/ToastPrompt/Logics.js +37 -0
  80. package/ToastPrompt/Presentation.d.ts +16 -0
  81. package/ToastPrompt/Presentation.js +80 -0
  82. package/ToastPrompt/index.d.ts +13 -0
  83. package/ToastPrompt/index.js +29 -0
  84. package/VideoPlayerModal/index.d.ts +6 -0
  85. package/VideoPlayerModal/index.js +42 -0
  86. package/VideoPlayerModal/types.d.ts +8 -0
  87. package/VideoPlayerModal/types.js +1 -0
  88. package/index.d.ts +29 -0
  89. package/index.js +29 -0
  90. package/package.json +74 -0
package/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ node_modules
2
+ package-lock.json
3
+ yarn.lock
4
+ .vscode
5
+ .DS_Store
6
+ /coverage
7
+ /.pnp
8
+ .pnp.js
9
+ /build
10
+ npm-debug.log*
11
+ yarn-debug.log*
12
+ yarn-error.log*
13
+ *.js
14
+ *.d.ts
15
+ dist
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { AlertDialogProps } from "./types";
3
+ declare const AlertDialog: (props: AlertDialogProps) => JSX.Element;
4
+ export default AlertDialog;
5
+ export * from "./types";
@@ -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,4 @@
1
+ /// <reference types="react" />
2
+ import { BasicModalContentProps } from "./types";
3
+ declare function Content(props: BasicModalContentProps): JSX.Element;
4
+ export default Content;
@@ -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,5 @@
1
+ /// <reference types="react" />
2
+ import { BasicModalProps } from "./types";
3
+ declare function BasicModal(props: BasicModalProps): JSX.Element;
4
+ export default BasicModal;
5
+ export * from "./types";
@@ -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,9 @@
1
+ import { InputProps } from "@mui/material/Input";
2
+ export interface DigitInputProps {
3
+ onChange: (value: string) => void;
4
+ value: string;
5
+ tooltip?: string;
6
+ maxLength?: number;
7
+ minLength?: number;
8
+ endAdornment?: InputProps["endAdornment"];
9
+ }
@@ -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,7 @@
1
+ /// <reference types="react" />
2
+ import { HeaderButtonProps } from "./types";
3
+ export interface HeaderButtonsProps {
4
+ buttons: Array<HeaderButtonProps>;
5
+ }
6
+ declare function HeaderButtons(props: HeaderButtonsProps): JSX.Element;
7
+ export default HeaderButtons;
@@ -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,6 @@
1
+ import { CSSProperties } from "react";
2
+ interface HeaderLineProps {
3
+ color?: CSSProperties["color"];
4
+ }
5
+ declare function HeaderLine(props: HeaderLineProps): JSX.Element;
6
+ export default HeaderLine;
@@ -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,6 @@
1
+ export var HeaderButtonCategory;
2
+ (function (HeaderButtonCategory) {
3
+ HeaderButtonCategory["IconButton"] = "icon";
4
+ HeaderButtonCategory["TextButton"] = "text";
5
+ HeaderButtonCategory["MenuButton"] = "menu";
6
+ })(HeaderButtonCategory || (HeaderButtonCategory = {}));
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { FormRadioGroupProps } from "./types";
3
+ declare function FormRadioGroup(props: FormRadioGroupProps): JSX.Element;
4
+ export default FormRadioGroup;
5
+ 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
+ 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 {};
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { MultipleSelectorProps } from "./types";
3
+ declare function MultipleSelector(props: MultipleSelectorProps): JSX.Element;
4
+ export default MultipleSelector;