@solspace/freeform-vue 0.1.17
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/LICENSE +22 -0
- package/README.md +61 -0
- package/dist/components/CaptchaHost.vue.d.ts +9 -0
- package/dist/components/ExtensionHost.vue.d.ts +23 -0
- package/dist/components/FieldRenderer.vue.d.ts +12 -0
- package/dist/components/FormLoader.vue.d.ts +12 -0
- package/dist/components/Freeform.vue.d.ts +24 -0
- package/dist/components/FreeformView.vue.d.ts +10 -0
- package/dist/composables/useFieldExtension.d.ts +3 -0
- package/dist/composables/useFreeform.d.ts +3 -0
- package/dist/index.css +2 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1764 -0
- package/dist/index.js.map +1 -0
- package/dist/renderers/builtin/CalculationField.d.ts +23 -0
- package/dist/renderers/builtin/SignatureField.d.ts +23 -0
- package/dist/renderers/builtin/TableField.d.ts +23 -0
- package/dist/renderers/builtin/fields.d.ts +29 -0
- package/dist/renderers/builtin/index.d.ts +3 -0
- package/dist/renderers/builtin/wrappers.d.ts +825 -0
- package/dist/renderers/resolve.d.ts +3 -0
- package/dist/theme/defaultTheme.d.ts +3 -0
- package/dist/theme/mergeClassNames.d.ts +3 -0
- package/dist/theme/resolveThemeClassNames.d.ts +7 -0
- package/dist/theme/toBemModifier.d.ts +5 -0
- package/dist/types.d.ts +184 -0
- package/dist/utils/securityMeta.d.ts +2 -0
- package/dist/version.d.ts +2 -0
- package/package.json +55 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ManifestFieldDefinition } from "@solspace/freeform-core";
|
|
2
|
+
import type { FreeformVueTheme, RendererOverrides, VueFieldRenderer } from "../types.js";
|
|
3
|
+
export declare function resolveFieldRenderer(field: ManifestFieldDefinition, userRenderers?: RendererOverrides, theme?: FreeformVueTheme): VueFieldRenderer;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ClassNameStrategy } from "../types.js";
|
|
2
|
+
export declare function joinClassNames(...parts: Array<string | undefined | false | null>): string | undefined;
|
|
3
|
+
export declare function mergeClassNames(strategy: ClassNameStrategy, base: string | undefined, extra: string | undefined): string | undefined;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ManifestFieldDefinition } from "@solspace/freeform-core";
|
|
2
|
+
import type { FreeformThemeClassNames, FreeformVueTheme } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Global classNames, then overlays for field type / frontend renderer / extension.
|
|
5
|
+
* Error styles append `inputError` onto the control (`optionInput` for choice fields).
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveThemeClassNames(theme: FreeformVueTheme, field: ManifestFieldDefinition, hasErrors?: boolean): FreeformThemeClassNames;
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { FieldValue, FreeformExtension, FreeformManifest, ManifestCaptchaSecurity, ManifestFieldDefinition, SubmitIntent, SubmitResponse } from "@solspace/freeform-core";
|
|
2
|
+
import type { Component, VNode } from "vue";
|
|
3
|
+
export { PACKAGE_VERSION } from "./version.js";
|
|
4
|
+
export declare const CLIENT_NAME = "@solspace/freeform-vue";
|
|
5
|
+
export type FreeformThemeClassNames = {
|
|
6
|
+
form?: string;
|
|
7
|
+
page?: string;
|
|
8
|
+
row?: string;
|
|
9
|
+
field?: string;
|
|
10
|
+
fieldRequired?: string;
|
|
11
|
+
fieldHidden?: string;
|
|
12
|
+
fieldHasErrors?: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
instructions?: string;
|
|
15
|
+
input?: string;
|
|
16
|
+
inputError?: string;
|
|
17
|
+
optionLabel?: string;
|
|
18
|
+
optionInput?: string;
|
|
19
|
+
content?: string;
|
|
20
|
+
errors?: string;
|
|
21
|
+
error?: string;
|
|
22
|
+
buttons?: string;
|
|
23
|
+
button?: string;
|
|
24
|
+
submitButton?: string;
|
|
25
|
+
nextButton?: string;
|
|
26
|
+
backButton?: string;
|
|
27
|
+
saveButton?: string;
|
|
28
|
+
success?: string;
|
|
29
|
+
};
|
|
30
|
+
export type ClassNameStrategy = "merge" | "replace";
|
|
31
|
+
export type VueFieldRendererProps = {
|
|
32
|
+
field: ManifestFieldDefinition;
|
|
33
|
+
form: FreeformRuntime;
|
|
34
|
+
value: FieldValue;
|
|
35
|
+
errors: string[];
|
|
36
|
+
input: Record<string, unknown>;
|
|
37
|
+
classNames: FreeformThemeClassNames;
|
|
38
|
+
allowRawHtml?: boolean;
|
|
39
|
+
renderLabel: () => VNode | null;
|
|
40
|
+
renderInstructions: () => VNode | null;
|
|
41
|
+
renderErrors: () => VNode | null;
|
|
42
|
+
};
|
|
43
|
+
export type VueFieldRenderer = Component<VueFieldRendererProps>;
|
|
44
|
+
export type RendererOverrides = {
|
|
45
|
+
handles?: Record<string, VueFieldRenderer>;
|
|
46
|
+
frontend?: Record<string, VueFieldRenderer>;
|
|
47
|
+
types?: Record<string, VueFieldRenderer>;
|
|
48
|
+
};
|
|
49
|
+
export type FreeformVueTheme = {
|
|
50
|
+
name: string;
|
|
51
|
+
framework: "vue";
|
|
52
|
+
classNameStrategy?: ClassNameStrategy;
|
|
53
|
+
classNames?: FreeformThemeClassNames;
|
|
54
|
+
classNamesByType?: Record<string, Partial<FreeformThemeClassNames>>;
|
|
55
|
+
renderers?: RendererOverrides & {
|
|
56
|
+
components?: Partial<FreeformThemeComponents>;
|
|
57
|
+
};
|
|
58
|
+
defaults?: {
|
|
59
|
+
renderLabels?: boolean;
|
|
60
|
+
renderInstructions?: boolean;
|
|
61
|
+
renderErrors?: boolean;
|
|
62
|
+
requiredIndicator?: string;
|
|
63
|
+
colorScheme?: "light" | "dark" | "system";
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
export type FreeformThemeComponents = {
|
|
67
|
+
Form: Component<FreeformComponentProps>;
|
|
68
|
+
Page: Component<FreeformPageProps>;
|
|
69
|
+
Row: Component<FreeformRowProps>;
|
|
70
|
+
FieldWrapper: Component<FreeformFieldWrapperProps>;
|
|
71
|
+
Label: Component<FreeformLabelProps>;
|
|
72
|
+
Instructions: Component<FreeformInstructionsProps>;
|
|
73
|
+
Errors: Component<FreeformErrorsProps>;
|
|
74
|
+
ButtonRow: Component<FreeformButtonRowProps>;
|
|
75
|
+
SubmitButton: Component<FreeformButtonProps>;
|
|
76
|
+
NextButton: Component<FreeformButtonProps>;
|
|
77
|
+
BackButton: Component<FreeformButtonProps>;
|
|
78
|
+
SaveButton: Component<FreeformButtonProps>;
|
|
79
|
+
SuccessMessage: Component<{
|
|
80
|
+
message: string;
|
|
81
|
+
class?: string;
|
|
82
|
+
}>;
|
|
83
|
+
UnsupportedField: Component<VueFieldRendererProps>;
|
|
84
|
+
};
|
|
85
|
+
export type FreeformComponentProps = {
|
|
86
|
+
form: FreeformRuntime;
|
|
87
|
+
class?: string;
|
|
88
|
+
onSubmit: (event: Event) => void;
|
|
89
|
+
};
|
|
90
|
+
export type FreeformPageProps = {
|
|
91
|
+
form: FreeformRuntime;
|
|
92
|
+
pageIndex: number;
|
|
93
|
+
class?: string;
|
|
94
|
+
};
|
|
95
|
+
export type FreeformRowProps = {
|
|
96
|
+
class?: string;
|
|
97
|
+
};
|
|
98
|
+
export type FreeformFieldWrapperProps = {
|
|
99
|
+
field: ManifestFieldDefinition;
|
|
100
|
+
form: FreeformRuntime;
|
|
101
|
+
class?: string;
|
|
102
|
+
};
|
|
103
|
+
export type FreeformLabelProps = {
|
|
104
|
+
field: ManifestFieldDefinition;
|
|
105
|
+
class?: string;
|
|
106
|
+
requiredIndicator?: string;
|
|
107
|
+
};
|
|
108
|
+
export type FreeformInstructionsProps = {
|
|
109
|
+
field: ManifestFieldDefinition;
|
|
110
|
+
class?: string;
|
|
111
|
+
};
|
|
112
|
+
export type FreeformErrorsProps = {
|
|
113
|
+
errors: string[];
|
|
114
|
+
class?: string;
|
|
115
|
+
errorClass?: string;
|
|
116
|
+
};
|
|
117
|
+
export type FreeformButtonRowProps = {
|
|
118
|
+
class?: string;
|
|
119
|
+
};
|
|
120
|
+
export type FreeformButtonProps = {
|
|
121
|
+
label: string;
|
|
122
|
+
class?: string;
|
|
123
|
+
disabled?: boolean;
|
|
124
|
+
type?: "button" | "submit";
|
|
125
|
+
onClick?: () => void;
|
|
126
|
+
};
|
|
127
|
+
export type FreeformRuntime = {
|
|
128
|
+
manifest: FreeformManifest;
|
|
129
|
+
values: Record<string, FieldValue>;
|
|
130
|
+
touched: Record<string, boolean>;
|
|
131
|
+
fieldErrors: Record<string, string[]>;
|
|
132
|
+
formErrors: string[];
|
|
133
|
+
pageErrors: string[];
|
|
134
|
+
currentPageIndex: number;
|
|
135
|
+
isSubmitting: boolean;
|
|
136
|
+
isComplete: boolean;
|
|
137
|
+
successMessage: string | null;
|
|
138
|
+
setValue: (handle: string, value: FieldValue) => void;
|
|
139
|
+
getValue: (handle: string) => FieldValue;
|
|
140
|
+
isFieldVisible: (handle: string) => boolean;
|
|
141
|
+
isFieldEnabled: (handle: string) => boolean;
|
|
142
|
+
getFieldProps: (handle: string) => Record<string, unknown>;
|
|
143
|
+
submit: (intent?: SubmitIntent) => Promise<SubmitResponse | undefined>;
|
|
144
|
+
validate: () => Promise<SubmitResponse | undefined>;
|
|
145
|
+
goNext: () => Promise<SubmitResponse | undefined>;
|
|
146
|
+
goBack: () => Promise<SubmitResponse | undefined>;
|
|
147
|
+
saveDraft: () => Promise<SubmitResponse | undefined>;
|
|
148
|
+
reset: () => void;
|
|
149
|
+
handleSubmit: (event?: Event) => Promise<void>;
|
|
150
|
+
mountFieldExtension: (handle: string, element: HTMLElement) => () => void;
|
|
151
|
+
mountCaptcha: (captcha: ManifestCaptchaSecurity, element: HTMLElement) => () => void;
|
|
152
|
+
};
|
|
153
|
+
export type UseFreeformOptions = {
|
|
154
|
+
handle?: string;
|
|
155
|
+
profile?: string;
|
|
156
|
+
properties?: Record<string, string | number | boolean>;
|
|
157
|
+
baseUrl: string;
|
|
158
|
+
manifest?: FreeformManifest;
|
|
159
|
+
initialValues?: Record<string, FieldValue>;
|
|
160
|
+
draftToken?: string | null;
|
|
161
|
+
draftKey?: string | null;
|
|
162
|
+
clientVersion?: string;
|
|
163
|
+
fetch?: typeof globalThis.fetch;
|
|
164
|
+
credentials?: RequestCredentials;
|
|
165
|
+
theme?: FreeformVueTheme;
|
|
166
|
+
renderers?: RendererOverrides;
|
|
167
|
+
extensions?: FreeformExtension[];
|
|
168
|
+
allowRawHtml?: boolean;
|
|
169
|
+
onSuccess?: (response: SubmitResponse) => void;
|
|
170
|
+
onError?: (response: SubmitResponse) => void;
|
|
171
|
+
onManifestLoaded?: (manifest: FreeformManifest) => void;
|
|
172
|
+
};
|
|
173
|
+
export type UseFreeformResult = {
|
|
174
|
+
loading: boolean;
|
|
175
|
+
error: Error | null;
|
|
176
|
+
manifest: FreeformManifest | null;
|
|
177
|
+
theme: FreeformVueTheme;
|
|
178
|
+
renderers: RendererOverrides;
|
|
179
|
+
allowRawHtml: boolean;
|
|
180
|
+
} & Omit<FreeformRuntime, "manifest">;
|
|
181
|
+
export type FreeformProps = UseFreeformOptions & {
|
|
182
|
+
class?: string;
|
|
183
|
+
loadingMessage?: string;
|
|
184
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@solspace/freeform-vue",
|
|
3
|
+
"version": "0.1.17",
|
|
4
|
+
"description": "Vue components and composables for Solspace Freeform headless forms",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "vue-tsc -p tsconfig.build.json --declaration --emitDeclarationOnly && vite build",
|
|
23
|
+
"dev": "vite build --watch",
|
|
24
|
+
"test": "vitest run --config vitest.config.ts",
|
|
25
|
+
"lint": "biome check src"
|
|
26
|
+
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"@solspace/freeform-core": "^0.1.0",
|
|
29
|
+
"vue": "^3.5.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@solspace/freeform-core": "workspace:*",
|
|
33
|
+
"@vitejs/plugin-vue": "^6.0.1",
|
|
34
|
+
"@vitejs/plugin-vue-jsx": "^5.1.1",
|
|
35
|
+
"@vue/test-utils": "^2.4.6",
|
|
36
|
+
"jsdom": "29.1.1",
|
|
37
|
+
"typescript": "^5.8.3",
|
|
38
|
+
"vite": "^8.1.0",
|
|
39
|
+
"vite-plugin-dts": "^4.5.4",
|
|
40
|
+
"vitest": "4.1.9",
|
|
41
|
+
"vue": "^3.5.22",
|
|
42
|
+
"vue-tsc": "^3.0.7"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"freeform",
|
|
46
|
+
"craft-cms",
|
|
47
|
+
"headless",
|
|
48
|
+
"vue"
|
|
49
|
+
],
|
|
50
|
+
"author": "Solspace Inc.",
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|