@mezzanine-ui/react 0.6.4 → 0.7.3

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 (169) hide show
  1. package/Accordion/Accordion.js +3 -2
  2. package/Accordion/AccordionDetails.js +3 -2
  3. package/Accordion/AccordionSummary.js +3 -2
  4. package/Alert/Alert.js +3 -2
  5. package/AppBar/AppBar.js +3 -2
  6. package/AppBar/AppBarBrand.js +3 -2
  7. package/AppBar/AppBarMain.js +3 -2
  8. package/AppBar/AppBarSupport.js +3 -2
  9. package/Badge/Badge.js +3 -2
  10. package/Badge/BadgeContainer.js +3 -2
  11. package/Button/Button.d.ts +1 -1
  12. package/Button/Button.js +3 -2
  13. package/Button/ButtonGroup.js +3 -2
  14. package/Button/IconButton.js +3 -2
  15. package/Button/index.js +2 -2
  16. package/Calendar/Calendar.js +3 -2
  17. package/Calendar/CalendarCell.js +1 -1
  18. package/Calendar/CalendarContext.js +1 -2
  19. package/Calendar/CalendarControls.js +1 -1
  20. package/Calendar/CalendarDayOfWeek.js +1 -1
  21. package/Calendar/CalendarDays.js +1 -1
  22. package/Calendar/CalendarMonths.js +1 -1
  23. package/Calendar/CalendarWeeks.js +1 -1
  24. package/Calendar/CalendarYears.js +1 -1
  25. package/Card/Card.js +3 -2
  26. package/Card/CardActions.js +3 -2
  27. package/Checkbox/CheckAll.js +3 -2
  28. package/Checkbox/Checkbox.js +3 -2
  29. package/Checkbox/CheckboxGroup.js +3 -2
  30. package/ConfirmActions/ConfirmActions.js +3 -2
  31. package/DatePicker/DatePicker.js +4 -3
  32. package/DatePicker/DatePickerCalendar.js +3 -2
  33. package/DateRangePicker/DateRangePicker.js +4 -3
  34. package/DateRangePicker/DateRangePickerCalendar.js +3 -2
  35. package/DateRangePicker/useDateRangePickerValue.d.ts +2 -2
  36. package/DateTimePicker/DateTimePicker.js +4 -3
  37. package/DateTimePicker/DateTimePickerPanel.js +3 -2
  38. package/Drawer/Drawer.d.ts +2 -7
  39. package/Drawer/Drawer.js +8 -23
  40. package/Dropdown/Dropdown.js +3 -2
  41. package/Empty/Empty.js +3 -2
  42. package/Form/FormField.js +3 -2
  43. package/Form/FormLabel.js +3 -2
  44. package/Form/FormMessage.js +3 -2
  45. package/Icon/Icon.d.ts +4 -0
  46. package/Icon/Icon.js +6 -4
  47. package/Input/Input.js +4 -3
  48. package/Loading/Loading.js +3 -2
  49. package/Menu/Menu.js +3 -2
  50. package/Menu/MenuDivider.js +3 -2
  51. package/Menu/MenuItem.js +3 -2
  52. package/Menu/MenuItemGroup.js +3 -2
  53. package/Message/Message.d.ts +8 -5
  54. package/Message/Message.js +29 -13
  55. package/Message/index.d.ts +1 -1
  56. package/Modal/Modal.d.ts +2 -7
  57. package/Modal/Modal.js +11 -59
  58. package/Modal/ModalActions.js +3 -2
  59. package/Modal/ModalBody.js +3 -2
  60. package/Modal/ModalFooter.js +3 -2
  61. package/Modal/ModalHeader.js +3 -2
  62. package/Modal/index.d.ts +1 -0
  63. package/Modal/index.js +1 -0
  64. package/Modal/useModalContainer.d.ts +6 -0
  65. package/Modal/useModalContainer.js +27 -0
  66. package/Navigation/Navigation.js +3 -2
  67. package/Navigation/NavigationItem.js +3 -2
  68. package/Navigation/NavigationSubMenu.js +3 -2
  69. package/Notification/Notification.js +4 -3
  70. package/Notifier/NotifierManager.js +1 -1
  71. package/Overlay/Overlay.js +3 -2
  72. package/PageFooter/PageFooter.js +3 -2
  73. package/Pagination/Pagination.js +3 -2
  74. package/Pagination/PaginationItem.js +3 -2
  75. package/Pagination/PaginationJumper.js +3 -2
  76. package/Picker/PickerTrigger.js +3 -2
  77. package/Picker/RangePickerTrigger.js +3 -2
  78. package/Picker/usePickerInputValue.js +1 -2
  79. package/Picker/usePickerValue.d.ts +1 -1
  80. package/Picker/useRangePickerValue.d.ts +2 -2
  81. package/Popconfirm/Popconfirm.js +3 -2
  82. package/Popover/Popover.js +3 -2
  83. package/Popper/Popper.js +3 -2
  84. package/Portal/Portal.js +3 -2
  85. package/Progress/Progress.js +3 -2
  86. package/Radio/Radio.js +4 -3
  87. package/Radio/RadioGroup.js +3 -2
  88. package/Select/AutoComplete.d.ts +1 -1
  89. package/Select/AutoComplete.js +4 -3
  90. package/Select/Option.js +3 -2
  91. package/Select/Select.d.ts +1 -1
  92. package/Select/Select.js +4 -3
  93. package/Select/SelectTrigger.js +3 -2
  94. package/Select/TreeSelect.d.ts +1 -1
  95. package/Select/TreeSelect.js +4 -3
  96. package/Skeleton/Skeleton.js +3 -2
  97. package/Slider/Slider.js +20 -3
  98. package/Slider/useSlider.js +8 -6
  99. package/Stepper/Step.js +3 -2
  100. package/Stepper/Stepper.js +3 -2
  101. package/Switch/Switch.js +4 -3
  102. package/Table/Table.d.ts +51 -44
  103. package/Table/Table.js +42 -23
  104. package/Table/TableBody.js +10 -4
  105. package/Table/TableBodyRow.js +3 -2
  106. package/Table/TableCell.js +3 -2
  107. package/Table/TableHeader.js +3 -2
  108. package/Table/editable/TableEditRenderWrapper.js +1 -1
  109. package/Table/expandable/TableExpandable.js +3 -2
  110. package/Table/pagination/TablePagination.js +13 -14
  111. package/Table/pagination/useTablePagination.d.ts +5 -13
  112. package/Table/pagination/useTablePagination.js +3 -23
  113. package/Table/refresh/TableRefresh.js +3 -2
  114. package/Table/rowSelection/TableRowSelection.js +3 -2
  115. package/Table/sorting/TableSortingIcon.js +3 -2
  116. package/Table/useTableScroll.d.ts +9 -9
  117. package/Table/useTableScroll.js +1 -1
  118. package/Tabs/Tab.js +3 -2
  119. package/Tabs/TabPane.js +3 -2
  120. package/Tabs/Tabs.js +3 -2
  121. package/Tabs/useTabsOverflow.js +1 -1
  122. package/Tag/Tag.js +3 -2
  123. package/TextField/TextField.js +3 -2
  124. package/Textarea/Textarea.js +4 -3
  125. package/TimePanel/TimePanel.js +3 -2
  126. package/TimePanel/TimePanelAction.js +3 -2
  127. package/TimePanel/TimePanelColumn.js +3 -2
  128. package/TimePicker/TimePicker.js +4 -3
  129. package/TimePicker/TimePickerPanel.js +3 -2
  130. package/Tooltip/Tooltip.js +3 -2
  131. package/Transition/Collapse.js +3 -2
  132. package/Transition/Fade.js +3 -2
  133. package/Transition/Grow.js +3 -2
  134. package/Transition/SlideFade.js +3 -2
  135. package/Transition/Transition.d.ts +1 -1
  136. package/Transition/Transition.js +1 -1
  137. package/Transition/Zoom.js +3 -2
  138. package/Tree/Tree.js +3 -2
  139. package/Tree/TreeNode.js +3 -2
  140. package/Tree/TreeNodeList.js +3 -2
  141. package/Typography/Typography.d.ts +1 -1
  142. package/Typography/Typography.js +3 -2
  143. package/Upload/UploadButton.js +3 -2
  144. package/Upload/UploadInput.js +5 -2
  145. package/Upload/UploadPicture.d.ts +48 -0
  146. package/Upload/UploadPicture.js +52 -0
  147. package/Upload/UploadPictureBlock.d.ts +13 -0
  148. package/Upload/UploadPictureBlock.js +86 -0
  149. package/Upload/UploadPictureWall.d.ts +71 -0
  150. package/Upload/UploadPictureWall.js +156 -0
  151. package/Upload/UploadPictureWallItem.d.ts +13 -0
  152. package/Upload/UploadPictureWallItem.js +19 -0
  153. package/Upload/UploadResult.js +3 -2
  154. package/Upload/index.d.ts +3 -0
  155. package/Upload/index.js +3 -0
  156. package/_internal/InputCheck/InputCheck.js +3 -2
  157. package/_internal/InputCheck/InputCheckGroup.js +3 -2
  158. package/_internal/InputTriggerPopper/InputTriggerPopper.js +3 -2
  159. package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +21 -0
  160. package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +66 -0
  161. package/_internal/SlideFadeOverlay/index.d.ts +1 -0
  162. package/_internal/SlideFadeOverlay/index.js +1 -0
  163. package/_internal/SlideFadeOverlay/useTopStack.d.ts +1 -0
  164. package/{Modal/useIsTopModal.js → _internal/SlideFadeOverlay/useTopStack.js} +3 -3
  165. package/index.d.ts +4 -4
  166. package/index.js +52 -49
  167. package/package.json +6 -6
  168. package/utils/{rename-types.d.ts → general.d.ts} +3 -0
  169. package/Modal/useIsTopModal.d.ts +0 -1
