Subscribe

Installation

Run the following command

npx vibes@latest add subscribe

Usage

function Usage() {  return (      <Subscribe          action={action}          description="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor."          image={image}          title="Sign up for our newsletter"      />  );} const image = {  src: 'https://storage.googleapis.com/s.mkswft.com/RmlsZTpiZTZmZGU0OC1jYWEzLTRmNzUtYTFhNy03NzNlNThiMTJlZWE=/lady-with-plant.jpeg',  alt: 'Lady with plant',};async function action(   _lastResult: { lastResult: SubmissionResult | null },  formData: FormData,) {  'use server';  const submission = parseWithZod(formData, { schema });  if (submission.status !== 'success') {      return { lastResult: submission.reply({ formErrors: ['Boom!'] }) };  }  // Simulate subscribing a user  await new Promise((resolve) => setTimeout(resolve, 1000));  return { lastResult: submission.reply(), successMessage: 'Subscribed!' };}

API Reference

SubscribeProps

PropTypeDefault
action*
SubscribeAction
image
Image
title*
string
description
string
placeholder
string

ForgotPasswordAction

type Action<State, Payload> = (state: Awaited<State>, payload: Payload) => State | Promise<State>;type SubscribeAction = Action<  { lastResult: SubmissionResult | null; successMessage?: string },  FormData>;

This component uses Confom to handle form submissions. Refer to the Conform docs for more details.

Here's an example of an action function that does validation and simulates subscribe a user:

async function action(_lastResult: { lastResult: SubmissionResult | null }, formData: FormData) {  'use server';  const submission = parseWithZod(formData, { schema });  if (submission.status !== 'success') {    return { lastResult: submission.reply({ formErrors: ['Boom!'] }) };  }  // Simulate subscribing a user  await new Promise((resolve) => setTimeout(resolve, 1000));  return { lastResult: submission.reply(), successMessage: 'Subscribed!' };}

Image

PropTypeDefault
src*
string
alt*
string

CSS Variables

This component supports various CSS variables for theming. Here's a comprehensive list.

:root {  --subscribe-font-family: var(--font-family-body);  --subscribe-title-font-family: var(--font-family-heading);  --subscribe-background: var(--primary-shadow);  --subscribe-title: var(--primary-highlight);  --subscribe-description: var(--primary-highlight);}