@kodffe/ui 0.0.0-stage → 0.10.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/dist/_virtual/_rolldown/runtime.js +11 -0
- package/dist/accordion/accordion.d.ts +44 -0
- package/dist/accordion/accordion.js +84 -0
- package/dist/accordion/accordion.js.map +1 -0
- package/dist/alert/alert.d.ts +17 -0
- package/dist/alert/alert.js +59 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/app-shell/app-footer.d.ts +29 -0
- package/dist/app-shell/app-footer.js +39 -0
- package/dist/app-shell/app-footer.js.map +1 -0
- package/dist/app-shell/app-shell-context.d.ts +10 -0
- package/dist/app-shell/app-shell-context.js +12 -0
- package/dist/app-shell/app-shell-context.js.map +1 -0
- package/dist/app-shell/app-shell.d.ts +42 -0
- package/dist/app-shell/app-shell.js +191 -0
- package/dist/app-shell/app-shell.js.map +1 -0
- package/dist/app-shell/floating-actions.d.ts +19 -0
- package/dist/app-shell/floating-actions.js +59 -0
- package/dist/app-shell/floating-actions.js.map +1 -0
- package/dist/app-shell/workspace-switcher.d.ts +25 -0
- package/dist/app-shell/workspace-switcher.js +82 -0
- package/dist/app-shell/workspace-switcher.js.map +1 -0
- package/dist/badge/badge.d.ts +19 -0
- package/dist/badge/badge.js +59 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/banner/banner.d.ts +22 -0
- package/dist/banner/banner.js +80 -0
- package/dist/banner/banner.js.map +1 -0
- package/dist/breadcrumbs/breadcrumbs.d.ts +18 -0
- package/dist/breadcrumbs/breadcrumbs.js +45 -0
- package/dist/breadcrumbs/breadcrumbs.js.map +1 -0
- package/dist/button/button.d.ts +38 -0
- package/dist/button/button.js +83 -0
- package/dist/button/button.js.map +1 -0
- package/dist/card/card.d.ts +159 -0
- package/dist/card/card.js +390 -0
- package/dist/card/card.js.map +1 -0
- package/dist/card/insight-card.d.ts +19 -0
- package/dist/card/insight-card.js +51 -0
- package/dist/card/insight-card.js.map +1 -0
- package/dist/card/integration-card.d.ts +19 -0
- package/dist/card/integration-card.js +70 -0
- package/dist/card/integration-card.js.map +1 -0
- package/dist/charts/charts.d.ts +75 -0
- package/dist/charts/charts.js +453 -0
- package/dist/charts/charts.js.map +1 -0
- package/dist/choice/choice.d.ts +39 -0
- package/dist/choice/choice.js +143 -0
- package/dist/choice/choice.js.map +1 -0
- package/dist/combobox/combobox.d.ts +46 -0
- package/dist/combobox/combobox.js +196 -0
- package/dist/combobox/combobox.js.map +1 -0
- package/dist/command-palette/command-palette.d.ts +35 -0
- package/dist/command-palette/command-palette.js +164 -0
- package/dist/command-palette/command-palette.js.map +1 -0
- package/dist/confirm-dialog/confirm-dialog.d.ts +37 -0
- package/dist/confirm-dialog/confirm-dialog.js +106 -0
- package/dist/confirm-dialog/confirm-dialog.js.map +1 -0
- package/dist/content/assistant.d.ts +86 -0
- package/dist/content/assistant.js +213 -0
- package/dist/content/assistant.js.map +1 -0
- package/dist/content/content.d.ts +45 -0
- package/dist/content/content.js +136 -0
- package/dist/content/content.js.map +1 -0
- package/dist/data-display/avatar-sizes.d.ts +8 -0
- package/dist/data-display/avatar-sizes.js +12 -0
- package/dist/data-display/avatar-sizes.js.map +1 -0
- package/dist/data-display/avatar.d.ts +21 -0
- package/dist/data-display/avatar.js +53 -0
- package/dist/data-display/avatar.js.map +1 -0
- package/dist/data-display/chip.d.ts +20 -0
- package/dist/data-display/chip.js +64 -0
- package/dist/data-display/chip.js.map +1 -0
- package/dist/data-display/code-block.d.ts +14 -0
- package/dist/data-display/code-block.js +50 -0
- package/dist/data-display/code-block.js.map +1 -0
- package/dist/data-display/data-display.d.ts +73 -0
- package/dist/data-display/data-display.js +227 -0
- package/dist/data-display/data-display.js.map +1 -0
- package/dist/data-display/insights.d.ts +120 -0
- package/dist/data-display/insights.js +220 -0
- package/dist/data-display/insights.js.map +1 -0
- package/dist/data-table/cells.d.ts +86 -0
- package/dist/data-table/cells.js +163 -0
- package/dist/data-table/cells.js.map +1 -0
- package/dist/data-table/data-table.d.ts +112 -0
- package/dist/data-table/data-table.js +558 -0
- package/dist/data-table/data-table.js.map +1 -0
- package/dist/date-picker/date-picker.d.ts +61 -0
- package/dist/date-picker/date-picker.js +309 -0
- package/dist/date-picker/date-picker.js.map +1 -0
- package/dist/drawer/drawer.d.ts +32 -0
- package/dist/drawer/drawer.js +72 -0
- package/dist/drawer/drawer.js.map +1 -0
- package/dist/empty-state/empty-state.d.ts +25 -0
- package/dist/empty-state/empty-state.js +78 -0
- package/dist/empty-state/empty-state.js.map +1 -0
- package/dist/error-state/error-state.d.ts +19 -0
- package/dist/error-state/error-state.js +56 -0
- package/dist/error-state/error-state.js.map +1 -0
- package/dist/event-calendar/calendar-logic.test.d.ts +1 -0
- package/dist/event-calendar/dates.d.ts +35 -0
- package/dist/event-calendar/dates.js +55 -0
- package/dist/event-calendar/dates.js.map +1 -0
- package/dist/event-calendar/event-calendar.d.ts +125 -0
- package/dist/event-calendar/event-calendar.js +795 -0
- package/dist/event-calendar/event-calendar.js.map +1 -0
- package/dist/event-calendar/event-details.d.ts +50 -0
- package/dist/event-calendar/event-details.js +124 -0
- package/dist/event-calendar/event-details.js.map +1 -0
- package/dist/event-calendar/layout.d.ts +48 -0
- package/dist/event-calendar/layout.js +55 -0
- package/dist/event-calendar/layout.js.map +1 -0
- package/dist/file-upload/file-upload.d.ts +70 -0
- package/dist/file-upload/file-upload.js +307 -0
- package/dist/file-upload/file-upload.js.map +1 -0
- package/dist/filters/filters.d.ts +48 -0
- package/dist/filters/filters.js +103 -0
- package/dist/filters/filters.js.map +1 -0
- package/dist/form-field/form-field.d.ts +39 -0
- package/dist/form-field/form-field.js +88 -0
- package/dist/form-field/form-field.js.map +1 -0
- package/dist/hover-card/hover-card.d.ts +15 -0
- package/dist/hover-card/hover-card.js +27 -0
- package/dist/hover-card/hover-card.js.map +1 -0
- package/dist/hover-card/person-hover-card.d.ts +26 -0
- package/dist/hover-card/person-hover-card.js +85 -0
- package/dist/hover-card/person-hover-card.js.map +1 -0
- package/dist/icon/icon-tile.d.ts +20 -0
- package/dist/icon/icon-tile.js +55 -0
- package/dist/icon/icon-tile.js.map +1 -0
- package/dist/icon/icon.d.ts +14 -0
- package/dist/icon/icon.js +28 -0
- package/dist/icon/icon.js.map +1 -0
- package/dist/icon/icons.generated.d.ts +358 -0
- package/dist/icon/icons.generated.js +362 -0
- package/dist/icon/icons.generated.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.js +88 -0
- package/dist/input/extra-inputs.d.ts +122 -0
- package/dist/input/extra-inputs.js +351 -0
- package/dist/input/extra-inputs.js.map +1 -0
- package/dist/input/field-styles.d.ts +5 -0
- package/dist/input/field-styles.js +14 -0
- package/dist/input/field-styles.js.map +1 -0
- package/dist/input/input.d.ts +50 -0
- package/dist/input/input.js +107 -0
- package/dist/input/input.js.map +1 -0
- package/dist/layout/layout.d.ts +41 -0
- package/dist/layout/layout.js +90 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/lib/control-styles.d.ts +9 -0
- package/dist/lib/control-styles.js +16 -0
- package/dist/lib/control-styles.js.map +1 -0
- package/dist/lib/cx.d.ts +2 -0
- package/dist/lib/cx.js +8 -0
- package/dist/lib/cx.js.map +1 -0
- package/dist/lib/glyphs.d.ts +13 -0
- package/dist/lib/glyphs.js +67 -0
- package/dist/lib/glyphs.js.map +1 -0
- package/dist/lib/segmented-styles.d.ts +8 -0
- package/dist/lib/segmented-styles.js +12 -0
- package/dist/lib/segmented-styles.js.map +1 -0
- package/dist/lib/select-on-arrow.d.ts +7 -0
- package/dist/lib/select-on-arrow.js +21 -0
- package/dist/lib/select-on-arrow.js.map +1 -0
- package/dist/lib/skip-link.d.ts +5 -0
- package/dist/lib/skip-link.js +13 -0
- package/dist/lib/skip-link.js.map +1 -0
- package/dist/lib/use-media-query.d.ts +4 -0
- package/dist/lib/use-media-query.js +15 -0
- package/dist/lib/use-media-query.js.map +1 -0
- package/dist/lists/lists.d.ts +76 -0
- package/dist/lists/lists.js +133 -0
- package/dist/lists/lists.js.map +1 -0
- package/dist/locale-switch/locale-switch.d.ts +29 -0
- package/dist/locale-switch/locale-switch.js +62 -0
- package/dist/locale-switch/locale-switch.js.map +1 -0
- package/dist/logo/logo.d.ts +31 -0
- package/dist/logo/logo.js +157 -0
- package/dist/logo/logo.js.map +1 -0
- package/dist/logo/product-logo.d.ts +19 -0
- package/dist/logo/product-logo.js +46 -0
- package/dist/logo/product-logo.js.map +1 -0
- package/dist/marketing/marketing.d.ts +176 -0
- package/dist/marketing/marketing.js +451 -0
- package/dist/marketing/marketing.js.map +1 -0
- package/dist/marketing/newsletter-form.d.ts +21 -0
- package/dist/marketing/newsletter-form.js +100 -0
- package/dist/marketing/newsletter-form.js.map +1 -0
- package/dist/mascot/mascot.d.ts +28 -0
- package/dist/mascot/mascot.js +28 -0
- package/dist/mascot/mascot.js.map +1 -0
- package/dist/mascot/mascots.generated.d.ts +284 -0
- package/dist/mascot/mascots.generated.js +287 -0
- package/dist/mascot/mascots.generated.js.map +1 -0
- package/dist/master-detail/master-detail.d.ts +30 -0
- package/dist/master-detail/master-detail.js +71 -0
- package/dist/master-detail/master-detail.js.map +1 -0
- package/dist/menu/account-menu.d.ts +44 -0
- package/dist/menu/account-menu.js +78 -0
- package/dist/menu/account-menu.js.map +1 -0
- package/dist/menu/context-menu.d.ts +31 -0
- package/dist/menu/context-menu.js +111 -0
- package/dist/menu/context-menu.js.map +1 -0
- package/dist/menu/dropdown-menu.d.ts +49 -0
- package/dist/menu/dropdown-menu.js +152 -0
- package/dist/menu/dropdown-menu.js.map +1 -0
- package/dist/menu/menu-styles.d.ts +8 -0
- package/dist/menu/menu-styles.js +6 -0
- package/dist/menu/menu-styles.js.map +1 -0
- package/dist/menu/menubar.d.ts +31 -0
- package/dist/menu/menubar.js +125 -0
- package/dist/menu/menubar.js.map +1 -0
- package/dist/modal/modal.d.ts +34 -0
- package/dist/modal/modal.js +58 -0
- package/dist/modal/modal.js.map +1 -0
- package/dist/notification-center/notification-center.d.ts +51 -0
- package/dist/notification-center/notification-center.js +244 -0
- package/dist/notification-center/notification-center.js.map +1 -0
- package/dist/otp-input/otp-input.d.ts +23 -0
- package/dist/otp-input/otp-input.js +61 -0
- package/dist/otp-input/otp-input.js.map +1 -0
- package/dist/overlay/overlay.d.ts +53 -0
- package/dist/overlay/overlay.js +103 -0
- package/dist/overlay/overlay.js.map +1 -0
- package/dist/page-header/page-header.d.ts +55 -0
- package/dist/page-header/page-header.js +114 -0
- package/dist/page-header/page-header.js.map +1 -0
- package/dist/page-header/record-headers.d.ts +51 -0
- package/dist/page-header/record-headers.js +134 -0
- package/dist/page-header/record-headers.js.map +1 -0
- package/dist/page-header/section-header.d.ts +21 -0
- package/dist/page-header/section-header.js +44 -0
- package/dist/page-header/section-header.js.map +1 -0
- package/dist/page-navigation/page-navigation.d.ts +59 -0
- package/dist/page-navigation/page-navigation.js +136 -0
- package/dist/page-navigation/page-navigation.js.map +1 -0
- package/dist/pagination/pagination.d.ts +28 -0
- package/dist/pagination/pagination.js +102 -0
- package/dist/pagination/pagination.js.map +1 -0
- package/dist/phone-input/phone-input.d.ts +34 -0
- package/dist/phone-input/phone-input.js +171 -0
- package/dist/phone-input/phone-input.js.map +1 -0
- package/dist/popover/popover.d.ts +23 -0
- package/dist/popover/popover.js +40 -0
- package/dist/popover/popover.js.map +1 -0
- package/dist/progress/progress.d.ts +21 -0
- package/dist/progress/progress.js +49 -0
- package/dist/progress/progress.js.map +1 -0
- package/dist/segmented-control/segmented-control.d.ts +32 -0
- package/dist/segmented-control/segmented-control.js +29 -0
- package/dist/segmented-control/segmented-control.js.map +1 -0
- package/dist/select/select.d.ts +48 -0
- package/dist/select/select.js +136 -0
- package/dist/select/select.js.map +1 -0
- package/dist/settings/permission-matrix.d.ts +29 -0
- package/dist/settings/permission-matrix.js +101 -0
- package/dist/settings/permission-matrix.js.map +1 -0
- package/dist/settings/settings-row.d.ts +32 -0
- package/dist/settings/settings-row.js +63 -0
- package/dist/settings/settings-row.js.map +1 -0
- package/dist/side-nav/side-nav.d.ts +36 -0
- package/dist/side-nav/side-nav.js +123 -0
- package/dist/side-nav/side-nav.js.map +1 -0
- package/dist/site-header/site-header.d.ts +32 -0
- package/dist/site-header/site-header.js +99 -0
- package/dist/site-header/site-header.js.map +1 -0
- package/dist/skeleton/skeleton.d.ts +16 -0
- package/dist/skeleton/skeleton.js +19 -0
- package/dist/skeleton/skeleton.js.map +1 -0
- package/dist/slider/slider.d.ts +15 -0
- package/dist/slider/slider.js +48 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/spinner.d.ts +15 -0
- package/dist/spinner/spinner.js +42 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/stepper/step-dots.d.ts +16 -0
- package/dist/stepper/step-dots.js +26 -0
- package/dist/stepper/step-dots.js.map +1 -0
- package/dist/stepper/stepper.d.ts +26 -0
- package/dist/stepper/stepper.js +113 -0
- package/dist/stepper/stepper.js.map +1 -0
- package/dist/tabs/tabs.d.ts +31 -0
- package/dist/tabs/tabs.js +66 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/templates/app-templates.d.ts +126 -0
- package/dist/templates/app-templates.js +153 -0
- package/dist/templates/app-templates.js.map +1 -0
- package/dist/templates/site-templates.d.ts +49 -0
- package/dist/templates/site-templates.js +110 -0
- package/dist/templates/site-templates.js.map +1 -0
- package/dist/toast/toast-store.d.ts +54 -0
- package/dist/toast/toast-store.js +49 -0
- package/dist/toast/toast-store.js.map +1 -0
- package/dist/toast/toaster.d.ts +15 -0
- package/dist/toast/toaster.js +124 -0
- package/dist/toast/toaster.js.map +1 -0
- package/dist/tooltip/tooltip.d.ts +29 -0
- package/dist/tooltip/tooltip.js +54 -0
- package/dist/tooltip/tooltip.js.map +1 -0
- package/package.json +88 -3
- package/styles.css +521 -0
- package/README.md +0 -3
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { type IconName } from '../icon/icon';
|
|
3
|
+
import { type MascotStandingState } from '../mascot/mascot';
|
|
4
|
+
export type SectionTone = 'default' | 'muted' | 'indigo' | 'brand';
|
|
5
|
+
export interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
6
|
+
tone?: SectionTone;
|
|
7
|
+
/** Vertical spacing: `md` 64/96px, `lg` 96/160px. */
|
|
8
|
+
spacing?: 'sm' | 'md' | 'lg';
|
|
9
|
+
/** Small label above the title ("How we work"). */
|
|
10
|
+
eyebrow?: ReactNode;
|
|
11
|
+
title?: ReactNode;
|
|
12
|
+
description?: ReactNode;
|
|
13
|
+
/** Center the header (default left). */
|
|
14
|
+
centered?: boolean;
|
|
15
|
+
headingLevel?: 2 | 3;
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
/** Page section with consistent spacing, width and an optional header. */
|
|
19
|
+
export declare function Section({ tone, spacing, eyebrow, title, description, centered, headingLevel, className, children, ...rest }: SectionProps): import("react").JSX.Element;
|
|
20
|
+
export interface PageHeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
21
|
+
eyebrow?: ReactNode;
|
|
22
|
+
title: ReactNode;
|
|
23
|
+
description?: ReactNode;
|
|
24
|
+
/** Buttons; the primary action first. */
|
|
25
|
+
actions?: ReactNode;
|
|
26
|
+
/** Right column on desktop (illustration, product shot, interactive tool), below on mobile. */
|
|
27
|
+
media?: ReactNode;
|
|
28
|
+
/** Small line under the actions ("No credit card · Cancel anytime"). */
|
|
29
|
+
note?: ReactNode;
|
|
30
|
+
/** A line of facts under the title ("Updated Nov 4, 2026 · 5 min read"). */
|
|
31
|
+
meta?: ReactNode;
|
|
32
|
+
/** `default`: the home and landing hero. `compact`: less space and a smaller title (docs, legal, support pages). */
|
|
33
|
+
size?: 'default' | 'compact';
|
|
34
|
+
tone?: SectionTone;
|
|
35
|
+
/** Use `h1` (default) once per page. */
|
|
36
|
+
headingLevel?: 1 | 2;
|
|
37
|
+
/**
|
|
38
|
+
* Vertical alignment of the two columns. `start` keeps the headline still when the media grows
|
|
39
|
+
* (an interactive tool that streams results); `center` (default) suits static media.
|
|
40
|
+
*/
|
|
41
|
+
align?: 'center' | 'start';
|
|
42
|
+
}
|
|
43
|
+
/** Top of a page: one H1, one sentence, one primary action. */
|
|
44
|
+
export declare function PageHero({ eyebrow, title, description, actions, media, note, meta, size, tone, headingLevel, align, className, ...rest }: PageHeroProps): import("react").JSX.Element;
|
|
45
|
+
export interface ProofBarProps extends HTMLAttributes<HTMLElement> {
|
|
46
|
+
/** Lead-in, e.g. "Trusted by" + logos or names. */
|
|
47
|
+
label?: ReactNode;
|
|
48
|
+
logos?: ReactNode;
|
|
49
|
+
stats: {
|
|
50
|
+
value: ReactNode;
|
|
51
|
+
label: ReactNode;
|
|
52
|
+
}[];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Instant trust under the hero: who trusts us and honest numbers. Without `label`/`logos` the stats span the
|
|
56
|
+
* full width, one column per stat. Name clients or show logos only with their consent.
|
|
57
|
+
*/
|
|
58
|
+
export declare function ProofBar({ label, logos, stats, className, ...rest }: ProofBarProps): import("react").JSX.Element;
|
|
59
|
+
export interface Door {
|
|
60
|
+
title: ReactNode;
|
|
61
|
+
description: ReactNode;
|
|
62
|
+
href: string;
|
|
63
|
+
icon: IconName;
|
|
64
|
+
cta?: ReactNode;
|
|
65
|
+
}
|
|
66
|
+
/** Self-segmentation: the three ways to work with Kodffe (Products · Automation & AI · Teams). */
|
|
67
|
+
export declare function DoorCards({ doors, linkAs: Link, className, }: {
|
|
68
|
+
doors: Door[];
|
|
69
|
+
linkAs?: ElementType;
|
|
70
|
+
className?: string;
|
|
71
|
+
}): import("react").JSX.Element;
|
|
72
|
+
/** Horizontal process ("Audit → Sprint → Run & improve"); stacks on mobile. */
|
|
73
|
+
export declare function ProcessSteps({ steps, className, }: {
|
|
74
|
+
steps: {
|
|
75
|
+
title: ReactNode;
|
|
76
|
+
description: ReactNode;
|
|
77
|
+
meta?: ReactNode;
|
|
78
|
+
}[];
|
|
79
|
+
className?: string;
|
|
80
|
+
}): import("react").JSX.Element;
|
|
81
|
+
export interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'role'> {
|
|
82
|
+
quote: ReactNode;
|
|
83
|
+
author: string;
|
|
84
|
+
role: ReactNode;
|
|
85
|
+
photo?: string;
|
|
86
|
+
/** Company logo or name. */
|
|
87
|
+
company?: ReactNode;
|
|
88
|
+
size?: 'md' | 'lg';
|
|
89
|
+
}
|
|
90
|
+
/** Customer quote. Use real people only with their written consent. */
|
|
91
|
+
export declare function Testimonial({ quote, author, role, photo, company, size, className, ...rest }: TestimonialProps): import("react").JSX.Element;
|
|
92
|
+
export interface PricingTableProps {
|
|
93
|
+
/** Usually `PlanCard`s. */
|
|
94
|
+
plans: ReactNode[];
|
|
95
|
+
/** Optional comparison rows: feature name + one cell per plan (true/false or text). */
|
|
96
|
+
comparison?: {
|
|
97
|
+
feature: ReactNode;
|
|
98
|
+
values: (boolean | ReactNode)[];
|
|
99
|
+
}[];
|
|
100
|
+
planNames?: string[];
|
|
101
|
+
/** Billing toggle (monthly/yearly) or currency switch above the plans. */
|
|
102
|
+
toolbar?: ReactNode;
|
|
103
|
+
/** Small print under the plans ("Prices in USD, taxes not included."). */
|
|
104
|
+
footnote?: ReactNode;
|
|
105
|
+
caption?: string;
|
|
106
|
+
className?: string;
|
|
107
|
+
}
|
|
108
|
+
/** Plans side by side, plus an optional feature comparison (scrolls horizontally on mobile). */
|
|
109
|
+
export declare function PricingTable({ plans, comparison, planNames, toolbar, footnote, caption, className, }: PricingTableProps): import("react").JSX.Element;
|
|
110
|
+
export interface FaqProps {
|
|
111
|
+
items: {
|
|
112
|
+
question: string;
|
|
113
|
+
answer: string;
|
|
114
|
+
}[];
|
|
115
|
+
/** Adds FAQPage structured data (JSON-LD) for search results. */
|
|
116
|
+
structuredData?: boolean;
|
|
117
|
+
/** `divided` (default): rows split by lines. `separated`: each question in its own card. */
|
|
118
|
+
appearance?: 'divided' | 'separated';
|
|
119
|
+
className?: string;
|
|
120
|
+
}
|
|
121
|
+
/** Questions and answers with optional FAQPage JSON-LD for SEO. */
|
|
122
|
+
export declare function Faq({ items, structuredData, appearance, className }: FaqProps): import("react").JSX.Element;
|
|
123
|
+
export interface CtaBandProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
124
|
+
title: ReactNode;
|
|
125
|
+
description?: ReactNode;
|
|
126
|
+
actions: ReactNode;
|
|
127
|
+
/** A short label above the title ("Ready when you are"). */
|
|
128
|
+
eyebrow?: ReactNode;
|
|
129
|
+
/** Small print under the actions ("Free 30-minute call · No commitment"). */
|
|
130
|
+
note?: ReactNode;
|
|
131
|
+
mascot?: MascotStandingState | false;
|
|
132
|
+
/** `band` (default): brand gradient, closes a page. `card`: an outlined card for calls to action inside content. */
|
|
133
|
+
variant?: 'band' | 'card';
|
|
134
|
+
}
|
|
135
|
+
/** Closing call to action on brand gradient, with the mascot; or an outlined card inside content. */
|
|
136
|
+
export declare function CtaBand({ title, description, actions, eyebrow, note, mascot, variant, className, ...rest }: CtaBandProps): import("react").JSX.Element;
|
|
137
|
+
export interface FooterColumn {
|
|
138
|
+
title: string;
|
|
139
|
+
links: {
|
|
140
|
+
label: string;
|
|
141
|
+
href: string;
|
|
142
|
+
external?: boolean;
|
|
143
|
+
}[];
|
|
144
|
+
}
|
|
145
|
+
export interface SiteFooterProps {
|
|
146
|
+
logo: ReactNode;
|
|
147
|
+
tagline?: ReactNode;
|
|
148
|
+
columns: FooterColumn[];
|
|
149
|
+
/** Social links (icon buttons with `aria-label`). */
|
|
150
|
+
social?: ReactNode;
|
|
151
|
+
/** Locale switch or contact line. */
|
|
152
|
+
aside?: ReactNode;
|
|
153
|
+
legal: ReactNode;
|
|
154
|
+
linkAs?: ElementType;
|
|
155
|
+
/** Shows the oversized sign-off slogan after the footer. */
|
|
156
|
+
signOff?: ReactNode;
|
|
157
|
+
/** Accessible name of the sitemap navigation (localize it). */
|
|
158
|
+
navLabel?: string;
|
|
159
|
+
/** A language switch shown as its own column, after the sitemap (e.g. `LocaleSwitch variant="select"`). */
|
|
160
|
+
locale?: ReactNode;
|
|
161
|
+
/** Its column title ("Language"). */
|
|
162
|
+
localeTitle?: string;
|
|
163
|
+
/** `default`: the page background. `brand`: a dark brand footer with accent column titles (product sites). */
|
|
164
|
+
tone?: 'default' | 'brand';
|
|
165
|
+
className?: string;
|
|
166
|
+
}
|
|
167
|
+
/** Site footer: brand, sitemap columns, social, legal, and the sign-off slogan. */
|
|
168
|
+
export declare function SiteFooter({ logo, tagline, columns, social, aside, legal, linkAs: Link, signOff, navLabel, locale, localeTitle, tone, className, }: SiteFooterProps): import("react").JSX.Element;
|
|
169
|
+
/**
|
|
170
|
+
* Oversized sign-off ("Made with code and coffee in Ecuador.") as the last thing on the page:
|
|
171
|
+
* Manrope 800, ~200px space above (120px on mobile), mint period.
|
|
172
|
+
*/
|
|
173
|
+
export declare function SignOff({ children, className, }: {
|
|
174
|
+
children?: ReactNode;
|
|
175
|
+
className?: string;
|
|
176
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import { cx as e } from "../lib/cx.js";
|
|
2
|
+
import { Icon as t } from "../icon/icon.js";
|
|
3
|
+
import { Mascot as n } from "../mascot/mascot.js";
|
|
4
|
+
import { Glyph as r } from "../lib/glyphs.js";
|
|
5
|
+
import { Avatar as i } from "../data-display/avatar.js";
|
|
6
|
+
import { Accordion as a, AccordionContent as o, AccordionItem as s, AccordionTrigger as c } from "../accordion/accordion.js";
|
|
7
|
+
import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
8
|
+
//#region src/marketing/marketing.tsx
|
|
9
|
+
var f = "mx-auto w-full max-w-[75rem] px-gutter", p = (e) => e === "indigo" || e === "brand" ? { "data-theme": "dark" } : {}, m = {
|
|
10
|
+
default: "bg-bg text-fg",
|
|
11
|
+
muted: "bg-surface-muted text-fg",
|
|
12
|
+
indigo: "bg-primary-strong text-fg",
|
|
13
|
+
brand: "bg-primary-strong bg-[radial-gradient(circle_at_85%_15%,color-mix(in_oklab,var(--kf-accent)_28%,transparent),transparent_55%)] text-fg"
|
|
14
|
+
};
|
|
15
|
+
function h({ tone: t = "default", spacing: n = "md", eyebrow: r, title: i, description: a, centered: o, headingLevel: s = 2, className: c, children: l, ...h }) {
|
|
16
|
+
let g = `h${s}`;
|
|
17
|
+
return /* @__PURE__ */ u("section", {
|
|
18
|
+
...p(t),
|
|
19
|
+
className: e("font-sans", m[t], n === "sm" ? "py-section-sm" : n === "md" ? "py-section-md" : "py-section-lg", c),
|
|
20
|
+
...h,
|
|
21
|
+
children: /* @__PURE__ */ d("div", {
|
|
22
|
+
className: f,
|
|
23
|
+
children: [(r || i || a) && /* @__PURE__ */ d("header", {
|
|
24
|
+
className: e("kf-reveal mb-10 grid max-w-3xl gap-3 md:mb-14", o && "mx-auto justify-items-center text-center"),
|
|
25
|
+
children: [
|
|
26
|
+
r && /* @__PURE__ */ u("p", {
|
|
27
|
+
className: e("m-0 text-sm font-bold tracking-wide uppercase", t === "default" || t === "muted" ? "text-link" : "text-accent"),
|
|
28
|
+
children: r
|
|
29
|
+
}),
|
|
30
|
+
i && /* @__PURE__ */ u(g, {
|
|
31
|
+
className: "m-0 font-display text-3xl font-extrabold tracking-tight text-balance md:text-5xl",
|
|
32
|
+
children: i
|
|
33
|
+
}),
|
|
34
|
+
a && /* @__PURE__ */ u("p", {
|
|
35
|
+
className: "m-0 max-w-2xl text-lg text-pretty text-fg-muted",
|
|
36
|
+
children: a
|
|
37
|
+
})
|
|
38
|
+
]
|
|
39
|
+
}), /* @__PURE__ */ u("div", {
|
|
40
|
+
className: "kf-reveal",
|
|
41
|
+
children: l
|
|
42
|
+
})]
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function g({ eyebrow: t, title: n, description: r, actions: i, media: a, note: o, meta: s, size: c = "default", tone: l = "default", headingLevel: h = 1, align: g = "center", className: _, ...v }) {
|
|
47
|
+
let y = `h${h}`, b = c === "compact";
|
|
48
|
+
return /* @__PURE__ */ u("section", {
|
|
49
|
+
...p(l),
|
|
50
|
+
className: e("overflow-hidden font-sans", b ? "py-10 md:py-16" : "py-16 md:py-28", m[l], _),
|
|
51
|
+
...v,
|
|
52
|
+
children: /* @__PURE__ */ d("div", {
|
|
53
|
+
className: e(f, "grid gap-12", g === "start" ? "items-start" : "items-center", !!a && "md:grid-cols-[minmax(0,1.05fr)_minmax(0,1fr)] md:gap-16"),
|
|
54
|
+
children: [/* @__PURE__ */ d("div", {
|
|
55
|
+
className: "grid max-w-2xl gap-5",
|
|
56
|
+
children: [
|
|
57
|
+
t && /* @__PURE__ */ u("p", {
|
|
58
|
+
className: e("m-0 text-sm font-bold tracking-wide uppercase", l === "default" || l === "muted" ? "text-link" : "text-accent"),
|
|
59
|
+
children: t
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ u(y, {
|
|
62
|
+
className: e("m-0 font-display leading-[1.05] font-extrabold tracking-tight text-balance", b ? "text-3xl md:text-5xl" : "text-4xl sm:text-5xl md:text-6xl"),
|
|
63
|
+
children: n
|
|
64
|
+
}),
|
|
65
|
+
s && /* @__PURE__ */ u("p", {
|
|
66
|
+
className: "m-0 text-sm text-fg-muted",
|
|
67
|
+
children: s
|
|
68
|
+
}),
|
|
69
|
+
r && /* @__PURE__ */ u("p", {
|
|
70
|
+
className: "m-0 max-w-xl text-lg text-pretty text-fg-muted md:text-xl",
|
|
71
|
+
children: r
|
|
72
|
+
}),
|
|
73
|
+
i && /* @__PURE__ */ u("div", {
|
|
74
|
+
className: "mt-2 flex flex-col gap-3 *:w-full sm:flex-row sm:flex-wrap sm:*:w-auto",
|
|
75
|
+
children: i
|
|
76
|
+
}),
|
|
77
|
+
o && /* @__PURE__ */ u("p", {
|
|
78
|
+
className: "m-0 text-sm text-fg-muted",
|
|
79
|
+
children: o
|
|
80
|
+
})
|
|
81
|
+
]
|
|
82
|
+
}), a && /* @__PURE__ */ u("div", {
|
|
83
|
+
className: "min-w-0",
|
|
84
|
+
children: a
|
|
85
|
+
})]
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
var _ = {
|
|
90
|
+
2: "sm:grid-cols-2",
|
|
91
|
+
3: "sm:grid-cols-3",
|
|
92
|
+
4: "sm:grid-cols-4"
|
|
93
|
+
};
|
|
94
|
+
function v({ label: t, logos: n, stats: r, className: i, ...a }) {
|
|
95
|
+
return /* @__PURE__ */ u("section", {
|
|
96
|
+
"aria-label": "Proof",
|
|
97
|
+
className: e("border-y border-border bg-surface py-8 font-sans", i),
|
|
98
|
+
...a,
|
|
99
|
+
children: /* @__PURE__ */ d("div", {
|
|
100
|
+
className: e(f, "flex flex-col items-center gap-8 md:flex-row md:justify-between"),
|
|
101
|
+
children: [(t || n) && /* @__PURE__ */ d("div", {
|
|
102
|
+
className: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm text-fg-muted",
|
|
103
|
+
children: [t && /* @__PURE__ */ u("span", {
|
|
104
|
+
className: "font-semibold",
|
|
105
|
+
children: t
|
|
106
|
+
}), n]
|
|
107
|
+
}), /* @__PURE__ */ u("dl", {
|
|
108
|
+
className: e("m-0 grid w-full grid-cols-2 gap-x-6 gap-y-5 [&>*:last-child:nth-child(odd)]:col-span-2 sm:[&>*:last-child:nth-child(odd)]:col-span-1", _[r.length] ?? "sm:grid-cols-4", t || n ? "md:w-auto" : void 0),
|
|
109
|
+
children: r.map((e, t) => /* @__PURE__ */ d("div", {
|
|
110
|
+
className: "grid justify-items-center gap-0.5 text-center md:justify-items-start md:text-left",
|
|
111
|
+
children: [/* @__PURE__ */ u("dt", {
|
|
112
|
+
className: "text-sm text-fg-muted",
|
|
113
|
+
children: e.label
|
|
114
|
+
}), /* @__PURE__ */ u("dd", {
|
|
115
|
+
className: "order-first m-0 font-display text-3xl font-extrabold tracking-tight text-fg tabular-nums",
|
|
116
|
+
children: e.value
|
|
117
|
+
})]
|
|
118
|
+
}, t))
|
|
119
|
+
})]
|
|
120
|
+
})
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function y({ doors: n, linkAs: i = "a", className: a }) {
|
|
124
|
+
return /* @__PURE__ */ u("ul", {
|
|
125
|
+
className: e("m-0 grid list-none gap-4 p-0 font-sans md:grid-cols-3", a),
|
|
126
|
+
children: n.map((e, n) => /* @__PURE__ */ u("li", { children: /* @__PURE__ */ d(i, {
|
|
127
|
+
href: e.href,
|
|
128
|
+
className: "group relative flex h-full flex-col gap-4 rounded-xl border border-border bg-surface p-7 text-fg no-underline transition-[transform,box-shadow,border-color] duration-200 ease-standard hover:-translate-y-1 hover:border-primary hover:shadow-raised focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus motion-reduce:transition-none motion-reduce:hover:translate-y-0",
|
|
129
|
+
children: [
|
|
130
|
+
/* @__PURE__ */ u("span", {
|
|
131
|
+
className: "grid size-14 place-items-center rounded-lg bg-gradient-brand text-on-primary",
|
|
132
|
+
children: /* @__PURE__ */ u(t, {
|
|
133
|
+
name: e.icon,
|
|
134
|
+
size: 32
|
|
135
|
+
})
|
|
136
|
+
}),
|
|
137
|
+
/* @__PURE__ */ u("span", {
|
|
138
|
+
className: "font-display text-2xl font-bold tracking-tight",
|
|
139
|
+
children: e.title
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ u("span", {
|
|
142
|
+
className: "text-[15px] text-fg-muted",
|
|
143
|
+
children: e.description
|
|
144
|
+
}),
|
|
145
|
+
/* @__PURE__ */ d("span", {
|
|
146
|
+
className: "mt-auto inline-flex items-center gap-1 pt-2 text-sm font-semibold text-link",
|
|
147
|
+
children: [e.cta ?? "Explore", /* @__PURE__ */ u(r, {
|
|
148
|
+
name: "chevron-right",
|
|
149
|
+
size: 16,
|
|
150
|
+
className: "transition-transform group-hover:translate-x-1 motion-reduce:transition-none"
|
|
151
|
+
})]
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
}) }, n))
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function b({ steps: t, className: n }) {
|
|
158
|
+
return /* @__PURE__ */ u("ol", {
|
|
159
|
+
className: e("m-0 grid list-none gap-6 p-0 font-sans md:grid-cols-[repeat(auto-fit,minmax(0,1fr))] md:gap-8", n),
|
|
160
|
+
children: t.map((e, t) => /* @__PURE__ */ d("li", {
|
|
161
|
+
className: "relative grid content-start gap-3 md:pt-14",
|
|
162
|
+
children: [
|
|
163
|
+
/* @__PURE__ */ u("span", {
|
|
164
|
+
"aria-hidden": "true",
|
|
165
|
+
className: "hidden md:absolute md:inset-x-0 md:top-5 md:block md:h-0.5 md:bg-border md:first:left-5"
|
|
166
|
+
}),
|
|
167
|
+
/* @__PURE__ */ u("span", {
|
|
168
|
+
className: "relative z-10 grid size-10 place-items-center rounded-full bg-primary font-display text-lg font-extrabold text-on-primary md:absolute md:top-0",
|
|
169
|
+
children: t + 1
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ u("h3", {
|
|
172
|
+
className: "m-0 font-display text-xl font-bold tracking-tight",
|
|
173
|
+
children: e.title
|
|
174
|
+
}),
|
|
175
|
+
e.meta && /* @__PURE__ */ u("p", {
|
|
176
|
+
className: "m-0 text-sm font-semibold text-link",
|
|
177
|
+
children: e.meta
|
|
178
|
+
}),
|
|
179
|
+
/* @__PURE__ */ u("p", {
|
|
180
|
+
className: "m-0 text-[15px] text-fg-muted",
|
|
181
|
+
children: e.description
|
|
182
|
+
})
|
|
183
|
+
]
|
|
184
|
+
}, t))
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function x({ quote: t, author: n, role: r, photo: a, company: o, size: s = "lg", className: c, ...f }) {
|
|
188
|
+
return /* @__PURE__ */ d("figure", {
|
|
189
|
+
className: e("m-0 grid max-w-4xl gap-8 font-sans", c),
|
|
190
|
+
...f,
|
|
191
|
+
children: [
|
|
192
|
+
/* @__PURE__ */ u("span", {
|
|
193
|
+
"aria-hidden": "true",
|
|
194
|
+
className: "font-display text-7xl leading-[0.5] font-extrabold text-accent",
|
|
195
|
+
children: "“"
|
|
196
|
+
}),
|
|
197
|
+
/* @__PURE__ */ u("blockquote", {
|
|
198
|
+
className: e("m-0 font-display font-semibold tracking-tight text-balance", s === "lg" ? "text-2xl leading-snug md:text-3xl" : "text-xl leading-snug"),
|
|
199
|
+
children: t
|
|
200
|
+
}),
|
|
201
|
+
/* @__PURE__ */ d("figcaption", {
|
|
202
|
+
className: "flex items-center gap-4",
|
|
203
|
+
children: [/* @__PURE__ */ u(i, {
|
|
204
|
+
name: n,
|
|
205
|
+
src: a,
|
|
206
|
+
size: "lg",
|
|
207
|
+
"aria-hidden": "true"
|
|
208
|
+
}), /* @__PURE__ */ d("div", {
|
|
209
|
+
className: "grid",
|
|
210
|
+
children: [/* @__PURE__ */ u("span", {
|
|
211
|
+
className: "font-semibold",
|
|
212
|
+
children: n
|
|
213
|
+
}), /* @__PURE__ */ d("span", {
|
|
214
|
+
className: "text-sm text-fg-muted",
|
|
215
|
+
children: [r, o && /* @__PURE__ */ d(l, { children: [" · ", o] })]
|
|
216
|
+
})]
|
|
217
|
+
})]
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
function S({ plans: t, comparison: n, planNames: i = [], toolbar: a, footnote: o, caption: s = "Plan comparison", className: c }) {
|
|
223
|
+
return /* @__PURE__ */ d("div", {
|
|
224
|
+
className: e("grid gap-10 font-sans", c),
|
|
225
|
+
children: [
|
|
226
|
+
a && /* @__PURE__ */ u("div", {
|
|
227
|
+
className: "flex justify-center",
|
|
228
|
+
children: a
|
|
229
|
+
}),
|
|
230
|
+
/* @__PURE__ */ u("div", {
|
|
231
|
+
className: "grid items-stretch gap-6 pt-3 md:grid-cols-[repeat(auto-fit,minmax(16rem,1fr))]",
|
|
232
|
+
children: t
|
|
233
|
+
}),
|
|
234
|
+
o && /* @__PURE__ */ u("p", {
|
|
235
|
+
className: "m-0 -mt-4 text-center text-sm text-fg-muted",
|
|
236
|
+
children: o
|
|
237
|
+
}),
|
|
238
|
+
n && /* @__PURE__ */ u("div", {
|
|
239
|
+
tabIndex: 0,
|
|
240
|
+
role: "region",
|
|
241
|
+
"aria-label": s,
|
|
242
|
+
className: "overflow-x-auto rounded-lg border border-border focus-visible:outline-3 focus-visible:outline-focus",
|
|
243
|
+
children: /* @__PURE__ */ d("table", {
|
|
244
|
+
className: "w-full min-w-[36rem] border-collapse text-sm",
|
|
245
|
+
children: [
|
|
246
|
+
/* @__PURE__ */ u("caption", {
|
|
247
|
+
className: "sr-only",
|
|
248
|
+
children: s
|
|
249
|
+
}),
|
|
250
|
+
/* @__PURE__ */ u("thead", {
|
|
251
|
+
className: "bg-surface-muted",
|
|
252
|
+
children: /* @__PURE__ */ d("tr", { children: [/* @__PURE__ */ u("th", {
|
|
253
|
+
scope: "col",
|
|
254
|
+
className: "px-4 py-3 text-left font-semibold text-fg-muted",
|
|
255
|
+
children: /* @__PURE__ */ u("span", {
|
|
256
|
+
className: "sr-only",
|
|
257
|
+
children: "Feature"
|
|
258
|
+
})
|
|
259
|
+
}), i.map((e) => /* @__PURE__ */ u("th", {
|
|
260
|
+
scope: "col",
|
|
261
|
+
className: "px-4 py-3 text-center font-semibold",
|
|
262
|
+
children: e
|
|
263
|
+
}, e))] })
|
|
264
|
+
}),
|
|
265
|
+
/* @__PURE__ */ u("tbody", { children: n.map((e, t) => /* @__PURE__ */ d("tr", {
|
|
266
|
+
className: "border-t border-border",
|
|
267
|
+
children: [/* @__PURE__ */ u("th", {
|
|
268
|
+
scope: "row",
|
|
269
|
+
className: "px-4 py-3 text-left font-medium",
|
|
270
|
+
children: e.feature
|
|
271
|
+
}), e.values.map((e, t) => /* @__PURE__ */ u("td", {
|
|
272
|
+
className: "px-4 py-3 text-center",
|
|
273
|
+
children: e === !0 ? /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(r, {
|
|
274
|
+
name: "check",
|
|
275
|
+
size: 18,
|
|
276
|
+
className: "inline text-success-icon"
|
|
277
|
+
}), /* @__PURE__ */ u("span", {
|
|
278
|
+
className: "sr-only",
|
|
279
|
+
children: "Included"
|
|
280
|
+
})] }) : e === !1 ? /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(r, {
|
|
281
|
+
name: "minus",
|
|
282
|
+
size: 18,
|
|
283
|
+
className: "inline text-fg-muted/60"
|
|
284
|
+
}), /* @__PURE__ */ u("span", {
|
|
285
|
+
className: "sr-only",
|
|
286
|
+
children: "Not included"
|
|
287
|
+
})] }) : e
|
|
288
|
+
}, t))]
|
|
289
|
+
}, t)) })
|
|
290
|
+
]
|
|
291
|
+
})
|
|
292
|
+
})
|
|
293
|
+
]
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
function C({ items: t, structuredData: n = !0, appearance: r = "divided", className: i }) {
|
|
297
|
+
let l = {
|
|
298
|
+
"@context": "https://schema.org",
|
|
299
|
+
"@type": "FAQPage",
|
|
300
|
+
mainEntity: t.map((e) => ({
|
|
301
|
+
"@type": "Question",
|
|
302
|
+
name: e.question,
|
|
303
|
+
acceptedAnswer: {
|
|
304
|
+
"@type": "Answer",
|
|
305
|
+
text: e.answer
|
|
306
|
+
}
|
|
307
|
+
}))
|
|
308
|
+
};
|
|
309
|
+
return /* @__PURE__ */ d("div", {
|
|
310
|
+
className: e("max-w-3xl", i),
|
|
311
|
+
children: [/* @__PURE__ */ u(a, {
|
|
312
|
+
type: "single",
|
|
313
|
+
collapsible: !0,
|
|
314
|
+
appearance: r === "separated" ? "card" : "divided",
|
|
315
|
+
children: t.map((e) => /* @__PURE__ */ d(s, {
|
|
316
|
+
value: e.question,
|
|
317
|
+
children: [/* @__PURE__ */ u(c, {
|
|
318
|
+
size: "lg",
|
|
319
|
+
children: e.question
|
|
320
|
+
}), /* @__PURE__ */ u(o, {
|
|
321
|
+
forceMount: !0,
|
|
322
|
+
size: "lg",
|
|
323
|
+
children: e.answer
|
|
324
|
+
})]
|
|
325
|
+
}, e.question))
|
|
326
|
+
}), n && /* @__PURE__ */ u("script", {
|
|
327
|
+
type: "application/ld+json",
|
|
328
|
+
dangerouslySetInnerHTML: { __html: JSON.stringify(l).replace(/</g, "\\u003c") }
|
|
329
|
+
})]
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
function w({ title: t, description: r, actions: i, eyebrow: a, note: o, mascot: s = "happy", variant: c = "band", className: l, ...f }) {
|
|
333
|
+
let p = c === "band";
|
|
334
|
+
return /* @__PURE__ */ u("section", {
|
|
335
|
+
className: e("font-sans", p && "px-gutter py-section-md", l),
|
|
336
|
+
...f,
|
|
337
|
+
children: /* @__PURE__ */ d("div", {
|
|
338
|
+
...p ? { "data-theme": "dark" } : {},
|
|
339
|
+
className: e(p ? e(m.brand, "rounded-2xl px-6 py-12 md:px-14 md:py-16") : "rounded-xl border border-border bg-surface p-6 md:p-8", "mx-auto grid max-w-[75rem] items-center gap-8 overflow-hidden md:grid-cols-[auto_1fr_auto]"),
|
|
340
|
+
children: [
|
|
341
|
+
s && /* @__PURE__ */ u(n, {
|
|
342
|
+
state: s,
|
|
343
|
+
size: p ? 88 : 64,
|
|
344
|
+
title: "",
|
|
345
|
+
className: e("hidden md:block", p ? "text-accent" : "text-primary")
|
|
346
|
+
}),
|
|
347
|
+
/* @__PURE__ */ d("div", {
|
|
348
|
+
className: "grid gap-3",
|
|
349
|
+
children: [
|
|
350
|
+
a && /* @__PURE__ */ u("p", {
|
|
351
|
+
className: e("m-0 text-sm font-bold tracking-wide uppercase", p ? "text-accent" : "text-link"),
|
|
352
|
+
children: a
|
|
353
|
+
}),
|
|
354
|
+
/* @__PURE__ */ u("h2", {
|
|
355
|
+
className: e("m-0 font-display font-extrabold tracking-tight text-balance", p ? "text-3xl md:text-4xl" : "text-2xl md:text-3xl"),
|
|
356
|
+
children: t
|
|
357
|
+
}),
|
|
358
|
+
r && /* @__PURE__ */ u("p", {
|
|
359
|
+
className: "m-0 max-w-xl text-lg text-fg-muted",
|
|
360
|
+
children: r
|
|
361
|
+
})
|
|
362
|
+
]
|
|
363
|
+
}),
|
|
364
|
+
/* @__PURE__ */ d("div", {
|
|
365
|
+
className: "grid gap-2",
|
|
366
|
+
children: [/* @__PURE__ */ u("div", {
|
|
367
|
+
className: "flex flex-col gap-3 *:w-full sm:flex-row sm:*:w-auto md:flex-col",
|
|
368
|
+
children: i
|
|
369
|
+
}), o && /* @__PURE__ */ u("p", {
|
|
370
|
+
className: "m-0 text-center text-sm text-fg-muted",
|
|
371
|
+
children: o
|
|
372
|
+
})]
|
|
373
|
+
})
|
|
374
|
+
]
|
|
375
|
+
})
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
function T({ logo: t, tagline: n, columns: r, social: i, aside: a, legal: o, linkAs: s = "a", signOff: c, navLabel: l = "Footer", locale: p, localeTitle: m = "Language", tone: h = "default", className: g }) {
|
|
379
|
+
let _ = h === "brand";
|
|
380
|
+
return /* @__PURE__ */ d("footer", {
|
|
381
|
+
..._ ? { "data-theme": "dark" } : {},
|
|
382
|
+
className: e("pt-16 font-sans text-fg md:pt-24", _ ? "bg-primary-strong" : "bg-bg", g),
|
|
383
|
+
children: [
|
|
384
|
+
/* @__PURE__ */ d("div", {
|
|
385
|
+
className: e(f, "grid gap-12 md:grid-cols-[minmax(0,1.3fr)_minmax(0,3fr)]"),
|
|
386
|
+
children: [/* @__PURE__ */ d("div", {
|
|
387
|
+
className: "grid content-start gap-4",
|
|
388
|
+
children: [
|
|
389
|
+
/* @__PURE__ */ u("div", {
|
|
390
|
+
className: e("text-3xl", _ ? "text-fg" : "text-logo"),
|
|
391
|
+
children: t
|
|
392
|
+
}),
|
|
393
|
+
n && /* @__PURE__ */ u("p", {
|
|
394
|
+
className: "m-0 max-w-xs text-fg-muted",
|
|
395
|
+
children: n
|
|
396
|
+
}),
|
|
397
|
+
i && /* @__PURE__ */ u("div", {
|
|
398
|
+
className: "flex gap-1",
|
|
399
|
+
children: i
|
|
400
|
+
})
|
|
401
|
+
]
|
|
402
|
+
}), /* @__PURE__ */ d("nav", {
|
|
403
|
+
"aria-label": l,
|
|
404
|
+
className: "grid grid-cols-2 gap-8 sm:grid-cols-3 md:grid-cols-4",
|
|
405
|
+
children: [r.map((t) => /* @__PURE__ */ d("div", {
|
|
406
|
+
className: "grid content-start gap-3",
|
|
407
|
+
children: [/* @__PURE__ */ u("h2", {
|
|
408
|
+
className: e("m-0 text-sm font-bold", _ && "text-accent"),
|
|
409
|
+
children: t.title
|
|
410
|
+
}), /* @__PURE__ */ u("ul", {
|
|
411
|
+
className: "m-0 grid list-none gap-2.5 p-0",
|
|
412
|
+
children: t.links.map((e) => /* @__PURE__ */ u("li", { children: /* @__PURE__ */ u(s, {
|
|
413
|
+
href: e.href,
|
|
414
|
+
...e.external ? {
|
|
415
|
+
target: "_blank",
|
|
416
|
+
rel: "noopener noreferrer"
|
|
417
|
+
} : {},
|
|
418
|
+
className: "rounded-xs text-sm text-fg-muted no-underline hover:text-fg hover:underline focus-visible:outline-3 focus-visible:outline-focus",
|
|
419
|
+
children: e.label
|
|
420
|
+
}) }, e.href))
|
|
421
|
+
})]
|
|
422
|
+
}, t.title)), p && /* @__PURE__ */ d("div", {
|
|
423
|
+
className: "grid content-start gap-3",
|
|
424
|
+
children: [/* @__PURE__ */ u("h2", {
|
|
425
|
+
className: e("m-0 text-sm font-bold", _ && "text-accent"),
|
|
426
|
+
children: m
|
|
427
|
+
}), /* @__PURE__ */ u("div", { children: p })]
|
|
428
|
+
})]
|
|
429
|
+
})]
|
|
430
|
+
}),
|
|
431
|
+
/* @__PURE__ */ d("div", {
|
|
432
|
+
className: e(f, "mt-14 flex flex-col gap-4 border-t border-border py-6 text-sm text-fg-muted sm:flex-row sm:items-center sm:justify-between"),
|
|
433
|
+
children: [/* @__PURE__ */ u("div", { children: o }), a]
|
|
434
|
+
}),
|
|
435
|
+
c && /* @__PURE__ */ u(E, { children: c })
|
|
436
|
+
]
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
function E({ children: t = "Made with code and coffee in Ecuador", className: n }) {
|
|
440
|
+
return /* @__PURE__ */ d("p", {
|
|
441
|
+
className: e("m-0 overflow-hidden px-4 pt-[120px] pb-6 text-center font-display text-[clamp(2.25rem,9vw,8.5rem)] leading-[0.95] font-extrabold tracking-tighter text-balance text-fg md:pt-[200px] md:pb-10", n),
|
|
442
|
+
children: [t, /* @__PURE__ */ u("span", {
|
|
443
|
+
className: "text-accent",
|
|
444
|
+
children: "."
|
|
445
|
+
})]
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
//#endregion
|
|
449
|
+
export { w as CtaBand, y as DoorCards, C as Faq, g as PageHero, S as PricingTable, b as ProcessSteps, v as ProofBar, h as Section, E as SignOff, T as SiteFooter, x as Testimonial };
|
|
450
|
+
|
|
451
|
+
//# sourceMappingURL=marketing.js.map
|