eddev 2.1.0 → 2.1.3

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/bin/eddev.js CHANGED
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node --trace-warnings
2
2
  import "../dist/node/cli/cli.js"
@@ -0,0 +1,86 @@
1
+ import { FormEvent, ReactNode } from "react";
2
+ import { GFLayoutType, GravityFormsFieldState, GravityFormState, UseGravityFormResult } from "./useGravityForm";
3
+ import { GFFieldTypeSpec, GravityFormsField } from "./types";
4
+ import { GF_BUILTIN_FIELDS } from "./field-types";
5
+ declare const FORM_COMPONENTS: {
6
+ Form(props: {
7
+ onSubmit(e: FormEvent<HTMLFormElement>): void;
8
+ children: ReactNode;
9
+ layout: GFLayoutType;
10
+ state: GravityFormState;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ Success(props: {
13
+ message: string;
14
+ state: GravityFormState;
15
+ }): import("react/jsx-runtime").JSX.Element;
16
+ LayoutStack(props: {
17
+ children: ReactNode;
18
+ }): import("react/jsx-runtime").JSX.Element;
19
+ LayoutRow(props: {
20
+ fields: {
21
+ field: GravityFormsFieldState;
22
+ children: ReactNode;
23
+ }[];
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ FieldWrapper(props: {
26
+ field: GravityFormsFieldState;
27
+ showLabel: boolean;
28
+ labelPlacement: GravityFormsField["labelPlacement"];
29
+ descriptionPlacement: GravityFormsField["descriptionPlacement"];
30
+ cols: GravityFormsField["layoutGridColumnSpan"];
31
+ errorElement?: ReactNode;
32
+ labelElement: ReactNode;
33
+ descriptionElement?: ReactNode;
34
+ children: ReactNode;
35
+ }): import("react/jsx-runtime").JSX.Element;
36
+ FieldLabel(props: {
37
+ label: string;
38
+ isRequired: boolean;
39
+ htmlFor?: string;
40
+ }): import("react/jsx-runtime").JSX.Element;
41
+ SubFieldRow(props: {
42
+ children: ReactNode;
43
+ basis?: number;
44
+ }): import("react/jsx-runtime").JSX.Element;
45
+ SubFieldStack(props: {
46
+ children: ReactNode;
47
+ }): import("react/jsx-runtime").JSX.Element;
48
+ SubFieldWrapper(props: {
49
+ label?: string;
50
+ children: ReactNode;
51
+ className?: string;
52
+ labelId?: string;
53
+ }): import("react/jsx-runtime").JSX.Element;
54
+ FieldDescription(props: {
55
+ description: string;
56
+ }): false | import("react/jsx-runtime").JSX.Element;
57
+ FieldError(props: {
58
+ error: string;
59
+ }): false | import("react/jsx-runtime").JSX.Element;
60
+ Heading(props: {
61
+ text: string;
62
+ className?: string;
63
+ }): import("react/jsx-runtime").JSX.Element;
64
+ SubmitBar(props: {
65
+ label: string;
66
+ submitting: boolean;
67
+ canGoBack: boolean;
68
+ goBack: () => void;
69
+ }): import("react/jsx-runtime").JSX.Element;
70
+ };
71
+ export type FormComponents = typeof FORM_COMPONENTS;
72
+ export type FieldComponents = {
73
+ [K in keyof typeof GF_BUILTIN_FIELDS]?: (typeof GF_BUILTIN_FIELDS)[K] extends GFFieldTypeSpec<infer TValue, infer TOptions> ? (props: GravityFormsFieldState<TValue, TOptions> & {
74
+ formComponents: typeof FORM_COMPONENTS;
75
+ }) => ReactNode : never;
76
+ };
77
+ export type GravityFormsComponent = (props: {
78
+ state: UseGravityFormResult;
79
+ }) => JSX.Element;
80
+ type CreateArgs = {
81
+ formComponents?: Partial<FormComponents>;
82
+ fieldComponents?: Partial<FieldComponents>;
83
+ };
84
+ export declare function createGravityFormComponent(args?: CreateArgs): GravityFormsComponent;
85
+ export {};
86
+ //# sourceMappingURL=createGravityFormComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createGravityFormComponent.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/createGravityFormComponent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef } from "react";
3
+ import { GF_BUILTIN_FIELDS } from "./field-types";
4
+ const FORM_COMPONENTS = {
5
+ Form(props) {
6
+ return (_jsx("form", { className: "edgf-form", onSubmit: props.onSubmit, children: props.children }));
7
+ },
8
+ Success(props) {
9
+ return (_jsxs("div", { className: "edgf-form-success", children: [_jsx("h2", { children: "Thank you for your submission!" }), _jsx("div", { dangerouslySetInnerHTML: { __html: props.message } })] }));
10
+ },
11
+ LayoutStack(props) {
12
+ return _jsx("div", { className: "edgf-form-stack", children: props.children });
13
+ },
14
+ LayoutRow(props) {
15
+ return (_jsx("div", { className: "edgf-form-row", children: props.fields.map(({ field, children }) => (_jsx("div", { className: `edgf-form-col`, style: {
16
+ "--edgf-col-span": field.layoutGridColumnSpan || 12,
17
+ "--edgf-col-basis": ((field.layoutGridColumnSpan || 12) / 12) * 100 + "%",
18
+ }, children: children }, field.id))) }));
19
+ },
20
+ FieldWrapper(props) {
21
+ return (_jsxs("div", { className: `edgf-field edgf-field-${props.field.type} ${props.field.className || ""}`.trim(), children: [props.showLabel ? props.labelElement : null, props.descriptionPlacement === "above" && props.descriptionElement, props.children, props.descriptionPlacement === "below" && props.descriptionElement, props.errorElement] }));
22
+ },
23
+ FieldLabel(props) {
24
+ return (_jsxs("label", { className: "edgf-field-label", htmlFor: props.htmlFor, children: [props.label, props.isRequired && _jsx("span", { className: "edgf-field-required-indicator" })] }));
25
+ },
26
+ SubFieldRow(props) {
27
+ return (_jsx("div", { className: "edgf-subfield-row", style: {
28
+ "--edgf-subfield-basis": props.basis ?? "auto",
29
+ }, children: props.children }));
30
+ },
31
+ SubFieldStack(props) {
32
+ return _jsx("div", { className: "edgf-subfield-stack", children: props.children });
33
+ },
34
+ SubFieldWrapper(props) {
35
+ return (_jsxs("div", { className: `edgf-subfield ${props.className ?? ""}`.trim(), children: [props.label && (_jsx("label", { className: "edgf-subfield-label", htmlFor: props.labelId, children: props.label })), props.children] }));
36
+ },
37
+ FieldDescription(props) {
38
+ return !!props.description && _jsx("div", { className: "edgf-field-description", children: props.description });
39
+ },
40
+ FieldError(props) {
41
+ return !!props.error && _jsx("div", { className: "edgf-field-error", children: props.error });
42
+ },
43
+ Heading(props) {
44
+ return _jsx("h3", { className: `edgf-form-heading ${props.className ?? ""}`.trim(), children: props.text });
45
+ },
46
+ SubmitBar(props) {
47
+ return (_jsxs("div", { className: "edgf-form-submit-bar", children: [props.canGoBack && (_jsx("button", { type: "button", className: "edgf-form-back-button", onClick: props.goBack, children: "Back" })), _jsx("button", { type: "submit", disabled: props.submitting, "data-submitting": props.submitting ? "" : undefined, children: props.label })] }));
48
+ },
49
+ };
50
+ export function createGravityFormComponent(args) {
51
+ const Form = {
52
+ ...FORM_COMPONENTS,
53
+ ...args?.formComponents,
54
+ };
55
+ const Fields = {
56
+ ...Object.fromEntries(Object.entries(GF_BUILTIN_FIELDS).map(([key, FieldSpec]) => {
57
+ const name = key;
58
+ const DefaultComponent = FieldSpec.defaultComponent;
59
+ const OverrideComponent = args?.fieldComponents && args.fieldComponents[name];
60
+ const BaseComponent = OverrideComponent || DefaultComponent;
61
+ function Component(props) {
62
+ const propsRef = useRef(props);
63
+ propsRef.current = props;
64
+ const Wrapper = useMemo(() => {
65
+ return (props) => {
66
+ const defaultProps = useMemo(() => {
67
+ const p = propsRef.current;
68
+ return {
69
+ field: p,
70
+ showLabel: !!p.showLabel,
71
+ labelElement: _jsx(Form.FieldLabel, { htmlFor: props.labelId, label: p.label, isRequired: p.isRequired }),
72
+ descriptionElement: _jsx(Form.FieldDescription, { description: p.description }),
73
+ errorElement: p.error && _jsx(Form.FieldError, { error: p.error }),
74
+ labelPlacement: p.labelPlacement || "above",
75
+ cols: p.layoutGridColumnSpan,
76
+ descriptionPlacement: p.descriptionPlacement || "below",
77
+ };
78
+ }, [propsRef.current]);
79
+ return (_jsx(Form.FieldWrapper, { ...defaultProps, ...props, children: props.children }));
80
+ };
81
+ }, []);
82
+ return BaseComponent ? _jsx(BaseComponent, { ...props, Wrapper: Wrapper }) : null;
83
+ }
84
+ return [key, Component];
85
+ })),
86
+ };
87
+ return function GravityForm({ state }) {
88
+ const ref = useRef(null);
89
+ const lastPage = useRef(state.page);
90
+ useEffect(() => {
91
+ if (lastPage.current === state.page) {
92
+ return;
93
+ }
94
+ setTimeout(() => {
95
+ lastPage.current = state.page;
96
+ const firstChild = ref.current?.children.item(0);
97
+ firstChild?.scrollIntoView({ behavior: "smooth", block: "start" });
98
+ }, 100);
99
+ }, [state.page, JSON.stringify(state.errors)]);
100
+ return (_jsx("div", { ref: ref, style: { display: "contents" }, children: _jsx(Form.Form, { onSubmit: (e) => {
101
+ e.preventDefault();
102
+ if (state.submitting)
103
+ return;
104
+ state.submit();
105
+ }, layout: state.layout, state: state, children: state.layout.type === "page" ? (_jsxs(_Fragment, { children: [_jsx(Form.LayoutStack, { children: state.layout.items.map((row, rowIndex) => {
106
+ if (row.type === "fields") {
107
+ return (_jsx(Form.LayoutRow, { fields: row.fields
108
+ .map((field) => {
109
+ const FieldComponent = Fields[field.type];
110
+ if (!FieldComponent) {
111
+ console.warn(`No component found for Gravity Forms field type "${field.type}"`);
112
+ return null;
113
+ }
114
+ return {
115
+ field: field,
116
+ children: (_jsx(FieldComponent, { ...field, formComponents: Form, disabled: field.disabled || state.submitting })),
117
+ };
118
+ })
119
+ .filter((field) => field !== null) }, rowIndex));
120
+ }
121
+ else if (row.type === "heading") {
122
+ return _jsx(Form.Heading, { text: row.text, className: row.className }, rowIndex);
123
+ }
124
+ }) }), _jsx(Form.SubmitBar, { label: state.submitLabel, submitting: state.submitting, canGoBack: state.canGoBack, goBack: () => state.goBack?.() })] })) : state.layout.type === "success" ? (_jsx(Form.Success, { message: state.layout.message, state: state })) : null }) }));
125
+ };
126
+ }
@@ -0,0 +1,137 @@
1
+ import { GFFieldTypeSpec } from "./types";
2
+ export type GFTextOptions = {
3
+ placeholder: string;
4
+ size: "small" | "medium" | "large";
5
+ };
6
+ export type GFGenericTextOptions = {
7
+ placeholder: string;
8
+ };
9
+ export type GFNumberOptions = {
10
+ placeholder: string;
11
+ rangeMax?: number;
12
+ rangeMin?: number;
13
+ size: "small" | "medium" | "large";
14
+ numberFormat: "decimal_dot" | "decimal_comma" | "currency_dot" | "currency_comma";
15
+ };
16
+ export type GFSelectOptions = {
17
+ placeholder: string;
18
+ choices: {
19
+ text: string;
20
+ value: string;
21
+ }[];
22
+ };
23
+ export type GFCheckboxOptions = {
24
+ columns?: number;
25
+ enableOtherChoice: boolean;
26
+ choices: {
27
+ text: string;
28
+ value: string;
29
+ }[];
30
+ };
31
+ export type GFDateOptions = {};
32
+ export type GFRadioOptions = GFCheckboxOptions;
33
+ export type GFEmailOptions = {
34
+ /** When enabled */
35
+ confirmation: {
36
+ enabled: false;
37
+ emailLabel?: string;
38
+ emailPlaceholder?: string;
39
+ confirmLabel?: string;
40
+ confirmPlaceholder?: string;
41
+ labelPlacement?: "below" | "above" | "hidden";
42
+ } | {
43
+ enabled: true;
44
+ emailLabel: string;
45
+ emailPlaceholder: string;
46
+ confirmLabel: string;
47
+ confirmPlaceholder: string;
48
+ labelPlacement: "below" | "above" | "hidden";
49
+ };
50
+ placeholder: string;
51
+ size: "small" | "medium" | "large";
52
+ };
53
+ export type GFEmailData = string | {
54
+ email: string;
55
+ confirmEmail: string;
56
+ };
57
+ export type GFAddressData = {
58
+ address1?: string;
59
+ address2?: string;
60
+ city?: string;
61
+ state?: string;
62
+ zip?: string;
63
+ country?: string;
64
+ };
65
+ export type GFAddressOptions = {
66
+ addressType: "international" | "us";
67
+ defaultCountry: string;
68
+ defaultState: string;
69
+ subfields: {
70
+ [K in keyof GFAddressData]: {
71
+ name: K;
72
+ visible: boolean;
73
+ placeholder: string;
74
+ label: string;
75
+ autocomplete: string;
76
+ };
77
+ };
78
+ };
79
+ export type GFNameOptions = {
80
+ subfields: {
81
+ [K in keyof GFNameData]: {
82
+ name: K;
83
+ visible: boolean;
84
+ placeholder: string;
85
+ label: string;
86
+ autocomplete: string;
87
+ choices?: {
88
+ text: string;
89
+ value: string;
90
+ }[];
91
+ };
92
+ };
93
+ };
94
+ export type GFFileUploadOptions = {
95
+ allowedExtensions: string[];
96
+ multiple: boolean;
97
+ maxFileSize?: number;
98
+ maxFiles?: number;
99
+ };
100
+ export type GFNameData = {
101
+ prefix?: string;
102
+ first?: string;
103
+ middle?: string;
104
+ last?: string;
105
+ suffix?: string;
106
+ };
107
+ export type GFConsentOptions = {
108
+ checkboxLabel: string;
109
+ };
110
+ export type GFBuiltinTypes = keyof typeof GF_BUILTIN_FIELDS;
111
+ export declare const GF_BUILTIN_FIELDS: {
112
+ text: GFFieldTypeSpec<string, GFTextOptions>;
113
+ textarea: GFFieldTypeSpec<string, GFTextOptions>;
114
+ select: GFFieldTypeSpec<string, GFSelectOptions>;
115
+ number: GFFieldTypeSpec<number, GFNumberOptions>;
116
+ checkbox: GFFieldTypeSpec<string[], GFCheckboxOptions>;
117
+ radio: GFFieldTypeSpec<string, GFCheckboxOptions>;
118
+ multi_choice: GFFieldTypeSpec<string | string[], GFSelectOptions>;
119
+ image_choice: GFFieldTypeSpec<string | string[], GFSelectOptions>;
120
+ name: GFFieldTypeSpec<GFNameData, GFNameOptions>;
121
+ date: GFFieldTypeSpec<string, GFDateOptions>;
122
+ time: GFFieldTypeSpec<string, {}>;
123
+ phone: GFFieldTypeSpec<string, {}>;
124
+ address: GFFieldTypeSpec<GFAddressData, GFAddressOptions>;
125
+ website: GFFieldTypeSpec<string, {}>;
126
+ email: GFFieldTypeSpec<GFEmailData, GFEmailOptions>;
127
+ fileupload: GFFieldTypeSpec<File | FileList | File[], GFFileUploadOptions>;
128
+ multiselect: GFFieldTypeSpec<string[], {}>;
129
+ consent: GFFieldTypeSpec<boolean, GFConsentOptions>;
130
+ captcha: GFFieldTypeSpec<string, {}>;
131
+ html: GFFieldTypeSpec<void, {}>;
132
+ section: GFFieldTypeSpec<void, {}>;
133
+ };
134
+ export type GFBuiltins = typeof GF_BUILTIN_FIELDS;
135
+ export type GFFieldTypeName = keyof typeof GF_BUILTIN_FIELDS;
136
+ export declare function getBuiltinType(type: string): GFFieldTypeSpec<any, any> | undefined;
137
+ //# sourceMappingURL=field-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/field-types.tsx"],"names":[],"mappings":"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"}