@@ -0,0 +1,156 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useState, useMemo, useEffect, useCallback, useImperativeHandle } from 'react';
3
+ import { ImageUploader, uploadPictureWallClasses } from '@mezzanine-ui/core/upload';
4
+ import compact from 'lodash/compact';
5
+ import drop from 'lodash/drop';
6
+ import isEqual from 'lodash/isEqual';
7
+ import { usePreviousValue } from '../hooks/usePreviousValue.js';
8
+ import UploadPictureWallItem from './UploadPictureWallItem.js';
9
+ import cx from 'clsx';
10
+
11
+ const UploadPictureWall = forwardRef(function UploadPictureWall(props, ref) {
12
+ const { accept = 'image/*', className, controllerRef, defaultValues, disabled = false, multiple = true, onChange, onDelete, onError, onMultiUpload, onUpload, onUploadSuccess, parallel = false, style, } = props;
13
+ const [uploadPictureImageLoaders, setUploadPictureImageLoader] = useState(defaultValues ? compact(defaultValues).map((value) => new ImageUploader(undefined, value)) : []);
14
+ const [needUploadImageLoaders, setNeedUploadImageLoaders] = useState([]);
15
+ const [needUploadImageLoaderSets, setNeedUploadImageLoaderSets] = useState([]);
16
+ const [values, setValues] = useState(compact(defaultValues) || []);
17
+ const loaderList = useMemo(() => uploadPictureImageLoaders, [uploadPictureImageLoaders]);
18
+ const prevNeedUploadImageLoadersLength = usePreviousValue(needUploadImageLoaders.length);
19
+ const prevNeedUploadImageLoaderSetsLength = usePreviousValue(needUploadImageLoaderSets.length);
20
+ const prevValues = usePreviousValue(values);
21
+ useEffect(() => {
22
+ if (onChange && !isEqual(prevValues, values)) {
23
+ onChange(values);
24
+ }
25
+ }, [onChange, prevValues, values]);
26
+ useEffect(() => {
27
+ if (prevNeedUploadImageLoadersLength > needUploadImageLoaders.length ||
28
+ prevNeedUploadImageLoaderSetsLength > needUploadImageLoaderSets.length) {
29
+ setValues(compact(uploadPictureImageLoaders.map((loader) => loader.getUrl())));
30
+ }
31
+ }, [
32
+ uploadPictureImageLoaders,
33
+ needUploadImageLoaders,
34
+ prevNeedUploadImageLoadersLength,
35
+ needUploadImageLoaderSets,
36
+ prevNeedUploadImageLoaderSetsLength,
37
+ ]);
38
+ useEffect(() => {
39
+ if (needUploadImageLoaderSets.length && onUpload) {
40
+ const imageLoaderSet = needUploadImageLoaderSets[0];
41
+ if (!imageLoaderSet[0].getIsLoading()) {
42
+ imageLoaderSet.forEach((imageLoader, index) => {
43
+ const setProgress = (progress) => imageLoader.setPercentage(progress);
44
+ imageLoader.setLoadingStatus(true);
45
+ onUpload(imageLoader.getFile(), setProgress)
46
+ .then((url) => {
47
+ imageLoader.setUrl(url);
48
+ imageLoader.setLoadingStatus(false);
49
+ setProgress(100);
50
+ if (onUploadSuccess) {
51
+ onUploadSuccess(imageLoader.getFile(), url);
52
+ }
53
+ if (index === imageLoaderSet.length - 1) {
54
+ setNeedUploadImageLoaderSets((nup) => drop(nup));
55
+ }
56
+ })
57
+ .catch(() => {
58
+ imageLoader.setErrorStatus(true);
59
+ imageLoader.setLoadingStatus(false);
60
+ setProgress(100);
61
+ if (index === imageLoaderSet.length - 1) {
62
+ setNeedUploadImageLoaderSets((nup) => drop(nup));
63
+ }
64
+ if (onError) {
65
+ onError(imageLoader.getFile());
66
+ }
67
+ });
68
+ });
69
+ }
70
+ }
71
+ }, [needUploadImageLoaderSets, onError, onUpload, onUploadSuccess]);
72
+ useEffect(() => {
73
+ if (needUploadImageLoaders.length && onUpload) {
74
+ const imageLoader = needUploadImageLoaders[0];
75
+ if (imageLoader && imageLoader.getFile() && !imageLoader.getIsLoading()) {
76
+ const setProgress = (progress) => imageLoader.setPercentage(progress);
77
+ imageLoader.setLoadingStatus(true);
78
+ onUpload(imageLoader.getFile(), setProgress)
79
+ .then((url) => {
80
+ imageLoader.setUrl(url);
81
+ imageLoader.setLoadingStatus(false);
82
+ setProgress(100);
83
+ setNeedUploadImageLoaders((nup) => drop(nup));
84
+ if (onUploadSuccess) {
85
+ onUploadSuccess(imageLoader.getFile(), url);
86
+ }
87
+ })
88
+ .catch(() => {
89
+ imageLoader.setErrorStatus(true);
90
+ imageLoader.setLoadingStatus(false);
91
+ setProgress(100);
92
+ setNeedUploadImageLoaders((nup) => drop(nup));
93
+ if (onError) {
94
+ onError(imageLoader.getFile());
95
+ }
96
+ });
97
+ }
98
+ }
99
+ }, [needUploadImageLoaders, onError, onUpload, onUploadSuccess]);
100
+ const onImagesUpload = useCallback((files) => {
101
+ if (files.length) {
102
+ const imageLoaders = files.map((file) => new ImageUploader(file));
103
+ setUploadPictureImageLoader((ups) => [...ups, ...imageLoaders]);
104
+ if (onMultiUpload) {
105
+ const uploadFiles = imageLoaders.map((loader) => loader.getFile());
106
+ const setProgress = (progress) => imageLoaders.forEach((loader) => loader.setPercentage(progress));
107
+ imageLoaders.forEach((loader) => loader.setLoadingStatus(true));
108
+ onMultiUpload(uploadFiles, setProgress)
109
+ .then((urls) => {
110
+ imageLoaders.forEach((loader, index) => loader.setUrl(urls[index]));
111
+ imageLoaders.forEach((loader) => loader.setLoadingStatus(false));
112
+ setProgress(100);
113
+ setValues((v) => [...v, ...urls]);
114
+ if (onUploadSuccess) {
115
+ onUploadSuccess(uploadFiles, urls);
116
+ }
117
+ })
118
+ .catch(() => {
119
+ imageLoaders.forEach((loader) => loader.setErrorStatus(true));
120
+ imageLoaders.forEach((loader) => loader.setLoadingStatus(false));
121
+ setProgress(100);
122
+ if (onError) {
123
+ onError(uploadFiles);
124
+ }
125
+ });
126
+ return;
127
+ }
128
+ if (onUpload) {
129
+ if (!parallel) {
130
+ setNeedUploadImageLoaders((nups) => [...nups, ...imageLoaders]);
131
+ }
132
+ else {
133
+ setNeedUploadImageLoaderSets((set) => [...set, imageLoaders]);
134
+ }
135
+ }
136
+ }
137
+ }, [onError, onMultiUpload, onUpload, onUploadSuccess, parallel]);
138
+ const onImageDelete = useCallback((uid) => {
139
+ setUploadPictureImageLoader((ups) => ups.filter((up) => up.getUid() !== uid));
140
+ setNeedUploadImageLoaders((nUps) => nUps.filter((nUp) => nUp.getUid() !== uid));
141
+ const nowUploadPictureImageLoaders = uploadPictureImageLoaders.filter((up) => up.getUid() !== uid);
142
+ const urls = compact(nowUploadPictureImageLoaders.map((loader) => loader.getUrl()));
143
+ setValues(urls);
144
+ if (onDelete) {
145
+ onDelete(urls);
146
+ }
147
+ }, [onDelete, uploadPictureImageLoaders]);
148
+ useImperativeHandle(controllerRef, () => ({
149
+ getAllData: () => uploadPictureImageLoaders.map((loader) => loader.getAll()),
150
+ }));
151
+ return (jsxs("div", Object.assign({ ref: ref, className: cx(uploadPictureWallClasses.host, className), style: style }, { children: [loaderList.map((up) => (jsx(UploadPictureWallItem, { accept: accept, disabled: disabled, imageLoader: up, multiple: multiple, onDelete: () => onImageDelete(up.getUid()) }, up.getUid()))),
152
+ jsx(UploadPictureWallItem, { accept: accept, disabled: disabled, imageLoader: new ImageUploader(), multiple: multiple, onUpload: onImagesUpload }, void 0)] }), void 0));
153
+ });
154
+ var UploadPictureWall$1 = UploadPictureWall;
155
+
156
+ export { UploadPictureWall$1 as default };
@@ -0,0 +1,13 @@
1
+ import { MouseEventHandler } from 'react';
2
+ import { ImageUploader } from '@mezzanine-ui/core/upload';
3
+ import { NativeElementPropsWithoutKeyAndRef } from '../utils/jsx-types';
4
+ export interface UploadPictureWallItemProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>, 'value' | 'onChange' | 'children'> {
5
+ accept?: string;
6
+ disabled?: boolean;
7
+ imageLoader: ImageUploader;
8
+ multiple?: boolean;
9
+ onDelete?: MouseEventHandler;
10
+ onUpload?: (files: File[]) => void;
11
+ }
12
+ declare const UploadPictureWallItem: (props: UploadPictureWallItemProps) => JSX.Element;
13
+ export default UploadPictureWallItem;
@@ -0,0 +1,19 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useRef, useEffect } from 'react';
3
+ import { uploadPictureWallClasses } from '@mezzanine-ui/core/upload';
4
+ import UploadPictureBlock from './UploadPictureBlock.js';
5
+ import cx from 'clsx';
6
+
7
+ const UploadPictureWallItem = (props) => {
8
+ const { accept, disabled, imageLoader, multiple, onDelete, onUpload, } = props;
9
+ const loader = useRef(imageLoader);
10
+ useEffect(() => {
11
+ if (!loader.current.getPreview()) {
12
+ loader.current.setPreview();
13
+ }
14
+ }, []);
15
+ return (jsx("div", Object.assign({ className: cx(uploadPictureWallClasses.item) }, { children: jsx(UploadPictureBlock, { accept: accept, disabled: disabled, imageLoader: loader.current, multiple: multiple, onDelete: onDelete, onUpload: onUpload }, void 0) }), void 0));
16
+ };
17
+ var UploadPictureWallItem$1 = UploadPictureWallItem;
18
+
19
+ export { UploadPictureWallItem$1 as default };
@@ -25,6 +25,7 @@ const UploadResult = forwardRef(function UploadResult(props, ref) {
25
25
  jsxs("div", Object.assign({ className: uploadResultClasses.actions }, { children: [loading && (jsx(Icon, { icon: SpinnerIcon, spin: true }, void 0)),
26
26
  done && (jsx(Icon, { icon: DownloadIcon, onClick: onDownload, role: "button" }, void 0)),
27
27
  (done || error) && (jsx(Icon, { icon: TimesIcon, onClick: onDelete, role: "button" }, void 0))] }), void 0)] }), void 0));
