@superdispatch/ui 0.21.13 → 0.22.0

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 (234) hide show
  1. package/LICENSE +21 -0
  2. package/{pkg/dist-node → dist-node}/index.js +73 -25
  3. package/dist-node/index.js.map +1 -0
  4. package/{pkg/dist-src → dist-src}/index.js +1 -0
  5. package/dist-src/info-tooltip/InfoTooltip.js +54 -0
  6. package/{pkg/dist-src → dist-src}/theme/Color.js +11 -11
  7. package/{pkg/dist-types → dist-types}/index.d.ts +53 -13
  8. package/{pkg/dist-web → dist-web}/index.js +75 -28
  9. package/dist-web/index.js.map +1 -0
  10. package/package.json +13 -39
  11. package/.babelrc.js +0 -5
  12. package/.turbo/turbo-version.log +0 -28
  13. package/pkg/README.md +0 -30
  14. package/pkg/dist-node/index.js.map +0 -1
  15. package/pkg/dist-web/index.js.map +0 -1
  16. package/pkg/package.json +0 -39
  17. package/playroom.ts +0 -31
  18. package/src/__tests__/index.spec.ts +0 -134
  19. package/src/adaptive-toolbar/AdaptiveToolbar.stories.tsx +0 -50
  20. package/src/adaptive-toolbar/AdaptiveToolbar.tsx +0 -199
  21. package/src/adaptive-toolbar/__tests__/AdaptiveToolbar.spec.tsx +0 -11
  22. package/src/adaptive-vertical-toolbar/AdaptiveVerticalToolbar.stories.tsx +0 -49
  23. package/src/adaptive-vertical-toolbar/AdaptiveVerticalToolbar.tsx +0 -171
  24. package/src/app-bar/AppBar.stories.tsx +0 -62
  25. package/src/app-bar/AppBarOverrides.ts +0 -9
  26. package/src/app-bar/__tests__/AppBar.spec.tsx +0 -86
  27. package/src/autocomplete/Autocomplete.stories.tsx +0 -76
  28. package/src/autocomplete/AutocompleteOverrides.tsx +0 -58
  29. package/src/autocomplete/__tests__/Autocomplete.spec.tsx +0 -323
  30. package/src/avatar/Avatar.stories.tsx +0 -17
  31. package/src/avatar/AvatarOverrides.ts +0 -24
  32. package/src/avatar/__tests__/Avatar.spec.tsx +0 -71
  33. package/src/avatar-button/AvatarButton.stories.tsx +0 -153
  34. package/src/avatar-button/AvatarButton.tsx +0 -223
  35. package/src/avatar-button/__tests__/AvatarButton.spec.tsx +0 -126
  36. package/src/button/Button.tsx +0 -51
  37. package/src/button/ButtonOverrides.ts +0 -375
  38. package/src/button/__tests__/Button.spec.tsx +0 -599
  39. package/src/card/Card.stories.tsx +0 -39
  40. package/src/card/CardOverrides.ts +0 -9
  41. package/src/card/__tests__/Card.spec.tsx +0 -68
  42. package/src/card-button/CardButton.stories.tsx +0 -36
  43. package/src/card-button/CardButton.tsx +0 -202
  44. package/src/card-button/__tests__/CardButton.spec.tsx +0 -95
  45. package/src/checkbox/CheckboxField.stories.tsx +0 -61
  46. package/src/checkbox/CheckboxField.tsx +0 -56
  47. package/src/checkbox/CheckboxGroudField.tsx +0 -53
  48. package/src/checkbox/CheckboxOverrides.tsx +0 -55
  49. package/src/checkbox/__tests__/Checkbox.spec.tsx +0 -105
  50. package/src/chip/Chip.stories.tsx +0 -26
  51. package/src/chip/ChipOverrides.tsx +0 -111
  52. package/src/chip/__tests__/Chip.spec.tsx +0 -308
  53. package/src/columns/Column.tsx +0 -124
  54. package/src/columns/Columns.stories.tsx +0 -426
  55. package/src/columns/Columns.tsx +0 -76
  56. package/src/description-list/DescriptionList.spec.tsx +0 -137
  57. package/src/description-list/DescriptionList.stories.tsx +0 -148
  58. package/src/description-list/DescriptionList.tsx +0 -170
  59. package/src/dialog/Dialog.playroom.tsx +0 -24
  60. package/src/dialog/Dialog.stories.tsx +0 -60
  61. package/src/dialog/DialogOverrides.ts +0 -39
  62. package/src/dialog/__tests__/Dialog.spec.tsx +0 -219
  63. package/src/drawer/Drawer.playroom.tsx +0 -22
  64. package/src/drawer/Drawer.stories.tsx +0 -194
  65. package/src/drawer/DrawerActions.tsx +0 -69
  66. package/src/drawer/DrawerContent.tsx +0 -30
  67. package/src/drawer/DrawerList.tsx +0 -60
  68. package/src/drawer/DrawerOverrides.ts +0 -19
  69. package/src/drawer/DrawerTitle.tsx +0 -143
  70. package/src/drawer/__tests__/Drawer.spec.tsx +0 -227
  71. package/src/dropdown-button/DropdownButton.stories.tsx +0 -15
  72. package/src/dropdown-button/DropdownButton.tsx +0 -131
  73. package/src/grid/GridStack.tsx +0 -45
  74. package/src/grid/InlineGrid.tsx +0 -56
  75. package/src/icon-button/IconButton.stories.tsx +0 -53
  76. package/src/icon-button/IconButtonOverrides.ts +0 -32
  77. package/src/icon-button/__tests__/IconButton.spec.tsx +0 -124
  78. package/src/index.ts +0 -47
  79. package/src/info-card/InfoCard.stories.tsx +0 -29
  80. package/src/info-card/InfoCard.tsx +0 -95
  81. package/src/info-card/__tests__/InfoCard.spec.tsx +0 -22
  82. package/src/info-tooltip/InfoTooltip.stories.tsx +0 -77
  83. package/src/info-tooltip/InfoTooltip.tsx +0 -72
  84. package/src/info-tooltip/__tests__/InfoTooltip.spec.tsx +0 -166
  85. package/src/inline/Inline.stories.tsx +0 -135
  86. package/src/inline/Inline.tsx +0 -144
  87. package/src/link/Link.stories.tsx +0 -41
  88. package/src/link/LinkOverrides.ts +0 -43
  89. package/src/link/__tests__/Link.spec.tsx +0 -98
  90. package/src/list/ListOverrides.ts +0 -11
  91. package/src/list/__tests__/List.spec.tsx +0 -182
  92. package/src/menu/Menu.stories.tsx +0 -35
  93. package/src/menu/MenuOverrides.ts +0 -17
  94. package/src/menu/__tests__/Menu.spec.tsx +0 -99
  95. package/src/number-field/NumberField.stories.tsx +0 -123
  96. package/src/number-field/NumberField.tsx +0 -98
  97. package/src/overflow-text/OverflowText.stories.tsx +0 -32
  98. package/src/overflow-text/OverflowText.tsx +0 -114
  99. package/src/overflow-text/__tests__/OverflowText.spec.tsx +0 -24
  100. package/src/pagination/Pagination.stories.tsx +0 -36
  101. package/src/pagination/PaginationOverrides.ts +0 -47
  102. package/src/pagination/__tests__/Pagination.spec.tsx +0 -228
  103. package/src/paper/PaperOverrides.ts +0 -10
  104. package/src/paper/__tests__/Paper.spec.tsx +0 -155
  105. package/src/props/AlignProps.ts +0 -22
  106. package/src/props/CollapseProp.ts +0 -13
  107. package/src/props/ResponsiveProp.ts +0 -65
  108. package/src/props/SpaceProp.ts +0 -40
  109. package/src/radio/RadioField.stories.tsx +0 -42
  110. package/src/radio/RadioField.tsx +0 -55
  111. package/src/radio/RadioGroupField.tsx +0 -64
  112. package/src/radio/RadioOverrides.tsx +0 -51
  113. package/src/radio/__tests__/Radio.spec.tsx +0 -90
  114. package/src/responsive/CollapseBreakpoint.ts +0 -21
  115. package/src/responsive/MinBreakpoint.ts +0 -21
  116. package/src/responsive/ResponsiveContext.tsx +0 -57
  117. package/src/snackbar/Snackbar.stories.tsx +0 -196
  118. package/src/snackbar/Snackbar.tsx +0 -83
  119. package/src/snackbar/SnackbarContent.tsx +0 -147
  120. package/src/snackbar/SnackbarOverrides.ts +0 -23
  121. package/src/snackbar/SnackbarStack.tsx +0 -160
  122. package/src/snackbar/__tests__/Snackbar.spec.tsx +0 -196
  123. package/src/stack/Stack.stories.tsx +0 -113
  124. package/src/stack/Stack.tsx +0 -86
  125. package/src/svg-icon/SvgIcon.stories.tsx +0 -29
  126. package/src/svg-icon/SvgIconOverrides.ts +0 -32
  127. package/src/svg-icon/__tests__/SvgIcon.spec.tsx +0 -67
  128. package/src/switch/Switch.stories.tsx +0 -60
  129. package/src/switch/SwitchOverrides.ts +0 -88
  130. package/src/switch/__tests__/Switch.spec.tsx +0 -204
  131. package/src/tabs/Tabs.stories.tsx +0 -40
  132. package/src/tabs/TabsOverrides.ts +0 -45
  133. package/src/tabs/__tests__/Tabs.spec.tsx +0 -226
  134. package/src/tag/Tag.stories.tsx +0 -53
  135. package/src/tag/Tag.tsx +0 -130
  136. package/src/tag/__tests__/Tag.spec.tsx +0 -82
  137. package/src/text-field/TextField.stories.tsx +0 -50
  138. package/src/text-field/TextFieldOverrides.tsx +0 -149
  139. package/src/text-field/__tests__/TextField.spec.tsx +0 -662
  140. package/src/theme/Color.ts +0 -117
  141. package/src/theme/SuperDispatchTheme.ts +0 -3
  142. package/src/theme/ThemeProvider.tsx +0 -179
  143. package/src/theme/__tests__/CssBaseline.spec.tsx +0 -49
  144. package/src/theme/__tests__/ThemeProvider.spec.ts +0 -40
  145. package/src/theme/__tests__/__snapshots__/ThemeProvider.spec.ts.snap +0 -204
  146. package/src/tiles/Tiles.stories.tsx +0 -69
  147. package/src/tiles/Tiles.tsx +0 -163
  148. package/src/tiles/__tests__/Tiles.spec.tsx +0 -221
  149. package/src/toolbar/ToolbarOverrides.ts +0 -14
  150. package/src/toolbar/__tests__/Toolbar.spec.tsx +0 -50
  151. package/src/tooltip/Tooltip.stories.tsx +0 -32
  152. package/src/tooltip/TooltipOverrides.ts +0 -34
  153. package/src/tooltip/__tests__/Tooltip.spec.tsx +0 -182
  154. package/src/typography/Typography.stories.tsx +0 -132
  155. package/src/typography/TypographyOverrides.ts +0 -125
  156. package/src/typography/__tests__/Typography.spec.tsx +0 -253
  157. package/src/utils/ExitTransitionPlaceholder.tsx +0 -22
  158. package/src/utils/ResizeObserver.tsx +0 -28
  159. package/src/utils/VisibilityObserver.tsx +0 -75
  160. package/src/utils/__tests__/ExitTransitionPlaceholder.spec.tsx +0 -34
  161. package/src/utils/isEmptyReactNode.ts +0 -11
  162. package/src/utils/mergeRefs.ts +0 -21
  163. package/src/utils/renderChildren.ts +0 -10
  164. package/src/utils/useUID.ts +0 -9
  165. package/tsconfig.json +0 -19
  166. /package/{pkg/dist-src → dist-src}/adaptive-toolbar/AdaptiveToolbar.js +0 -0
  167. /package/{pkg/dist-src → dist-src}/adaptive-vertical-toolbar/AdaptiveVerticalToolbar.js +0 -0
  168. /package/{pkg/dist-src → dist-src}/app-bar/AppBarOverrides.js +0 -0
  169. /package/{pkg/dist-src → dist-src}/autocomplete/AutocompleteOverrides.js +0 -0
  170. /package/{pkg/dist-src → dist-src}/avatar/AvatarOverrides.js +0 -0
  171. /package/{pkg/dist-src → dist-src}/avatar-button/AvatarButton.js +0 -0
  172. /package/{pkg/dist-src → dist-src}/button/Button.js +0 -0
  173. /package/{pkg/dist-src → dist-src}/button/ButtonOverrides.js +0 -0
  174. /package/{pkg/dist-src → dist-src}/card/CardOverrides.js +0 -0
  175. /package/{pkg/dist-src → dist-src}/card-button/CardButton.js +0 -0
  176. /package/{pkg/dist-src → dist-src}/checkbox/CheckboxField.js +0 -0
  177. /package/{pkg/dist-src → dist-src}/checkbox/CheckboxGroudField.js +0 -0
  178. /package/{pkg/dist-src → dist-src}/checkbox/CheckboxOverrides.js +0 -0
  179. /package/{pkg/dist-src → dist-src}/chip/ChipOverrides.js +0 -0
  180. /package/{pkg/dist-src → dist-src}/columns/Column.js +0 -0
  181. /package/{pkg/dist-src → dist-src}/columns/Columns.js +0 -0
  182. /package/{pkg/dist-src → dist-src}/description-list/DescriptionList.js +0 -0
  183. /package/{pkg/dist-src → dist-src}/dialog/DialogOverrides.js +0 -0
  184. /package/{pkg/dist-src → dist-src}/drawer/DrawerActions.js +0 -0
  185. /package/{pkg/dist-src → dist-src}/drawer/DrawerContent.js +0 -0
  186. /package/{pkg/dist-src → dist-src}/drawer/DrawerList.js +0 -0
  187. /package/{pkg/dist-src → dist-src}/drawer/DrawerOverrides.js +0 -0
  188. /package/{pkg/dist-src → dist-src}/drawer/DrawerTitle.js +0 -0
  189. /package/{pkg/dist-src → dist-src}/dropdown-button/DropdownButton.js +0 -0
  190. /package/{pkg/dist-src → dist-src}/grid/GridStack.js +0 -0
  191. /package/{pkg/dist-src → dist-src}/grid/InlineGrid.js +0 -0
  192. /package/{pkg/dist-src → dist-src}/icon-button/IconButtonOverrides.js +0 -0
  193. /package/{pkg/dist-src → dist-src}/info-card/InfoCard.js +0 -0
  194. /package/{pkg/dist-src → dist-src}/inline/Inline.js +0 -0
  195. /package/{pkg/dist-src → dist-src}/link/LinkOverrides.js +0 -0
  196. /package/{pkg/dist-src → dist-src}/list/ListOverrides.js +0 -0
  197. /package/{pkg/dist-src → dist-src}/menu/MenuOverrides.js +0 -0
  198. /package/{pkg/dist-src → dist-src}/number-field/NumberField.js +0 -0
  199. /package/{pkg/dist-src → dist-src}/overflow-text/OverflowText.js +0 -0
  200. /package/{pkg/dist-src → dist-src}/pagination/PaginationOverrides.js +0 -0
  201. /package/{pkg/dist-src → dist-src}/paper/PaperOverrides.js +0 -0
  202. /package/{pkg/dist-src → dist-src}/props/AlignProps.js +0 -0
  203. /package/{pkg/dist-src → dist-src}/props/CollapseProp.js +0 -0
  204. /package/{pkg/dist-src → dist-src}/props/ResponsiveProp.js +0 -0
  205. /package/{pkg/dist-src → dist-src}/props/SpaceProp.js +0 -0
  206. /package/{pkg/dist-src → dist-src}/radio/RadioField.js +0 -0
  207. /package/{pkg/dist-src → dist-src}/radio/RadioGroupField.js +0 -0
  208. /package/{pkg/dist-src → dist-src}/radio/RadioOverrides.js +0 -0
  209. /package/{pkg/dist-src → dist-src}/responsive/CollapseBreakpoint.js +0 -0
  210. /package/{pkg/dist-src → dist-src}/responsive/MinBreakpoint.js +0 -0
  211. /package/{pkg/dist-src → dist-src}/responsive/ResponsiveContext.js +0 -0
  212. /package/{pkg/dist-src → dist-src}/snackbar/Snackbar.js +0 -0
  213. /package/{pkg/dist-src → dist-src}/snackbar/SnackbarContent.js +0 -0
  214. /package/{pkg/dist-src → dist-src}/snackbar/SnackbarOverrides.js +0 -0
  215. /package/{pkg/dist-src → dist-src}/snackbar/SnackbarStack.js +0 -0
  216. /package/{pkg/dist-src → dist-src}/stack/Stack.js +0 -0
  217. /package/{pkg/dist-src → dist-src}/svg-icon/SvgIconOverrides.js +0 -0
  218. /package/{pkg/dist-src → dist-src}/switch/SwitchOverrides.js +0 -0
  219. /package/{pkg/dist-src → dist-src}/tabs/TabsOverrides.js +0 -0
  220. /package/{pkg/dist-src → dist-src}/tag/Tag.js +0 -0
  221. /package/{pkg/dist-src → dist-src}/text-field/TextFieldOverrides.js +0 -0
  222. /package/{pkg/dist-src → dist-src}/theme/SuperDispatchTheme.js +0 -0
  223. /package/{pkg/dist-src → dist-src}/theme/ThemeProvider.js +0 -0
  224. /package/{pkg/dist-src → dist-src}/tiles/Tiles.js +0 -0
  225. /package/{pkg/dist-src → dist-src}/toolbar/ToolbarOverrides.js +0 -0
  226. /package/{pkg/dist-src → dist-src}/tooltip/TooltipOverrides.js +0 -0
  227. /package/{pkg/dist-src → dist-src}/typography/TypographyOverrides.js +0 -0
  228. /package/{pkg/dist-src → dist-src}/utils/ExitTransitionPlaceholder.js +0 -0
  229. /package/{pkg/dist-src → dist-src}/utils/ResizeObserver.js +0 -0
  230. /package/{pkg/dist-src → dist-src}/utils/VisibilityObserver.js +0 -0
  231. /package/{pkg/dist-src → dist-src}/utils/isEmptyReactNode.js +0 -0
  232. /package/{pkg/dist-src → dist-src}/utils/mergeRefs.js +0 -0
  233. /package/{pkg/dist-src → dist-src}/utils/renderChildren.js +0 -0
  234. /package/{pkg/dist-src → dist-src}/utils/useUID.js +0 -0
