diff --git a/README.txt b/README.txt index 42901fd0..9adf032c 100644 --- a/README.txt +++ b/README.txt @@ -1,6 +1,6 @@ MDB 5 React -Version: FREE 1.0.0-alpha4 +Version: FREE 1.0.0-beta1 Documentation: https://mdbootstrap.com/docs/b5/react/ diff --git a/app/package.json b/app/package.json index 76d47b94..f5964754 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mdb-react-ui-kit-demo", - "version": "1.0.0-alpha4", + "version": "1.0.0-beta1", "main": "index.js", "repository": { "type": "git", diff --git a/app/src/components/Dropdown/Dropdown.tsx b/app/src/components/Dropdown/Dropdown.tsx index 131afb49..89687516 100644 --- a/app/src/components/Dropdown/Dropdown.tsx +++ b/app/src/components/Dropdown/Dropdown.tsx @@ -70,11 +70,6 @@ const MDBDropdown: React.FC = ({ [isOpenState, popperElement, referenceElement] ); - useEffect(() => { - const wo = document.body.scrollTop; - console.log(wo); - }); - useEffect(() => { document.addEventListener('mousedown', handleClickOutside); return () => { diff --git a/app/src/components/Dropdown/DropdownMenu/DropdownMenu.tsx b/app/src/components/Dropdown/DropdownMenu/DropdownMenu.tsx index e16414ee..35b334e8 100644 --- a/app/src/components/Dropdown/DropdownMenu/DropdownMenu.tsx +++ b/app/src/components/Dropdown/DropdownMenu/DropdownMenu.tsx @@ -10,7 +10,6 @@ const MDBDropdownMenu: React.FC = ({ tag: Tag, children, style, - wrapperStyle, dark, responsive, ...props @@ -105,28 +104,27 @@ const MDBDropdownMenu: React.FC = ({ // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore return attachELements ? ( -
- - {React.Children.map(children, (child: any, index) => { - if (child?.type === MDBDropdownItem) { - return React.cloneElement(child, { - tabIndex: 0, - 'data-active': activeIndex === index && true, - 'data-index': index, - className: activeIndex === index ? 'active' : '', - }); - } else { - return child; - } - })} - -
+ {React.Children.map(children, (child: any, index) => { + if (child?.type === MDBDropdownItem) { + return React.cloneElement(child, { + tabIndex: 0, + 'data-active': activeIndex === index && true, + 'data-index': index, + className: activeIndex === index ? 'active' : '', + }); + } else { + return child; + } + })} + ) : ( '' ); diff --git a/app/src/components/Dropdown/DropdownMenu/index.d.ts b/app/src/components/Dropdown/DropdownMenu/index.d.ts index f198f3c7..3e48ad12 100644 --- a/app/src/components/Dropdown/DropdownMenu/index.d.ts +++ b/app/src/components/Dropdown/DropdownMenu/index.d.ts @@ -3,7 +3,6 @@ import * as React from 'react'; declare const MDBDropdownMenu: React.FunctionComponent<{ className?: string; style?: Record; - wrapperStyle?: Record; dark?: boolean; responsive?: string; tag?: React.ComponentProps; diff --git a/app/src/components/Dropdown/DropdownMenu/types.tsx b/app/src/components/Dropdown/DropdownMenu/types.tsx index 74572c28..bfc094b9 100644 --- a/app/src/components/Dropdown/DropdownMenu/types.tsx +++ b/app/src/components/Dropdown/DropdownMenu/types.tsx @@ -1,7 +1,6 @@ type DropdownMenuProps = { className?: string; style?: Record; - wrapperStyle?: Record; dark?: boolean; responsive?: string; tag?: React.ComponentProps; diff --git a/app/src/forms/Checkbox/Checkbox.tsx b/app/src/forms/Checkbox/Checkbox.tsx index 52c6c903..6c652b69 100644 --- a/app/src/forms/Checkbox/Checkbox.tsx +++ b/app/src/forms/Checkbox/Checkbox.tsx @@ -17,7 +17,10 @@ const MDBCheckbox: React.FC = React.forwardRef = React.forwardRef @@ -55,6 +64,7 @@ const MDBCheckbox: React.FC = React.forwardRef )} + {validation &&
{validation}
} ); } diff --git a/app/src/forms/Checkbox/index.d.ts b/app/src/forms/Checkbox/index.d.ts index ae3c8638..35594f0b 100644 --- a/app/src/forms/Checkbox/index.d.ts +++ b/app/src/forms/Checkbox/index.d.ts @@ -13,6 +13,8 @@ declare const MDBCheckbox: React.FunctionComponent<{ name?: string; inline?: boolean; checked?: boolean; + validation?: string; + invalid?: boolean; btn?: boolean; btnColor?: string; [rest: string]: any; diff --git a/app/src/forms/Checkbox/types.tsx b/app/src/forms/Checkbox/types.tsx index 5791143a..ca11c655 100644 --- a/app/src/forms/Checkbox/types.tsx +++ b/app/src/forms/Checkbox/types.tsx @@ -12,6 +12,8 @@ type CheckboxProps = { value?: string | boolean; name?: string; inline?: boolean; + validation?: string; + invalid?: boolean; checked?: boolean; btn?: boolean; btnColor?: string; diff --git a/app/src/forms/File/File.tsx b/app/src/forms/File/File.tsx new file mode 100644 index 00000000..28ed4948 --- /dev/null +++ b/app/src/forms/File/File.tsx @@ -0,0 +1,37 @@ +import clsx from 'clsx'; +import React, { useRef } from 'react'; +import type { FileProps } from './types'; + +const MDBFile: React.FC = ({ + className, + labelId, + labelClass, + labelRef, + inputRef, + size, + label, + id, + ...props +}) => { + const inputClasses = clsx('form-control', `form-control-${size}`, className); + const labelClasses = clsx('form-label', labelClass); + + const labelEl = useRef(null); + const inputEl = useRef(null); + + const labelReference = labelRef ? labelRef : labelEl; + const inputReference = inputRef ? inputRef : inputEl; + + return ( + <> + {label && ( + + )} + + + ); +}; + +export default MDBFile; diff --git a/app/src/forms/File/index.d.ts b/app/src/forms/File/index.d.ts new file mode 100644 index 00000000..d5f3da0e --- /dev/null +++ b/app/src/forms/File/index.d.ts @@ -0,0 +1,15 @@ +import * as React from 'react'; + +declare const MDBFile: React.FunctionComponent<{ + className?: string; + id?: string; + label?: string; + disabled?: boolean; + labelId?: string; + labelClass?: string; + size?: string; + name?: string; + [rest: string]: any; +}>; + +export default MDBFile; diff --git a/app/src/forms/File/types.tsx b/app/src/forms/File/types.tsx new file mode 100644 index 00000000..d62314c6 --- /dev/null +++ b/app/src/forms/File/types.tsx @@ -0,0 +1,15 @@ +import React from 'react'; + +type FileProps = { + className?: string; + id?: string; + label?: string; + disabled?: boolean; + labelId?: string; + labelClass?: string; + size?: string; + name?: string; + [rest: string]: any; +}; + +export { FileProps }; diff --git a/app/src/forms/Input/Input.tsx b/app/src/forms/Input/Input.tsx index 9b7c6b93..44e48212 100644 --- a/app/src/forms/Input/Input.tsx +++ b/app/src/forms/Input/Input.tsx @@ -20,6 +20,9 @@ const MDBInput: React.FC = ({ labelStyle, inputRef, textarea, + validation, + invalid, + validationTooltip, ...props }) => { const labelEl = useRef(null); @@ -36,6 +39,12 @@ const MDBInput: React.FC = ({ const wrapperClasses = clsx('form-outline', contrast && 'form-white', wrapperClass); const inputClasses = clsx('form-control', active && 'active', size && `form-control-${size}`, className); const labelClasses = clsx('form-label', labelClass); + const validationClasses = clsx( + validation && + (invalid + ? `invalid-${validationTooltip ? `tooltip` : `feedback`}` + : `valid-${validationTooltip ? `tooltip` : `feedback`}`) + ); useEffect(() => { if (labelReference.current) { @@ -91,6 +100,7 @@ const MDBInput: React.FC = ({ {label} )} + {validation &&
{validation}
}
diff --git a/app/src/forms/Input/index.d.ts b/app/src/forms/Input/index.d.ts index 5400139a..bdb602bb 100644 --- a/app/src/forms/Input/index.d.ts +++ b/app/src/forms/Input/index.d.ts @@ -17,6 +17,9 @@ declare const MDBInput: React.FunctionComponent<{ contrast?: boolean; value?: string; name?: string; + validation?: string; + invalid?: boolean; + validationTooltip?: boolean; labelRef?: React.RefObject; textarea?: boolean; [rest: string]: any; diff --git a/app/src/forms/Input/types.tsx b/app/src/forms/Input/types.tsx index 638460f7..a6cd8ea1 100644 --- a/app/src/forms/Input/types.tsx +++ b/app/src/forms/Input/types.tsx @@ -17,6 +17,9 @@ type InputProps = { contrast?: boolean; value?: string; name?: string; + validation?: string; + invalid?: boolean; + validationTooltip?: boolean; labelRef?: React.RefObject; textarea?: boolean; [rest: string]: any; diff --git a/app/src/forms/InputGroup/InputGroup.tsx b/app/src/forms/InputGroup/InputGroup.tsx new file mode 100644 index 00000000..798f523b --- /dev/null +++ b/app/src/forms/InputGroup/InputGroup.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import clsx from 'clsx'; +import type { InputGroupProps } from './types'; + +const MDBInputGroup: React.FC = React.forwardRef( + ({ className, children, noWrap, tag: Tag, size, ...props }, ref) => { + const classes = clsx('input-group', noWrap && 'flex-nowrap', size && `input-group-${size}`, className); + + return ( + + {children} + + ); + } +); + +MDBInputGroup.defaultProps = { tag: 'div', noWrap: false }; + +export default MDBInputGroup; diff --git a/app/src/forms/InputGroup/InputGroupElement/InputGroupElement.tsx b/app/src/forms/InputGroup/InputGroupElement/InputGroupElement.tsx new file mode 100644 index 00000000..acb51e14 --- /dev/null +++ b/app/src/forms/InputGroup/InputGroupElement/InputGroupElement.tsx @@ -0,0 +1,23 @@ +import React, { useRef } from 'react'; +import clsx from 'clsx'; +import type { InputGroupElementProps } from './types'; + +const MDBInputGroupElement: React.FC = ({ className, textarea, inputRef, ...props }) => { + const classes = clsx('form-control', className); + + const inputEl = useRef(null); + + const inputReference = inputRef ? inputRef : inputEl; + + return ( + <> + {textarea ? ( +