{"_id":"@eisaku/vuecraft","name":"@eisaku/vuecraft","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.1":{"name":"@eisaku/vuecraft","version":"0.2.1","description":"A craftable library of reusable Vue.js components for building consistent UIs across projects.","type":"module","main":"./dist/vuecraft.cjs.js","module":"./dist/vuecraft.es.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/vuecraft.es.js","require":"./dist/vuecraft.cjs.js"},"./styles.css":"./dist/vuecraft.css"},"scripts":{"dev":"vite","build":"vite build && vue-tsc -p tsconfig.build.json --emitDeclarationOnly","test":"vitest run","test:watch":"vitest","lint":"eslint .","format":"prettier --write .","format:check":"prettier --check .","preview":"vite preview","storybook":"storybook dev -p 6006","build-storybook":"storybook build","prepublishOnly":"npm run build","prepare":"npm run build"},"peerDependencies":{"vue":"^3.4.0"},"devDependencies":{"@eslint/js":"10.0.1","@storybook/addon-a11y":"^10.5.10","@storybook/addon-docs":"^10.5.10","@storybook/addon-onboarding":"^10.5.10","@storybook/vue3-vite":"^10.5.10","@vitejs/plugin-vue":"^5.1.0","@vitest/coverage-v8":"4.1.11","@vue/test-utils":"2.5.0","eslint":"10.9.1","eslint-config-prettier":"10.1.8","eslint-plugin-vue":"10.10.0","globals":"17.11.0","jsdom":"30.0.1","playwright":"latest","prettier":"3.9.6","storybook":"^10.5.10","typescript":"^5.5.0","typescript-eslint":"8.69.0","vite":"^5.4.0","vitest":"4.1.11","vue":"^3.4.0","vue-tsc":"^2.1.0"},"license":"MIT","private":false,"repository":{"type":"git","url":"git+https://github.com/Enzorbt/vuecraft.git"},"homepage":"https://github.com/Enzorbt/vuecraft#readme","publishConfig":{"access":"public"},"gitHead":"99ae843f8ba7af10966bbcc0a2ad55b3e8e07d41","_id":"@eisaku/vuecraft@0.2.1","bugs":{"url":"https://github.com/Enzorbt/vuecraft/issues"},"_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-BSOhcZAsLZI9Sx02FCW5y/wBtY7+IZKnz5ihw+MKKXS+AYXX7HsYOLLKbc/a/NavqCHhYoAZj3ZDqkkb3XJkYQ==","shasum":"bb5619b386cefa75977c5c2c4ab68b7a150ca201","tarball":"https://registry.npmjs.org/@eisaku/vuecraft/-/vuecraft-0.2.1.tgz","fileCount":48,"unpackedSize":260435,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBjRoZ0GSZYGNZ5kxvN7AJTYMqBAXqDTpc5I6+vOxNlSAiEAqVl+BVRzPPp2W3rFgSN0zLrMi+thUQPapxEbEhxFp5k="}]},"_npmUser":{"name":"eisaku","email":"enzorobert738@gmail.com"},"directories":{},"maintainers":[{"name":"eisaku","email":"enzorobert738@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vuecraft_0.2.1_1788355475953_0.2839524381017242"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-02T13:24:35.832Z","0.2.1":"2026-09-02T13:24:36.089Z","modified":"2026-09-02T13:24:36.259Z"},"maintainers":[{"name":"eisaku","email":"enzorobert738@gmail.com"}],"description":"A craftable library of reusable Vue.js components for building consistent UIs across projects.","homepage":"https://github.com/Enzorbt/vuecraft#readme","repository":{"type":"git","url":"git+https://github.com/Enzorbt/vuecraft.git"},"bugs":{"url":"https://github.com/Enzorbt/vuecraft/issues"},"license":"MIT","readme":"# vuecraft\n\nA craftable library of reusable Vue.js components for building consistent UIs across projects.\n\n## Structure\n\n```\nvuecraft/\n├── src/\n│   ├── components/\n│   │   ├── core/            # VcButton, VcModal, VcTable, VcPagination, VcCard, VcContextMenu...\n│   │   ├── forms/            # VcInput, VcSelect, VcCheckbox, VcDatePicker, VcFileDropzone...\n│   │   ├── layout/           # VcTabs, VcAccordion, VcDrawer, VcDivider\n│   │   ├── overlays/         # VcTooltip, VcPopover\n│   │   ├── data-display/     # VcAvatar, VcBadge, VcTag, VcProgressBar, VcSpinner, VcEmptyState...\n│   │   └── feedback/         # VcConfirmDialogHost, VcBanner\n│   │       ├── __tests__/    # unit tests, colocated per category\n│   │       └── __stories__/  # Storybook stories, colocated per category\n│   ├── composables/          # useVcTheme, useVcToast, useVcOverlay, useVcFloating, useVcConfirm\n│   ├── styles/\n│   │   └── tokens.css        # --vc-* design tokens (light + dark)\n│   └── index.ts              # library entry point — the only place you need to import from\n├── .storybook/                # Storybook config (dark mode toggle, a11y addon)\n├── vite.config.ts             # library-mode build (ESM + CJS + .d.ts)\n└── package.json\n```\n\nEvery component category folder can carry its own `__tests__/` and `__stories__/` subfolder — not every category has both yet, but the pattern is the same everywhere: place a new component's spec/story next to its siblings in the same category.\n\n## Getting started\n\n```bash\nnpm install\nnpm run build      # outputs dist/vuecraft.es.js, .cjs.js, .css, index.d.ts\nnpm run dev         # Vite dev server, for local component work\n```\n\n## Publishing (npm)\n\nvuecraft is published to the **public npm registry**. Anyone can install it\nwith a plain `npm install vuecraft` — no auth, no `.npmrc` setup.\n\n### One-time setup\n\n1. Create an npm account if you don't have one: https://www.npmjs.com/signup\n2. Generate an **Automation** access token: npmjs.com → your avatar →\n   _Access Tokens_ → _Generate New Token_ → _Automation_ (this type works\n   from CI even with 2FA enabled on your account).\n3. In the GitHub repo, add it as a secret: _Settings → Secrets and\n   variables → Actions → New repository secret_, name it `NPM_TOKEN`.\n\nThat's the only manual step — after this, releases are fully automated.\n\n### Releasing a new version\n\n1. Bump `version` in `package.json` and add a matching entry to `CHANGELOG.md`\n2. Commit, push, then tag: `git tag vX.Y.Z && git push origin vX.Y.Z`\n3. Pushing a tag matching `v*.*.*` triggers `.github/workflows/publish.yml`,\n   which lints, builds, tests, and — only if all of that passes — runs\n   `npm publish`\n\nThere's no manual `npm publish` step; the tag push is the trigger. This also\nmeans a version can never ship without passing CI first.\n\n### Installing in a consumer project\n\n```bash\nnpm install vuecraft\n```\n\n## Using it in a consumer project\n\n```ts\nimport { createApp } from 'vue';\nimport vuecraft from 'vuecraft';\nimport 'vuecraft/styles.css';\n\ncreateApp(App).use(vuecraft).mount('#app');\n```\n\nOr import components individually (better for tree-shaking):\n\n```vue\n<script setup>\nimport { VcButton } from 'vuecraft';\n</script>\n\n<template>\n  <VcButton variant=\"primary\" @click=\"save\">Enregistrer</VcButton>\n</template>\n```\n\n## Theming\n\nEvery component reads colors exclusively from `--vc-*` CSS variables (see\n`src/styles/tokens.css`). To adapt vuecraft to an existing project's design\nsystem, map your own variables onto vuecraft's — no component code needs\nto change:\n\n```css\n:root {\n  --vc-accent: var(--app-accent-fill);\n  --vc-bg-surface: var(--app-bg-primary);\n}\n```\n\nDark mode ships for free: set `data-theme=\"dark\"` on `<html>` (or any\nancestor) and every vuecraft component switches automatically. An optional\n`useVcTheme()` composable is provided for projects that don't already have\ntheir own theme toggle.\n\n## Next up (see the vuecraft roadmap docs)\n\nThe \"generic core kit\": VcModal, VcContentModal, VcPromptModal, VcAlert,\nVcSkeleton, VcTable, VcPagination, VcCard, VcContextMenu.\n","readmeFilename":"README.md","_rev":"1-bbb6175d43fd65f1c8cc008b9d392618"}