@symply.io/basic-components 1.4.0-alpha.6 → 1.4.0-alpha.8

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.
@@ -0,0 +1,4 @@
1
+ import type { ConfirmPasswordInputProps } from "./types";
2
+ declare function ConfirmPasswordInput(props: ConfirmPasswordInputProps): JSX.Element;
3
+ export default ConfirmPasswordInput;
4
+ export type { ConfirmPasswordInputProps };
@@ -25,7 +25,7 @@ import { useMemo } from "react";
25
25
  import TextField from "@mui/material/TextField";
26
26
  import ThemeProvider from "@mui/material/styles/ThemeProvider";
27
27
  import useCustomTheme from "../useCustomTheme";
28
- function ConfirmPassword(props) {
28
+ function ConfirmPasswordInput(props) {
29
29
  var password = props.password, _a = props.helperText, helperText = _a === void 0 ? "Passwords do not match" : _a, value = props.value, _b = props.label, label = _b === void 0 ? "Confirm Password" : _b, _c = props.name, name = _c === void 0 ? "confirmPassword" : _c, _d = props.variant, variant = _d === void 0 ? "outlined" : _d, _e = props.margin, margin = _e === void 0 ? "dense" : _e, disabled = props.disabled, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, onChange = props.onChange, rest = __rest(props, ["password", "helperText", "value", "label", "name", "variant", "margin", "disabled", "primaryColor", "secondaryColor", "onChange"]);
30
30
  var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
31
31
  var isMatched = useMemo(function () {
@@ -39,4 +39,4 @@ function ConfirmPassword(props) {
39
39
  onChange(event.target.value);
40
40
  }, fullWidth: true, required: true }, rest)) })));
41
41
  }
42
- export default ConfirmPassword;
42
+ export default ConfirmPasswordInput;
@@ -0,0 +1,9 @@
1
+ import type { CSSProperties } from "react";
2
+ import type { TextFieldProps } from "@mui/material/TextField";
3
+ export interface ConfirmPasswordInputProps extends Omit<TextFieldProps, "onChange"> {
4
+ password: string;
5
+ value: string;
6
+ primaryColor?: CSSProperties["color"];
7
+ secondaryColor?: CSSProperties["color"];
8
+ onChange: (value: string) => void;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,6 @@
1
- import useTable from "./useTable";
1
+ import useDataTable from "./useTable";
2
2
  import { DataTableProps, KvProps } from "./types";
3
3
  declare function DataTable<RowProps extends KvProps, ExtendedProps extends KvProps>(props: DataTableProps<RowProps, ExtendedProps>): JSX.Element;
4
4
  export default DataTable;
5
5
  export * from "./types";
6
- export { useTable };
6
+ export { useDataTable };
@@ -15,7 +15,7 @@ import Table from "@mui/material/Table";
15
15
  import TableContainer from "@mui/material/TableContainer";
16
16
  import ThemeProvider from "@mui/material/styles/ThemeProvider";
17
17
  import useCustomTheme from "../useCustomTheme";
18
- import useTable from "./useTable";
18
+ import useDataTable from "./useTable";
19
19
  import TableBody from "./TableBody";
20
20
  import TableHeader from "./TableHeader";
21
21
  import TableFooter from "./TableFooter";
@@ -59,4 +59,4 @@ function DataTable(props) {
59
59
  }
60
60
  export default DataTable;
61
61
  export * from "./types";
62
- export { useTable };
62
+ export { useDataTable };
@@ -1,4 +1,4 @@
1
- import { DigitInputProps } from "./types";
1
+ import type { DigitInputProps } from "./types";
2
2
  declare function DigitInput(props: DigitInputProps): JSX.Element;
3
3
  export default DigitInput;
4
- export * from "./types";
4
+ export type { DigitInputProps };
@@ -35,4 +35,3 @@ function DigitInput(props) {
35
35
  }, onChange: handleChange }, rest)) })) })));
36
36
  }
37
37
  export default DigitInput;
