Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill vue-component명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | vue-component |
| description | | Use when this capability is needed. |
Quand l'utilisateur demande de créer un composant Vue, applique ce template et ces règles.
templates/CardItem.vue — composant carte fidélité complet (modes merchant + client)templates/CardForm.vue — formulaire avec validation Zod, UForm, UInputNumber<script setup lang="ts">
// 1. Types importés (import type uniquement)
import type { Card } from '~/composables/useDB'
// 2. Props typées avec générics
const props = defineProps<{
requiredProp: string
optionalProp?: number
complexProp: Card
}>()
// 3. Emits typés avec tuple syntax
const emit = defineEmits<{
updated: [id: string, value: number]
deleted: [id: string]
}>()
// 4. Composables Nuxt (auto-importés, pas d'import manuel)
const toast = useToast()
// 5. State local
const isLoading = ref(false)
// 6. Computed (logique hors template)
const displayValue = computed(() => props.optionalProp ?? 0)
// 7. Fonctions (async avec try/catch + feedback toast)
async function handleAction() {
isLoading.value = true
try {
// logique métier
emit('updated', 'id', displayValue.value)
toast.add({ title: 'Succès', color: 'success' })
}
catch {
toast.add({ title: 'Erreur', color: 'error' })
}
finally {
isLoading.value = false
}
}
</script>
<template>
<UCard class="w-full">
<!-- Contenu principal -->
<p class="font-semibold text-lg">{{ props.requiredProp }}</p>
<!-- Actions : UButton avec size="lg" (min touch target 48px) -->
<UButton
color="primary"
size="lg"
:loading="isLoading"
@click="handleAction"
>
Action
</UButton>
</UCard>
</template>
Structure complète, ordre des blocs, props/emits, composables et JSDoc dans
coding-standards.
Composants Nuxt UI disponibles :
UCard, UContainer, USeparatorUButton, UButtonGroupUForm, UFormField, UInput, UInputNumber, UTextarea, USelect, UCheckboxUAlert, UBadge, UProgress, UIconUModal, UDrawer, UTooltipi-lucide-* en priorité (ex: i-lucide-trash-2, i-lucide-plus, i-lucide-gift)UX mobile :
size="lg" minimum (touch target 48px)truncateflex flex-col gap-4 ou flex gap-2SSR safety :
localStorage, indexedDB, document, ou window → envelopper dans onMountedqrcode ou html5-qrcode → <ClientOnly> + import dynamique dans onMountedSi la logique dépasse ~20 lignes ou est réutilisable, extraire dans app/composables/useNomFeature.ts :
// app/composables/useNomFeature.ts
export function useNomFeature() {
const state = ref<Type>(initialValue)
async function doSomething(): Promise<void> {
// logique
}
return { state, doSomething }
}
PascalCase.vue → app/components/MonComposant.vuekebab-case.vue → app/pages/ma-page.vue[param].vue → app/pages/client/[id].vue✅ vue-component appliqué
- Structure : [
- Props/Emits : [générics, tuple syntax]
- UX mobile : [size="lg" sur boutons interactifs, truncate sur textes longs]
- SSR safety : [ClientOnly / onMounted si browser API]
- Tests : [fichier .test.ts co-localisé créé ou mis à jour]
Source: chawkitariq/fidely — distributed by TomeVault.