From harness-claude
Implements Vue renderless components to extract behavior like toggles, fetches, or form validation, delegating all rendering and markup to consumers via scoped slots. For component libraries or Vue 2 patterns.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Extract behavior into components that render nothing, delegating all rendering to the consumer via slots
Provides patterns for Vue components including props validation with TypeScript, defaults, emits, slots, and provide/inject. Use when building reusable Vue components.
Applies Vue slots pattern with named, scoped, and dynamic slots to build flexible composable components like Cards, Modals, tables, and lists.
Enforces Vue 3 best practices with Composition API, <script setup>, and TypeScript. Covers reactivity gotchas, computed properties, performance optimizations, SSR, Volar, vue-tsc for .vue files, Vue Router, Pinia, Vite projects.
Share bugs, ideas, or general feedback.
Extract behavior into components that render nothing, delegating all rendering to the consumer via slots
<slot v-bind="slotProps"> to pass data and actions to the parent via scoped slots.<!-- RenderlessToggle.vue -->
<script setup>
import { ref } from 'vue';
const isOpen = ref(false);
const toggle = () => {
isOpen.value = !isOpen.value;
};
</script>
<template>
<slot :isOpen="isOpen" :toggle="toggle" />
</template>
<RenderlessToggle v-slot="{ isOpen, toggle }">.Renderless (headless) components separate behavior from presentation. The component owns the logic (state, side effects, event handling) and exposes it via scoped slots. The consumer owns the template. This is the Vue equivalent of React's render props pattern.
Trade-offs:
When NOT to use:
ref inline in <script setup> is clearerhttps://patterns.dev/vue/renderless-components