Skip to content

feat(nuxt-module): sync to 1.17.0 and add reactive detection composables - #240

Draft
jrmybtlr wants to merge 1 commit into
mainfrom
cursor/nuxt-module-composables-ad9d
Draft

feat(nuxt-module): sync to 1.17.0 and add reactive detection composables#240
jrmybtlr wants to merge 1 commit into
mainfrom
cursor/nuxt-module-composables-ad9d

Conversation

@jrmybtlr

@jrmybtlr jrmybtlr commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

Brings usemods-nuxt up to date with usemods@1.17.0 and adds the reactive Vue composables that install/docs have been promising for detections that need event listeners.

Module refresh

  • Package version + usemods dependency → 1.17.0
  • Playground Nuxt 3.11 → 4.5
  • Real @nuxt/test-utils e2e coverage (auto-import + SSR-safe composable defaults)
  • Committed pnpm-lock.yaml for the isolated module package

Reactive composables (auto-imported)

Composable Wraps
useScrollPosition detectScrollPosition
useMousePosition detectMousePosition
useRelativeMousePosition detectRelativeMousePosition
useWindowSize detectWindowSize
useActiveBrowser detectActiveBrowser
useColorScheme detectColorScheme
useBreakpoint detectBreakpoint
useContainerBreakpoint detectContainerBreakpoint
useNetworkStatus detectNetworkStatus
useOrientation isPortrait / isLandscape

Docs

  • Removed “stay tuned” / “actively working on composables” copy from README, install, and intro
  • Documented composables in nuxt-module/README.md (plus alias option)
  • Detections/devices notes point at the matching Nuxt composables

Notes

  • nuxt-web remains on usemods-nuxt@^1.16.0 until this package is published to npm
  • Website detector demos are unchanged for the same reason

Verify

  • pnpm run test (2 passed)
  • pnpm run test:types
  • pnpm run dev:build (playground)
Open in Web Open in Cursor 

Bring usemods-nuxt in line with usemods@1.17.0, upgrade the playground to
Nuxt 4, and auto-import SSR-safe Vue composables for helpers that need
event listeners. Update install/docs copy to document the composables.

Co-authored-by: Jeremy Butler <jrmybtlr@users.noreply.github.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
usemods a7876b2 Commit Preview URL

Branch Preview URL
Sep 08 2026, 08:25 PM

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The new reactive composables currently wire high-frequency events (scroll/mousemove) directly into reactive updates and matchMedia uses an API that can be incompatible with older WebKit without a small fallback.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Updates the usemods-nuxt module to align with usemods@1.17.0, and introduces a set of SSR-safe, auto-imported Nuxt/Vue composables that wrap detection helpers requiring event listeners. The PR also refreshes related documentation across the library, website, and module package, and adds e2e coverage for Nuxt auto-import behavior.

Changes:

  • Bump usemods-nuxt to 1.17.0 (and dependency sync to usemods@1.17.0), update the Nuxt playground to Nuxt 4.5.1.
  • Add reactive detection composables (e.g. useBreakpoint, useScrollPosition, useWindowSize, etc.) and auto-import them via the Nuxt module.
  • Update docs/site copy to reflect composable availability, and add Nuxt e2e tests validating SSR-safe defaults + auto-imports.
File summaries
File Description
src/detections.ts Updates detections module description to reference Nuxt composables as an alternative to manual listeners.
README.md Updates Nuxt install section to advertise reactive composables and adds a short usage snippet.
nuxt-web/pages/intro/introduction.vue Updates Nuxt module marketing copy to mention auto-imports + reactive composables.
nuxt-web/pages/intro/installation.vue Updates Nuxt install copy and adds a Shiki snippet demonstrating composable usage.
nuxt-web/pages/docs/detections.vue Updates detections page intro to reference usemods-nuxt composables.
nuxt-web/content/1.intro/2.installation.md Updates Nuxt installation docs and adds a composables snippet.
nuxt-web/content/1.intro/1.introduction.md Updates Nuxt module intro copy to mention auto-imports + reactive composables.
nuxt-module/tsconfig.json Excludes the test directory from the Nuxt-module TS config.
nuxt-module/test/fixtures/basic/app.vue Updates fixture to exercise auto-imported slugify and SSR-safe composable behavior.
nuxt-module/test/basic.test.ts Replaces placeholder test with Nuxt e2e checks for auto-imports + SSR-safe composables.
nuxt-module/src/runtime/composables/useWindowSize.ts Adds reactive, SSR-safe window-size composable.
nuxt-module/src/runtime/composables/useScrollPosition.ts Adds reactive, SSR-safe scroll-position composable.
nuxt-module/src/runtime/composables/useRelativeMousePosition.ts Adds reactive, SSR-safe relative mouse-position composable.
nuxt-module/src/runtime/composables/useOrientation.ts Adds reactive, SSR-safe portrait/landscape composable.
nuxt-module/src/runtime/composables/useNetworkStatus.ts Adds reactive, SSR-safe network-status composable.
nuxt-module/src/runtime/composables/useMousePosition.ts Adds reactive, SSR-safe absolute mouse-position composable.
nuxt-module/src/runtime/composables/useContainerBreakpoint.ts Adds reactive container-breakpoint composable (ResizeObserver + resize listener).
nuxt-module/src/runtime/composables/useColorScheme.ts Adds reactive color-scheme composable based on matchMedia.
nuxt-module/src/runtime/composables/useBreakpoint.ts Adds reactive Tailwind-breakpoint composable based on resize.
nuxt-module/src/runtime/composables/useActiveBrowser.ts Adds reactive “active/hidden tab” composable based on visibilitychange.
nuxt-module/src/module.ts Auto-imports all usemods exports and adds a composables imports directory.
nuxt-module/README.md Documents the new composables, SSR-safe defaults, and the alias option.
nuxt-module/playground/package.json Updates playground Nuxt dependency to ^4.5.1.
nuxt-module/playground/app.vue Expands playground UI to render composable outputs for manual verification.
nuxt-module/package.json Bumps module version + updates description and usemods dependency to 1.17.0.
docs/pages/devices.md Documents Nuxt composable alternative for orientation reactivity.
docs/pages/detections.md Updates detections docs to reference usemods-nuxt composables as the reactive option.
Review details
  • Files reviewed: 27/28 changed files
  • Comments generated: 4
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +16 to +24
onMounted(() => {
update()
media = window.matchMedia('(prefers-color-scheme: dark)')
media.addEventListener('change', update)
})

onUnmounted(() => {
media?.removeEventListener('change', update)
})
Comment on lines +11 to +21
const update = (event: MouseEvent): void => {
position.value = detectMousePosition(event)
}

onMounted(() => {
window.addEventListener('mousemove', update, { passive: true })
})

onUnmounted(() => {
window.removeEventListener('mousemove', update)
})
Comment on lines +11 to +21
const update = (event: MouseEvent): void => {
position.value = detectRelativeMousePosition(event)
}

onMounted(() => {
window.addEventListener('mousemove', update, { passive: true })
})

onUnmounted(() => {
window.removeEventListener('mousemove', update)
})
Comment on lines +11 to +22
const update = (): void => {
position.value = detectScrollPosition()
}

onMounted(() => {
update()
window.addEventListener('scroll', update, { passive: true })
})

onUnmounted(() => {
window.removeEventListener('scroll', update)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants