@saas-ui/modals 2.0.0-next.9 → 2.0.0-rc.22

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,102 @@
1
1
  # @saas-ui/modals
2
2
 
3
+ ## 2.0.0-rc.22
4
+
5
+ ### Patch Changes
6
+
7
+ - @saas-ui/forms@2.0.0-rc.22
8
+
9
+ ## 2.0.0-next.21
10
+
11
+ ### Patch Changes
12
+
13
+ - @saas-ui/forms@2.0.0-next.21
14
+
15
+ ## 2.0.0-next.20
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [a9ca90dd]
20
+ - @saas-ui/forms@2.0.0-next.20
21
+
22
+ ## 2.0.0-next.19
23
+
24
+ ### Patch Changes
25
+
26
+ - @saas-ui/forms@2.0.0-next.19
27
+
28
+ ## 2.0.0-next.18
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [01ac442f]
33
+ - @saas-ui/forms@2.0.0-next.18
34
+
35
+ ## 2.0.0-next.17
36
+
37
+ ### Patch Changes
38
+
39
+ - @saas-ui/forms@2.0.0-next.17
40
+
41
+ ## 2.0.0-next.16
42
+
43
+ ### Patch Changes
44
+
45
+ - cc713117: Fix issue where onCloseComplete would not be called
46
+ - @saas-ui/forms@2.0.0-next.16
47
+
48
+ ## 2.0.0-next.15
49
+
50
+ ### Minor Changes
51
+
52
+ - 2d18cdc2: New createFormDialog function to create Zod or Yup specific FormDialogs
53
+
54
+ ### Patch Changes
55
+
56
+ - Updated dependencies [2d18cdc2]
57
+ - @saas-ui/forms@2.0.0-next.15
58
+
59
+ ## 2.0.0-next.14
60
+
61
+ ### Patch Changes
62
+
63
+ - Fix esm bundle import
64
+ - Updated dependencies
65
+ - @saas-ui/react-utils@2.0.0-next.3
66
+ - @saas-ui/forms@2.0.0-next.14
67
+ - @saas-ui/hooks@2.0.0-next.4
68
+
69
+ ## 2.0.0-next.13
70
+
71
+ ### Patch Changes
72
+
73
+ - 1563cc9a: BaseDrawer now accepts header, content and footer props.
74
+ - Bump version
75
+ - Updated dependencies
76
+ - Updated dependencies [6c63217c]
77
+ - @saas-ui/react-utils@2.0.0-next.2
78
+ - @saas-ui/forms@2.0.0-next.13
79
+ - @saas-ui/hooks@2.0.0-next.3
80
+
81
+ ## 2.0.0-next.12
82
+
83
+ ### Patch Changes
84
+
85
+ - Updated dependencies [a7ef6dd9]
86
+ - @saas-ui/forms@2.0.0-next.12
87
+
88
+ ## 2.0.0-next.11
89
+
90
+ ### Patch Changes
91
+
92
+ - @saas-ui/forms@2.0.0-next.11
93
+
94
+ ## 2.0.0-next.10
95
+
96
+ ### Patch Changes
97
+
98
+ - @saas-ui/forms@2.0.0-next.10
99
+
3
100
  ## 2.0.0-next.9
4
101
 
5
102
  ### Minor Changes
@@ -90,6 +187,26 @@
90
187
  - @saas-ui/hooks@2.0.0-next.0
91
188
  - @saas-ui/react-utils@2.0.0-next.0
92
189
 
190
+ ## 1.5.7
191
+
192
+ ### Patch Changes
193
+
194
+ - Fix types path
195
+ - Updated dependencies
196
+ - @saas-ui/button@1.4.2
197
+ - @saas-ui/forms@1.5.5
198
+ - @saas-ui/menu@1.4.3
199
+
200
+ ## 1.5.6
201
+
202
+ ### Patch Changes
203
+
204
+ - b2302a3: Add types to package.json exports
205
+ - Updated dependencies [b2302a3]
206
+ - @saas-ui/button@1.4.1
207
+ - @saas-ui/forms@1.5.4
208
+ - @saas-ui/menu@1.4.2
209
+
93
210
  ## 1.5.5
94
211
 
95
212
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,24 +1,28 @@
1
- import * as React from 'react';
2
- import { AlertDialogProps, ButtonProps, ButtonGroupProps, DrawerProps as DrawerProps$1, ModalProps, ModalHeaderProps, ModalContentProps, ModalFooterProps, MenuListProps } from '@chakra-ui/react';
1
+ import * as React$1 from 'react';
2
+ import { AlertDialogProps, ButtonProps, ButtonGroupProps, DrawerProps as DrawerProps$1, ModalHeaderProps, ModalContentProps, ModalFooterProps, ModalProps, MenuListProps } from '@chakra-ui/react';
3
3
  import { MaybeRenderProp } from '@chakra-ui/react-utils';
4
4
  import * as _chakra_ui_system_dist_system_types from '@chakra-ui/system/dist/system.types';
5
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';
6
+ import { DefaultFieldOverrides, FieldValues, FieldProps, FormProps, FieldResolver, FormType, WithFields } from '@saas-ui/forms';
7
+ import { YupFormType, AnyObjectSchema } from '@saas-ui/forms/yup';
8
+ import { ZodFormType } from '@saas-ui/forms/zod';
9
+ import * as _chakra_ui_button_dist_button from '@chakra-ui/button/dist/button';
10
+ import { z } from 'zod';
11
+ import { InferType } from 'yup';
8
12
 
9
13
  interface ConfirmDialogProps extends Omit<AlertDialogProps, 'leastDestructiveRef'> {
10
14
  /**
11
15
  * The dialog title
12
16
  */
13
- title?: React.ReactNode;
17
+ title?: React$1.ReactNode;
14
18
  /**
15
19
  * The cancel button label
16
20
  */
17
- cancelLabel?: React.ReactNode;
21
+ cancelLabel?: React$1.ReactNode;
18
22
  /**
19
23
  * The confirm button label
20
24
  */
21
- confirmLabel?: React.ReactNode;
25
+ confirmLabel?: React$1.ReactNode;
22
26
  /**
23
27
  * The cancel button props
24
28
  */
@@ -55,13 +59,24 @@ interface ConfirmDialogProps extends Omit<AlertDialogProps, 'leastDestructiveRef
55
59
  */
56
60
  onConfirm?: () => void;
57
61
  }
58
- declare const ConfirmDialog: React.FC<ConfirmDialogProps>;
62
+ declare const ConfirmDialog: React$1.FC<ConfirmDialogProps>;
59
63
 
