{"_id":"@booklyease/extensions-vue","_rev":"2-04640a13b87c9c93b5f55003b1d49a37","name":"@booklyease/extensions-vue","dist-tags":{"latest":"0.3.0"},"versions":{"0.2.0":{"name":"@booklyease/extensions-vue","version":"0.2.0","keywords":["booklyease","extensions","plugins","vue"],"license":"MIT","_id":"@booklyease/extensions-vue@0.2.0","maintainers":[{"name":"jcube","email":"alteraweb53@gmail.com"}],"dist":{"shasum":"00a530833a3a9da783fa8a367fa71f9900ab0c77","tarball":"https://registry.npmjs.org/@booklyease/extensions-vue/-/extensions-vue-0.2.0.tgz","fileCount":8,"integrity":"sha512-zp17hMkcB3GEtLomx+yzH+GQfaacz+HscnhtaPnXEvlihDlygQ8JcmyxRVmViEPUYzDyjAkIUEuoZ4QFTeRziw==","signatures":[{"sig":"MEUCIQCq+2pg3/uQqR3GlvTGGW9G1l2yuBPTV1PZ4lF89/CGgQIgWqHLE9TQ116E9U7TA2KnVD4LLlqSTLHDn5BUk+yQ2yc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18043},"type":"module","exports":{".":"./src/index.ts"},"gitHead":"7ba094c587e6184a6853681a081eca48a2c2eac5","_npmUser":{"name":"jcube","email":"alteraweb53@gmail.com"},"_npmVersion":"11.17.0","description":"Vue SDK for sandboxed native UI extensions in Booklyease","directories":{},"_nodeVersion":"20.19.0","dependencies":{"@booklyease/extensions-protocol":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/extensions-vue_0.2.0_1784104728467_0.4839606163440955","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@booklyease/extensions-vue","version":"0.3.0","description":"Vue SDK for sandboxed native UI extensions in Booklyease","type":"module","exports":{".":"./src/index.ts"},"dependencies":{"@booklyease/extensions-protocol":"^0.3.0"},"peerDependencies":{"vue":"^3.5.0"},"publishConfig":{"access":"public"},"keywords":["booklyease","extensions","plugins","vue"],"license":"MIT","gitHead":"458cabcc283dd02ec15f78abb5da099e8a5393c1","_id":"@booklyease/extensions-vue@0.3.0","_nodeVersion":"20.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-2+g4k5AtkZcKrAzOqddNpiOjQtiank+zOlaeHqSE2BnY1RwbvMDOU62baCtfO3L9nBp/4hqg4U4276NPRd+gFg==","shasum":"982f775375aedf3b8ce69fad4d7bf6b7b30599c7","tarball":"https://registry.npmjs.org/@booklyease/extensions-vue/-/extensions-vue-0.3.0.tgz","fileCount":10,"unpackedSize":19737,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD764INlRZlkzLxV5KilYgdVs9vIBswXt8pP8XS4bS7YgIgQtEfVcXCSPFdQ53t546/E8bRegZ4PKJETVplMkEzsYI="}]},"_npmUser":{"name":"jcube","email":"alteraweb53@gmail.com"},"directories":{},"maintainers":[{"name":"jcube","email":"alteraweb53@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/extensions-vue_0.3.0_1784110926279_0.4938363557499561"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T08:38:48.359Z","modified":"2026-07-15T10:22:06.558Z","0.2.0":"2026-07-15T08:38:48.625Z","0.3.0":"2026-07-15T10:22:06.444Z"},"license":"MIT","keywords":["booklyease","extensions","plugins","vue"],"description":"Vue SDK for sandboxed native UI extensions in Booklyease","maintainers":[{"name":"jcube","email":"alteraweb53@gmail.com"}],"readme":"# @booklyease/extensions-vue\n\nVue SDK for Booklyease Native UI extensions. Extension code runs in an isolated\nWeb Worker. It never receives DOM access. Components from this package describe\nthe interface; Booklyease renders the real Vue/Vuetify components using its own\ndesign system, locale and theme.\n\n## Install\n\n```bash\nnpm install @booklyease/extensions-vue vue\n```\n\n`vue` is a peer dependency. Use Vue 3.5 or newer.\n\n## Worker entry\n\n```ts\nimport { startExtensionWorker } from '@booklyease/extensions-vue'\n\nstartExtensionWorker(() => import('./Extension.vue'))\n```\n\nWhen building a browser Worker bundle, replace Vue's Node-only environment\ncheck at compile time:\n\n```ts\n// vite.config.ts\nexport default defineConfig({\n  define: {\n    'process.env.NODE_ENV': JSON.stringify('production'),\n  },\n})\n```\n\n## Components\n\n### Layout and content\n\n- `BStack`, `BSpacer`, `BGrid`, `BCard`, `BPanelSection`, `BKeyValue`\n- `BText`, `BIcon`, `BDivider`\n\n### Actions and navigation\n\n- `BButton`, `BIconButton`\n- `BTabs`, `BPagination`\n\n### Data\n\n- `BStatCard` — Booklyease analytics KPI card\n- `BTable` — native data table with optional rich cells\n- `BBadge`\n\n### Forms and filters\n\n- `BTextField`, `BTextarea`, `BSelect`\n- `BCheckbox`, `BSwitch`, `BSearchField`\n\nAll value components use Vue's regular `v-model` contract.\n\n### Feedback and detail flows\n\n- `BAlert`, `BSpinner`, `BEmptyState`, `BDialog`\n- `BSidePanel` — the docked detail panel used across Calendar, POS and Staff\n\n## Example\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport {\n  BButton,\n  BGrid,\n  BSidePanel,\n  BStatCard,\n  BTable,\n} from '@booklyease/extensions-vue'\n\nconst selected = ref<Record<string, unknown> | null>(null)\nconst rows = [{ id: 'lead-1', name: 'Ana Popescu', status: { text: 'New', tone: 'info' } }]\nconst columns = [{ key: 'name', label: 'Client' }, { key: 'status', label: 'Status' }]\n</script>\n\n<template>\n  <BGrid :columns=\"3\">\n    <BStatCard label=\"Leads\" value=\"128\" icon=\"mdi-inbox-outline\" tone=\"brand\" />\n  </BGrid>\n  <BTable :columns=\"columns\" :rows=\"rows\" @row-click=\"selected = $event\" />\n  <BSidePanel :open=\"Boolean(selected)\" title=\"Lead\" @close=\"selected = null\">\n    <BButton>Open customer</BButton>\n  </BSidePanel>\n</template>\n```\n\nThe SDK intentionally ships no visual CSS. Updating the Booklyease host design\nupdates every installed extension without requiring extension authors to rebuild.\n\n## Vendor API\n\nNative Workers have no direct `fetch`, cookies, storage or DOM access. An\n`app.page` extension calls its own backend through the authenticated host bridge:\n\n```ts\nimport { extensionApi } from '@booklyease/extensions-vue'\n\nconst leads = await extensionApi.get('/leads', { status: 'new' })\nawait extensionApi.post('/leads/lead_123/status', { status: 'progress' })\n```\n\nOnly relative paths are accepted. The host sends them to the `/api/*` origin of\nthe installed plugin page and owns the short-lived vendor session.\n","readmeFilename":"README.md"}