@solspace/freeform-vue 0.1.20 → 1.0.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/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -126,7 +126,7 @@ function de(e = {}) {
|
|
|
126
126
|
}
|
|
127
127
|
//#endregion
|
|
128
128
|
//#region src/version.ts
|
|
129
|
-
var fe = "0.
|
|
129
|
+
var fe = "1.0.0", pe = "@solspace/freeform-vue";
|
|
130
130
|
//#endregion
|
|
131
131
|
//#region src/utils/securityMeta.ts
|
|
132
132
|
function me(e) {
|
|
@@ -172,7 +172,7 @@ function ge(e) {
|
|
|
172
172
|
function T() {
|
|
173
173
|
o.value ||= te({
|
|
174
174
|
baseUrl: n.value.baseUrl,
|
|
175
|
-
clientVersion: n.value.clientVersion ?? "0.
|
|
175
|
+
clientVersion: n.value.clientVersion ?? "1.0.0",
|
|
176
176
|
fetch: n.value.fetch,
|
|
177
177
|
credentials: n.value.credentials
|
|
178
178
|
});
|
|
@@ -290,7 +290,7 @@ function ge(e) {
|
|
|
290
290
|
context: s,
|
|
291
291
|
meta: {
|
|
292
292
|
client: pe,
|
|
293
|
-
clientVersion: n.value.clientVersion ?? "0.
|
|
293
|
+
clientVersion: n.value.clientVersion ?? "1.0.0",
|
|
294
294
|
...l
|
|
295
295
|
}
|
|
296
296
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["CardsFieldRenderer","props","cards","field","frontend","config","maxSelected","Number","maxSelectedValues","selected","Array","isArray","value","map","String","singleSelect","_createVNode","classNames","input","display","gap","gridTemplateColumns","Math","min","cardsPerRow","card","checked","includes","optionLabel","undefined","border","borderRadius","padding","cursor","optionInput","handle","form","isFieldEnabled","event","setValue","next","Set","target","size","add","delete","imageUrl","width","height","marginBottom","label","description","CheckboxesFieldRenderer","props","selected","Array","isArray","value","map","String","_createVNode","classNames","input","field","options","option","optionLabel","optionInput","handle","includes","form","isFieldEnabled","event","next","Set","target","checked","add","delete","setValue","label","inputProps","CheckboxFieldRenderer","props","input","checked","value","_createVNode","classNames","optionLabel","optionInput","id","name","disabled","event","form","setValue","field","handle","target","onBlur","label","inputProps","ConfirmFieldRenderer","props","input","targetType","field","frontend","config","type","_createVNode","_mergeProps","classNames","ExtensionHost","inputProps","DatetimeFieldRenderer","props","input","config","field","frontend","inputType","useNativeTypes","nativeInputType","_createVNode","form","default","_mergeProps","classNames","useDatepicker","inputProps","EmailFieldRenderer","props","input","_createVNode","_mergeProps","classNames","ExtensionHost","FileDndFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","FileFieldRenderer","props","input","config","field","frontend","_createVNode","classNames","id","name","disabled","accept","undefined","Boolean","multiple","maxFiles","event","files","target","length","form","setValue","handle","Array","from","onBlur","inputProps","HiddenFieldRenderer","props","input","_createVNode","_mergeProps","HtmlFieldRenderer","props","contentClass","classNames","content","input","html","field","rendered","trim","allowRawHtml","_createVNode","instructions","ImageFieldRenderer","props","contentClass","classNames","content","input","config","field","frontend","image","src","srcset","alt","label","_createVNode","undefined","ExtensionHost","MolliePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","MultipleSelectFieldRenderer","props","input","selected","Array","isArray","value","map","String","_createVNode","classNames","id","name","disabled","event","next","from","target","selectedOptions","option","form","setValue","field","handle","onBlur","options","label","inputProps","NumberFieldRenderer","props","input","_createVNode","_mergeProps","classNames","OpinionScaleFieldRenderer","props","value","String","legends","field","frontend","config","_createVNode","classNames","input","display","gap","options","map","option","optionLabel","undefined","flexDirection","alignItems","optionInput","handle","form","isFieldEnabled","onChange","setValue","label","length","justifyContent","marginTop","fontSize","legend","inputProps","PasswordFieldRenderer","props","input","_createVNode","_mergeProps","classNames","ExtensionHost","PayPalPaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","PhoneFieldRenderer","props","input","_createVNode","_mergeProps","classNames","RadioFieldRenderer","props","value","String","_createVNode","classNames","input","field","options","map","option","optionLabel","optionInput","handle","form","isFieldEnabled","onChange","setValue","label","RatingFieldRenderer","props","value","String","config","field","frontend","idle","colorIdle","selected","colorSelected","_createVNode","classNames","input","options","map","option","active","Number","optionLabel","cursor","color","fontSize","marginRight","optionInput","handle","form","isFieldEnabled","onChange","setValue","position","opacity","pointerEvents","_createTextVNode","label","inputProps","RegexFieldRenderer","props","input","pattern","field","validation","frontend","config","undefined","_createVNode","_mergeProps","classNames","inputProps","SelectFieldRenderer","props","input","value","String","_createVNode","_mergeProps","classNames","field","placeholder","options","map","option","label","ExtensionHost","SquarePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","ExtensionHost","StripePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","TextareaFieldRenderer","props","input","_createVNode","_mergeProps","classNames","inputProps","TextFieldRenderer","props","input","_createVNode","_mergeProps","classNames","UnsupportedFieldRenderer","props","_createVNode","classNames","input","_createTextVNode","field","type","inputProps","WebsiteFieldRenderer","props","input","_createVNode","_mergeProps","classNames","evaluateCalculation","getCalculationConfig","defineComponent","shallowRef","watch","CalculationFieldRenderer","name","props","field","type","Object","required","form","classNames","value","setup","config","frontend","inputType","setValueRef","setValue","handle","calculations","decimalCount","values","cancelled","formula","result","next","String","current","getValue","immediate","deep","display","_createVNode","input","getSignatureConfig","isSignatureValueEmpty","defineComponent","onMounted","onUnmounted","ref","shallowRef","watch","SignatureFieldRenderer","name","props","field","type","Object","required","form","value","classNames","setup","canvasRef","drawing","hasInk","config","width","height","enabled","isFieldEnabled","handle","penColor","backgroundColor","borderColor","penSize","penDotSize","paintBackground","context","fillStyle","fillRect","commit","canvas","setValue","toDataURL","clear","getContext","clearRect","initCanvas","ratio","window","devicePixelRatio","Math","floor","style","setTransform","strokeStyle","lineWidth","lineCap","lineJoin","startsWith","image","Image","onload","drawImage","src","point","event","x","y","rect","getBoundingClientRect","clientX","left","clientY","top","endStroke","_createVNode","input","maxWidth","border","touchAction","cursor","display","label","setPointerCapture","pointerId","beginPath","moveTo","lineTo","stroke","showClearButton","_createTextVNode","canAddTableRow","canRemoveTableRow","emptyTableRow","getTableConfig","normalizeTableRows","resolveTableColumnOptions","computed","defineComponent","shallowRef","watch","TableFieldRenderer","name","props","field","type","Object","required","form","value","classNames","setup","config","columns","enabled","isFieldEnabled","handle","rows","seededRef","Array","isArray","length","setValue","immediate","setRows","next","updateCell","rowIndex","columnIndex","map","row","currentRows","currentColumns","currentConfig","isEnabled","showAdd","_createVNode","input","column","colIndex","label","undefined","cellValue","optionList","cellKey","Boolean","event","target","checked","String","placeholder","option","id","onChange","selected","fileCount","Math","max","Number","metadata","files","from","slice","file","size","onClick","filter","_","index","removeButtonLabel","addButtonLabel","defineComponent","createVNode","_createVNode","createTextVNode","_createTextVNode","CalculationFieldRenderer","CardsFieldRenderer","CheckboxesFieldRenderer","CheckboxFieldRenderer","ConfirmFieldRenderer","DatetimeFieldRenderer","EmailFieldRenderer","FileDndFieldRenderer","FileFieldRenderer","HiddenFieldRenderer","HtmlFieldRenderer","ImageFieldRenderer","MolliePaymentFieldRenderer","MultipleSelectFieldRenderer","NumberFieldRenderer","OpinionScaleFieldRenderer","PasswordFieldRenderer","PayPalPaymentFieldRenderer","PhoneFieldRenderer","RadioFieldRenderer","RatingFieldRenderer","RegexFieldRenderer","SelectFieldRenderer","SquarePaymentFieldRenderer","StripePaymentFieldRenderer","TextareaFieldRenderer","TextFieldRenderer","UnsupportedFieldRenderer","WebsiteFieldRenderer","SignatureFieldRenderer","TableFieldRenderer","DefaultForm","name","props","form","type","Object","required","class","String","default","undefined","onSubmit","Function","setup","slots","DefaultPage","pageIndex","Number","DefaultRow","DefaultFieldWrapper","field","isVisuallyHidden","frontend","renderer","extension","isFieldVisible","handle","DefaultLabel","requiredIndicator","label","DefaultInstructions","instructions","DefaultErrors","errors","Array","errorClass","length","map","error","DefaultButtonRow","buttonComponent","defaultType","disabled","Boolean","onClick","DefaultSubmitButton","DefaultNextButton","DefaultBackButton","DefaultSaveButton","DefaultSuccessMessage","message","builtinRenderers","text","textarea","email","number","phone","website","regex","password","confirm","hidden","dropdown","select","checkbox","checkboxes","radios","radio","rating","cards","datetime","file","html","image","table","signature","calculation","types","radiobox","stripe","square","paypal","mollie","_unsupported","builtinComponents","Form","Page","Row","FieldWrapper","Label","Instructions","Errors","ButtonRow","SubmitButton","NextButton","BackButton","SaveButton","SuccessMessage","UnsupportedField","$slots"],"sources":["../src/components/FormLoader.vue","../src/components/FormLoader.vue","../src/theme/defaultTheme.ts","../src/version.ts","../src/types.ts","../src/utils/securityMeta.ts","../src/composables/useFreeform.ts","../src/renderers/builtin/CardsField.tsx","../src/renderers/builtin/CheckboxesField.tsx","../src/renderers/builtin/inputProps.ts","../src/renderers/builtin/CheckboxField.tsx","../src/renderers/builtin/ConfirmField.tsx","../src/composables/useFieldExtension.ts","../src/components/ExtensionHost.vue","../src/components/ExtensionHost.vue","../src/renderers/builtin/DatetimeField.tsx","../src/renderers/builtin/EmailField.tsx","../src/renderers/builtin/FileDndField.tsx","../src/renderers/builtin/FileField.tsx","../src/renderers/builtin/HiddenField.tsx","../src/renderers/builtin/HtmlField.tsx","../src/renderers/builtin/ImageField.tsx","../src/renderers/builtin/MolliePaymentField.tsx","../src/renderers/builtin/MultipleSelectField.tsx","../src/renderers/builtin/NumberField.tsx","../src/renderers/builtin/OpinionScaleField.tsx","../src/renderers/builtin/PasswordField.tsx","../src/renderers/builtin/PayPalPaymentField.tsx","../src/renderers/builtin/PhoneField.tsx","../src/renderers/builtin/RadioField.tsx","../src/renderers/builtin/RatingField.tsx","../src/renderers/builtin/RegexField.tsx","../src/renderers/builtin/SelectField.tsx","../src/renderers/builtin/SquarePaymentField.tsx","../src/renderers/builtin/StripePaymentField.tsx","../src/renderers/builtin/TextareaField.tsx","../src/renderers/builtin/TextField.tsx","../src/renderers/builtin/UnsupportedField.tsx","../src/renderers/builtin/WebsiteField.tsx","../src/renderers/builtin/CalculationField.tsx","../src/renderers/builtin/SignatureField.tsx","../src/renderers/builtin/TableField.tsx","../src/renderers/builtin/wrappers.tsx","../src/theme/mergeClassNames.ts","../src/theme/toBemModifier.ts","../src/components/CaptchaHost.vue","../src/components/CaptchaHost.vue","../src/renderers/resolve.ts","../src/theme/resolveThemeClassNames.ts","../src/components/FieldRenderer.vue","../src/components/FieldRenderer.vue","../src/components/FreeformView.vue","../src/components/FreeformView.vue","../src/components/Freeform.vue","../src/components/Freeform.vue"],"sourcesContent":["<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n message?: string;\n loaderClass?: string;\n variant?: \"spinner\" | \"skeleton\";\n }>(),\n {\n message: \"Loading form…\",\n loaderClass: \"ff-loader\",\n variant: \"skeleton\",\n },\n);\n</script>\n\n<template>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n :data-variant=\"variant\"\n :class=\"['ff-loader-root', loaderClass]\"\n >\n <div v-if=\"variant === 'skeleton'\" class=\"ff-loader-skeleton\" aria-hidden=\"true\">\n <div class=\"ff-loader-line ff-loader-line--title\" />\n <div v-for=\"index in 3\" :key=\"index\" class=\"ff-loader-field\">\n <div\n class=\"ff-loader-line ff-loader-line--label\"\n :style=\"{ animationDelay: `${index * 0.12}s` }\"\n />\n <div\n class=\"ff-loader-line ff-loader-line--input\"\n :style=\"{\n width: index === 2 ? '62%' : '100%',\n animationDelay: `${index * 0.12}s`,\n }\"\n />\n </div>\n <div\n class=\"ff-loader-line ff-loader-line--button\"\n :style=\"{ animationDelay: '0.36s' }\"\n />\n </div>\n <div v-else class=\"ff-loader-spinner\" aria-hidden=\"true\" />\n <p class=\"ff-loader-message\">{{ message }}</p>\n </div>\n</template>\n\n<style scoped>\n.ff-loader-root {\n display: grid;\n gap: 1rem;\n padding: 1.25rem 0;\n color: inherit;\n}\n\n.ff-loader-skeleton {\n width: 100%;\n}\n\n.ff-loader-line {\n background-color: currentColor;\n border-radius: 8px;\n opacity: 0.12;\n animation: ff-loader-pulse 1.4s ease-in-out infinite;\n}\n\n.ff-loader-line--title {\n width: 38%;\n height: 0.75rem;\n margin-bottom: 1.25rem;\n}\n\n.ff-loader-line--label {\n width: 28%;\n height: 0.65rem;\n margin-bottom: 0.45rem;\n}\n\n.ff-loader-line--input {\n height: 2.5rem;\n}\n\n.ff-loader-line--button {\n width: 7rem;\n height: 2.5rem;\n margin-top: 0.5rem;\n}\n\n.ff-loader-field {\n margin-bottom: 1rem;\n}\n\n.ff-loader-spinner {\n width: 2rem;\n height: 2rem;\n border: 3px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n opacity: 0.85;\n animation: ff-loader-spin 0.7s linear infinite;\n}\n\n.ff-loader-message {\n margin: 0;\n font-size: 0.9rem;\n opacity: 0.75;\n}\n\n@keyframes ff-loader-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes ff-loader-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n message?: string;\n loaderClass?: string;\n variant?: \"spinner\" | \"skeleton\";\n }>(),\n {\n message: \"Loading form…\",\n loaderClass: \"ff-loader\",\n variant: \"skeleton\",\n },\n);\n</script>\n\n<template>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n :data-variant=\"variant\"\n :class=\"['ff-loader-root', loaderClass]\"\n >\n <div v-if=\"variant === 'skeleton'\" class=\"ff-loader-skeleton\" aria-hidden=\"true\">\n <div class=\"ff-loader-line ff-loader-line--title\" />\n <div v-for=\"index in 3\" :key=\"index\" class=\"ff-loader-field\">\n <div\n class=\"ff-loader-line ff-loader-line--label\"\n :style=\"{ animationDelay: `${index * 0.12}s` }\"\n />\n <div\n class=\"ff-loader-line ff-loader-line--input\"\n :style=\"{\n width: index === 2 ? '62%' : '100%',\n animationDelay: `${index * 0.12}s`,\n }\"\n />\n </div>\n <div\n class=\"ff-loader-line ff-loader-line--button\"\n :style=\"{ animationDelay: '0.36s' }\"\n />\n </div>\n <div v-else class=\"ff-loader-spinner\" aria-hidden=\"true\" />\n <p class=\"ff-loader-message\">{{ message }}</p>\n </div>\n</template>\n\n<style scoped>\n.ff-loader-root {\n display: grid;\n gap: 1rem;\n padding: 1.25rem 0;\n color: inherit;\n}\n\n.ff-loader-skeleton {\n width: 100%;\n}\n\n.ff-loader-line {\n background-color: currentColor;\n border-radius: 8px;\n opacity: 0.12;\n animation: ff-loader-pulse 1.4s ease-in-out infinite;\n}\n\n.ff-loader-line--title {\n width: 38%;\n height: 0.75rem;\n margin-bottom: 1.25rem;\n}\n\n.ff-loader-line--label {\n width: 28%;\n height: 0.65rem;\n margin-bottom: 0.45rem;\n}\n\n.ff-loader-line--input {\n height: 2.5rem;\n}\n\n.ff-loader-line--button {\n width: 7rem;\n height: 2.5rem;\n margin-top: 0.5rem;\n}\n\n.ff-loader-field {\n margin-bottom: 1rem;\n}\n\n.ff-loader-spinner {\n width: 2rem;\n height: 2rem;\n border: 3px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n opacity: 0.85;\n animation: ff-loader-spin 0.7s linear infinite;\n}\n\n.ff-loader-message {\n margin: 0;\n font-size: 0.9rem;\n opacity: 0.75;\n}\n\n@keyframes ff-loader-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes ff-loader-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n</style>\n","import type { FreeformThemeClassNames, FreeformVueTheme } from \"../types.js\";\n\nexport const defaultTheme: FreeformVueTheme = {\n name: \"default\",\n framework: \"vue\",\n classNameStrategy: \"merge\",\n classNames: {\n form: \"ff-form\",\n page: \"ff-page\",\n row: \"ff-row\",\n field: \"ff-field\",\n fieldRequired: \"ff-field--required\",\n fieldHidden: \"ff-field--hidden\",\n fieldHasErrors: \"ff-field--has-errors\",\n label: \"ff-field__label\",\n instructions: \"ff-field__instructions\",\n input: \"ff-field__input\",\n content: \"ff-field__content\",\n errors: \"ff-field__errors\",\n error: \"ff-field__error\",\n buttons: \"ff-form__buttons\",\n button: \"ff-button\",\n submitButton: \"ff-button ff-button--submit\",\n nextButton: \"ff-button ff-button--next\",\n backButton: \"ff-button ff-button--back\",\n saveButton: \"ff-button ff-button--save\",\n success: \"ff-form__success\",\n },\n defaults: {\n renderLabels: true,\n renderInstructions: true,\n renderErrors: true,\n requiredIndicator: \"*\",\n colorScheme: \"system\",\n },\n};\n\nfunction mergeClassNamesByType(\n base: FreeformVueTheme[\"classNamesByType\"],\n overlay: FreeformVueTheme[\"classNamesByType\"],\n): FreeformVueTheme[\"classNamesByType\"] {\n if (!base && !overlay) {\n return undefined;\n }\n\n const keys = new Set([\n ...Object.keys(base ?? {}),\n ...Object.keys(overlay ?? {}),\n ]);\n const merged: Record<string, Partial<FreeformThemeClassNames>> = {};\n\n for (const key of keys) {\n merged[key] = { ...base?.[key], ...overlay?.[key] };\n }\n\n return merged;\n}\n\nexport function createTheme(\n overrides: Partial<FreeformVueTheme> = {},\n): FreeformVueTheme {\n const strategy =\n overrides.classNameStrategy ?? defaultTheme.classNameStrategy;\n const mergeDefaultClassNames = strategy !== \"replace\";\n\n return {\n ...defaultTheme,\n ...overrides,\n classNameStrategy: strategy,\n classNames: mergeDefaultClassNames\n ? {\n ...defaultTheme.classNames,\n ...overrides.classNames,\n }\n : { ...overrides.classNames },\n classNamesByType: mergeClassNamesByType(\n mergeDefaultClassNames ? defaultTheme.classNamesByType : undefined,\n overrides.classNamesByType,\n ),\n defaults: {\n ...defaultTheme.defaults,\n ...overrides.defaults,\n },\n renderers: {\n ...defaultTheme.renderers,\n ...overrides.renderers,\n handles: {\n ...defaultTheme.renderers?.handles,\n ...overrides.renderers?.handles,\n },\n frontend: {\n ...defaultTheme.renderers?.frontend,\n ...overrides.renderers?.frontend,\n },\n types: {\n ...defaultTheme.renderers?.types,\n ...overrides.renderers?.types,\n },\n },\n };\n}\n","/** Kept in sync with package.json by `pnpm frontend:bump`. */\nexport const PACKAGE_VERSION = \"0.1.20\";\n","import type {\n FieldValue,\n FreeformExtension,\n FreeformManifest,\n ManifestCaptchaSecurity,\n ManifestFieldDefinition,\n SubmitIntent,\n SubmitResponse,\n} from \"@solspace/freeform-core\";\nimport type { Component, VNode } from \"vue\";\n\nexport { PACKAGE_VERSION } from \"./version.js\";\nexport const CLIENT_NAME = \"@solspace/freeform-vue\";\n\nexport type FreeformThemeClassNames = {\n form?: string;\n page?: string;\n row?: string;\n field?: string;\n fieldRequired?: string;\n fieldHidden?: string;\n fieldHasErrors?: string;\n label?: string;\n instructions?: string;\n input?: string;\n inputError?: string;\n optionLabel?: string;\n optionInput?: string;\n content?: string;\n errors?: string;\n error?: string;\n buttons?: string;\n button?: string;\n submitButton?: string;\n nextButton?: string;\n backButton?: string;\n saveButton?: string;\n success?: string;\n};\n\nexport type ClassNameStrategy = \"merge\" | \"replace\";\n\nexport type VueFieldRendererProps = {\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n value: FieldValue;\n errors: string[];\n input: Record<string, unknown>;\n classNames: FreeformThemeClassNames;\n allowRawHtml?: boolean;\n renderLabel: () => VNode | null;\n renderInstructions: () => VNode | null;\n renderErrors: () => VNode | null;\n};\n\nexport type VueFieldRenderer = Component<VueFieldRendererProps>;\n\nexport type RendererOverrides = {\n handles?: Record<string, VueFieldRenderer>;\n frontend?: Record<string, VueFieldRenderer>;\n types?: Record<string, VueFieldRenderer>;\n};\n\nexport type FreeformVueTheme = {\n name: string;\n framework: \"vue\";\n classNameStrategy?: ClassNameStrategy;\n classNames?: FreeformThemeClassNames;\n classNamesByType?: Record<string, Partial<FreeformThemeClassNames>>;\n renderers?: RendererOverrides & {\n components?: Partial<FreeformThemeComponents>;\n };\n defaults?: {\n renderLabels?: boolean;\n renderInstructions?: boolean;\n renderErrors?: boolean;\n requiredIndicator?: string;\n colorScheme?: \"light\" | \"dark\" | \"system\";\n };\n};\n\nexport type FreeformThemeComponents = {\n Form: Component<FreeformComponentProps>;\n Page: Component<FreeformPageProps>;\n Row: Component<FreeformRowProps>;\n FieldWrapper: Component<FreeformFieldWrapperProps>;\n Label: Component<FreeformLabelProps>;\n Instructions: Component<FreeformInstructionsProps>;\n Errors: Component<FreeformErrorsProps>;\n ButtonRow: Component<FreeformButtonRowProps>;\n SubmitButton: Component<FreeformButtonProps>;\n NextButton: Component<FreeformButtonProps>;\n BackButton: Component<FreeformButtonProps>;\n SaveButton: Component<FreeformButtonProps>;\n SuccessMessage: Component<{ message: string; class?: string }>;\n UnsupportedField: Component<VueFieldRendererProps>;\n};\n\nexport type FreeformComponentProps = {\n form: FreeformRuntime;\n class?: string;\n onSubmit: (event: Event) => void;\n};\n\nexport type FreeformPageProps = {\n form: FreeformRuntime;\n pageIndex: number;\n class?: string;\n};\n\nexport type FreeformRowProps = {\n class?: string;\n};\n\nexport type FreeformFieldWrapperProps = {\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n};\n\nexport type FreeformLabelProps = {\n field: ManifestFieldDefinition;\n class?: string;\n requiredIndicator?: string;\n};\n\nexport type FreeformInstructionsProps = {\n field: ManifestFieldDefinition;\n class?: string;\n};\n\nexport type FreeformErrorsProps = {\n errors: string[];\n class?: string;\n errorClass?: string;\n};\n\nexport type FreeformButtonRowProps = {\n class?: string;\n};\n\nexport type FreeformButtonProps = {\n label: string;\n class?: string;\n disabled?: boolean;\n type?: \"button\" | \"submit\";\n onClick?: () => void;\n};\n\nexport type FreeformRuntime = {\n manifest: FreeformManifest;\n values: Record<string, FieldValue>;\n touched: Record<string, boolean>;\n fieldErrors: Record<string, string[]>;\n formErrors: string[];\n pageErrors: string[];\n currentPageIndex: number;\n isSubmitting: boolean;\n isComplete: boolean;\n successMessage: string | null;\n setValue: (handle: string, value: FieldValue) => void;\n getValue: (handle: string) => FieldValue;\n isFieldVisible: (handle: string) => boolean;\n isFieldEnabled: (handle: string) => boolean;\n getFieldProps: (handle: string) => Record<string, unknown>;\n submit: (intent?: SubmitIntent) => Promise<SubmitResponse | undefined>;\n validate: () => Promise<SubmitResponse | undefined>;\n goNext: () => Promise<SubmitResponse | undefined>;\n goBack: () => Promise<SubmitResponse | undefined>;\n saveDraft: () => Promise<SubmitResponse | undefined>;\n reset: () => void;\n handleSubmit: (event?: Event) => Promise<void>;\n mountFieldExtension: (handle: string, element: HTMLElement) => () => void;\n mountCaptcha: (\n captcha: ManifestCaptchaSecurity,\n element: HTMLElement,\n ) => () => void;\n};\n\nexport type UseFreeformOptions = {\n handle?: string;\n profile?: string;\n properties?: Record<string, string | number | boolean>;\n baseUrl: string;\n manifest?: FreeformManifest;\n initialValues?: Record<string, FieldValue>;\n draftToken?: string | null;\n draftKey?: string | null;\n clientVersion?: string;\n fetch?: typeof globalThis.fetch;\n credentials?: RequestCredentials;\n theme?: FreeformVueTheme;\n renderers?: RendererOverrides;\n extensions?: FreeformExtension[];\n allowRawHtml?: boolean;\n onSuccess?: (response: SubmitResponse) => void;\n onError?: (response: SubmitResponse) => void;\n onManifestLoaded?: (manifest: FreeformManifest) => void;\n};\n\nexport type UseFreeformResult = {\n loading: boolean;\n error: Error | null;\n manifest: FreeformManifest | null;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml: boolean;\n} & Omit<FreeformRuntime, \"manifest\">;\n\nexport type FreeformProps = UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n};\n","import type { FreeformManifest, SubmitMeta } from \"@solspace/freeform-core\";\n\nexport function buildSecurityMeta(manifest: FreeformManifest): SubmitMeta {\n const meta: SubmitMeta = {};\n\n if (manifest.security.honeypot?.name) {\n meta.honeypot = {\n name: manifest.security.honeypot.name,\n value: \"\",\n };\n }\n\n if (manifest.security.javascriptTest?.name) {\n meta.javascriptTest = {\n name: manifest.security.javascriptTest.name,\n value: manifest.security.javascriptTest.value ?? \"\",\n };\n }\n\n return meta;\n}\n","import {\n CLIENT_NAME as CORE_CLIENT_NAME,\n collectExtensionSubmitMeta,\n createFormState,\n createFreeformClient,\n type FieldValue,\n type FormState,\n type FreeformClient,\n type FreeformExtension,\n type FreeformManifest,\n type ManifestCaptchaSecurity,\n prepareSubmitValues,\n runExtensionAfterSubmit,\n runExtensionSetups,\n type SubmitIntent,\n} from \"@solspace/freeform-core\";\nimport {\n computed,\n type MaybeRefOrGetter,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n watchEffect,\n} from \"vue\";\nimport { defaultTheme } from \"../theme/defaultTheme.js\";\nimport {\n CLIENT_NAME,\n type FreeformRuntime,\n PACKAGE_VERSION,\n type UseFreeformOptions,\n type UseFreeformResult,\n} from \"../types.js\";\nimport { buildSecurityMeta } from \"../utils/securityMeta.js\";\n\ntype Snapshot = {\n values: Record<string, FieldValue>;\n touched: Record<string, boolean>;\n fieldErrors: Record<string, string[]>;\n formErrors: string[];\n pageErrors: string[];\n currentPageIndex: number;\n visibilityVersion: number;\n};\n\nfunction snapshotFromState(\n formState: FormState,\n visibilityVersion: number,\n): Snapshot {\n return {\n values: { ...formState.values },\n touched: { ...formState.touched },\n fieldErrors: { ...formState.fieldErrors },\n formErrors: [...formState.formErrors],\n pageErrors: [...formState.pageErrors],\n currentPageIndex: formState.currentPageIndex,\n visibilityVersion,\n };\n}\n\nexport function useFreeform(\n options: MaybeRefOrGetter<UseFreeformOptions>,\n): UseFreeformResult {\n const opts = computed(() => toValue(options));\n const theme = computed(() => opts.value.theme ?? defaultTheme);\n const renderers = computed(() => opts.value.renderers ?? {});\n const allowRawHtml = computed(() => opts.value.allowRawHtml ?? false);\n\n const clientRef = shallowRef<FreeformClient | null>(null);\n const formStateRef = shallowRef<FormState | null>(null);\n const extensionMountsRef = shallowRef(new Map<string, HTMLElement>());\n const captchaCleanupsRef = shallowRef(new Map<string, () => void>());\n const extensionsRef = shallowRef<FreeformExtension[]>([]);\n const visibilityVersionRef = ref(0);\n const draftHydrateKeyRef = ref<string | null>(null);\n\n const manifest = ref<FreeformManifest | null>(opts.value.manifest ?? null);\n const loading = ref(!opts.value.manifest);\n const error = ref<Error | null>(null);\n const isSubmitting = ref(false);\n const isComplete = ref(false);\n const successMessage = ref<string | null>(null);\n const snapshot = ref<Snapshot>({\n values: {},\n touched: {},\n fieldErrors: {},\n formErrors: [],\n pageErrors: [],\n currentPageIndex: 0,\n visibilityVersion: 0,\n });\n\n watch(\n () => opts.value.extensions,\n (extensions) => {\n extensionsRef.value = extensions ?? [];\n },\n { immediate: true },\n );\n\n function syncFromFormState() {\n const formState = formStateRef.value;\n if (!formState) {\n return;\n }\n\n visibilityVersionRef.value += 1;\n snapshot.value = snapshotFromState(formState, visibilityVersionRef.value);\n }\n\n function getClient(): FreeformClient {\n if (!clientRef.value) {\n clientRef.value = createFreeformClient({\n baseUrl: opts.value.baseUrl,\n clientVersion: opts.value.clientVersion ?? PACKAGE_VERSION,\n fetch: opts.value.fetch,\n credentials: opts.value.credentials,\n });\n }\n\n for (const extension of extensionsRef.value) {\n clientRef.value.extensions.register(extension);\n }\n\n return clientRef.value;\n }\n\n watch(\n () => opts.value.extensions,\n () => {\n const client = getClient();\n for (const extension of extensionsRef.value) {\n client.extensions.register(extension);\n }\n },\n );\n\n watch(manifest, (current) => {\n if (!current) {\n return;\n }\n void runExtensionSetups(extensionsRef.value, { manifest: current });\n });\n\n watch(\n () => [\n opts.value.handle,\n opts.value.profile,\n opts.value.properties,\n opts.value.manifest,\n opts.value.initialValues,\n ],\n () => {\n if (opts.value.manifest) {\n formStateRef.value = createFormState({\n manifest: opts.value.manifest,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n manifest.value = opts.value.manifest;\n syncFromFormState();\n loading.value = false;\n return;\n }\n\n if (!opts.value.handle && !opts.value.profile) {\n error.value = new Error(\n \"Either handle, profile, or manifest is required.\",\n );\n loading.value = false;\n return;\n }\n\n let cancelled = false;\n\n const load = async () => {\n loading.value = true;\n error.value = null;\n\n try {\n const loaded = await getClient().loadManifest({\n handle: opts.value.handle,\n profile: opts.value.profile,\n properties: opts.value.properties,\n });\n\n if (cancelled) {\n return;\n }\n\n formStateRef.value = createFormState({\n manifest: loaded,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n manifest.value = loaded;\n syncFromFormState();\n opts.value.onManifestLoaded?.(loaded);\n } catch (loadError) {\n if (!cancelled) {\n error.value =\n loadError instanceof Error\n ? loadError\n : new Error(\"Failed to load manifest.\");\n }\n } finally {\n if (!cancelled) {\n loading.value = false;\n }\n }\n };\n\n void load();\n\n onScopeDispose(() => {\n cancelled = true;\n });\n },\n { immediate: true },\n );\n\n watch(\n () => [opts.value.draftToken, opts.value.draftKey],\n () => {\n const formState = formStateRef.value;\n if (!formState) {\n return;\n }\n\n if (opts.value.draftToken !== undefined) {\n formState.draftToken = opts.value.draftToken ?? null;\n }\n if (opts.value.draftKey !== undefined) {\n formState.draftKey = opts.value.draftKey ?? null;\n }\n },\n );\n\n function setValue(handle: string, value: FieldValue) {\n formStateRef.value?.setValue(handle, value);\n syncFromFormState();\n }\n\n function getValue(handle: string) {\n return formStateRef.value?.getValue(handle);\n }\n\n function isFieldVisible(handle: string) {\n return formStateRef.value?.isFieldVisible(handle) ?? false;\n }\n\n function isFieldEnabled(handle: string) {\n return formStateRef.value?.isFieldEnabled(handle) ?? true;\n }\n\n function getFieldProps(handle: string) {\n const formState = formStateRef.value;\n const field = manifest.value?.fields[handle];\n const value = formState?.getValue(handle);\n\n return {\n id: `freeform-${handle}`,\n name: handle,\n value: value ?? \"\",\n onChange: (event: Event) => {\n const target = event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n setValue(handle, target.value);\n },\n onBlur: () => {\n const current = formStateRef.value;\n if (!current) {\n return;\n }\n current.touched = { ...current.touched, [handle]: true };\n syncFromFormState();\n },\n disabled: !isFieldEnabled(handle),\n required: field?.required ?? false,\n placeholder: field?.placeholder ?? undefined,\n \"aria-invalid\": (formState?.fieldErrors[handle]?.length ?? 0) > 0,\n };\n }\n\n async function submit(intent: SubmitIntent = \"submit\") {\n const formState = formStateRef.value;\n const currentManifest = manifest.value;\n if (!formState || !currentManifest) {\n return undefined;\n }\n\n isSubmitting.value = true;\n\n try {\n const rawValues = formState.getValuesForSubmit();\n const { values, files } = prepareSubmitValues(\n rawValues,\n currentManifest.fields,\n );\n\n const submitContext = {\n ...formState.getSubmitContext(),\n sourceUrl:\n typeof window !== \"undefined\" ? window.location.href : undefined,\n };\n\n const securityMeta = buildSecurityMeta(currentManifest);\n const extensionMeta = await collectExtensionSubmitMeta(\n extensionsRef.value,\n {\n manifest: currentManifest,\n intent,\n values,\n meta: securityMeta,\n context: submitContext,\n baseUrl: opts.value.baseUrl,\n },\n );\n\n const result = await getClient().submit({\n manifest: currentManifest,\n request: {\n values,\n intent,\n context: submitContext,\n meta: {\n client: CLIENT_NAME,\n clientVersion: opts.value.clientVersion ?? PACKAGE_VERSION,\n ...extensionMeta,\n },\n },\n files: Object.keys(files).length > 0 ? files : undefined,\n });\n\n formState.applySubmitResponse(result);\n syncFromFormState();\n\n await runExtensionAfterSubmit(extensionsRef.value, {\n manifest: currentManifest,\n intent,\n response: result,\n baseUrl: opts.value.baseUrl,\n });\n\n if (result.complete) {\n isComplete.value = true;\n successMessage.value =\n result.message ??\n currentManifest.settings.successMessage ??\n \"Thank you for your submission.\";\n }\n\n if (result.success) {\n opts.value.onSuccess?.(result);\n } else {\n opts.value.onError?.(result);\n }\n\n return result;\n } catch (submitError) {\n if (\n submitError instanceof Error &&\n (submitError.name === \"StripePaymentRedirectError\" ||\n submitError.name === \"MolliePaymentRedirectError\")\n ) {\n return undefined;\n }\n\n const message =\n submitError instanceof Error\n ? submitError\n : new Error(\"Something went wrong while submitting the form.\");\n if (formState) {\n formState.formErrors = [message.message];\n formState.fieldErrors = {};\n formState.pageErrors = [];\n syncFromFormState();\n }\n opts.value.onError?.({\n success: false,\n status: \"error\",\n complete: false,\n errors: { fields: {}, form: [message.message], page: [] },\n });\n return undefined;\n } finally {\n isSubmitting.value = false;\n }\n }\n\n const validate = () => submit(\"validate\");\n const goNext = () => submit(\"next\");\n const goBack = () => submit(\"back\");\n const saveDraft = () => submit(\"saveDraft\");\n\n watch(\n () => [manifest.value, opts.value.draftToken, opts.value.draftKey],\n () => {\n if (!manifest.value) {\n return;\n }\n\n const token = opts.value.draftToken;\n const key = opts.value.draftKey;\n if (!token || !key) {\n return;\n }\n\n const hydrateKey = `${token}:${key}`;\n if (draftHydrateKeyRef.value === hydrateKey) {\n return;\n }\n\n draftHydrateKeyRef.value = hydrateKey;\n void submit(\"validate\");\n },\n );\n\n function reset() {\n if (!manifest.value) {\n return;\n }\n\n formStateRef.value = createFormState({\n manifest: manifest.value,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n isComplete.value = false;\n successMessage.value = null;\n syncFromFormState();\n }\n\n async function handleSubmit(event?: Event) {\n event?.preventDefault();\n\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return;\n }\n\n const pages = currentManifest.layout.pages;\n const isLastPage =\n pages.length === 0 || snapshot.value.currentPageIndex >= pages.length - 1;\n\n if (currentManifest.settings.multiPage && !isLastPage) {\n await goNext();\n return;\n }\n\n await submit(\"submit\");\n }\n\n function mountFieldExtension(handle: string, element: HTMLElement) {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return () => {};\n }\n\n extensionMountsRef.value.set(handle, element);\n const field = currentManifest.fields[handle];\n if (!field) {\n return () => {\n extensionMountsRef.value.delete(handle);\n };\n }\n\n let cancelled = false;\n const cleanups: Array<() => void> = [];\n\n void (async () => {\n for (const extension of extensionsRef.value) {\n if (extension.supports && !extension.supports(field)) {\n continue;\n }\n if (!extension.mount) {\n continue;\n }\n\n const cleanup = await extension.mount({\n manifest: currentManifest,\n field,\n element,\n value: formStateRef.value?.getValue(handle),\n setValue: (value) => {\n formStateRef.value?.setValue(handle, value as FieldValue);\n syncFromFormState();\n },\n getValues: () =>\n (formStateRef.value?.getValuesForSubmit() ?? {}) as Record<\n string,\n unknown\n >,\n baseUrl: opts.value.baseUrl,\n requestSubmit: () => {\n void submit(\"submit\");\n },\n });\n\n if (cancelled) {\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n return;\n }\n\n if (typeof cleanup === \"function\") {\n cleanups.push(cleanup);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n for (const cleanup of cleanups) {\n cleanup();\n }\n extensionMountsRef.value.delete(handle);\n };\n }\n\n function mountCaptcha(\n captcha: ManifestCaptchaSecurity,\n element: HTMLElement,\n ) {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return () => {};\n }\n\n let cancelled = false;\n const cleanups: Array<() => void> = [];\n\n void (async () => {\n for (const extension of extensionsRef.value) {\n const cleanup = await extension.mountCaptcha?.({\n manifest: currentManifest,\n captcha,\n element,\n });\n if (cancelled) {\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n return;\n }\n if (typeof cleanup === \"function\") {\n cleanups.push(cleanup);\n }\n }\n })();\n\n const dispose = () => {\n cancelled = true;\n for (const cleanup of cleanups) {\n cleanup();\n }\n captchaCleanupsRef.value.delete(captcha.name);\n };\n\n captchaCleanupsRef.value.set(captcha.name, dispose);\n return dispose;\n }\n\n const runtime = computed((): FreeformRuntime | null => {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return null;\n }\n\n return {\n manifest: currentManifest,\n values: snapshot.value.values,\n touched: snapshot.value.touched,\n fieldErrors: snapshot.value.fieldErrors,\n formErrors: snapshot.value.formErrors,\n pageErrors: snapshot.value.pageErrors,\n currentPageIndex: snapshot.value.currentPageIndex,\n isSubmitting: isSubmitting.value,\n isComplete: isComplete.value,\n successMessage: successMessage.value,\n setValue,\n getValue,\n isFieldVisible,\n isFieldEnabled,\n getFieldProps,\n submit,\n validate,\n goNext,\n goBack,\n saveDraft,\n reset,\n handleSubmit,\n mountFieldExtension,\n mountCaptcha,\n };\n });\n\n const emptyRuntime = {\n values: {},\n touched: {},\n fieldErrors: {},\n formErrors: [],\n pageErrors: [],\n currentPageIndex: 0,\n isSubmitting: false,\n isComplete: false,\n successMessage: null,\n setValue,\n getValue,\n isFieldVisible,\n isFieldEnabled,\n getFieldProps,\n submit,\n validate,\n goNext,\n goBack,\n saveDraft,\n reset,\n handleSubmit,\n mountFieldExtension,\n mountCaptcha,\n };\n\n const result = reactive({} as UseFreeformResult);\n\n watchEffect(() => {\n const currentRuntime = runtime.value;\n\n if (!currentRuntime) {\n Object.assign(result, {\n loading: loading.value,\n error: error.value,\n manifest: null,\n theme: theme.value,\n renderers: renderers.value,\n allowRawHtml: allowRawHtml.value,\n ...emptyRuntime,\n });\n return;\n }\n\n Object.assign(result, {\n ...currentRuntime,\n loading: loading.value,\n error: error.value,\n manifest: manifest.value,\n theme: theme.value,\n renderers: renderers.value,\n allowRawHtml: allowRawHtml.value,\n });\n });\n\n return result;\n}\n\nvoid CORE_CLIENT_NAME;\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function CardsFieldRenderer(props: VueFieldRendererProps) {\n const cards =\n ((props.field.frontend?.config?.cards as Array<{\n label: string;\n value: string;\n description?: string;\n imageUrl?: string | null;\n }>) ??\n []) ||\n [];\n const maxSelected = Number(\n props.field.frontend?.config?.maxSelectedValues ?? 0,\n );\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n const singleSelect = maxSelected === 1;\n\n return (\n <div\n class={props.classNames.input}\n style={{\n display: \"grid\",\n gap: \"0.75rem\",\n gridTemplateColumns: `repeat(${Math.min(\n Number(props.field.frontend?.config?.cardsPerRow ?? 3) || 3,\n 4,\n )}, minmax(0, 1fr))`,\n }}\n >\n {cards.map((card) => {\n const checked = selected.includes(card.value);\n return (\n <label\n key={card.value}\n class={props.classNames.optionLabel}\n style={\n props.classNames.optionLabel\n ? undefined\n : {\n border: checked\n ? \"2px solid currentColor\"\n : \"1px solid #ccc\",\n borderRadius: \"0.5rem\",\n padding: \"0.75rem\",\n cursor: \"pointer\",\n }\n }\n >\n <input\n type={singleSelect ? \"radio\" : \"checkbox\"}\n class={props.classNames.optionInput}\n name={`${props.field.handle}${singleSelect ? \"\" : \"[]\"}`}\n value={card.value}\n checked={checked}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={(event) => {\n if (singleSelect) {\n props.form.setValue(props.field.handle, [card.value]);\n return;\n }\n\n const next = new Set(selected);\n if (event.target.checked) {\n if (maxSelected > 0 && next.size >= maxSelected) {\n return;\n }\n next.add(card.value);\n } else {\n next.delete(card.value);\n }\n props.form.setValue(props.field.handle, [...next]);\n }}\n />\n {card.imageUrl ? (\n <img\n src={card.imageUrl}\n alt=\"\"\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n marginBottom: \"0.5rem\",\n }}\n />\n ) : null}\n <strong>{card.label}</strong>\n {card.description ? <div>{card.description}</div> : null}\n </label>\n );\n })}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function CheckboxesFieldRenderer(props: VueFieldRendererProps) {\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n\n return (\n <div class={props.classNames.input}>\n {(props.field.options ?? []).map((option) => (\n <label key={option.value} class={props.classNames.optionLabel}>\n <input\n type=\"checkbox\"\n class={props.classNames.optionInput}\n name={`${props.field.handle}[]`}\n value={option.value}\n checked={selected.includes(option.value)}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={(event) => {\n const next = new Set(selected);\n if (event.target.checked) {\n next.add(option.value);\n } else {\n next.delete(option.value);\n }\n props.form.setValue(props.field.handle, [...next]);\n }}\n />\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n","import type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function inputProps(props: VueFieldRendererProps) {\n const raw = props.input as {\n id?: string;\n name?: string;\n value?: string;\n onChange?: (event: Event) => void;\n onBlur?: () => void;\n disabled?: boolean;\n required?: boolean;\n placeholder?: string | null;\n \"aria-invalid\"?: boolean;\n };\n\n return {\n ...raw,\n placeholder: raw.placeholder ?? undefined,\n };\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function CheckboxFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const checked =\n input.value === \"1\" || props.value === true || input.value === \"true\";\n\n return (\n <label class={props.classNames.optionLabel ?? props.classNames.input}>\n <input\n type=\"checkbox\"\n class={props.classNames.optionInput}\n id={input.id}\n name={input.name}\n checked={checked}\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n onChange={(event) => {\n props.form.setValue(\n props.field.handle,\n event.target.checked ? \"1\" : \"\",\n );\n }}\n onBlur={input.onBlur}\n />\n <span>{props.field.label}</span>\n </label>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function ConfirmFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const targetType = props.field.frontend?.config?.targetType as\n | string\n | undefined;\n const type = targetType === \"password\" ? \"password\" : \"text\";\n\n return <input type={type} class={props.classNames.input} {...input} />;\n}\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nexport function useFieldExtension(\n field: ManifestFieldDefinition,\n form: FreeformRuntime,\n) {\n const hostRef = ref<HTMLElement | null>(null);\n let cleanup: (() => void) | undefined;\n\n function mount() {\n cleanup?.();\n cleanup = undefined;\n\n const element = hostRef.value;\n if (!element || !field.frontend?.extension) {\n return;\n }\n\n if (!form.isFieldVisible(field.handle)) {\n return;\n }\n\n cleanup = form.mountFieldExtension(field.handle, element);\n }\n\n onMounted(mount);\n\n watch(\n () => [\n field.frontend?.extension,\n field.handle,\n form.isFieldVisible(field.handle),\n ],\n mount,\n );\n\n onUnmounted(() => {\n cleanup?.();\n });\n\n return hostRef;\n}\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { useFieldExtension } from \"../composables/useFieldExtension.js\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n dataAttr: string;\n dataValue?: string;\n hidden?: boolean;\n}>();\n\nconst hostRef = useFieldExtension(props.field, props.form);\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n :class=\"props.class\"\n :[dataAttr]=\"dataValue ?? field.handle\"\n :hidden=\"hidden || undefined\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { useFieldExtension } from \"../composables/useFieldExtension.js\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n dataAttr: string;\n dataValue?: string;\n hidden?: boolean;\n}>();\n\nconst hostRef = useFieldExtension(props.field, props.form);\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n :class=\"props.class\"\n :[dataAttr]=\"dataValue ?? field.handle\"\n :hidden=\"hidden || undefined\"\n >\n <slot />\n </div>\n</template>\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function DatetimeFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const config = (props.field.frontend?.config ?? {}) as {\n useNativeTypes?: boolean;\n nativeInputType?: string;\n useDatepicker?: boolean;\n };\n const inputType = config.useNativeTypes\n ? config.nativeInputType || \"datetime-local\"\n : \"text\";\n\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n dataAttr=\"data-freeform-datetime\"\n >\n <input\n type={inputType}\n class={props.classNames.input}\n data-datepicker=\"\"\n data-datepicker-enabled={config.useDatepicker ? \"1\" : \"0\"}\n {...input}\n />\n </ExtensionHost>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function EmailFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"email\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function FileDndFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-file-dnd\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function FileFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const config = (props.field.frontend?.config ?? {}) as {\n accept?: string;\n multiple?: boolean;\n maxFiles?: number;\n };\n\n return (\n <input\n type=\"file\"\n class={props.classNames.input}\n id={input.id}\n name={input.name}\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n accept={config.accept || undefined}\n multiple={Boolean(config.multiple ?? (config.maxFiles ?? 1) > 1)}\n onChange={(event) => {\n const files = event.target.files;\n if (!files || files.length === 0) {\n props.form.setValue(props.field.handle, null);\n return;\n }\n\n props.form.setValue(\n props.field.handle,\n files.length === 1 ? files[0] : Array.from(files),\n );\n }}\n onBlur={input.onBlur}\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function HiddenFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"hidden\" {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function HtmlFieldRenderer(props: VueFieldRendererProps) {\n const contentClass =\n props.classNames.content ?? props.classNames.input ?? \"ff-field__content\";\n const html = props.field.content?.rendered?.html?.trim();\n\n if (props.allowRawHtml && html) {\n return <div class={contentClass} innerHTML={html} />;\n }\n\n // Empty rich-text / html with no renderable content — don't invent a second row.\n if (!props.field.instructions) {\n return null;\n }\n\n return (\n <div class={contentClass} role=\"note\">\n {props.field.instructions}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function ImageFieldRenderer(props: VueFieldRendererProps) {\n const contentClass =\n props.classNames.content ?? props.classNames.input ?? \"ff-field__content\";\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n srcset?: string | null;\n alt?: string | null;\n };\n const image = (\n props.field.content as\n | {\n image?: {\n src?: string | null;\n srcset?: string | null;\n alt?: string | null;\n };\n }\n | undefined\n )?.image;\n const src = image?.src || config.src;\n const srcset = image?.srcset || config.srcset;\n const alt = image?.alt || config.alt || props.field.label || \"\";\n\n if (!src) {\n return null;\n }\n\n return (\n <img\n class={contentClass}\n src={src}\n srcset={srcset || undefined}\n alt={alt}\n />\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function MolliePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-mollie\"\n hidden\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function MultipleSelectFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n\n return (\n <select\n class={props.classNames.input}\n id={input.id}\n name={input.name}\n multiple\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n value={selected}\n onChange={(event) => {\n const next = Array.from(event.target.selectedOptions).map(\n (option) => option.value,\n );\n props.form.setValue(props.field.handle, next);\n }}\n onBlur={input.onBlur}\n >\n {(props.field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function NumberFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"number\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function OpinionScaleFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n const legends = (props.field.frontend?.config?.legends as string[]) ?? [];\n\n return (\n <div class={props.classNames.input}>\n <div role=\"radiogroup\" style={{ display: \"flex\", gap: \"0.75rem\" }}>\n {(props.field.options ?? []).map((option) => (\n <label\n key={option.value}\n class={props.classNames.optionLabel}\n style={\n props.classNames.optionLabel\n ? undefined\n : {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }\n }\n >\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n />\n <span>{option.label || option.value}</span>\n </label>\n ))}\n </div>\n {legends.length > 0 ? (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"0.5rem\",\n fontSize: \"0.875rem\",\n }}\n >\n {legends.map((legend) => (\n <span key={legend}>{legend}</span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function PasswordFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"password\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function PayPalPaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-paypal\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function PhoneFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"tel\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function RadioFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n\n return (\n <div class={props.classNames.input} role=\"radiogroup\">\n {(props.field.options ?? []).map((option) => (\n <label key={option.value} class={props.classNames.optionLabel}>\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n />\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function RatingFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n const config = (props.field.frontend?.config ?? {}) as {\n colorIdle?: string;\n colorSelected?: string;\n };\n const idle = config.colorIdle || \"#dddddd\";\n const selected = config.colorSelected || \"#ff7700\";\n\n return (\n <div class={props.classNames.input} role=\"radiogroup\">\n {(props.field.options ?? []).map((option) => {\n const active = Number(value) >= Number(option.value);\n return (\n <label\n key={option.value}\n class={props.classNames.optionLabel}\n style={{\n cursor: \"pointer\",\n color: active ? selected : idle,\n fontSize: \"1.5rem\",\n marginRight: \"0.25rem\",\n }}\n >\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n style={{\n position: \"absolute\",\n opacity: 0,\n pointerEvents: \"none\",\n }}\n />\n <span aria-hidden=\"true\">★</span>\n <span class=\"ff-sr-only\">{option.label}</span>\n </label>\n );\n })}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function RegexFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const pattern =\n (props.field.validation?.pattern as string | undefined) ||\n ((props.field.frontend?.config?.pattern as string | undefined) ??\n undefined);\n\n return (\n <input\n type=\"text\"\n class={props.classNames.input}\n pattern={pattern || undefined}\n {...input}\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function SelectFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const value = String(input.value ?? \"\");\n\n return (\n <select class={props.classNames.input} {...input} value={value}>\n {props.field.placeholder ? (\n <option value=\"\">{props.field.placeholder}</option>\n ) : null}\n {(props.field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function SquarePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-square\"\n />\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function StripePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-stripe\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function TextareaFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <textarea class={props.classNames.input} rows={4} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function TextFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"text\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function UnsupportedFieldRenderer(props: VueFieldRendererProps) {\n return (\n <div class={props.classNames.input} role=\"alert\">\n Unsupported field type: {props.field.type}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function WebsiteFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"url\" class={props.classNames.input} {...input} />;\n}\n","import {\n evaluateCalculation,\n getCalculationConfig,\n} from \"@solspace/freeform-core\";\nimport { defineComponent, shallowRef, watch } from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const CalculationFieldRenderer = defineComponent({\n name: \"CalculationFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n classNames: { type: Object, required: true },\n value: { required: true },\n },\n setup(props: VueFieldRendererProps) {\n const config = getCalculationConfig(props.field.frontend?.config);\n const inputType = config.inputType ?? \"regularTextInput\";\n const setValueRef = shallowRef(props.form.setValue);\n setValueRef.value = props.form.setValue;\n\n watch(\n () => [\n props.field.handle,\n config.calculations,\n config.decimalCount,\n props.form.values,\n ],\n () => {\n let cancelled = false;\n const formula = config.calculations ?? \"\";\n\n void (async () => {\n const result = await evaluateCalculation(\n formula,\n props.form.values,\n config.decimalCount,\n );\n\n if (cancelled) {\n return;\n }\n\n const next = result == null ? \"\" : String(result);\n const current = props.form.getValue(props.field.handle);\n if (String(current ?? \"\") !== next) {\n setValueRef.value(props.field.handle, next);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n },\n { immediate: true, deep: true },\n );\n\n return () => {\n const display =\n props.value == null || props.value === \"\" ? \"\" : String(props.value);\n\n if (inputType === \"hidden\") {\n return (\n <input\n type=\"hidden\"\n name={props.field.handle}\n value={display}\n readonly\n />\n );\n }\n\n if (inputType === \"plainText\") {\n return (\n <div class={props.classNames.input}>\n <input\n type=\"hidden\"\n name={props.field.handle}\n value={display}\n readonly\n />\n <p class=\"ff-field__calculation-plain\" data-freeform-calculation=\"\">\n {display}\n </p>\n </div>\n );\n }\n\n return (\n <input\n class={props.classNames.input}\n type=\"text\"\n name={props.field.handle}\n id={`freeform-${props.field.handle}`}\n value={display}\n readonly\n aria-readonly=\"true\"\n />\n );\n };\n },\n});\n","import {\n getSignatureConfig,\n isSignatureValueEmpty,\n} from \"@solspace/freeform-core\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n watch,\n} from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const SignatureFieldRenderer = defineComponent({\n name: \"SignatureFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n value: { required: true },\n classNames: { type: Object, required: true },\n },\n setup(props: VueFieldRendererProps) {\n const canvasRef = shallowRef<HTMLCanvasElement | null>(null);\n const drawing = shallowRef(false);\n const hasInk = ref(!isSignatureValueEmpty(props.value));\n const config = getSignatureConfig(props.field);\n const width = config.width ?? 400;\n const height = config.height ?? 100;\n const enabled = props.form.isFieldEnabled(props.field.handle);\n const penColor = config.penColor || \"#000000\";\n const backgroundColor = config.backgroundColor || \"rgba(0,0,0,0)\";\n const borderColor = config.borderColor || \"#999999\";\n const penSize = config.penDotSize ?? 2.5;\n\n function paintBackground(context: CanvasRenderingContext2D) {\n context.fillStyle = backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n function commit() {\n const canvas = canvasRef.value;\n if (!canvas) {\n return;\n }\n props.form.setValue(props.field.handle, canvas.toDataURL(\"image/png\"));\n }\n\n function clear() {\n const canvas = canvasRef.value;\n const context = canvas?.getContext(\"2d\");\n if (!canvas || !context) {\n return;\n }\n context.clearRect(0, 0, width, height);\n paintBackground(context);\n hasInk.value = false;\n props.form.setValue(props.field.handle, \"\");\n }\n\n function initCanvas() {\n const canvas = canvasRef.value;\n if (!canvas) {\n return;\n }\n\n const ratio =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n canvas.width = Math.floor(width * ratio);\n canvas.height = Math.floor(height * ratio);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n\n context.setTransform(ratio, 0, 0, ratio, 0, 0);\n paintBackground(context);\n context.strokeStyle = penColor;\n context.lineWidth = penSize;\n context.lineCap = \"round\";\n context.lineJoin = \"round\";\n\n if (typeof props.value === \"string\" && props.value.startsWith(\"data:\")) {\n const image = new Image();\n image.onload = () => {\n context.drawImage(image, 0, 0, width, height);\n hasInk.value = !isSignatureValueEmpty(props.value);\n };\n image.src = props.value;\n } else {\n hasInk.value = false;\n }\n }\n\n onMounted(initCanvas);\n watch(() => [width, height], initCanvas);\n\n onUnmounted(() => {\n drawing.value = false;\n });\n\n function point(event: PointerEvent) {\n const canvas = canvasRef.value;\n if (!canvas) {\n return { x: 0, y: 0 };\n }\n const rect = canvas.getBoundingClientRect();\n return {\n x: ((event.clientX - rect.left) / rect.width) * width,\n y: ((event.clientY - rect.top) / rect.height) * height,\n };\n }\n\n function endStroke() {\n if (!drawing.value) {\n return;\n }\n drawing.value = false;\n commit();\n }\n\n return () => (\n <div class={props.classNames.input} data-freeform-signature=\"\">\n <canvas\n ref={canvasRef}\n width={width}\n height={height}\n style={{\n width: \"100%\",\n maxWidth: width,\n height,\n border: `1px solid ${borderColor}`,\n touchAction: \"none\",\n cursor: enabled ? \"crosshair\" : \"not-allowed\",\n display: \"block\",\n backgroundColor,\n }}\n aria-label={props.field.label}\n onPointerdown={(event: PointerEvent) => {\n if (!enabled) {\n return;\n }\n const canvas = canvasRef.value;\n const context = canvas?.getContext(\"2d\");\n if (!context || !canvas) {\n return;\n }\n drawing.value = true;\n canvas.setPointerCapture(event.pointerId);\n context.strokeStyle = penColor;\n context.lineWidth = penSize;\n context.lineCap = \"round\";\n context.lineJoin = \"round\";\n const { x, y } = point(event);\n context.beginPath();\n context.moveTo(x, y);\n }}\n onPointermove={(event: PointerEvent) => {\n if (!drawing.value) {\n return;\n }\n const context = canvasRef.value?.getContext(\"2d\");\n if (!context) {\n return;\n }\n const { x, y } = point(event);\n context.lineTo(x, y);\n context.stroke();\n hasInk.value = true;\n }}\n onPointerup={endStroke}\n onPointercancel={endStroke}\n onPointerleave={endStroke}\n />\n {config.showClearButton !== false ? (\n <button\n type=\"button\"\n disabled={!hasInk.value || !enabled}\n onClick={clear}\n >\n Clear\n </button>\n ) : null}\n </div>\n );\n },\n});\n","// @ts-nocheck\nimport {\n canAddTableRow,\n canRemoveTableRow,\n emptyTableRow,\n getTableConfig,\n normalizeTableRows,\n resolveTableColumnOptions,\n type TableCellValue,\n type TableRows,\n} from \"@solspace/freeform-core\";\nimport { computed, defineComponent, shallowRef, watch } from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const TableFieldRenderer = defineComponent({\n name: \"TableFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n value: { required: true },\n classNames: { type: Object, required: true },\n },\n setup(props: VueFieldRendererProps) {\n const config = computed(() => getTableConfig(props.field));\n const columns = computed(() => config.value.columns ?? []);\n const enabled = computed(() =>\n props.form.isFieldEnabled(props.field.handle),\n );\n const rows = computed(() =>\n normalizeTableRows(props.value, columns.value, config.value),\n );\n const seededRef = shallowRef(false);\n\n watch(\n () => [props.field.handle, props.value] as const,\n () => {\n if (seededRef.value) {\n return;\n }\n if (!Array.isArray(props.value) || props.value.length === 0) {\n seededRef.value = true;\n props.form.setValue(\n props.field.handle,\n rows.value as unknown as Parameters<typeof props.form.setValue>[1],\n );\n }\n },\n { immediate: true },\n );\n\n const setRows = (next: TableRows) => {\n props.form.setValue(\n props.field.handle,\n next as unknown as Parameters<typeof props.form.setValue>[1],\n );\n };\n\n const updateCell = (\n rowIndex: number,\n columnIndex: number,\n value: TableCellValue,\n ) => {\n const next = rows.value.map((row) => [...row]);\n next[rowIndex][columnIndex] = value;\n setRows(next);\n };\n\n return () => {\n const currentRows = rows.value;\n const currentColumns = columns.value;\n const currentConfig = config.value;\n const isEnabled = enabled.value;\n const showAdd = canAddTableRow(currentRows, currentConfig);\n\n return (\n <div class={props.classNames.input} data-freeform-table=\"\">\n <table class=\"ff-table\">\n <thead>\n <tr>\n {currentColumns.map((column, colIndex) => (\n <th\n key={`${column.label}-${colIndex}`}\n class={column.required ? \"is-required\" : undefined}\n data-column-required={column.required ? \"true\" : undefined}\n >\n {column.label}\n </th>\n ))}\n <th />\n </tr>\n </thead>\n <tbody>\n {currentRows.map((row, rowIndex) => (\n <tr key={`row-${rowIndex}`}>\n {currentColumns.map((column, colIndex) => {\n const cellValue = row[colIndex];\n const optionList = resolveTableColumnOptions(column);\n const cellKey = `${rowIndex}-${colIndex}`;\n\n if (column.type === \"checkbox\") {\n return (\n <td key={cellKey}>\n <input\n type=\"checkbox\"\n checked={Boolean(cellValue)}\n disabled={!isEnabled}\n required={column.required || undefined}\n onChange={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.checked ? \"1\" : \"\",\n );\n }}\n />\n </td>\n );\n }\n\n if (\n column.type === \"select\" ||\n column.type === \"dropdown\"\n ) {\n return (\n <td key={cellKey}>\n <select\n value={String(cellValue ?? \"\")}\n disabled={!isEnabled}\n required={column.required || undefined}\n onChange={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.value,\n );\n }}\n >\n <option value=\"\">\n {column.placeholder || \"Select…\"}\n </option>\n {optionList.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </td>\n );\n }\n\n if (column.type === \"radio\") {\n return (\n <td key={cellKey}>\n <div class=\"ff-table__radios\">\n {optionList.map((option) => {\n const id = `${props.field.handle}-${rowIndex}-${colIndex}-${option.value}`;\n return (\n <label key={option.value} for={id}>\n <input\n id={id}\n type=\"radio\"\n name={`${props.field.handle}[${rowIndex}][${colIndex}]`}\n value={option.value}\n checked={\n String(cellValue ?? \"\") === option.value\n }\n disabled={!isEnabled}\n onChange={() => {\n updateCell(\n rowIndex,\n colIndex,\n option.value,\n );\n }}\n />{\" \"}\n {option.label}\n </label>\n );\n })}\n </div>\n </td>\n );\n }\n\n if (column.type === \"textarea\") {\n return (\n <td key={cellKey}>\n <textarea\n value={String(cellValue ?? \"\")}\n placeholder={column.placeholder}\n disabled={!isEnabled}\n required={column.required || undefined}\n onInput={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.value,\n );\n }}\n />\n </td>\n );\n }\n\n if (column.type === \"file\") {\n const selected = Array.isArray(cellValue)\n ? (cellValue as File[])\n : [];\n const fileCount = Math.max(\n 1,\n Number(\n (column.metadata as { fileCount?: number } | null)\n ?.fileCount ?? 1,\n ),\n );\n return (\n <td key={cellKey}>\n <input\n type=\"file\"\n multiple={fileCount > 1}\n disabled={!isEnabled}\n onChange={(event) => {\n const files = Array.from(\n event.target.files ?? [],\n );\n updateCell(\n rowIndex,\n colIndex,\n fileCount > 1 ? files : files.slice(0, 1),\n );\n }}\n />\n {selected.length > 0 ? (\n <div class=\"ff-table__file-names\">\n {selected.map((file) => (\n <span key={`${file.name}-${file.size}`}>\n {file.name}\n </span>\n ))}\n </div>\n ) : null}\n </td>\n );\n }\n\n return (\n <td key={cellKey}>\n <input\n type={column.type === \"number\" ? \"number\" : \"text\"}\n value={String(cellValue ?? \"\")}\n placeholder={column.placeholder}\n disabled={!isEnabled}\n required={column.required || undefined}\n onInput={(event) => {\n updateCell(rowIndex, colIndex, event.target.value);\n }}\n />\n </td>\n );\n })}\n <td>\n {canRemoveTableRow(currentRows, rowIndex, currentConfig) ? (\n <button\n type=\"button\"\n disabled={!isEnabled}\n onClick={() => {\n setRows(\n currentRows.filter(\n (_, index) => index !== rowIndex,\n ),\n );\n }}\n >\n {currentConfig.removeButtonLabel || \"Remove\"}\n </button>\n ) : null}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n {showAdd ? (\n <button\n type=\"button\"\n disabled={!isEnabled}\n onClick={() =>\n setRows([...currentRows, emptyTableRow(currentColumns)])\n }\n >\n {currentConfig.addButtonLabel || \"Add\"}\n </button>\n ) : null}\n </div>\n );\n };\n },\n});\n","import { defineComponent, type PropType } from \"vue\";\nimport type {\n FreeformComponentProps,\n FreeformFieldWrapperProps,\n FreeformInstructionsProps,\n FreeformLabelProps,\n FreeformPageProps,\n VueFieldRenderer,\n VueFieldRendererProps,\n} from \"../../types.js\";\nimport { CalculationFieldRenderer } from \"./CalculationField.js\";\nimport {\n CardsFieldRenderer,\n CheckboxesFieldRenderer,\n CheckboxFieldRenderer,\n ConfirmFieldRenderer,\n DatetimeFieldRenderer,\n EmailFieldRenderer,\n FileDndFieldRenderer,\n FileFieldRenderer,\n HiddenFieldRenderer,\n HtmlFieldRenderer,\n ImageFieldRenderer,\n MolliePaymentFieldRenderer,\n MultipleSelectFieldRenderer,\n NumberFieldRenderer,\n OpinionScaleFieldRenderer,\n PasswordFieldRenderer,\n PayPalPaymentFieldRenderer,\n PhoneFieldRenderer,\n RadioFieldRenderer,\n RatingFieldRenderer,\n RegexFieldRenderer,\n SelectFieldRenderer,\n SquarePaymentFieldRenderer,\n StripePaymentFieldRenderer,\n TextareaFieldRenderer,\n TextFieldRenderer,\n UnsupportedFieldRenderer,\n WebsiteFieldRenderer,\n} from \"./fields.js\";\nimport { SignatureFieldRenderer } from \"./SignatureField.js\";\nimport { TableFieldRenderer } from \"./TableField.js\";\n\nexport const DefaultForm = defineComponent({\n name: \"DefaultForm\",\n props: {\n form: {\n type: Object as PropType<FreeformComponentProps[\"form\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n onSubmit: {\n type: Function as PropType<FreeformComponentProps[\"onSubmit\"]>,\n required: true,\n },\n },\n setup(props, { slots }) {\n return () => (\n <form class={props.class} onSubmit={props.onSubmit} novalidate>\n {slots.default?.()}\n </form>\n );\n },\n});\n\nexport const DefaultPage = defineComponent({\n name: \"DefaultPage\",\n props: {\n form: {\n type: Object as PropType<FreeformPageProps[\"form\"]>,\n required: true,\n },\n pageIndex: { type: Number, required: true },\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nexport const DefaultRow = defineComponent({\n name: \"DefaultRow\",\n props: {\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nexport const DefaultFieldWrapper = defineComponent({\n name: \"DefaultFieldWrapper\",\n props: {\n field: {\n type: Object as PropType<FreeformFieldWrapperProps[\"field\"]>,\n required: true,\n },\n form: {\n type: Object as PropType<FreeformFieldWrapperProps[\"form\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => {\n const isVisuallyHidden =\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\";\n\n if (!props.form.isFieldVisible(props.field.handle) && !isVisuallyHidden) {\n return null;\n }\n\n return (\n <div\n class={props.class}\n data-freeform-field={props.field.handle}\n data-field-container={props.field.handle}\n data-field-type={props.field.type}\n hidden={\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden\n }\n >\n {slots.default?.()}\n </div>\n );\n };\n },\n});\n\nexport const DefaultLabel = defineComponent({\n name: \"DefaultLabel\",\n props: {\n field: {\n type: Object as PropType<FreeformLabelProps[\"field\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n requiredIndicator: { type: String, default: \"*\" },\n },\n setup(props) {\n return () => {\n if (!props.field.label) {\n return null;\n }\n\n return (\n <label class={props.class} for={`freeform-${props.field.handle}`}>\n {props.field.label}\n {props.field.required ? (\n <span aria-hidden=\"true\"> {props.requiredIndicator}</span>\n ) : null}\n </label>\n );\n };\n },\n});\n\nexport const DefaultInstructions = defineComponent({\n name: \"DefaultInstructions\",\n props: {\n field: {\n type: Object as PropType<FreeformInstructionsProps[\"field\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n },\n setup(props) {\n return () => {\n if (!props.field.instructions) {\n return null;\n }\n\n return <div class={props.class}>{props.field.instructions}</div>;\n };\n },\n});\n\nexport const DefaultErrors = defineComponent({\n name: \"DefaultErrors\",\n props: {\n errors: { type: Array as PropType<string[]>, required: true },\n class: { type: String, default: undefined },\n errorClass: { type: String, default: undefined },\n },\n setup(props) {\n return () => {\n if (!props.errors.length) {\n return null;\n }\n\n return (\n <div class={props.class} role=\"alert\">\n {props.errors.map((error) => (\n <div key={error} class={props.errorClass}>\n {error}\n </div>\n ))}\n </div>\n );\n };\n },\n});\n\nexport const DefaultButtonRow = defineComponent({\n name: \"DefaultButtonRow\",\n props: {\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nfunction buttonComponent(\n name: string,\n defaultType: \"button\" | \"submit\" = \"submit\",\n) {\n return defineComponent({\n name,\n props: {\n label: { type: String, required: true },\n class: { type: String, default: undefined },\n disabled: { type: Boolean, default: false },\n type: {\n type: String as PropType<\"button\" | \"submit\">,\n default: defaultType,\n },\n onClick: { type: Function as PropType<() => void>, default: undefined },\n },\n setup(props) {\n return () => (\n <button\n type={props.type}\n class={props.class}\n disabled={props.disabled}\n onClick={props.onClick}\n >\n {props.label}\n </button>\n );\n },\n });\n}\n\nexport const DefaultSubmitButton = buttonComponent(\"DefaultSubmitButton\");\nexport const DefaultNextButton = buttonComponent(\"DefaultNextButton\", \"button\");\nexport const DefaultBackButton = buttonComponent(\"DefaultBackButton\", \"button\");\nexport const DefaultSaveButton = buttonComponent(\"DefaultSaveButton\", \"button\");\n\nexport const DefaultSuccessMessage = defineComponent({\n name: \"DefaultSuccessMessage\",\n props: {\n message: { type: String, required: true },\n class: { type: String, default: undefined },\n },\n setup(props) {\n return () => (\n <div class={props.class} role=\"status\">\n {props.message}\n </div>\n );\n },\n});\n\nexport const builtinRenderers = {\n frontend: {\n text: TextFieldRenderer,\n textarea: TextareaFieldRenderer,\n email: EmailFieldRenderer,\n number: NumberFieldRenderer,\n phone: PhoneFieldRenderer,\n website: WebsiteFieldRenderer,\n regex: RegexFieldRenderer,\n password: PasswordFieldRenderer,\n confirm: ConfirmFieldRenderer,\n hidden: HiddenFieldRenderer,\n dropdown: SelectFieldRenderer,\n select: SelectFieldRenderer,\n \"multiple-select\": MultipleSelectFieldRenderer,\n checkbox: CheckboxFieldRenderer,\n checkboxes: CheckboxesFieldRenderer,\n radios: RadioFieldRenderer,\n radio: RadioFieldRenderer,\n \"opinion-scale\": OpinionScaleFieldRenderer,\n rating: RatingFieldRenderer,\n cards: CardsFieldRenderer,\n datetime: DatetimeFieldRenderer,\n file: FileFieldRenderer,\n \"file-upload\": FileFieldRenderer,\n \"file-dnd\": FileDndFieldRenderer,\n html: HtmlFieldRenderer,\n \"rich-text\": HtmlFieldRenderer,\n image: ImageFieldRenderer,\n table: TableFieldRenderer,\n signature: SignatureFieldRenderer,\n calculation: CalculationFieldRenderer,\n \"payment.stripe\": StripePaymentFieldRenderer,\n \"payment.square\": SquarePaymentFieldRenderer,\n \"payment.paypal\": PayPalPaymentFieldRenderer,\n \"payment.mollie\": MolliePaymentFieldRenderer,\n } as Record<string, VueFieldRenderer>,\n types: {\n text: TextFieldRenderer,\n textarea: TextareaFieldRenderer,\n email: EmailFieldRenderer,\n number: NumberFieldRenderer,\n phone: PhoneFieldRenderer,\n website: WebsiteFieldRenderer,\n regex: RegexFieldRenderer,\n password: PasswordFieldRenderer,\n confirm: ConfirmFieldRenderer,\n hidden: HiddenFieldRenderer,\n select: SelectFieldRenderer,\n dropdown: SelectFieldRenderer,\n \"multiple-select\": MultipleSelectFieldRenderer,\n checkbox: CheckboxFieldRenderer,\n checkboxes: CheckboxesFieldRenderer,\n radio: RadioFieldRenderer,\n radios: RadioFieldRenderer,\n radiobox: RadioFieldRenderer,\n \"opinion-scale\": OpinionScaleFieldRenderer,\n rating: RatingFieldRenderer,\n cards: CardsFieldRenderer,\n datetime: DatetimeFieldRenderer,\n file: FileFieldRenderer,\n \"file-upload\": FileFieldRenderer,\n \"file-dnd\": FileDndFieldRenderer,\n html: HtmlFieldRenderer,\n \"rich-text\": HtmlFieldRenderer,\n image: ImageFieldRenderer,\n table: TableFieldRenderer,\n signature: SignatureFieldRenderer,\n calculation: CalculationFieldRenderer,\n stripe: StripePaymentFieldRenderer,\n square: SquarePaymentFieldRenderer,\n paypal: PayPalPaymentFieldRenderer,\n mollie: MolliePaymentFieldRenderer,\n _unsupported: UnsupportedFieldRenderer,\n } as Record<string, VueFieldRenderer>,\n};\n\nexport const builtinComponents = {\n Form: DefaultForm,\n Page: DefaultPage,\n Row: DefaultRow,\n FieldWrapper: DefaultFieldWrapper,\n Label: DefaultLabel,\n Instructions: DefaultInstructions,\n Errors: DefaultErrors,\n ButtonRow: DefaultButtonRow,\n SubmitButton: DefaultSubmitButton,\n NextButton: DefaultNextButton,\n BackButton: DefaultBackButton,\n SaveButton: DefaultSaveButton,\n SuccessMessage: DefaultSuccessMessage,\n UnsupportedField: UnsupportedFieldRenderer,\n};\n\nexport type { VueFieldRendererProps };\n","import type { ClassNameStrategy } from \"../types.js\";\n\nexport function joinClassNames(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts\n .filter(\n (part): part is string => typeof part === \"string\" && part.trim() !== \"\",\n )\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\n return value || undefined;\n}\n\nexport function mergeClassNames(\n strategy: ClassNameStrategy,\n base: string | undefined,\n extra: string | undefined,\n): string | undefined {\n if (!extra) {\n return base;\n }\n\n if (!base || strategy === \"replace\") {\n return extra;\n }\n\n return `${base} ${extra}`.trim();\n}\n","/**\n * Convert Freeform handles / type tokens to BEM modifier segments.\n * Example: firstName → first-name, multiple-select → multiple-select\n */\nexport function toBemModifier(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/[_\\s]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .toLowerCase();\n}\n","<script setup lang=\"ts\">\nimport type { ManifestCaptchaSecurity } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n form: FreeformRuntime;\n captcha: ManifestCaptchaSecurity;\n}>();\n\nconst hostRef = ref<HTMLElement | null>(null);\nlet cleanup: (() => void) | undefined;\n\nfunction captchaIdentity(captcha: ManifestCaptchaSecurity): string {\n return [\n captcha.name,\n captcha.provider ?? \"\",\n captcha.siteKey ?? \"\",\n captcha.startMode ?? \"\",\n captcha.theme ?? \"\",\n captcha.locale ?? \"\",\n captcha.apiEndpoint ?? \"\",\n captcha.version ?? \"\",\n captcha.size ?? \"\",\n ].join(\"|\");\n}\n\nfunction mount() {\n cleanup?.();\n cleanup = undefined;\n if (hostRef.value) {\n cleanup = props.form.mountCaptcha(props.captcha, hostRef.value);\n }\n}\n\nonMounted(mount);\n\nwatch(() => captchaIdentity(props.captcha), mount);\n\nonUnmounted(() => {\n cleanup?.();\n});\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n class=\"ff-captcha\"\n :data-freeform-captcha=\"captcha.name\"\n :data-freeform-captcha-provider=\"captcha.provider ?? captcha.name\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestCaptchaSecurity } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n form: FreeformRuntime;\n captcha: ManifestCaptchaSecurity;\n}>();\n\nconst hostRef = ref<HTMLElement | null>(null);\nlet cleanup: (() => void) | undefined;\n\nfunction captchaIdentity(captcha: ManifestCaptchaSecurity): string {\n return [\n captcha.name,\n captcha.provider ?? \"\",\n captcha.siteKey ?? \"\",\n captcha.startMode ?? \"\",\n captcha.theme ?? \"\",\n captcha.locale ?? \"\",\n captcha.apiEndpoint ?? \"\",\n captcha.version ?? \"\",\n captcha.size ?? \"\",\n ].join(\"|\");\n}\n\nfunction mount() {\n cleanup?.();\n cleanup = undefined;\n if (hostRef.value) {\n cleanup = props.form.mountCaptcha(props.captcha, hostRef.value);\n }\n}\n\nonMounted(mount);\n\nwatch(() => captchaIdentity(props.captcha), mount);\n\nonUnmounted(() => {\n cleanup?.();\n});\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n class=\"ff-captcha\"\n :data-freeform-captcha=\"captcha.name\"\n :data-freeform-captcha-provider=\"captcha.provider ?? captcha.name\"\n />\n</template>\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport type {\n FreeformVueTheme,\n RendererOverrides,\n VueFieldRenderer,\n} from \"../types.js\";\nimport { builtinRenderers } from \"./builtin/index.js\";\n\nexport function resolveFieldRenderer(\n field: ManifestFieldDefinition,\n userRenderers?: RendererOverrides,\n theme?: FreeformVueTheme,\n): VueFieldRenderer {\n const frontendKey = field.frontend?.renderer ?? \"\";\n const candidates: Array<VueFieldRenderer | undefined> = [\n userRenderers?.handles?.[field.handle],\n frontendKey ? userRenderers?.frontend?.[frontendKey] : undefined,\n userRenderers?.types?.[field.type],\n theme?.renderers?.handles?.[field.handle],\n frontendKey ? theme?.renderers?.frontend?.[frontendKey] : undefined,\n theme?.renderers?.types?.[field.type],\n frontendKey ? builtinRenderers.frontend[frontendKey] : undefined,\n frontendKey ? builtinRenderers.types[frontendKey] : undefined,\n builtinRenderers.types[field.type],\n ];\n\n return (\n candidates.find((renderer): renderer is VueFieldRenderer => !!renderer) ??\n builtinRenderers.types._unsupported\n );\n}\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport type { FreeformThemeClassNames, FreeformVueTheme } from \"../types.js\";\nimport { joinClassNames } from \"./mergeClassNames.js\";\n\nconst CHOICE_TYPES = new Set([\n \"checkbox\",\n \"checkboxes\",\n \"radio\",\n \"radios\",\n \"radiobox\",\n \"rating\",\n \"opinion-scale\",\n \"cards\",\n]);\n\nfunction overlay(\n base: FreeformThemeClassNames,\n extra: Partial<FreeformThemeClassNames> | undefined,\n): FreeformThemeClassNames {\n if (!extra) {\n return base;\n }\n\n return { ...base, ...extra };\n}\n\n/**\n * Global classNames, then overlays for field type / frontend renderer / extension.\n * Error styles append `inputError` onto the control (`optionInput` for choice fields).\n */\nexport function resolveThemeClassNames(\n theme: FreeformVueTheme,\n field: ManifestFieldDefinition,\n hasErrors = false,\n): FreeformThemeClassNames {\n const byType = theme.classNamesByType;\n let classNames = overlay({}, theme.classNames);\n\n classNames = overlay(classNames, byType?.[field.type]);\n\n const renderer = field.frontend?.renderer;\n if (renderer) {\n classNames = overlay(classNames, byType?.[renderer]);\n }\n\n const extension = field.frontend?.extension;\n if (extension) {\n classNames = overlay(classNames, byType?.[extension]);\n }\n\n if (hasErrors && classNames.inputError) {\n if (CHOICE_TYPES.has(field.type)) {\n classNames = {\n ...classNames,\n optionInput: joinClassNames(\n classNames.optionInput,\n classNames.inputError,\n ),\n };\n } else {\n classNames = {\n ...classNames,\n input: joinClassNames(classNames.input, classNames.inputError),\n };\n }\n }\n\n return classNames;\n}\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { resolveFieldRenderer } from \"../renderers/resolve.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { resolveThemeClassNames } from \"../theme/resolveThemeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type {\n FreeformRuntime,\n FreeformVueTheme,\n RendererOverrides,\n} from \"../types.js\";\n\ndefineOptions({ name: \"FieldRenderer\" });\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml?: boolean;\n}>();\n\nconst strategy = computed(() => props.theme.classNameStrategy ?? \"merge\");\nconst errors = computed(() => props.form.fieldErrors[props.field.handle] ?? []);\nconst classNames = computed(() =>\n resolveThemeClassNames(props.theme, props.field, errors.value.length > 0),\n);\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.theme.renderers?.components,\n}));\nconst Renderer = computed(() =>\n resolveFieldRenderer(props.field, props.renderers, props.theme),\n);\nconst value = computed(() => props.form.values[props.field.handle]);\n\nconst isCheckbox = computed(() => props.field.type === \"checkbox\");\nconst isPresentational = computed(\n () =>\n props.field.type === \"html\" ||\n props.field.type === \"rich-text\" ||\n props.field.type === \"image\",\n);\nconst isVisuallyHidden = computed(\n () =>\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\",\n);\n\nconst showLabel = computed(\n () =>\n !isCheckbox.value &&\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderLabels !== false,\n);\n\nconst showInstructions = computed(\n () =>\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderInstructions !== false,\n);\n\nconst showErrors = computed(() => props.theme.defaults?.renderErrors !== false);\n\nconst shouldRender = computed(() => {\n if (!isPresentational.value) {\n return true;\n }\n\n if (props.field.type === \"image\") {\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n };\n const image = (\n props.field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n const html = props.field.content?.rendered?.html?.trim();\n return Boolean((props.allowRawHtml && html) || props.field.instructions);\n});\n\nconst fieldClassName = computed(() =>\n joinClassNames(\n classNames.value.field,\n props.field.required ? classNames.value.fieldRequired : undefined,\n errors.value.length ? classNames.value.fieldHasErrors : undefined,\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden.value\n ? classNames.value.fieldHidden\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.type)}`\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.handle)}`\n : undefined,\n ),\n);\n\nconst rendererProps = computed(() => ({\n field: props.field,\n form: props.form,\n value: value.value,\n errors: errors.value,\n input: props.form.getFieldProps(props.field.handle),\n classNames: classNames.value,\n allowRawHtml: props.allowRawHtml,\n renderLabel: () => null,\n renderInstructions: () => null,\n renderErrors: () => null,\n}));\n</script>\n\n<template>\n <template v-if=\"shouldRender\">\n <component\n :is=\"components.FieldWrapper\"\n v-if=\"isVisuallyHidden\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else-if=\"field.type === 'group'\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <div :class=\"classNames.input\" :data-freeform-group=\"field.handle\">\n <component\n :is=\"components.Row\"\n v-for=\"row in field.layout?.rows ?? []\"\n :key=\"row.uid\"\n :class=\"\n joinClassNames(\n classNames.row,\n strategy === 'merge'\n ? `ff-row--${row.fields.length}-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"theme\"\n :renderers=\"renderers\"\n :allow-raw-html=\"allowRawHtml\"\n />\n </component>\n </div>\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { resolveFieldRenderer } from \"../renderers/resolve.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { resolveThemeClassNames } from \"../theme/resolveThemeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type {\n FreeformRuntime,\n FreeformVueTheme,\n RendererOverrides,\n} from \"../types.js\";\n\ndefineOptions({ name: \"FieldRenderer\" });\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml?: boolean;\n}>();\n\nconst strategy = computed(() => props.theme.classNameStrategy ?? \"merge\");\nconst errors = computed(() => props.form.fieldErrors[props.field.handle] ?? []);\nconst classNames = computed(() =>\n resolveThemeClassNames(props.theme, props.field, errors.value.length > 0),\n);\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.theme.renderers?.components,\n}));\nconst Renderer = computed(() =>\n resolveFieldRenderer(props.field, props.renderers, props.theme),\n);\nconst value = computed(() => props.form.values[props.field.handle]);\n\nconst isCheckbox = computed(() => props.field.type === \"checkbox\");\nconst isPresentational = computed(\n () =>\n props.field.type === \"html\" ||\n props.field.type === \"rich-text\" ||\n props.field.type === \"image\",\n);\nconst isVisuallyHidden = computed(\n () =>\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\",\n);\n\nconst showLabel = computed(\n () =>\n !isCheckbox.value &&\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderLabels !== false,\n);\n\nconst showInstructions = computed(\n () =>\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderInstructions !== false,\n);\n\nconst showErrors = computed(() => props.theme.defaults?.renderErrors !== false);\n\nconst shouldRender = computed(() => {\n if (!isPresentational.value) {\n return true;\n }\n\n if (props.field.type === \"image\") {\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n };\n const image = (\n props.field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n const html = props.field.content?.rendered?.html?.trim();\n return Boolean((props.allowRawHtml && html) || props.field.instructions);\n});\n\nconst fieldClassName = computed(() =>\n joinClassNames(\n classNames.value.field,\n props.field.required ? classNames.value.fieldRequired : undefined,\n errors.value.length ? classNames.value.fieldHasErrors : undefined,\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden.value\n ? classNames.value.fieldHidden\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.type)}`\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.handle)}`\n : undefined,\n ),\n);\n\nconst rendererProps = computed(() => ({\n field: props.field,\n form: props.form,\n value: value.value,\n errors: errors.value,\n input: props.form.getFieldProps(props.field.handle),\n classNames: classNames.value,\n allowRawHtml: props.allowRawHtml,\n renderLabel: () => null,\n renderInstructions: () => null,\n renderErrors: () => null,\n}));\n</script>\n\n<template>\n <template v-if=\"shouldRender\">\n <component\n :is=\"components.FieldWrapper\"\n v-if=\"isVisuallyHidden\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else-if=\"field.type === 'group'\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <div :class=\"classNames.input\" :data-freeform-group=\"field.handle\">\n <component\n :is=\"components.Row\"\n v-for=\"row in field.layout?.rows ?? []\"\n :key=\"row.uid\"\n :class=\"\n joinClassNames(\n classNames.row,\n strategy === 'merge'\n ? `ff-row--${row.fields.length}-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"theme\"\n :renderers=\"renderers\"\n :allow-raw-html=\"allowRawHtml\"\n />\n </component>\n </div>\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type { UseFreeformResult } from \"../types.js\";\nimport CaptchaHost from \"./CaptchaHost.vue\";\nimport FieldRenderer from \"./FieldRenderer.vue\";\n\nconst props = defineProps<{\n form: UseFreeformResult & {\n manifest: NonNullable<UseFreeformResult[\"manifest\"]>;\n };\n class?: string;\n}>();\n\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.form.theme.renderers?.components,\n}));\n\nconst strategy = computed(() => props.form.theme.classNameStrategy ?? \"merge\");\nconst colorScheme = computed(\n () => props.form.theme.defaults?.colorScheme ?? \"system\",\n);\n\nconst formClassName = computed(() =>\n joinClassNames(\n props.form.theme.classNames?.form,\n strategy.value === \"merge\"\n ? `ff-form--${toBemModifier(props.form.manifest.form.handle)}`\n : undefined,\n strategy.value === \"merge\" &&\n (colorScheme.value === \"light\" || colorScheme.value === \"dark\")\n ? `ff-form--${colorScheme.value}`\n : undefined,\n props.class,\n ),\n);\n\nconst currentPage = computed(\n () =>\n props.form.manifest.layout.pages[props.form.currentPageIndex] ??\n props.form.manifest.layout.pages[0] ?? { rows: [], buttons: {} },\n);\n\nconst isLastPage = computed(\n () =>\n props.form.manifest.layout.pages.length === 0 ||\n props.form.currentPageIndex >= props.form.manifest.layout.pages.length - 1,\n);\n\nconst isFirstPage = computed(() => props.form.currentPageIndex === 0);\n\nfunction hasPresentationalContent(\n field: (typeof props.form.manifest.fields)[string],\n): boolean {\n if (field.type === \"image\") {\n const config = (field.frontend?.config ?? {}) as { src?: string | null };\n const image = (\n field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n if (field.type === \"html\" || field.type === \"rich-text\") {\n const html = field.content?.rendered?.html?.trim();\n return Boolean((props.form.allowRawHtml && html) || field.instructions);\n }\n\n return true;\n}\n\nfunction onSubmit(event: Event) {\n void props.form.handleSubmit(event);\n}\n</script>\n\n<template>\n <component\n :is=\"components.SuccessMessage\"\n v-if=\"form.isComplete && form.successMessage\"\n :message=\"form.successMessage\"\n :class=\"form.theme.classNames?.success\"\n />\n\n <component\n :is=\"components.Form\"\n v-else\n :form=\"form\"\n :class=\"formClassName\"\n :on-submit=\"onSubmit\"\n >\n <component\n :is=\"components.Errors\"\n v-if=\"form.formErrors.length > 0\"\n :errors=\"form.formErrors\"\n :class=\"form.theme.classNames?.errors\"\n :error-class=\"form.theme.classNames?.error\"\n />\n\n <component\n :is=\"components.Page\"\n :form=\"form\"\n :page-index=\"form.currentPageIndex\"\n :class=\"\n joinClassNames(\n form.theme.classNames?.page,\n strategy === 'merge' ? `ff-page--${form.currentPageIndex}` : undefined,\n )\n \"\n >\n <template v-for=\"row in currentPage.rows\" :key=\"row.uid\">\n <component\n :is=\"components.Row\"\n v-if=\"\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length > 0\n \"\n :class=\"\n joinClassNames(\n form.theme.classNames?.row,\n strategy === 'merge'\n ? `ff-row--${\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length\n }-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n })\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"form.theme\"\n :renderers=\"form.renderers\"\n :allow-raw-html=\"form.allowRawHtml\"\n />\n </component>\n </template>\n </component>\n\n <CaptchaHost\n v-for=\"captcha in form.manifest.security.captchas ?? []\"\n :key=\"captcha.name\"\n :form=\"form\"\n :captcha=\"captcha\"\n />\n\n <component :is=\"components.ButtonRow\" :class=\"form.theme.classNames?.buttons\">\n <component\n :is=\"components.BackButton\"\n v-if=\"!isFirstPage && currentPage.buttons?.back\"\n :label=\"currentPage.buttons.back.label\"\n :class=\"form.theme.classNames?.backButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goBack()\"\n />\n\n <component\n :is=\"components.NextButton\"\n v-if=\"\n form.manifest.settings.multiPage &&\n !isLastPage &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.nextButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goNext()\"\n />\n\n <component\n :is=\"components.SubmitButton\"\n v-if=\"\n (!form.manifest.settings.multiPage || isLastPage) &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.submitButton\"\n :disabled=\"form.isSubmitting\"\n />\n\n <component\n :is=\"components.SaveButton\"\n v-if=\"currentPage.buttons?.save\"\n :label=\"currentPage.buttons.save.label\"\n :class=\"form.theme.classNames?.saveButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.saveDraft()\"\n />\n </component>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type { UseFreeformResult } from \"../types.js\";\nimport CaptchaHost from \"./CaptchaHost.vue\";\nimport FieldRenderer from \"./FieldRenderer.vue\";\n\nconst props = defineProps<{\n form: UseFreeformResult & {\n manifest: NonNullable<UseFreeformResult[\"manifest\"]>;\n };\n class?: string;\n}>();\n\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.form.theme.renderers?.components,\n}));\n\nconst strategy = computed(() => props.form.theme.classNameStrategy ?? \"merge\");\nconst colorScheme = computed(\n () => props.form.theme.defaults?.colorScheme ?? \"system\",\n);\n\nconst formClassName = computed(() =>\n joinClassNames(\n props.form.theme.classNames?.form,\n strategy.value === \"merge\"\n ? `ff-form--${toBemModifier(props.form.manifest.form.handle)}`\n : undefined,\n strategy.value === \"merge\" &&\n (colorScheme.value === \"light\" || colorScheme.value === \"dark\")\n ? `ff-form--${colorScheme.value}`\n : undefined,\n props.class,\n ),\n);\n\nconst currentPage = computed(\n () =>\n props.form.manifest.layout.pages[props.form.currentPageIndex] ??\n props.form.manifest.layout.pages[0] ?? { rows: [], buttons: {} },\n);\n\nconst isLastPage = computed(\n () =>\n props.form.manifest.layout.pages.length === 0 ||\n props.form.currentPageIndex >= props.form.manifest.layout.pages.length - 1,\n);\n\nconst isFirstPage = computed(() => props.form.currentPageIndex === 0);\n\nfunction hasPresentationalContent(\n field: (typeof props.form.manifest.fields)[string],\n): boolean {\n if (field.type === \"image\") {\n const config = (field.frontend?.config ?? {}) as { src?: string | null };\n const image = (\n field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n if (field.type === \"html\" || field.type === \"rich-text\") {\n const html = field.content?.rendered?.html?.trim();\n return Boolean((props.form.allowRawHtml && html) || field.instructions);\n }\n\n return true;\n}\n\nfunction onSubmit(event: Event) {\n void props.form.handleSubmit(event);\n}\n</script>\n\n<template>\n <component\n :is=\"components.SuccessMessage\"\n v-if=\"form.isComplete && form.successMessage\"\n :message=\"form.successMessage\"\n :class=\"form.theme.classNames?.success\"\n />\n\n <component\n :is=\"components.Form\"\n v-else\n :form=\"form\"\n :class=\"formClassName\"\n :on-submit=\"onSubmit\"\n >\n <component\n :is=\"components.Errors\"\n v-if=\"form.formErrors.length > 0\"\n :errors=\"form.formErrors\"\n :class=\"form.theme.classNames?.errors\"\n :error-class=\"form.theme.classNames?.error\"\n />\n\n <component\n :is=\"components.Page\"\n :form=\"form\"\n :page-index=\"form.currentPageIndex\"\n :class=\"\n joinClassNames(\n form.theme.classNames?.page,\n strategy === 'merge' ? `ff-page--${form.currentPageIndex}` : undefined,\n )\n \"\n >\n <template v-for=\"row in currentPage.rows\" :key=\"row.uid\">\n <component\n :is=\"components.Row\"\n v-if=\"\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length > 0\n \"\n :class=\"\n joinClassNames(\n form.theme.classNames?.row,\n strategy === 'merge'\n ? `ff-row--${\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length\n }-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n })\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"form.theme\"\n :renderers=\"form.renderers\"\n :allow-raw-html=\"form.allowRawHtml\"\n />\n </component>\n </template>\n </component>\n\n <CaptchaHost\n v-for=\"captcha in form.manifest.security.captchas ?? []\"\n :key=\"captcha.name\"\n :form=\"form\"\n :captcha=\"captcha\"\n />\n\n <component :is=\"components.ButtonRow\" :class=\"form.theme.classNames?.buttons\">\n <component\n :is=\"components.BackButton\"\n v-if=\"!isFirstPage && currentPage.buttons?.back\"\n :label=\"currentPage.buttons.back.label\"\n :class=\"form.theme.classNames?.backButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goBack()\"\n />\n\n <component\n :is=\"components.NextButton\"\n v-if=\"\n form.manifest.settings.multiPage &&\n !isLastPage &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.nextButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goNext()\"\n />\n\n <component\n :is=\"components.SubmitButton\"\n v-if=\"\n (!form.manifest.settings.multiPage || isLastPage) &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.submitButton\"\n :disabled=\"form.isSubmitting\"\n />\n\n <component\n :is=\"components.SaveButton\"\n v-if=\"currentPage.buttons?.save\"\n :label=\"currentPage.buttons.save.label\"\n :class=\"form.theme.classNames?.saveButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.saveDraft()\"\n />\n </component>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useFreeform } from \"../composables/useFreeform.js\";\nimport type { UseFreeformOptions } from \"../types.js\";\nimport FormLoader from \"./FormLoader.vue\";\nimport FreeformView from \"./FreeformView.vue\";\n\nconst props = defineProps<\n UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n }\n>();\n\nconst form = useFreeform(() => props);\n\ndefineSlots<{\n default?: (props: { form: typeof form }) => unknown;\n error?: (props: { error: Error }) => unknown;\n loading?: () => unknown;\n}>();\n\nconst loadedForm = computed(() => {\n if (!form.manifest) {\n return null;\n }\n return form as typeof form & {\n manifest: NonNullable<typeof form.manifest>;\n };\n});\n</script>\n\n<template>\n <slot v-if=\"$slots.default\" :form=\"form\" />\n\n <slot v-else-if=\"form.loading\" name=\"loading\">\n <FormLoader :message=\"loadingMessage ?? 'Loading form…'\" />\n </slot>\n\n <slot v-else-if=\"form.error\" name=\"error\" :error=\"form.error\">\n <div role=\"alert\">{{ form.error.message }}</div>\n </slot>\n\n <FreeformView\n v-else-if=\"loadedForm\"\n :form=\"loadedForm\"\n :class=\"props.class\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useFreeform } from \"../composables/useFreeform.js\";\nimport type { UseFreeformOptions } from \"../types.js\";\nimport FormLoader from \"./FormLoader.vue\";\nimport FreeformView from \"./FreeformView.vue\";\n\nconst props = defineProps<\n UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n }\n>();\n\nconst form = useFreeform(() => props);\n\ndefineSlots<{\n default?: (props: { form: typeof form }) => unknown;\n error?: (props: { error: Error }) => unknown;\n loading?: () => unknown;\n}>();\n\nconst loadedForm = computed(() => {\n if (!form.manifest) {\n return null;\n }\n return form as typeof form & {\n manifest: NonNullable<typeof form.manifest>;\n };\n});\n</script>\n\n<template>\n <slot v-if=\"$slots.default\" :form=\"form\" />\n\n <slot v-else-if=\"form.loading\" name=\"loading\">\n <FormLoader :message=\"loadingMessage ?? 'Loading form…'\" />\n </slot>\n\n <slot v-else-if=\"form.error\" name=\"error\" :error=\"form.error\">\n <div role=\"alert\">{{ form.error.message }}</div>\n </slot>\n\n <FreeformView\n v-else-if=\"loadedForm\"\n :form=\"loadedForm\"\n :class=\"props.class\"\n />\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["CardsFieldRenderer","props","cards","field","frontend","config","maxSelected","Number","maxSelectedValues","selected","Array","isArray","value","map","String","singleSelect","_createVNode","classNames","input","display","gap","gridTemplateColumns","Math","min","cardsPerRow","card","checked","includes","optionLabel","undefined","border","borderRadius","padding","cursor","optionInput","handle","form","isFieldEnabled","event","setValue","next","Set","target","size","add","delete","imageUrl","width","height","marginBottom","label","description","CheckboxesFieldRenderer","props","selected","Array","isArray","value","map","String","_createVNode","classNames","input","field","options","option","optionLabel","optionInput","handle","includes","form","isFieldEnabled","event","next","Set","target","checked","add","delete","setValue","label","inputProps","CheckboxFieldRenderer","props","input","checked","value","_createVNode","classNames","optionLabel","optionInput","id","name","disabled","event","form","setValue","field","handle","target","onBlur","label","inputProps","ConfirmFieldRenderer","props","input","targetType","field","frontend","config","type","_createVNode","_mergeProps","classNames","ExtensionHost","inputProps","DatetimeFieldRenderer","props","input","config","field","frontend","inputType","useNativeTypes","nativeInputType","_createVNode","form","default","_mergeProps","classNames","useDatepicker","inputProps","EmailFieldRenderer","props","input","_createVNode","_mergeProps","classNames","ExtensionHost","FileDndFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","FileFieldRenderer","props","input","config","field","frontend","_createVNode","classNames","id","name","disabled","accept","undefined","Boolean","multiple","maxFiles","event","files","target","length","form","setValue","handle","Array","from","onBlur","inputProps","HiddenFieldRenderer","props","input","_createVNode","_mergeProps","HtmlFieldRenderer","props","contentClass","classNames","content","input","html","field","rendered","trim","allowRawHtml","_createVNode","instructions","ImageFieldRenderer","props","contentClass","classNames","content","input","config","field","frontend","image","src","srcset","alt","label","_createVNode","undefined","ExtensionHost","MolliePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","MultipleSelectFieldRenderer","props","input","selected","Array","isArray","value","map","String","_createVNode","classNames","id","name","disabled","event","next","from","target","selectedOptions","option","form","setValue","field","handle","onBlur","options","label","inputProps","NumberFieldRenderer","props","input","_createVNode","_mergeProps","classNames","OpinionScaleFieldRenderer","props","value","String","legends","field","frontend","config","_createVNode","classNames","input","display","gap","options","map","option","optionLabel","undefined","flexDirection","alignItems","optionInput","handle","form","isFieldEnabled","onChange","setValue","label","length","justifyContent","marginTop","fontSize","legend","inputProps","PasswordFieldRenderer","props","input","_createVNode","_mergeProps","classNames","ExtensionHost","PayPalPaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","PhoneFieldRenderer","props","input","_createVNode","_mergeProps","classNames","RadioFieldRenderer","props","value","String","_createVNode","classNames","input","field","options","map","option","optionLabel","optionInput","handle","form","isFieldEnabled","onChange","setValue","label","RatingFieldRenderer","props","value","String","config","field","frontend","idle","colorIdle","selected","colorSelected","_createVNode","classNames","input","options","map","option","active","Number","optionLabel","cursor","color","fontSize","marginRight","optionInput","handle","form","isFieldEnabled","onChange","setValue","position","opacity","pointerEvents","_createTextVNode","label","inputProps","RegexFieldRenderer","props","input","pattern","field","validation","frontend","config","undefined","_createVNode","_mergeProps","classNames","inputProps","SelectFieldRenderer","props","input","value","String","_createVNode","_mergeProps","classNames","field","placeholder","options","map","option","label","ExtensionHost","SquarePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","ExtensionHost","StripePaymentFieldRenderer","props","_createVNode","field","form","classNames","input","inputProps","TextareaFieldRenderer","props","input","_createVNode","_mergeProps","classNames","inputProps","TextFieldRenderer","props","input","_createVNode","_mergeProps","classNames","UnsupportedFieldRenderer","props","_createVNode","classNames","input","_createTextVNode","field","type","inputProps","WebsiteFieldRenderer","props","input","_createVNode","_mergeProps","classNames","evaluateCalculation","getCalculationConfig","defineComponent","shallowRef","watch","CalculationFieldRenderer","name","props","field","type","Object","required","form","classNames","value","setup","config","frontend","inputType","setValueRef","setValue","handle","calculations","decimalCount","values","cancelled","formula","result","next","String","current","getValue","immediate","deep","display","_createVNode","input","getSignatureConfig","isSignatureValueEmpty","defineComponent","onMounted","onUnmounted","ref","shallowRef","watch","SignatureFieldRenderer","name","props","field","type","Object","required","form","value","classNames","setup","canvasRef","drawing","hasInk","config","width","height","enabled","isFieldEnabled","handle","penColor","backgroundColor","borderColor","penSize","penDotSize","paintBackground","context","fillStyle","fillRect","commit","canvas","setValue","toDataURL","clear","getContext","clearRect","initCanvas","ratio","window","devicePixelRatio","Math","floor","style","setTransform","strokeStyle","lineWidth","lineCap","lineJoin","startsWith","image","Image","onload","drawImage","src","point","event","x","y","rect","getBoundingClientRect","clientX","left","clientY","top","endStroke","_createVNode","input","maxWidth","border","touchAction","cursor","display","label","setPointerCapture","pointerId","beginPath","moveTo","lineTo","stroke","showClearButton","_createTextVNode","canAddTableRow","canRemoveTableRow","emptyTableRow","getTableConfig","normalizeTableRows","resolveTableColumnOptions","computed","defineComponent","shallowRef","watch","TableFieldRenderer","name","props","field","type","Object","required","form","value","classNames","setup","config","columns","enabled","isFieldEnabled","handle","rows","seededRef","Array","isArray","length","setValue","immediate","setRows","next","updateCell","rowIndex","columnIndex","map","row","currentRows","currentColumns","currentConfig","isEnabled","showAdd","_createVNode","input","column","colIndex","label","undefined","cellValue","optionList","cellKey","Boolean","event","target","checked","String","placeholder","option","id","onChange","selected","fileCount","Math","max","Number","metadata","files","from","slice","file","size","onClick","filter","_","index","removeButtonLabel","addButtonLabel","defineComponent","createVNode","_createVNode","createTextVNode","_createTextVNode","CalculationFieldRenderer","CardsFieldRenderer","CheckboxesFieldRenderer","CheckboxFieldRenderer","ConfirmFieldRenderer","DatetimeFieldRenderer","EmailFieldRenderer","FileDndFieldRenderer","FileFieldRenderer","HiddenFieldRenderer","HtmlFieldRenderer","ImageFieldRenderer","MolliePaymentFieldRenderer","MultipleSelectFieldRenderer","NumberFieldRenderer","OpinionScaleFieldRenderer","PasswordFieldRenderer","PayPalPaymentFieldRenderer","PhoneFieldRenderer","RadioFieldRenderer","RatingFieldRenderer","RegexFieldRenderer","SelectFieldRenderer","SquarePaymentFieldRenderer","StripePaymentFieldRenderer","TextareaFieldRenderer","TextFieldRenderer","UnsupportedFieldRenderer","WebsiteFieldRenderer","SignatureFieldRenderer","TableFieldRenderer","DefaultForm","name","props","form","type","Object","required","class","String","default","undefined","onSubmit","Function","setup","slots","DefaultPage","pageIndex","Number","DefaultRow","DefaultFieldWrapper","field","isVisuallyHidden","frontend","renderer","extension","isFieldVisible","handle","DefaultLabel","requiredIndicator","label","DefaultInstructions","instructions","DefaultErrors","errors","Array","errorClass","length","map","error","DefaultButtonRow","buttonComponent","defaultType","disabled","Boolean","onClick","DefaultSubmitButton","DefaultNextButton","DefaultBackButton","DefaultSaveButton","DefaultSuccessMessage","message","builtinRenderers","text","textarea","email","number","phone","website","regex","password","confirm","hidden","dropdown","select","checkbox","checkboxes","radios","radio","rating","cards","datetime","file","html","image","table","signature","calculation","types","radiobox","stripe","square","paypal","mollie","_unsupported","builtinComponents","Form","Page","Row","FieldWrapper","Label","Instructions","Errors","ButtonRow","SubmitButton","NextButton","BackButton","SaveButton","SuccessMessage","UnsupportedField","$slots"],"sources":["../src/components/FormLoader.vue","../src/components/FormLoader.vue","../src/theme/defaultTheme.ts","../src/version.ts","../src/types.ts","../src/utils/securityMeta.ts","../src/composables/useFreeform.ts","../src/renderers/builtin/CardsField.tsx","../src/renderers/builtin/CheckboxesField.tsx","../src/renderers/builtin/inputProps.ts","../src/renderers/builtin/CheckboxField.tsx","../src/renderers/builtin/ConfirmField.tsx","../src/composables/useFieldExtension.ts","../src/components/ExtensionHost.vue","../src/components/ExtensionHost.vue","../src/renderers/builtin/DatetimeField.tsx","../src/renderers/builtin/EmailField.tsx","../src/renderers/builtin/FileDndField.tsx","../src/renderers/builtin/FileField.tsx","../src/renderers/builtin/HiddenField.tsx","../src/renderers/builtin/HtmlField.tsx","../src/renderers/builtin/ImageField.tsx","../src/renderers/builtin/MolliePaymentField.tsx","../src/renderers/builtin/MultipleSelectField.tsx","../src/renderers/builtin/NumberField.tsx","../src/renderers/builtin/OpinionScaleField.tsx","../src/renderers/builtin/PasswordField.tsx","../src/renderers/builtin/PayPalPaymentField.tsx","../src/renderers/builtin/PhoneField.tsx","../src/renderers/builtin/RadioField.tsx","../src/renderers/builtin/RatingField.tsx","../src/renderers/builtin/RegexField.tsx","../src/renderers/builtin/SelectField.tsx","../src/renderers/builtin/SquarePaymentField.tsx","../src/renderers/builtin/StripePaymentField.tsx","../src/renderers/builtin/TextareaField.tsx","../src/renderers/builtin/TextField.tsx","../src/renderers/builtin/UnsupportedField.tsx","../src/renderers/builtin/WebsiteField.tsx","../src/renderers/builtin/CalculationField.tsx","../src/renderers/builtin/SignatureField.tsx","../src/renderers/builtin/TableField.tsx","../src/renderers/builtin/wrappers.tsx","../src/theme/mergeClassNames.ts","../src/theme/toBemModifier.ts","../src/components/CaptchaHost.vue","../src/components/CaptchaHost.vue","../src/renderers/resolve.ts","../src/theme/resolveThemeClassNames.ts","../src/components/FieldRenderer.vue","../src/components/FieldRenderer.vue","../src/components/FreeformView.vue","../src/components/FreeformView.vue","../src/components/Freeform.vue","../src/components/Freeform.vue"],"sourcesContent":["<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n message?: string;\n loaderClass?: string;\n variant?: \"spinner\" | \"skeleton\";\n }>(),\n {\n message: \"Loading form…\",\n loaderClass: \"ff-loader\",\n variant: \"skeleton\",\n },\n);\n</script>\n\n<template>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n :data-variant=\"variant\"\n :class=\"['ff-loader-root', loaderClass]\"\n >\n <div v-if=\"variant === 'skeleton'\" class=\"ff-loader-skeleton\" aria-hidden=\"true\">\n <div class=\"ff-loader-line ff-loader-line--title\" />\n <div v-for=\"index in 3\" :key=\"index\" class=\"ff-loader-field\">\n <div\n class=\"ff-loader-line ff-loader-line--label\"\n :style=\"{ animationDelay: `${index * 0.12}s` }\"\n />\n <div\n class=\"ff-loader-line ff-loader-line--input\"\n :style=\"{\n width: index === 2 ? '62%' : '100%',\n animationDelay: `${index * 0.12}s`,\n }\"\n />\n </div>\n <div\n class=\"ff-loader-line ff-loader-line--button\"\n :style=\"{ animationDelay: '0.36s' }\"\n />\n </div>\n <div v-else class=\"ff-loader-spinner\" aria-hidden=\"true\" />\n <p class=\"ff-loader-message\">{{ message }}</p>\n </div>\n</template>\n\n<style scoped>\n.ff-loader-root {\n display: grid;\n gap: 1rem;\n padding: 1.25rem 0;\n color: inherit;\n}\n\n.ff-loader-skeleton {\n width: 100%;\n}\n\n.ff-loader-line {\n background-color: currentColor;\n border-radius: 8px;\n opacity: 0.12;\n animation: ff-loader-pulse 1.4s ease-in-out infinite;\n}\n\n.ff-loader-line--title {\n width: 38%;\n height: 0.75rem;\n margin-bottom: 1.25rem;\n}\n\n.ff-loader-line--label {\n width: 28%;\n height: 0.65rem;\n margin-bottom: 0.45rem;\n}\n\n.ff-loader-line--input {\n height: 2.5rem;\n}\n\n.ff-loader-line--button {\n width: 7rem;\n height: 2.5rem;\n margin-top: 0.5rem;\n}\n\n.ff-loader-field {\n margin-bottom: 1rem;\n}\n\n.ff-loader-spinner {\n width: 2rem;\n height: 2rem;\n border: 3px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n opacity: 0.85;\n animation: ff-loader-spin 0.7s linear infinite;\n}\n\n.ff-loader-message {\n margin: 0;\n font-size: 0.9rem;\n opacity: 0.75;\n}\n\n@keyframes ff-loader-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes ff-loader-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n message?: string;\n loaderClass?: string;\n variant?: \"spinner\" | \"skeleton\";\n }>(),\n {\n message: \"Loading form…\",\n loaderClass: \"ff-loader\",\n variant: \"skeleton\",\n },\n);\n</script>\n\n<template>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n :data-variant=\"variant\"\n :class=\"['ff-loader-root', loaderClass]\"\n >\n <div v-if=\"variant === 'skeleton'\" class=\"ff-loader-skeleton\" aria-hidden=\"true\">\n <div class=\"ff-loader-line ff-loader-line--title\" />\n <div v-for=\"index in 3\" :key=\"index\" class=\"ff-loader-field\">\n <div\n class=\"ff-loader-line ff-loader-line--label\"\n :style=\"{ animationDelay: `${index * 0.12}s` }\"\n />\n <div\n class=\"ff-loader-line ff-loader-line--input\"\n :style=\"{\n width: index === 2 ? '62%' : '100%',\n animationDelay: `${index * 0.12}s`,\n }\"\n />\n </div>\n <div\n class=\"ff-loader-line ff-loader-line--button\"\n :style=\"{ animationDelay: '0.36s' }\"\n />\n </div>\n <div v-else class=\"ff-loader-spinner\" aria-hidden=\"true\" />\n <p class=\"ff-loader-message\">{{ message }}</p>\n </div>\n</template>\n\n<style scoped>\n.ff-loader-root {\n display: grid;\n gap: 1rem;\n padding: 1.25rem 0;\n color: inherit;\n}\n\n.ff-loader-skeleton {\n width: 100%;\n}\n\n.ff-loader-line {\n background-color: currentColor;\n border-radius: 8px;\n opacity: 0.12;\n animation: ff-loader-pulse 1.4s ease-in-out infinite;\n}\n\n.ff-loader-line--title {\n width: 38%;\n height: 0.75rem;\n margin-bottom: 1.25rem;\n}\n\n.ff-loader-line--label {\n width: 28%;\n height: 0.65rem;\n margin-bottom: 0.45rem;\n}\n\n.ff-loader-line--input {\n height: 2.5rem;\n}\n\n.ff-loader-line--button {\n width: 7rem;\n height: 2.5rem;\n margin-top: 0.5rem;\n}\n\n.ff-loader-field {\n margin-bottom: 1rem;\n}\n\n.ff-loader-spinner {\n width: 2rem;\n height: 2rem;\n border: 3px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n opacity: 0.85;\n animation: ff-loader-spin 0.7s linear infinite;\n}\n\n.ff-loader-message {\n margin: 0;\n font-size: 0.9rem;\n opacity: 0.75;\n}\n\n@keyframes ff-loader-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes ff-loader-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n</style>\n","import type { FreeformThemeClassNames, FreeformVueTheme } from \"../types.js\";\n\nexport const defaultTheme: FreeformVueTheme = {\n name: \"default\",\n framework: \"vue\",\n classNameStrategy: \"merge\",\n classNames: {\n form: \"ff-form\",\n page: \"ff-page\",\n row: \"ff-row\",\n field: \"ff-field\",\n fieldRequired: \"ff-field--required\",\n fieldHidden: \"ff-field--hidden\",\n fieldHasErrors: \"ff-field--has-errors\",\n label: \"ff-field__label\",\n instructions: \"ff-field__instructions\",\n input: \"ff-field__input\",\n content: \"ff-field__content\",\n errors: \"ff-field__errors\",\n error: \"ff-field__error\",\n buttons: \"ff-form__buttons\",\n button: \"ff-button\",\n submitButton: \"ff-button ff-button--submit\",\n nextButton: \"ff-button ff-button--next\",\n backButton: \"ff-button ff-button--back\",\n saveButton: \"ff-button ff-button--save\",\n success: \"ff-form__success\",\n },\n defaults: {\n renderLabels: true,\n renderInstructions: true,\n renderErrors: true,\n requiredIndicator: \"*\",\n colorScheme: \"system\",\n },\n};\n\nfunction mergeClassNamesByType(\n base: FreeformVueTheme[\"classNamesByType\"],\n overlay: FreeformVueTheme[\"classNamesByType\"],\n): FreeformVueTheme[\"classNamesByType\"] {\n if (!base && !overlay) {\n return undefined;\n }\n\n const keys = new Set([\n ...Object.keys(base ?? {}),\n ...Object.keys(overlay ?? {}),\n ]);\n const merged: Record<string, Partial<FreeformThemeClassNames>> = {};\n\n for (const key of keys) {\n merged[key] = { ...base?.[key], ...overlay?.[key] };\n }\n\n return merged;\n}\n\nexport function createTheme(\n overrides: Partial<FreeformVueTheme> = {},\n): FreeformVueTheme {\n const strategy =\n overrides.classNameStrategy ?? defaultTheme.classNameStrategy;\n const mergeDefaultClassNames = strategy !== \"replace\";\n\n return {\n ...defaultTheme,\n ...overrides,\n classNameStrategy: strategy,\n classNames: mergeDefaultClassNames\n ? {\n ...defaultTheme.classNames,\n ...overrides.classNames,\n }\n : { ...overrides.classNames },\n classNamesByType: mergeClassNamesByType(\n mergeDefaultClassNames ? defaultTheme.classNamesByType : undefined,\n overrides.classNamesByType,\n ),\n defaults: {\n ...defaultTheme.defaults,\n ...overrides.defaults,\n },\n renderers: {\n ...defaultTheme.renderers,\n ...overrides.renderers,\n handles: {\n ...defaultTheme.renderers?.handles,\n ...overrides.renderers?.handles,\n },\n frontend: {\n ...defaultTheme.renderers?.frontend,\n ...overrides.renderers?.frontend,\n },\n types: {\n ...defaultTheme.renderers?.types,\n ...overrides.renderers?.types,\n },\n },\n };\n}\n","/** Kept in sync with package.json by `pnpm frontend:bump`. */\nexport const PACKAGE_VERSION = \"1.0.0\";\n","import type {\n FieldValue,\n FreeformExtension,\n FreeformManifest,\n ManifestCaptchaSecurity,\n ManifestFieldDefinition,\n SubmitIntent,\n SubmitResponse,\n} from \"@solspace/freeform-core\";\nimport type { Component, VNode } from \"vue\";\n\nexport { PACKAGE_VERSION } from \"./version.js\";\nexport const CLIENT_NAME = \"@solspace/freeform-vue\";\n\nexport type FreeformThemeClassNames = {\n form?: string;\n page?: string;\n row?: string;\n field?: string;\n fieldRequired?: string;\n fieldHidden?: string;\n fieldHasErrors?: string;\n label?: string;\n instructions?: string;\n input?: string;\n inputError?: string;\n optionLabel?: string;\n optionInput?: string;\n content?: string;\n errors?: string;\n error?: string;\n buttons?: string;\n button?: string;\n submitButton?: string;\n nextButton?: string;\n backButton?: string;\n saveButton?: string;\n success?: string;\n};\n\nexport type ClassNameStrategy = \"merge\" | \"replace\";\n\nexport type VueFieldRendererProps = {\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n value: FieldValue;\n errors: string[];\n input: Record<string, unknown>;\n classNames: FreeformThemeClassNames;\n allowRawHtml?: boolean;\n renderLabel: () => VNode | null;\n renderInstructions: () => VNode | null;\n renderErrors: () => VNode | null;\n};\n\nexport type VueFieldRenderer = Component<VueFieldRendererProps>;\n\nexport type RendererOverrides = {\n handles?: Record<string, VueFieldRenderer>;\n frontend?: Record<string, VueFieldRenderer>;\n types?: Record<string, VueFieldRenderer>;\n};\n\nexport type FreeformVueTheme = {\n name: string;\n framework: \"vue\";\n classNameStrategy?: ClassNameStrategy;\n classNames?: FreeformThemeClassNames;\n classNamesByType?: Record<string, Partial<FreeformThemeClassNames>>;\n renderers?: RendererOverrides & {\n components?: Partial<FreeformThemeComponents>;\n };\n defaults?: {\n renderLabels?: boolean;\n renderInstructions?: boolean;\n renderErrors?: boolean;\n requiredIndicator?: string;\n colorScheme?: \"light\" | \"dark\" | \"system\";\n };\n};\n\nexport type FreeformThemeComponents = {\n Form: Component<FreeformComponentProps>;\n Page: Component<FreeformPageProps>;\n Row: Component<FreeformRowProps>;\n FieldWrapper: Component<FreeformFieldWrapperProps>;\n Label: Component<FreeformLabelProps>;\n Instructions: Component<FreeformInstructionsProps>;\n Errors: Component<FreeformErrorsProps>;\n ButtonRow: Component<FreeformButtonRowProps>;\n SubmitButton: Component<FreeformButtonProps>;\n NextButton: Component<FreeformButtonProps>;\n BackButton: Component<FreeformButtonProps>;\n SaveButton: Component<FreeformButtonProps>;\n SuccessMessage: Component<{ message: string; class?: string }>;\n UnsupportedField: Component<VueFieldRendererProps>;\n};\n\nexport type FreeformComponentProps = {\n form: FreeformRuntime;\n class?: string;\n onSubmit: (event: Event) => void;\n};\n\nexport type FreeformPageProps = {\n form: FreeformRuntime;\n pageIndex: number;\n class?: string;\n};\n\nexport type FreeformRowProps = {\n class?: string;\n};\n\nexport type FreeformFieldWrapperProps = {\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n};\n\nexport type FreeformLabelProps = {\n field: ManifestFieldDefinition;\n class?: string;\n requiredIndicator?: string;\n};\n\nexport type FreeformInstructionsProps = {\n field: ManifestFieldDefinition;\n class?: string;\n};\n\nexport type FreeformErrorsProps = {\n errors: string[];\n class?: string;\n errorClass?: string;\n};\n\nexport type FreeformButtonRowProps = {\n class?: string;\n};\n\nexport type FreeformButtonProps = {\n label: string;\n class?: string;\n disabled?: boolean;\n type?: \"button\" | \"submit\";\n onClick?: () => void;\n};\n\nexport type FreeformRuntime = {\n manifest: FreeformManifest;\n values: Record<string, FieldValue>;\n touched: Record<string, boolean>;\n fieldErrors: Record<string, string[]>;\n formErrors: string[];\n pageErrors: string[];\n currentPageIndex: number;\n isSubmitting: boolean;\n isComplete: boolean;\n successMessage: string | null;\n setValue: (handle: string, value: FieldValue) => void;\n getValue: (handle: string) => FieldValue;\n isFieldVisible: (handle: string) => boolean;\n isFieldEnabled: (handle: string) => boolean;\n getFieldProps: (handle: string) => Record<string, unknown>;\n submit: (intent?: SubmitIntent) => Promise<SubmitResponse | undefined>;\n validate: () => Promise<SubmitResponse | undefined>;\n goNext: () => Promise<SubmitResponse | undefined>;\n goBack: () => Promise<SubmitResponse | undefined>;\n saveDraft: () => Promise<SubmitResponse | undefined>;\n reset: () => void;\n handleSubmit: (event?: Event) => Promise<void>;\n mountFieldExtension: (handle: string, element: HTMLElement) => () => void;\n mountCaptcha: (\n captcha: ManifestCaptchaSecurity,\n element: HTMLElement,\n ) => () => void;\n};\n\nexport type UseFreeformOptions = {\n handle?: string;\n profile?: string;\n properties?: Record<string, string | number | boolean>;\n baseUrl: string;\n manifest?: FreeformManifest;\n initialValues?: Record<string, FieldValue>;\n draftToken?: string | null;\n draftKey?: string | null;\n clientVersion?: string;\n fetch?: typeof globalThis.fetch;\n credentials?: RequestCredentials;\n theme?: FreeformVueTheme;\n renderers?: RendererOverrides;\n extensions?: FreeformExtension[];\n allowRawHtml?: boolean;\n onSuccess?: (response: SubmitResponse) => void;\n onError?: (response: SubmitResponse) => void;\n onManifestLoaded?: (manifest: FreeformManifest) => void;\n};\n\nexport type UseFreeformResult = {\n loading: boolean;\n error: Error | null;\n manifest: FreeformManifest | null;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml: boolean;\n} & Omit<FreeformRuntime, \"manifest\">;\n\nexport type FreeformProps = UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n};\n","import type { FreeformManifest, SubmitMeta } from \"@solspace/freeform-core\";\n\nexport function buildSecurityMeta(manifest: FreeformManifest): SubmitMeta {\n const meta: SubmitMeta = {};\n\n if (manifest.security.honeypot?.name) {\n meta.honeypot = {\n name: manifest.security.honeypot.name,\n value: \"\",\n };\n }\n\n if (manifest.security.javascriptTest?.name) {\n meta.javascriptTest = {\n name: manifest.security.javascriptTest.name,\n value: manifest.security.javascriptTest.value ?? \"\",\n };\n }\n\n return meta;\n}\n","import {\n CLIENT_NAME as CORE_CLIENT_NAME,\n collectExtensionSubmitMeta,\n createFormState,\n createFreeformClient,\n type FieldValue,\n type FormState,\n type FreeformClient,\n type FreeformExtension,\n type FreeformManifest,\n type ManifestCaptchaSecurity,\n prepareSubmitValues,\n runExtensionAfterSubmit,\n runExtensionSetups,\n type SubmitIntent,\n} from \"@solspace/freeform-core\";\nimport {\n computed,\n type MaybeRefOrGetter,\n onScopeDispose,\n reactive,\n ref,\n shallowRef,\n toValue,\n watch,\n watchEffect,\n} from \"vue\";\nimport { defaultTheme } from \"../theme/defaultTheme.js\";\nimport {\n CLIENT_NAME,\n type FreeformRuntime,\n PACKAGE_VERSION,\n type UseFreeformOptions,\n type UseFreeformResult,\n} from \"../types.js\";\nimport { buildSecurityMeta } from \"../utils/securityMeta.js\";\n\ntype Snapshot = {\n values: Record<string, FieldValue>;\n touched: Record<string, boolean>;\n fieldErrors: Record<string, string[]>;\n formErrors: string[];\n pageErrors: string[];\n currentPageIndex: number;\n visibilityVersion: number;\n};\n\nfunction snapshotFromState(\n formState: FormState,\n visibilityVersion: number,\n): Snapshot {\n return {\n values: { ...formState.values },\n touched: { ...formState.touched },\n fieldErrors: { ...formState.fieldErrors },\n formErrors: [...formState.formErrors],\n pageErrors: [...formState.pageErrors],\n currentPageIndex: formState.currentPageIndex,\n visibilityVersion,\n };\n}\n\nexport function useFreeform(\n options: MaybeRefOrGetter<UseFreeformOptions>,\n): UseFreeformResult {\n const opts = computed(() => toValue(options));\n const theme = computed(() => opts.value.theme ?? defaultTheme);\n const renderers = computed(() => opts.value.renderers ?? {});\n const allowRawHtml = computed(() => opts.value.allowRawHtml ?? false);\n\n const clientRef = shallowRef<FreeformClient | null>(null);\n const formStateRef = shallowRef<FormState | null>(null);\n const extensionMountsRef = shallowRef(new Map<string, HTMLElement>());\n const captchaCleanupsRef = shallowRef(new Map<string, () => void>());\n const extensionsRef = shallowRef<FreeformExtension[]>([]);\n const visibilityVersionRef = ref(0);\n const draftHydrateKeyRef = ref<string | null>(null);\n\n const manifest = ref<FreeformManifest | null>(opts.value.manifest ?? null);\n const loading = ref(!opts.value.manifest);\n const error = ref<Error | null>(null);\n const isSubmitting = ref(false);\n const isComplete = ref(false);\n const successMessage = ref<string | null>(null);\n const snapshot = ref<Snapshot>({\n values: {},\n touched: {},\n fieldErrors: {},\n formErrors: [],\n pageErrors: [],\n currentPageIndex: 0,\n visibilityVersion: 0,\n });\n\n watch(\n () => opts.value.extensions,\n (extensions) => {\n extensionsRef.value = extensions ?? [];\n },\n { immediate: true },\n );\n\n function syncFromFormState() {\n const formState = formStateRef.value;\n if (!formState) {\n return;\n }\n\n visibilityVersionRef.value += 1;\n snapshot.value = snapshotFromState(formState, visibilityVersionRef.value);\n }\n\n function getClient(): FreeformClient {\n if (!clientRef.value) {\n clientRef.value = createFreeformClient({\n baseUrl: opts.value.baseUrl,\n clientVersion: opts.value.clientVersion ?? PACKAGE_VERSION,\n fetch: opts.value.fetch,\n credentials: opts.value.credentials,\n });\n }\n\n for (const extension of extensionsRef.value) {\n clientRef.value.extensions.register(extension);\n }\n\n return clientRef.value;\n }\n\n watch(\n () => opts.value.extensions,\n () => {\n const client = getClient();\n for (const extension of extensionsRef.value) {\n client.extensions.register(extension);\n }\n },\n );\n\n watch(manifest, (current) => {\n if (!current) {\n return;\n }\n void runExtensionSetups(extensionsRef.value, { manifest: current });\n });\n\n watch(\n () => [\n opts.value.handle,\n opts.value.profile,\n opts.value.properties,\n opts.value.manifest,\n opts.value.initialValues,\n ],\n () => {\n if (opts.value.manifest) {\n formStateRef.value = createFormState({\n manifest: opts.value.manifest,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n manifest.value = opts.value.manifest;\n syncFromFormState();\n loading.value = false;\n return;\n }\n\n if (!opts.value.handle && !opts.value.profile) {\n error.value = new Error(\n \"Either handle, profile, or manifest is required.\",\n );\n loading.value = false;\n return;\n }\n\n let cancelled = false;\n\n const load = async () => {\n loading.value = true;\n error.value = null;\n\n try {\n const loaded = await getClient().loadManifest({\n handle: opts.value.handle,\n profile: opts.value.profile,\n properties: opts.value.properties,\n });\n\n if (cancelled) {\n return;\n }\n\n formStateRef.value = createFormState({\n manifest: loaded,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n manifest.value = loaded;\n syncFromFormState();\n opts.value.onManifestLoaded?.(loaded);\n } catch (loadError) {\n if (!cancelled) {\n error.value =\n loadError instanceof Error\n ? loadError\n : new Error(\"Failed to load manifest.\");\n }\n } finally {\n if (!cancelled) {\n loading.value = false;\n }\n }\n };\n\n void load();\n\n onScopeDispose(() => {\n cancelled = true;\n });\n },\n { immediate: true },\n );\n\n watch(\n () => [opts.value.draftToken, opts.value.draftKey],\n () => {\n const formState = formStateRef.value;\n if (!formState) {\n return;\n }\n\n if (opts.value.draftToken !== undefined) {\n formState.draftToken = opts.value.draftToken ?? null;\n }\n if (opts.value.draftKey !== undefined) {\n formState.draftKey = opts.value.draftKey ?? null;\n }\n },\n );\n\n function setValue(handle: string, value: FieldValue) {\n formStateRef.value?.setValue(handle, value);\n syncFromFormState();\n }\n\n function getValue(handle: string) {\n return formStateRef.value?.getValue(handle);\n }\n\n function isFieldVisible(handle: string) {\n return formStateRef.value?.isFieldVisible(handle) ?? false;\n }\n\n function isFieldEnabled(handle: string) {\n return formStateRef.value?.isFieldEnabled(handle) ?? true;\n }\n\n function getFieldProps(handle: string) {\n const formState = formStateRef.value;\n const field = manifest.value?.fields[handle];\n const value = formState?.getValue(handle);\n\n return {\n id: `freeform-${handle}`,\n name: handle,\n value: value ?? \"\",\n onChange: (event: Event) => {\n const target = event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n setValue(handle, target.value);\n },\n onBlur: () => {\n const current = formStateRef.value;\n if (!current) {\n return;\n }\n current.touched = { ...current.touched, [handle]: true };\n syncFromFormState();\n },\n disabled: !isFieldEnabled(handle),\n required: field?.required ?? false,\n placeholder: field?.placeholder ?? undefined,\n \"aria-invalid\": (formState?.fieldErrors[handle]?.length ?? 0) > 0,\n };\n }\n\n async function submit(intent: SubmitIntent = \"submit\") {\n const formState = formStateRef.value;\n const currentManifest = manifest.value;\n if (!formState || !currentManifest) {\n return undefined;\n }\n\n isSubmitting.value = true;\n\n try {\n const rawValues = formState.getValuesForSubmit();\n const { values, files } = prepareSubmitValues(\n rawValues,\n currentManifest.fields,\n );\n\n const submitContext = {\n ...formState.getSubmitContext(),\n sourceUrl:\n typeof window !== \"undefined\" ? window.location.href : undefined,\n };\n\n const securityMeta = buildSecurityMeta(currentManifest);\n const extensionMeta = await collectExtensionSubmitMeta(\n extensionsRef.value,\n {\n manifest: currentManifest,\n intent,\n values,\n meta: securityMeta,\n context: submitContext,\n baseUrl: opts.value.baseUrl,\n },\n );\n\n const result = await getClient().submit({\n manifest: currentManifest,\n request: {\n values,\n intent,\n context: submitContext,\n meta: {\n client: CLIENT_NAME,\n clientVersion: opts.value.clientVersion ?? PACKAGE_VERSION,\n ...extensionMeta,\n },\n },\n files: Object.keys(files).length > 0 ? files : undefined,\n });\n\n formState.applySubmitResponse(result);\n syncFromFormState();\n\n await runExtensionAfterSubmit(extensionsRef.value, {\n manifest: currentManifest,\n intent,\n response: result,\n baseUrl: opts.value.baseUrl,\n });\n\n if (result.complete) {\n isComplete.value = true;\n successMessage.value =\n result.message ??\n currentManifest.settings.successMessage ??\n \"Thank you for your submission.\";\n }\n\n if (result.success) {\n opts.value.onSuccess?.(result);\n } else {\n opts.value.onError?.(result);\n }\n\n return result;\n } catch (submitError) {\n if (\n submitError instanceof Error &&\n (submitError.name === \"StripePaymentRedirectError\" ||\n submitError.name === \"MolliePaymentRedirectError\")\n ) {\n return undefined;\n }\n\n const message =\n submitError instanceof Error\n ? submitError\n : new Error(\"Something went wrong while submitting the form.\");\n if (formState) {\n formState.formErrors = [message.message];\n formState.fieldErrors = {};\n formState.pageErrors = [];\n syncFromFormState();\n }\n opts.value.onError?.({\n success: false,\n status: \"error\",\n complete: false,\n errors: { fields: {}, form: [message.message], page: [] },\n });\n return undefined;\n } finally {\n isSubmitting.value = false;\n }\n }\n\n const validate = () => submit(\"validate\");\n const goNext = () => submit(\"next\");\n const goBack = () => submit(\"back\");\n const saveDraft = () => submit(\"saveDraft\");\n\n watch(\n () => [manifest.value, opts.value.draftToken, opts.value.draftKey],\n () => {\n if (!manifest.value) {\n return;\n }\n\n const token = opts.value.draftToken;\n const key = opts.value.draftKey;\n if (!token || !key) {\n return;\n }\n\n const hydrateKey = `${token}:${key}`;\n if (draftHydrateKeyRef.value === hydrateKey) {\n return;\n }\n\n draftHydrateKeyRef.value = hydrateKey;\n void submit(\"validate\");\n },\n );\n\n function reset() {\n if (!manifest.value) {\n return;\n }\n\n formStateRef.value = createFormState({\n manifest: manifest.value,\n initialValues: opts.value.initialValues,\n draftToken: opts.value.draftToken,\n draftKey: opts.value.draftKey,\n });\n isComplete.value = false;\n successMessage.value = null;\n syncFromFormState();\n }\n\n async function handleSubmit(event?: Event) {\n event?.preventDefault();\n\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return;\n }\n\n const pages = currentManifest.layout.pages;\n const isLastPage =\n pages.length === 0 || snapshot.value.currentPageIndex >= pages.length - 1;\n\n if (currentManifest.settings.multiPage && !isLastPage) {\n await goNext();\n return;\n }\n\n await submit(\"submit\");\n }\n\n function mountFieldExtension(handle: string, element: HTMLElement) {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return () => {};\n }\n\n extensionMountsRef.value.set(handle, element);\n const field = currentManifest.fields[handle];\n if (!field) {\n return () => {\n extensionMountsRef.value.delete(handle);\n };\n }\n\n let cancelled = false;\n const cleanups: Array<() => void> = [];\n\n void (async () => {\n for (const extension of extensionsRef.value) {\n if (extension.supports && !extension.supports(field)) {\n continue;\n }\n if (!extension.mount) {\n continue;\n }\n\n const cleanup = await extension.mount({\n manifest: currentManifest,\n field,\n element,\n value: formStateRef.value?.getValue(handle),\n setValue: (value) => {\n formStateRef.value?.setValue(handle, value as FieldValue);\n syncFromFormState();\n },\n getValues: () =>\n (formStateRef.value?.getValuesForSubmit() ?? {}) as Record<\n string,\n unknown\n >,\n baseUrl: opts.value.baseUrl,\n requestSubmit: () => {\n void submit(\"submit\");\n },\n });\n\n if (cancelled) {\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n return;\n }\n\n if (typeof cleanup === \"function\") {\n cleanups.push(cleanup);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n for (const cleanup of cleanups) {\n cleanup();\n }\n extensionMountsRef.value.delete(handle);\n };\n }\n\n function mountCaptcha(\n captcha: ManifestCaptchaSecurity,\n element: HTMLElement,\n ) {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return () => {};\n }\n\n let cancelled = false;\n const cleanups: Array<() => void> = [];\n\n void (async () => {\n for (const extension of extensionsRef.value) {\n const cleanup = await extension.mountCaptcha?.({\n manifest: currentManifest,\n captcha,\n element,\n });\n if (cancelled) {\n if (typeof cleanup === \"function\") {\n cleanup();\n }\n return;\n }\n if (typeof cleanup === \"function\") {\n cleanups.push(cleanup);\n }\n }\n })();\n\n const dispose = () => {\n cancelled = true;\n for (const cleanup of cleanups) {\n cleanup();\n }\n captchaCleanupsRef.value.delete(captcha.name);\n };\n\n captchaCleanupsRef.value.set(captcha.name, dispose);\n return dispose;\n }\n\n const runtime = computed((): FreeformRuntime | null => {\n const currentManifest = manifest.value;\n if (!currentManifest) {\n return null;\n }\n\n return {\n manifest: currentManifest,\n values: snapshot.value.values,\n touched: snapshot.value.touched,\n fieldErrors: snapshot.value.fieldErrors,\n formErrors: snapshot.value.formErrors,\n pageErrors: snapshot.value.pageErrors,\n currentPageIndex: snapshot.value.currentPageIndex,\n isSubmitting: isSubmitting.value,\n isComplete: isComplete.value,\n successMessage: successMessage.value,\n setValue,\n getValue,\n isFieldVisible,\n isFieldEnabled,\n getFieldProps,\n submit,\n validate,\n goNext,\n goBack,\n saveDraft,\n reset,\n handleSubmit,\n mountFieldExtension,\n mountCaptcha,\n };\n });\n\n const emptyRuntime = {\n values: {},\n touched: {},\n fieldErrors: {},\n formErrors: [],\n pageErrors: [],\n currentPageIndex: 0,\n isSubmitting: false,\n isComplete: false,\n successMessage: null,\n setValue,\n getValue,\n isFieldVisible,\n isFieldEnabled,\n getFieldProps,\n submit,\n validate,\n goNext,\n goBack,\n saveDraft,\n reset,\n handleSubmit,\n mountFieldExtension,\n mountCaptcha,\n };\n\n const result = reactive({} as UseFreeformResult);\n\n watchEffect(() => {\n const currentRuntime = runtime.value;\n\n if (!currentRuntime) {\n Object.assign(result, {\n loading: loading.value,\n error: error.value,\n manifest: null,\n theme: theme.value,\n renderers: renderers.value,\n allowRawHtml: allowRawHtml.value,\n ...emptyRuntime,\n });\n return;\n }\n\n Object.assign(result, {\n ...currentRuntime,\n loading: loading.value,\n error: error.value,\n manifest: manifest.value,\n theme: theme.value,\n renderers: renderers.value,\n allowRawHtml: allowRawHtml.value,\n });\n });\n\n return result;\n}\n\nvoid CORE_CLIENT_NAME;\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function CardsFieldRenderer(props: VueFieldRendererProps) {\n const cards =\n ((props.field.frontend?.config?.cards as Array<{\n label: string;\n value: string;\n description?: string;\n imageUrl?: string | null;\n }>) ??\n []) ||\n [];\n const maxSelected = Number(\n props.field.frontend?.config?.maxSelectedValues ?? 0,\n );\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n const singleSelect = maxSelected === 1;\n\n return (\n <div\n class={props.classNames.input}\n style={{\n display: \"grid\",\n gap: \"0.75rem\",\n gridTemplateColumns: `repeat(${Math.min(\n Number(props.field.frontend?.config?.cardsPerRow ?? 3) || 3,\n 4,\n )}, minmax(0, 1fr))`,\n }}\n >\n {cards.map((card) => {\n const checked = selected.includes(card.value);\n return (\n <label\n key={card.value}\n class={props.classNames.optionLabel}\n style={\n props.classNames.optionLabel\n ? undefined\n : {\n border: checked\n ? \"2px solid currentColor\"\n : \"1px solid #ccc\",\n borderRadius: \"0.5rem\",\n padding: \"0.75rem\",\n cursor: \"pointer\",\n }\n }\n >\n <input\n type={singleSelect ? \"radio\" : \"checkbox\"}\n class={props.classNames.optionInput}\n name={`${props.field.handle}${singleSelect ? \"\" : \"[]\"}`}\n value={card.value}\n checked={checked}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={(event) => {\n if (singleSelect) {\n props.form.setValue(props.field.handle, [card.value]);\n return;\n }\n\n const next = new Set(selected);\n if (event.target.checked) {\n if (maxSelected > 0 && next.size >= maxSelected) {\n return;\n }\n next.add(card.value);\n } else {\n next.delete(card.value);\n }\n props.form.setValue(props.field.handle, [...next]);\n }}\n />\n {card.imageUrl ? (\n <img\n src={card.imageUrl}\n alt=\"\"\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n marginBottom: \"0.5rem\",\n }}\n />\n ) : null}\n <strong>{card.label}</strong>\n {card.description ? <div>{card.description}</div> : null}\n </label>\n );\n })}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function CheckboxesFieldRenderer(props: VueFieldRendererProps) {\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n\n return (\n <div class={props.classNames.input}>\n {(props.field.options ?? []).map((option) => (\n <label key={option.value} class={props.classNames.optionLabel}>\n <input\n type=\"checkbox\"\n class={props.classNames.optionInput}\n name={`${props.field.handle}[]`}\n value={option.value}\n checked={selected.includes(option.value)}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={(event) => {\n const next = new Set(selected);\n if (event.target.checked) {\n next.add(option.value);\n } else {\n next.delete(option.value);\n }\n props.form.setValue(props.field.handle, [...next]);\n }}\n />\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n","import type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function inputProps(props: VueFieldRendererProps) {\n const raw = props.input as {\n id?: string;\n name?: string;\n value?: string;\n onChange?: (event: Event) => void;\n onBlur?: () => void;\n disabled?: boolean;\n required?: boolean;\n placeholder?: string | null;\n \"aria-invalid\"?: boolean;\n };\n\n return {\n ...raw,\n placeholder: raw.placeholder ?? undefined,\n };\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function CheckboxFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const checked =\n input.value === \"1\" || props.value === true || input.value === \"true\";\n\n return (\n <label class={props.classNames.optionLabel ?? props.classNames.input}>\n <input\n type=\"checkbox\"\n class={props.classNames.optionInput}\n id={input.id}\n name={input.name}\n checked={checked}\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n onChange={(event) => {\n props.form.setValue(\n props.field.handle,\n event.target.checked ? \"1\" : \"\",\n );\n }}\n onBlur={input.onBlur}\n />\n <span>{props.field.label}</span>\n </label>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function ConfirmFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const targetType = props.field.frontend?.config?.targetType as\n | string\n | undefined;\n const type = targetType === \"password\" ? \"password\" : \"text\";\n\n return <input type={type} class={props.classNames.input} {...input} />;\n}\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nexport function useFieldExtension(\n field: ManifestFieldDefinition,\n form: FreeformRuntime,\n) {\n const hostRef = ref<HTMLElement | null>(null);\n let cleanup: (() => void) | undefined;\n\n function mount() {\n cleanup?.();\n cleanup = undefined;\n\n const element = hostRef.value;\n if (!element || !field.frontend?.extension) {\n return;\n }\n\n if (!form.isFieldVisible(field.handle)) {\n return;\n }\n\n cleanup = form.mountFieldExtension(field.handle, element);\n }\n\n onMounted(mount);\n\n watch(\n () => [\n field.frontend?.extension,\n field.handle,\n form.isFieldVisible(field.handle),\n ],\n mount,\n );\n\n onUnmounted(() => {\n cleanup?.();\n });\n\n return hostRef;\n}\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { useFieldExtension } from \"../composables/useFieldExtension.js\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n dataAttr: string;\n dataValue?: string;\n hidden?: boolean;\n}>();\n\nconst hostRef = useFieldExtension(props.field, props.form);\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n :class=\"props.class\"\n :[dataAttr]=\"dataValue ?? field.handle\"\n :hidden=\"hidden || undefined\"\n >\n <slot />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { useFieldExtension } from \"../composables/useFieldExtension.js\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n class?: string;\n dataAttr: string;\n dataValue?: string;\n hidden?: boolean;\n}>();\n\nconst hostRef = useFieldExtension(props.field, props.form);\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n :class=\"props.class\"\n :[dataAttr]=\"dataValue ?? field.handle\"\n :hidden=\"hidden || undefined\"\n >\n <slot />\n </div>\n</template>\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function DatetimeFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const config = (props.field.frontend?.config ?? {}) as {\n useNativeTypes?: boolean;\n nativeInputType?: string;\n useDatepicker?: boolean;\n };\n const inputType = config.useNativeTypes\n ? config.nativeInputType || \"datetime-local\"\n : \"text\";\n\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n dataAttr=\"data-freeform-datetime\"\n >\n <input\n type={inputType}\n class={props.classNames.input}\n data-datepicker=\"\"\n data-datepicker-enabled={config.useDatepicker ? \"1\" : \"0\"}\n {...input}\n />\n </ExtensionHost>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function EmailFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"email\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function FileDndFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-file-dnd\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function FileFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const config = (props.field.frontend?.config ?? {}) as {\n accept?: string;\n multiple?: boolean;\n maxFiles?: number;\n };\n\n return (\n <input\n type=\"file\"\n class={props.classNames.input}\n id={input.id}\n name={input.name}\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n accept={config.accept || undefined}\n multiple={Boolean(config.multiple ?? (config.maxFiles ?? 1) > 1)}\n onChange={(event) => {\n const files = event.target.files;\n if (!files || files.length === 0) {\n props.form.setValue(props.field.handle, null);\n return;\n }\n\n props.form.setValue(\n props.field.handle,\n files.length === 1 ? files[0] : Array.from(files),\n );\n }}\n onBlur={input.onBlur}\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function HiddenFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"hidden\" {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function HtmlFieldRenderer(props: VueFieldRendererProps) {\n const contentClass =\n props.classNames.content ?? props.classNames.input ?? \"ff-field__content\";\n const html = props.field.content?.rendered?.html?.trim();\n\n if (props.allowRawHtml && html) {\n return <div class={contentClass} innerHTML={html} />;\n }\n\n // Empty rich-text / html with no renderable content — don't invent a second row.\n if (!props.field.instructions) {\n return null;\n }\n\n return (\n <div class={contentClass} role=\"note\">\n {props.field.instructions}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function ImageFieldRenderer(props: VueFieldRendererProps) {\n const contentClass =\n props.classNames.content ?? props.classNames.input ?? \"ff-field__content\";\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n srcset?: string | null;\n alt?: string | null;\n };\n const image = (\n props.field.content as\n | {\n image?: {\n src?: string | null;\n srcset?: string | null;\n alt?: string | null;\n };\n }\n | undefined\n )?.image;\n const src = image?.src || config.src;\n const srcset = image?.srcset || config.srcset;\n const alt = image?.alt || config.alt || props.field.label || \"\";\n\n if (!src) {\n return null;\n }\n\n return (\n <img\n class={contentClass}\n src={src}\n srcset={srcset || undefined}\n alt={alt}\n />\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function MolliePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-mollie\"\n hidden\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function MultipleSelectFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const selected = Array.isArray(props.value)\n ? props.value.map(String)\n : props.value\n ? [String(props.value)]\n : [];\n\n return (\n <select\n class={props.classNames.input}\n id={input.id}\n name={input.name}\n multiple\n disabled={input.disabled}\n aria-invalid={input[\"aria-invalid\"]}\n value={selected}\n onChange={(event) => {\n const next = Array.from(event.target.selectedOptions).map(\n (option) => option.value,\n );\n props.form.setValue(props.field.handle, next);\n }}\n onBlur={input.onBlur}\n >\n {(props.field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function NumberFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"number\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function OpinionScaleFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n const legends = (props.field.frontend?.config?.legends as string[]) ?? [];\n\n return (\n <div class={props.classNames.input}>\n <div role=\"radiogroup\" style={{ display: \"flex\", gap: \"0.75rem\" }}>\n {(props.field.options ?? []).map((option) => (\n <label\n key={option.value}\n class={props.classNames.optionLabel}\n style={\n props.classNames.optionLabel\n ? undefined\n : {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }\n }\n >\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n />\n <span>{option.label || option.value}</span>\n </label>\n ))}\n </div>\n {legends.length > 0 ? (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: \"0.5rem\",\n fontSize: \"0.875rem\",\n }}\n >\n {legends.map((legend) => (\n <span key={legend}>{legend}</span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function PasswordFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"password\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function PayPalPaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-paypal\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function PhoneFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"tel\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function RadioFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n\n return (\n <div class={props.classNames.input} role=\"radiogroup\">\n {(props.field.options ?? []).map((option) => (\n <label key={option.value} class={props.classNames.optionLabel}>\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n />\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function RatingFieldRenderer(props: VueFieldRendererProps) {\n const value = String(props.value ?? \"\");\n const config = (props.field.frontend?.config ?? {}) as {\n colorIdle?: string;\n colorSelected?: string;\n };\n const idle = config.colorIdle || \"#dddddd\";\n const selected = config.colorSelected || \"#ff7700\";\n\n return (\n <div class={props.classNames.input} role=\"radiogroup\">\n {(props.field.options ?? []).map((option) => {\n const active = Number(value) >= Number(option.value);\n return (\n <label\n key={option.value}\n class={props.classNames.optionLabel}\n style={{\n cursor: \"pointer\",\n color: active ? selected : idle,\n fontSize: \"1.5rem\",\n marginRight: \"0.25rem\",\n }}\n >\n <input\n type=\"radio\"\n class={props.classNames.optionInput}\n name={props.field.handle}\n value={option.value}\n checked={value === option.value}\n disabled={!props.form.isFieldEnabled(props.field.handle)}\n onChange={() =>\n props.form.setValue(props.field.handle, option.value)\n }\n style={{\n position: \"absolute\",\n opacity: 0,\n pointerEvents: \"none\",\n }}\n />\n <span aria-hidden=\"true\">★</span>\n <span class=\"ff-sr-only\">{option.label}</span>\n </label>\n );\n })}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function RegexFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const pattern =\n (props.field.validation?.pattern as string | undefined) ||\n ((props.field.frontend?.config?.pattern as string | undefined) ??\n undefined);\n\n return (\n <input\n type=\"text\"\n class={props.classNames.input}\n pattern={pattern || undefined}\n {...input}\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function SelectFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n const value = String(input.value ?? \"\");\n\n return (\n <select class={props.classNames.input} {...input} value={value}>\n {props.field.placeholder ? (\n <option value=\"\">{props.field.placeholder}</option>\n ) : null}\n {(props.field.options ?? []).map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function SquarePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-square\"\n />\n );\n}\n","// @ts-nocheck\nimport ExtensionHost from \"../../components/ExtensionHost.vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function StripePaymentFieldRenderer(props: VueFieldRendererProps) {\n return (\n <ExtensionHost\n field={props.field}\n form={props.form}\n class={props.classNames.input}\n dataAttr=\"data-freeform-stripe\"\n />\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function TextareaFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <textarea class={props.classNames.input} rows={4} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function TextFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"text\" class={props.classNames.input} {...input} />;\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport function UnsupportedFieldRenderer(props: VueFieldRendererProps) {\n return (\n <div class={props.classNames.input} role=\"alert\">\n Unsupported field type: {props.field.type}\n </div>\n );\n}\n","// @ts-nocheck\nimport type { VueFieldRendererProps } from \"../../types.js\";\nimport { inputProps } from \"./inputProps.js\";\n\nexport function WebsiteFieldRenderer(props: VueFieldRendererProps) {\n const input = inputProps(props);\n return <input type=\"url\" class={props.classNames.input} {...input} />;\n}\n","import {\n evaluateCalculation,\n getCalculationConfig,\n} from \"@solspace/freeform-core\";\nimport { defineComponent, shallowRef, watch } from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const CalculationFieldRenderer = defineComponent({\n name: \"CalculationFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n classNames: { type: Object, required: true },\n value: { required: true },\n },\n setup(props: VueFieldRendererProps) {\n const config = getCalculationConfig(props.field.frontend?.config);\n const inputType = config.inputType ?? \"regularTextInput\";\n const setValueRef = shallowRef(props.form.setValue);\n setValueRef.value = props.form.setValue;\n\n watch(\n () => [\n props.field.handle,\n config.calculations,\n config.decimalCount,\n props.form.values,\n ],\n () => {\n let cancelled = false;\n const formula = config.calculations ?? \"\";\n\n void (async () => {\n const result = await evaluateCalculation(\n formula,\n props.form.values,\n config.decimalCount,\n );\n\n if (cancelled) {\n return;\n }\n\n const next = result == null ? \"\" : String(result);\n const current = props.form.getValue(props.field.handle);\n if (String(current ?? \"\") !== next) {\n setValueRef.value(props.field.handle, next);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n },\n { immediate: true, deep: true },\n );\n\n return () => {\n const display =\n props.value == null || props.value === \"\" ? \"\" : String(props.value);\n\n if (inputType === \"hidden\") {\n return (\n <input\n type=\"hidden\"\n name={props.field.handle}\n value={display}\n readonly\n />\n );\n }\n\n if (inputType === \"plainText\") {\n return (\n <div class={props.classNames.input}>\n <input\n type=\"hidden\"\n name={props.field.handle}\n value={display}\n readonly\n />\n <p class=\"ff-field__calculation-plain\" data-freeform-calculation=\"\">\n {display}\n </p>\n </div>\n );\n }\n\n return (\n <input\n class={props.classNames.input}\n type=\"text\"\n name={props.field.handle}\n id={`freeform-${props.field.handle}`}\n value={display}\n readonly\n aria-readonly=\"true\"\n />\n );\n };\n },\n});\n","import {\n getSignatureConfig,\n isSignatureValueEmpty,\n} from \"@solspace/freeform-core\";\nimport {\n defineComponent,\n onMounted,\n onUnmounted,\n ref,\n shallowRef,\n watch,\n} from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const SignatureFieldRenderer = defineComponent({\n name: \"SignatureFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n value: { required: true },\n classNames: { type: Object, required: true },\n },\n setup(props: VueFieldRendererProps) {\n const canvasRef = shallowRef<HTMLCanvasElement | null>(null);\n const drawing = shallowRef(false);\n const hasInk = ref(!isSignatureValueEmpty(props.value));\n const config = getSignatureConfig(props.field);\n const width = config.width ?? 400;\n const height = config.height ?? 100;\n const enabled = props.form.isFieldEnabled(props.field.handle);\n const penColor = config.penColor || \"#000000\";\n const backgroundColor = config.backgroundColor || \"rgba(0,0,0,0)\";\n const borderColor = config.borderColor || \"#999999\";\n const penSize = config.penDotSize ?? 2.5;\n\n function paintBackground(context: CanvasRenderingContext2D) {\n context.fillStyle = backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n function commit() {\n const canvas = canvasRef.value;\n if (!canvas) {\n return;\n }\n props.form.setValue(props.field.handle, canvas.toDataURL(\"image/png\"));\n }\n\n function clear() {\n const canvas = canvasRef.value;\n const context = canvas?.getContext(\"2d\");\n if (!canvas || !context) {\n return;\n }\n context.clearRect(0, 0, width, height);\n paintBackground(context);\n hasInk.value = false;\n props.form.setValue(props.field.handle, \"\");\n }\n\n function initCanvas() {\n const canvas = canvasRef.value;\n if (!canvas) {\n return;\n }\n\n const ratio =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n canvas.width = Math.floor(width * ratio);\n canvas.height = Math.floor(height * ratio);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n\n context.setTransform(ratio, 0, 0, ratio, 0, 0);\n paintBackground(context);\n context.strokeStyle = penColor;\n context.lineWidth = penSize;\n context.lineCap = \"round\";\n context.lineJoin = \"round\";\n\n if (typeof props.value === \"string\" && props.value.startsWith(\"data:\")) {\n const image = new Image();\n image.onload = () => {\n context.drawImage(image, 0, 0, width, height);\n hasInk.value = !isSignatureValueEmpty(props.value);\n };\n image.src = props.value;\n } else {\n hasInk.value = false;\n }\n }\n\n onMounted(initCanvas);\n watch(() => [width, height], initCanvas);\n\n onUnmounted(() => {\n drawing.value = false;\n });\n\n function point(event: PointerEvent) {\n const canvas = canvasRef.value;\n if (!canvas) {\n return { x: 0, y: 0 };\n }\n const rect = canvas.getBoundingClientRect();\n return {\n x: ((event.clientX - rect.left) / rect.width) * width,\n y: ((event.clientY - rect.top) / rect.height) * height,\n };\n }\n\n function endStroke() {\n if (!drawing.value) {\n return;\n }\n drawing.value = false;\n commit();\n }\n\n return () => (\n <div class={props.classNames.input} data-freeform-signature=\"\">\n <canvas\n ref={canvasRef}\n width={width}\n height={height}\n style={{\n width: \"100%\",\n maxWidth: width,\n height,\n border: `1px solid ${borderColor}`,\n touchAction: \"none\",\n cursor: enabled ? \"crosshair\" : \"not-allowed\",\n display: \"block\",\n backgroundColor,\n }}\n aria-label={props.field.label}\n onPointerdown={(event: PointerEvent) => {\n if (!enabled) {\n return;\n }\n const canvas = canvasRef.value;\n const context = canvas?.getContext(\"2d\");\n if (!context || !canvas) {\n return;\n }\n drawing.value = true;\n canvas.setPointerCapture(event.pointerId);\n context.strokeStyle = penColor;\n context.lineWidth = penSize;\n context.lineCap = \"round\";\n context.lineJoin = \"round\";\n const { x, y } = point(event);\n context.beginPath();\n context.moveTo(x, y);\n }}\n onPointermove={(event: PointerEvent) => {\n if (!drawing.value) {\n return;\n }\n const context = canvasRef.value?.getContext(\"2d\");\n if (!context) {\n return;\n }\n const { x, y } = point(event);\n context.lineTo(x, y);\n context.stroke();\n hasInk.value = true;\n }}\n onPointerup={endStroke}\n onPointercancel={endStroke}\n onPointerleave={endStroke}\n />\n {config.showClearButton !== false ? (\n <button\n type=\"button\"\n disabled={!hasInk.value || !enabled}\n onClick={clear}\n >\n Clear\n </button>\n ) : null}\n </div>\n );\n },\n});\n","// @ts-nocheck\nimport {\n canAddTableRow,\n canRemoveTableRow,\n emptyTableRow,\n getTableConfig,\n normalizeTableRows,\n resolveTableColumnOptions,\n type TableCellValue,\n type TableRows,\n} from \"@solspace/freeform-core\";\nimport { computed, defineComponent, shallowRef, watch } from \"vue\";\nimport type { VueFieldRendererProps } from \"../../types.js\";\n\nexport const TableFieldRenderer = defineComponent({\n name: \"TableFieldRenderer\",\n props: {\n field: { type: Object, required: true },\n form: { type: Object, required: true },\n value: { required: true },\n classNames: { type: Object, required: true },\n },\n setup(props: VueFieldRendererProps) {\n const config = computed(() => getTableConfig(props.field));\n const columns = computed(() => config.value.columns ?? []);\n const enabled = computed(() =>\n props.form.isFieldEnabled(props.field.handle),\n );\n const rows = computed(() =>\n normalizeTableRows(props.value, columns.value, config.value),\n );\n const seededRef = shallowRef(false);\n\n watch(\n () => [props.field.handle, props.value] as const,\n () => {\n if (seededRef.value) {\n return;\n }\n if (!Array.isArray(props.value) || props.value.length === 0) {\n seededRef.value = true;\n props.form.setValue(\n props.field.handle,\n rows.value as unknown as Parameters<typeof props.form.setValue>[1],\n );\n }\n },\n { immediate: true },\n );\n\n const setRows = (next: TableRows) => {\n props.form.setValue(\n props.field.handle,\n next as unknown as Parameters<typeof props.form.setValue>[1],\n );\n };\n\n const updateCell = (\n rowIndex: number,\n columnIndex: number,\n value: TableCellValue,\n ) => {\n const next = rows.value.map((row) => [...row]);\n next[rowIndex][columnIndex] = value;\n setRows(next);\n };\n\n return () => {\n const currentRows = rows.value;\n const currentColumns = columns.value;\n const currentConfig = config.value;\n const isEnabled = enabled.value;\n const showAdd = canAddTableRow(currentRows, currentConfig);\n\n return (\n <div class={props.classNames.input} data-freeform-table=\"\">\n <table class=\"ff-table\">\n <thead>\n <tr>\n {currentColumns.map((column, colIndex) => (\n <th\n key={`${column.label}-${colIndex}`}\n class={column.required ? \"is-required\" : undefined}\n data-column-required={column.required ? \"true\" : undefined}\n >\n {column.label}\n </th>\n ))}\n <th />\n </tr>\n </thead>\n <tbody>\n {currentRows.map((row, rowIndex) => (\n <tr key={`row-${rowIndex}`}>\n {currentColumns.map((column, colIndex) => {\n const cellValue = row[colIndex];\n const optionList = resolveTableColumnOptions(column);\n const cellKey = `${rowIndex}-${colIndex}`;\n\n if (column.type === \"checkbox\") {\n return (\n <td key={cellKey}>\n <input\n type=\"checkbox\"\n checked={Boolean(cellValue)}\n disabled={!isEnabled}\n required={column.required || undefined}\n onChange={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.checked ? \"1\" : \"\",\n );\n }}\n />\n </td>\n );\n }\n\n if (\n column.type === \"select\" ||\n column.type === \"dropdown\"\n ) {\n return (\n <td key={cellKey}>\n <select\n value={String(cellValue ?? \"\")}\n disabled={!isEnabled}\n required={column.required || undefined}\n onChange={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.value,\n );\n }}\n >\n <option value=\"\">\n {column.placeholder || \"Select…\"}\n </option>\n {optionList.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </td>\n );\n }\n\n if (column.type === \"radio\") {\n return (\n <td key={cellKey}>\n <div class=\"ff-table__radios\">\n {optionList.map((option) => {\n const id = `${props.field.handle}-${rowIndex}-${colIndex}-${option.value}`;\n return (\n <label key={option.value} for={id}>\n <input\n id={id}\n type=\"radio\"\n name={`${props.field.handle}[${rowIndex}][${colIndex}]`}\n value={option.value}\n checked={\n String(cellValue ?? \"\") === option.value\n }\n disabled={!isEnabled}\n onChange={() => {\n updateCell(\n rowIndex,\n colIndex,\n option.value,\n );\n }}\n />{\" \"}\n {option.label}\n </label>\n );\n })}\n </div>\n </td>\n );\n }\n\n if (column.type === \"textarea\") {\n return (\n <td key={cellKey}>\n <textarea\n value={String(cellValue ?? \"\")}\n placeholder={column.placeholder}\n disabled={!isEnabled}\n required={column.required || undefined}\n onInput={(event) => {\n updateCell(\n rowIndex,\n colIndex,\n event.target.value,\n );\n }}\n />\n </td>\n );\n }\n\n if (column.type === \"file\") {\n const selected = Array.isArray(cellValue)\n ? (cellValue as File[])\n : [];\n const fileCount = Math.max(\n 1,\n Number(\n (column.metadata as { fileCount?: number } | null)\n ?.fileCount ?? 1,\n ),\n );\n return (\n <td key={cellKey}>\n <input\n type=\"file\"\n multiple={fileCount > 1}\n disabled={!isEnabled}\n onChange={(event) => {\n const files = Array.from(\n event.target.files ?? [],\n );\n updateCell(\n rowIndex,\n colIndex,\n fileCount > 1 ? files : files.slice(0, 1),\n );\n }}\n />\n {selected.length > 0 ? (\n <div class=\"ff-table__file-names\">\n {selected.map((file) => (\n <span key={`${file.name}-${file.size}`}>\n {file.name}\n </span>\n ))}\n </div>\n ) : null}\n </td>\n );\n }\n\n return (\n <td key={cellKey}>\n <input\n type={column.type === \"number\" ? \"number\" : \"text\"}\n value={String(cellValue ?? \"\")}\n placeholder={column.placeholder}\n disabled={!isEnabled}\n required={column.required || undefined}\n onInput={(event) => {\n updateCell(rowIndex, colIndex, event.target.value);\n }}\n />\n </td>\n );\n })}\n <td>\n {canRemoveTableRow(currentRows, rowIndex, currentConfig) ? (\n <button\n type=\"button\"\n disabled={!isEnabled}\n onClick={() => {\n setRows(\n currentRows.filter(\n (_, index) => index !== rowIndex,\n ),\n );\n }}\n >\n {currentConfig.removeButtonLabel || \"Remove\"}\n </button>\n ) : null}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n {showAdd ? (\n <button\n type=\"button\"\n disabled={!isEnabled}\n onClick={() =>\n setRows([...currentRows, emptyTableRow(currentColumns)])\n }\n >\n {currentConfig.addButtonLabel || \"Add\"}\n </button>\n ) : null}\n </div>\n );\n };\n },\n});\n","import { defineComponent, type PropType } from \"vue\";\nimport type {\n FreeformComponentProps,\n FreeformFieldWrapperProps,\n FreeformInstructionsProps,\n FreeformLabelProps,\n FreeformPageProps,\n VueFieldRenderer,\n VueFieldRendererProps,\n} from \"../../types.js\";\nimport { CalculationFieldRenderer } from \"./CalculationField.js\";\nimport {\n CardsFieldRenderer,\n CheckboxesFieldRenderer,\n CheckboxFieldRenderer,\n ConfirmFieldRenderer,\n DatetimeFieldRenderer,\n EmailFieldRenderer,\n FileDndFieldRenderer,\n FileFieldRenderer,\n HiddenFieldRenderer,\n HtmlFieldRenderer,\n ImageFieldRenderer,\n MolliePaymentFieldRenderer,\n MultipleSelectFieldRenderer,\n NumberFieldRenderer,\n OpinionScaleFieldRenderer,\n PasswordFieldRenderer,\n PayPalPaymentFieldRenderer,\n PhoneFieldRenderer,\n RadioFieldRenderer,\n RatingFieldRenderer,\n RegexFieldRenderer,\n SelectFieldRenderer,\n SquarePaymentFieldRenderer,\n StripePaymentFieldRenderer,\n TextareaFieldRenderer,\n TextFieldRenderer,\n UnsupportedFieldRenderer,\n WebsiteFieldRenderer,\n} from \"./fields.js\";\nimport { SignatureFieldRenderer } from \"./SignatureField.js\";\nimport { TableFieldRenderer } from \"./TableField.js\";\n\nexport const DefaultForm = defineComponent({\n name: \"DefaultForm\",\n props: {\n form: {\n type: Object as PropType<FreeformComponentProps[\"form\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n onSubmit: {\n type: Function as PropType<FreeformComponentProps[\"onSubmit\"]>,\n required: true,\n },\n },\n setup(props, { slots }) {\n return () => (\n <form class={props.class} onSubmit={props.onSubmit} novalidate>\n {slots.default?.()}\n </form>\n );\n },\n});\n\nexport const DefaultPage = defineComponent({\n name: \"DefaultPage\",\n props: {\n form: {\n type: Object as PropType<FreeformPageProps[\"form\"]>,\n required: true,\n },\n pageIndex: { type: Number, required: true },\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nexport const DefaultRow = defineComponent({\n name: \"DefaultRow\",\n props: {\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nexport const DefaultFieldWrapper = defineComponent({\n name: \"DefaultFieldWrapper\",\n props: {\n field: {\n type: Object as PropType<FreeformFieldWrapperProps[\"field\"]>,\n required: true,\n },\n form: {\n type: Object as PropType<FreeformFieldWrapperProps[\"form\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => {\n const isVisuallyHidden =\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\";\n\n if (!props.form.isFieldVisible(props.field.handle) && !isVisuallyHidden) {\n return null;\n }\n\n return (\n <div\n class={props.class}\n data-freeform-field={props.field.handle}\n data-field-container={props.field.handle}\n data-field-type={props.field.type}\n hidden={\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden\n }\n >\n {slots.default?.()}\n </div>\n );\n };\n },\n});\n\nexport const DefaultLabel = defineComponent({\n name: \"DefaultLabel\",\n props: {\n field: {\n type: Object as PropType<FreeformLabelProps[\"field\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n requiredIndicator: { type: String, default: \"*\" },\n },\n setup(props) {\n return () => {\n if (!props.field.label) {\n return null;\n }\n\n return (\n <label class={props.class} for={`freeform-${props.field.handle}`}>\n {props.field.label}\n {props.field.required ? (\n <span aria-hidden=\"true\"> {props.requiredIndicator}</span>\n ) : null}\n </label>\n );\n };\n },\n});\n\nexport const DefaultInstructions = defineComponent({\n name: \"DefaultInstructions\",\n props: {\n field: {\n type: Object as PropType<FreeformInstructionsProps[\"field\"]>,\n required: true,\n },\n class: { type: String, default: undefined },\n },\n setup(props) {\n return () => {\n if (!props.field.instructions) {\n return null;\n }\n\n return <div class={props.class}>{props.field.instructions}</div>;\n };\n },\n});\n\nexport const DefaultErrors = defineComponent({\n name: \"DefaultErrors\",\n props: {\n errors: { type: Array as PropType<string[]>, required: true },\n class: { type: String, default: undefined },\n errorClass: { type: String, default: undefined },\n },\n setup(props) {\n return () => {\n if (!props.errors.length) {\n return null;\n }\n\n return (\n <div class={props.class} role=\"alert\">\n {props.errors.map((error) => (\n <div key={error} class={props.errorClass}>\n {error}\n </div>\n ))}\n </div>\n );\n };\n },\n});\n\nexport const DefaultButtonRow = defineComponent({\n name: \"DefaultButtonRow\",\n props: {\n class: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n return () => <div class={props.class}>{slots.default?.()}</div>;\n },\n});\n\nfunction buttonComponent(\n name: string,\n defaultType: \"button\" | \"submit\" = \"submit\",\n) {\n return defineComponent({\n name,\n props: {\n label: { type: String, required: true },\n class: { type: String, default: undefined },\n disabled: { type: Boolean, default: false },\n type: {\n type: String as PropType<\"button\" | \"submit\">,\n default: defaultType,\n },\n onClick: { type: Function as PropType<() => void>, default: undefined },\n },\n setup(props) {\n return () => (\n <button\n type={props.type}\n class={props.class}\n disabled={props.disabled}\n onClick={props.onClick}\n >\n {props.label}\n </button>\n );\n },\n });\n}\n\nexport const DefaultSubmitButton = buttonComponent(\"DefaultSubmitButton\");\nexport const DefaultNextButton = buttonComponent(\"DefaultNextButton\", \"button\");\nexport const DefaultBackButton = buttonComponent(\"DefaultBackButton\", \"button\");\nexport const DefaultSaveButton = buttonComponent(\"DefaultSaveButton\", \"button\");\n\nexport const DefaultSuccessMessage = defineComponent({\n name: \"DefaultSuccessMessage\",\n props: {\n message: { type: String, required: true },\n class: { type: String, default: undefined },\n },\n setup(props) {\n return () => (\n <div class={props.class} role=\"status\">\n {props.message}\n </div>\n );\n },\n});\n\nexport const builtinRenderers = {\n frontend: {\n text: TextFieldRenderer,\n textarea: TextareaFieldRenderer,\n email: EmailFieldRenderer,\n number: NumberFieldRenderer,\n phone: PhoneFieldRenderer,\n website: WebsiteFieldRenderer,\n regex: RegexFieldRenderer,\n password: PasswordFieldRenderer,\n confirm: ConfirmFieldRenderer,\n hidden: HiddenFieldRenderer,\n dropdown: SelectFieldRenderer,\n select: SelectFieldRenderer,\n \"multiple-select\": MultipleSelectFieldRenderer,\n checkbox: CheckboxFieldRenderer,\n checkboxes: CheckboxesFieldRenderer,\n radios: RadioFieldRenderer,\n radio: RadioFieldRenderer,\n \"opinion-scale\": OpinionScaleFieldRenderer,\n rating: RatingFieldRenderer,\n cards: CardsFieldRenderer,\n datetime: DatetimeFieldRenderer,\n file: FileFieldRenderer,\n \"file-upload\": FileFieldRenderer,\n \"file-dnd\": FileDndFieldRenderer,\n html: HtmlFieldRenderer,\n \"rich-text\": HtmlFieldRenderer,\n image: ImageFieldRenderer,\n table: TableFieldRenderer,\n signature: SignatureFieldRenderer,\n calculation: CalculationFieldRenderer,\n \"payment.stripe\": StripePaymentFieldRenderer,\n \"payment.square\": SquarePaymentFieldRenderer,\n \"payment.paypal\": PayPalPaymentFieldRenderer,\n \"payment.mollie\": MolliePaymentFieldRenderer,\n } as Record<string, VueFieldRenderer>,\n types: {\n text: TextFieldRenderer,\n textarea: TextareaFieldRenderer,\n email: EmailFieldRenderer,\n number: NumberFieldRenderer,\n phone: PhoneFieldRenderer,\n website: WebsiteFieldRenderer,\n regex: RegexFieldRenderer,\n password: PasswordFieldRenderer,\n confirm: ConfirmFieldRenderer,\n hidden: HiddenFieldRenderer,\n select: SelectFieldRenderer,\n dropdown: SelectFieldRenderer,\n \"multiple-select\": MultipleSelectFieldRenderer,\n checkbox: CheckboxFieldRenderer,\n checkboxes: CheckboxesFieldRenderer,\n radio: RadioFieldRenderer,\n radios: RadioFieldRenderer,\n radiobox: RadioFieldRenderer,\n \"opinion-scale\": OpinionScaleFieldRenderer,\n rating: RatingFieldRenderer,\n cards: CardsFieldRenderer,\n datetime: DatetimeFieldRenderer,\n file: FileFieldRenderer,\n \"file-upload\": FileFieldRenderer,\n \"file-dnd\": FileDndFieldRenderer,\n html: HtmlFieldRenderer,\n \"rich-text\": HtmlFieldRenderer,\n image: ImageFieldRenderer,\n table: TableFieldRenderer,\n signature: SignatureFieldRenderer,\n calculation: CalculationFieldRenderer,\n stripe: StripePaymentFieldRenderer,\n square: SquarePaymentFieldRenderer,\n paypal: PayPalPaymentFieldRenderer,\n mollie: MolliePaymentFieldRenderer,\n _unsupported: UnsupportedFieldRenderer,\n } as Record<string, VueFieldRenderer>,\n};\n\nexport const builtinComponents = {\n Form: DefaultForm,\n Page: DefaultPage,\n Row: DefaultRow,\n FieldWrapper: DefaultFieldWrapper,\n Label: DefaultLabel,\n Instructions: DefaultInstructions,\n Errors: DefaultErrors,\n ButtonRow: DefaultButtonRow,\n SubmitButton: DefaultSubmitButton,\n NextButton: DefaultNextButton,\n BackButton: DefaultBackButton,\n SaveButton: DefaultSaveButton,\n SuccessMessage: DefaultSuccessMessage,\n UnsupportedField: UnsupportedFieldRenderer,\n};\n\nexport type { VueFieldRendererProps };\n","import type { ClassNameStrategy } from \"../types.js\";\n\nexport function joinClassNames(\n ...parts: Array<string | undefined | false | null>\n): string | undefined {\n const value = parts\n .filter(\n (part): part is string => typeof part === \"string\" && part.trim() !== \"\",\n )\n .join(\" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\n return value || undefined;\n}\n\nexport function mergeClassNames(\n strategy: ClassNameStrategy,\n base: string | undefined,\n extra: string | undefined,\n): string | undefined {\n if (!extra) {\n return base;\n }\n\n if (!base || strategy === \"replace\") {\n return extra;\n }\n\n return `${base} ${extra}`.trim();\n}\n","/**\n * Convert Freeform handles / type tokens to BEM modifier segments.\n * Example: firstName → first-name, multiple-select → multiple-select\n */\nexport function toBemModifier(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/[_\\s]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .toLowerCase();\n}\n","<script setup lang=\"ts\">\nimport type { ManifestCaptchaSecurity } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n form: FreeformRuntime;\n captcha: ManifestCaptchaSecurity;\n}>();\n\nconst hostRef = ref<HTMLElement | null>(null);\nlet cleanup: (() => void) | undefined;\n\nfunction captchaIdentity(captcha: ManifestCaptchaSecurity): string {\n return [\n captcha.name,\n captcha.provider ?? \"\",\n captcha.siteKey ?? \"\",\n captcha.startMode ?? \"\",\n captcha.theme ?? \"\",\n captcha.locale ?? \"\",\n captcha.apiEndpoint ?? \"\",\n captcha.version ?? \"\",\n captcha.size ?? \"\",\n ].join(\"|\");\n}\n\nfunction mount() {\n cleanup?.();\n cleanup = undefined;\n if (hostRef.value) {\n cleanup = props.form.mountCaptcha(props.captcha, hostRef.value);\n }\n}\n\nonMounted(mount);\n\nwatch(() => captchaIdentity(props.captcha), mount);\n\nonUnmounted(() => {\n cleanup?.();\n});\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n class=\"ff-captcha\"\n :data-freeform-captcha=\"captcha.name\"\n :data-freeform-captcha-provider=\"captcha.provider ?? captcha.name\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestCaptchaSecurity } from \"@solspace/freeform-core\";\nimport { onMounted, onUnmounted, ref, watch } from \"vue\";\nimport type { FreeformRuntime } from \"../types.js\";\n\nconst props = defineProps<{\n form: FreeformRuntime;\n captcha: ManifestCaptchaSecurity;\n}>();\n\nconst hostRef = ref<HTMLElement | null>(null);\nlet cleanup: (() => void) | undefined;\n\nfunction captchaIdentity(captcha: ManifestCaptchaSecurity): string {\n return [\n captcha.name,\n captcha.provider ?? \"\",\n captcha.siteKey ?? \"\",\n captcha.startMode ?? \"\",\n captcha.theme ?? \"\",\n captcha.locale ?? \"\",\n captcha.apiEndpoint ?? \"\",\n captcha.version ?? \"\",\n captcha.size ?? \"\",\n ].join(\"|\");\n}\n\nfunction mount() {\n cleanup?.();\n cleanup = undefined;\n if (hostRef.value) {\n cleanup = props.form.mountCaptcha(props.captcha, hostRef.value);\n }\n}\n\nonMounted(mount);\n\nwatch(() => captchaIdentity(props.captcha), mount);\n\nonUnmounted(() => {\n cleanup?.();\n});\n\nfunction setHostRef(element: unknown) {\n hostRef.value = (element as HTMLElement | null) ?? null;\n}\n</script>\n\n<template>\n <div\n :ref=\"setHostRef\"\n class=\"ff-captcha\"\n :data-freeform-captcha=\"captcha.name\"\n :data-freeform-captcha-provider=\"captcha.provider ?? captcha.name\"\n />\n</template>\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport type {\n FreeformVueTheme,\n RendererOverrides,\n VueFieldRenderer,\n} from \"../types.js\";\nimport { builtinRenderers } from \"./builtin/index.js\";\n\nexport function resolveFieldRenderer(\n field: ManifestFieldDefinition,\n userRenderers?: RendererOverrides,\n theme?: FreeformVueTheme,\n): VueFieldRenderer {\n const frontendKey = field.frontend?.renderer ?? \"\";\n const candidates: Array<VueFieldRenderer | undefined> = [\n userRenderers?.handles?.[field.handle],\n frontendKey ? userRenderers?.frontend?.[frontendKey] : undefined,\n userRenderers?.types?.[field.type],\n theme?.renderers?.handles?.[field.handle],\n frontendKey ? theme?.renderers?.frontend?.[frontendKey] : undefined,\n theme?.renderers?.types?.[field.type],\n frontendKey ? builtinRenderers.frontend[frontendKey] : undefined,\n frontendKey ? builtinRenderers.types[frontendKey] : undefined,\n builtinRenderers.types[field.type],\n ];\n\n return (\n candidates.find((renderer): renderer is VueFieldRenderer => !!renderer) ??\n builtinRenderers.types._unsupported\n );\n}\n","import type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport type { FreeformThemeClassNames, FreeformVueTheme } from \"../types.js\";\nimport { joinClassNames } from \"./mergeClassNames.js\";\n\nconst CHOICE_TYPES = new Set([\n \"checkbox\",\n \"checkboxes\",\n \"radio\",\n \"radios\",\n \"radiobox\",\n \"rating\",\n \"opinion-scale\",\n \"cards\",\n]);\n\nfunction overlay(\n base: FreeformThemeClassNames,\n extra: Partial<FreeformThemeClassNames> | undefined,\n): FreeformThemeClassNames {\n if (!extra) {\n return base;\n }\n\n return { ...base, ...extra };\n}\n\n/**\n * Global classNames, then overlays for field type / frontend renderer / extension.\n * Error styles append `inputError` onto the control (`optionInput` for choice fields).\n */\nexport function resolveThemeClassNames(\n theme: FreeformVueTheme,\n field: ManifestFieldDefinition,\n hasErrors = false,\n): FreeformThemeClassNames {\n const byType = theme.classNamesByType;\n let classNames = overlay({}, theme.classNames);\n\n classNames = overlay(classNames, byType?.[field.type]);\n\n const renderer = field.frontend?.renderer;\n if (renderer) {\n classNames = overlay(classNames, byType?.[renderer]);\n }\n\n const extension = field.frontend?.extension;\n if (extension) {\n classNames = overlay(classNames, byType?.[extension]);\n }\n\n if (hasErrors && classNames.inputError) {\n if (CHOICE_TYPES.has(field.type)) {\n classNames = {\n ...classNames,\n optionInput: joinClassNames(\n classNames.optionInput,\n classNames.inputError,\n ),\n };\n } else {\n classNames = {\n ...classNames,\n input: joinClassNames(classNames.input, classNames.inputError),\n };\n }\n }\n\n return classNames;\n}\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { resolveFieldRenderer } from \"../renderers/resolve.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { resolveThemeClassNames } from \"../theme/resolveThemeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type {\n FreeformRuntime,\n FreeformVueTheme,\n RendererOverrides,\n} from \"../types.js\";\n\ndefineOptions({ name: \"FieldRenderer\" });\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml?: boolean;\n}>();\n\nconst strategy = computed(() => props.theme.classNameStrategy ?? \"merge\");\nconst errors = computed(() => props.form.fieldErrors[props.field.handle] ?? []);\nconst classNames = computed(() =>\n resolveThemeClassNames(props.theme, props.field, errors.value.length > 0),\n);\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.theme.renderers?.components,\n}));\nconst Renderer = computed(() =>\n resolveFieldRenderer(props.field, props.renderers, props.theme),\n);\nconst value = computed(() => props.form.values[props.field.handle]);\n\nconst isCheckbox = computed(() => props.field.type === \"checkbox\");\nconst isPresentational = computed(\n () =>\n props.field.type === \"html\" ||\n props.field.type === \"rich-text\" ||\n props.field.type === \"image\",\n);\nconst isVisuallyHidden = computed(\n () =>\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\",\n);\n\nconst showLabel = computed(\n () =>\n !isCheckbox.value &&\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderLabels !== false,\n);\n\nconst showInstructions = computed(\n () =>\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderInstructions !== false,\n);\n\nconst showErrors = computed(() => props.theme.defaults?.renderErrors !== false);\n\nconst shouldRender = computed(() => {\n if (!isPresentational.value) {\n return true;\n }\n\n if (props.field.type === \"image\") {\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n };\n const image = (\n props.field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n const html = props.field.content?.rendered?.html?.trim();\n return Boolean((props.allowRawHtml && html) || props.field.instructions);\n});\n\nconst fieldClassName = computed(() =>\n joinClassNames(\n classNames.value.field,\n props.field.required ? classNames.value.fieldRequired : undefined,\n errors.value.length ? classNames.value.fieldHasErrors : undefined,\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden.value\n ? classNames.value.fieldHidden\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.type)}`\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.handle)}`\n : undefined,\n ),\n);\n\nconst rendererProps = computed(() => ({\n field: props.field,\n form: props.form,\n value: value.value,\n errors: errors.value,\n input: props.form.getFieldProps(props.field.handle),\n classNames: classNames.value,\n allowRawHtml: props.allowRawHtml,\n renderLabel: () => null,\n renderInstructions: () => null,\n renderErrors: () => null,\n}));\n</script>\n\n<template>\n <template v-if=\"shouldRender\">\n <component\n :is=\"components.FieldWrapper\"\n v-if=\"isVisuallyHidden\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else-if=\"field.type === 'group'\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <div :class=\"classNames.input\" :data-freeform-group=\"field.handle\">\n <component\n :is=\"components.Row\"\n v-for=\"row in field.layout?.rows ?? []\"\n :key=\"row.uid\"\n :class=\"\n joinClassNames(\n classNames.row,\n strategy === 'merge'\n ? `ff-row--${row.fields.length}-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"theme\"\n :renderers=\"renderers\"\n :allow-raw-html=\"allowRawHtml\"\n />\n </component>\n </div>\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { ManifestFieldDefinition } from \"@solspace/freeform-core\";\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { resolveFieldRenderer } from \"../renderers/resolve.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { resolveThemeClassNames } from \"../theme/resolveThemeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type {\n FreeformRuntime,\n FreeformVueTheme,\n RendererOverrides,\n} from \"../types.js\";\n\ndefineOptions({ name: \"FieldRenderer\" });\n\nconst props = defineProps<{\n field: ManifestFieldDefinition;\n form: FreeformRuntime;\n theme: FreeformVueTheme;\n renderers: RendererOverrides;\n allowRawHtml?: boolean;\n}>();\n\nconst strategy = computed(() => props.theme.classNameStrategy ?? \"merge\");\nconst errors = computed(() => props.form.fieldErrors[props.field.handle] ?? []);\nconst classNames = computed(() =>\n resolveThemeClassNames(props.theme, props.field, errors.value.length > 0),\n);\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.theme.renderers?.components,\n}));\nconst Renderer = computed(() =>\n resolveFieldRenderer(props.field, props.renderers, props.theme),\n);\nconst value = computed(() => props.form.values[props.field.handle]);\n\nconst isCheckbox = computed(() => props.field.type === \"checkbox\");\nconst isPresentational = computed(\n () =>\n props.field.type === \"html\" ||\n props.field.type === \"rich-text\" ||\n props.field.type === \"image\",\n);\nconst isVisuallyHidden = computed(\n () =>\n props.field.type === \"hidden\" ||\n props.field.type === \"mollie\" ||\n props.field.frontend?.renderer === \"payment.mollie\" ||\n props.field.frontend?.extension === \"payment.mollie\",\n);\n\nconst showLabel = computed(\n () =>\n !isCheckbox.value &&\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderLabels !== false,\n);\n\nconst showInstructions = computed(\n () =>\n !isPresentational.value &&\n !isVisuallyHidden.value &&\n props.theme.defaults?.renderInstructions !== false,\n);\n\nconst showErrors = computed(() => props.theme.defaults?.renderErrors !== false);\n\nconst shouldRender = computed(() => {\n if (!isPresentational.value) {\n return true;\n }\n\n if (props.field.type === \"image\") {\n const config = (props.field.frontend?.config ?? {}) as {\n src?: string | null;\n };\n const image = (\n props.field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n const html = props.field.content?.rendered?.html?.trim();\n return Boolean((props.allowRawHtml && html) || props.field.instructions);\n});\n\nconst fieldClassName = computed(() =>\n joinClassNames(\n classNames.value.field,\n props.field.required ? classNames.value.fieldRequired : undefined,\n errors.value.length ? classNames.value.fieldHasErrors : undefined,\n !props.form.isFieldVisible(props.field.handle) || isVisuallyHidden.value\n ? classNames.value.fieldHidden\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.type)}`\n : undefined,\n strategy.value === \"merge\"\n ? `ff-field--${toBemModifier(props.field.handle)}`\n : undefined,\n ),\n);\n\nconst rendererProps = computed(() => ({\n field: props.field,\n form: props.form,\n value: value.value,\n errors: errors.value,\n input: props.form.getFieldProps(props.field.handle),\n classNames: classNames.value,\n allowRawHtml: props.allowRawHtml,\n renderLabel: () => null,\n renderInstructions: () => null,\n renderErrors: () => null,\n}));\n</script>\n\n<template>\n <template v-if=\"shouldRender\">\n <component\n :is=\"components.FieldWrapper\"\n v-if=\"isVisuallyHidden\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else-if=\"field.type === 'group'\"\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <div :class=\"classNames.input\" :data-freeform-group=\"field.handle\">\n <component\n :is=\"components.Row\"\n v-for=\"row in field.layout?.rows ?? []\"\n :key=\"row.uid\"\n :class=\"\n joinClassNames(\n classNames.row,\n strategy === 'merge'\n ? `ff-row--${row.fields.length}-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"theme\"\n :renderers=\"renderers\"\n :allow-raw-html=\"allowRawHtml\"\n />\n </component>\n </div>\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n\n <component\n :is=\"components.FieldWrapper\"\n v-else\n :field=\"field\"\n :form=\"form\"\n :class=\"fieldClassName\"\n >\n <component\n :is=\"components.Label\"\n v-if=\"showLabel\"\n :field=\"field\"\n :class=\"classNames.label\"\n :required-indicator=\"theme.defaults?.requiredIndicator\"\n />\n <component\n :is=\"components.Instructions\"\n v-if=\"showInstructions\"\n :field=\"field\"\n :class=\"classNames.instructions\"\n />\n <component :is=\"Renderer\" v-bind=\"rendererProps\" />\n <component\n :is=\"components.Errors\"\n v-if=\"showErrors\"\n :errors=\"errors\"\n :class=\"classNames.errors\"\n :error-class=\"classNames.error\"\n />\n </component>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type { UseFreeformResult } from \"../types.js\";\nimport CaptchaHost from \"./CaptchaHost.vue\";\nimport FieldRenderer from \"./FieldRenderer.vue\";\n\nconst props = defineProps<{\n form: UseFreeformResult & {\n manifest: NonNullable<UseFreeformResult[\"manifest\"]>;\n };\n class?: string;\n}>();\n\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.form.theme.renderers?.components,\n}));\n\nconst strategy = computed(() => props.form.theme.classNameStrategy ?? \"merge\");\nconst colorScheme = computed(\n () => props.form.theme.defaults?.colorScheme ?? \"system\",\n);\n\nconst formClassName = computed(() =>\n joinClassNames(\n props.form.theme.classNames?.form,\n strategy.value === \"merge\"\n ? `ff-form--${toBemModifier(props.form.manifest.form.handle)}`\n : undefined,\n strategy.value === \"merge\" &&\n (colorScheme.value === \"light\" || colorScheme.value === \"dark\")\n ? `ff-form--${colorScheme.value}`\n : undefined,\n props.class,\n ),\n);\n\nconst currentPage = computed(\n () =>\n props.form.manifest.layout.pages[props.form.currentPageIndex] ??\n props.form.manifest.layout.pages[0] ?? { rows: [], buttons: {} },\n);\n\nconst isLastPage = computed(\n () =>\n props.form.manifest.layout.pages.length === 0 ||\n props.form.currentPageIndex >= props.form.manifest.layout.pages.length - 1,\n);\n\nconst isFirstPage = computed(() => props.form.currentPageIndex === 0);\n\nfunction hasPresentationalContent(\n field: (typeof props.form.manifest.fields)[string],\n): boolean {\n if (field.type === \"image\") {\n const config = (field.frontend?.config ?? {}) as { src?: string | null };\n const image = (\n field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n if (field.type === \"html\" || field.type === \"rich-text\") {\n const html = field.content?.rendered?.html?.trim();\n return Boolean((props.form.allowRawHtml && html) || field.instructions);\n }\n\n return true;\n}\n\nfunction onSubmit(event: Event) {\n void props.form.handleSubmit(event);\n}\n</script>\n\n<template>\n <component\n :is=\"components.SuccessMessage\"\n v-if=\"form.isComplete && form.successMessage\"\n :message=\"form.successMessage\"\n :class=\"form.theme.classNames?.success\"\n />\n\n <component\n :is=\"components.Form\"\n v-else\n :form=\"form\"\n :class=\"formClassName\"\n :on-submit=\"onSubmit\"\n >\n <component\n :is=\"components.Errors\"\n v-if=\"form.formErrors.length > 0\"\n :errors=\"form.formErrors\"\n :class=\"form.theme.classNames?.errors\"\n :error-class=\"form.theme.classNames?.error\"\n />\n\n <component\n :is=\"components.Page\"\n :form=\"form\"\n :page-index=\"form.currentPageIndex\"\n :class=\"\n joinClassNames(\n form.theme.classNames?.page,\n strategy === 'merge' ? `ff-page--${form.currentPageIndex}` : undefined,\n )\n \"\n >\n <template v-for=\"row in currentPage.rows\" :key=\"row.uid\">\n <component\n :is=\"components.Row\"\n v-if=\"\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length > 0\n \"\n :class=\"\n joinClassNames(\n form.theme.classNames?.row,\n strategy === 'merge'\n ? `ff-row--${\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length\n }-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n })\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"form.theme\"\n :renderers=\"form.renderers\"\n :allow-raw-html=\"form.allowRawHtml\"\n />\n </component>\n </template>\n </component>\n\n <CaptchaHost\n v-for=\"captcha in form.manifest.security.captchas ?? []\"\n :key=\"captcha.name\"\n :form=\"form\"\n :captcha=\"captcha\"\n />\n\n <component :is=\"components.ButtonRow\" :class=\"form.theme.classNames?.buttons\">\n <component\n :is=\"components.BackButton\"\n v-if=\"!isFirstPage && currentPage.buttons?.back\"\n :label=\"currentPage.buttons.back.label\"\n :class=\"form.theme.classNames?.backButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goBack()\"\n />\n\n <component\n :is=\"components.NextButton\"\n v-if=\"\n form.manifest.settings.multiPage &&\n !isLastPage &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.nextButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goNext()\"\n />\n\n <component\n :is=\"components.SubmitButton\"\n v-if=\"\n (!form.manifest.settings.multiPage || isLastPage) &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.submitButton\"\n :disabled=\"form.isSubmitting\"\n />\n\n <component\n :is=\"components.SaveButton\"\n v-if=\"currentPage.buttons?.save\"\n :label=\"currentPage.buttons.save.label\"\n :class=\"form.theme.classNames?.saveButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.saveDraft()\"\n />\n </component>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { builtinComponents } from \"../renderers/builtin/index.js\";\nimport { joinClassNames } from \"../theme/mergeClassNames.js\";\nimport { toBemModifier } from \"../theme/toBemModifier.js\";\nimport type { UseFreeformResult } from \"../types.js\";\nimport CaptchaHost from \"./CaptchaHost.vue\";\nimport FieldRenderer from \"./FieldRenderer.vue\";\n\nconst props = defineProps<{\n form: UseFreeformResult & {\n manifest: NonNullable<UseFreeformResult[\"manifest\"]>;\n };\n class?: string;\n}>();\n\nconst components = computed(() => ({\n ...builtinComponents,\n ...props.form.theme.renderers?.components,\n}));\n\nconst strategy = computed(() => props.form.theme.classNameStrategy ?? \"merge\");\nconst colorScheme = computed(\n () => props.form.theme.defaults?.colorScheme ?? \"system\",\n);\n\nconst formClassName = computed(() =>\n joinClassNames(\n props.form.theme.classNames?.form,\n strategy.value === \"merge\"\n ? `ff-form--${toBemModifier(props.form.manifest.form.handle)}`\n : undefined,\n strategy.value === \"merge\" &&\n (colorScheme.value === \"light\" || colorScheme.value === \"dark\")\n ? `ff-form--${colorScheme.value}`\n : undefined,\n props.class,\n ),\n);\n\nconst currentPage = computed(\n () =>\n props.form.manifest.layout.pages[props.form.currentPageIndex] ??\n props.form.manifest.layout.pages[0] ?? { rows: [], buttons: {} },\n);\n\nconst isLastPage = computed(\n () =>\n props.form.manifest.layout.pages.length === 0 ||\n props.form.currentPageIndex >= props.form.manifest.layout.pages.length - 1,\n);\n\nconst isFirstPage = computed(() => props.form.currentPageIndex === 0);\n\nfunction hasPresentationalContent(\n field: (typeof props.form.manifest.fields)[string],\n): boolean {\n if (field.type === \"image\") {\n const config = (field.frontend?.config ?? {}) as { src?: string | null };\n const image = (\n field.content as { image?: { src?: string | null } } | undefined\n )?.image;\n return Boolean(image?.src || config.src);\n }\n\n if (field.type === \"html\" || field.type === \"rich-text\") {\n const html = field.content?.rendered?.html?.trim();\n return Boolean((props.form.allowRawHtml && html) || field.instructions);\n }\n\n return true;\n}\n\nfunction onSubmit(event: Event) {\n void props.form.handleSubmit(event);\n}\n</script>\n\n<template>\n <component\n :is=\"components.SuccessMessage\"\n v-if=\"form.isComplete && form.successMessage\"\n :message=\"form.successMessage\"\n :class=\"form.theme.classNames?.success\"\n />\n\n <component\n :is=\"components.Form\"\n v-else\n :form=\"form\"\n :class=\"formClassName\"\n :on-submit=\"onSubmit\"\n >\n <component\n :is=\"components.Errors\"\n v-if=\"form.formErrors.length > 0\"\n :errors=\"form.formErrors\"\n :class=\"form.theme.classNames?.errors\"\n :error-class=\"form.theme.classNames?.error\"\n />\n\n <component\n :is=\"components.Page\"\n :form=\"form\"\n :page-index=\"form.currentPageIndex\"\n :class=\"\n joinClassNames(\n form.theme.classNames?.page,\n strategy === 'merge' ? `ff-page--${form.currentPageIndex}` : undefined,\n )\n \"\n >\n <template v-for=\"row in currentPage.rows\" :key=\"row.uid\">\n <component\n :is=\"components.Row\"\n v-if=\"\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length > 0\n \"\n :class=\"\n joinClassNames(\n form.theme.classNames?.row,\n strategy === 'merge'\n ? `ff-row--${\n row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n }).length\n }-fields`\n : undefined,\n )\n \"\n >\n <FieldRenderer\n v-for=\"handle in row.fields.filter((handle) => {\n const field = form.manifest.fields[handle];\n return field ? hasPresentationalContent(field) : false;\n })\"\n :key=\"handle\"\n :field=\"form.manifest.fields[handle]!\"\n :form=\"form\"\n :theme=\"form.theme\"\n :renderers=\"form.renderers\"\n :allow-raw-html=\"form.allowRawHtml\"\n />\n </component>\n </template>\n </component>\n\n <CaptchaHost\n v-for=\"captcha in form.manifest.security.captchas ?? []\"\n :key=\"captcha.name\"\n :form=\"form\"\n :captcha=\"captcha\"\n />\n\n <component :is=\"components.ButtonRow\" :class=\"form.theme.classNames?.buttons\">\n <component\n :is=\"components.BackButton\"\n v-if=\"!isFirstPage && currentPage.buttons?.back\"\n :label=\"currentPage.buttons.back.label\"\n :class=\"form.theme.classNames?.backButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goBack()\"\n />\n\n <component\n :is=\"components.NextButton\"\n v-if=\"\n form.manifest.settings.multiPage &&\n !isLastPage &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.nextButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.goNext()\"\n />\n\n <component\n :is=\"components.SubmitButton\"\n v-if=\"\n (!form.manifest.settings.multiPage || isLastPage) &&\n currentPage.buttons?.submit\n \"\n :label=\"currentPage.buttons.submit.label\"\n :class=\"form.theme.classNames?.submitButton\"\n :disabled=\"form.isSubmitting\"\n />\n\n <component\n :is=\"components.SaveButton\"\n v-if=\"currentPage.buttons?.save\"\n :label=\"currentPage.buttons.save.label\"\n :class=\"form.theme.classNames?.saveButton\"\n :disabled=\"form.isSubmitting\"\n :on-click=\"() => void form.saveDraft()\"\n />\n </component>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useFreeform } from \"../composables/useFreeform.js\";\nimport type { UseFreeformOptions } from \"../types.js\";\nimport FormLoader from \"./FormLoader.vue\";\nimport FreeformView from \"./FreeformView.vue\";\n\nconst props = defineProps<\n UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n }\n>();\n\nconst form = useFreeform(() => props);\n\ndefineSlots<{\n default?: (props: { form: typeof form }) => unknown;\n error?: (props: { error: Error }) => unknown;\n loading?: () => unknown;\n}>();\n\nconst loadedForm = computed(() => {\n if (!form.manifest) {\n return null;\n }\n return form as typeof form & {\n manifest: NonNullable<typeof form.manifest>;\n };\n});\n</script>\n\n<template>\n <slot v-if=\"$slots.default\" :form=\"form\" />\n\n <slot v-else-if=\"form.loading\" name=\"loading\">\n <FormLoader :message=\"loadingMessage ?? 'Loading form…'\" />\n </slot>\n\n <slot v-else-if=\"form.error\" name=\"error\" :error=\"form.error\">\n <div role=\"alert\">{{ form.error.message }}</div>\n </slot>\n\n <FreeformView\n v-else-if=\"loadedForm\"\n :form=\"loadedForm\"\n :class=\"props.class\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useFreeform } from \"../composables/useFreeform.js\";\nimport type { UseFreeformOptions } from \"../types.js\";\nimport FormLoader from \"./FormLoader.vue\";\nimport FreeformView from \"./FreeformView.vue\";\n\nconst props = defineProps<\n UseFreeformOptions & {\n class?: string;\n loadingMessage?: string;\n }\n>();\n\nconst form = useFreeform(() => props);\n\ndefineSlots<{\n default?: (props: { form: typeof form }) => unknown;\n error?: (props: { error: Error }) => unknown;\n loading?: () => unknown;\n}>();\n\nconst loadedForm = computed(() => {\n if (!form.manifest) {\n return null;\n }\n return form as typeof form & {\n manifest: NonNullable<typeof form.manifest>;\n };\n});\n</script>\n\n<template>\n <slot v-if=\"$slots.default\" :form=\"form\" />\n\n <slot v-else-if=\"form.loading\" name=\"loading\">\n <FormLoader :message=\"loadingMessage ?? 'Loading form…'\" />\n </slot>\n\n <slot v-else-if=\"form.error\" name=\"error\" :error=\"form.error\">\n <div role=\"alert\">{{ form.error.message }}</div>\n </slot>\n\n <FreeformView\n v-else-if=\"loadedForm\"\n :form=\"loadedForm\"\n :class=\"props.class\"\n />\n</template>\n"],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Kept in sync with package.json by `pnpm frontend:bump`. */
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.
|
|
2
|
+
export declare const PACKAGE_VERSION = "1.0.0";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solspace/freeform-vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Vue components and composables for Solspace Freeform headless forms",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"LICENSE"
|
|
20
20
|
],
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"@solspace/freeform-core": "^
|
|
22
|
+
"@solspace/freeform-core": "^1.0.0",
|
|
23
23
|
"vue": "^3.5.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"vitest": "4.1.9",
|
|
34
34
|
"vue": "^3.5.22",
|
|
35
35
|
"vue-tsc": "^3.0.7",
|
|
36
|
-
"@solspace/freeform-core": "0.
|
|
36
|
+
"@solspace/freeform-core": "1.0.0"
|
|
37
37
|
},
|
|
38
38
|
"keywords": [
|
|
39
39
|
"freeform",
|