38
- export * from "./types";
@@ -1,6 +1,6 @@
1
- import { CSSProperties } from "react";
2
- import { InputProps } from "@mui/material/Input";
3
- import { TextFieldProps } from "@mui/material/TextField";
1
+ import type { CSSProperties } from "react";
2
+ import type { InputProps } from "@mui/material/Input";
3
+ import type { TextFieldProps } from "@mui/material/TextField";
4
4
  export interface DigitInputProps extends Omit<TextFieldProps, "onChange"> {
5
5
  onChange: (value: string) => void;
6
6
  value: string;
@@ -1,15 +1,3 @@
1
- import { ReactElement, CSSProperties } from "react";
2
- import { HeaderButtonProps } from "./types";
3
- export interface HeaderBarProps {
4
- title: string | ReactElement;
5
- color?: CSSProperties["color"];
6
- subtitle?: string | ReactElement;
7
- bottomEl?: ReactElement;
8
- buttons?: Array<HeaderButtonProps>;
9
- showBackButton?: boolean;
10
- primaryColor?: CSSProperties["color"];
11
- secondaryColor?: CSSProperties["color"];
12
- onBack?: () => void;
13
- }
1
+ import type { HeaderBarProps } from "./types";
14
2
  declare function HeaderBar(props: HeaderBarProps): JSX.Element;
15
3
  export default HeaderBar;
@@ -1,6 +1,6 @@
1
1
  import { CSSProperties } from "react";
2
2
  import { HeaderButtonProps } from "./types";
3
- export interface HeaderButtonsProps {
3
+ interface HeaderButtonsProps {
4
4
  buttons: Array<HeaderButtonProps>;
5
5
  primaryColor?: CSSProperties["color"];
6
6
  secondaryColor?: CSSProperties["color"];
@@ -1,8 +1,3 @@
1
- import { CSSProperties } from "react";
2
- interface HeaderLineProps {
3
- color?: CSSProperties["color"];
4
- primaryColor?: CSSProperties["color"];
5
- secondaryColor?: CSSProperties["color"];
6
- }
1
+ import type { HeaderLineProps } from "./types";
7
2
  declare function HeaderLine(props: HeaderLineProps): JSX.Element;
8
3
  export default HeaderLine;
@@ -1,23 +1,7 @@
1
- import { ReactElement, CSSProperties } from "react";
2
- import { SxProps } from "@mui/material/styles";
3
- import { HeaderBarProps } from "./HeaderBar";
4
- interface HeaderProviderProps {
5
- sx?: SxProps;
6
- children: ReactElement;
7
- primaryColor?: CSSProperties["color"];
8
- secondaryColor?: CSSProperties["color"];
9
- }
10
- interface HeaderContextProps {
11
- onInit: (props: HeaderBarProps) => void;
12
- onShow: () => void;
13
- onHide: () => void;
14
- }
1
+ import type { HeaderContextProps, HeaderProviderProps } from "./types";
15
2
  export declare function HeaderProvider(props: HeaderProviderProps): JSX.Element;
16
- export declare function useHeaderBar(): HeaderContextProps;
17
- export { default } from "./HeaderBar";
3
+ export default function useHeaderBar(): HeaderContextProps;
4
+ export { default as HeaderBar } from "./HeaderBar";
18
5
  export { default as HeaderButtons } from "./HeaderButtons";
19
6
  export { default as HeaderLine } from "./HeaderLine";
20
- export * from "./HeaderBar";
21
- export * from "./HeaderButtons";
22
- export * from "./HeaderLine";
23
7
  export * from "./types";
@@ -45,13 +45,10 @@ export function HeaderProvider(props) {
45
45
  }
46
46
  })] }) })));
47
47
  }
