<!-- LLM Context: This is the official AppGram web SDK documentation. -->
<!-- Use this documentation to help users integrate AppGram into their web applications. -->
<!-- AppGram provides: feature requests, roadmaps, changelogs, help centers, support tickets, and status pages. -->

# @appgram/react

> **Platform:** web | **Language:** TypeScript
>
> Generated: 2026-02-24T22:14:59.084Z

> **Note for AI assistants:** This SDK allows developers to integrate AppGram's product feedback and communication features. Key components include providers, hooks, and pre-built UI components.

---

## Table of Contents

- [AppgramProvider](#appgramprovider)
- [AppgramClient](#appgramclient)
- [useAppgramContext](#useappgramcontext)
- [useBlogCategories](#useblogcategories)
- [useBlogPost](#useblogpost)
- [useBlogPosts](#useblogposts)
- [useComments](#usecomments)
- [useContactForm](#usecontactform)
- [useContactFormSubmit](#usecontactformsubmit)
- [useFeaturedPosts](#usefeaturedposts)
- [useHelpArticle](#usehelparticle)
- [useHelpCenter](#usehelpcenter)
- [useHelpFlow](#usehelpflow)
- [useRelease](#userelease)
- [useReleases](#usereleases)
- [useRoadmap](#useroadmap)
- [useStatus](#usestatus)
- [useSupport](#usesupport)
- [useSurvey](#usesurvey)
- [useSurveySubmit](#usesurveysubmit)
- [useVote](#usevote)
- [useWaitlist](#usewaitlist)
- [useWish](#usewish)
- [useWishes](#usewishes)
- [Blog](#blog)
- [BlogCard](#blogcard)
- [BlogList](#bloglist)
- [BlogPostDetail](#blogpostdetail)
- [ChatWidget](#chatwidget)
- [ContactFormRenderer](#contactformrenderer)
- [HelpArticleDetail](#helparticledetail)
- [HelpArticles](#helparticles)
- [HelpCenter](#helpcenter)
- [HelpCollections](#helpcollections)
- [ReleaseCard](#releasecard)
- [ReleaseDetail](#releasedetail)
- [ReleaseList](#releaselist)
- [Releases](#releases)
- [RoadmapBoard](#roadmapboard)
- [RoadmapColumn](#roadmapcolumn)
- [StatusBoard](#statusboard)
- [StatusIncidentDetail](#statusincidentdetail)
- [SubmitWishForm](#submitwishform)
- [SupportForm](#supportform)
- [SurveyRenderer](#surveyrenderer)
- [VoteButton](#votebutton)
- [WhatsNewPopup](#whatsnewpopup)
- [WishCard](#wishcard)
- [WishDetail](#wishdetail)
- [WishList](#wishlist)
- [SubmitWishFormProps](#submitwishformprops)
- [UseVoteOptions](#usevoteoptions)
- [UseVoteResult](#usevoteresult)
- [UseWishesOptions](#usewishesoptions)
- [UseWishesResult](#usewishesresult)
- [UseWishOptions](#usewishoptions)
- [UseWishResult](#usewishresult)
- [Vote](#vote)
- [VoteButtonProps](#votebuttonprops)
- [VoteCheckResponse](#votecheckresponse)
- [VoteCreateInput](#votecreateinput)
- [VoteState](#votestate)
- [Wish](#wish)
- [WishAuthor](#wishauthor)
- [WishCardProps](#wishcardprops)
- [WishDetailProps](#wishdetailprops)
- [WishesResponse](#wishesresponse)
- [WishFilters](#wishfilters)
- [WishListProps](#wishlistprops)
- [HelpArticle](#helparticle)
- [HelpArticleDetailProps](#helparticledetailprops)
- [HelpArticlesProps](#helparticlesprops)
- [HelpArticlesResponse](#helparticlesresponse)
- [HelpCenterData](#helpcenterdata)
- [HelpCenterProps](#helpcenterprops)
- [HelpCollection](#helpcollection)
- [HelpCollectionsProps](#helpcollectionsprops)
- [HelpFlow](#helpflow)
- [UseHelpArticleOptions](#usehelparticleoptions)
- [UseHelpArticleResult](#usehelparticleresult)
- [UseHelpCenterOptions](#usehelpcenteroptions)
- [UseHelpCenterResult](#usehelpcenterresult)
- [UseHelpFlowOptions](#usehelpflowoptions)
- [UseHelpFlowResult](#usehelpflowresult)
- [Release](#release)
- [ReleaseCardProps](#releasecardprops)
- [ReleaseDetailProps](#releasedetailprops)
- [ReleaseFeature](#releasefeature)
- [ReleaseListProps](#releaselistprops)
- [ReleasesProps](#releasesprops)
- [ReleasesResponse](#releasesresponse)
- [UseReleaseOptions](#usereleaseoptions)
- [UseReleaseResult](#usereleaseresult)
- [UseReleasesOptions](#usereleasesoptions)
- [UseReleasesResult](#usereleasesresult)
- [Roadmap](#roadmap)
- [RoadmapBoardProps](#roadmapboardprops)
- [RoadmapColumnProps](#roadmapcolumnprops)
- [RoadmapColumnType](#roadmapcolumntype)
- [RoadmapData](#roadmapdata)
- [RoadmapItem](#roadmapitem)
- [UseRoadmapOptions](#useroadmapoptions)
- [UseRoadmapResult](#useroadmapresult)
- [IncidentUpdate](#incidentupdate)
- [StatusBoardProps](#statusboardprops)
- [StatusComponent](#statuscomponent)
- [StatusData](#statusdata)
- [StatusIncident](#statusincident)
- [StatusIncidentDetailProps](#statusincidentdetailprops)
- [StatusPage](#statuspage)
- [StatusPageOverview](#statuspageoverview)
- [StatusPageService](#statuspageservice)
- [StatusUpdateApi](#statusupdateapi)
- [UseStatusOptions](#usestatusoptions)
- [UseStatusResult](#usestatusresult)
- [WaitlistStatus](#waitliststatus)
- [SupportAttachment](#supportattachment)
- [SupportFormProps](#supportformprops)
- [SupportMessage](#supportmessage)
- [SupportRequest](#supportrequest)
- [SupportRequestInput](#supportrequestinput)
- [SupportRequestsResponse](#supportrequestsresponse)
- [UseSupportOptions](#usesupportoptions)
- [UseSupportResult](#usesupportresult)
- [ApiResponse](#apiresponse)
- [AppgramClientConfig](#appgramclientconfig)
- [AppgramConfig](#appgramconfig)
- [AppgramContextValue](#appgramcontextvalue)
- [AppgramProviderProps](#appgramproviderprops)
- [AppgramTheme](#appgramtheme)
- [BlogCardProps](#blogcardprops)
- [BlogCategory](#blogcategory)
- [BlogFilters](#blogfilters)
- [BlogListProps](#bloglistprops)
- [BlogPost](#blogpost)
- [BlogPostDetailProps](#blogpostdetailprops)
- [BlogPostsResponse](#blogpostsresponse)
- [BlogProps](#blogprops)
- [Category](#category)
- [ChatSource](#chatsource)
- [ChatWidgetProps](#chatwidgetprops)
- [Comment](#comment)
- [CommentAuthor](#commentauthor)
- [CommentCreateInput](#commentcreateinput)
- [CommentsResponse](#commentsresponse)
- [ContactForm](#contactform)
- [ContactFormField](#contactformfield)
- [ContactFormFieldValidation](#contactformfieldvalidation)
- [ContactFormRendererProps](#contactformrendererprops)
- [ContactFormSubmission](#contactformsubmission)
- [ContactFormSubmitInput](#contactformsubmitinput)
- [CustomColors](#customcolors)
- [CustomTypography](#customtypography)
- [LayoutConfig](#layoutconfig)
- [PaginatedResponse](#paginatedresponse)
- [QuickAction](#quickaction)
- [Survey](#survey)
- [SurveyAnswer](#surveyanswer)
- [SurveyNode](#surveynode)
- [SurveyNodeBranch](#surveynodebranch)
- [SurveyNodeOption](#surveynodeoption)
- [SurveyRendererProps](#surveyrendererprops)
- [SurveyResponse](#surveyresponse)
- [SurveySubmitInput](#surveysubmitinput)
- [UseBlogCategoriesOptions](#useblogcategoriesoptions)
- [UseBlogCategoriesResult](#useblogcategoriesresult)
- [UseBlogPostOptions](#useblogpostoptions)
- [UseBlogPostResult](#useblogpostresult)
- [UseBlogPostsOptions](#useblogpostsoptions)
- [UseBlogPostsResult](#useblogpostsresult)
- [UseCommentsOptions](#usecommentsoptions)
- [UseCommentsResult](#usecommentsresult)
- [UseContactFormOptions](#usecontactformoptions)
- [UseContactFormResult](#usecontactformresult)
- [UseContactFormSubmitOptions](#usecontactformsubmitoptions)
- [UseContactFormSubmitResult](#usecontactformsubmitresult)
- [UseFeaturedPostsOptions](#usefeaturedpostsoptions)
- [UseFeaturedPostsResult](#usefeaturedpostsresult)
- [UseSurveyOptions](#usesurveyoptions)
- [UseSurveyResult](#usesurveyresult)
- [UseSurveySubmitOptions](#usesurveysubmitoptions)
- [UseSurveySubmitResult](#usesurveysubmitresult)
- [UseWaitlistOptions](#usewaitlistoptions)
- [UseWaitlistResult](#usewaitlistresult)
- [WaitlistCount](#waitlistcount)
- [WaitlistEntry](#waitlistentry)
- [WaitlistJoinInput](#waitlistjoininput)
- [WhatsNewPopupProps](#whatsnewpopupprops)
- [ArticleType](#articletype)
- [ComponentStatus](#componentstatus)
- [ContactFormFieldType](#contactformfieldtype)
- [FlowDisplayType](#flowdisplaytype)
- [Form](#form)
- [FormField](#formfield)
- [FormFieldType](#formfieldtype)
- [FormFieldValidation](#formfieldvalidation)
- [FormIntegration](#formintegration)
- [FormSubmission](#formsubmission)
- [FormSubmitInput](#formsubmitinput)
- [IncidentImpact](#incidentimpact)
- [IncidentStatus](#incidentstatus)
- [OverallStatus](#overallstatus)
- [RoadmapVisibility](#roadmapvisibility)
- [StatusState](#statusstate)
- [StatusType](#statustype)
- [SupportRequestCategory](#supportrequestcategory)
- [SupportRequestPriority](#supportrequestpriority)
- [SupportRequestStatus](#supportrequeststatus)
- [SurveyQuestionType](#surveyquestiontype)
- [ThemeMode](#thememode)
- [WishPriority](#wishpriority)
- [WishStatus](#wishstatus)
- [cn](#cn)
- [getFingerprint](#getfingerprint)
- [resetFingerprint](#resetfingerprint)

---

## AppgramProvider

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function AppgramProvider(props: AppgramProviderProps): React.ReactElement
```

### Description

AppgramProvider - Root provider for Appgram React SDK

Supports automatic dark/light theme based on system preference.

---

## AppgramClient

**Kind:** `class` | **Access:** `public`

### Declaration

```typescript
class AppgramClient
```

### Initializers

#### `constructor`

```typescript
constructor(config: AppgramClientConfig)
```

### Methods

#### `addSupportMessage` `async`

```typescript
async addSupportMessage(ticketId: string, token: string, content: string): Promise<ApiResponse<object>>
```

Add a message to a support ticket

#### `checkVote` `async`

```typescript
async checkVote(wishId: string, fingerprint: string): Promise<ApiResponse<VoteCheckResponse>>
```

Check if a fingerprint has voted on a wish

#### `checkWaitlistStatus` `async`

```typescript
async checkWaitlistStatus(email: string): Promise<ApiResponse<WaitlistStatus>>
```

Check if an email is on the waitlist

#### `createComment` `async`

```typescript
async createComment(data: object): Promise<ApiResponse<Comment>>
```

Create a comment

#### `createVote` `async`

```typescript
async createVote(wishId: string, fingerprint: string, voterEmail?: string): Promise<ApiResponse<object>>
```

Create a vote

#### `createWish` `async`

```typescript
async createWish(data: object): Promise<ApiResponse<Wish>>
```

Create a new wish (feature request)

#### `deleteVote` `async`

```typescript
async deleteVote(voteId: string): Promise<ApiResponse<object>>
```

Delete a vote

#### `getBlogCategories` `async`

```typescript
async getBlogCategories(): Promise<ApiResponse<BlogCategory[]>>
```

Get blog categories

#### `getBlogPost` `async`

```typescript
async getBlogPost(slug: string): Promise<ApiResponse<BlogPost>>
```

Get a single blog post by slug

#### `getBlogPosts` `async`

```typescript
async getBlogPosts(filters?: BlogFilters): Promise<ApiResponse<BlogPostsResponse>>
```

Get public blog posts with optional filters

#### `getBlogPostsByCategory` `async`

```typescript
async getBlogPostsByCategory(categorySlug: string, options?: object): Promise<ApiResponse<BlogPostsResponse>>
```

Get blog posts by category slug

#### `getBlogPostsByTag` `async`

```typescript
async getBlogPostsByTag(tag: string, options?: object): Promise<ApiResponse<BlogPostsResponse>>
```

Get blog posts by tag

#### `getComments` `async`

```typescript
async getComments(wishId: string, options?: object): Promise<ApiResponse<CommentsResponse>>
```

Get comments for a wish

#### `getContactForm` `async`

```typescript
async getContactForm(formId: string): Promise<ApiResponse<ContactForm>>
```

Get a contact form by ID via portal endpoint

#### `getFeaturedBlogPosts` `async`

```typescript
async getFeaturedBlogPosts(): Promise<ApiResponse<BlogPost[]>>
```

Get featured blog posts

#### `getHelpArticle` `async`

```typescript
async getHelpArticle(slug: string, flowId: string): Promise<ApiResponse<HelpArticle>>
```

Get a help article by slug

#### `getHelpCollection` `async`

```typescript
async getHelpCollection(): Promise<ApiResponse<object>>
```

Get help center collection for the project

#### `getHelpFlow` `async`

```typescript
async getHelpFlow(slug: string): Promise<ApiResponse<HelpFlow>>
```

Get a help flow by slug

#### `getPageData` `async`

```typescript
async getPageData(): Promise<ApiResponse<object>>
```

Get all public page data in one request

#### `getPublicForm` `async`

```typescript
async getPublicForm(formId: string): Promise<ApiResponse<ContactForm>>
```

Get a public contact form by ID (legacy endpoint)

#### `getPublicStatusOverview` `async`

```typescript
async getPublicStatusOverview(slug: string): Promise<ApiResponse<StatusPageOverview>>
```

Get public status page overview (services, active updates, overall status)

#### `getPublicSurvey` `async`

```typescript
async getPublicSurvey(slug: string): Promise<ApiResponse<Survey & object>>
```

Get a public survey by slug

#### `getPublicSurveyCustomization` `async`

```typescript
async getPublicSurveyCustomization(surveyId: string): Promise<ApiResponse<Record<string, unknown>>>
```

Get survey customization settings

#### `getPublicWishes` `async`

```typescript
async getPublicWishes(filters?: WishFilters): Promise<ApiResponse<WishesResponse>>
```

Get public wishes for the project

#### `getRelatedBlogPosts` `async`

```typescript
async getRelatedBlogPosts(slug: string): Promise<ApiResponse<BlogPost[]>>
```

Get related blog posts for a given post

#### `getRelease` `async`

```typescript
async getRelease(releaseSlug: string): Promise<ApiResponse<Release>>
```

Get a single release by slug

#### `getReleaseFeatures` `async`

```typescript
async getReleaseFeatures(releaseSlug: string): Promise<ApiResponse<ReleaseFeature[]>>
```

Get features for a release (public endpoint)

#### `getReleases` `async`

```typescript
async getReleases(options?: object): Promise<ApiResponse<Release[]>>
```

Get public releases for the project

#### `getRoadmapData` `async`

```typescript
async getRoadmapData(): Promise<ApiResponse<RoadmapData>>
```

Get roadmap data for the project

#### `getSupportTicket` `async`

```typescript
async getSupportTicket(ticketId: string, token: string): Promise<ApiResponse<SupportRequest>>
```

Get a specific support ticket using magic link token

#### `getWaitlistCount` `async`

```typescript
async getWaitlistCount(): Promise<ApiResponse<WaitlistCount>>
```

Get the total count of users on the waitlist

#### `getWish` `async`

```typescript
async getWish(wishId: string): Promise<ApiResponse<Wish>>
```

Get a single wish by ID

#### `joinWaitlist` `async`

```typescript
async joinWaitlist(data: WaitlistJoinInput): Promise<ApiResponse<WaitlistEntry>>
```

Join the waitlist

#### `leaveWaitlist` `async`

```typescript
async leaveWaitlist(email: string): Promise<ApiResponse<object>>
```

Leave the waitlist

#### `searchBlogPosts` `async`

```typescript
async searchBlogPosts(query: string, options?: object): Promise<ApiResponse<BlogPostsResponse>>
```

Search blog posts

#### `sendSupportMagicLink` `async`

```typescript
async sendSupportMagicLink(userEmail: string): Promise<ApiResponse<object>>
```

Request a magic link to access support tickets

#### `submitContactForm` `async`

```typescript
async submitContactForm(projectId: string, formId: string, data: ContactFormSubmitInput): Promise<ApiResponse<ContactFormSubmission>>
```

Submit a contact form

#### `submitSupportRequest` `async`

```typescript
async submitSupportRequest(data: SupportRequestInput): Promise<ApiResponse<SupportRequest>>
```

Submit a support request

#### `submitSurveyResponse` `async`

```typescript
async submitSurveyResponse(surveyId: string, data: SurveySubmitInput): Promise<ApiResponse<SurveyResponse>>
```

Submit a survey response

#### `trackContactFormView` `async`

```typescript
async trackContactFormView(formId: string): Promise<ApiResponse<object>>
```

Track a contact form view (call when form is displayed)

#### `uploadFile` `async`

```typescript
async uploadFile(file: File): Promise<ApiResponse<object>>
```

Upload a file via public portal (no auth required)

#### `verifySupportToken` `async`

```typescript
async verifySupportToken(token: string): Promise<ApiResponse<object>>
```

Verify magic link token and get user's support tickets

---

## useAppgramContext

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useAppgramContext(): AppgramContextValue
```

### Description

Hook to access the Appgram context

---

## useBlogCategories

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useBlogCategories(options: UseBlogCategoriesOptions): UseBlogCategoriesResult
```

---

## useBlogPost

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useBlogPost(options: UseBlogPostOptions): UseBlogPostResult
```

---

## useBlogPosts

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useBlogPosts(options: UseBlogPostsOptions): UseBlogPostsResult
```

---

## useComments

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useComments(options: UseCommentsOptions): UseCommentsResult
```

---

## useContactForm

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useContactForm(formId: string, options: UseContactFormOptions): UseContactFormResult
```

---

## useContactFormSubmit

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useContactFormSubmit(options: UseContactFormSubmitOptions): UseContactFormSubmitResult
```

---

## useFeaturedPosts

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useFeaturedPosts(options: UseFeaturedPostsOptions): UseFeaturedPostsResult
```

---

## useHelpArticle

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useHelpArticle(options: UseHelpArticleOptions): UseHelpArticleResult
```

---

## useHelpCenter

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useHelpCenter(options: UseHelpCenterOptions): UseHelpCenterResult
```

---

## useHelpFlow

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useHelpFlow(options: UseHelpFlowOptions): UseHelpFlowResult
```

---

## useRelease

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useRelease(options: UseReleaseOptions): UseReleaseResult
```

---

## useReleases

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useReleases(options: UseReleasesOptions): UseReleasesResult
```

---

## useRoadmap

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useRoadmap(options: UseRoadmapOptions): UseRoadmapResult
```

---

## useStatus

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useStatus(options: UseStatusOptions): UseStatusResult
```

---

## useSupport

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useSupport(options: UseSupportOptions): UseSupportResult
```

---

## useSurvey

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useSurvey(slug: string, options: UseSurveyOptions): UseSurveyResult
```

---

## useSurveySubmit

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useSurveySubmit(options: UseSurveySubmitOptions): UseSurveySubmitResult
```

---

## useVote

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useVote(options: UseVoteOptions): UseVoteResult
```

---

## useWaitlist

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useWaitlist(options: UseWaitlistOptions): UseWaitlistResult
```

---

## useWish

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useWish(options: UseWishOptions): UseWishResult
```

---

## useWishes

**Kind:** `hook` | **Access:** `public`

### Declaration

```typescript
function useWishes(options: UseWishesOptions): UseWishesResult
```

---

## Blog

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function Blog(props: BlogProps): React.ReactElement
```

---

## BlogCard

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function BlogCard(props: BlogCardProps): Element
```

---

## BlogList

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function BlogList(props: BlogListProps): Element
```

---

## BlogPostDetail

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function BlogPostDetail(props: BlogPostDetailProps): React.ReactElement | null
```

---

## ChatWidget

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function ChatWidget(props: ChatWidgetProps): React.ReactElement
```

---

## ContactFormRenderer

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function ContactFormRenderer(props: ContactFormRendererProps): React.ReactElement
```

---

## HelpArticleDetail

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function HelpArticleDetail(props: HelpArticleDetailProps): React.ReactElement | null
```

---

## HelpArticles

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function HelpArticles(props: HelpArticlesProps): React.ReactElement | null
```

---

## HelpCenter

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function HelpCenter(props: HelpCenterProps): React.ReactElement
```

---

## HelpCollections

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function HelpCollections(props: HelpCollectionsProps): React.ReactElement
```

---

## ReleaseCard

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function ReleaseCard(props: ReleaseCardProps): React.ReactElement
```

---

## ReleaseDetail

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function ReleaseDetail(props: ReleaseDetailProps): React.ReactElement | null
```

---

## ReleaseList

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function ReleaseList(props: ReleaseListProps): React.ReactElement
```

---

## Releases

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function Releases(props: ReleasesProps): React.ReactElement
```

---

## RoadmapBoard

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function RoadmapBoard(props: RoadmapBoardProps): React.ReactElement
```

---

## RoadmapColumn

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function RoadmapColumn(props: RoadmapColumnProps): React.ReactElement
```

---

## StatusBoard

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function StatusBoard(props: StatusBoardProps): React.ReactElement
```

---

## StatusIncidentDetail

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function StatusIncidentDetail(props: StatusIncidentDetailProps): React.ReactElement
```

---

## SubmitWishForm

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function SubmitWishForm(props: SubmitWishFormProps): React.ReactElement
```

---

## SupportForm

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function SupportForm(props: SupportFormProps): React.ReactElement
```

---

## SurveyRenderer

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function SurveyRenderer(props: SurveyRendererProps): React.ReactElement
```

---

## VoteButton

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function VoteButton(props: VoteButtonProps): React.ReactElement
```

---

## WhatsNewPopup

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function WhatsNewPopup(props: WhatsNewPopupProps): React.ReactElement | null
```

---

## WishCard

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function WishCard(props: WishCardProps): React.ReactElement
```

---

## WishDetail

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function WishDetail(props: WishDetailProps): React.ReactElement | null
```

---

## WishList

**Kind:** `component` | **Access:** `public`

### Declaration

```typescript
function WishList(props: WishListProps): React.ReactElement
```

---

## SubmitWishFormProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SubmitWishFormProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `customFormId` | `string` | Custom form ID to use instead of default form. When provided, fetches the form config and renders its fields dynamically. The form should have integration.type = 'wish' to create feature requests. |
| `description` | `string` | Form description |
| `onError` | `(error: string) => void` | Callback when submission fails |
| `onOpenChange` | `(open: boolean) => void` | Callback when open state changes |
| `onSuccess` | `(wish: Wish) => void` | Callback when wish is successfully submitted |
| `open` | `boolean` | Whether the form is open |
| `submitButtonText` | `string` | Submit button text |
| `title` | `string` | Form title |

---

## UseVoteOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseVoteOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `initialHasVoted` | `boolean` | Initial hasVoted state (optional) |
| `initialVoteCount` | `number` | Initial vote count (optional, useful when you already have the wish data) |
| `onVoteChange` | `(hasVoted: boolean, voteCount: number) => void` | Callback when vote state changes |
| `skipAutoCheck` | `boolean` | Skip automatic vote check on mount to avoid rate limiting When true, vote status will be checked lazily on first interaction |
| `voterEmail` | `string` | Voter email (optional, for identified voting) |
| `wishId` | `string` | The wish ID to vote on |

---

## UseVoteResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseVoteResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `hasVoted` | `boolean` | Whether the current user has voted |
| `isChecking` | `boolean` | Loading state for initial vote check |
| `isLoading` | `boolean` | Loading state for vote operations |
| `toggle` | `() => Promise<void>` | Toggle vote (vote if not voted, unvote if voted) |
| `unvote` | `() => Promise<void>` | Remove a vote |
| `vote` | `() => Promise<void>` | Cast a vote |
| `voteCount` | `number` | Current vote count |

---

## UseWishesOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWishesOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `filters` | `WishFilters` | Initial filters |
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds (0 to disable) |
| `skip` | `boolean` | Skip initial fetch |

---

## UseWishesResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWishesResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `page` | `number` | Current page |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `setFilters` | `(filters: WishFilters) => void` | Update filters |
| `setPage` | `(page: number) => void` | Go to a specific page |
| `total` | `number` | Total number of wishes |
| `totalPages` | `number` | Total pages |
| `wishes` | `Wish[]` | List of wishes |

---

## UseWishOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWishOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `skip` | `boolean` | Skip initial fetch |
| `wishId` | `string` | The wish ID to fetch |

---

## UseWishResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWishResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `wish` | `null | Wish` | The wish data |

---

## Vote

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Vote
```

### Description

Vote Types

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` |  |
| `fingerprint` | `string` |  |
| `id` | `string` |  |
| `user_id` | `null | string` |  |
| `voter_email` | `null | string` |  |
| `wish_id` | `string` |  |

---

## VoteButtonProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface VoteButtonProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `initialHasVoted` | `boolean` | Initial hasVoted state (optional) |
| `initialVoteCount` | `number` | Initial vote count (optional, useful when you already have the wish data) |
| `onVoteChange` | `(hasVoted: boolean, voteCount: number) => void` | Callback when vote state changes |
| `renderContent` | `(props: object) => ReactNode` | Custom render function for the button content |
| `showCount` | `boolean` | Show vote count |
| `size` | `'sm' | 'md' | 'lg'` | Size variant |
| `skipAutoCheck` | `boolean` | Skip automatic vote check on mount to avoid rate limiting When true, vote status will be checked lazily on first interaction |
| `voterEmail` | `string` | Voter email (optional, for identified voting) |
| `wishId` | `string` | The wish ID to vote on |

---

## VoteCheckResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface VoteCheckResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `has_voted` | `boolean` |  |
| `vote_id` | `string` |  |

---

## VoteCreateInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface VoteCreateInput
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `fingerprint` | `string` |  |
| `voter_email` | `string` |  |
| `wish_id` | `string` |  |

---

## VoteState

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface VoteState
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` |  |
| `hasVoted` | `boolean` |  |
| `isLoading` | `boolean` |  |
| `voteCount` | `number` |  |
| `voteId` | `string` |  |

---

## Wish

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Wish
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `author` | `WishAuthor` |  |
| `author_email` | `null | string` |  |
| `author_name` | `null | string` |  |
| `author_type` | `'user' | 'anonymous' | 'team_member'` |  |
| `category` | `null | Category` |  |
| `category_id` | `null | string` |  |
| `comment_count` | `number` |  |
| `completed_at` | `null | string` |  |
| `created_at` | `string` |  |
| `description` | `string` |  |
| `has_voted` | `boolean` |  |
| `id` | `string` |  |
| `is_pinned` | `boolean` |  |
| `priority` | `null | WishPriority` |  |
| `project_id` | `string` |  |
| `slug` | `string` |  |
| `status` | `WishStatus` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |
| `vote_count` | `number` |  |

---

## WishAuthor

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishAuthor
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `avatar_url` | `null | string` |  |
| `email` | `null | string` |  |
| `name` | `string` |  |

---

## WishCardProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishCardProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `animationIndex` | `number` | Animation delay index (for staggered animations) |
| `className` | `string` | Custom class name |
| `hasVoted` | `boolean` | Override hasVoted state (for optimistic updates) |
| `isVoting` | `boolean` | Loading state for vote |
| `onClick` | `() => void` | Click handler for the card |
| `onCommentClick` | `() => void` | Comment click handler |
| `onVote` | `(wishId: string, hasVoted: boolean, voteCount: number) => void` | Vote handler |
| `renderVoteButton` | `(props: object) => ReactNode` | Custom render function for the vote button |
| `showAuthor` | `boolean` | Show author |
| `showCategory` | `boolean` | Show category badge |
| `showCommentCount` | `boolean` | Show comment count |
| `showStatus` | `boolean` | Show status badge |
| `voteCount` | `number` | Override vote count (for optimistic updates) |
| `wish` | `Wish` | The wish data |

---

## WishDetailProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishDetailProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `onCommentAdded` | `(comment: Comment) => void` | Callback when a comment is added |
| `onOpenChange` | `(open: boolean) => void` | Callback when open state changes |
| `onVote` | `(wishId: string) => void` | Callback when vote is toggled |
| `open` | `boolean` | Whether the detail view is open |
| `wish` | `null | Wish` | The wish to display |

---

## WishesResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishesResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `Wish[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## WishFilters

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishFilters
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `category_id` | `string` |  |
| `fingerprint` | `string` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `priority` | `WishPriority | WishPriority[]` |  |
| `search` | `string` |  |
| `sort_by` | `'votes' | 'created_at' | 'updated_at'` |  |
| `sort_order` | `'asc' | 'desc'` |  |
| `status` | `WishStatus | WishStatus[]` |  |

---

## WishListProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WishListProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Page description |
| `filters` | `WishFilters` | Initial filters |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `onAddWish` | `() => void` | Handler for adding a new wish |
| `onWishClick` | `(wish: Wish) => void` | Click handler for a wish |
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `renderWish` | `(wish: Wish, index: number) => ReactNode` | Custom render function for individual wish cards |
| `showSearch` | `boolean` | Show search input |
| `variant` | `'cards' | 'compact' | 'masonry'` | Layout variant |

---

## HelpArticle

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpArticle
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `article_type` | `ArticleType` |  |
| `content` | `string` |  |
| `created_at` | `string` |  |
| `excerpt` | `null | string` |  |
| `flow_id` | `string` |  |
| `id` | `string` |  |
| `is_published` | `boolean` |  |
| `published_at` | `null | string` |  |
| `slug` | `string` |  |
| `sort_order` | `number` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |

---

## HelpArticleDetailProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpArticleDetailProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `article` | `HelpArticle` | The article to display (either pass article object or articleSlug + flowId) |
| `articleSlug` | `string` | Article slug to fetch (alternative to passing article object) |
| `className` | `string` | Custom class name |
| `flow` | `HelpFlow` | The parent flow (for context) |
| `flowId` | `string` | Flow ID for fetching article (required if using articleSlug) |
| `onBack` | `() => void` | Back button click handler |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showBackButton` | `boolean` | Show back button |
| `showMetadata` | `boolean` | Show article metadata (date, type) |

---

## HelpArticlesProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpArticlesProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `flow` | `HelpFlow` | The flow to display articles for (either pass flow object or flowSlug) |
| `flowSlug` | `string` | Flow slug to fetch (alternative to passing flow object) |
| `onArticleClick` | `(article: HelpArticle) => void` | Click handler for articles |
| `onBack` | `() => void` | Back button click handler |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showBackButton` | `boolean` | Show back button |
| `showSearch` | `boolean` | Show search input |

---

## HelpArticlesResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpArticlesResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `HelpArticle[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## HelpCenterData

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpCenterData
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `collection` | `null | HelpCollection` |  |
| `flows` | `HelpFlow[]` |  |

---

## HelpCenterProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpCenterProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `contactSupportUrl` | `string` | Contact support URL |
| `description` | `string` | Page description |
| `featuredArticles` | `HelpArticle[]` | Featured articles to display on the main view |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `onArticleClick` | `(article: HelpArticle, flow: null | HelpFlow) => void` | External callback when article is clicked (for custom routing) If not provided, internal navigation is used |
| `onFlowClick` | `(flow: HelpFlow) => void` | External callback when flow is clicked (for custom routing) If not provided, internal navigation is used |
| `onLiveChatClick` | `() => void` | Live chat handler |
| `quickActions` | `QuickAction[]` | Quick action buttons to display |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showFooter` | `boolean` | Show contact support footer |
| `showSearch` | `boolean` | Show search input |
| `useExternalRouting` | `boolean` | Use external routing instead of internal state management Set to true if you want to handle navigation yourself via onFlowClick/onArticleClick |
| `variant` | `'list' | 'grid'` | Layout variant for collections |

---

## HelpCollection

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpCollection
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `flows` | `HelpFlow[]` |  |
| `id` | `string` |  |
| `is_live` | `boolean` |  |
| `name` | `string` |  |
| `project_id` | `string` |  |
| `updated_at` | `string` |  |
| `version` | `string` |  |

---

## HelpCollectionsProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpCollectionsProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `contactSupportUrl` | `string` | Contact support URL |
| `description` | `string` | Page description |
| `featuredArticles` | `HelpArticle[]` | Featured articles to display |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `onArticleClick` | `(article: HelpArticle, flow: HelpFlow) => void` | Click handler for articles |
| `onFlowClick` | `(flow: HelpFlow) => void` | Click handler for flows |
| `onLiveChatClick` | `() => void` | Live chat handler |
| `quickActions` | `QuickAction[]` | Quick action buttons to display |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderFlow` | `(flow: HelpFlow) => ReactNode` | Custom render function for flows |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showFooter` | `boolean` | Show contact support footer |
| `showSearch` | `boolean` | Show search input |
| `variant` | `'list' | 'grid'` | Layout variant |

---

## HelpFlow

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface HelpFlow
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `articles` | `HelpArticle[]` |  |
| `collection_id` | `string` |  |
| `color` | `null | string` |  |
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `display_type` | `FlowDisplayType` |  |
| `icon` | `null | string` |  |
| `id` | `string` |  |
| `name` | `string` |  |
| `slug` | `string` |  |
| `sort_order` | `number` |  |
| `updated_at` | `string` |  |

---

## UseHelpArticleOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpArticleOptions
```

### Description

useHelpArticle Hook

Fetches a single help article by slug.

### Properties

| Name | Type | Description |
|------|------|-------------|
| `articleSlug` | `string` | The article slug to fetch |
| `flowId` | `string` | The flow ID the article belongs to |
| `skip` | `boolean` | Skip initial fetch |

---

## UseHelpArticleResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpArticleResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `article` | `null | HelpArticle` | The article data |
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |

---

## UseHelpCenterOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpCenterOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `skip` | `boolean` | Skip initial fetch |

---

## UseHelpCenterResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpCenterResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `collection` | `null | HelpCollection` | Help collection |
| `error` | `null | string` | Error message if any |
| `flows` | `HelpFlow[]` | Help flows |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |

---

## UseHelpFlowOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpFlowOptions
```

### Description

useHelpFlow Hook

Fetches a single help flow by slug.

### Properties

| Name | Type | Description |
|------|------|-------------|
| `flowSlug` | `string` | The flow slug to fetch |
| `skip` | `boolean` | Skip initial fetch |

---

## UseHelpFlowResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseHelpFlowResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `flow` | `null | HelpFlow` | The flow data |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |

---

## Release

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Release
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `author_user_id` | `string` |  |
| `content` | `string` |  |
| `cover_image_url` | `null | string` |  |
| `created_at` | `string` |  |
| `excerpt` | `null | string` |  |
| `features` | `ReleaseFeature[]` |  |
| `id` | `string` |  |
| `is_published` | `boolean` |  |
| `items` | `ReleaseItem[]` |  |
| `labels` | `string[]` |  |
| `project_id` | `string` |  |
| `published_at` | `null | string` |  |
| `slug` | `string` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |
| `version` | `null | string` |  |
| `wish_ids` | `string[]` |  |

---

## ReleaseCardProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleaseCardProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `onClick` | `() => void` | Click handler |
| `release` | `Release` | The release data |
| `showCoverImage` | `boolean` | Show cover image |
| `showDate` | `boolean` | Show date |
| `showLabels` | `boolean` | Show labels |

---

## ReleaseDetailProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleaseDetailProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `onBack` | `() => void` | Back button click handler |
| `release` | `Release` | The release to display (either pass release object or releaseSlug) |
| `releaseSlug` | `string` | Release slug to fetch (alternative to passing release object) |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showBackButton` | `boolean` | Show back button |

---

## ReleaseFeature

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleaseFeature
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `description` | `string` |  |
| `id` | `string` |  |
| `image_url` | `null | string` |  |
| `release_id` | `string` |  |
| `sort_order` | `number` |  |
| `title` | `string` |  |

---

## ReleaseListProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleaseListProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Page description |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `limit` | `number` | Maximum number of releases to show |
| `onReleaseClick` | `(release: Release) => void` | Click handler for releases |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `renderRelease` | `(release: Release, index: number) => ReactNode` | Custom render function for releases |
| `variant` | `'cards' | 'compact' | 'timeline'` | Layout variant |

---

## ReleasesProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleasesProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Page description |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `limit` | `number` | Maximum number of releases to show |
| `onReleaseClick` | `(release: Release) => void` | External callback when release is clicked (for custom routing) If not provided, internal navigation is used |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `useExternalRouting` | `boolean` | Use external routing instead of internal state management Set to true if you want to handle navigation yourself via onReleaseClick |
| `variant` | `'cards' | 'compact' | 'timeline'` | Layout variant for list |

---

## ReleasesResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ReleasesResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `Release[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## UseReleaseOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseReleaseOptions
```

### Description

useRelease Hook

Fetches a single release by slug.

### Properties

| Name | Type | Description |
|------|------|-------------|
| `releaseSlug` | `string` | The release slug to fetch |
| `skip` | `boolean` | Skip initial fetch |

---

## UseReleaseResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseReleaseResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `release` | `null | Release` | The release data |

---

## UseReleasesOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseReleasesOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `limit` | `number` | Maximum number of releases to fetch |
| `skip` | `boolean` | Skip initial fetch |

---

## UseReleasesResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseReleasesResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `releases` | `Release[]` | List of releases |

---

## Roadmap

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Roadmap
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `columns` | `RoadmapColumn[]` |  |
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `id` | `string` |  |
| `is_default` | `boolean` |  |
| `name` | `string` |  |
| `project_id` | `string` |  |
| `show_comments` | `boolean` |  |
| `show_vote_counts` | `boolean` |  |
| `updated_at` | `string` |  |
| `visibility` | `RoadmapVisibility` |  |

---

## RoadmapBoardProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface RoadmapBoardProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Page description |
| `developersNote` | `string` | Developer's note |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `onItemClick` | `(item: RoadmapItem) => void` | Click handler for items |
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds |
| `renderColumn` | `(column: RoadmapColumn) => ReactNode` | Custom render function for columns |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderItem` | `(item: RoadmapItem) => ReactNode` | Custom render function for items |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showComments` | `boolean` | Show comment counts |
| `showVoteCounts` | `boolean` | Show vote counts on items |
| `variant` | `'list' | 'kanban' | 'timeline'` | Layout variant |

---

## RoadmapColumnProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface RoadmapColumnProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `column` | `RoadmapColumn` | The column data |
| `onItemClick` | `(item: RoadmapItem) => void` | Click handler for items |
| `renderItem` | `(item: RoadmapItem) => ReactNode` | Custom render function for items |
| `showVoteCounts` | `boolean` | Show vote counts on items |

---

## RoadmapColumnType

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface RoadmapColumnType
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `color` | `string` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `items` | `RoadmapItem[]` |  |
| `name` | `string` |  |
| `roadmap_id` | `string` |  |
| `sort_order` | `number` |  |
| `updated_at` | `string` |  |
| `wip_limit` | `null | number` |  |

---

## RoadmapData

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface RoadmapData
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `columns` | `RoadmapColumn[]` |  |
| `customization` | `null | object` |  |
| `roadmap` | `null | Roadmap` |  |
| `total_items` | `number` |  |

---

## RoadmapItem

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface RoadmapItem
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `color` | `null | string` |  |
| `column_id` | `string` |  |
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `id` | `string` |  |
| `roadmap_id` | `string` |  |
| `sort_order` | `number` |  |
| `target_date` | `null | string` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |
| `wish` | `null | Wish` |  |
| `wish_id` | `null | string` |  |

---

## UseRoadmapOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseRoadmapOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds (0 to disable) |
| `skip` | `boolean` | Skip initial fetch |

---

## UseRoadmapResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseRoadmapResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `columns` | `RoadmapColumn[]` | Roadmap columns with items |
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `roadmap` | `null | Roadmap` | Roadmap data |
| `totalItems` | `number` | Total number of items |

---

## IncidentUpdate

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface IncidentUpdate
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` |  |
| `id` | `string` |  |
| `message` | `string` |  |
| `status` | `IncidentStatus` |  |

---

## StatusBoardProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusBoardProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Page description |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `maxPastIncidents` | `number` | Max number of past incidents to show |
| `onIncidentClick` | `(incident: StatusIncident) => void` | Click handler for incidents |
| `renderComponent` | `(component: StatusComponent) => ReactNode` | Custom render for component |
| `renderIncident` | `(incident: StatusIncident) => ReactNode` | Custom render for incident |
| `renderOverallStatus` | `(status: OverallStatus) => ReactNode` | Custom render for overall status |
| `showComponentDescriptions` | `boolean` | Show component descriptions |
| `showIncidentHistory` | `boolean` | Show incident history |
| `status` | `StatusData` | Status data to display |

---

## StatusComponent

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusComponent
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `description` | `string` |  |
| `group` | `string` |  |
| `id` | `string` |  |
| `name` | `string` |  |
| `status` | `ComponentStatus` |  |

---

## StatusData

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusData
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `components` | `StatusComponent[]` |  |
| `incidents` | `StatusIncident[]` |  |
| `last_updated` | `string` |  |
| `overall_status` | `OverallStatus` |  |

---

## StatusIncident

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusIncident
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `affected_components` | `string[]` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `impact` | `IncidentImpact` |  |
| `resolved_at` | `null | string` |  |
| `status` | `IncidentStatus` |  |
| `title` | `string` |  |
| `updates` | `IncidentUpdate[]` |  |

---

## StatusIncidentDetailProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusIncidentDetailProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `incident` | `StatusIncident` | The incident to display |
| `onBack` | `() => void` | Back button click handler |
| `showAffectedComponents` | `boolean` | Show affected components |
| `showBackButton` | `boolean` | Show back button |

---

## StatusPage

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusPage
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `id` | `string` |  |
| `is_active` | `boolean` |  |
| `name` | `string` |  |
| `project_id` | `string` |  |
| `slug` | `string` |  |
| `updated_at` | `string` |  |

---

## StatusPageOverview

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusPageOverview
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `active_count` | `number` |  |
| `active_updates` | `StatusUpdate[]` |  |
| `current_status` | `StatusType` |  |
| `recent_updates` | `StatusUpdate[]` |  |
| `resolved_count` | `number` |  |
| `services` | `StatusPageService[]` |  |
| `services_status` | `Record<string, StatusType>` |  |
| `status_breakdown` | `Record<string, number>` |  |
| `status_page` | `StatusPage` |  |
| `total_updates` | `number` |  |

---

## StatusPageService

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusPageService
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `color` | `null | string` |  |
| `created_at` | `string` |  |
| `description` | `null | string` |  |
| `group_name` | `null | string` |  |
| `id` | `string` |  |
| `is_active` | `boolean` |  |
| `name` | `string` |  |
| `sort_order` | `number` |  |
| `status_page_id` | `string` |  |
| `updated_at` | `string` |  |

---

## StatusUpdateApi

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface StatusUpdateApi
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `affected_services` | `string[]` |  |
| `created_at` | `string` |  |
| `description` | `string` |  |
| `id` | `string` |  |
| `is_public` | `boolean` |  |
| `resolved_at` | `null | string` |  |
| `state` | `StatusState` |  |
| `status_page_id` | `string` |  |
| `status_type` | `StatusType` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |

---

## UseStatusOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseStatusOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `enabled` | `boolean` | Whether to fetch immediately |
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds (0 to disable) |
| `slug` | `string` | Status page slug |

---

## UseStatusResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseStatusResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message |
| `isLoading` | `boolean` | Loading state |
| `overview` | `null | StatusPageOverview` | Raw API overview response |
| `refetch` | `() => Promise<void>` | Manually refresh |
| `status` | `null | StatusData` | Transformed status data ready for StatusBoard |

---

## WaitlistStatus

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WaitlistStatus
```

### Description

Waitlist status response

### Properties

| Name | Type | Description |
|------|------|-------------|
| `is_on_waitlist` | `boolean` | Whether the user/email is on the waitlist |
| `joined_at` | `string` | When the user joined (if on waitlist) |
| `position` | `number` | Position in the waitlist (if available) |

---

## SupportAttachment

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportAttachment
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `mime_type` | `string` |  |
| `name` | `string` |  |
| `size` | `number` |  |
| `url` | `string` |  |

---

## SupportFormProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportFormProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `accessToken` | `string` | Access token for viewing tickets (from magic link) |
| `checkDescription` | `string` | Check status section description |
| `checkTitle` | `string` | Check status section title |
| `className` | `string` | Custom class name |
| `customFormId` | `string` | Custom contact form ID to use instead of default support form. When provided, fetches the form config and renders its fields dynamically. The form should have integration.type = 'support' to create tickets. |
| `description` | `string` | Page description |
| `heading` | `string` | Page heading |
| `headingAlignment` | `'left' | 'center' | 'right'` | Heading alignment |
| `onCheckStatus` | `(email: string) => void` | Callback when checking status (optional - uses magic link by default) |
| `onSubmitError` | `(error: string) => void` | Callback when submission fails |
| `onSubmitSuccess` | `(ticket: SupportRequest) => void` | Callback when ticket is successfully submitted |
| `onTicketClick` | `(ticket: SupportRequest) => void` | Callback when a ticket is clicked |
| `showAttachments` | `boolean` | Show file attachments |
| `showCategory` | `boolean` | Show category selector |
| `showCheckStatus` | `boolean` | Show check status tab |
| `showName` | `boolean` | Show name field |
| `submitButtonText` | `string` | Submit button text |
| `submitDescription` | `string` | Submit section description |
| `submitTitle` | `string` | Submit section title |

---

## SupportMessage

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportMessage
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `attachments` | `SupportAttachment[]` |  |
| `author_email` | `null | string` |  |
| `author_name` | `null | string` |  |
| `author_type` | `'user' | 'team_member'` |  |
| `author_user_id` | `null | string` |  |
| `content` | `string` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `is_internal` | `boolean` |  |
| `support_request_id` | `string` |  |

---

## SupportRequest

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportRequest
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `assignee_id` | `null | string` |  |
| `attachments` | `SupportAttachment[]` |  |
| `category` | `null | SupportRequestCategory` |  |
| `created_at` | `string` |  |
| `description` | `string` |  |
| `id` | `string` |  |
| `message_count` | `number` |  |
| `messages` | `SupportMessage[]` |  |
| `priority` | `null | SupportRequestPriority` |  |
| `project_id` | `string` |  |
| `resolved_at` | `null | string` |  |
| `status` | `SupportRequestStatus` |  |
| `subject` | `string` |  |
| `updated_at` | `string` |  |
| `user_email` | `string` |  |
| `user_name` | `null | string` |  |

---

## SupportRequestInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportRequestInput
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `attachments` | `File[]` |  |
| `category` | `SupportRequestCategory` |  |
| `description` | `string` |  |
| `external_user_id` | `string` |  |
| `subject` | `string` |  |
| `user_email` | `string` |  |
| `user_name` | `string` |  |

---

## SupportRequestsResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SupportRequestsResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `SupportRequest[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## UseSupportOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSupportOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `onSubmitError` | `(error: string) => void` | Callback when a submission fails |
| `onSubmitSuccess` | `(ticket: SupportRequest) => void` | Callback when a ticket is successfully submitted |

---

## UseSupportResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSupportResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `addMessage` | `(ticketId: string, token: string, content: string) => Promise<null | object>` | Add a message to a ticket |
| `clearMessages` | `() => void` | Clear any error or success messages |
| `error` | `null | string` | Error message if any |
| `getTicket` | `(ticketId: string, token: string) => Promise<null | SupportRequest>` | Get a specific ticket by ID with token |
| `isSendingMagicLink` | `boolean` | Loading state for magic link request |
| `isSubmitting` | `boolean` | Loading state for ticket submission |
| `isVerifying` | `boolean` | Loading state for token verification |
| `requestMagicLink` | `(email: string) => Promise<boolean>` | Request a magic link to access tickets |
| `submitTicket` | `(data: SupportRequestInput) => Promise<null | SupportRequest>` | Submit a new support ticket |
| `successMessage` | `null | string` | Success message after submitting |
| `verifyToken` | `(token: string) => Promise<null | object>` | Verify a magic link token |

---

## ApiResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ApiResponse
```

### Description

API Response wrapper

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `T` |  |
| `error` | `object` |  |
| `success` | `boolean` |  |

---

## AppgramClientConfig

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface AppgramClientConfig
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `baseUrl` | `string` |  |
| `orgSlug` | `string` |  |
| `projectId` | `string` |  |
| `projectSlug` | `string` |  |

---

## AppgramConfig

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface AppgramConfig
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `apiUrl` | `string` | Optional API URL override (defaults to https://api.appgram.dev) |
| `enableFingerprinting` | `boolean` | Enable browser fingerprinting for anonymous voting |
| `orgSlug` | `string` | Organization slug (used for public URLs) |
| `projectId` | `string` | Your Appgram project ID |
| `projectSlug` | `string` | Project slug (used for public URLs) |
| `theme` | `AppgramTheme` | Theme customization |

---

## AppgramContextValue

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface AppgramContextValue
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `client` | `AppgramClient` | The API client instance |
| `config` | `Required<Pick<AppgramConfig, 'projectId'>> & AppgramConfig` | The Appgram configuration |
| `fingerprint` | `null | string` | Browser fingerprint for anonymous voting |
| `theme` | `AppgramTheme` | Theme values |

---

## AppgramProviderProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface AppgramProviderProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `children` | `ReactNode` | Child components |
| `config` | `AppgramConfig` | Appgram configuration |

---

## AppgramTheme

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface AppgramTheme
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `borderRadius` | `number` |  |
| `colors` | `Partial<CustomColors>` | Light mode colors (used when mode is 'light' or system is light) |
| `darkColors` | `Partial<CustomColors>` | Dark mode colors (used when mode is 'dark' or system is dark) If not provided, will auto-generate from light colors |
| `mode` | `ThemeMode` | Theme mode - 'light', 'dark', or 'system' (default: 'system') |
| `typography` | `Partial<CustomTypography>` |  |

---

## BlogCardProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogCardProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Additional CSS classes |
| `onClick` | `(post: BlogPost) => void` | Called when the card is clicked |
| `post` | `BlogPost` | The blog post to display |
| `variant` | `'default' | 'featured' | 'compact'` | Card variant |

---

## BlogCategory

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogCategory
```

### Description

Blog/Resources Types

### Properties

| Name | Type | Description |
|------|------|-------------|
| `color` | `null | string` |  |
| `description` | `null | string` |  |
| `id` | `string` |  |
| `name` | `string` |  |
| `post_count` | `number` |  |
| `slug` | `string` |  |

---

## BlogFilters

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogFilters
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `category_slug` | `string` |  |
| `is_featured` | `boolean` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `search` | `string` |  |
| `tag` | `string` |  |

---

## BlogListProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogListProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `categories` | `BlogCategory[]` | List of categories for filtering |
| `className` | `string` | Additional CSS classes |
| `isLoading` | `boolean` | Loading state |
| `onCategoryChange` | `(category: null | string) => void` | Called when a category is selected |
| `onPageChange` | `(page: number) => void` | Called when page changes |
| `onPostClick` | `(post: BlogPost) => void` | Called when a post is clicked |
| `onSearchChange` | `(query: string) => void` | Called when search query changes |
| `page` | `number` | Current page |
| `posts` | `BlogPost[]` | List of blog posts to display |
| `renderEmpty` | `() => ReactNode` | Custom empty state component |
| `renderLoading` | `() => ReactNode` | Custom loading component |
| `searchQuery` | `string` | Search query |
| `selectedCategory` | `null | string` | Currently selected category |
| `showCategories` | `boolean` | Show category filter |
| `showSearch` | `boolean` | Show search input |
| `totalPages` | `number` | Total pages |
| `variant` | `'list' | 'grid'` | Grid variant |

---

## BlogPost

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogPost
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `author_name` | `null | string` |  |
| `category` | `object` |  |
| `category_id` | `null | string` |  |
| `content` | `string` |  |
| `created_at` | `string` |  |
| `excerpt` | `null | string` |  |
| `id` | `string` |  |
| `is_featured` | `boolean` |  |
| `meta_description` | `null | string` |  |
| `og_image_url` | `null | string` |  |
| `project_id` | `string` |  |
| `published_at` | `string` |  |
| `slug` | `string` |  |
| `tags` | `string[]` |  |
| `title` | `string` |  |
| `updated_at` | `string` |  |
| `view_count` | `number` |  |

---

## BlogPostDetailProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogPostDetailProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Additional CSS classes |
| `onBack` | `() => void` | Back button click handler |
| `onRelatedPostClick` | `(post: BlogPost) => void` | Called when a related post is clicked |
| `post` | `BlogPost` | The blog post to display (either pass post object or postSlug) |
| `postSlug` | `string` | Post slug to fetch (alternative to passing post object) |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showBackButton` | `boolean` | Show back button |
| `showRelatedPosts` | `boolean` | Show related posts section |

---

## BlogPostsResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogPostsResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `BlogPost[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## BlogProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface BlogProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Additional CSS classes |
| `initialCategory` | `string` | Initial category filter |
| `initialSearch` | `string` | Initial search query |
| `onBackToList` | `() => void` | Called when navigating back to list |
| `onPostView` | `(post: BlogPost) => void` | Called when a post is viewed |
| `postsPerPage` | `number` | Posts per page |
| `renderEmpty` | `() => ReactNode` | Custom render function for empty state |
| `renderError` | `(error: string, retry: () => void) => ReactNode` | Custom render function for error state |
| `renderLoading` | `() => ReactNode` | Custom render function for loading state |
| `showCategories` | `boolean` | Show category filter |
| `showRelatedPosts` | `boolean` | Show related posts on detail view |
| `showSearch` | `boolean` | Show search input |
| `variant` | `'list' | 'grid'` | Grid variant for list view |

---

## Category

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Category
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `color` | `string` |  |
| `description` | `null | string` |  |
| `icon` | `null | string` |  |
| `id` | `string` |  |
| `name` | `string` |  |
| `slug` | `string` |  |
| `wish_count` | `number` |  |

---

## ChatSource

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ChatSource
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `article_id` | `string` |  |
| `flow_id` | `string` |  |
| `flow_slug` | `string` |  |
| `similarity` | `number` |  |
| `slug` | `string` |  |
| `title` | `string` |  |
| `type` | `'help_article' | 'blog_post'` | Source type - determines routing behavior |

---

## ChatWidgetProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ChatWidgetProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `accentColor` | `string` | Accent color for the widget (used for links, send button, avatar accents) |
| `agentName` | `string` | Name of the chat agent |
| `apiUrl` | `string` | API URL for the help center |
| `className` | `string` | Custom class name |
| `colors` | `ChatWidgetColors` | Color customization options |
| `fontSize` | `string` | Base font size for the widget Can be 'sm' (12px), 'base' (14px), 'lg' (16px), or a custom value like '13px' or '0.875rem' |
| `greeting` | `string` | Initial greeting message |
| `logoUrl` | `string` | Logo URL for the agent avatar |
| `onArticleClick` | `(slug: string, source: ChatSource) => void` | Callback when an article source is clicked. Provides the article slug and full source data for flexible routing. |
| `onSupportClick` | `() => void` | Callback when support button is clicked |
| `options` | `ChatOption[]` | Quick reply options shown initially |
| `projectId` | `string` | Project ID for API calls |
| `subtitle` | `string` | Subtitle shown below greeting |

---

## Comment

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Comment
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `author_avatar_url` | `null | string` |  |
| `author_name` | `string` |  |
| `author_type` | `'user' | 'anonymous' | 'team_member'` |  |
| `author_user_id` | `null | string` |  |
| `content` | `string` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `is_deleted` | `boolean` |  |
| `is_official` | `boolean` |  |
| `parent_id` | `null | string` |  |
| `replies` | `Comment[]` |  |
| `reply_count` | `number` |  |
| `updated_at` | `string` |  |
| `wish_id` | `string` |  |

---

## CommentAuthor

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface CommentAuthor
```

### Description

Comment Types

### Properties

| Name | Type | Description |
|------|------|-------------|
| `avatar_url` | `null | string` |  |
| `name` | `string` |  |

---

## CommentCreateInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface CommentCreateInput
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `author_email` | `string` |  |
| `author_name` | `string` |  |
| `content` | `string` |  |
| `parent_id` | `string` |  |
| `wish_id` | `string` |  |

---

## CommentsResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface CommentsResponse
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `Comment[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## ContactForm

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactForm
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `createdAt` | `string` |  |
| `description` | `string` |  |
| `emailRecipient` | `string` |  |
| `emailSubject` | `string` |  |
| `enabled` | `boolean` |  |
| `fields` | `ContactFormField[]` |  |
| `id` | `string` |  |
| `integration` | `ContactFormIntegration` | Integration settings for form submission |
| `name` | `string` |  |
| `submitButtonText` | `string` |  |
| `successMessage` | `string` |  |
| `updatedAt` | `string` |  |

---

## ContactFormField

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactFormField
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `id` | `string` |  |
| `label` | `string` |  |
| `options` | `string[]` |  |
| `placeholder` | `string` |  |
| `required` | `boolean` |  |
| `type` | `ContactFormFieldType` |  |
| `validation` | `ContactFormFieldValidation` |  |

---

## ContactFormFieldValidation

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactFormFieldValidation
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `maxLength` | `number` |  |
| `minLength` | `number` |  |
| `pattern` | `string` |  |

---

## ContactFormRendererProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactFormRendererProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Optional description override |
| `formId` | `string` | Form ID to load |
| `onError` | `(error: string) => void` | Called on submission error |
| `onSuccess` | `() => void` | Called when the form is submitted successfully |
| `projectId` | `string` | Project ID for submission |
| `title` | `string` | Optional title override |

---

## ContactFormSubmission

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactFormSubmission
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `Record<string, string | boolean>` |  |
| `form_id` | `string` |  |
| `id` | `string` |  |
| `project_id` | `string` |  |
| `submitted_at` | `string` |  |

---

## ContactFormSubmitInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface ContactFormSubmitInput
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `Record<string, string | boolean>` |  |
| `metadata` | `Record<string, unknown>` |  |

---

## CustomColors

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface CustomColors
```

### Description

Customization & Theme Types

### Properties

| Name | Type | Description |
|------|------|-------------|
| `accent` | `string` |  |
| `background` | `string` |  |
| `border` | `string` |  |
| `cardBackground` | `string` |  |
| `cardText` | `string` |  |
| `info` | `string` |  |
| `infoSubtle` | `string` |  |
| `muted` | `string` |  |
| `mutedForeground` | `string` |  |
| `navbarBackground` | `string` |  |
| `navbarText` | `string` |  |
| `primary` | `string` |  |
| `secondary` | `string` |  |
| `success` | `string` |  |
| `successSubtle` | `string` |  |
| `text` | `string` |  |
| `warning` | `string` |  |
| `warningSubtle` | `string` |  |

---

## CustomTypography

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface CustomTypography
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `fontFamily` | `string` |  |
| `fontSizes` | `object` |  |

---

## LayoutConfig

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface LayoutConfig
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `borderRadius` | `number` |  |
| `cardStyle` | `object` |  |

---

## PaginatedResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface PaginatedResponse
```

### Description

Paginated response wrapper

### Properties

| Name | Type | Description |
|------|------|-------------|
| `data` | `T[]` |  |
| `page` | `number` |  |
| `per_page` | `number` |  |
| `total` | `number` |  |
| `total_pages` | `number` |  |

---

## QuickAction

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface QuickAction
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `icon` | `ComponentType<object>` |  |
| `label` | `string` |  |
| `onClick` | `() => void` |  |

---

## Survey

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface Survey
```

### Description

Survey

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` |  |
| `description` | `string` |  |
| `id` | `string` |  |
| `is_active` | `boolean` |  |
| `name` | `string` |  |
| `nodes` | `SurveyNode[]` |  |
| `number_of_questions` | `number` |  |
| `number_of_responses` | `number` |  |
| `project_id` | `string` |  |
| `responses` | `SurveyResponse[]` |  |
| `slug` | `string` |  |
| `updated_at` | `string` |  |

---

## SurveyAnswer

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyAnswer
```

### Description

Survey Answer

### Properties

| Name | Type | Description |
|------|------|-------------|
| `answer` | `boolean` |  |
| `answer_options` | `string[]` |  |
| `answer_rating` | `number` |  |
| `answer_text` | `string` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `node` | `object` |  |
| `node_id` | `string` |  |
| `response_id` | `string` |  |

---

## SurveyNode

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyNode
```

### Description

Survey Node

Individual questions or result nodes in a survey decision tree.

### Properties

| Name | Type | Description |
|------|------|-------------|
| `answer_no_node_id` | `null | string` |  |
| `answer_yes_node_id` | `null | string` |  |
| `branches` | `SurveyNodeBranch[]` |  |
| `created_at` | `string` |  |
| `id` | `string` |  |
| `is_required` | `boolean` |  |
| `max_rating` | `number` |  |
| `min_rating` | `number` |  |
| `next_node_id` | `null | string` |  |
| `options` | `SurveyNodeOption[]` |  |
| `parent_id` | `null | string` |  |
| `question` | `string` |  |
| `question_type` | `SurveyQuestionType` |  |
| `result_message` | `null | string` |  |
| `sort_order` | `number` |  |
| `survey_id` | `string` |  |
| `updated_at` | `string` |  |

---

## SurveyNodeBranch

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyNodeBranch
```

### Description

Survey Node Branch

Conditional branching configuration for decision tree logic.

### Properties

| Name | Type | Description |
|------|------|-------------|
| `condition` | `object` |  |
| `next_node_id` | `string` |  |

---

## SurveyNodeOption

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyNodeOption
```

### Description

Survey Node Option

### Properties

| Name | Type | Description |
|------|------|-------------|
| `label` | `string` |  |
| `value` | `string` |  |

---

## SurveyRendererProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyRendererProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `className` | `string` | Custom class name |
| `description` | `string` | Optional description override |
| `externalUserId` | `string` | External user ID to attach to the response |
| `metadata` | `Record<string, unknown>` | Additional metadata to attach to the response |
| `onComplete` | `() => void` | Called when the survey is submitted successfully |
| `onError` | `(error: string) => void` | Called on submission error |
| `slug` | `string` | Survey slug to load |
| `title` | `string` | Optional title override |

---

## SurveyResponse

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveyResponse
```

### Description

Survey Response

### Properties

| Name | Type | Description |
|------|------|-------------|
| `answers` | `SurveyAnswer[]` |  |
| `created_at` | `string` |  |
| `external_user_id` | `null | string` |  |
| `fingerprint` | `string` |  |
| `id` | `string` |  |
| `metadata` | `Record<string, unknown>` |  |
| `survey_id` | `string` |  |

---

## SurveySubmitInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface SurveySubmitInput
```

### Description

Input for submitting a survey response

### Properties

| Name | Type | Description |
|------|------|-------------|
| `answers` | `object[]` |  |
| `external_user_id` | `string` |  |
| `fingerprint` | `string` |  |
| `metadata` | `Record<string, unknown>` |  |

---

## UseBlogCategoriesOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogCategoriesOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `skip` | `boolean` | Skip initial fetch |

---

## UseBlogCategoriesResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogCategoriesResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `categories` | `BlogCategory[]` | List of blog categories |
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `refetch` | `() => Promise<void>` | Manually refetch data |

---

## UseBlogPostOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogPostOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `skip` | `boolean` | Skip initial fetch |
| `slug` | `string` | The blog post slug to fetch |

---

## UseBlogPostResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogPostResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `post` | `null | BlogPost` | The blog post data |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `relatedPosts` | `BlogPost[]` | Related posts |

---

## UseBlogPostsOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogPostsOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `category` | `string` | Filter by category slug |
| `featured` | `boolean` | Only featured posts |
| `per_page` | `number` | Items per page |
| `refreshInterval` | `number` | Auto-refresh interval in milliseconds |
| `search` | `string` | Search query |
| `skip` | `boolean` | Skip initial fetch |
| `tag` | `string` | Filter by tag |

---

## UseBlogPostsResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseBlogPostsResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `page` | `number` | Current page number |
| `posts` | `BlogPost[]` | List of blog posts |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `setFilters` | `(filters: Partial<UseBlogPostsOptions>) => void` | Update filters |
| `setPage` | `(page: number) => void` | Set the current page |
| `total` | `number` | Total number of posts |
| `totalPages` | `number` | Total number of pages |

---

## UseCommentsOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseCommentsOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `perPage` | `number` | Number of comments per page |
| `skip` | `boolean` | Skip initial fetch |
| `wishId` | `string` | The wish ID to fetch comments for |

---

## UseCommentsResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseCommentsResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `comments` | `Comment[]` | List of comments |
| `createComment` | `(data: Omit<CommentCreateInput, 'wish_id'>) => Promise<null | Comment>` | Create a new comment |
| `error` | `null | string` | Error message if any |
| `isCreating` | `boolean` | Loading state for creating a comment |
| `isLoading` | `boolean` | Loading state |
| `nextPage` | `() => void` | Go to next page |
| `page` | `number` | Current page |
| `prevPage` | `() => void` | Go to previous page |
| `refetch` | `() => Promise<void>` | Manually refetch data |
| `setPage` | `(page: number) => void` | Go to specific page |
| `total` | `number` | Total number of comments |
| `totalPages` | `number` | Total pages |

---

## UseContactFormOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseContactFormOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `enabled` | `boolean` | Whether to fetch the form immediately |
| `trackView` | `boolean` | Whether to track form views for analytics |

---

## UseContactFormResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseContactFormResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` |  |
| `form` | `null | ContactForm` |  |
| `isLoading` | `boolean` |  |
| `refetch` | `() => Promise<void>` |  |

---

## UseContactFormSubmitOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseContactFormSubmitOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `onError` | `(error: string) => void` |  |
| `onSuccess` | `(submission: ContactFormSubmission) => void` |  |
| `rateLimitMs` | `number` | Rate limit cooldown in milliseconds |

---

## UseContactFormSubmitResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseContactFormSubmitResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `clearMessages` | `() => void` |  |
| `error` | `null | string` |  |
| `isRateLimited` | `boolean` |  |
| `isSubmitting` | `boolean` |  |
| `submitForm` | `(projectId: string, formId: string, data: ContactFormSubmitInput) => Promise<null | ContactFormSubmission>` |  |
| `successMessage` | `null | string` |  |
| `validateField` | `(value: string, field: object) => null | string` |  |

---

## UseFeaturedPostsOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseFeaturedPostsOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `skip` | `boolean` | Skip initial fetch |

---

## UseFeaturedPostsResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseFeaturedPostsResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` | Error message if any |
| `isLoading` | `boolean` | Loading state |
| `posts` | `BlogPost[]` | List of featured blog posts |
| `refetch` | `() => Promise<void>` | Manually refetch data |

---

## UseSurveyOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSurveyOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `enabled` | `boolean` | Whether to fetch the survey immediately |

---

## UseSurveyResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSurveyResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `error` | `null | string` |  |
| `isLoading` | `boolean` |  |
| `nodes` | `SurveyNode[]` |  |
| `refetch` | `() => Promise<void>` |  |
| `survey` | `null | Survey` |  |

---

## UseSurveySubmitOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSurveySubmitOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `onError` | `(error: string) => void` |  |
| `onSuccess` | `(response: SurveyResponse) => void` |  |

---

## UseSurveySubmitResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseSurveySubmitResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `clearMessages` | `() => void` |  |
| `error` | `null | string` |  |
| `isSubmitting` | `boolean` |  |
| `submitResponse` | `(surveyId: string, data: SurveySubmitInput) => Promise<null | SurveyResponse>` |  |
| `successMessage` | `null | string` |  |

---

## UseWaitlistOptions

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWaitlistOptions
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `email` | `string` | Email to auto-check waitlist status for on mount |
| `fetchCountOnMount` | `boolean` | Whether to fetch the waitlist count on mount |
| `onJoinError` | `(error: string) => void` | Callback when join fails |
| `onJoinSuccess` | `(entry: WaitlistEntry) => void` | Callback when successfully joined the waitlist |
| `onLeaveError` | `(error: string) => void` | Callback when leave fails |
| `onLeaveSuccess` | `() => void` | Callback when successfully left the waitlist |

---

## UseWaitlistResult

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface UseWaitlistResult
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `checkStatus` | `(email: string) => Promise<null | WaitlistStatus>` | Check if an email is on the waitlist |
| `clearMessages` | `() => void` | Clear error and success messages |
| `count` | `null | number` | Total count of users on the waitlist |
| `error` | `null | string` | Error message if any operation failed |
| `isCheckingStatus` | `boolean` | Loading state for status check |
| `isJoining` | `boolean` | Loading state for join operation |
| `isLeaving` | `boolean` | Loading state for leave operation |
| `isLoading` | `boolean` | Loading state for initial data fetch |
| `isOnWaitlist` | `null | boolean` | Whether the provided email is on the waitlist |
| `join` | `(data: WaitlistJoinInput) => Promise<null | WaitlistEntry>` | Join the waitlist |
| `leave` | `(email: string) => Promise<boolean>` | Leave the waitlist |
| `refreshCount` | `() => Promise<void>` | Refresh the waitlist count |
| `status` | `null | WaitlistStatus` | Current user's waitlist status details |
| `successMessage` | `null | string` | Success message after successful operation |

---

## WaitlistCount

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WaitlistCount
```

### Description

Waitlist count response

### Properties

| Name | Type | Description |
|------|------|-------------|
| `count` | `number` | Total number of users on the waitlist |

---

## WaitlistEntry

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WaitlistEntry
```

### Description

Waitlist entry (returned after joining)

### Properties

| Name | Type | Description |
|------|------|-------------|
| `created_at` | `string` | When the user joined |
| `email` | `string` | Email address |
| `id` | `string` | Unique ID of the waitlist entry |
| `name` | `string` | Name (if provided) |
| `position` | `number` | Position in the waitlist |

---

## WaitlistJoinInput

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WaitlistJoinInput
```

### Description

Input for joining a waitlist

### Properties

| Name | Type | Description |
|------|------|-------------|
| `email` | `string` | Email address to add to waitlist |
| `metadata` | `Record<string, unknown>` | Optional additional metadata |
| `name` | `string` | Optional name of the user |

---

## WhatsNewPopupProps

**Kind:** `interface` | **Access:** `public`

### Declaration

```typescript
interface WhatsNewPopupProps
```

### Properties

| Name | Type | Description |
|------|------|-------------|
| `autoPlayInterval` | `number` | Auto-play carousel interval in ms (0 to disable) |
| `autoShow` | `boolean` | Auto-show popup on mount if there's a new release Uses localStorage to track seen releases |
| `className` | `string` | Custom class name |
| `maxItems` | `number` | Maximum number of items to show |
| `onOpenChange` | `(open: boolean) => void` | Callback when open state changes |
| `onViewAll` | `() => void` | Click handler for "View All" button |
| `open` | `boolean` | Whether the popup is open |
| `position` | `'bottom-right' | 'bottom-left' | 'bottom-center'` | Position of the popup |
| `showMedia` | `boolean` | Show media carousel |
| `showTypes` | `'feature' | 'improvement' | 'bugfix' | 'other'[]` | Show only specific item types |
| `storageKey` | `string` | localStorage key for tracking seen releases |
| `title` | `string` | Title for the popup |

---

## ArticleType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type ArticleType = 'guide' | 'faq' | 'tutorial'
```

### Description

Help Center Types

### Values

- `guide`
- `faq`
- `tutorial`

---

## ComponentStatus

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type ComponentStatus = 'operational' | 'degraded' | 'partial_outage' | 'major_outage'
```

### Values

- `operational`
- `degraded`
- `partial_outage`
- `major_outage`

---

## ContactFormFieldType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type ContactFormFieldType = 'text' | 'email' | 'textarea' | 'select' | 'radio' | 'checkbox'
```

### Description

Contact Form Types

Configurable contact forms for collecting user submissions.

### Values

- `text`
- `email`
- `textarea`
- `select`
- `radio`
- `checkbox`

---

## FlowDisplayType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FlowDisplayType = 'list' | 'accordion' | 'decision_tree' | 'wizard'
```

### Values

- `list`
- `accordion`
- `decision_tree`
- `wizard`

---

## Form

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type Form = ContactForm
```

---

## FormField

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormField = ContactFormField
```

---

## FormFieldType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormFieldType = ContactFormFieldType
```

---

## FormFieldValidation

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormFieldValidation = ContactFormFieldValidation
```

---

## FormIntegration

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormIntegration = ContactFormIntegration
```

---

## FormSubmission

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormSubmission = ContactFormSubmission
```

---

## FormSubmitInput

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type FormSubmitInput = ContactFormSubmitInput
```

---

## IncidentImpact

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type IncidentImpact = 'minor' | 'major' | 'critical'
```

### Values

- `minor`
- `major`
- `critical`

---

## IncidentStatus

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type IncidentStatus = 'investigating' | 'identified' | 'monitoring' | 'resolved'
```

### Values

- `investigating`
- `identified`
- `monitoring`
- `resolved`

---

## OverallStatus

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type OverallStatus = 'operational' | 'degraded' | 'partial_outage' | 'major_outage'
```

### Values

- `operational`
- `degraded`
- `partial_outage`
- `major_outage`

---

## RoadmapVisibility

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type RoadmapVisibility = 'public' | 'private' | 'voters_only'
```

### Values

- `public`
- `private`
- `voters_only`

---

## StatusState

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type StatusState = 'active' | 'resolved'
```

### Values

- `active`
- `resolved`

---

## StatusType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type StatusType = 'operational' | 'maintenance' | 'degraded_performance' | 'partial_outage' | 'major_outage' | 'incident'
```

### Description

Status Page Types

Types for status page API responses.

### Values

- `operational`
- `maintenance`
- `degraded_performance`
- `partial_outage`
- `major_outage`
- `incident`

---

## SupportRequestCategory

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type SupportRequestCategory = 'bug_report' | 'feature_request' | 'general_inquiry' | 'billing' | 'account'
```

### Values

- `bug_report`
- `feature_request`
- `general_inquiry`
- `billing`
- `account`

---

## SupportRequestPriority

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type SupportRequestPriority = 'low' | 'medium' | 'high' | 'critical'
```

### Values

- `low`
- `medium`
- `high`
- `critical`

---

## SupportRequestStatus

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type SupportRequestStatus = 'new' | 'open' | 'in_progress' | 'resolved' | 'closed'
```

### Description

Support Types

### Values

- `new`
- `open`
- `in_progress`
- `resolved`
- `closed`

---

## SurveyQuestionType

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type SurveyQuestionType = 'yes_no' | 'short_answer' | 'paragraph' | 'multiple_choice' | 'checkboxes' | 'rating'
```

### Description

Survey Question Types

### Values

- `yes_no`
- `short_answer`
- `paragraph`
- `multiple_choice`
- `checkboxes`
- `rating`

---

## ThemeMode

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type ThemeMode = 'light' | 'dark' | 'system'
```

### Description

Theme mode - 'light', 'dark', or 'system' (follows OS preference)

### Values

- `light`
- `dark`
- `system`

---

## WishPriority

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type WishPriority = 'low' | 'medium' | 'high' | 'critical'
```

### Values

- `low`
- `medium`
- `high`
- `critical`

---

## WishStatus

**Kind:** `type` | **Access:** `public`

### Declaration

```typescript
type WishStatus = 'pending' | 'under_review' | 'planned' | 'in_progress' | 'completed' | 'declined'
```

### Description

Wish (Feature Request) Types

### Values

- `pending`
- `under_review`
- `planned`
- `in_progress`
- `completed`
- `declined`

---

## cn

**Kind:** `function` | **Access:** `public`

### Declaration

```typescript
function cn(inputs: ClassValue[]): string
```

### Description

Merges Tailwind CSS classes with proper precedence handling

---

## getFingerprint

**Kind:** `function` | **Access:** `public`

### Declaration

```typescript
function getFingerprint(): string
```

### Description

Get or create a fingerprint for the current browser/device

---

## resetFingerprint

**Kind:** `function` | **Access:** `public`

### Declaration

```typescript
function resetFingerprint(): void
```

### Description

Reset the stored fingerprint (for testing purposes)

---


*This documentation was auto-generated from the SDK source.*