28
- });
28
+ });
29
+ var UploadResult$1 = UploadResult;
29
30
 
30
- export default UploadResult;
31
+ export { UploadResult$1 as default };
package/Upload/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  export type { UploadResultSize, UploadResultStatus, } from '@mezzanine-ui/core/upload';
2
2
  export { UploadButtonProps, default as UploadButton } from './UploadButton';
3
+ export { UploadPictureControl, UploadPictureProps, default as UploadPicture } from './UploadPicture';
4
+ export { UploadPictureBlockProps, default as UploadPictureBlock } from './UploadPictureBlock';
5
+ export { UploadPictureWallControl, UploadPictureWallProps, default as UploadPictureWall } from './UploadPictureWall';
3
6
  export { UploadResultProps, default as UploadResult } from './UploadResult';
package/Upload/index.js CHANGED
@@ -1,2 +1,5 @@
1
1
  export { default as UploadButton } from './UploadButton.js';
2
+ export { default as UploadPicture } from './UploadPicture.js';
3
+ export { default as UploadPictureBlock } from './UploadPictureBlock.js';
4
+ export { default as UploadPictureWall } from './UploadPictureWall.js';
2
5
  export { default as UploadResult } from './UploadResult.js';
@@ -14,6 +14,7 @@ const InputCheck = forwardRef(function InputCheck(props, ref) {
14
14
  [inputCheckClasses.withLabel]: !!children,
15
15
  }, className), htmlFor: htmlFor }, { children: [jsx("span", Object.assign({ className: inputCheckClasses.control }, { children: control }), void 0),
16
16
  children && (jsx("span", Object.assign({ className: inputCheckClasses.label }, { children: children }), void 0))] }), void 0));