48
- export function useHeaderBar() {
48
+ export default function useHeaderBar() {
49
49
  return useContext(HeaderContext);
50
50
  }
51
- export { default } from "./HeaderBar";
51
+ export { default as HeaderBar } from "./HeaderBar";
52
52
  export { default as HeaderButtons } from "./HeaderButtons";
53
53
  export { default as HeaderLine } from "./HeaderLine";
54
- export * from "./HeaderBar";
55
- export * from "./HeaderButtons";
56
- export * from "./HeaderLine";
57
54
  export * from "./types";
@@ -1,8 +1,9 @@
1
- import { ReactElement } from "react";
2
- import { ButtonProps } from "@mui/material/Button";
3
- import { IconButtonProps } from "@mui/material/IconButton";
4
- import { FabProps } from "@mui/material/Fab";
5
- import { MenuButtonGroupProps } from "../MenuButtonGroup";
1
+ import type { ReactElement, CSSProperties } from "react";
2
+ import type { ButtonProps } from "@mui/material/Button";
3
+ import type { IconButtonProps } from "@mui/material/IconButton";
4
+ import type { FabProps } from "@mui/material/Fab";
5
+ import type { SxProps } from "@mui/material/styles";
6
+ import type { MenuButtonGroupProps } from "../MenuButtonGroup";
6
7
  export declare enum HeaderButtonCategory {
7
8
  IconButton = "icon",
8
9
  TextButton = "text",
@@ -43,4 +44,31 @@ declare type HeaderMenuButtonProps = {
43
44
  type: HeaderButtonCategory.MenuButton;
44
45
  } & MenuButtonGroupProps;
45
46
  export declare type HeaderButtonProps = HeaderFabButtonProps | HeaderTextButtonProps | HeaderIconButtonProps | HeaderMenuButtonProps;
47
+ export interface HeaderLineProps {
48
+ color?: CSSProperties["color"];
49
+ primaryColor?: CSSProperties["color"];
50
+ secondaryColor?: CSSProperties["color"];
51
+ }
52
+ export interface HeaderBarProps {
53
+ title: string | ReactElement;
54
+ color?: CSSProperties["color"];
55
+ subtitle?: string | ReactElement;
56
+ bottomEl?: ReactElement;
57
+ buttons?: Array<HeaderButtonProps>;
58
+ showBackButton?: boolean;
59
+ primaryColor?: CSSProperties["color"];
60
+ secondaryColor?: CSSProperties["color"];
61
+ onBack?: () => void;
62
+ }
63
+ export interface HeaderProviderProps {
64
+ sx?: SxProps;
65
+ children: ReactElement;
66
+ primaryColor?: CSSProperties["color"];
67
+ secondaryColor?: CSSProperties["color"];
68
+ }
69
+ export interface HeaderContextProps {
70
+ onInit: (props: HeaderBarProps) => void;
71
+ onShow: () => void;
72
+ onHide: () => void;
73
+ }
46
74
  export {};
@@ -1,6 +1,6 @@
1
- import { FeinInputProps } from "./types";
1
+ import type { FeinInputProps } from "./types";
2
2
  export declare function FeinInputFormat(str: string): string;
3
3
  export declare function onValidateFein(feinString: string): boolean;
4
4
  declare function FeinInput(props: FeinInputProps): JSX.Element;
5
5
  export default FeinInput;
6
- export * from "./types";
6
+ export type { FeinInputProps };
@@ -72,4 +72,3 @@ function FeinInput(props) {
72
72
  } }, rest)) })));
73
73
  }
74
74
  export default FeinInput;