@@ -1,57 +0,0 @@
1
- import { useMediaQuery } from '@material-ui/core';
2
- import type { Breakpoint } from '@material-ui/core/styles/createBreakpoints';
3
- import {
4
- createContext,
5
- ReactElement,
6
- ReactNode,
7
- useContext,
8
- useMemo,
9
- } from 'react';
10
- import { SuperDispatchTheme } from '../theme/SuperDispatchTheme';
11
-
12
- export interface ResponsiveContext {
13
- breakpoint?: Breakpoint;
14
- }
15
-
16
- const Context = createContext<ResponsiveContext>({});
17
-
18
- function useBreakpoint(breakpoint: Breakpoint): boolean {
19
- return useMediaQuery<SuperDispatchTheme>((theme) =>
20
- theme.breakpoints.only(breakpoint),
21
- );
22
- }
23
-
24
- export interface ResponsiveContextProviderProps {
25
- children?: ReactNode;
26
- defaultBreakpoint?: Breakpoint;
27
- }
28
-
29
- export function ResponsiveContextProvider({
30
- children,
31
- defaultBreakpoint,
32
- }: ResponsiveContextProviderProps): ReactElement {
33
- const isXS = useBreakpoint('xs');
34
- const isSM = useBreakpoint('sm');
35
- const isMD = useBreakpoint('md');
36
- const isLG = useBreakpoint('lg');
37
- const isXL = useBreakpoint('xl');
38
- const breakpoint: undefined | Breakpoint = isXS
39
- ? 'xs'
40
- : isSM
41
- ? 'sm'
42
- : isMD
43
- ? 'md'
44
- : isLG
45
- ? 'lg'
46
- : isXL
47
- ? 'xl'
48
- : defaultBreakpoint;
49
-
50
- const ctx = useMemo<ResponsiveContext>(() => ({ breakpoint }), [breakpoint]);
51
-
52
- return <Context.Provider value={ctx}>{children}</Context.Provider>;
53
- }
54
-
55
- export function useResponsiveContext(): ResponsiveContext {
56
- return useContext(Context);
57
- }
@@ -1,196 +0,0 @@
1
- import { FormControlLabel, FormGroup, Switch } from '@material-ui/core';
2
- import { UseState } from '@superdispatch/ui-docs';
3
- import {
4
- Button,
5
- Inline,
6
- Snackbar,
7
- SnackbarContent,
8
- SnackbarStackConsumer,
9
- } from '..';
10
-
11
- export default {
12
- title: 'Feedback/Snackbar',
13
- component: Snackbar,
14
- subcomponents: { SnackbarContent },
15
- };
16
-
17
- export const basic = () => (
18
- <UseState initialState={false}>
19
- {(open, setOpen) => (
20
- <>
21
- <Button
22
- onClick={() => {
23
- setOpen(!open);
24
- }}
25
- >
26
- Toggle snackbar visibility
27
- </Button>
28
-
29
- <Snackbar open={open}>This is a basic snackbar</Snackbar>
30
- </>
31
- )}
32
- </UseState>
33
- );
34
-
35
- export const closable = () => (
36
- <UseState initialState={false}>
37
- {(open, setOpen) => (
38
- <>
39
- <Button
40
- onClick={() => {
41
- setOpen(!open);
42
- }}
43
- >
44
- Toggle snackbar visibility
45
- </Button>
46
-
47
- <Snackbar
48
- open={open}
49
- onClose={() => {
50
- setOpen(false);
51
- }}
52
- >
53
- This snackbar has a close button
54
- </Snackbar>
55
- </>
56
- )}
57
- </UseState>
58
- );
59
-
60
- export const variants = () => (
61
- <UseState initialState={{}}>
62
- {(props, setProps) => (
63
- <>
64
- <FormGroup row={true}>
65
- <FormControlLabel
66
- label="Default"
67
- control={<Switch />}
68
- checked={!!props.open && !props.variant}
69
- onChange={(_, checked) => {
70
- setProps({
71
- ...props,
72
- open: checked,
73
- variant: undefined,
74
- });
75
- }}
76
- />
77
-
78
- <FormControlLabel
79
- label="Success"
80
- control={<Switch />}
81
- checked={props.variant === 'success'}
82
- onChange={(_, checked) => {
83
- setProps({
84
- ...props,
85
- open: checked,
86
- variant: checked ? 'success' : undefined,
87
- });
88
- }}
89
- />
90
-
91
- <FormControlLabel
92
- label="Error"
93
- control={<Switch />}
94
- checked={props.variant === 'error'}
95
- onChange={(_, checked) => {
96
- setProps({
97
- ...props,
98
- open: checked,
99
- variant: checked ? 'error' : undefined,
100
- });
101
- }}
102
- />
103
- </FormGroup>
104
-
105
- <Snackbar {...props}>This is snackbar content</Snackbar>
106
- </>
107
- )}
108
- </UseState>
109
- );
110
-
111
- export const stack = () => (
112
- <SnackbarStackConsumer>
113
- {({ addSnackbar, clearStack }) => {
114
- const getTime = () => new Date().toISOString().slice(11, 23);
115
-
116
- return (
117
- <Inline>
118
- <Button
119
- onClick={() => {
120
- addSnackbar(`This is default snackbar (${getTime()})`);
121
- }}
122
- >
123
- Add default snackbar
124
- </Button>
125
- <Button
126
- onClick={() => {
127
- addSnackbar(`This is success snackbar (${getTime()})`, {
128
- variant: 'success',
129
- });
130
- }}
131
- >
132
- Add success snackbar
133
- </Button>
134
- <Button
135
- onClick={() => {
136
- addSnackbar(`This is error snackbar (${getTime()})`, {
137
- variant: 'error',
138
- });
139
- }}
140
- >
141
- Add error snackbar
142
- </Button>
143
-
144
- <Button
145
- onClick={() => {
146
- clearStack();
147
- }}
148
- >
149
- Clear stack
150
- </Button>
151
- </Inline>
152
- );
153
- }}
154
- </SnackbarStackConsumer>
155
- );
156
-
157
- export const undoable = () => (
158
- <SnackbarStackConsumer>
159
- {({ addSnackbar, clearStack }) => (
160
- <Button
161
- onClick={() => {
162
- clearStack();
163
-
164
- const trxID = Math.random().toString(32).slice(2, 8).toUpperCase();
165
- const closeSnackbar = addSnackbar(
166
- <span>
167
- Transaction <strong>#{trxID}</strong> confirmed
168
- </span>,
169
- {
170
- variant: 'success',
171
- action: (
172
- <Button
173
- size="small"
174
- color="white"
175
- variant="contained"
176
- onClick={() => {
177
- closeSnackbar();
178
- addSnackbar(
179
- <span>
180
- Transaction <strong>#{trxID}</strong> rejected
181
- </span>,
182
- );
183
- }}
184
- >
185
- Reject
186
- </Button>
187
- ),
188
- },
189
- );
190
- }}
191
- >
192
- Confirm transaction
193
- </Button>
194
- )}
195
- </SnackbarStackConsumer>
196
- );
@@ -1,83 +0,0 @@
1
- import {
2
- Portal,
3
- Slide,
4
- Snackbar as MaterialSnackbar,
5
- SnackbarCloseReason as MaterialSnackbarCloseReason,
6
- SnackbarProps as MaterialSnackbarProps,
7
- } from '@material-ui/core';
8
- import { TransitionProps } from '@material-ui/core/transitions';
9
- import {
10
- forwardRef,
11
- ForwardRefExoticComponent,
12
- ReactElement,
13
- ReactNode,
14
- } from 'react';
15
- import { SnackbarContent, SnackbarVariant } from './SnackbarContent';
16
-
17
- function SlideTransition(props: TransitionProps): ReactElement {
18
- return <Slide {...props} direction="up" />;
19
- }
20
-
21
- export type SnackbarCloseReason = 'timeout' | 'explicit';
22
-
23
- export interface SnackbarProps
24
- extends Omit<MaterialSnackbarProps, 'onClose' | 'message' | 'children'> {
25
- children?: ReactNode;
26
- variant?: SnackbarVariant;
27
- hasCloseButton?: boolean;
28
- onClose?: (reason: SnackbarCloseReason) => void;
29
- }
30
-
31
- export const Snackbar: ForwardRefExoticComponent<SnackbarProps> = forwardRef(
32
- (
33
- {
34
- open,
35
- action,
36
- variant,
37
- onClose,
38
- children,
39
- ContentProps,
40
- hasCloseButton = onClose != null,
41
- TransitionComponent = SlideTransition,
42
- ...props
43
- },
44
- ref,
45
- ) => {
46
- function handleClose(
47
- reason: SnackbarCloseReason | MaterialSnackbarCloseReason,
48
- ): void {
49
- if (reason !== 'clickaway') {
50
- onClose?.(reason === 'timeout' ? 'timeout' : 'explicit');
51
- }
52
- }
53
-
54
- return (
55
- <Portal>
56
- <MaterialSnackbar
57
- {...props}
58
- ref={ref}
59
- open={open}
60
- TransitionComponent={TransitionComponent}
61
- onClose={(_, reason) => {
62
- handleClose(reason);
63
- }}
64
- >
65
- <SnackbarContent
66
- {...ContentProps}
67
- action={action}
68
- variant={variant}
69
- onClose={
70
- !hasCloseButton
71
- ? undefined
72
- : () => {
73
- handleClose('explicit');
74
- }
75
- }
76
- >
77
- {children}
78
- </SnackbarContent>
79
- </MaterialSnackbar>
80
- </Portal>
81
- );
82
- },
83
- );
@@ -1,147 +0,0 @@
1
- import {
2
- Grid,
3
- IconButton,
4
- SnackbarContent as MuiSnackbarContent,
5
- SnackbarContentClassKey as MuiSnackbarContentClassKey,
6
- SnackbarContentProps as MuiSnackbarContentProps,
7
- Theme,
8
- } from '@material-ui/core';
9
- import { CheckCircle, Close, Warning } from '@material-ui/icons';
10
- import { ClassNameMap, makeStyles } from '@material-ui/styles';
11
- import clsx from 'clsx';
12
- import {
13
- forwardRef,
14
- ForwardRefExoticComponent,
15
- ReactNode,
16
- RefAttributes,
17
- } from 'react';
18
- import { Color } from '../theme/Color';
19
-
20
- type SnackbarContentClassKey =
21
- | MuiSnackbarContentClassKey
22
- | 'icon'
23
- | 'closeButton'
24
- | 'variantError'
25
- | 'variantSuccess';
26
-
27
- const useStyles = makeStyles<
28
- Theme,
29
- { classes?: Partial<ClassNameMap<SnackbarContentClassKey>> },
30
- SnackbarContentClassKey
31
- >(
32
- (theme) => ({
33
- root: {
34
- color: Color.White,
35
- backgroundColor: Color.Dark500,
36
- '&$variantError': {
37
- color: Color.White,
38
- backgroundColor: Color.Red500,
39
- },
40
- },
41
-
42
- action: {
43
- paddingLeft: theme.spacing(1),
44
- },
45
-
46
- message: {
47
- alignItems: 'center',
48
- [theme.breakpoints.down('xs')]: {
49
- fontSize: theme.spacing(2),
50
- },
51
- },
52
-
53
- icon: {
54
- marginRight: theme.spacing(1),
55
- fontSize: theme.spacing(3),
56
- },
57
-
58
- closeButton: {
59
- color: Color.White40,
60
- '&:hover, &:focus': {
61
- backgroundColor: Color.White08,
62
- color: Color.White40,
63
- },
64
- },
65
-
66
- variantError: {},
67
- variantSuccess: {},
68
- }),
69
- { name: 'SD-SnackbarContent' },
70
- );
71
- export type SnackbarVariant = 'default' | 'error' | 'success';
72
-
73
- export interface SnackbarContentProps
74
- extends RefAttributes<unknown>,
75
- Omit<MuiSnackbarContentProps, 'classes' | 'message' | 'variant'> {
76
- children?: ReactNode;
77
- onClose?: () => void;
78
- variant?: SnackbarVariant;
79
- classes?: Partial<ClassNameMap<SnackbarContentClassKey>>;
80
- }
81
-
82
- export const SnackbarContent: ForwardRefExoticComponent<SnackbarContentProps> =
83
- forwardRef(
84
- (
85
- {
86
- action,
87
- children,
88
- onClose,
89
- className,
90
- classes,
91
- variant = 'default',
92
- ...props
93
- },
94
- ref,
95
- ) => {
96
- const { icon, closeButton, variantError, variantSuccess, ...styles } =
97
- useStyles({ classes });
98
- const Icon =
99
- variant === 'error'
100
- ? Warning
101
- : variant === 'success'
102
- ? CheckCircle
103
- : undefined;
104
-
105
- return (
106
- <MuiSnackbarContent
107
- {...props}
108
- ref={ref}
109
- classes={styles}
110
- className={clsx(className, {
111
- [variantError]: variant === 'error',
112
- [variantSuccess]: variant === 'success',
113
- })}
114
- message={
115
- <>
116
- {Icon && <Icon className={icon} />}
117
- {children}
118
- </>
119
- }
120
- action={
121
- !action && !onClose ? null : (
122
- <Grid
123
- container={true}
124
- spacing={1}
125
- alignItems="center"
126
- wrap="nowrap"
127
- >
128
- {!!action && <Grid item={true}>{action}</Grid>}
129
-
130
- {onClose && (
131
- <Grid item={true}>
132
- <IconButton
133
- aria-label="close"
134
- onClick={onClose}
135
- className={closeButton}
136
- >
137
- <Close fontSize="small" />
138
- </IconButton>
139
- </Grid>
140
- )}
141
- </Grid>
142
- )
143
- }
144
- />
145
- );
146
- },
147
- );
@@ -1,23 +0,0 @@
1
- import { SuperDispatchTheme } from '../theme/SuperDispatchTheme';
2
-
3
- export function overrideSnackbar(theme: SuperDispatchTheme): void {
4
- theme.overrides.MuiSnackbar = {
5
- anchorOriginBottomCenter: { left: 0, right: 0, bottom: 0 },
6
- };
7
-
8
- theme.overrides.MuiSnackbarContent = {
9
- root: {
10
- width: '100%',
11
- borderRadius: 0,
12
- minHeight: theme.spacing(7.5),
13
-
14
- [theme.breakpoints.up('sm')]: {
15
- width: theme.spacing(54),
16
- maxWidth: theme.spacing(54),
17
- borderRadius: theme.spacing(0.5),
18
- },
19
- },
20
-
21
- message: { flex: 1, display: 'flex' },
22
- };
23
- }
@@ -1,160 +0,0 @@
1
- import { useDeepEqualMemo } from '@superdispatch/hooks';
2
- import {
3
- ConsumerProps,
4
- createContext,
5
- Key,
6
- ReactElement,
7
- ReactNode,
8
- useCallback,
9
- useContext,
10
- useMemo,
11
- useRef,
12
- useState,
13
- } from 'react';
14
- import { Snackbar, SnackbarProps } from './Snackbar';
15
-
16
- export interface SnackbarStackOptions
17
- extends Omit<SnackbarProps, 'open' | 'children'> {
18
- key?: Key;
19
- }
20
-
21
- export interface SnackbarStack {
22
- clearStack: () => void;
23
- addSnackbar: (
24
- message: ReactNode,
25
- options?: SnackbarStackOptions,
26
- ) => () => void;
27
- }
28
-
29
- function warnContext(): void {
30
- // eslint-disable-next-line no-console
31
- console.log('`useSnackbarStack` is used outside of `SnackbarStackProvider`.');
32
- }
33
-
34
- const Context = createContext<SnackbarStack>({
35
- clearStack: warnContext,
36
- addSnackbar: () => {
37
- warnContext();
38
-
39
- return warnContext;
40
- },
41
- });
42
-
43
- export function useSnackbarStack(): SnackbarStack {
44
- return useContext(Context);
45
- }
46
-
47
- export function SnackbarStackConsumer({
48
- children,
49
- }: ConsumerProps<SnackbarStack>): ReactElement {
50
- return <Context.Consumer>{children}</Context.Consumer>;
51
- }
52
-
53
- const TRANSIENT_KEY = '@@transient@@';
54
-
55
- export interface SnackbarStackProviderProps {
56
- children: ReactNode;
57
- }
58
-
59
- export function SnackbarStackProvider({
60
- children,
61
- }: SnackbarStackProviderProps): ReactElement {
62
- const [stack, setStack] = useState(new Map<Key, SnackbarProps>());
63
- const transientKeyRef = useRef(0);
64
- const getNextTransientKey = useCallback(
65
- () => TRANSIENT_KEY + String((transientKeyRef.current += 1)),
66
- [],
67
- );
68
-
69
- const clearStack = useCallback<SnackbarStack['clearStack']>(() => {
70
- setStack((x) => (x.size === 0 ? x : new Map()));
71
- }, []);
72
-
73
- const addSnackbar = useCallback<SnackbarStack['addSnackbar']>(
74
- (
75
- message,
76
- {
77
- onClose,
78
- variant,
79
- key = variant !== 'error'
80
- ? // We don't want non error snackbars without key to pop back.
81
- getNextTransientKey()
82
- : typeof message === 'string'
83
- ? message
84
- : Math.random(),
85
- id = String(key),
86
- autoHideDuration = 5000,
87
- ...props
88
- }: SnackbarStackOptions = {},
89
- ) => {
90
- function removeSnackbar(): void {
91
- setStack((prev) => {
92
- if (prev.has(key)) {
93
- const next = new Map(prev);
94
-
95
- next.delete(key);
96
-
97
- return next;
98
- }
99
-
100
- return prev;
101
- });
102
- }
103
-
104
- setStack((prev) => {
105
- const next = new Map(prev);
106
-
107
- for (const prevKey of prev.keys()) {
108
- // Ensure that we insert value to the end of the map.
109
- if (Object.is(key, prevKey)) {
110
- next.delete(key);
111
- }
112
-
113
- // Ensure that transient snackbar will not pop back.
114
- if (typeof prevKey == 'string' && prevKey.startsWith(TRANSIENT_KEY)) {
115
- next.delete(prevKey);
116
- }
117
- }
118
-
119
- return next.set(key, {
120
- ...props,
121
- id,
122
- key,
123
- variant,
124
- autoHideDuration,
125
- children: message,
126
-
127
- onClose: (reason) => {
128
- removeSnackbar();
129
- onClose?.(reason);
130
- },
131
- });
132
- });
133
-
134
- return removeSnackbar;
135
- },
136
- [getNextTransientKey],
137
- );
138
-
139
- const snackbarProps = useDeepEqualMemo<SnackbarProps>(
140
- (prev) => {
141
- const next = Array.from(stack.values()).pop();
142
-
143
- return next ? { ...next, open: true } : { ...prev, open: false };
144
- },
145
- [stack],
146
- );
147
-
148
- const api = useMemo<SnackbarStack>(
149
- () => ({ clearStack, addSnackbar }),
150
- [clearStack, addSnackbar],
151
- );
152
-
153
- return (
154
- <Context.Provider value={api}>
155
- {children}
156
-
157
- <Snackbar {...snackbarProps} />
158
- </Context.Provider>
159
- );
160
- }