Модуль Nuxt
@macrulez/inview-nuxt — тонкий модуль Nuxt, оборачивающий @macrulez/inview-vue: авто-импортирует каждый composable, утилиту и движок ядра (так что для createRevealController/createScrollEngine/и т.д. никогда не нужна отдельная установка @macrulez/inview-core), регистрирует директиву v-reveal и компонент <InView> глобально и применяет SSR-safe значения по умолчанию из nuxt.config.ts на клиенте.
Регистрация
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@macrulez/inview-nuxt'],
inview: {
defaultThreshold: 0.25,
defaultRootMargin: '-10% 0px',
defaultOnce: true,
},
})Ключ конфигурации модуля — inview.
Конфигурация
defaultThreshold
number | number[] · по умолчанию: 0
defaultRootMargin
string · по умолчанию: '0px'
defaultOnce
boolean · по умолчанию: false
Все три прокидываются в viewportDefaults — тот же фолбэк, что читают useElementVisibility(), v-reveal и <InView>. Задайте их один раз здесь, вместо того чтобы передавать одни и те же опции в каждое место вызова по всему приложению.
Авто-импорты
Каждое из перечисленного авто-импортируется, беря источник из @macrulez/inview-vue (который сам реэкспортирует всю поверхность @macrulez/inview-core) — явный import в вашем Nuxt-приложении не нужен нигде:
Composables и утилиты
useScrolluseElementVisibilityuseElementViewportuseParallaxLayeruseRevealControllerusePrefersReducedMotionuseStaggeruseScrollTouseScrollSpymapRangebindCSSVarprefersReducedMotionclampstaggerDelayeasingsscrollToElement
Движки ядра — раньше достижимые только через отдельную установку @macrulez/inview-core:
createScrollEnginecreateVisibilityEnginecreateElementTrackercreateRevealControllercreateScrollSpyobserverPoolObserverPoolrafLoop
Значения по умолчанию для viewport
setViewportDefaultsviewportDefaults
Собственный плагин модуля уже вызывает setViewportDefaults() один раз за вас из nuxt.config.ts (см. ниже) — этот авто-импорт нужен, если вы хотите сами изменить значения по умолчанию во время работы приложения или прочитать текущие значения.
v-reveal сама по себе не авто-импорт — это директива, регистрируется глобально (см. ниже), так что импорт не нужен вообще, ни в шаблонах, ни в скриптах. <InView> точно так же регистрируется глобально как компонент (через addComponent из @nuxt/kit), а не авто-импортируется — но импорт в любом случае не нужен ни там, ни там.
Как применяются значения по умолчанию
Модуль регистрирует клиентский плагин (plugin.client.ts — суффикс .client делает его клиентским по соглашению Nuxt об именах файлов), который читает useRuntimeConfig().public.inview и вызывает setViewportDefaults() с вашими defaultThreshold/defaultRootMargin/defaultOnce. Сами composables уже SSR-safe сами по себе — клиентская природа этого плагина связана только с тем, когда применяются значения по умолчанию, а не с тем, что нужно как-то защищать использование composables. Из-за этого модуля ничему не нужна обёртка <ClientOnly>.
Тот же плагин также вызывает nuxtApp.vueApp.directive('reveal', vReveal) — именно это делает v-reveal доступной в шаблоне любого компонента без импорта, директивный эквивалент авто-импортов выше.
Использование v-reveal и createRevealController
<template>
<div v-for="item in items" :key="item.id" v-reveal.once class="card">
{{ item.title }}
</div>
</template>Для прохода по всей странице вместо директивы на каждом элементе — например, из собственного клиентского плагина — createRevealController авто-импортируется точно так же:
// plugins/reveal.client.ts
export default defineNuxtPlugin(() => {
createRevealController({ stagger: { step: 70, max: 4 } })
})Полный список опций, включая переопределения через data-reveal-* атрибуты на элементе — в Контроллере reveal-эффектов.