75
- export * from "./types";
@@ -1,5 +1,5 @@
1
- import { CSSProperties } from "react";
2
- import { TextFieldProps } from "@mui/material/TextField";
1
+ import type { CSSProperties } from "react";
2
+ import type { TextFieldProps } from "@mui/material/TextField";
3
3
  export interface FeinInputProps extends Omit<TextFieldProps, "onChange"> {
4
4
  onChange: (value: string) => void;
5
5
  onValidate?: (value?: string) => boolean;
@@ -1,4 +1,5 @@
1
- export { default } from "./Modal";
2
- export { default as useLoadingModal } from "./useLoadingModal";
3
- export * from "./useLoadingModal";
1
+ import LoadingModal from "./Modal";
2
+ import useLoadingModal, { LoadingModalProvider } from "./useLoadingModal";
3
+ export default LoadingModal;
4
+ export { useLoadingModal, LoadingModalProvider };
4
5
  export * from "./types";
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- export { default } from "./Modal";
3
- export { default as useLoadingModal } from "./useLoadingModal";
4
- export * from "./useLoadingModal";
2
+ import LoadingModal from "./Modal";
3
+ import useLoadingModal, { LoadingModalProvider } from "./useLoadingModal";
4
+ export default LoadingModal;
5
+ export { useLoadingModal, LoadingModalProvider };
5
6
  export * from "./types";
@@ -1,4 +1,6 @@
1
- export { default as Password } from "./Password";
2
- export * from "./Password";
3
- export { default as ConfirmPassword } from "./ConfirmPassword";
4
- export * from "./ConfirmPassword";
1
+ import type { PasswordInputProps, PasswordStrategyProps } from "./types";
2
+ declare function onValidatePassword(password: string): boolean;
3
+ declare function PasswordInput(props: PasswordInputProps): JSX.Element;
4
+ export default PasswordInput;
5
+ export { onValidatePassword };
6
+ export type { PasswordInputProps, PasswordStrategyProps };
@@ -1,4 +1,79 @@
1
- export { default as Password } from "./Password";
2
- export * from "./Password";
3
- export { default as ConfirmPassword } from "./ConfirmPassword";
4
- export * from "./ConfirmPassword";
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, Fragment as _Fragment } from "react/jsx-runtime";
24
+ import { useMemo } from "react";
25
+ import TextField from "@mui/material/TextField";
26
+ import Typography from "@mui/material/Typography";
27
+ import ThemeProvider from "@mui/material/styles/ThemeProvider";
28
+ import useCustomTheme from "../useCustomTheme";
29
+ function onValidatePassword(password) {
30
+ var reg = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])([!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~a-zA-z0-9]{8,})$/;
31
+ return reg.test(password);
32
+ }
33
+ function PasswordInput(props) {
34
+ var _a = props.strategies, strategies = _a === void 0 ? {
35
+ uppercaseLetter: { label: "1 Uppercase Letter", regex: /[A-Z]+/ },
36
+ lowercaseLetter: { label: "1 Lowercase Letter", regex: /[a-z]+/ },
37
+ specialCharacter: {
38
+ label: "1 Special Character",
39
+ regex: /[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/
40
+ },
41
+ number: { label: "1 Number", regex: /\d+/ },
42
+ minimum8: { label: "Minimum 8 characters", regex: /.{8,}/ }
43
+ } : _a, _b = props.successColor, successColor = _b === void 0 ? "green" : _b, value = props.value, error = props.error, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, onValidate = props.onValidate, onChange = props.onChange, rest = __rest(props, ["strategies", "successColor", "value", "error", "primaryColor", "secondaryColor", "onValidate", "onChange"]);
44
+ var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
45
+ var isValidPassword = useMemo(function () {
46
+ if ((value === null || value === void 0 ? void 0 : value.length) > 0) {
47
+ return onValidate ? onValidate(value) : onValidatePassword(value);
48
+ }
49
+ return true;
50
+ }, [value, onValidate, onValidatePassword]);
51
+ var helperTextColor = useMemo(function () {
52
+ var textColors = Object.keys(strategies).reduce(function (temp, key) {
53
+ var regex = strategies[key].regex;
54
+ if (value === "") {
55
+ temp[key] = undefined;
56
+ }
57
+ else if (regex.test(value)) {
58
+ temp[key] = successColor;
59
+ }
60
+ else {
61
+ temp[key] = "red";
62
+ }
63
+ return temp;
64
+ }, {});
65
+ return textColors;
66
+ }, [value, strategies]);
67
+ var helperText = useMemo(function () {
68
+ return (_jsx(_Fragment, { children: Object.keys(strategies).map(function (key) {
69
+ var label = strategies[key].label;
70
+ return (_jsx(Typography, __assign({ component: "li", variant: "caption", style: { color: helperTextColor[key] } }, { children: label }), key));
71
+ }) }));
72
+ }, [helperTextColor, strategies]);
73
+ return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(TextField, __assign({ error: !isValidPassword || error, helperText: helperText, type: "password", label: "Password", size: "small", margin: "dense", value: value, onChange: function (event) {
74
+ event.preventDefault();
75
+ onChange(event.target.value);
76
+ }, fullWidth: true, required: true }, rest)) })));
77
+ }
78
+ export default PasswordInput;
79
+ export { onValidatePassword };
@@ -1,12 +1,12 @@
1
- import { CSSProperties } from "react";
2
- import { TextFieldProps } from "@mui/material/TextField";
1
+ import type { CSSProperties } from "react";
2
+ import type { TextFieldProps } from "@mui/material/TextField";
3
3
  export interface PasswordStrategyProps {
4
4
  [key: string]: {
5
5
  label: string;
6
6
  regex: RegExp;
7
7
  };
8
8
  }
