@saas-ui/modals 2.0.0-next.0 → 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 CHANGED
@@ -1,5 +1,84 @@
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
+
72
+ ## 2.0.0-next.1
73
+
74
+ ### Patch Changes
75
+
76
+ - 166978bd: Fix esm bundle filename.
77
+ - Updated dependencies [166978bd]
78
+ - @saas-ui/forms@2.0.0-next.1
79
+ - @saas-ui/hooks@2.0.0-next.1
80
+ - @saas-ui/react-utils@2.0.0-next.1
81
+
3
82
  ## 2.0.0-next.0
4
83
 
5
84
  ### Major Changes
@@ -17,6 +96,13 @@
17
96
  - @saas-ui/hooks@2.0.0-next.0
18
97
  - @saas-ui/react-utils@2.0.0-next.0
19
98
 
99
+ ## 1.5.5
100
+
101
+ ### Patch Changes
102
+
103
+ - Updated dependencies [382e095]
104
+ - @saas-ui/forms@1.5.3
105
+
20
106
  ## 1.5.4
21
107
 
22
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 { FieldValues, FormProps, FieldResolver } from '@saas-ui/forms';
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> extends Omit<BaseModalProps, 'children'>, Pick<FormProps<TFieldValues, TContext>, 'schema' | 'defaultValues' | 'values' | 'context' | 'onChange' | 'onSubmit' | 'onError' | 'resolver' | 'mode' | 'reValidateMode' | 'shouldFocusError' | 'shouldUnregister' | 'shouldUseNativeValidation' | 'criteriaMode' | 'delayError'> {
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
- declare const FormDialog: <TFieldValues extends FieldValues>(props: FormDialogProps<TFieldValues, object> & {
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: (options: OpenOptions) => ModalId;
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: FormDialogOptions) => ModalId;
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 | null>;
153
- interface ModalsProviderProps {
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?: Record<string, React.FC<any>>;
191
+ modals?: TModals;
156
192
  }
157
193
  type ModalId = string | number;
158
- interface ModalOptions extends Omit<BaseModalProps, 'onClose' | 'isOpen' | 'children'> {
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?: ModalTypes;
209
+ interface OpenOptions<TModalTypes extends string> extends ModalOptions {
210
+ type?: TModalTypes;
176
211
  scope?: ModalScopes;
177
212
  }
178
213
  type ModalScopes = 'modal' | 'alert';
179
- type ModalTypes = 'modal' | 'drawer' | 'alert' | 'confirm' | 'menu' | string;
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?: ModalTypes;
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, ModalTypes, ModalsContext, ModalsContextValue, ModalsProvider, OpenOptions, useModals, useModalsContext };
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 };