AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Create Vue Component

skill-jeffsenso-prestashop-skills-create-vue-component · by jeffsenso

>

No reviews yet
0 installs
30 views
0.0% view→install

Install

$ agentstack add skill-jeffsenso-prestashop-skills-create-vue-component

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-jeffsenso-prestashop-skills-create-vue-component)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Create Vue Component? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

create-vue-component

Read @.ai/Component/Javascript/CONTEXT.md for the Vue integration overview.

> This is NOT the default pattern. Most admin pages use initComponents() with > standard PS components. Only use Vue when a page section requires complex interactivity > that standard form types and JS components cannot provide.

When to use Vue

  • Dynamic row tables (add/remove rows, reorder) — e.g. carrier ranges
  • Complex filtering/search UIs with real-time updates — e.g. combination filters
  • Sections with heavy state synchronization between multiple fields
  • Interactive modals with multi-step workflows

When NOT to use Vue: simple forms, standard CRUD, toggle switches, translatable fields — all handled by initComponents.

Integration pattern

Vue components are mounted on one section of a Symfony page, not the entire page. The rest of the page remains standard Symfony/Twig + PS components.

1. Create the Vue SFC

admin-dev/themes/new-theme/js/pages/{domain}/components/{ComponentName}.vue

Standard Vue 3 SFC with `, , `. Use Composition API.

2. Create the initialization function

// admin-dev/themes/new-theme/js/pages/{domain}/components/init{ComponentName}.ts
import {createApp} from 'vue';
import {createI18n} from 'vue-i18n';
import ComponentName from './ComponentName.vue';

export default function initComponentName(
  selector: string,
  eventEmitter: typeof EventEmitter,
  initialData: SomeType,
): void {
  const container = document.querySelector(selector);
  if (!container) return;

  const translations = JSON.parse(container.dataset.translations || '{}');
  const i18n = createI18n({locale: 'en', messages: {en: translations}});

  const app = createApp(ComponentName, {
    eventEmitter,
    initialData,
  });
  app.use(i18n);
  app.mount(selector);
}

3. Call from the page entry point

// In form/index.ts or edit/index.ts
import initComponentName from './components/initComponentName';

$(() => {
  // Standard components first
  window.prestashop.component.initComponents(['TranslatableInput']);

  // Vue section
  const eventEmitter = window.prestashop.instance.eventEmitter;
  initComponentName('#vue-mount-point', eventEmitter, initialData);
});

4. Symfony/Twig side

The Twig template provides the mount point with initial data as data-* attributes:

A dedicated FormType can bridge PHP form data to the Vue component via hidden fields and data-* attributes.

Reference: admin-dev/themes/new-theme/js/pages/product/combination/ — combination listing with filters, generator modal, bulk actions

Communication with the rest of the page

  • Use EventEmitter for events between Vue and non-Vue sections
  • Vue component receives eventEmitter as a prop
  • Emits events that the TypeScript entry point or other components listen to
  • Hidden form fields sync Vue state back to the Symfony form for submission

Rules

Conventions (Composition API required, vue-i18n setup, hidden form field sync, EventEmitter as prop) are in [Javascript/CONTEXT.md](../../CONTEXT.md). Skill-specific reminders:

  • Vue is the exception, not the default — justify its use
  • Mount on a specific DOM selector, not the entire page

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.