turns out you need special script to implement 'fallthrough slots'.
found it here https://github.com/orgs/vuejs/discussions/11004
<template v-for="(_, name) in $slots" #[name]="scope">
<slot :name v-bind="scope ?? {}" />
</template>
as for emits, they work. primevue just has horrible typescript support