@burdenoff/website-sdk 2026.829.8 → 2026.921.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -1
- package/dist/components/contact.js +4 -1
- package/dist/components/contact.js.map +1 -1
- package/dist/components/contact.mjs +4 -1
- package/dist/components/contact.mjs.map +1 -1
- package/dist/components/explore.d.mts +14 -1
- package/dist/components/explore.d.ts +14 -1
- package/dist/components/explore.js +217 -43
- package/dist/components/explore.js.map +1 -1
- package/dist/components/explore.mjs +217 -45
- package/dist/components/explore.mjs.map +1 -1
- package/dist/components/newsletter.js +4 -1
- package/dist/components/newsletter.js.map +1 -1
- package/dist/components/newsletter.mjs +4 -1
- package/dist/components/newsletter.mjs.map +1 -1
- package/dist/components/partners.js +23 -13
- package/dist/components/partners.js.map +1 -1
- package/dist/components/partners.mjs +23 -13
- package/dist/components/partners.mjs.map +1 -1
- package/dist/components/pricing.js +4 -1
- package/dist/components/pricing.js.map +1 -1
- package/dist/components/pricing.mjs +4 -1
- package/dist/components/pricing.mjs.map +1 -1
- package/dist/components/unsubscribe.js +4 -1
- package/dist/components/unsubscribe.js.map +1 -1
- package/dist/components/unsubscribe.mjs +4 -1
- package/dist/components/unsubscribe.mjs.map +1 -1
- package/dist/components/waitlist.js +4 -1
- package/dist/components/waitlist.js.map +1 -1
- package/dist/components/waitlist.mjs +4 -1
- package/dist/components/waitlist.mjs.map +1 -1
- package/dist/content/index.js +23 -13
- package/dist/content/index.js.map +1 -1
- package/dist/content/index.mjs +23 -13
- package/dist/content/index.mjs.map +1 -1
- package/dist/{use-explore-chat-BzXCz2UM.d.mts → explore-types-CLw19R76.d.mts} +1 -131
- package/dist/{use-explore-chat-BzXCz2UM.d.ts → explore-types-CLw19R76.d.ts} +1 -131
- package/dist/hooks/index.d.mts +2 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.js +23 -7
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +23 -7
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +143 -3
- package/dist/index.d.ts +143 -3
- package/dist/index.js +1552 -207
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1548 -210
- package/dist/index.mjs.map +1 -1
- package/dist/seo/index.js +4 -1
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +4 -1
- package/dist/seo/index.mjs.map +1 -1
- package/dist/store/index.js +23 -13
- package/dist/store/index.js.map +1 -1
- package/dist/store/index.mjs +23 -13
- package/dist/store/index.mjs.map +1 -1
- package/dist/use-explore-chat-CvW-kyIm.d.mts +145 -0
- package/dist/use-explore-chat-DdGBimiz.d.ts +145 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -5,6 +5,7 @@ export { PartnersPage, PartnersPageProps } from './components/partners.mjs';
|
|
|
5
5
|
import { C as CareersPostingOption } from './index-BMWQNZDX.mjs';
|
|
6
6
|
export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-BMWQNZDX.mjs';
|
|
7
7
|
import * as react from 'react';
|
|
8
|
+
import { ComponentType, ReactNode } from 'react';
|
|
8
9
|
export { NewsletterForm, NewsletterFormProps, NewsletterPage, NewsletterPageProps } from './components/newsletter.mjs';
|
|
9
10
|
export { PlanCard, PricingPage, PricingProps, PricingSection } from './components/pricing.mjs';
|
|
10
11
|
export { WaitlistForm, WaitlistFormProps, WaitlistPage, WaitlistPageProps } from './components/waitlist.mjs';
|
|
@@ -18,7 +19,8 @@ export { ProblemSolved, ProblemsSolvedSection, ProblemsSolvedSectionProps } from
|
|
|
18
19
|
export { DetectedPlatform, ElectronDownloadLink, ElectronDownloadLinkProps, detectElectronPlatform } from './components/electron-download.mjs';
|
|
19
20
|
export { ExplorePage, ExplorePageProps } from './components/explore.mjs';
|
|
20
21
|
export { ExploreCta, ExploreCtaProps } from './components/explore-cta.mjs';
|
|
21
|
-
export {
|
|
22
|
+
export { d as EXPLORE_CATALOG_QUERY, e as EXPLORE_MESSAGE_QUERY, b as ExploreCatalog, f as ExploreCatalogQueryData, g as ExploreConversation, h as ExploreCtaKind, i as ExploreCtaLink, j as ExploreErrorCode, a as ExploreLimits, c as ExploreMessage, k as ExploreMessageQueryData, l as ExploreMessageRole, m as ExploreMessageStatus, E as ExploreProduct, n as ExploreReference, S as SEND_EXPLORE_MESSAGE_MUTATION, o as SendExploreMessageInput, p as SendExploreMessageMutationData, q as SendExploreMessageResult } from './explore-types-CLw19R76.mjs';
|
|
23
|
+
export { D as DEFAULT_EXPLORE_EXAMPLE_PROMPTS, E as ExploreChatError, a as ExploreChatErrorKind, b as ExploreChatPhase, F as FALLBACK_EXPLORE_LIMITS, U as UseExploreChatOptions, c as UseExploreChatResult, d as classifyExploreError, u as useExploreChat } from './use-explore-chat-CvW-kyIm.mjs';
|
|
22
24
|
export { RybbitAnalytics, RybbitAnalyticsProps } from './analytics/index.mjs';
|
|
23
25
|
export { PageHead, PageHeadProps } from './seo/index.mjs';
|
|
24
26
|
export { ProductData, ProductProvider, ProductProviderProps, useProduct, useProductConfig } from './product/index.mjs';
|
|
@@ -60,9 +62,144 @@ interface CareersSubmissionFormProps {
|
|
|
60
62
|
declare function isValidUrl(value: string): boolean;
|
|
61
63
|
declare function CareersSubmissionForm({ productName, recaptchaSiteKey, postings, heroTitle, heroDescription, headingLevel, className, seo, }: CareersSubmissionFormProps): react.JSX.Element;
|
|
62
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Concept pages — the shared data contract.
|
|
67
|
+
*
|
|
68
|
+
* Every product website renders `/concepts` and `/concept/:slug` from a GENERATED
|
|
69
|
+
* `src/data/concepts.ts` (`dev/scripts/concepts/build_site_concepts.py`), which types its
|
|
70
|
+
* exports against these interfaces. The explore backend parses the same pages out of each
|
|
71
|
+
* site's `llms-full.txt`, so a field renamed here breaks 37 site builds and the corpus at
|
|
72
|
+
* once — change the generator and this file together, never one of them alone.
|
|
73
|
+
*
|
|
74
|
+
* Canonical source: `dev/platform/context/concepts/01-architecture.md` → "Contracts".
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
/** The frame a mockup was drawn for. Drives nothing but layout hints. */
|
|
78
|
+
type ConceptDevice = "desktop" | "mobile" | "tablet" | "wide" | "other";
|
|
79
|
+
/** One mockup image. Paths are site-relative; the pages absolutise them for SEO. */
|
|
80
|
+
interface ConceptImage {
|
|
81
|
+
/** Stable id: the source path under the mockups folder, extension dropped, `/` → `--`. */
|
|
82
|
+
key: string;
|
|
83
|
+
/** Full-size image, e.g. `/mockups/15-sessions-list.webp`. */
|
|
84
|
+
src: string;
|
|
85
|
+
/** 640px-wide thumbnail, e.g. `/mockups/thumbs/15-sessions-list.webp`. */
|
|
86
|
+
thumb: string;
|
|
87
|
+
/** Intrinsic size of `src`. */
|
|
88
|
+
width: number;
|
|
89
|
+
height: number;
|
|
90
|
+
/** Intrinsic size of `thumb`. */
|
|
91
|
+
thumbWidth: number;
|
|
92
|
+
thumbHeight: number;
|
|
93
|
+
/** Short screen title. */
|
|
94
|
+
title: string;
|
|
95
|
+
/** Alt text. Always starts "Concept illustration of". */
|
|
96
|
+
alt: string;
|
|
97
|
+
/** One-line caption. */
|
|
98
|
+
caption: string;
|
|
99
|
+
/** 80–170 words describing what the illustration shows. */
|
|
100
|
+
description: string;
|
|
101
|
+
device: ConceptDevice;
|
|
102
|
+
}
|
|
103
|
+
/** A feature or flow, illustrated by one or more mockups. */
|
|
104
|
+
interface Concept {
|
|
105
|
+
slug: string;
|
|
106
|
+
/** 1-based position across the product's concepts; drives listing and prev/next. */
|
|
107
|
+
order: number;
|
|
108
|
+
title: string;
|
|
109
|
+
/** Matches a `ConceptCategory.name`. */
|
|
110
|
+
category: string;
|
|
111
|
+
tagline: string;
|
|
112
|
+
metaDescription: string;
|
|
113
|
+
overview: string[];
|
|
114
|
+
highlights: string[];
|
|
115
|
+
workflow: string[];
|
|
116
|
+
audience: string[];
|
|
117
|
+
keywords: string[];
|
|
118
|
+
/** Slugs of related concepts on the same site. */
|
|
119
|
+
related: string[];
|
|
120
|
+
images: ConceptImage[];
|
|
121
|
+
}
|
|
122
|
+
interface ConceptCategory {
|
|
123
|
+
name: string;
|
|
124
|
+
description: string;
|
|
125
|
+
}
|
|
126
|
+
/** Props the pages pass to a site's link adapter. */
|
|
127
|
+
interface ConceptLinkProps {
|
|
128
|
+
href: string;
|
|
129
|
+
className?: string;
|
|
130
|
+
children: ReactNode;
|
|
131
|
+
"aria-label"?: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The link the pages render for every internal URL. Sites pass a tiny adapter around their
|
|
135
|
+
* router's `Link` so moving between concepts stays a client-side navigation; without one the
|
|
136
|
+
* pages fall back to a plain `<a href>`.
|
|
137
|
+
*/
|
|
138
|
+
type ConceptLinkComponent = ComponentType<ConceptLinkProps>;
|
|
139
|
+
/**
|
|
140
|
+
* The disclaimer shown beside every concept image. The same sentence applies to all of them
|
|
141
|
+
* — including the few that began as real captures — so a visitor never has to guess which
|
|
142
|
+
* picture shows the shipping product.
|
|
143
|
+
*/
|
|
144
|
+
declare const CONCEPT_ILLUSTRATION_NOTICE = "These images are illustrations of the concept, not screenshots of the actual product.";
|
|
145
|
+
/** The landing page route. */
|
|
146
|
+
declare const CONCEPTS_PATH = "/concepts";
|
|
147
|
+
/** Prefix of every concept detail route: `/concept/<slug>`. */
|
|
148
|
+
declare const CONCEPT_PATH_PREFIX = "/concept";
|
|
149
|
+
/** Site-relative URL of a concept's detail page. */
|
|
150
|
+
declare function conceptPath(slug: string): string;
|
|
151
|
+
/**
|
|
152
|
+
* Resolve a route parameter to its concept. Returns `undefined` for an unknown slug — the
|
|
153
|
+
* site then redirects to `/concepts` rather than rendering a soft 404.
|
|
154
|
+
*/
|
|
155
|
+
declare function getConceptBySlug(concepts: readonly Concept[], slug: string | null | undefined): Concept | undefined;
|
|
156
|
+
|
|
157
|
+
interface ConceptsPageProps {
|
|
158
|
+
/** Product display name, e.g. `"VibeControls"`. */
|
|
159
|
+
productName: string;
|
|
160
|
+
/** Public origin of the site, e.g. `"https://vibecontrols.com"`. Used for absolute URLs. */
|
|
161
|
+
siteUrl: string;
|
|
162
|
+
concepts: readonly Concept[];
|
|
163
|
+
/** Section order and descriptions. Concepts in an unlisted category still render, last. */
|
|
164
|
+
categories?: readonly ConceptCategory[];
|
|
165
|
+
/** Call to action rendered in the hero (e.g. the site's primary buttons). */
|
|
166
|
+
cta?: ReactNode;
|
|
167
|
+
/** Router adapter for internal links. Defaults to a plain `<a href>`. */
|
|
168
|
+
linkComponent?: ConceptLinkComponent;
|
|
169
|
+
/** Overrides the `<h1>`. Default: `"<productName> concepts"`. */
|
|
170
|
+
title?: string;
|
|
171
|
+
/** Overrides the meta description (and the hero lead). Default: built from the counts. */
|
|
172
|
+
description?: string;
|
|
173
|
+
/** Extra classes for the page root. */
|
|
174
|
+
className?: string;
|
|
175
|
+
}
|
|
176
|
+
interface ConceptDetailPageProps {
|
|
177
|
+
productName: string;
|
|
178
|
+
siteUrl: string;
|
|
179
|
+
/** The concept to render. The site resolves the slug and redirects when it is unknown. */
|
|
180
|
+
concept: Concept;
|
|
181
|
+
/** Every concept on the site — for related concepts and previous / next. */
|
|
182
|
+
concepts: readonly Concept[];
|
|
183
|
+
categories?: readonly ConceptCategory[];
|
|
184
|
+
/** Call to action rendered as a band at the end of the page. */
|
|
185
|
+
cta?: ReactNode;
|
|
186
|
+
linkComponent?: ConceptLinkComponent;
|
|
187
|
+
className?: string;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* `/concepts` — every concept on the site, grouped by category, with a client-side search
|
|
191
|
+
* and category filter. Filters start at "All", so the prerendered page lists everything.
|
|
192
|
+
*/
|
|
193
|
+
declare function ConceptsPage({ productName, siteUrl, concepts, categories, cta, linkComponent, title, description, className, }: ConceptsPageProps): react.JSX.Element;
|
|
194
|
+
/**
|
|
195
|
+
* `/concept/:slug` — one concept: hero illustration, the copy, every illustration with its
|
|
196
|
+
* caption and description, related concepts and previous / next by `order`.
|
|
197
|
+
*/
|
|
198
|
+
declare function ConceptDetailPage(props: ConceptDetailPageProps): react.JSX.Element;
|
|
199
|
+
|
|
63
200
|
declare const buttonVariants: (props?: ({
|
|
64
201
|
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
65
|
-
size?: "
|
|
202
|
+
size?: "icon" | "default" | "sm" | "lg" | null | undefined;
|
|
66
203
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
67
204
|
interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
68
205
|
asChild?: boolean;
|
|
@@ -143,11 +280,14 @@ interface ExploreStrings {
|
|
|
143
280
|
attachmentTooLarge: string;
|
|
144
281
|
attachmentTooMany: string;
|
|
145
282
|
noAnswer: string;
|
|
283
|
+
answerDidNotArrive: string;
|
|
146
284
|
askHuman: string;
|
|
147
285
|
prevSuggestion: string;
|
|
148
286
|
nextSuggestion: string;
|
|
287
|
+
conceptIllustration: string;
|
|
288
|
+
opensInNewTab: string;
|
|
149
289
|
capabilities: [string, string, string];
|
|
150
290
|
prompts: string[];
|
|
151
291
|
}
|
|
152
292
|
|
|
153
|
-
export { Button, type ButtonProps, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, ECOSYSTEM_PRODUCTS, EXPLORE_LOCALES, type ExploreLocale, type ExploreStrings, Input, Label, Select, Textarea, WebsiteSwitcherProduct, buttonVariants, isValidUrl };
|
|
293
|
+
export { Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, ConceptsPage, type ConceptsPageProps, ECOSYSTEM_PRODUCTS, EXPLORE_LOCALES, type ExploreLocale, type ExploreStrings, Input, Label, Select, Textarea, WebsiteSwitcherProduct, buttonVariants, conceptPath, getConceptBySlug, isValidUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { PartnersPage, PartnersPageProps } from './components/partners.js';
|
|
|
5
5
|
import { C as CareersPostingOption } from './index-BqHF-G-S.js';
|
|
6
6
|
export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-BqHF-G-S.js';
|
|
7
7
|
import * as react from 'react';
|
|
8
|
+
import { ComponentType, ReactNode } from 'react';
|
|
8
9
|
export { NewsletterForm, NewsletterFormProps, NewsletterPage, NewsletterPageProps } from './components/newsletter.js';
|
|
9
10
|
export { PlanCard, PricingPage, PricingProps, PricingSection } from './components/pricing.js';
|
|
10
11
|
export { WaitlistForm, WaitlistFormProps, WaitlistPage, WaitlistPageProps } from './components/waitlist.js';
|
|
@@ -18,7 +19,8 @@ export { ProblemSolved, ProblemsSolvedSection, ProblemsSolvedSectionProps } from
|
|
|
18
19
|
export { DetectedPlatform, ElectronDownloadLink, ElectronDownloadLinkProps, detectElectronPlatform } from './components/electron-download.js';
|
|
19
20
|
export { ExplorePage, ExplorePageProps } from './components/explore.js';
|
|
20
21
|
export { ExploreCta, ExploreCtaProps } from './components/explore-cta.js';
|
|
21
|
-
export {
|
|
22
|
+
export { d as EXPLORE_CATALOG_QUERY, e as EXPLORE_MESSAGE_QUERY, b as ExploreCatalog, f as ExploreCatalogQueryData, g as ExploreConversation, h as ExploreCtaKind, i as ExploreCtaLink, j as ExploreErrorCode, a as ExploreLimits, c as ExploreMessage, k as ExploreMessageQueryData, l as ExploreMessageRole, m as ExploreMessageStatus, E as ExploreProduct, n as ExploreReference, S as SEND_EXPLORE_MESSAGE_MUTATION, o as SendExploreMessageInput, p as SendExploreMessageMutationData, q as SendExploreMessageResult } from './explore-types-CLw19R76.js';
|
|
23
|
+
export { D as DEFAULT_EXPLORE_EXAMPLE_PROMPTS, E as ExploreChatError, a as ExploreChatErrorKind, b as ExploreChatPhase, F as FALLBACK_EXPLORE_LIMITS, U as UseExploreChatOptions, c as UseExploreChatResult, d as classifyExploreError, u as useExploreChat } from './use-explore-chat-DdGBimiz.js';
|
|
22
24
|
export { RybbitAnalytics, RybbitAnalyticsProps } from './analytics/index.js';
|
|
23
25
|
export { PageHead, PageHeadProps } from './seo/index.js';
|
|
24
26
|
export { ProductData, ProductProvider, ProductProviderProps, useProduct, useProductConfig } from './product/index.js';
|
|
@@ -60,9 +62,144 @@ interface CareersSubmissionFormProps {
|
|
|
60
62
|
declare function isValidUrl(value: string): boolean;
|
|
61
63
|
declare function CareersSubmissionForm({ productName, recaptchaSiteKey, postings, heroTitle, heroDescription, headingLevel, className, seo, }: CareersSubmissionFormProps): react.JSX.Element;
|
|
62
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Concept pages — the shared data contract.
|
|
67
|
+
*
|
|
68
|
+
* Every product website renders `/concepts` and `/concept/:slug` from a GENERATED
|
|
69
|
+
* `src/data/concepts.ts` (`dev/scripts/concepts/build_site_concepts.py`), which types its
|
|
70
|
+
* exports against these interfaces. The explore backend parses the same pages out of each
|
|
71
|
+
* site's `llms-full.txt`, so a field renamed here breaks 37 site builds and the corpus at
|
|
72
|
+
* once — change the generator and this file together, never one of them alone.
|
|
73
|
+
*
|
|
74
|
+
* Canonical source: `dev/platform/context/concepts/01-architecture.md` → "Contracts".
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
/** The frame a mockup was drawn for. Drives nothing but layout hints. */
|
|
78
|
+
type ConceptDevice = "desktop" | "mobile" | "tablet" | "wide" | "other";
|
|
79
|
+
/** One mockup image. Paths are site-relative; the pages absolutise them for SEO. */
|
|
80
|
+
interface ConceptImage {
|
|
81
|
+
/** Stable id: the source path under the mockups folder, extension dropped, `/` → `--`. */
|
|
82
|
+
key: string;
|
|
83
|
+
/** Full-size image, e.g. `/mockups/15-sessions-list.webp`. */
|
|
84
|
+
src: string;
|
|
85
|
+
/** 640px-wide thumbnail, e.g. `/mockups/thumbs/15-sessions-list.webp`. */
|
|
86
|
+
thumb: string;
|
|
87
|
+
/** Intrinsic size of `src`. */
|
|
88
|
+
width: number;
|
|
89
|
+
height: number;
|
|
90
|
+
/** Intrinsic size of `thumb`. */
|
|
91
|
+
thumbWidth: number;
|
|
92
|
+
thumbHeight: number;
|
|
93
|
+
/** Short screen title. */
|
|
94
|
+
title: string;
|
|
95
|
+
/** Alt text. Always starts "Concept illustration of". */
|
|
96
|
+
alt: string;
|
|
97
|
+
/** One-line caption. */
|
|
98
|
+
caption: string;
|
|
99
|
+
/** 80–170 words describing what the illustration shows. */
|
|
100
|
+
description: string;
|
|
101
|
+
device: ConceptDevice;
|
|
102
|
+
}
|
|
103
|
+
/** A feature or flow, illustrated by one or more mockups. */
|
|
104
|
+
interface Concept {
|
|
105
|
+
slug: string;
|
|
106
|
+
/** 1-based position across the product's concepts; drives listing and prev/next. */
|
|
107
|
+
order: number;
|
|
108
|
+
title: string;
|
|
109
|
+
/** Matches a `ConceptCategory.name`. */
|
|
110
|
+
category: string;
|
|
111
|
+
tagline: string;
|
|
112
|
+
metaDescription: string;
|
|
113
|
+
overview: string[];
|
|
114
|
+
highlights: string[];
|
|
115
|
+
workflow: string[];
|
|
116
|
+
audience: string[];
|
|
117
|
+
keywords: string[];
|
|
118
|
+
/** Slugs of related concepts on the same site. */
|
|
119
|
+
related: string[];
|
|
120
|
+
images: ConceptImage[];
|
|
121
|
+
}
|
|
122
|
+
interface ConceptCategory {
|
|
123
|
+
name: string;
|
|
124
|
+
description: string;
|
|
125
|
+
}
|
|
126
|
+
/** Props the pages pass to a site's link adapter. */
|
|
127
|
+
interface ConceptLinkProps {
|
|
128
|
+
href: string;
|
|
129
|
+
className?: string;
|
|
130
|
+
children: ReactNode;
|
|
131
|
+
"aria-label"?: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The link the pages render for every internal URL. Sites pass a tiny adapter around their
|
|
135
|
+
* router's `Link` so moving between concepts stays a client-side navigation; without one the
|
|
136
|
+
* pages fall back to a plain `<a href>`.
|
|
137
|
+
*/
|
|
138
|
+
type ConceptLinkComponent = ComponentType<ConceptLinkProps>;
|
|
139
|
+
/**
|
|
140
|
+
* The disclaimer shown beside every concept image. The same sentence applies to all of them
|
|
141
|
+
* — including the few that began as real captures — so a visitor never has to guess which
|
|
142
|
+
* picture shows the shipping product.
|
|
143
|
+
*/
|
|
144
|
+
declare const CONCEPT_ILLUSTRATION_NOTICE = "These images are illustrations of the concept, not screenshots of the actual product.";
|
|
145
|
+
/** The landing page route. */
|
|
146
|
+
declare const CONCEPTS_PATH = "/concepts";
|
|
147
|
+
/** Prefix of every concept detail route: `/concept/<slug>`. */
|
|
148
|
+
declare const CONCEPT_PATH_PREFIX = "/concept";
|
|
149
|
+
/** Site-relative URL of a concept's detail page. */
|
|
150
|
+
declare function conceptPath(slug: string): string;
|
|
151
|
+
/**
|
|
152
|
+
* Resolve a route parameter to its concept. Returns `undefined` for an unknown slug — the
|
|
153
|
+
* site then redirects to `/concepts` rather than rendering a soft 404.
|
|
154
|
+
*/
|
|
155
|
+
declare function getConceptBySlug(concepts: readonly Concept[], slug: string | null | undefined): Concept | undefined;
|
|
156
|
+
|
|
157
|
+
interface ConceptsPageProps {
|
|
158
|
+
/** Product display name, e.g. `"VibeControls"`. */
|
|
159
|
+
productName: string;
|
|
160
|
+
/** Public origin of the site, e.g. `"https://vibecontrols.com"`. Used for absolute URLs. */
|
|
161
|
+
siteUrl: string;
|
|
162
|
+
concepts: readonly Concept[];
|
|
163
|
+
/** Section order and descriptions. Concepts in an unlisted category still render, last. */
|
|
164
|
+
categories?: readonly ConceptCategory[];
|
|
165
|
+
/** Call to action rendered in the hero (e.g. the site's primary buttons). */
|
|
166
|
+
cta?: ReactNode;
|
|
167
|
+
/** Router adapter for internal links. Defaults to a plain `<a href>`. */
|
|
168
|
+
linkComponent?: ConceptLinkComponent;
|
|
169
|
+
/** Overrides the `<h1>`. Default: `"<productName> concepts"`. */
|
|
170
|
+
title?: string;
|
|
171
|
+
/** Overrides the meta description (and the hero lead). Default: built from the counts. */
|
|
172
|
+
description?: string;
|
|
173
|
+
/** Extra classes for the page root. */
|
|
174
|
+
className?: string;
|
|
175
|
+
}
|
|
176
|
+
interface ConceptDetailPageProps {
|
|
177
|
+
productName: string;
|
|
178
|
+
siteUrl: string;
|
|
179
|
+
/** The concept to render. The site resolves the slug and redirects when it is unknown. */
|
|
180
|
+
concept: Concept;
|
|
181
|
+
/** Every concept on the site — for related concepts and previous / next. */
|
|
182
|
+
concepts: readonly Concept[];
|
|
183
|
+
categories?: readonly ConceptCategory[];
|
|
184
|
+
/** Call to action rendered as a band at the end of the page. */
|
|
185
|
+
cta?: ReactNode;
|
|
186
|
+
linkComponent?: ConceptLinkComponent;
|
|
187
|
+
className?: string;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* `/concepts` — every concept on the site, grouped by category, with a client-side search
|
|
191
|
+
* and category filter. Filters start at "All", so the prerendered page lists everything.
|
|
192
|
+
*/
|
|
193
|
+
declare function ConceptsPage({ productName, siteUrl, concepts, categories, cta, linkComponent, title, description, className, }: ConceptsPageProps): react.JSX.Element;
|
|
194
|
+
/**
|
|
195
|
+
* `/concept/:slug` — one concept: hero illustration, the copy, every illustration with its
|
|
196
|
+
* caption and description, related concepts and previous / next by `order`.
|
|
197
|
+
*/
|
|
198
|
+
declare function ConceptDetailPage(props: ConceptDetailPageProps): react.JSX.Element;
|
|
199
|
+
|
|
63
200
|
declare const buttonVariants: (props?: ({
|
|
64
201
|
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
65
|
-
size?: "
|
|
202
|
+
size?: "icon" | "default" | "sm" | "lg" | null | undefined;
|
|
66
203
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
67
204
|
interface ButtonProps extends react.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
68
205
|
asChild?: boolean;
|
|
@@ -143,11 +280,14 @@ interface ExploreStrings {
|
|
|
143
280
|
attachmentTooLarge: string;
|
|
144
281
|
attachmentTooMany: string;
|
|
145
282
|
noAnswer: string;
|
|
283
|
+
answerDidNotArrive: string;
|
|
146
284
|
askHuman: string;
|
|
147
285
|
prevSuggestion: string;
|
|
148
286
|
nextSuggestion: string;
|
|
287
|
+
conceptIllustration: string;
|
|
288
|
+
opensInNewTab: string;
|
|
149
289
|
capabilities: [string, string, string];
|
|
150
290
|
prompts: string[];
|
|
151
291
|
}
|
|
152
292
|
|
|
153
|
-
export { Button, type ButtonProps, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, ECOSYSTEM_PRODUCTS, EXPLORE_LOCALES, type ExploreLocale, type ExploreStrings, Input, Label, Select, Textarea, WebsiteSwitcherProduct, buttonVariants, isValidUrl };
|
|
293
|
+
export { Button, type ButtonProps, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CareersPostingOption, CareersSubmissionForm, type CareersSubmissionFormProps, type Concept, type ConceptCategory, ConceptDetailPage, type ConceptDetailPageProps, type ConceptDevice, type ConceptImage, type ConceptLinkComponent, type ConceptLinkProps, ConceptsPage, type ConceptsPageProps, ECOSYSTEM_PRODUCTS, EXPLORE_LOCALES, type ExploreLocale, type ExploreStrings, Input, Label, Select, Textarea, WebsiteSwitcherProduct, buttonVariants, conceptPath, getConceptBySlug, isValidUrl };
|