@saas-ui/modals 2.0.0-next.1 → 2.0.0-next.10
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.
- package/CHANGELOG.md +76 -0
- package/dist/index.d.ts +77 -26
- package/dist/index.js +196 -119
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +195 -120
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
- package/src/create-modals.tsx +34 -0
- package/src/default-modals.ts +14 -0
- package/src/form.tsx +14 -9
- package/src/index.ts +2 -0
- package/src/menu.tsx +12 -1
- package/src/modal.tsx +43 -8
- package/src/provider.tsx +61 -48
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,74 @@
|
|
1
1
|
# @saas-ui/modals
|
2
2
|
|
3
|
+
## 2.0.0-next.10
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- @saas-ui/forms@2.0.0-next.10
|
8
|
+
|
9
|
+
## 2.0.0-next.9
|
10
|
+
|
11
|
+
### Minor Changes
|
12
|
+
|
13
|
+
- 84e59fec: Added new createModals method to create typesafe modals managers with support for custom modals
|
14
|
+
- 1177329d: BaseModal now accepts header, content and footer props
|
15
|
+
|
16
|
+
### Patch Changes
|
17
|
+
|
18
|
+
- Updated dependencies [84e59fec]
|
19
|
+
- @saas-ui/forms@2.0.0-next.9
|
20
|
+
|
21
|
+
## 2.0.0-next.8
|
22
|
+
|
23
|
+
### Patch Changes
|
24
|
+
|
25
|
+
- Updated dependencies [6d3f5717]
|
26
|
+
- @saas-ui/forms@2.0.0-next.8
|
27
|
+
|
28
|
+
## 2.0.0-next.7
|
29
|
+
|
30
|
+
### Patch Changes
|
31
|
+
|
32
|
+
- @saas-ui/forms@2.0.0-next.7
|
33
|
+
|
34
|
+
## 2.0.0-next.6
|
35
|
+
|
36
|
+
### Patch Changes
|
37
|
+
|
38
|
+
- Updated dependencies [532011d6]
|
39
|
+
- Updated dependencies [532011d6]
|
40
|
+
- Updated dependencies [6dd737ce]
|
41
|
+
- Updated dependencies [c85541cb]
|
42
|
+
- Updated dependencies [39e778d8]
|
43
|
+
- @saas-ui/forms@2.0.0-next.6
|
44
|
+
|
45
|
+
## 2.0.0-next.5
|
46
|
+
|
47
|
+
### Patch Changes
|
48
|
+
|
49
|
+
- Updated dependencies [a8ea24da]
|
50
|
+
- @saas-ui/forms@2.0.0-next.5
|
51
|
+
|
52
|
+
## 2.0.0-next.4
|
53
|
+
|
54
|
+
### Patch Changes
|
55
|
+
|
56
|
+
- Updated dependencies [27a68bca]
|
57
|
+
- @saas-ui/hooks@2.0.0-next.2
|
58
|
+
- @saas-ui/forms@2.0.0-next.4
|
59
|
+
|
60
|
+
## 2.0.0-next.3
|
61
|
+
|
62
|
+
### Patch Changes
|
63
|
+
|
64
|
+
- @saas-ui/forms@2.0.0-next.3
|
65
|
+
|
66
|
+
## 2.0.0-next.2
|
67
|
+
|
68
|
+
### Patch Changes
|
69
|
+
|
70
|
+
- @saas-ui/forms@2.0.0-next.2
|
71
|
+
|
3
72
|
## 2.0.0-next.1
|
4
73
|
|
5
74
|
### Patch Changes
|
@@ -27,6 +96,13 @@
|
|
27
96
|
- @saas-ui/hooks@2.0.0-next.0
|
28
97
|
- @saas-ui/react-utils@2.0.0-next.0
|
29
98
|
|
99
|
+
## 1.5.5
|
100
|
+
|
101
|
+
### Patch Changes
|
102
|
+
|
103
|
+
- Updated dependencies [382e095]
|
104
|
+
- @saas-ui/forms@1.5.3
|
105
|
+
|
30
106
|
## 1.5.4
|
31
107
|
|
32
108
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import { AlertDialogProps, ButtonProps, ButtonGroupProps, DrawerProps as DrawerProps$1, ModalProps, MenuListProps } from '@chakra-ui/react';
|
2
|
+
import { AlertDialogProps, ButtonProps, ButtonGroupProps, DrawerProps as DrawerProps$1, ModalProps, ModalHeaderProps, ModalContentProps, ModalFooterProps, MenuListProps } from '@chakra-ui/react';
|
3
|
+
import { MaybeRenderProp } from '@chakra-ui/react-utils';
|
3
4
|
import * as _chakra_ui_system_dist_system_types from '@chakra-ui/system/dist/system.types';
|
4
|
-
import
|
5
|
+
import * as _saas_ui_forms from '@saas-ui/forms';
|
6
|
+
import { FieldValues, FieldProps, FormProps, FieldResolver } from '@saas-ui/forms';
|
7
|
+
import * as react_hook_form from 'react-hook-form';
|
5
8
|
|
6
9
|
interface ConfirmDialogProps extends Omit<AlertDialogProps, 'leastDestructiveRef'> {
|
7
10
|
/**
|
@@ -78,11 +81,18 @@ interface DrawerProps extends BaseDrawerProps {
|
|
78
81
|
}
|
79
82
|
declare const Drawer: React.FC<DrawerProps>;
|
80
83
|
|
81
|
-
interface BaseModalProps extends ModalProps {
|
84
|
+
interface BaseModalProps extends Omit<ModalProps, 'children'> {
|
82
85
|
/**
|
83
86
|
* The modal title
|
84
87
|
*/
|
85
88
|
title?: React.ReactNode;
|
89
|
+
/**
|
90
|
+
* The modal children
|
91
|
+
*/
|
92
|
+
children: MaybeRenderProp<{
|
93
|
+
isOpen: boolean;
|
94
|
+
onClose: () => void;
|
95
|
+
}>;
|
86
96
|
/**
|
87
97
|
* The modal footer
|
88
98
|
*/
|
@@ -95,6 +105,18 @@ interface BaseModalProps extends ModalProps {
|
|
95
105
|
* Hide the overlay
|
96
106
|
*/
|
97
107
|
hideOverlay?: boolean;
|
108
|
+
/**
|
109
|
+
* Props for the modal header
|
110
|
+
*/
|
111
|
+
headerProps?: ModalHeaderProps;
|
112
|
+
/**
|
113
|
+
* Props for the modal content
|
114
|
+
*/
|
115
|
+
contentProps?: ModalContentProps;
|
116
|
+
/**
|
117
|
+
* Props for the modal footer
|
118
|
+
*/
|
119
|
+
footerProps?: ModalFooterProps;
|
98
120
|
}
|
99
121
|
declare const BaseModal: React.FC<BaseModalProps>;
|
100
122
|
declare const Modal: React.FC<BaseModalProps>;
|
@@ -110,7 +132,7 @@ interface MenuDialogListProps extends Omit<BaseModalProps, 'isOpen' | 'onClose'
|
|
110
132
|
}
|
111
133
|
declare const MenuDialogList: _chakra_ui_system_dist_system_types.ComponentWithAs<"div", MenuDialogListProps>;
|
112
134
|
|
113
|
-
interface FormDialogProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object
|
135
|
+
interface FormDialogProps<TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TSchema = any, TFieldTypes = FieldProps<TFieldValues>> extends Omit<BaseModalProps, 'children'>, Pick<FormProps<TFieldValues, TContext, TSchema, TFieldTypes>, 'schema' | 'defaultValues' | 'values' | 'context' | 'onChange' | 'onSubmit' | 'onError' | 'resolver' | 'mode' | 'reValidateMode' | 'shouldFocusError' | 'shouldUnregister' | 'shouldUseNativeValidation' | 'criteriaMode' | 'delayError' | 'resetOptions' | 'children'> {
|
114
136
|
/**
|
115
137
|
* The modal footer, will be wrapped with `ModalFooter`.
|
116
138
|
* Defaults to a cancel and submit button.
|
@@ -126,41 +148,54 @@ interface FormDialogProps<TFieldValues extends FieldValues = FieldValues, TConte
|
|
126
148
|
* @default "Submit"
|
127
149
|
*/
|
128
150
|
submitLabel?: React.ReactNode;
|
129
|
-
/**
|
130
|
-
* If no children are passed, this will auto render fields based on the supplied schema.
|
131
|
-
*/
|
132
|
-
children?: React.ReactNode;
|
133
151
|
/**
|
134
152
|
* A schema field resolver used to auto generate form fields.
|
135
153
|
*/
|
136
154
|
fieldResolver?: FieldResolver;
|
137
155
|
}
|
138
|
-
|
156
|
+
/**
|
157
|
+
* Can be used to quickly request information from people without leaving the current page.
|
158
|
+
*
|
159
|
+
* @see Docs https://saas-ui.dev/docs/components/overlay/form-dialog
|
160
|
+
*/
|
161
|
+
declare const FormDialog: <TFieldValues extends FieldValues>(props: FormDialogProps<TFieldValues, object, any, FieldProps<TFieldValues>> & {
|
139
162
|
ref?: React.ForwardedRef<HTMLFormElement> | undefined;
|
140
163
|
}) => React.ReactElement;
|
141
164
|
|
142
|
-
interface ModalsContextValue {
|
143
|
-
open: (
|
165
|
+
interface ModalsContextValue<TModals extends Record<string, React.FC<any>> = Record<string, React.FC<any>>, TTypes extends Extract<keyof TModals, string> = Extract<keyof TModals, string>> {
|
166
|
+
open: <T extends OpenOptions<TTypes>>(componentOrOptions: T extends {
|
167
|
+
component: infer TComponent extends React.FC<any>;
|
168
|
+
} ? WithModalOptions<React.ComponentPropsWithRef<TComponent>> : T extends {
|
169
|
+
type: infer TType extends keyof TModals;
|
170
|
+
} ? WithModalOptions<React.ComponentPropsWithRef<TModals[TType]>> : T, options?: T extends React.FC<any> ? WithModalOptions<React.ComponentPropsWithRef<T>> : never) => ModalId;
|
144
171
|
drawer: (options: DrawerOptions) => ModalId;
|
145
172
|
alert: (options: ConfirmDialogOptions) => ModalId;
|
146
173
|
confirm: (options: ConfirmDialogOptions) => ModalId;
|
147
174
|
menu: (options: MenuDialogOptions) => ModalId;
|
148
|
-
form: (options:
|
175
|
+
form: <TProps extends FormDialogProps = FormDialogProps>(options: WithModalOptions<TProps>) => ModalId;
|
149
176
|
close: (id: ModalId) => void;
|
150
177
|
closeAll: () => void;
|
151
178
|
}
|
152
|
-
declare const ModalsContext: React.Context<ModalsContextValue
|
153
|
-
|
179
|
+
declare const ModalsContext: React.Context<ModalsContextValue<{
|
180
|
+
alert: React.FC<ConfirmDialogProps>;
|
181
|
+
confirm: React.FC<ConfirmDialogProps>;
|
182
|
+
drawer: React.FC<DrawerProps>;
|
183
|
+
modal: React.FC<BaseModalProps>;
|
184
|
+
menu: React.FC<MenuDialogProps>;
|
185
|
+
form: <TFieldValues extends react_hook_form.FieldValues>(props: FormDialogProps<TFieldValues, object, any, _saas_ui_forms.FieldProps<TFieldValues>> & {
|
186
|
+
ref?: React.ForwardedRef<HTMLFormElement> | undefined;
|
187
|
+
}) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
188
|
+
}, "confirm" | "form" | "menu" | "alert" | "modal" | "drawer"> | null>;
|
189
|
+
interface ModalsProviderProps<TModals extends Record<string, React.FC<any>> = Record<string, React.FC<any>>> {
|
154
190
|
children: React.ReactNode;
|
155
|
-
modals?:
|
191
|
+
modals?: TModals;
|
156
192
|
}
|
157
193
|
type ModalId = string | number;
|
158
|
-
|
194
|
+
type WithModalOptions<T> = Omit<T, 'isOpen' | 'onClose'> & ModalOptions;
|
195
|
+
interface ModalOptions extends Omit<BaseModalProps, 'isOpen' | 'onClose' | 'children'> {
|
159
196
|
onClose?: (args: {
|
160
197
|
force?: boolean;
|
161
198
|
}) => Promise<boolean | undefined> | void;
|
162
|
-
body?: React.ReactNode;
|
163
|
-
children?: React.ReactNode;
|
164
199
|
[key: string]: any;
|
165
200
|
}
|
166
201
|
interface DrawerOptions extends ModalOptions, Omit<DrawerProps, 'onClose' | 'isOpen' | 'children' | 'title' | 'size'> {
|
@@ -171,13 +206,12 @@ interface MenuDialogOptions extends ModalOptions, Omit<MenuDialogProps, 'onClose
|
|
171
206
|
}
|
172
207
|
interface FormDialogOptions extends ModalOptions, Omit<FormDialogProps, 'onClose' | 'isOpen' | 'children'> {
|
173
208
|
}
|
174
|
-
interface OpenOptions extends ModalOptions {
|
175
|
-
type?:
|
209
|
+
interface OpenOptions<TModalTypes extends string> extends ModalOptions {
|
210
|
+
type?: TModalTypes;
|
176
211
|
scope?: ModalScopes;
|
177
212
|
}
|
178
213
|
type ModalScopes = 'modal' | 'alert';
|
179
|
-
|
180
|
-
interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions> {
|
214
|
+
interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions, TModalTypes extends string = string> {
|
181
215
|
/**
|
182
216
|
* The modal id, autogenerated when not set.
|
183
217
|
* Can be used to close modals.
|
@@ -199,7 +233,7 @@ interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions> {
|
|
199
233
|
*
|
200
234
|
* Custom types can be configured using the `modals` prop of `ModalProvider`
|
201
235
|
*/
|
202
|
-
type?:
|
236
|
+
type?: TModalTypes;
|
203
237
|
/**
|
204
238
|
* Render a custom modal component.
|
205
239
|
* This will ignore the `type` param.
|
@@ -212,7 +246,24 @@ interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions> {
|
|
212
246
|
isOpen?: boolean;
|
213
247
|
}
|
214
248
|
declare function ModalsProvider({ children, modals }: ModalsProviderProps): JSX.Element;
|
215
|
-
declare const useModalsContext: () => ModalsContextValue
|
216
|
-
declare const useModals: () => ModalsContextValue
|
249
|
+
declare const useModalsContext: () => ModalsContextValue<Record<string, React.FC<any>>, string>;
|
250
|
+
declare const useModals: () => ModalsContextValue<Record<string, React.FC<any>>, string>;
|
251
|
+
|
252
|
+
interface CreateModalsOptions<TModalDefs> {
|
253
|
+
modals: TModalDefs;
|
254
|
+
}
|
255
|
+
declare const createModals: <TModalDefs extends Record<string, React.FC<any>>>(options: CreateModalsOptions<TModalDefs>) => {
|
256
|
+
ModalsProvider: (props: Omit<ModalsProviderProps, 'modals'>) => JSX.Element;
|
257
|
+
useModals: () => ModalsContextValue<{
|
258
|
+
alert: React.FC<ConfirmDialogProps>;
|
259
|
+
confirm: React.FC<ConfirmDialogProps>;
|
260
|
+
drawer: React.FC<DrawerProps>;
|
261
|
+
modal: React.FC<BaseModalProps>;
|
262
|
+
menu: React.FC<MenuDialogProps>;
|
263
|
+
form: <TFieldValues extends react_hook_form.FieldValues>(props: FormDialogProps<TFieldValues, object, any, _saas_ui_forms.FieldProps<TFieldValues>> & {
|
264
|
+
ref?: React.ForwardedRef<HTMLFormElement> | undefined;
|
265
|
+
}) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
266
|
+
} & TModalDefs, "confirm" | "form" | "menu" | "alert" | "modal" | "drawer" | Extract<keyof TModalDefs, string>>;
|
267
|
+
};
|
217
268
|
|
218
|
-
export { BaseDrawer, BaseDrawerProps, BaseModal, BaseModalProps, ConfirmDialog, ConfirmDialogOptions, ConfirmDialogProps, Drawer, DrawerOptions, DrawerProps, FormDialog, FormDialogOptions, FormDialogProps, MenuDialog, MenuDialogList, MenuDialogListProps, MenuDialogOptions, MenuDialogProps, Modal, ModalConfig, ModalId, ModalScopes,
|
269
|
+
export { BaseDrawer, BaseDrawerProps, BaseModal, BaseModalProps, ConfirmDialog, ConfirmDialogOptions, ConfirmDialogProps, CreateModalsOptions, Drawer, DrawerOptions, DrawerProps, FormDialog, FormDialogOptions, FormDialogProps, MenuDialog, MenuDialogList, MenuDialogListProps, MenuDialogOptions, MenuDialogProps, Modal, ModalConfig, ModalId, ModalScopes, ModalsContext, ModalsContextValue, ModalsProvider, ModalsProviderProps, OpenOptions, createModals, useModals, useModalsContext };
|