{"_id":"@alis-build/vue-ideate","_rev":"9-e46f8d5b8cb026af61608668ca95194d","name":"@alis-build/vue-ideate","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.6":{"name":"@alis-build/vue-ideate","version":"1.0.6","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.0.6","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"6a4a5135deed9923f035ed43cc91219a52920136","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.0.6.tgz","fileCount":7,"integrity":"sha512-XPFqf0DkQ0xpWQPnB/j9lB35hGrKbQj9qL51asgl4wwEqhErH8f+OEJc4Hvl7chv89r3toVUs+N34BB/X8TENQ==","signatures":[{"sig":"MEQCIG85wiWinUVI1NBQazAb/b97yTSj8vpmOQc1WVEquf4NAiAXbYID08RRLXtzaH98FGYHqFcA1E0Un2LGf6aKO/hbqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42706},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ad4e4cba421d57e60805774f4d07e2405d3ef328","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"11.5.1","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"buffer":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.0.6_1765392771869_0.35110034889058794","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@alis-build/vue-ideate","version":"1.0.7","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.0.7","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"b452f02b9356158cd9126118bae4b3c69e674f6d","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.0.7.tgz","fileCount":7,"integrity":"sha512-MWd/XCUsZ9ZkJB82q3Rg3PrhqpFdq+HfyDauBU8+AoL4kyTCotyulIwLHDzoR3P6/qCoj1EwzCkpJPjxUEXzuQ==","signatures":[{"sig":"MEUCIE5yE6fAWh+AlKLKy0GXRkLXzk+1gXZWHgVhrSs1Yn1pAiEA8F6PIn/eozLLcF6i8qzfvG0N/EUcVmiiMNpF3jFVj6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42706},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"231b1d4b8686b5ccac513d1f5e449f2f80266fd3","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"buffer":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.0.7_1765393502770_0.5790132172429359","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alis-build/vue-ideate","version":"1.1.1","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.1.1","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"43a4d3d6aed603b383ddbdcd2dd1ff9a8862c6d9","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.1.1.tgz","fileCount":7,"integrity":"sha512-/z7sjuCXdbqV+YmYRJsAQ9KU3Agui2qbQQN+MKy1mEXjMzZux2EAMWLv4MPwhnbkYXGEM7GE0Fr/pSZ3HUDpCw==","signatures":[{"sig":"MEQCIQCuRn951+/br3y0wGaftHmA/HQlHTs1fn1B957acEa35AIfBbICasvoQsYqPp+31HDE4DrlKsDu92TbMOJsL+aWgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58502},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4b0a86c1e7474c66146e2adeddada179a7f36d6c","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"buffer":"^6.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^25.0.0"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.1.1_1765396348515_0.7275627504315259","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alis-build/vue-ideate","version":"1.1.2","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.1.2","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"3a224ae5f2afc5fdb1b1c506a42b0efe886291c5","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.1.2.tgz","fileCount":7,"integrity":"sha512-aBqJSoa92YtLvbhbpEFGwAREKXrvMrcYEK9rfCPGmA4QRmmuZABr0A3VFc0AtQi2ldmROazSOdBTQFxWpLmMTw==","signatures":[{"sig":"MEUCIQDolRhHhyP7ZI4Qc8MgG2rWNFm0pK10kL2tD6cQWEKV4QIgYuX4cTsa4HaEznUME6b6vD82ZYoqjsIWhCNbH2PGf7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76942},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2e38478529436be8f3b7b1e28de147e0416281bd","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"buffer":"^6.0.3","@vueuse/core":"^14.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^25.0.0"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.1.2_1765404693526_0.6481428620172749","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@alis-build/vue-ideate","version":"1.2.0","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.2.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"5dd2f07c2e1fa0a60f38b55eb4568be6e63e99c5","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.2.0.tgz","fileCount":7,"integrity":"sha512-6Ord1NTpT3IqpEac/pyCFwzAArV5nYWF30fOEcu2302mBkKmZGLWecKo72d4K/RVQouW7fDSpDo532nxfQYXUQ==","signatures":[{"sig":"MEUCIAV+Wlbn4bVpnHy4oCMiUQnliMrQyFQaXVadBtuQQ+I5AiEAllr88WlPMx1X1zVGiLB5055kZ+YPMSHgNNTg6ZVxgts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80016},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"615dea7bf586f2ff6b7943e7853a4ab804c4fdc4","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"buffer":"^6.0.3","@vueuse/core":"^14.1.0"},"publishConfig":{"registry":"https://npm.pkg.github.com"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^25.0.0"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.2.0_1765488689461_0.26126032679852207","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@alis-build/vue-ideate","version":"1.3.0","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@1.3.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"2dc8955e81b4d8d6e7f491c95a1e8b3c63457333","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-1.3.0.tgz","fileCount":7,"integrity":"sha512-YWWhNSvrpBlPSEJizqq48diFN6EcGCRFTrLjbpoK+BcHzJ+eHlwlgyI3gdCTRIIUOXRINVV0ew2otZXVT2lj+g==","signatures":[{"sig":"MEUCIQC6V/MpwheJREmlVP2k8HoxBdupoFXJrtxD7M23rwbDQAIgXn9kKFJnTj8eY66vBHTGX71RZ7waui8+ix7M9PvHeow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80082},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"92fcedef85c0274ce2d5f3218c46cac3b46cc857","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"buffer":"^6.0.3","@vueuse/core":"^14.1.0"},"publishConfig":{"registry":"https://npm.pkg.github.com"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^25.0.0"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_1.3.0_1768385863722_0.14463909264077635","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@alis-build/vue-ideate","version":"2.0.0","keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","_id":"@alis-build/vue-ideate@2.0.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/vue-ideate#readme","bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"dist":{"shasum":"f8db3073151d6f3f511fb4e285db8e8183076ed2","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-2.0.0.tgz","fileCount":7,"integrity":"sha512-htIxL3REeTuRY6BXgOzdJ85Bdv+AlsAEjhmXIae1nMt+PEdLBBfei6c/RkdeduUVgoaln8UfXce0Qw0VmBDX2Q==","signatures":[{"sig":"MEUCIQDf/gGheBV9SdZs+y64U/I2dZaURN2lifTwZKyCts9XKgIgZp8UgRpw097jgkx/Q247BbthoTfMGa1B86EnVyyOzIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81715},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"379048783ff7af14a5d94c716cf9eb7376a3093d","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts"},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/vue-ideate.git","type":"git"},"_npmVersion":"10.8.2","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"buffer":"^6.0.3","@vueuse/core":"^14.1.0","@alis-build/ideate":"^1.945.978"},"publishConfig":{"registry":"https://npm.pkg.github.com"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.25","tsup":"^8.5.1","typescript":"^5.9.3","@types/node":"^25.0.0"},"peerDependencies":{"vue":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-ideate_2.0.0_1771331543782_0.4242581580460727","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@alis-build/vue-ideate","version":"2.1.0","description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":{"import":"./dist/index.d.ts","require":"./dist/index.d.cts"},"import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["vue","composables","vue3"],"author":"","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/alis-exchange/vue-ideate.git"},"bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"publishConfig":{"registry":"https://npm.pkg.github.com"},"peerDependencies":{"vue":"^3.0.0"},"devDependencies":{"@types/node":"^25.0.0","tsup":"^8.5.1","typescript":"^5.9.3","vue":"^3.5.25"},"dependencies":{"@alis-build/ideate":"^1.945.978","@vueuse/core":"^14.1.0","buffer":"^6.0.3"},"_id":"@alis-build/vue-ideate@2.1.0","gitHead":"8ec3196ad66164db0e4c59d79ceb5460f9464f25","homepage":"https://github.com/alis-exchange/vue-ideate#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-k7g1d0aKnnXuyloFaqasADJTszVU3ah5l0x45/8dUi+z0ekez5kBlJ5dnVsZljXm8hV8RA0WrC9SeyhSKXMhmw==","shasum":"b99450ab852cb18797d7375004382f412db4ddb6","tarball":"https://registry.npmjs.org/@alis-build/vue-ideate/-/vue-ideate-2.1.0.tgz","fileCount":7,"unpackedSize":83879,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDqImcsJcvH1CWafxmXf3CNLavpaqwr25oqU6ls/xD3qgIhAJbDnSL4M3HutJVpMbSvO29Eg7pJ+rCtroyPxLqKe3cn"}]},"_npmUser":{"name":"hi_ruan","email":"ruan@alisx.com"},"directories":{},"maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-ideate_2.1.0_1783065285605_0.5724124560069164"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-10T18:52:51.795Z","modified":"2026-07-03T07:54:45.962Z","1.0.6":"2025-12-10T18:52:52.013Z","1.0.7":"2025-12-10T19:05:02.915Z","1.1.1":"2025-12-10T19:52:28.657Z","1.1.2":"2025-12-10T22:11:33.730Z","1.2.0":"2025-12-11T21:31:29.604Z","1.3.0":"2026-01-14T10:17:43.876Z","2.0.0":"2026-02-17T12:32:23.970Z","2.1.0":"2026-07-03T07:54:45.779Z"},"bugs":{"url":"https://github.com/alis-exchange/vue-ideate/issues"},"license":"Apache-2.0","homepage":"https://github.com/alis-exchange/vue-ideate#readme","keywords":["vue","composables","vue3"],"repository":{"type":"git","url":"git+https://github.com/alis-exchange/vue-ideate.git"},"description":"Vue 3 composables and components to help integrate Alis Ideate into your products.","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"readme":"# Vue Ideate\n\nA Vue 3 composable library for programmatically submitting content to Alis Ideate. This package provides utilities to capture and submit text notes, audio recordings, screenshots, and files directly to your Ideate collections.\n\n## Installation\n\n```bash\npnpm add @alis-build/vue-ideate @alis-build/ideate\n```\n\n## Prerequisites\n\n1. **Collection Token**: Get your token by creating a collection at [https://console.alisx.com/ideate/home/collections](https://console.alisx.com/ideate/home/collections)\n2. **Ideate Client**: You'll need to initialize an `IdeateServicePromiseClient` from the `@alis-build/ideate` package\n\n## Quick Start\n\n```typescript\nimport { useIdeate } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\n// Initialize the Ideate client\nconst client = new IdeateServicePromiseClient(\n  'https://your-ideate-endpoint.com',\n);\n\n// Use the composable\nconst { addNote, addAudioNote, addMultiFileUpload } = useIdeate(client);\n\n// Submit a text note\nawait addNote('YOUR_COLLECTION_TOKEN', 'This is my feedback!');\n```\n\n## Core Composables\n\n### `useIdeate(client)`\n\nThe main composable for submitting content to Ideate. It provides three methods for different types of submissions.\n\n**Parameters:**\n\n- `client`: An `IdeateServicePromiseClient` instance\n\n**Returns:**\n\n- `addNote(target, content)`: Submit a text note\n- `addAudioNote(target, content)`: Submit an audio recording\n- `addMultiFileUpload(target, files)`: Submit multiple files\n\n#### `addNote(target, content)`\n\nSubmit a text note to an Ideate collection.\n\n```typescript\nconst { addNote } = useIdeate(client);\n\ntry {\n  await addNote('YOUR_TOKEN', 'The login button is not working');\n  console.log('Note submitted successfully!');\n} catch (error) {\n  console.error('Failed to submit note:', error);\n}\n```\n\n**Parameters:**\n\n- `target` (string): Your collection token\n- `content` (string): The text content to submit\n\n#### `addAudioNote(target, content)`\n\nSubmit an audio recording to an Ideate collection.\n\n```typescript\nimport { useVoiceRecorder, useIdeate } from '@alis-build/vue-ideate';\n\nconst { start, stop, audioBlob } = useVoiceRecorder();\nconst { addAudioNote } = useIdeate(client);\n\n// Start recording\nawait start();\n\n// ... user records audio ...\n\n// Stop and submit\nawait stop();\nif (audioBlob.value) {\n  await addAudioNote('YOUR_TOKEN', audioBlob.value);\n}\n```\n\n**Parameters:**\n\n- `target` (string): Your collection token\n- `content` (Blob): The audio data as a Blob\n\n#### `addMultiFileUpload(target, files)`\n\nSubmit multiple files to an Ideate collection.\n\n```typescript\nimport { useIdeate } from '@alis-build/vue-ideate';\n\nconst { addMultiFileUpload } = useIdeate(client);\n\nconst files = [\n  {\n    blob: screenshotBlob,\n    filename: 'screenshot.png',\n    mimeType: 'image/png',\n  },\n  {\n    blob: logBlob,\n    filename: 'app.log',\n    mimeType: 'text/plain',\n  },\n];\n\nawait addMultiFileUpload('YOUR_TOKEN', files);\n```\n\n**Parameters:**\n\n- `target` (string): Your collection token\n- `files` (FileWrapper[]): Array of file objects with `blob`, `filename`, and `mimeType` properties\n\n### `useScreenRecorder`\n\nProvides functions and reactive state for recording the user's screen.\n\n**Example:**\n\n```vue\n<script setup>\n  import { useScreenRecorder } from '@alis-build/vue-ideate';\n\n  const {\n    isRecording,\n    recordingDurationFormatted,\n    videoUrl,\n    volumeLevel,\n    start,\n    stop,\n    deleteRecording,\n  } = useScreenRecorder();\n</script>\n\n<template>\n  <div>\n    <div v-if=\"isRecording\">\n      Recording... {{ recordingDurationFormatted }}\n      <button @click=\"stop\">Stop</button>\n    </div>\n    <div v-else>\n      <button @click=\"start\">Record Screen</button>\n    </div>\n    <div v-if=\"videoUrl\">\n      <video :src=\"videoUrl\" controls></video>\n      <button @click=\"deleteRecording\">Delete Recording</button>\n    </div>\n  </div>\n</template>\n```\n\nThe `volumeLevel` is a reactive number between 0 and 1 that represents the current microphone volume. You can use it to create a visual indicator that the microphone is active.\n\n### `useVoiceRecorder`\n\nProvides functions and reactive state for recording the user's voice.\n\n**Example:**\n\n```vue\n<script setup>\n  import { useVoiceRecorder } from '@alis-build/vue-ideate';\n\n  const {\n    isRecording,\n    recordingDurationFormatted,\n    audioUrl,\n    volumeLevel,\n    start,\n    stop,\n    deleteRecording,\n  } = useVoiceRecorder();\n</script>\n\n<template>\n  <div>\n    <div v-if=\"isRecording\">\n      Recording... {{ recordingDurationFormatted }}\n      <button @click=\"stop\">Stop</button>\n    </div>\n    <div v-else>\n      <button @click=\"start\">Record Voice</button>\n    </div>\n    <div v-if=\"audioUrl\">\n      <audio :src=\"audioUrl\" controls></audio>\n      <button @click=\"deleteRecording\">Delete Recording</button>\n    </div>\n  </div>\n</template>\n```\n\nThe `volumeLevel` is a reactive number between 0 and 1 that represents the current microphone volume. You can use it to create a visual indicator that the microphone is active.\n\n### `useScreenshot`\n\nProvides functions and reactive state for taking a screenshot of the current tab.\n\n**Example:**\n\n```vue\n<script setup>\n  import { useScreenshot } from '@alis-build/vue-ideate';\n\n  const { screenshotUrl, isLoading, error, takeScreenshot, clearScreenshot } =\n    useScreenshot();\n</script>\n\n<template>\n  <div>\n    <button @click=\"takeScreenshot\" :disabled=\"isLoading\">\n      {{ isLoading ? 'Taking...' : 'Take Screenshot' }}\n    </button>\n    <div v-if=\"error\">{{ error }}</div>\n    <div v-if=\"screenshotUrl\">\n      <img :src=\"screenshotUrl\" alt=\"Screenshot\" />\n      <button @click=\"clearScreenshot\">Clear Screenshot</button>\n    </div>\n  </div>\n</template>\n```\n\n## Workflows\n\nHere are practical workflows for using `@alis-build/vue-ideate` to capture and submit different types of content.\n\n### 1. Simple Text Feedback\n\nSubmit a text note directly to your Ideate collection.\n\n```typescript\nimport { useIdeate } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\nconst { addNote } = useIdeate(client);\n\nasync function submitFeedback(userText: string) {\n  try {\n    await addNote(token, userText);\n    console.log('Feedback submitted!');\n  } catch (error) {\n    console.error('Failed to submit:', error);\n  }\n}\n```\n\n### 2. Voice Note Submission\n\nRecord and submit audio feedback.\n\n```typescript\nimport { useIdeate, useVoiceRecorder } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\n\nconst { addAudioNote } = useIdeate(client);\nconst { start, stop, audioBlob, isRecording } = useVoiceRecorder();\n\nasync function recordAndSubmit() {\n  // Start recording\n  await start();\n\n  // Wait for user to finish...\n  // Then stop recording\n  await stop();\n\n  // Submit the audio\n  if (audioBlob.value) {\n    try {\n      await addAudioNote(token, audioBlob.value);\n      console.log('Voice note submitted!');\n    } catch (error) {\n      console.error('Failed to submit:', error);\n    }\n  }\n}\n```\n\n### 3. Screenshot Submission\n\nCapture a screenshot and submit it along with other files.\n\n```typescript\nimport { useIdeate, useScreenshot } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\n\nconst { addMultiFileUpload } = useIdeate(client);\nconst { takeScreenshot, screenshotBlob } = useScreenshot();\n\nasync function captureAndSubmit() {\n  await takeScreenshot();\n\n  if (screenshotBlob.value) {\n    const files = [\n      {\n        blob: screenshotBlob.value,\n        filename: 'screenshot.png',\n        mimeType: 'image/png',\n      },\n    ];\n\n    try {\n      await addMultiFileUpload(token, files);\n      console.log('Screenshot submitted!');\n    } catch (error) {\n      console.error('Failed to submit:', error);\n    }\n  }\n}\n```\n\n### 4. Screen Recording Submission\n\nRecord the screen and submit the video.\n\n```typescript\nimport { useIdeate, useScreenRecorder } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\n\nconst { addMultiFileUpload } = useIdeate(client);\nconst { start, stop, videoBlob, isRecording } = useScreenRecorder();\n\nasync function recordAndSubmit() {\n  // Start recording\n  await start();\n\n  // Wait for user to finish...\n  // Then stop recording\n  await stop();\n\n  // Submit the video\n  if (videoBlob.value) {\n    const files = [\n      {\n        blob: videoBlob.value,\n        filename: 'screen-recording.webm',\n        mimeType: 'video/webm',\n      },\n    ];\n\n    try {\n      await addMultiFileUpload(token, files);\n      console.log('Screen recording submitted!');\n    } catch (error) {\n      console.error('Failed to submit:', error);\n    }\n  }\n}\n```\n\n### 5. Multiple Files Submission\n\nSubmit multiple files at once (screenshots, logs, etc.).\n\n```typescript\nimport { useIdeate } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\n\nconst { addMultiFileUpload } = useIdeate(client);\n\nasync function submitMultipleFiles(userFiles: File[]) {\n  // Convert File objects to FileWrapper format\n  const files = await Promise.all(\n    userFiles.map(async (file) => ({\n      blob: file,\n      filename: file.name,\n      mimeType: file.type,\n    })),\n  );\n\n  try {\n    await addMultiFileUpload(token, files);\n    console.log('Files submitted!');\n  } catch (error) {\n    console.error('Failed to submit:', error);\n  }\n}\n```\n\n### 6. Combined: Screen Recording + Log File\n\nSubmit a screen recording along with a log file for comprehensive bug reports.\n\n```typescript\nimport { useIdeate, useScreenRecorder } from '@alis-build/vue-ideate';\nimport { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\nconst client = new IdeateServicePromiseClient('https://your-endpoint.com');\nconst token = 'YOUR_COLLECTION_TOKEN';\n\nconst { addMultiFileUpload } = useIdeate(client);\nconst { start, stop, videoBlob } = useScreenRecorder();\n\nasync function submitBugReport(logFile: File) {\n  // Start recording\n  await start();\n\n  // User reproduces the bug...\n\n  // Stop recording\n  await stop();\n\n  // Submit both video and log file\n  if (videoBlob.value) {\n    const files = [\n      {\n        blob: videoBlob.value,\n        filename: 'bug-reproduction.webm',\n        mimeType: 'video/webm',\n      },\n      {\n        blob: logFile,\n        filename: logFile.name,\n        mimeType: logFile.type,\n      },\n    ];\n\n    try {\n      await addMultiFileUpload(token, files);\n      console.log('Bug report submitted!');\n    } catch (error) {\n      console.error('Failed to submit:', error);\n    }\n  }\n}\n```\n\n### 7. Complete Vue Component Example\n\nA full example showing how to build a feedback widget.\n\n```vue\n<script setup lang=\"ts\">\n  import { ref } from 'vue';\n  import {\n    useIdeate,\n    useVoiceRecorder,\n    useScreenshot,\n  } from '@alis-build/vue-ideate';\n  import { IdeateServicePromiseClient } from '@alis-build/ideate/alis/ideate/ideate_grpc_web_pb';\n\n  const client = new IdeateServicePromiseClient('https://your-endpoint.com');\n  const token = 'YOUR_COLLECTION_TOKEN';\n\n  const { addNote, addAudioNote, addMultiFileUpload } = useIdeate(client);\n  const {\n    start: startVoice,\n    stop: stopVoice,\n    audioBlob,\n    isRecording: isRecordingVoice,\n  } = useVoiceRecorder();\n  const { takeScreenshot, screenshotBlob } = useScreenshot();\n\n  const feedbackText = ref('');\n  const isSubmitting = ref(false);\n\n  async function submitTextFeedback() {\n    if (!feedbackText.value) return;\n\n    isSubmitting.value = true;\n    try {\n      await addNote(token, feedbackText.value);\n      feedbackText.value = '';\n      alert('Feedback submitted!');\n    } catch (error) {\n      alert('Failed to submit feedback');\n    } finally {\n      isSubmitting.value = false;\n    }\n  }\n\n  async function submitVoiceFeedback() {\n    if (!audioBlob.value) return;\n\n    isSubmitting.value = true;\n    try {\n      await addAudioNote(token, audioBlob.value);\n      alert('Voice note submitted!');\n    } catch (error) {\n      alert('Failed to submit voice note');\n    } finally {\n      isSubmitting.value = false;\n    }\n  }\n\n  async function submitScreenshot() {\n    await takeScreenshot();\n\n    if (!screenshotBlob.value) return;\n\n    isSubmitting.value = true;\n    try {\n      const files = [\n        {\n          blob: screenshotBlob.value,\n          filename: 'screenshot.png',\n          mimeType: 'image/png',\n        },\n      ];\n      await addMultiFileUpload(token, files);\n      alert('Screenshot submitted!');\n    } catch (error) {\n      alert('Failed to submit screenshot');\n    } finally {\n      isSubmitting.value = false;\n    }\n  }\n</script>\n\n<template>\n  <div class=\"feedback-widget\">\n    <h2>Submit Feedback</h2>\n\n    <!-- Text Feedback -->\n    <div>\n      <textarea\n        v-model=\"feedbackText\"\n        placeholder=\"Enter your feedback...\"\n      ></textarea>\n      <button\n        @click=\"submitTextFeedback\"\n        :disabled=\"isSubmitting || !feedbackText\"\n      >\n        Submit Text\n      </button>\n    </div>\n\n    <!-- Voice Feedback -->\n    <div>\n      <button v-if=\"!isRecordingVoice\" @click=\"startVoice\">\n        Start Voice Recording\n      </button>\n      <button v-else @click=\"stopVoice\">Stop Recording</button>\n      <button\n        v-if=\"audioBlob\"\n        @click=\"submitVoiceFeedback\"\n        :disabled=\"isSubmitting\"\n      >\n        Submit Voice Note\n      </button>\n    </div>\n\n    <!-- Screenshot -->\n    <div>\n      <button @click=\"submitScreenshot\" :disabled=\"isSubmitting\">\n        Take & Submit Screenshot\n      </button>\n    </div>\n  </div>\n</template>\n```\n\n## API Reference\n\n### FileWrapper Interface\n\nThe `FileWrapper` interface is used when submitting files:\n\n```typescript\ninterface FileWrapper {\n  blob: Blob; // The file data\n  filename: string; // Name of the file (e.g., 'screenshot.png')\n  mimeType?: string; // MIME type (e.g., 'image/png', 'video/webm')\n}\n```\n\n## Error Handling\n\nAll submission methods (`addNote`, `addAudioNote`, `addMultiFileUpload`) throw errors on failure. Always wrap them in try-catch blocks:\n\n```typescript\ntry {\n  await addNote(token, content);\n} catch (error) {\n  console.error('Submission failed:', error);\n  // Handle error (show user message, retry, etc.)\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}