Vue and Nuxt have full support for web components so we can use the <file-pond> custom element as if it was a Vue component.

We can import the filepond/types/vue module to type the custom element.

<script setup lang="ts">
    // FilePond imports
    import { defineFilePond } from 'filepond';
    import { locale } from 'filepond/locales/en-gb.js';

    // Optionally import Vue <file-pond> component types
    import 'filepond/types/vue';

    // Defines <file-pond> element
    defineFilePond({
        locale,
    });

    function handleChange(e: Event) {
        console.log('change', e);
    }

    function handleSubmit(e: Event) {
        e.preventDefault();
        console.log('submit', e);
    }
</script>

<template>
    <form @submit="handleSubmit" method="POST">
        <label for="my-file">Documents</label>
        <file-pond @change="handleChange">
            <input id="my-file" type="file" name="files" required multiple />
        </file-pond>

        <button type="submit">Upload</button>
    </form>
</template>

Browser version.

<script type="importmap">
    {
        "imports": {
            "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
        }
    }
</script>

<div id="app">
    <form @submit="handleSubmit" method="POST">
        <label for="my-file">Documents</label>
        <file-pond ref="pondRef" @change="handleChange">
            <input id="my-file" type="file" name="files" required multiple />
        </file-pond>

        <button type="submit">Upload</button>
    </form>
</div>

<script type="module">
    import { createApp } from 'vue';

    // filepond imports
    import { defineFilePond } from 'filepond';
    import { locale } from 'filepond/locales/en-gb.js';

    // defines <file-pond> element
    defineFilePond({
        locale,
    });

    // create the Vue app
    createApp({
        methods: {
            handleChange(e) {
                console.log('change', e);
            },
            handleSubmit(e) {
                e.preventDefault();
                console.log('submit', this.$refs.pondRef.currentEntries);
            },
        },
    }).mount('#app');
</script>