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

@vanduo-oss/vd3

v1.0.0

Published

Vanduo UI for Vue 3 — design system and component library (the vd3 line)

Readme

@vanduo-oss/vd3

license: MIT

Vanduo UI for Vue 3 — design system and component library (the vd3 line).

The Vue3-only line of the Vanduo design system. Unlike the previous three-package split (@vanduo-oss/core tokens + @vanduo-oss/framework CSS/JS + @vanduo-oss/vue components), vd3 is fully standalone: one package ships its own DTCG design tokens, CSS tree, and typed Vd* components/composables. Sole peer dependency: vue >=3.3 — no pinia, and no framework IIFE runtime (loadVanduoRuntime / window.Vanduo* are gone).

Status: 1.0.0 — first public release. The full surface is in place — the token/CSS foundation, the pure-Vue component/composable carryover, the delegating-composable rewrites (vd3-rewrites), the new components/composables (vd3-new-components), and the hardening pass (vd3-hardening) have all landed.

Install

pnpm add @vanduo-oss/vd3

Usage

Three integration points — import the stylesheet, register the plugin, and render components:

// main.ts
import { createApp } from "vue";
import { VanduoVue } from "@vanduo-oss/vd3";
import "@vanduo-oss/vd3/css"; // full stylesheet (tokens + components + icons)
import App from "./App.vue";

createApp(App).use(VanduoVue).mount("#app");

app.use(VanduoVue) accepts an optional { themeDefaults } to override the generic baseline before the theme model first reads it (e.g. app.use(VanduoVue, { themeDefaults: { PRIMARY_DARK: "blue" } })).

<script setup lang="ts">
import { VdButton, VdCard } from "@vanduo-oss/vd3";
</script>

<template>
  <VdCard>
    <VdButton variant="primary">Save</VdButton>
  </VdCard>
</template>

Components & composables

52 components — 45 Vd* components plus 7 layout primitives — and ~35 composables, all named exports from the package root (import only what you render; nothing registers globally).

  • Form & input: VdButton, VdButtonGroup, VdInput, VdSelect, VdCustomSelect, VdCheckboxGroup, VdRadioGroup, VdSwitch, VdSlider, VdRating, VdTransfer.
  • Data display: VdTable, VdTree, VdTreeNode, VdCollection, VdCard, VdBadge, VdChip, VdAvatar.
  • Feedback & status: VdAlert, VdModal, VdOffcanvas, VdToast, VdToastContainer, VdProgress, VdSpinner, VdPreloader, VdSkeleton.
  • Navigation: VdNavbar, VdSidenav, VdMenu, VdTabs, VdBreadcrumb, VdPagination, VdFooter, VdFab.
  • Content & utility: VdAccordion, VdCodeSnippet, VdIcon, VdSeparator, VdTooltip, VdDocSearch, VdFlow.
  • Theme controls: VdThemeSwitcher, VdThemeCustomizer.
  • Layout primitives: VdBox, VdCenter, VdCover, VdFrame, VdInline, VdStack, VdSwitcher.

Composables cover the theme layer (useTheme, useThemeBridge), forms (useDatepicker, useTimepicker, useStepper, useSuggest, useSearch, useValidate), overlays/dismissal (useDropdown, usePopover, useTooltips, useToast, useImageBox, useSpotlight, useSidenav, useFocusTrap, useClickOutside), motion/scroll (useAffix, useScrollspy, useParallax, useWaypoint, useLazyLoad, useNavbarGlassScroll, useMorph, useMorphBadges, useRipple, useExpandingCards, useTimeline), and layout/ interaction (useGrid + setGridSystem, useGlass, useTabs, useDocSearch, useDraggable, useFlow, useKeyboardNav). sanitizeHtml is exported too.

The full agent/LLM reference — with the per-group inventory and the theming contract — is in SKILL.md.

Theming