17
- });
17
+ });
18
+ var InputCheck$1 = InputCheck;
18
19
 
19
- export default InputCheck;
20
+ export { InputCheck$1 as default };
@@ -9,6 +9,7 @@ import cx from 'clsx';
9
9
  const InputCheckGroup = forwardRef(function InputCheckGroup(props, ref) {
10
10
  const { children, className, orientation = 'horizontal', ...rest } = props;
11
11
  return (jsx("div", Object.assign({}, rest, { ref: ref, "aria-orientation": orientation, className: cx(inputCheckGroupClasses.host, inputCheckGroupClasses.orientation(orientation), className) }, { children: children }), void 0));
12
- });
12
+ });
13
+ var InputCheckGroup$1 = InputCheckGroup;
13
14
 
14
- export default InputCheckGroup;
15
+ export { InputCheckGroup$1 as default };
@@ -39,6 +39,7 @@ const InputTriggerPopper = forwardRef(function InputTriggerPopper(props, ref) {
39
39
  ...modifiers,
40
40
  ],
41
41
  } }, { children: children }), void 0) }), void 0));
42
- });
42
+ });
43
+ var InputTriggerPopper$1 = InputTriggerPopper;
43
44
 
44
- export default InputTriggerPopper;
45
+ export { InputTriggerPopper$1 as default };
@@ -0,0 +1,21 @@
1
+ /// <reference types="react" />
2
+ import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
3
+ import { OverlayProps } from '../../Overlay';
4
+ import { SlideFadeProps, SlideFadeDirection } from '../../Transition';
5
+ export interface SlideFadeOverlayProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>, 'children'>, Pick<OverlayProps, 'container' | 'disableCloseOnBackdropClick' | 'disablePortal' | 'invisibleBackdrop' | 'hideBackdrop' | 'onBackdropClick' | 'onClose' | 'open'>, Pick<SlideFadeProps, 'children'> {
6
+ /**
7
+ * Control slide fade in direction
8
+ * @default 'down'
9
+ */
10
+ direction?: SlideFadeDirection;
11
+ /**
12
+ * Controls whether to disable closing modal while escape key down.
13
+ * @default false
14
+ */
15
+ disableCloseOnEscapeKeyDown?: boolean;
16
+ }
17
+ /**
18
+ * The react component for slide fade + overlay compose
19
+ */
20
+ declare const SlideFadeOverlay: import("react").ForwardRefExoticComponent<SlideFadeOverlayProps & import("react").RefAttributes<HTMLDivElement>>;
21
+ export default SlideFadeOverlay;
@@ -0,0 +1,66 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { overlayWithSlideFadeClasses } from '@mezzanine-ui/core/_internal/overlay-with-slide-fade';
3
+ import { forwardRef, useState, useLayoutEffect, useEffect } from 'react';
4
+ import { useDocumentEscapeKeyDown } from '../../hooks/useDocumentEscapeKeyDown.js';
5
+ import { lockBodyScroll, allowBodyScroll } from '../../utils/scroll-lock.js';
6
+ import useTopStack from './useTopStack.js';
7
+ import Overlay from '../../Overlay/Overlay.js';
8
+ import SlideFade from '../../Transition/SlideFade.js';
9
+ import cx from 'clsx';
10
+
11
+ /**
12
+ * The react component for slide fade + overlay compose
13
+ */
14
+ const SlideFadeOverlay = forwardRef(function SlideFadeOverlay(props, ref) {
15
+ const { children, className, container, direction = 'down', disableCloseOnBackdropClick = false, disableCloseOnEscapeKeyDown = false, disablePortal = false, hideBackdrop = false, invisibleBackdrop = false, onBackdropClick, onClose, open, } = props;
16
+ const [exited, setExited] = useState(true);
17
+ /**
18
+ * Escape keydown close: escape will only close the top modal
19
+ */
20
+ const checkIsOnTheTop = useTopStack(open);
21
+ useDocumentEscapeKeyDown(() => {
22
+ if (!open || disableCloseOnEscapeKeyDown || !onClose) {
23
+ return;
24
+ }
25
+ return (event) => {
26
+ if (checkIsOnTheTop()) {
27
+ event.stopPropagation();
28
+ onClose();
29
+ }
30
+ };
31
+ }, [
32
+ disableCloseOnEscapeKeyDown,
33
+ checkIsOnTheTop,
34
+ open,
35
+ onClose,
36
+ ]);
37
+ /** lock body scroll */
38
+ useLayoutEffect(() => {
39
+ if (open) {
40
+ lockBodyScroll();
41
+ }
42
+ }, [open]);
43
+ /** unlock body scroll */
44
+ useEffect(() => {
45
+ function checkAndAllowScroll() {
46
+ // wait until dom element unmount, and check if other modal existed
47
+ const allStacks = document.querySelectorAll('.mzn-overlay-with-slide-fade');
48
+ if (!allStacks.length) {
49
+ allowBodyScroll();
50
+ }
51
+ }
52
+ if (!open && exited) {
53
+ checkAndAllowScroll();
54
+ }
55
+ return (() => {
56
+ requestAnimationFrame(checkAndAllowScroll);
57
+ });
58
+ }, [open, exited]);
59
+ if (!open && exited) {
60
+ return null;
61
+ }
62
+ return (jsx(Overlay, Object.assign({ className: cx(overlayWithSlideFadeClasses.host, className), container: container, disableCloseOnBackdropClick: disableCloseOnBackdropClick, disablePortal: disablePortal, hideBackdrop: hideBackdrop, invisibleBackdrop: invisibleBackdrop, onBackdropClick: onBackdropClick, onClose: onClose, open: open, role: "presentation" }, { children: jsx(SlideFade, Object.assign({ ref: ref, in: open, direction: direction, onEntered: () => setExited(false), onExited: () => setExited(true) }, { children: children }), void 0) }), void 0));
63
+ });
64
+ var SlideFadeOverlay$1 = SlideFadeOverlay;
65
+
66
+ export { SlideFadeOverlay$1 as default };
@@ -0,0 +1 @@
1
+ export { SlideFadeOverlayProps, default, } from './SlideFadeOverlay';
@@ -0,0 +1 @@
1
+ export { default } from './SlideFadeOverlay.js';
@@ -0,0 +1 @@
1
+ export default function useTopStack(open?: boolean): () => boolean;
@@ -1,8 +1,8 @@
1
- import { useCallback, useMemo, useEffect } from 'react';
1
+ import { useMemo, useEffect, useCallback } from 'react';
2
2
 
