npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@page-composer/vue

v0.7.1

Published

Vue editor and renderer for Page Composer: PageComposer authoring surface and ComposedPage runtime.

Readme

@page-composer/vue

The Vue editor and renderer for Page Composer. Register the components you already ship, compose pages on a canvas, and render the saved document on any route.

The unscoped vue-page-composer package is the friendly alias for this one. Install whichever name you prefer; the API is identical.

The Page Composer editor: palette, live canvas, and auto-generated inspector

Install

pnpm add @page-composer/vue
import '@page-composer/vue/styles.css'

Render a saved page

<script setup lang="ts">
import { ComposedPage, definePageConfig } from '@page-composer/vue'
import { Hero, Card, Grid } from '@/components'
import doc from './home.page.json'

const config = definePageConfig({
  components: {
    Hero: { label: 'Hero', render: Hero, fields: { title: { type: 'text' } } },
    Grid: { label: 'Grid', render: Grid, zones: ['items'] },
    Card: { label: 'Card', render: Card, fields: { title: { type: 'text', bindable: true } } },
  },
})
</script>

<template>
  <ComposedPage :config="config" :model="doc" :data="{ feature: { title: 'Live' } }" />
</template>

ComposedPage walks the document, mounts each node with <component :is>, maps zones to slots, and resolves bound props through the data context. It is the same renderer the editor canvas runs, so what you author is what ships.

Author pages

<script setup lang="ts">
import { ref } from 'vue'
import { PageComposer } from '@page-composer/vue'
import type { ComposedDocument } from '@page-composer/vue'
import { config } from './page-config'

const doc = ref<ComposedDocument>(/* load from your store */)
</script>

<template>
  <PageComposer v-model="doc" :config="config" @change="save" />
</template>

PageComposer is a controlled component. It emits the document on every change and leaves persistence to you.

Outline tree and a block being dragged into a zone, with the drop target highlighted

Editor features

  • Searchable palette grouped by category. Click to add or drag to the canvas.
  • Live canvas with selection, a drag handle, and an axis-aware drop indicator (a line between items in a stack, a vertical line in a grid, a filled highlight over an empty zone).
  • Auto-generated inspector with a per-field binding toggle.
  • Accessible outline tree (WAI-ARIA tree pattern, arrow-key navigation) synced with the canvas.
  • Undo and redo, copy and paste of a subtree, duplicate, keyboard reorder, viewport preview, and a portable JSON view. Press ? for the shortcut list.
  • Optional isolated canvas: pass :isolate="true" to render the page in an iframe for true CSS isolation, where width-based media queries respond to the device width rather than the editor window.

Field types

text, textarea, number, boolean, select, segment, color, nested object and array (add, remove, reorder), and custom for host-registered inspector components. Mark a scalar field bindable: true to expose the binding toggle. Repeaters (repeat: { zone, source }) clone a zone's template once per record in a bound list.

Theming

One token file is the source of truth. Components consume var(--pc-*). Add pc-theme-light next to the editor root to flip the chrome to light by swapping token values.

Documentation

See the docs folder: getting started, configuration, data binding, keyboard shortcuts, and a comparison with other tools.

License

MIT. Copyright Moheeb Zara.