60
64
  interface BaseDrawerProps extends Omit<DrawerProps$1, 'children'> {
61
65
  /**
62
66
  * The drawer title
63
67
  */
64
- title: React.ReactNode;
68
+ title: React$1.ReactNode;
69
+ /**
70
+ * The modal children
71
+ */
72
+ children: MaybeRenderProp<{
73
+ isOpen: boolean;
74
+ onClose: () => void;
75
+ }>;
76
+ /**
77
+ * The modal footer
78
+ */
79
+ footer?: React$1.ReactNode;
65
80
  /**
66
81
  * Hide the close button
67
82
  */
@@ -70,22 +85,33 @@ interface BaseDrawerProps extends Omit<DrawerProps$1, 'children'> {
70
85
  * Hide the overflow
71
86
  */
72
87
  hideOverlay?: boolean;
73
- children?: React.ReactNode;
88
+ /**
89
+ * Props for the modal header
90
+ */
91
+ headerProps?: ModalHeaderProps;
92
+ /**
93
+ * Props for the modal content
94
+ */
95
+ contentProps?: ModalContentProps;
96
+ /**
97
+ * Props for the modal footer
98
+ */
99
+ footerProps?: ModalFooterProps;
74
100
  }
75
- declare const BaseDrawer: React.FC<BaseDrawerProps>;
101
+ declare const BaseDrawer: React$1.FC<BaseDrawerProps>;
76
102
  interface DrawerProps extends BaseDrawerProps {
77
103
  /**
78
104
  * Drawer footer content, wrapped with `DrawerFooter`
79
105
  */
80
- footer?: React.ReactNode;
106
+ footer?: React$1.ReactNode;
81
107
  }
82
- declare const Drawer: React.FC<DrawerProps>;
108
+ declare const Drawer: React$1.FC<DrawerProps>;
83
109
 
84
110
  interface BaseModalProps extends Omit<ModalProps, 'children'> {
85
111
  /**
86
112
  * The modal title
87
113
  */
88
- title?: React.ReactNode;
114
+ title?: React$1.ReactNode;
89
115
  /**
90
116
  * The modal children
91
117
  */
@@ -96,7 +122,7 @@ interface BaseModalProps extends Omit<ModalProps, 'children'> {
96
122
  /**
97
123
  * The modal footer
98
124
  */
99
- footer?: React.ReactNode;
125
+ footer?: React$1.ReactNode;
100
126
  /**
101
127
  * Hide the close button
102
128
  */
@@ -118,76 +144,94 @@ interface BaseModalProps extends Omit<ModalProps, 'children'> {
118
144
  */
119
145
  footerProps?: ModalFooterProps;
120
146
  }
121
- declare const BaseModal: React.FC<BaseModalProps>;
122
- declare const Modal: React.FC<BaseModalProps>;
147
+ declare const BaseModal: React$1.FC<BaseModalProps>;
148
+ declare const Modal: React$1.FC<BaseModalProps>;
123
149
 
124
150
  interface MenuDialogProps extends BaseModalProps {
125
151
  /**
126
152
  * The modal footer, wrapped with `ModalFooter`
127
153
  */
128
- footer?: React.ReactNode;
154
+ footer?: React$1.ReactNode;
129
155
  }
130
- declare const MenuDialog: React.FC<MenuDialogProps>;
156
+ declare const MenuDialog: React$1.FC<MenuDialogProps>;
131
157
  interface MenuDialogListProps extends Omit<BaseModalProps, 'isOpen' | 'onClose' | 'children' | 'scrollBehavior'>, Omit<MenuListProps, 'title'> {
132
158
  }
133
159
  declare const MenuDialogList: _chakra_ui_system_dist_system_types.ComponentWithAs<"div", MenuDialogListProps>;
134
160
 
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'> {
161
+ type FormDialogFieldOverrides = DefaultFieldOverrides & {
162
+ cancel?: ButtonProps;
163
+ };
164
+ interface FormDialogProps<TSchema = any, TFieldValues extends FieldValues = FieldValues, TContext extends object = object, TFieldTypes = FieldProps<TFieldValues>> extends Omit<BaseModalProps, 'children'>, Pick<FormProps<TSchema, TFieldValues, TContext, TFieldTypes>, 'schema' | 'defaultValues' | 'values' | 'context' | 'onChange' | 'onSubmit' | 'onError' | 'resolver' | 'mode' | 'reValidateMode' | 'shouldFocusError' | 'shouldUnregister' | 'shouldUseNativeValidation' | 'criteriaMode' | 'delayError' | 'resetOptions' | 'children'> {
136
165
  /**
137
166
  * The modal footer, will be wrapped with `ModalFooter`.
138
167
  * Defaults to a cancel and submit button.
139
168
  */
140
- footer?: React.ReactNode;
141
- /**
142
- * The cancel button label
143
- * @default "Cancel"
144
- */
145
- cancelLabel?: React.ReactNode;
146
- /**
147
- * The submit button label
148
- * @default "Submit"
149
- */
150
- submitLabel?: React.ReactNode;
169
+ footer?: React$1.ReactNode;
151
170
  /**
152
171
  * A schema field resolver used to auto generate form fields.
153
172
  */
154
173
  fieldResolver?: FieldResolver;
174
+ /**
175
+ * Field overrides
176
+ */
177
+ fields?: FormDialogFieldOverrides;
155
178
  }
179
+ /**
180
+ * @todo make this dynamic to support other schema types
181
+ */
182
+ type MergeDialogProps<T> = T extends YupFormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides, 'yup'> ? YupFormType<FieldDefs, ExtraProps & Omit<BaseModalProps, 'children'>, ExtraOverrides & FormDialogFieldOverrides> : T extends ZodFormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides, 'zod'> ? ZodFormType<FieldDefs, ExtraProps & Omit<BaseModalProps, 'children'>, ExtraOverrides & FormDialogFieldOverrides> : T extends FormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides> ? FormType<FieldDefs, ExtraProps & Omit<BaseModalProps, 'children'>, ExtraOverrides & FormDialogFieldOverrides> : never;
183
+ type DefaultFormType<FieldDefs = any, ExtraProps = object, ExtraOverrides = FormDialogFieldOverrides> = (<TSchema = unknown, TFieldValues extends Record<string, any> = any, TContext extends object = object>(props: any) => React$1.ReactElement) & {
184
+ displayName?: string;
185
+ id?: string;
186
+ };
187
+ declare function createFormDialog<FieldDefs = any, ExtraProps = object, ExtraOverrides = FormDialogFieldOverrides, TFormType extends DefaultFormType<FieldDefs, ExtraProps, ExtraOverrides> = DefaultFormType<FieldDefs, ExtraProps, ExtraOverrides>>(Form: TFormType): MergeDialogProps<TFormType>;
156
188
  /**
157
189
  * Can be used to quickly request information from people without leaving the current page.
158
190
  *
159
191
  * @see Docs https://saas-ui.dev/docs/components/overlay/form-dialog
160
192
  */
161
- declare const FormDialog: <TFieldValues extends FieldValues>(props: FormDialogProps<TFieldValues, object, any, FieldProps<TFieldValues>> & {
162
- ref?: React.ForwardedRef<HTMLFormElement> | undefined;
163
- }) => React.ReactElement;
193
+ declare const FormDialog: FormType<unknown, object & Omit<BaseModalProps, "children">, object & DefaultFieldOverrides & {
194
+ cancel?: ButtonProps | undefined;
195
+ }>;
164
196
 
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>> {
197
+ type FormDialogHandler<T> = T extends YupFormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides, 'yup'> ? YupHandler<FieldDefs, object, ExtraOverrides & FormDialogFieldOverrides> : T extends ZodFormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides, 'zod'> ? ZodHandler<FieldDefs, object, ExtraOverrides & FormDialogFieldOverrides> : T extends FormType<infer FieldDefs, infer ExtraProps, infer ExtraOverrides> ? FormHandler<FieldDefs, object, ExtraOverrides & FormDialogFieldOverrides> : never;
198
+ type ZodHandler<FieldDefs, ExtraProps = object, ExtraOverrides = object, Type extends 'zod' = 'zod'> = <TSchema extends z.AnyZodObject = z.AnyZodObject, TFieldValues extends z.infer<TSchema> = z.infer<TSchema>, TContext extends object = object>(props: WithFields<FormProps<TSchema, TFieldValues, TContext>, FieldDefs, ExtraOverrides> & {
199
+ ref?: React.ForwardedRef<HTMLFormElement>;
200
+ } & ExtraProps) => ModalId;
201
+ type FormHandler<FieldDefs, ExtraProps = object, ExtraOverrides = object> = <TSchema = unknown, TFieldValues extends FieldValues = FieldValues, TContext extends object = object>(props: WithFields<FormProps<TSchema, TFieldValues, TContext>, FieldDefs, ExtraOverrides> & {
202
+ ref?: React.ForwardedRef<HTMLFormElement>;
203
+ } & ExtraProps) => ModalId;
204
+ type YupHandler<FieldDefs, ExtraProps = object, ExtraOverrides = object, Type extends 'yup' = 'yup'> = <TSchema extends AnyObjectSchema = AnyObjectSchema, TFieldValues extends InferType<TSchema> = InferType<TSchema>, // placeholder
205
+ TContext extends object = object>(props: WithFields<FormProps<TFieldValues, TContext, TSchema>, FieldDefs, ExtraOverrides> & {
206
+ ref?: React.ForwardedRef<HTMLFormElement>;
207
+ } & ExtraProps) => ModalId;
208
+
209
+ interface ModalsContextValue<TModals extends Record<string, React$1.FC<any>> = Record<string, React$1.FC<any>>, TTypes extends Extract<keyof TModals, string> = Extract<keyof TModals, string>> {
166
210
  open: <T extends OpenOptions<TTypes>>(componentOrOptions: T extends {
167
- component: infer TComponent extends React.FC<any>;
168
- } ? WithModalOptions<React.ComponentPropsWithRef<TComponent>> : T extends {
211
+ component: infer TComponent extends React$1.FC<any>;
212
+ } ? WithModalOptions<React$1.ComponentPropsWithRef<TComponent>> : T extends {
169
213
  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;
214
+ } ? WithModalOptions<React$1.ComponentPropsWithRef<TModals[TType]>> : T, options?: T extends React$1.FC<any> ? WithModalOptions<React$1.ComponentPropsWithRef<T>> : never) => ModalId;
171
215
  drawer: (options: DrawerOptions) => ModalId;
172
216
  alert: (options: ConfirmDialogOptions) => ModalId;
173
217
  confirm: (options: ConfirmDialogOptions) => ModalId;
174
218
  menu: (options: MenuDialogOptions) => ModalId;
175
- form: <TProps extends FormDialogProps = FormDialogProps>(options: WithModalOptions<TProps>) => ModalId;
219
+ form: FormDialogHandler<TModals['form']>;
176
220
  close: (id: ModalId) => void;
177
221
  closeAll: () => void;
178
222
  }
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>>;
223
+ declare const ModalsContext: React$1.Context<ModalsContextValue<{
224
+ alert: React$1.FC<ConfirmDialogProps>;
225
+ confirm: React$1.FC<ConfirmDialogProps>;
226
+ drawer: React$1.FC<DrawerProps>;
227
+ modal: React$1.FC<BaseModalProps>;
228
+ menu: React$1.FC<MenuDialogProps>;
229
+ form: FormType<unknown, object & Omit<BaseModalProps, "children">, object & _saas_ui_forms.DefaultFieldOverrides & {
230
+ cancel?: _chakra_ui_button_dist_button.ButtonProps | undefined;
231
+ }>;
188
232
  }, "confirm" | "form" | "menu" | "alert" | "modal" | "drawer"> | null>;
189
- interface ModalsProviderProps<TModals extends Record<string, React.FC<any>> = Record<string, React.FC<any>>> {
190
- children: React.ReactNode;
233
+ interface ModalsProviderProps<TModals extends Record<string, React$1.FC<any>> = Record<string, React$1.FC<any>>> {
234
+ children: React$1.ReactNode;
191
235
  modals?: TModals;
192
236
  }
193
237
  type ModalId = string | number;
@@ -238,7 +282,7 @@ interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions, TModalT
238
282
  * Render a custom modal component.
239
283
  * This will ignore the `type` param.
240
284
  */
241
- component?: React.FC<BaseModalProps>;
285
+ component?: React$1.FC<BaseModalProps>;
242
286
  /**
243
287
  * Whether the modal is open or not.
244
288
  * This is used internally to keep track of the modal state.
@@ -246,24 +290,24 @@ interface ModalConfig<TModalOptions extends ModalOptions = ModalOptions, TModalT
246
290
  isOpen?: boolean;
247
291
  }
248
292
  declare function ModalsProvider({ children, modals }: ModalsProviderProps): JSX.Element;
249
- declare const useModalsContext: () => ModalsContextValue<Record<string, React.FC<any>>, string>;
250
- declare const useModals: () => ModalsContextValue<Record<string, React.FC<any>>, string>;
293
+ declare const useModalsContext: () => ModalsContextValue<Record<string, React$1.FC<any>>, string>;
294
+ declare const useModals: () => ModalsContextValue<Record<string, React$1.FC<any>>, string>;
251
295
 
252
- interface CreateModalsOptions<TModalDefs> {
296
+ interface CreateModalsOptions<TModalDefs extends Record<string, React.FC<any>>> {
253
297
  modals: TModalDefs;
254
298
  }
255
- declare const createModals: <TModalDefs extends Record<string, React.FC<any>>>(options: CreateModalsOptions<TModalDefs>) => {
299
+ declare const createModals: <TModalDefs extends Record<string, React$1.FC<any>>>(options: CreateModalsOptions<TModalDefs>) => {
256
300
  ModalsProvider: (props: Omit<ModalsProviderProps, 'modals'>) => JSX.Element;
257
301
  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>>;
302
+ alert: React$1.FC<ConfirmDialogProps>;
303
+ confirm: React$1.FC<ConfirmDialogProps>;
304
+ drawer: React$1.FC<DrawerProps>;
305
+ modal: React$1.FC<BaseModalProps>;
306
+ menu: React$1.FC<MenuDialogProps>;
307
+ form: _saas_ui_forms.FormType<unknown, object & Omit<BaseModalProps, "children">, object & _saas_ui_forms.DefaultFieldOverrides & {
308
+ cancel?: _chakra_ui_button_dist_button.ButtonProps | undefined;
309
+ }>;
266
310
  } & TModalDefs, "confirm" | "form" | "menu" | "alert" | "modal" | "drawer" | Extract<keyof TModalDefs, string>>;
267
311
  };
268
312
 
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 };
313
+ export { BaseDrawer, BaseDrawerProps, BaseModal, BaseModalProps, ConfirmDialog, ConfirmDialogOptions, ConfirmDialogProps, CreateModalsOptions, DefaultFormType, Drawer, DrawerOptions, DrawerProps, FormDialog, FormDialogFieldOverrides, FormDialogOptions, FormDialogProps, MenuDialog, MenuDialogList, MenuDialogListProps, MenuDialogOptions, MenuDialogProps, Modal, ModalConfig, ModalId, ModalScopes, ModalsContext, ModalsContextValue, ModalsProvider, ModalsProviderProps, OpenOptions, createFormDialog, createModals, useModals, useModalsContext };
package/dist/index.js CHANGED
@@ -92,27 +92,35 @@ var BaseDrawer = (props) => {
92
92
  const {
93
93
  title,
94
94
  children,
95
+ footer,
95
96
  isOpen,
96
97
  onClose,
97
98
  hideCloseButton,
98
99
  hideOverlay,
100
+ headerProps,
101
+ contentProps,
102
+ footerProps,
99
103
  ...rest
100
104
  } = props;
101
105
  return /* @__PURE__ */ jsxRuntime.jsxs(react.Drawer, { isOpen, onClose, ...rest, children: [
102
106
  !hideOverlay && /* @__PURE__ */ jsxRuntime.jsx(react.DrawerOverlay, {}),
103
- /* @__PURE__ */ jsxRuntime.jsxs(react.DrawerContent, { children: [
104
- /* @__PURE__ */ jsxRuntime.jsx(react.DrawerHeader, { children: title }),
107
+ /* @__PURE__ */ jsxRuntime.jsxs(react.DrawerContent, { ...contentProps, children: [
108
+ title && /* @__PURE__ */ jsxRuntime.jsx(react.DrawerHeader, { ...headerProps, children: title }),
105
109
  !hideCloseButton && /* @__PURE__ */ jsxRuntime.jsx(react.DrawerCloseButton, {}),
106
- children
110
+ utils.runIfFn(children, {
111
+ isOpen,
112
+ onClose
113
+ }),
114
+ footer && /* @__PURE__ */ jsxRuntime.jsx(react.DrawerFooter, { ...footerProps, children: footer })
107
115
  ] })
108
116
  ] });
109
117
  };
110
118
  var Drawer = (props) => {
111
- const { footer, children, ...rest } = props;
112
- return /* @__PURE__ */ jsxRuntime.jsxs(BaseDrawer, { ...rest, children: [
113
- /* @__PURE__ */ jsxRuntime.jsx(react.DrawerBody, { children }),
114
- footer && /* @__PURE__ */ jsxRuntime.jsx(react.DrawerFooter, { children: footer })
115
- ] });
119
+ const { children, isOpen, onClose, ...rest } = props;
120
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseDrawer, { isOpen, onClose, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(react.DrawerBody, { children: utils.runIfFn(children, {
121
+ isOpen,
122
+ onClose
123
+ }) }) });
116
124
  };
117
125
  var BaseModal = (props) => {
118
126
  const {
@@ -219,67 +227,76 @@ var MenuDialogList = react.forwardRef(
219
227
  );
220
228
  }
221
229
  );
222
- var FormDialog = react.forwardRef(
223
- (props, ref) => {
224
- const {
225
- children,
226
- schema,
227
- resolver,
228
- fieldResolver,
229
- defaultValues,
230
- values,
231
- context,
232
- onChange,
233
- onSubmit,
234
- onError,
235
- mode,
236
- reValidateMode,
237
- shouldFocusError = true,
238
- shouldUnregister,
239
- shouldUseNativeValidation,
240
- criteriaMode,
241
- delayError = 100,
242
- cancelLabel = "Cancel",
243
- submitLabel = "Submit",
244
- footer,
245
- isOpen,
246
- onClose,
247
- ...rest
248
- } = props;
249
- const formProps = {
250
- ref,
251
- schema,
252
- resolver,
253
- defaultValues,
254
- values,
255
- context,
256
- onChange,
257
- onSubmit,
258
- onError,
259
- mode,
260
- reValidateMode,
261
- shouldFocusError,
262
- shouldUnregister,
263
- shouldUseNativeValidation,
264
- criteriaMode,
265
- delayError
266
- };
267
- return /* @__PURE__ */ jsxRuntime.jsx(BaseModal, { isOpen, onClose, ...rest, children: /* @__PURE__ */ jsxRuntime.jsx(forms.Form, { ...formProps, ref, children: (form) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
268
- /* @__PURE__ */ jsxRuntime.jsx(react.ModalBody, { children: reactUtils.runIfFn(children, form) || /* @__PURE__ */ jsxRuntime.jsx(
269
- forms.AutoFields,
270
- {
271
- schema,
272
- fieldResolver,
273
- focusFirstField: true
274
- }
275
- ) }),
276
- footer || /* @__PURE__ */ jsxRuntime.jsxs(react.ModalFooter, { children: [
277
- /* @__PURE__ */ jsxRuntime.jsx(react.Button, { variant: "ghost", mr: 3, onClick: onClose, children: cancelLabel }),
278
- /* @__PURE__ */ jsxRuntime.jsx(forms.SubmitButton, { children: submitLabel })
279
- ] })
280
- ] }) }) });
281
- }
282
- );
230
+ var useFormProps = (props) => {
231
+ const {
232
+ schema,
233
+ resolver,
234
+ fieldResolver,
235
+ defaultValues,
236
+ values,
237
+ context,
238
+ onChange,
239
+ onSubmit,
240
+ onError,
241
+ mode,
242
+ reValidateMode,
243
+ shouldFocusError = true,
244
+ shouldUnregister,
245
+ shouldUseNativeValidation,
246
+ criteriaMode,
247
+ delayError = 100,
248
+ fields,
249
+ ...modalProps
250
+ } = props;
251
+ const formProps = {
252
+ schema,
253
+ resolver,
254
+ defaultValues,
255
+ values,
256
+ context,
257
+ onChange,
258
+ onSubmit,
259
+ onError,
260
+ mode,
261
+ reValidateMode,
262
+ shouldFocusError,
263
+ shouldUnregister,
264
+ shouldUseNativeValidation,
265
+ criteriaMode,
266
+ delayError,
267
+ fields
268
+ };
269
+ return { modalProps, formProps, fields };
270
+ };
271
+ function createFormDialog(Form2) {
272
+ const Dialog = react.forwardRef((props, ref) => {
273
+ const { isOpen, onClose, footer, children, ...rest } = props;
274
+ const { modalProps, formProps, fields } = useFormProps(rest);
275
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseModal, { ...modalProps, isOpen, onClose, children: /* @__PURE__ */ jsxRuntime.jsx(Form2, { ref, ...formProps, children: (form) => {
276
+ var _a, _b;
277
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
278
+ /* @__PURE__ */ jsxRuntime.jsx(react.ModalBody, { children: reactUtils.runIfFn(children, form) || /* @__PURE__ */ jsxRuntime.jsx(forms.AutoFields, {}) }),
279
+ footer || /* @__PURE__ */ jsxRuntime.jsxs(react.ModalFooter, { children: [
280
+ /* @__PURE__ */ jsxRuntime.jsx(
281
+ react.Button,
282
+ {
283
+ variant: "ghost",
284
+ mr: 3,
285
+ onClick: onClose,
286
+ ...fields == null ? void 0 : fields.cancel,
287
+ children: (_b = (_a = fields == null ? void 0 : fields.cancel) == null ? void 0 : _a.children) != null ? _b : "Cancel"
288
+ }
289
+ ),
290
+ /* @__PURE__ */ jsxRuntime.jsx(forms.SubmitButton, { ...fields == null ? void 0 : fields.submit })
291
+ ] })
292
+ ] });
293
+ } }) });
294
+ });
295
+ Dialog.displayName = `${Form2.displayName || Form2.name}Dialog`;
296
+ Dialog.id = Form2.id;
297
+ return Dialog;
298
+ }
299
+ var FormDialog = createFormDialog(forms.Form);
283
300
 
284
301
  // src/default-modals.ts
285
302
  var defaultModals = {
@@ -423,6 +440,7 @@ function ModalsProvider({ children, modals }) {
423
440
  modal.scope
424
441
  );
425
442
  }
443
+ closeComplete(id);
426
444
  };
427
445
  const closeComplete = (id) => {
428
446
  const modals2 = [...Array.from(_instances)];
@@ -503,6 +521,7 @@ exports.MenuDialogList = MenuDialogList;
503
521
  exports.Modal = Modal;
504
522
  exports.ModalsContext = ModalsContext;
505
523
  exports.ModalsProvider = ModalsProvider;
524
+ exports.createFormDialog = createFormDialog;
506
525
  exports.createModals = createModals;
507
526
  exports.useModals = useModals;
508
527
  exports.useModalsContext = useModalsContext;