@saas-ui/modals 2.4.2 → 3.0.0-alpha.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.
package/dist/yup/index.js DELETED
@@ -1,165 +0,0 @@
1
- 'use client'
2
- "use strict";
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
-
21
- // src/yup/index.ts
22
- var yup_exports = {};
23
- __export(yup_exports, {
24
- FormDialog: () => FormDialog2,
25
- createYupFormDialog: () => createYupFormDialog
26
- });
27
- module.exports = __toCommonJS(yup_exports);
28
- var import_yup = require("@saas-ui/forms/yup");
29
-
30
- // src/form.tsx
31
- var import_react2 = require("@chakra-ui/react");
32
- var import_react_utils = require("@saas-ui/react-utils");
33
- var import_forms = require("@saas-ui/forms");
34
-
35
- // src/modal.tsx
36
- var import_react = require("@chakra-ui/react");
37
- var import_utils = require("@chakra-ui/utils");
38
- var import_jsx_runtime = require("react/jsx-runtime");
39
- var BaseModal = (props) => {
40
- const {
41
- title,
42
- footer,
43
- children,
44
- isOpen,
45
- onClose,
46
- hideCloseButton,
47
- hideOverlay,
48
- headerProps,
49
- contentProps,
50
- footerProps,
51
- ...rest
52
- } = props;
53
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Modal, { isOpen, onClose, ...rest, children: [
54
- !hideOverlay && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalOverlay, {}),
55
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.ModalContent, { ...contentProps, children: [
56
- title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalHeader, { ...headerProps, children: title }),
57
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalCloseButton, {}),
58
- (0, import_utils.runIfFn)(children, {
59
- isOpen,
60
- onClose
61
- }),
62
- footer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalFooter, { ...footerProps, children: footer })
63
- ] })
64
- ] });
65
- };
66
-
67
- // src/form.tsx
68
- var import_jsx_runtime2 = require("react/jsx-runtime");
69
- var useFormProps = (props) => {
70
- const {
71
- schema,
72
- resolver,
73
- fieldResolver,
74
- defaultValues,
75
- values,
76
- context,
77
- onChange,
78
- onSubmit,
79
- onError,
80
- mode,
81
- reValidateMode,
82
- shouldFocusError = true,
83
- shouldUnregister,
84
- shouldUseNativeValidation,
85
- criteriaMode,
86
- delayError = 100,
87
- fields,
88
- formRef,
89
- ...modalProps
90
- } = props;
91
- const formProps = {
92
- schema,
93
- resolver,
94
- defaultValues,
95
- values,
96
- context,
97
- onChange,
98
- onSubmit,
99
- onError,
100
- mode,
101
- reValidateMode,
102
- shouldFocusError,
103
- shouldUnregister,
104
- shouldUseNativeValidation,
105
- criteriaMode,
106
- delayError,
107
- fields,
108
- formRef
109
- };
110
- return { modalProps, formProps, fields };
111
- };
112
- function createFormDialog(Form3) {
113
- const Dialog = (0, import_react2.forwardRef)((props, ref) => {
114
- const { isOpen, onClose, footer, children, ...rest } = props;
115
- const { modalProps, formProps, fields } = useFormProps(rest);
116
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(BaseModal, { ...modalProps, isOpen, onClose, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
117
- Form3,
118
- {
119
- ref,
120
- ...formProps,
121
- flex: "1",
122
- minHeight: "0px",
123
- display: "flex",
124
- flexDirection: "column",
125
- children: (form) => {
126
- var _a, _b;
127
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
128
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.ModalBody, { height: "100%", children: (0, import_react_utils.runIfFn)(children, form) || /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_forms.AutoFields, {}) }),
129
- footer || /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react2.ModalFooter, { children: [
130
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
131
- import_react2.Button,
132
- {
133
- variant: "ghost",
134
- mr: 3,
135
- onClick: onClose,
136
- ...fields == null ? void 0 : fields.cancel,
137
- children: (_b = (_a = fields == null ? void 0 : fields.cancel) == null ? void 0 : _a.children) != null ? _b : "Cancel"
138
- }
139
- ),
140
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_forms.SubmitButton, { ...fields == null ? void 0 : fields.submit })
141
- ] })
142
- ] });
143
- }
144
- }
145
- ) });
146
- });
147
- Dialog.displayName = `${Form3.displayName || Form3.name}Dialog`;
148
- Dialog.id = Form3.id;
149
- return Dialog;
150
- }
151
- var FormDialog = createFormDialog(import_forms.Form);
152
-
153
- // src/yup/create-yup-form-dialog.ts
154
- function createYupFormDialog(Form3) {
155
- return createFormDialog(Form3);
156
- }
157
-
158
- // src/yup/index.ts
159
- var FormDialog2 = createYupFormDialog(import_yup.Form);
160
- // Annotate the CommonJS export names for ESM import in node:
161
- 0 && (module.exports = {
162
- FormDialog,
163
- createYupFormDialog
164
- });
165
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/yup/index.ts","../../src/form.tsx","../../src/modal.tsx","../../src/yup/create-yup-form-dialog.ts"],"sourcesContent":["import { Form } from '@saas-ui/forms/yup'\nimport { createYupFormDialog } from './create-yup-form-dialog'\n\nexport { createYupFormDialog }\n\nexport const FormDialog = createYupFormDialog(Form)\n","import * as React from 'react'\n\nimport {\n ModalBody,\n ModalFooter,\n Button,\n forwardRef,\n ButtonProps,\n} from '@chakra-ui/react'\nimport { runIfFn } from '@saas-ui/react-utils'\n\nimport {\n Form,\n AutoFields,\n SubmitButton,\n FormProps,\n FieldValues,\n FieldResolver,\n FieldProps,\n FormType,\n DefaultFieldOverrides,\n} from '@saas-ui/forms'\n\nimport { BaseModal, BaseModalProps } from './modal'\n\nexport type FormDialogFieldOverrides = DefaultFieldOverrides & {\n cancel?: ButtonProps\n}\n\nexport interface FormDialogProps<\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends Omit<BaseModalProps, 'children'>,\n Pick<\n FormProps<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes>,\n | 'schema'\n | 'defaultValues'\n | 'values'\n | 'context'\n | 'onChange'\n | 'onSubmit'\n | 'onError'\n | 'resolver'\n | 'mode'\n | 'reValidateMode'\n | 'shouldFocusError'\n | 'shouldUnregister'\n | 'shouldUseNativeValidation'\n | 'criteriaMode'\n | 'delayError'\n | 'resetOptions'\n | 'formRef'\n | 'children'\n > {\n /**\n * The modal footer, will be wrapped with `ModalFooter`.\n * Defaults to a cancel and submit button.\n */\n footer?: React.ReactNode\n /**\n * A schema field resolver used to auto generate form fields.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: FormDialogFieldOverrides\n}\n\nconst useFormProps = (props: FormDialogProps) => {\n const {\n schema,\n resolver,\n fieldResolver,\n defaultValues,\n values,\n context,\n onChange,\n onSubmit,\n onError,\n mode,\n reValidateMode,\n shouldFocusError = true,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError = 100,\n fields,\n formRef,\n ...modalProps\n } = props\n\n const formProps = {\n schema,\n resolver,\n defaultValues,\n values,\n context,\n onChange,\n onSubmit,\n onError,\n mode,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n fields,\n formRef,\n }\n\n return { modalProps, formProps, fields }\n}\n\n/**\n * @todo make this dynamic to support other schema types\n */\ntype MergeDialogProps<T> =\n T extends FormType<\n infer FieldDefs,\n infer ExtraProps,\n infer ExtraFieldProps,\n infer ExtraOverrides\n >\n ? FormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n : never\n\ntype IsSchemaType<T, Schema, FieldDefs> =\n T extends DefaultFormType<FieldDefs>\n ? T extends (\n props: FormProps<infer TSchema, infer TFieldValues, infer TContext>\n ) => any\n ? Schema extends TSchema\n ? true\n : false\n : false\n : false\n\nexport type DefaultFormType<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = FormDialogFieldOverrides,\n> = (<\n TSchema = unknown,\n TFieldValues extends Record<string, any> = any,\n TContext extends object = object,\n>(\n props: any\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = FormDialogFieldOverrides,\n TFormType extends DefaultFormType<\n FieldDefs,\n ExtraProps,\n ExtraFieldProps,\n ExtraOverrides\n > = DefaultFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>,\n>(Form: TFormType) {\n const Dialog = forwardRef<any, 'div'>((props, ref) => {\n const { isOpen, onClose, footer, children, ...rest } = props\n const { modalProps, formProps, fields } = useFormProps(rest)\n return (\n <BaseModal {...modalProps} isOpen={isOpen} onClose={onClose}>\n <Form\n ref={ref}\n {...(formProps as any)}\n flex=\"1\"\n minHeight=\"0px\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n {(form: any) => (\n <>\n <ModalBody height=\"100%\">\n {runIfFn(children, form) || <AutoFields />}\n </ModalBody>\n\n {footer || (\n <ModalFooter>\n <Button\n variant=\"ghost\"\n mr={3}\n onClick={onClose}\n {...fields?.cancel}\n >\n {fields?.cancel?.children ?? 'Cancel'}\n </Button>\n <SubmitButton {...fields?.submit} />\n </ModalFooter>\n )}\n </>\n )}\n </Form>\n </BaseModal>\n )\n }) as MergeDialogProps<TFormType>\n\n Dialog.displayName = `${Form.displayName || Form.name}Dialog`\n Dialog.id = Form.id\n\n return Dialog\n}\n\n/**\n * Can be used to quickly request information from people without leaving the current page.\n *\n * @see Docs https://saas-ui.dev/docs/components/overlay/form-dialog\n */\nexport const FormDialog = createFormDialog(Form)\n","import * as React from 'react'\n\nimport {\n Modal as ChakraModal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalFooter,\n ModalBody,\n ModalCloseButton,\n ModalProps as ChakraModalProps,\n ModalContentProps,\n ModalHeaderProps,\n ModalFooterProps,\n} from '@chakra-ui/react'\n\nimport { runIfFn, MaybeRenderProp } from '@chakra-ui/utils'\n\nexport interface BaseModalProps extends Omit<ChakraModalProps, 'children'> {\n /**\n * The modal title\n */\n title?: React.ReactNode\n /**\n * The modal children\n */\n children: MaybeRenderProp<{\n isOpen: boolean\n onClose: () => void\n }>\n /**\n * The modal footer\n */\n footer?: React.ReactNode\n /**\n * Hide the close button\n */\n hideCloseButton?: boolean\n /**\n * Hide the overlay\n */\n hideOverlay?: boolean\n /**\n * Props for the modal header\n */\n headerProps?: ModalHeaderProps\n /**\n * Props for the modal content\n */\n contentProps?: ModalContentProps\n /**\n * Props for the modal footer\n */\n footerProps?: ModalFooterProps\n}\n\nexport const BaseModal: React.FC<BaseModalProps> = (props) => {\n const {\n title,\n footer,\n children,\n isOpen,\n onClose,\n hideCloseButton,\n hideOverlay,\n headerProps,\n contentProps,\n footerProps,\n ...rest\n } = props\n return (\n <ChakraModal isOpen={isOpen} onClose={onClose} {...rest}>\n {!hideOverlay && <ModalOverlay />}\n <ModalContent {...contentProps}>\n {title && <ModalHeader {...headerProps}>{title}</ModalHeader>}\n {!hideCloseButton && <ModalCloseButton />}\n {runIfFn(children, {\n isOpen,\n onClose,\n })}\n {footer && <ModalFooter {...footerProps}>{footer}</ModalFooter>}\n </ModalContent>\n </ChakraModal>\n )\n}\n\nexport const Modal: React.FC<BaseModalProps> = (props) => {\n const { children, isOpen, onClose, ...rest } = props\n return (\n <BaseModal {...rest} isOpen={isOpen} onClose={onClose}>\n <ModalBody>\n {runIfFn(children, {\n isOpen,\n onClose,\n })}\n </ModalBody>\n </BaseModal>\n )\n}\n","import type { YupFormType } from '@saas-ui/forms/yup'\nimport { FormDialogFieldOverrides, createFormDialog } from '../form'\n\nimport type { BaseModalProps } from '../modal'\n\nexport function createYupFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n>(Form: YupFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>) {\n return createFormDialog(Form) as unknown as YupFormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n}\n"],"mappings":"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","names":["FormDialog","import_react","ChakraModal","import_jsx_runtime","Form","Form","FormDialog"]}
@@ -1,20 +0,0 @@
1
- 'use client'
2
- import {
3
- createFormDialog
4
- } from "../chunk-FRC2HTO7.mjs";
5
-
6
- // src/yup/index.ts
7
- import { Form } from "@saas-ui/forms/yup";
8
-
9
- // src/yup/create-yup-form-dialog.ts
10
- function createYupFormDialog(Form2) {
11
- return createFormDialog(Form2);
12
- }
13
-
14
- // src/yup/index.ts
15
- var FormDialog = createYupFormDialog(Form);
16
- export {
17
- FormDialog,
18
- createYupFormDialog
19
- };
20
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/yup/index.ts","../../src/yup/create-yup-form-dialog.ts"],"sourcesContent":["import { Form } from '@saas-ui/forms/yup'\nimport { createYupFormDialog } from './create-yup-form-dialog'\n\nexport { createYupFormDialog }\n\nexport const FormDialog = createYupFormDialog(Form)\n","import type { YupFormType } from '@saas-ui/forms/yup'\nimport { FormDialogFieldOverrides, createFormDialog } from '../form'\n\nimport type { BaseModalProps } from '../modal'\n\nexport function createYupFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n>(Form: YupFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>) {\n return createFormDialog(Form) as unknown as YupFormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n}\n"],"mappings":";;;;;;AAAA,SAAS,YAAY;;;ACKd,SAAS,oBAKdA,OAA2E;AAC3E,SAAO,iBAAiBA,KAAI;AAM9B;;;ADZO,IAAM,aAAa,oBAAoB,IAAI;","names":["Form"]}
@@ -1,15 +0,0 @@
1
- import * as _saas_ui_forms_zod from '@saas-ui/forms/zod';
2
- import { ZodFormType } from '@saas-ui/forms/zod';
3
- import * as _chakra_ui_react from '@chakra-ui/react';
4
- import * as _saas_ui_forms from '@saas-ui/forms';
5
- import { B as BaseModalProps, F as FormDialogFieldOverrides } from '../form-BtCUKHAs.mjs';
6
- import 'react';
7
- import '@chakra-ui/utils';
8
-
9
- declare function createZodFormDialog<FieldDefs = any, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object>(Form: ZodFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>): ZodFormType<FieldDefs, ExtraProps & Omit<BaseModalProps, "children">, ExtraFieldProps, ExtraOverrides & FormDialogFieldOverrides>;
10
-
11
- declare const FormDialog: _saas_ui_forms_zod.ZodFormType<unknown, object & Omit<BaseModalProps, "children">, any, object & _saas_ui_forms.DefaultFieldOverrides & {
12
- cancel?: _chakra_ui_react.ButtonProps;
13
- }>;
14
-
15
- export { FormDialog, createZodFormDialog };
@@ -1,15 +0,0 @@
1
- import * as _saas_ui_forms_zod from '@saas-ui/forms/zod';
2
- import { ZodFormType } from '@saas-ui/forms/zod';
3
- import * as _chakra_ui_react from '@chakra-ui/react';
4
- import * as _saas_ui_forms from '@saas-ui/forms';
5
- import { B as BaseModalProps, F as FormDialogFieldOverrides } from '../form-BtCUKHAs.js';
6
- import 'react';
7
- import '@chakra-ui/utils';
8
-
9
- declare function createZodFormDialog<FieldDefs = any, ExtraProps = object, ExtraFieldProps extends object = object, ExtraOverrides = object>(Form: ZodFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>): ZodFormType<FieldDefs, ExtraProps & Omit<BaseModalProps, "children">, ExtraFieldProps, ExtraOverrides & FormDialogFieldOverrides>;
10
-
11
- declare const FormDialog: _saas_ui_forms_zod.ZodFormType<unknown, object & Omit<BaseModalProps, "children">, any, object & _saas_ui_forms.DefaultFieldOverrides & {
12
- cancel?: _chakra_ui_react.ButtonProps;
13
- }>;
14
-
15
- export { FormDialog, createZodFormDialog };
package/dist/zod/index.js DELETED
@@ -1,165 +0,0 @@
1
- 'use client'
2
- "use strict";
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
-
21
- // src/zod/index.ts
22
- var zod_exports = {};
23
- __export(zod_exports, {
24
- FormDialog: () => FormDialog2,
25
- createZodFormDialog: () => createZodFormDialog
26
- });
27
- module.exports = __toCommonJS(zod_exports);
28
- var import_zod = require("@saas-ui/forms/zod");
29
-
30
- // src/form.tsx
31
- var import_react2 = require("@chakra-ui/react");
32
- var import_react_utils = require("@saas-ui/react-utils");
33
- var import_forms = require("@saas-ui/forms");
34
-
35
- // src/modal.tsx
36
- var import_react = require("@chakra-ui/react");
37
- var import_utils = require("@chakra-ui/utils");
38
- var import_jsx_runtime = require("react/jsx-runtime");
39
- var BaseModal = (props) => {
40
- const {
41
- title,
42
- footer,
43
- children,
44
- isOpen,
45
- onClose,
46
- hideCloseButton,
47
- hideOverlay,
48
- headerProps,
49
- contentProps,
50
- footerProps,
51
- ...rest
52
- } = props;
53
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Modal, { isOpen, onClose, ...rest, children: [
54
- !hideOverlay && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalOverlay, {}),
55
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.ModalContent, { ...contentProps, children: [
56
- title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalHeader, { ...headerProps, children: title }),
57
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalCloseButton, {}),
58
- (0, import_utils.runIfFn)(children, {
59
- isOpen,
60
- onClose
61
- }),
62
- footer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.ModalFooter, { ...footerProps, children: footer })
63
- ] })
64
- ] });
65
- };
66
-
67
- // src/form.tsx
68
- var import_jsx_runtime2 = require("react/jsx-runtime");
69
- var useFormProps = (props) => {
70
- const {
71
- schema,
72
- resolver,
73
- fieldResolver,
74
- defaultValues,
75
- values,
76
- context,
77
- onChange,
78
- onSubmit,
79
- onError,
80
- mode,
81
- reValidateMode,
82
- shouldFocusError = true,
83
- shouldUnregister,
84
- shouldUseNativeValidation,
85
- criteriaMode,
86
- delayError = 100,
87
- fields,
88
- formRef,
89
- ...modalProps
90
- } = props;
91
- const formProps = {
92
- schema,
93
- resolver,
94
- defaultValues,
95
- values,
96
- context,
97
- onChange,
98
- onSubmit,
99
- onError,
100
- mode,
101
- reValidateMode,
102
- shouldFocusError,
103
- shouldUnregister,
104
- shouldUseNativeValidation,
105
- criteriaMode,
106
- delayError,
107
- fields,
108
- formRef
109
- };
110
- return { modalProps, formProps, fields };
111
- };
112
- function createFormDialog(Form3) {
113
- const Dialog = (0, import_react2.forwardRef)((props, ref) => {
114
- const { isOpen, onClose, footer, children, ...rest } = props;
115
- const { modalProps, formProps, fields } = useFormProps(rest);
116
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(BaseModal, { ...modalProps, isOpen, onClose, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
117
- Form3,
118
- {
119
- ref,
120
- ...formProps,
121
- flex: "1",
122
- minHeight: "0px",
123
- display: "flex",
124
- flexDirection: "column",
125
- children: (form) => {
126
- var _a, _b;
127
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
128
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.ModalBody, { height: "100%", children: (0, import_react_utils.runIfFn)(children, form) || /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_forms.AutoFields, {}) }),
129
- footer || /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react2.ModalFooter, { children: [
130
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
131
- import_react2.Button,
132
- {
133
- variant: "ghost",
134
- mr: 3,
135
- onClick: onClose,
136
- ...fields == null ? void 0 : fields.cancel,
137
- children: (_b = (_a = fields == null ? void 0 : fields.cancel) == null ? void 0 : _a.children) != null ? _b : "Cancel"
138
- }
139
- ),
140
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_forms.SubmitButton, { ...fields == null ? void 0 : fields.submit })
141
- ] })
142
- ] });
143
- }
144
- }
145
- ) });
146
- });
147
- Dialog.displayName = `${Form3.displayName || Form3.name}Dialog`;
148
- Dialog.id = Form3.id;
149
- return Dialog;
150
- }
151
- var FormDialog = createFormDialog(import_forms.Form);
152
-
153
- // src/zod/create-zod-form-dialog.ts
154
- function createZodFormDialog(Form3) {
155
- return createFormDialog(Form3);
156
- }
157
-
158
- // src/zod/index.ts
159
- var FormDialog2 = createZodFormDialog(import_zod.Form);
160
- // Annotate the CommonJS export names for ESM import in node:
161
- 0 && (module.exports = {
162
- FormDialog,
163
- createZodFormDialog
164
- });
165
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/zod/index.ts","../../src/form.tsx","../../src/modal.tsx","../../src/zod/create-zod-form-dialog.ts"],"sourcesContent":["import { Form } from '@saas-ui/forms/zod'\nimport { createZodFormDialog } from './create-zod-form-dialog'\n\nexport { createZodFormDialog }\n\nexport const FormDialog = createZodFormDialog(Form)\n","import * as React from 'react'\n\nimport {\n ModalBody,\n ModalFooter,\n Button,\n forwardRef,\n ButtonProps,\n} from '@chakra-ui/react'\nimport { runIfFn } from '@saas-ui/react-utils'\n\nimport {\n Form,\n AutoFields,\n SubmitButton,\n FormProps,\n FieldValues,\n FieldResolver,\n FieldProps,\n FormType,\n DefaultFieldOverrides,\n} from '@saas-ui/forms'\n\nimport { BaseModal, BaseModalProps } from './modal'\n\nexport type FormDialogFieldOverrides = DefaultFieldOverrides & {\n cancel?: ButtonProps\n}\n\nexport interface FormDialogProps<\n TSchema = any,\n TFieldValues extends FieldValues = FieldValues,\n TContext extends object = object,\n TExtraFieldProps extends object = object,\n TFieldTypes = FieldProps<TFieldValues>,\n> extends Omit<BaseModalProps, 'children'>,\n Pick<\n FormProps<TSchema, TFieldValues, TContext, TExtraFieldProps, TFieldTypes>,\n | 'schema'\n | 'defaultValues'\n | 'values'\n | 'context'\n | 'onChange'\n | 'onSubmit'\n | 'onError'\n | 'resolver'\n | 'mode'\n | 'reValidateMode'\n | 'shouldFocusError'\n | 'shouldUnregister'\n | 'shouldUseNativeValidation'\n | 'criteriaMode'\n | 'delayError'\n | 'resetOptions'\n | 'formRef'\n | 'children'\n > {\n /**\n * The modal footer, will be wrapped with `ModalFooter`.\n * Defaults to a cancel and submit button.\n */\n footer?: React.ReactNode\n /**\n * A schema field resolver used to auto generate form fields.\n */\n fieldResolver?: FieldResolver\n /**\n * Field overrides\n */\n fields?: FormDialogFieldOverrides\n}\n\nconst useFormProps = (props: FormDialogProps) => {\n const {\n schema,\n resolver,\n fieldResolver,\n defaultValues,\n values,\n context,\n onChange,\n onSubmit,\n onError,\n mode,\n reValidateMode,\n shouldFocusError = true,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError = 100,\n fields,\n formRef,\n ...modalProps\n } = props\n\n const formProps = {\n schema,\n resolver,\n defaultValues,\n values,\n context,\n onChange,\n onSubmit,\n onError,\n mode,\n reValidateMode,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n criteriaMode,\n delayError,\n fields,\n formRef,\n }\n\n return { modalProps, formProps, fields }\n}\n\n/**\n * @todo make this dynamic to support other schema types\n */\ntype MergeDialogProps<T> =\n T extends FormType<\n infer FieldDefs,\n infer ExtraProps,\n infer ExtraFieldProps,\n infer ExtraOverrides\n >\n ? FormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n : never\n\ntype IsSchemaType<T, Schema, FieldDefs> =\n T extends DefaultFormType<FieldDefs>\n ? T extends (\n props: FormProps<infer TSchema, infer TFieldValues, infer TContext>\n ) => any\n ? Schema extends TSchema\n ? true\n : false\n : false\n : false\n\nexport type DefaultFormType<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = FormDialogFieldOverrides,\n> = (<\n TSchema = unknown,\n TFieldValues extends Record<string, any> = any,\n TContext extends object = object,\n>(\n props: any\n) => React.ReactElement) & {\n displayName?: string\n id?: string\n}\n\nexport function createFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = FormDialogFieldOverrides,\n TFormType extends DefaultFormType<\n FieldDefs,\n ExtraProps,\n ExtraFieldProps,\n ExtraOverrides\n > = DefaultFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>,\n>(Form: TFormType) {\n const Dialog = forwardRef<any, 'div'>((props, ref) => {\n const { isOpen, onClose, footer, children, ...rest } = props\n const { modalProps, formProps, fields } = useFormProps(rest)\n return (\n <BaseModal {...modalProps} isOpen={isOpen} onClose={onClose}>\n <Form\n ref={ref}\n {...(formProps as any)}\n flex=\"1\"\n minHeight=\"0px\"\n display=\"flex\"\n flexDirection=\"column\"\n >\n {(form: any) => (\n <>\n <ModalBody height=\"100%\">\n {runIfFn(children, form) || <AutoFields />}\n </ModalBody>\n\n {footer || (\n <ModalFooter>\n <Button\n variant=\"ghost\"\n mr={3}\n onClick={onClose}\n {...fields?.cancel}\n >\n {fields?.cancel?.children ?? 'Cancel'}\n </Button>\n <SubmitButton {...fields?.submit} />\n </ModalFooter>\n )}\n </>\n )}\n </Form>\n </BaseModal>\n )\n }) as MergeDialogProps<TFormType>\n\n Dialog.displayName = `${Form.displayName || Form.name}Dialog`\n Dialog.id = Form.id\n\n return Dialog\n}\n\n/**\n * Can be used to quickly request information from people without leaving the current page.\n *\n * @see Docs https://saas-ui.dev/docs/components/overlay/form-dialog\n */\nexport const FormDialog = createFormDialog(Form)\n","import * as React from 'react'\n\nimport {\n Modal as ChakraModal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalFooter,\n ModalBody,\n ModalCloseButton,\n ModalProps as ChakraModalProps,\n ModalContentProps,\n ModalHeaderProps,\n ModalFooterProps,\n} from '@chakra-ui/react'\n\nimport { runIfFn, MaybeRenderProp } from '@chakra-ui/utils'\n\nexport interface BaseModalProps extends Omit<ChakraModalProps, 'children'> {\n /**\n * The modal title\n */\n title?: React.ReactNode\n /**\n * The modal children\n */\n children: MaybeRenderProp<{\n isOpen: boolean\n onClose: () => void\n }>\n /**\n * The modal footer\n */\n footer?: React.ReactNode\n /**\n * Hide the close button\n */\n hideCloseButton?: boolean\n /**\n * Hide the overlay\n */\n hideOverlay?: boolean\n /**\n * Props for the modal header\n */\n headerProps?: ModalHeaderProps\n /**\n * Props for the modal content\n */\n contentProps?: ModalContentProps\n /**\n * Props for the modal footer\n */\n footerProps?: ModalFooterProps\n}\n\nexport const BaseModal: React.FC<BaseModalProps> = (props) => {\n const {\n title,\n footer,\n children,\n isOpen,\n onClose,\n hideCloseButton,\n hideOverlay,\n headerProps,\n contentProps,\n footerProps,\n ...rest\n } = props\n return (\n <ChakraModal isOpen={isOpen} onClose={onClose} {...rest}>\n {!hideOverlay && <ModalOverlay />}\n <ModalContent {...contentProps}>\n {title && <ModalHeader {...headerProps}>{title}</ModalHeader>}\n {!hideCloseButton && <ModalCloseButton />}\n {runIfFn(children, {\n isOpen,\n onClose,\n })}\n {footer && <ModalFooter {...footerProps}>{footer}</ModalFooter>}\n </ModalContent>\n </ChakraModal>\n )\n}\n\nexport const Modal: React.FC<BaseModalProps> = (props) => {\n const { children, isOpen, onClose, ...rest } = props\n return (\n <BaseModal {...rest} isOpen={isOpen} onClose={onClose}>\n <ModalBody>\n {runIfFn(children, {\n isOpen,\n onClose,\n })}\n </ModalBody>\n </BaseModal>\n )\n}\n","import type { ZodFormType } from '@saas-ui/forms/zod'\nimport { createFormDialog, FormDialogFieldOverrides } from '../form'\nimport type { BaseModalProps } from '../modal'\n\nexport function createZodFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n>(Form: ZodFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>) {\n return createFormDialog(Form) as unknown as ZodFormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n}\n"],"mappings":"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","names":["FormDialog","import_react","ChakraModal","import_jsx_runtime","Form","Form","FormDialog"]}
@@ -1,20 +0,0 @@
1
- 'use client'
2
- import {
3
- createFormDialog
4
- } from "../chunk-FRC2HTO7.mjs";
5
-
6
- // src/zod/index.ts
7
- import { Form } from "@saas-ui/forms/zod";
8
-
9
- // src/zod/create-zod-form-dialog.ts
10
- function createZodFormDialog(Form2) {
11
- return createFormDialog(Form2);
12
- }
13
-
14
- // src/zod/index.ts
15
- var FormDialog = createZodFormDialog(Form);
16
- export {
17
- FormDialog,
18
- createZodFormDialog
19
- };
20
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/zod/index.ts","../../src/zod/create-zod-form-dialog.ts"],"sourcesContent":["import { Form } from '@saas-ui/forms/zod'\nimport { createZodFormDialog } from './create-zod-form-dialog'\n\nexport { createZodFormDialog }\n\nexport const FormDialog = createZodFormDialog(Form)\n","import type { ZodFormType } from '@saas-ui/forms/zod'\nimport { createFormDialog, FormDialogFieldOverrides } from '../form'\nimport type { BaseModalProps } from '../modal'\n\nexport function createZodFormDialog<\n FieldDefs = any,\n ExtraProps = object,\n ExtraFieldProps extends object = object,\n ExtraOverrides = object,\n>(Form: ZodFormType<FieldDefs, ExtraProps, ExtraFieldProps, ExtraOverrides>) {\n return createFormDialog(Form) as unknown as ZodFormType<\n FieldDefs,\n ExtraProps & Omit<BaseModalProps, 'children'>,\n ExtraFieldProps,\n ExtraOverrides & FormDialogFieldOverrides\n >\n}\n"],"mappings":";;;;;;AAAA,SAAS,YAAY;;;ACId,SAAS,oBAKdA,OAA2E;AAC3E,SAAO,iBAAiBA,KAAI;AAM9B;;;ADXO,IAAM,aAAa,oBAAoB,IAAI;","names":["Form"]}
@@ -1,30 +0,0 @@
1
- import { defaultModals } from './default-modals'
2
- import {
3
- ModalsContextValue,
4
- ModalsProvider,
5
- ModalsProviderProps,
6
- useModals,
7
- } from './provider'
8
-
9
- export interface CreateModalsOptions<
10
- TModalDefs extends Record<string, React.FC<any>>
11
- > {
12
- modals: TModalDefs
13
- }
14
-
15
- export const createModals = <TModalDefs extends Record<string, React.FC<any>>>(
16
- options: CreateModalsOptions<TModalDefs>
17
- ) => {
18
- const modals = {
19
- ...defaultModals,
20
- ...options.modals,
21
- }
22
- const Provider = (props: Omit<ModalsProviderProps, 'modals'>) => {
23
- return <ModalsProvider children={props.children} modals={modals} />
24
- }
25
-
26
- return {
27
- ModalsProvider: Provider,
28
- useModals: useModals as () => ModalsContextValue<typeof modals>,
29
- }
30
- }
package/src/dialog.tsx DELETED
@@ -1,151 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import {
4
- AlertDialog,
5
- AlertDialogBody,
6
- AlertDialogFooter,
7
- AlertDialogHeader,
8
- AlertDialogContent,
9
- AlertDialogOverlay,
10
- AlertDialogProps,
11
- ButtonGroup,
12
- ButtonGroupProps,
13
- Button,
14
- ButtonProps,
15
- } from '@chakra-ui/react'
16
-
17
- export interface ConfirmDialogProps
18
- extends Omit<AlertDialogProps, 'leastDestructiveRef'> {
19
- /**
20
- * The dialog title
21
- */
22
- title?: React.ReactNode
23
- /**
24
- * The cancel button label
25
- */
26
- cancelLabel?: React.ReactNode
27
- /**
28
- * The confirm button label
29
- */
30
- confirmLabel?: React.ReactNode
31
- /**
32
- * The cancel button props
33
- */
34
- cancelProps?: ButtonProps
35
- /**
36
- * The confirm button props
37
- */
38
- confirmProps?: ButtonProps
39
- /**
40
- * The button group props
41
- */
42
- buttonGroupProps?: ButtonGroupProps
43
- /**
44
- * Close the dialog on cancel
45
- * @default true
46
- */
47
- closeOnCancel?: boolean
48
- /**
49
- * Close the dialog on confirm
50
- * @default true
51
- */
52
- closeOnConfirm?: boolean
53
- /**
54
- * Defines which button gets initial focus
55
- * https://www.w3.org/TR/wai-aria-practices/#alertdialog
56
- */
57
- leastDestructiveFocus?: 'cancel' | 'confirm'
58
- /**
59
- * Function that's called when cancel is clicked
60
- */
61
- onCancel?: () => void
62
- /**
63
- * Function that's called when confirm is clicked.
64
- */
65
- onConfirm?: () => Promise<void> | void
66
- }
67
-
68
- export const ConfirmDialog: React.FC<ConfirmDialogProps> = (props) => {
69
- const {
70
- title,
71
- cancelLabel = 'Cancel',
72
- confirmLabel = 'Confirm',
73
- cancelProps,
74
- confirmProps,
75
- buttonGroupProps,
76
- isOpen,
77
- closeOnCancel = true,
78
- closeOnConfirm = true,
79
- leastDestructiveFocus = 'cancel',
80
- onClose,
81
- onCancel,
82
- onConfirm,
83
- children,
84
- ...rest
85
- } = props
86
-
87
- const cancelRef = React.useRef(null)
88
- const confirmRef = React.useRef(null)
89
- const [isLoading, setIsLoading] = React.useState(false)
90
-
91
- const handleConfirm = async () => {
92
- try {
93
- const result = onConfirm?.()
94
- if (typeof result?.then === 'function') {
95
- setIsLoading(true)
96
- await result
97
- }
98
-
99
- closeOnConfirm && onClose()
100
- /* eslint-disable no-useless-catch */
101
- } catch (e: any) {
102
- throw e
103
- } finally {
104
- setIsLoading(false)
105
- }
106
- /* eslint-enable */
107
- }
108
-
109
- return (
110
- <AlertDialog
111
- isOpen={isOpen}
112
- onClose={onClose}
113
- {...rest}
114
- leastDestructiveRef={
115
- leastDestructiveFocus === 'cancel' ? cancelRef : confirmRef
116
- }
117
- >
118
- <AlertDialogOverlay>
119
- <AlertDialogContent>
120
- <AlertDialogHeader>{title}</AlertDialogHeader>
121
-
122
- <AlertDialogBody>{children}</AlertDialogBody>
123
-
124
- <AlertDialogFooter>
125
- <ButtonGroup {...buttonGroupProps}>
126
- <Button
127
- ref={cancelRef}
128
- {...cancelProps}
129
- onClick={() => {
130
- onCancel?.()
131
-
132
- closeOnCancel && onClose()
133
- }}
134
- >
135
- {cancelProps?.children || cancelLabel}
136
- </Button>
137
- <Button
138
- ref={confirmRef}
139
- isLoading={isLoading}
140
- {...confirmProps}
141
- onClick={handleConfirm}
142
- >
143
- {confirmProps?.children || confirmLabel}
144
- </Button>
145
- </ButtonGroup>
146
- </AlertDialogFooter>
147
- </AlertDialogContent>
148
- </AlertDialogOverlay>
149
- </AlertDialog>
150
- )
151
- }