3
3
  let seedStack = [];
4
4
  let seed = 1;
5
- function useIsTopModal(open) {
5
+ function useTopStack(open) {
6
6
  const modalSeed = useMemo(() => {
7
7
  seed += 1;
8
8
  return seed;
@@ -19,4 +19,4 @@ function useIsTopModal(open) {
19
19
  return useCallback(() => seedStack[seedStack.length - 1] === modalSeed, [modalSeed]);
20
20
  }
21
21
 
22
- export { useIsTopModal };
22
+ export { useTopStack as default };
package/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export * from './utils/composeRefs';
2
2
  export * from './utils/cx';
3
3
  export * from './utils/getElement';
4
4
  export * from './utils/jsx-types';
5
- export * from './utils/rename-types';
5
+ export * from './utils/general';
6
6
  export * from './utils/scroll-lock';
7
7
  export * from './hooks/useClickAway';
8
8
  export * from './hooks/useComposeRefs';
@@ -67,7 +67,7 @@ export { AutoComplete, AutoCompleteProps, SelectValue, TreeSelectOption, SelectC
67
67
  export { SwitchSize, SwitchProps, default as Switch, } from './Switch';
68
68
  export { TextareaSize, TextareaProps, default as Textarea, } from './Textarea';
69
69
  export { TextFieldSize, TextFieldProps, default as TextField, } from './TextField';
70
- export { UploadButtonProps, UploadButton, UploadResultProps, UploadResultSize, UploadResultStatus, UploadResult, } from './Upload';
70
+ export { UploadButtonProps, UploadButton, UploadPictureControl, UploadPictureProps, UploadPicture, UploadPictureWallControl, UploadPictureWallProps, UploadPictureWall, UploadResultProps, UploadResultSize, UploadResultStatus, UploadResult, } from './Upload';
71
71
  export { useTabKeyClose, UsePickerDocumentEventCloseProps, usePickerDocumentEventClose, UsePickerValueProps, usePickerValue, UseRangePickerValueProps, useRangePickerValue, PickerTriggerProps, PickerTrigger, RangePickerTriggerProps, RangePickerTrigger, } from './Picker';
72
72
  export { DatePickerCalendarProps, DatePickerCalendar, DatePickerProps, default as DatePicker, } from './DatePicker';
73
73
  export { useDateRangeCalendarControls, UseDateRangePickerValueProps, useDateRangePickerValue, DateRangePickerCalendarProps, DateRangePickerCalendar, DateRangePickerProps, default as DateRangePicker, } from './DateRangePicker';
@@ -80,8 +80,8 @@ export { SingleSliderValue, RangeSliderValue, SliderValue, SliderRect, UseSlider
80
80
  export { AlertSeverity, AlertProps, default as Alert, } from './Alert';
81
81
  export { ConfirmActionsProps, default as ConfirmActions, } from './ConfirmActions';
82
82
  export { LoadingProps, default as Loading, } from './Loading';
83
- export { MessageData, MessageSeverity, default as Message, } from './Message';
84
- export { ModalSeverity, ModalSize, ModalHeaderProps, ModalHeader, ModalBodyProps, ModalBody, ModalFooterProps, ModalFooter, ModalActionsProps, ModalActions, ModalProps, default as Modal, } from './Modal';
83
+ export { MessageData, MessageSeverity, MessageType, default as Message, } from './Message';
84
+ export { ModalSeverity, ModalSize, ModalHeaderProps, ModalHeader, ModalBodyProps, ModalBody, ModalFooterProps, ModalFooter, ModalActionsProps, ModalActions, ModalProps, useModalContainer, default as Modal, } from './Modal';
85
85
  export { PopconfirmProps, default as Popconfirm, } from './Popconfirm';
86
86
  export { NotificationData, NotificationSeverity, default as Notification, } from './Notification';
87
87
  export { ProgressProps, ProgressType, ProgressStatus, ProgressTypes, ProgressStatuses, default as Progress, } from './Progress';
package/index.js CHANGED
@@ -23,6 +23,11 @@ export { useSelectValueControl } from './Form/useSelectValueControl.js';
23
23
  export { useSwitchControlValue } from './Form/useSwitchControlValue.js';
24
24
  export { IconButton } from './Button/index.js';
25
25
  export { default as Typography } from './Typography/Typography.js';
26
+ export { default as useModalContainer } from './Modal/useModalContainer.js';
27
+ export { default as Transition } from './Transition/Transition.js';
28
+ export { default as Button } from './Button/Button.js';
29
+ export { default as ButtonGroup } from './Button/ButtonGroup.js';
30
+ export { default as Icon } from './Icon/Icon.js';
26
31
  export { default as MenuDivider } from './Menu/MenuDivider.js';
27
32
  export { default as MenuItem } from './Menu/MenuItem.js';
28
33
  export { default as MenuItemGroup, default as OptionGroup } from './Menu/MenuItemGroup.js';
@@ -30,24 +35,51 @@ export { default as Menu } from './Menu/Menu.js';
30
35
  export { default as Tab } from './Tabs/Tab.js';
31
36
  export { default as TabPane } from './Tabs/TabPane.js';
32
37
  export { default as Tabs } from './Tabs/Tabs.js';
38
+ export { default as Drawer } from './Drawer/Drawer.js';
39
+ export { default as Dropdown } from './Dropdown/Dropdown.js';
33
40
  export { default as NavigationItem } from './Navigation/NavigationItem.js';
34
41
  export { default as NavigationSubMenu } from './Navigation/NavigationSubMenu.js';
35
42
  export { default as Navigation } from './Navigation/Navigation.js';
43
+ export { default as AppBarBrand } from './AppBar/AppBarBrand.js';
44
+ export { default as AppBarMain } from './AppBar/AppBarMain.js';
45
+ export { default as AppBarSupport } from './AppBar/AppBarSupport.js';
46
+ export { default as AppBar } from './AppBar/AppBar.js';
36
47
  export { default as PageFooter } from './PageFooter/PageFooter.js';
37
48
  export { default as Step, default as Stepper } from './Stepper/Stepper.js';
49
+ export { default as AccordionSummary } from './Accordion/AccordionSummary.js';
50
+ export { default as AccordionDetails } from './Accordion/AccordionDetails.js';
51
+ export { default as Accordion } from './Accordion/Accordion.js';
52
+ export { default as BadgeContainer } from './Badge/BadgeContainer.js';
53
+ export { default as Badge } from './Badge/Badge.js';
54
+ export { default as CardActions } from './Card/CardActions.js';
55
+ export { default as Card } from './Card/Card.js';
56
+ export { default as Empty } from './Empty/Empty.js';
38
57
  export { default as TableRefresh } from './Table/refresh/TableRefresh.js';
39
58
  export { default as Table } from './Table/Table.js';
40
59
  export { default as Tag } from './Tag/Tag.js';
60
+ export { usePagination } from './Pagination/usePagination.js';
41
61
  export { default as PaginationItem } from './Pagination/PaginationItem.js';
42
62
  export { default as PaginationJumper } from './Pagination/PaginationJumper.js';
43
63
  export { default as Pagination } from './Pagination/Pagination.js';
64
+ export { toggleValue, toggleValueWithStatusControl, uniqueArray } from './Tree/toggleValue.js';
65
+ export { traverseTree } from './Tree/traverseTree.js';
66
+ export { useTreeExpandedValue } from './Tree/useTreeExpandedValue.js';
67
+ export { getTreeNodeEntities } from './Tree/getTreeNodeEntities.js';
44
68
  export { default as TreeNode } from './Tree/TreeNode.js';
45
69
  export { default as TreeNodeList } from './Tree/TreeNodeList.js';
46
70
  export { default as Tree } from './Tree/Tree.js';
71
+ export { default as CheckboxGroup } from './Checkbox/CheckboxGroup.js';
72
+ export { default as CheckAll } from './Checkbox/CheckAll.js';
73
+ export { default as Checkbox } from './Checkbox/Checkbox.js';
74
+ export { FormControlContext } from './Form/FormControlContext.js';
75
+ export { default as FormField } from './Form/FormField.js';
76
+ export { default as FormLabel } from './Form/FormLabel.js';
77
+ export { default as FormMessage } from './Form/FormMessage.js';
47
78
  export { default as Input } from './Input/Input.js';
48
79
  export { default as RadioGroup } from './Radio/RadioGroup.js';
49
80
  export { default as Radio } from './Radio/Radio.js';
50
81
  export { default as AutoComplete } from './Select/AutoComplete.js';
82
+ export { SelectControlContext } from './Select/SelectControlContext.js';
51
83
  export { default as SelectTrigger } from './Select/SelectTrigger.js';
52
84
  export { default as Option } from './Select/Option.js';
53
85
  export { default as TreeSelect } from './Select/TreeSelect.js';
@@ -56,12 +88,29 @@ export { default as Switch } from './Switch/Switch.js';
56
88
  export { default as Textarea } from './Textarea/Textarea.js';
57
89
  export { default as TextField } from './TextField/TextField.js';
58
90
  export { default as UploadButton } from './Upload/UploadButton.js';
91
+ export { default as UploadPicture } from './Upload/UploadPicture.js';
92
+ export { default as UploadPictureWall } from './Upload/UploadPictureWall.js';
59
93
  export { default as UploadResult } from './Upload/UploadResult.js';
94
+ export { useTabKeyClose } from './Picker/useTabKeyClose.js';
95
+ export { usePickerDocumentEventClose } from './Picker/usePickerDocumentEventClose.js';
96
+ export { usePickerValue } from './Picker/usePickerValue.js';
97
+ export { useRangePickerValue } from './Picker/useRangePickerValue.js';
60
98
  export { default as PickerTrigger } from './Picker/PickerTrigger.js';
61
99
  export { default as RangePickerTrigger } from './Picker/RangePickerTrigger.js';
100
+ export { default as DatePickerCalendar } from './DatePicker/DatePickerCalendar.js';
101
+ export { default as DatePicker } from './DatePicker/DatePicker.js';
102
+ export { useDateRangeCalendarControls } from './DateRangePicker/useDateRangeCalendarControls.js';
103
+ export { useDateRangePickerValue } from './DateRangePicker/useDateRangePickerValue.js';
104
+ export { default as DateRangePickerCalendar } from './DateRangePicker/DateRangePickerCalendar.js';
105
+ export { default as DateRangePicker } from './DateRangePicker/DateRangePicker.js';
62
106
  export { default as TimePickerPanel } from './TimePicker/TimePickerPanel.js';
63
107
  export { default as TimePicker } from './TimePicker/TimePicker.js';
108
+ export { default as DateTimePickerPanel } from './DateTimePicker/DateTimePickerPanel.js';
109
+ export { default as DateTimePicker } from './DateTimePicker/DateTimePicker.js';
110
+ export { useSlider } from './Slider/useSlider.js';
64
111
  export { default as Slider } from './Slider/Slider.js';
112
+ export { default as Alert } from './Alert/Alert.js';
113
+ export { default as ConfirmActions } from './ConfirmActions/ConfirmActions.js';
65
114
  export { default as Loading } from './Loading/Loading.js';
66
115
  export { default as Message } from './Message/Message.js';
67
116
  export { default as ModalHeader } from './Modal/ModalHeader.js';
@@ -77,61 +126,12 @@ export { default as Overlay } from './Overlay/Overlay.js';
77
126
  export { default as Popover } from './Popover/Popover.js';
78
127
  export { default as Popper } from './Popper/Popper.js';
79
128
  export { default as Portal } from './Portal/Portal.js';
80
- export { default as Transition } from './Transition/Transition.js';
81
129
  export { default as Collapse } from './Transition/Collapse.js';
82
130
  export { default as Fade } from './Transition/Fade.js';
83
131
  export { default as Grow } from './Transition/Grow.js';
84
132
  export { default as SlideFade } from './Transition/SlideFade.js';
85
133
  export { default as Zoom } from './Transition/Zoom.js';
86
134
  export { default as Tooltip } from './Tooltip/Tooltip.js';
87
- export { default as TimePanelAction } from './TimePanel/TimePanelAction.js';
88
- export { default as TimePanelColumn } from './TimePanel/TimePanelColumn.js';
89
- export { default as TimePanel } from './TimePanel/TimePanel.js';
90
- export { default as Button } from './Button/Button.js';
91
- export { default as ButtonGroup } from './Button/ButtonGroup.js';
92
- export { default as Icon } from './Icon/Icon.js';
93
- export { default as Drawer } from './Drawer/Drawer.js';
94
- export { default as Dropdown } from './Dropdown/Dropdown.js';
95
- export { default as AppBarBrand } from './AppBar/AppBarBrand.js';
96
- export { default as AppBarMain } from './AppBar/AppBarMain.js';
97
- export { default as AppBarSupport } from './AppBar/AppBarSupport.js';
98
- export { default as AppBar } from './AppBar/AppBar.js';
99
- export { default as AccordionSummary } from './Accordion/AccordionSummary.js';
100
- export { default as AccordionDetails } from './Accordion/AccordionDetails.js';
101
- export { default as Accordion } from './Accordion/Accordion.js';
102
- export { default as BadgeContainer } from './Badge/BadgeContainer.js';
103
- export { default as Badge } from './Badge/Badge.js';
104
- export { default as CardActions } from './Card/CardActions.js';
105
- export { default as Card } from './Card/Card.js';
106
- export { default as Empty } from './Empty/Empty.js';
107
- export { usePagination } from './Pagination/usePagination.js';
108
- export { toggleValue, toggleValueWithStatusControl, uniqueArray } from './Tree/toggleValue.js';
109
- export { traverseTree } from './Tree/traverseTree.js';
110
- export { useTreeExpandedValue } from './Tree/useTreeExpandedValue.js';
111
- export { getTreeNodeEntities } from './Tree/getTreeNodeEntities.js';
112
- export { default as CheckboxGroup } from './Checkbox/CheckboxGroup.js';
113
- export { default as CheckAll } from './Checkbox/CheckAll.js';
114
- export { default as Checkbox } from './Checkbox/Checkbox.js';
115
- export { FormControlContext } from './Form/FormControlContext.js';
116
- export { default as FormField } from './Form/FormField.js';
117
- export { default as FormLabel } from './Form/FormLabel.js';
118
- export { default as FormMessage } from './Form/FormMessage.js';
119
- export { SelectControlContext } from './Select/SelectControlContext.js';
120
- export { useTabKeyClose } from './Picker/useTabKeyClose.js';
121
- export { usePickerDocumentEventClose } from './Picker/usePickerDocumentEventClose.js';
122
- export { usePickerValue } from './Picker/usePickerValue.js';
123
- export { useRangePickerValue } from './Picker/useRangePickerValue.js';
124
- export { default as DatePickerCalendar } from './DatePicker/DatePickerCalendar.js';
125
- export { default as DatePicker } from './DatePicker/DatePicker.js';
126
- export { useDateRangeCalendarControls } from './DateRangePicker/useDateRangeCalendarControls.js';
127
- export { useDateRangePickerValue } from './DateRangePicker/useDateRangePickerValue.js';
128
- export { default as DateRangePickerCalendar } from './DateRangePicker/DateRangePickerCalendar.js';
129
- export { default as DateRangePicker } from './DateRangePicker/DateRangePicker.js';
130
- export { default as DateTimePickerPanel } from './DateTimePicker/DateTimePickerPanel.js';
131
- export { default as DateTimePicker } from './DateTimePicker/DateTimePicker.js';
132
- export { useSlider } from './Slider/useSlider.js';
133
- export { default as Alert } from './Alert/Alert.js';
134
- export { default as ConfirmActions } from './ConfirmActions/ConfirmActions.js';
135
135
  export { useCalendarControlModifiers } from './Calendar/useCalendarControlModifiers.js';
136
136
  export { useCalendarModeStack } from './Calendar/useCalendarModeStack.js';
137
137
  export { useCalendarControls } from './Calendar/useCalendarControls.js';
@@ -144,5 +144,8 @@ export { default as CalendarDayOfWeek } from './Calendar/CalendarDayOfWeek.js';
144
144
  export { default as CalendarControls } from './Calendar/CalendarControls.js';
145
145
  export { default as CalendarCell } from './Calendar/CalendarCell.js';
146
146
  export { default as Calendar } from './Calendar/Calendar.js';
147
+ export { default as TimePanelAction } from './TimePanel/TimePanelAction.js';
148
+ export { default as TimePanelColumn } from './TimePanel/TimePanelColumn.js';
149
+ export { default as TimePanel } from './TimePanel/TimePanel.js';
147
150
  export { default as cx } from 'clsx';
148
151
  export { createNotifier } from './Notifier/createNotifier.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mezzanine-ui/react",
3
- "version": "0.6.4",
3
+ "version": "0.7.3",
4
4
  "description": "React components for mezzanine-ui",
5
5
  "author": "Mezzanine",
6
6
  "repository": {
@@ -32,9 +32,9 @@
32
32
  "react-dom": "^17.0.1"
33
33
  },
34
34
  "dependencies": {
35
- "@mezzanine-ui/core": "^0.6.3",
36
- "@mezzanine-ui/icons": "^0.5.0",
37
- "@mezzanine-ui/system": "^0.5.2",
35
+ "@mezzanine-ui/core": "^0.7.3",
36
+ "@mezzanine-ui/icons": "^0.7.3",
37
+ "@mezzanine-ui/system": "^0.7.0",
38
38
  "@popperjs/core": "^2.9.2",
39
39
  "@types/react-transition-group": "4.4.1",
40
40
  "clsx": "^1.1.1",
@@ -43,7 +43,7 @@
43
43
  "tslib": "^2.1.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@storybook/react": "^6.3.4",
46
+ "@storybook/react": "^6.3.8",
47
47
  "@testing-library/react": "^11.2.5",
48
48
  "@testing-library/react-hooks": "^5.1.0",
49
49
  "@types/lodash": "^4.14.168",
@@ -51,7 +51,7 @@
51
51
  "@types/react": "^17.0.3",
52
52
  "@types/react-dom": "^17.0.2",
53
53
  "@types/react-test-renderer": "^17.0.1",
54
- "chromatic": "^5.9.2",
54
+ "chromatic": "^5.10.1",
55
55
  "lodash": "^4.17.21",
56
56
  "moment": "^2.29.1",
57
57
  "react": "^17.0.1",
@@ -3,3 +3,6 @@ export declare type PickRenameMulti<T, R extends {
3
3
  }> = {
4
4
  [P in keyof T as P extends keyof R ? R[P] : P]: T[P];
5
5
  };
6
+ export declare type ExtendedProperties<T> = {
7
+ [P in keyof T]: T[P];
8
+ };
@@ -1 +0,0 @@
1
- export declare function useIsTopModal(open?: boolean): () => boolean;