UiPool v0.2.0

Framework Examples

See how to annotate patterns and components in different frameworks.

React #

In React components, use standard JavaScript comments:

UserProfile.tsx
// uipool-pattern: user-profile
// uipool-component: avatar
export function UserProfile({ user }) {
  return (
    <div className="profile">
      <Avatar src={user.avatar} />
      <h1>{user.name}</h1>
    </div>
  );
}

Vue #

In Vue single-file components, you can use comments in both template and script sections:

Dashboard.vue
<template>
  <!-- uipool-pattern: dashboard -->
  <div class="dashboard">
    <!-- uipool-component: stats-widget -->
    <StatsWidget :data="stats" />
  </div>
</template>

<script setup>
// uipool-pattern: dashboard
import StatsWidget from "./StatsWidget.vue";
</script>

Angular #

In Angular templates, use HTML comments:

user-list.component.html
<!-- uipool-pattern: user-list -->
<div class="user-list">
  <!-- uipool-component: user-card -->
  <app-user-card *ngFor="let user of users" [user]="user" />
</div>

Svelte #

In Svelte components:

ProductCard.svelte
<!-- uipool-pattern: product-card -->
<script>
  // uipool-component: price-tag
  import PriceTag from './PriceTag.svelte';
  export let product;
</script>

<div class="product-card">
  <img src={product.image} alt={product.name} />
  <PriceTag price={product.price} />
</div>

Next.js #

Next.js pages and components work just like React:

app/checkout/page.tsx
// uipool-pattern: checkout-flow
export default function CheckoutPage() {
  return (
    <main>
      {/* uipool-component: cart-summary */}
      <CartSummary />
      
      {/* uipool-component: payment-form */}
      <PaymentForm />
    </main>
  );
}

Nuxt #

Nuxt pages and components work just like Vue:

pages/settings.vue
<template>
  <!-- uipool-pattern: settings-page -->
  <div class="settings">
    <!-- uipool-component: settings-form -->
    <SettingsForm :user="user" />
  </div>
</template>

<script setup>
// uipool-pattern: settings-page
const user = useUser();
</script>