{"_id":"@codeinklingon/vue-dialog","_rev":"3-263f38fa9b317b7cfcf6c10d170ee7b7","name":"@codeinklingon/vue-dialog","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@codeinklingon/vue-dialog","version":"0.1.0","_id":"@codeinklingon/vue-dialog@0.1.0","maintainers":[{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"}],"homepage":"https://github.com/CodeInKlingon/vue-dialog#readme","bugs":{"url":"https://github.com/CodeInKlingon/vue-dialog/issues"},"dist":{"shasum":"042ffe375369ad3d56295426ca8c833f59026ddb","tarball":"https://registry.npmjs.org/@codeinklingon/vue-dialog/-/vue-dialog-0.1.0.tgz","fileCount":11,"integrity":"sha512-Qb/PbGUn+p39ru1YKV3U8s1mmD4oeDM53Dh+klpqsvyVgmK984fVKLAgyhcBlat3o0ekJxB+0jzom7O+hRZTXA==","signatures":[{"sig":"MEUCIQCpQYxnWDN7lyO5DZrD8Z+ZPSv9OUU2fqq96esXYUbcIAIga4/GK1bXkFNsmXUMwm/qMhCu5RuUAFWusflJbQ0fIZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26512},"main":"./dist/vue-dialog.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/vue-dialog.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.cjs"}}},"gitHead":"8643c26ad1df510b0c42f76c273336d9f04e2da3","private":false,"scripts":{"dev":"vite","build":"vue-tsc --noEmit --project tsconfig.app.json && vite build --config vite.lib.config.ts && vue-tsc -p tsconfig.lib.json","preview":"vite preview"},"_npmUser":{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"},"repository":{"url":"git+https://github.com/CodeInKlingon/vue-dialog.git","type":"git"},"_npmVersion":"11.8.0","description":"A type-safe dialog service for Vue 3. Provides a programmatic dialog API with compile-time emit enforcement.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"vue":"^3.5.13","vue-component-type-helpers":"^3.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vue-tsc":"^2.1.10","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/vue-dialog_0.1.0_1782999975409_0.9419779613978143","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@codeinklingon/vue-dialog","version":"0.1.1","_id":"@codeinklingon/vue-dialog@0.1.1","maintainers":[{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"}],"homepage":"https://github.com/CodeInKlingon/vue-dialog#readme","bugs":{"url":"https://github.com/CodeInKlingon/vue-dialog/issues"},"dist":{"shasum":"643a1985904f083b92e618f2a6f3a250e4e4ef31","tarball":"https://registry.npmjs.org/@codeinklingon/vue-dialog/-/vue-dialog-0.1.1.tgz","fileCount":11,"integrity":"sha512-vmcOrQrzFfnTnRagUXOkJZEM9az0SBFKPSrCTSRQnzbZsLWt3k7qOGWWLaS0TlqNHeEfPygIEllm4d4eCrNk7Q==","signatures":[{"sig":"MEUCIClL96c9PDfRPHU/4iapHvNtmwJqZyozWAX778F+evHrAiEAgMDQJr7WjC8rYpX54V/LCWppnZjvUDfN8JMMPm8oGLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26462},"main":"./dist/vue-dialog.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/vue-dialog.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.cjs"}}},"gitHead":"f5f0be4205d65021656d83c4bca783acce9c28b0","private":false,"scripts":{"dev":"vite","build":"vue-tsc --noEmit --project tsconfig.app.json && vite build --config vite.lib.config.ts && vue-tsc -p tsconfig.lib.json","preview":"vite preview"},"_npmUser":{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"},"repository":{"url":"git+https://github.com/CodeInKlingon/vue-dialog.git","type":"git"},"_npmVersion":"11.8.0","description":"[![npm](https://img.shields.io/npm/v/@codeinklingon/vue-dialog)](https://www.npmjs.com/package/@codeinklingon/vue-dialog)","directories":{},"_nodeVersion":"24.13.1","dependencies":{"vue":"^3.5.13","vue-component-type-helpers":"^3.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","vue-tsc":"^2.1.10","typescript":"~5.6.2","@vitejs/plugin-vue":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/vue-dialog_0.1.1_1783001120014_0.33537722360444766","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@codeinklingon/vue-dialog","version":"0.1.2","type":"module","private":false,"scripts":{"dev":"vite","build":"vue-tsc --noEmit --project tsconfig.app.json && vite build --config vite.lib.config.ts && vue-tsc -p tsconfig.lib.json","prepublishOnly":"npm run build","preview":"vite preview"},"main":"./dist/vue-dialog.cjs","module":"./dist/vue-dialog.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/vue-dialog.cjs"}}},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/CodeInKlingon/vue-dialog.git"},"bugs":{"url":"https://github.com/CodeInKlingon/vue-dialog/issues"},"homepage":"https://github.com/CodeInKlingon/vue-dialog#readme","dependencies":{"vue":"^3.5.13","vue-component-type-helpers":"^3.3.6"},"devDependencies":{"@vitejs/plugin-vue":"^5.2.1","typescript":"~5.6.2","vite":"^6.0.0","vue-tsc":"^2.1.10"},"gitHead":"e1ea1ab5f3b03c4c45b0352cf545b2919aac3af2","_id":"@codeinklingon/vue-dialog@0.1.2","description":"[![npm](https://img.shields.io/npm/v/@codeinklingon/vue-dialog)](https://www.npmjs.com/package/@codeinklingon/vue-dialog)","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-bSFw1fLnIQOtcRe47xEqm49uHZX3zRJMpzIFDYhBm0KoYBDinVPZmUmuBuGkcqfGm+nfrPGmOCOOGKSVnB92WA==","shasum":"a129da43ca92072082bc03eec603a4dd7f62385e","tarball":"https://registry.npmjs.org/@codeinklingon/vue-dialog/-/vue-dialog-0.1.2.tgz","fileCount":11,"unpackedSize":27146,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDbEClMz7wyK4LrzfLeiuGSJq3FPVyKR3IGmxUo6Cx7NAiEA7HHK3AV+1hC+tKJjvJZ18xCxbVNm3RGH41XC4B44hbw="}]},"_npmUser":{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"},"directories":{},"maintainers":[{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-dialog_0.1.2_1783001982960_0.935831028069404"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T13:46:15.184Z","modified":"2026-07-02T14:19:43.224Z","0.1.0":"2026-07-02T13:46:15.552Z","0.1.1":"2026-07-02T14:05:20.145Z","0.1.2":"2026-07-02T14:19:43.099Z"},"bugs":{"url":"https://github.com/CodeInKlingon/vue-dialog/issues"},"homepage":"https://github.com/CodeInKlingon/vue-dialog#readme","repository":{"type":"git","url":"git+https://github.com/CodeInKlingon/vue-dialog.git"},"description":"[![npm](https://img.shields.io/npm/v/@codeinklingon/vue-dialog)](https://www.npmjs.com/package/@codeinklingon/vue-dialog)","maintainers":[{"name":"danielpstokes","email":"danielphilipstokes@gmail.com"}],"readme":"# @codeinklingon/vue-dialog\n\n[![npm](https://img.shields.io/npm/v/@codeinklingon/vue-dialog)](https://www.npmjs.com/package/@codeinklingon/vue-dialog)\n\nA type-safe dialog service for Vue 3. Provides a programmatic dialog API with compile-time emit enforcement.\n\n## Installation\n\n```bash\nnpm install @codeinklingon/vue-dialog\n```\n\n## Usage\n\n### 1. Install the plugin\n\n```ts\nimport { createApp } from 'vue';\nimport App from './App.vue';\nimport { DialogPlugin } from '@codeinklingon/vue-dialog';\n\n// Without router\ncreateApp(App).use(DialogPlugin).mount('#app');\n\n// With router — blocks navigation while a dialog is open\nimport { createRouter, createWebHistory } from 'vue-router';\n\nconst router = createRouter({ history: createWebHistory(), routes: [] });\ncreateApp(App).use(DialogPlugin, { router }).use(router).mount('#app');\n```\n\n### 2. Add the `<Dialogs />` component to your app root\n\n```vue\n<template>\n\t<Dialogs />\n\t<router-view />\n</template>\n```\n\n### 3. Create a dialog component\n\nYour dialog **must** declare `resolve` and `reject` emits:\n\n```vue\n<script setup lang=\"ts\">\ndefineProps<{ message: string }>();\nconst emit = defineEmits<{\n\tresolve: [result: string];\n\treject: [reason?: string];\n}>();\n\nfunction confirm() {\n\temit('resolve', 'ok');\n}\n\nfunction cancel() {\n\temit('reject', 'user cancelled');\n}\n</script>\n```\n\nComponents without these emits will be rejected at compile time.\n\n### 4. Open a dialog\n\n```ts\nimport { useDialog } from '@codeinklingon/vue-dialog';\nimport MyDialog from './MyDialog.vue';\n\nconst dialog = useDialog();\n\nasync function open() {\n\tconst { result } = await dialog.add({\n\t\tcomponent: MyDialog,\n\t\tprops: { message: 'Are you sure?' },\n\t});\n\tconsole.log('User chose:', result);\n}\n```\n\n## API\n\n### `useDialog()` → `DialogService`\n\nReturns the shared dialog service instance. Throws if the plugin isn't installed.\n\n### `dialogService.add(options)` → `Promise<{ result }>`\n\nOpens a dialog. `options.component` must declare `resolve`/`reject` emits.\n`options.props` is automatically typed from the component's props (with `onResolve`/`onReject` filtered out).\n\n### `dialogService.closeAll()`\n\nRejects all open dialogs.\n\n### `dialogService.hasOpenDialogs()` → `boolean`\n\n### `DialogCancelledError`\n\nError class used when dialogs are rejected non-explicitly.\n\n## Scripts\n\n| Command | Description |\n|---------|-------------|\n| `npm run dev` | Start demo app dev server |\n| `npm run build` | Build library |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}