9
- export interface PasswordProps extends Omit<TextFieldProps, "onChange"> {
9
+ export interface PasswordInputProps extends Omit<TextFieldProps, "onChange"> {
10
10
  strategies?: PasswordStrategyProps;
11
11
  value: string;
12
12
  successColor?: CSSProperties["color"];
@@ -15,6 +15,3 @@ export interface PasswordProps extends Omit<TextFieldProps, "onChange"> {
15
15
  onChange: (value: string) => void;
16
16
  onValidate?: (value: string) => boolean;
17
17
  }
18
- export declare function onValidatePassword(password: string): boolean;
19
- declare function Password(props: PasswordProps): JSX.Element;
20
- export default Password;
@@ -0,0 +1 @@
1
+ export {};
package/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from "./BasicModal";
5
5
  export * from "./BreadCrumbs";
6
6
  export * from "./CheckBox";
7
7
  export * from "./CheckBoxGroup";
8
+ export * from "./ConfirmPasswordInput";
8
9
  export * from "./Copyright";
9
10
  export * from "./DataTable";
10
11
  export * from "./DateInput";
@@ -34,6 +35,7 @@ export { default as BasicModal } from "./BasicModal";
34
35
  export { default as BreadCrumbs } from "./BreadCrumbs";
35
36
  export { default as CheckBox } from "./CheckBox";
36
37
  export { default as CheckBoxGroup } from "./CheckBoxGroup";
38
+ export { default as ConfirmPasswordInput } from "./ConfirmPasswordInput";
37
39
  export { default as Copyright } from "./Copyright";
38
40
  export { default as DataTable } from "./DataTable";
39
41
  export { default as DigitInput } from "./DigitInput";
@@ -45,6 +47,7 @@ export { default as HelpCaption } from "./HelpCaption";
45
47
  export { default as LoadingModal } from "./LoadingModal";
46
48
  export { default as MenuButtonGroup } from "./MenuButtonGroup";
47
49
  export { default as NumberInput } from "./NumberInput";
50
+ export { default as PasswordInput } from "./PasswordInput";
48
51
  export { default as PhoneNumberInput } from "./PhoneNumberInput";
49
52
  export { default as Sidebar } from "./Sidebar";
50
53
  export { default as SocialInput } from "./SocialInput";
package/index.js CHANGED
@@ -5,6 +5,7 @@ export * from "./BasicModal";
5
5
  export * from "./BreadCrumbs";
6
6
  export * from "./CheckBox";
7
7
  export * from "./CheckBoxGroup";
8
+ export * from "./ConfirmPasswordInput";
8
9
  export * from "./Copyright";
9
10
  export * from "./DataTable";
10
11
  export * from "./DateInput";
@@ -34,6 +35,7 @@ export { default as BasicModal } from "./BasicModal";
34
35
  export { default as BreadCrumbs } from "./BreadCrumbs";
35
36
  export { default as CheckBox } from "./CheckBox";
36
37
  export { default as CheckBoxGroup } from "./CheckBoxGroup";
38
+ export { default as ConfirmPasswordInput } from "./ConfirmPasswordInput";
37
39
  export { default as Copyright } from "./Copyright";
38
40
  export { default as DataTable } from "./DataTable";
39
41
  export { default as DigitInput } from "./DigitInput";
@@ -45,6 +47,7 @@ export { default as HelpCaption } from "./HelpCaption";
45
47
  export { default as LoadingModal } from "./LoadingModal";
46
48
  export { default as MenuButtonGroup } from "./MenuButtonGroup";
47
49
  export { default as NumberInput } from "./NumberInput";
50
+ export { default as PasswordInput } from "./PasswordInput";
48
51
  export { default as PhoneNumberInput } from "./PhoneNumberInput";
49
52
  export { default as Sidebar } from "./Sidebar";
50
53
  export { default as SocialInput } from "./SocialInput";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symply.io/basic-components",
3
- "version": "1.4.0-alpha.6",
3
+ "version": "1.4.0-alpha.8",
4
4
  "description": "Basic and reusable components for all frontend of Symply apps",
5
5
  "keywords": [
6
6
  "react",
@@ -1,11 +0,0 @@
1
- import { CSSProperties } from "react";
2
- import { TextFieldProps } from "@mui/material/TextField";
3
- export interface ConfirmPasswordProps extends Omit<TextFieldProps, "onChange"> {
4
- password: string;
5
- value: string;
6
- primaryColor?: CSSProperties["color"];
7
- secondaryColor?: CSSProperties["color"];
8
- onChange: (value: string) => void;
9
- }
10
- declare function ConfirmPassword(props: ConfirmPasswordProps): JSX.Element;
11
- export default ConfirmPassword;
@@ -1,78 +0,0 @@
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, Fragment as _Fragment } from "react/jsx-runtime";
24
- import { useMemo } from "react";
25
- import TextField from "@mui/material/TextField";
26
- import Typography from "@mui/material/Typography";
27
- import ThemeProvider from "@mui/material/styles/ThemeProvider";
28
- import useCustomTheme from "../useCustomTheme";
29
- export function onValidatePassword(password) {
30
- var reg = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])([!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~a-zA-z0-9]{8,})$/;
31
- return reg.test(password);
32
- }
33
- function Password(props) {
34
- var _a = props.strategies, strategies = _a === void 0 ? {
35
- uppercaseLetter: { label: "1 Uppercase Letter", regex: /[A-Z]+/ },
36
- lowercaseLetter: { label: "1 Lowercase Letter", regex: /[a-z]+/ },
37
- specialCharacter: {
38
- label: "1 Special Character",
39
- regex: /[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/
40
- },
41
- number: { label: "1 Number", regex: /\d+/ },
42
- minimum8: { label: "Minimum 8 characters", regex: /.{8,}/ }
43
- } : _a, _b = props.successColor, successColor = _b === void 0 ? "green" : _b, value = props.value, error = props.error, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, onValidate = props.onValidate, onChange = props.onChange, rest = __rest(props, ["strategies", "successColor", "value", "error", "primaryColor", "secondaryColor", "onValidate", "onChange"]);
44
- var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
45
- var isValidPassword = useMemo(function () {
46
- if ((value === null || value === void 0 ? void 0 : value.length) > 0) {
47
- return onValidate ? onValidate(value) : onValidatePassword(value);
48
- }
49
- return true;
50
- }, [value, onValidate, onValidatePassword]);
51
- var helperTextColor = useMemo(function () {
52
- var textColors = Object.keys(strategies).reduce(function (temp, key) {
53
- var regex = strategies[key].regex;
54
- if (value === "") {
55
- temp[key] = undefined;
56
- }
57
- else if (regex.test(value)) {
58
- temp[key] = successColor;
59
- }
60
- else {
61
- temp[key] = "red";
62
- }
63
- return temp;
64
- }, {});
65
- return textColors;
66
- }, [value, strategies]);
67
- var helperText = useMemo(function () {
68
- return (_jsx(_Fragment, { children: Object.keys(strategies).map(function (key) {
69
- var label = strategies[key].label;
70
- return (_jsx(Typography, __assign({ component: "li", variant: "caption", style: { color: helperTextColor[key] } }, { children: label }), key));
71
- }) }));
72
- }, [helperTextColor, strategies]);
73
- return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(TextField, __assign({ error: !isValidPassword || error, helperText: helperText, type: "password", label: "Password", size: "small", margin: "dense", value: value, onChange: function (event) {
74
- event.preventDefault();
75
- onChange(event.target.value);
76
- }, fullWidth: true, required: true }, rest)) })));
77
- }
78
- export default Password;