The theme layer (useTheme) drives six data-* attributes on <html>data-palette, data-primary, data-neutral, data-radius, data-theme, data-font — which the CSS resolves into --vd-* custom properties (e.g. --vd-radius-scale). Preferences persist to six localStorage keys (vanduo-palette, vanduo-primary-color, vanduo-neutral-color, vanduo-radius, vanduo-theme-preference, vanduo-font-preference).

useThemePreference() is a module-scope reactive singleton (no pinia) that is the single source of truth behind VdThemeSwitcher and VdThemeCustomizer; its setters route through applyPreference + persistPreference. Override the default palette/primary/etc. via app.use(VanduoVue, { themeDefaults }) or setThemeDefaults(). Token data (DEFAULTS, PALETTE_OPTIONS, tokens, …) is re-exported from the package root, or import raw JSON from @vanduo-oss/vd3/tokens.json. Ship the token-only stylesheet with @vanduo-oss/vd3/css/core.

SSR

The package is SSR / vite-ssg-safe: all browser access is client-guarded with typeof window checks and onMounted / onScopeDispose lifecycle hooks, so nothing touches window, document, localStorage, or matchMedia during server render. useThemePreference seeds from defaults on the server and hydrates from storage lazily on the first client call.

Security

  • Zero runtime dependencies beyond the vue >=3.3 peer — no pinia, no transitive runtime deps.
  • Hardened .npmrc: ignore-scripts, minimum-release-age, save-exact, strict-peer-dependencies, trust-policy=no-downgrade, block-exotic-subdeps, and an explicit registry.
  • MIT licensed (LICENSE); bundled third-party notices in THIRD-PARTY-LICENSES (Open Color, Phosphor Icons, and the adapted expanding-cards CSS — all MIT).

Exports

| Export | Contents | | ----------------------------- | ------------------------------------------------ | | @vanduo-oss/vd3 | Components, composables, theme API, token data | | @vanduo-oss/vd3/css | Full stylesheet (dist/vd3.min.css) | | @vanduo-oss/vd3/css/core | Tokens-only stylesheet (dist/vd3-core.min.css) | | @vanduo-oss/vd3/tokens.json | Resolved DTCG token data (dist/tokens.json) |

Build pipeline

pnpm build runs the full chain, in order:

  1. scripts/clean-dist.mjs — resets dist/ (the only step that cleans; vite runs with emptyOutDir: false).
  2. scripts/build-tokens.mjs — DTCG tokens (tokens/) → generated color partials (css/core/generated/, gitignored), the typed token-data module (src/theme/generated/tokens.data.ts, gitignored — inlined into the lib bundle) + dist/tokens.json. Zero-dependency and deterministic.
  3. scripts/build-css.mjs — bundles css/vd3.css with lightningcss into dist/vd3(.min).css and the no-icons dist/vd3-core(.min).css (+ source maps), and copies fonts/ and the Phosphor regular + fill icon weights into dist/.
  4. vite build — the library JS (dist/index.{js,cjs}).
  5. vue-tsc -p tsconfig.build.json — the .d.ts declarations.
  6. scripts/check-class-coverage.mjs — asserts every vd-* class the components render has a selector in dist/vd3.min.css (also standalone as pnpm check:classes).

pnpm build:tokens / pnpm build:css run steps 2–3 standalone; pnpm gen:fib regenerates tokens/primitive/color.fib.tokens.json.

Development

On a fresh clone, bootstrap the generated token-data module first — src/ imports src/theme/generated/tokens.data.ts (gitignored build output), so lint/typecheck/test cannot pass until it exists:

pnpm install && pnpm build:tokens

Then the usual gates:

pnpm lint          # eslint
pnpm format:check  # prettier (src, tests, scripts)
pnpm stylelint     # authored css tree (generated partials excluded)
pnpm typecheck     # vue-tsc --noEmit
pnpm test          # vitest (jsdom) — token/DTCG/palette contracts + smoke
pnpm build         # full chain (see Build pipeline)

Requires Node >= 24 and pnpm >= 10 (packageManager: [email protected]).

Documentation

License

MIT © Vanduo