@mieweb/ui 0.10.0-dev.15 → 0.10.0-dev.16
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/CsvBlock-FVOKKWIY.cjs +17 -0
- package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-FVOKKWIY.cjs.map} +1 -1
- package/dist/CsvBlock-MXZO4W3N.js +8 -0
- package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-MXZO4W3N.js.map} +1 -1
- package/dist/HtmlPreviewBlock-2UGW33SQ.js +8 -0
- package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-2UGW33SQ.js.map} +1 -1
- package/dist/HtmlPreviewBlock-CZKTQUCL.cjs +17 -0
- package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-CZKTQUCL.cjs.map} +1 -1
- package/dist/MermaidBlock-NLDOJZUJ.cjs +17 -0
- package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-NLDOJZUJ.cjs.map} +1 -1
- package/dist/MermaidBlock-QXAEMOAA.js +8 -0
- package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-QXAEMOAA.js.map} +1 -1
- package/dist/SurveyBlock-GSHYZMTW.cjs +17 -0
- package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-GSHYZMTW.cjs.map} +1 -1
- package/dist/SurveyBlock-M5BEFZGT.js +8 -0
- package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-M5BEFZGT.js.map} +1 -1
- package/dist/brands/index.cjs +13 -13
- package/dist/brands/index.js +1 -1
- package/dist/{chunk-VNYW4C4J.cjs → chunk-2BGS7RFM.cjs} +4 -84
- package/dist/chunk-2BGS7RFM.cjs.map +1 -0
- package/dist/{chunk-TMMVIUUN.js → chunk-4IETGCMD.js} +4 -4
- package/dist/{chunk-TMMVIUUN.js.map → chunk-4IETGCMD.js.map} +1 -1
- package/dist/{chunk-76TBQDED.js → chunk-4LPGJ3ZO.js} +4 -4
- package/dist/{chunk-76TBQDED.js.map → chunk-4LPGJ3ZO.js.map} +1 -1
- package/dist/{chunk-6EN3IQQI.cjs → chunk-6GZKQR7P.cjs} +4 -4
- package/dist/{chunk-6EN3IQQI.cjs.map → chunk-6GZKQR7P.cjs.map} +1 -1
- package/dist/{chunk-Y5HFM7LO.js → chunk-77PNQILS.js} +3 -3
- package/dist/{chunk-Y5HFM7LO.js.map → chunk-77PNQILS.js.map} +1 -1
- package/dist/{chunk-G4D6CLBT.js → chunk-7U5QYH54.js} +3 -3
- package/dist/{chunk-G4D6CLBT.js.map → chunk-7U5QYH54.js.map} +1 -1
- package/dist/chunk-AXRRBEER.js +86 -0
- package/dist/chunk-AXRRBEER.js.map +1 -0
- package/dist/{chunk-VU6UTJRM.js → chunk-CATY3P2U.js} +3 -3
- package/dist/{chunk-VU6UTJRM.js.map → chunk-CATY3P2U.js.map} +1 -1
- package/dist/{chunk-UV2FVNWT.cjs → chunk-DF7K6DOJ.cjs} +5 -5
- package/dist/{chunk-UV2FVNWT.cjs.map → chunk-DF7K6DOJ.cjs.map} +1 -1
- package/dist/{chunk-TVTIGV7Q.js → chunk-DXCATYEO.js} +4 -4
- package/dist/{chunk-TVTIGV7Q.js.map → chunk-DXCATYEO.js.map} +1 -1
- package/dist/{chunk-5MCBWTIF.cjs → chunk-E2B5BLAF.cjs} +4 -4
- package/dist/{chunk-5MCBWTIF.cjs.map → chunk-E2B5BLAF.cjs.map} +1 -1
- package/dist/{chunk-GD7EBGC4.cjs → chunk-EQXFDPXV.cjs} +14 -14
- package/dist/{chunk-GD7EBGC4.cjs.map → chunk-EQXFDPXV.cjs.map} +1 -1
- package/dist/{chunk-ENKFJJZX.js → chunk-ETCHEURD.js} +4 -4
- package/dist/{chunk-ENKFJJZX.js.map → chunk-ETCHEURD.js.map} +1 -1
- package/dist/{chunk-DEDN5HAG.js → chunk-FDP6VS5G.js} +3 -3
- package/dist/{chunk-DEDN5HAG.js.map → chunk-FDP6VS5G.js.map} +1 -1
- package/dist/{chunk-WNZAYBVB.cjs → chunk-GRV4MOEO.cjs} +26 -26
- package/dist/{chunk-WNZAYBVB.cjs.map → chunk-GRV4MOEO.cjs.map} +1 -1
- package/dist/{chunk-DLRCAV4Z.js → chunk-IBCCFWD4.js} +24 -3
- package/dist/chunk-IBCCFWD4.js.map +1 -0
- package/dist/{chunk-G3JX3UAU.cjs → chunk-IUQMOBFB.cjs} +5 -5
- package/dist/{chunk-G3JX3UAU.cjs.map → chunk-IUQMOBFB.cjs.map} +1 -1
- package/dist/{chunk-ZPSJ2UV6.cjs → chunk-JX4UZEBZ.cjs} +8 -8
- package/dist/{chunk-ZPSJ2UV6.cjs.map → chunk-JX4UZEBZ.cjs.map} +1 -1
- package/dist/{chunk-7ZXAQTV4.cjs → chunk-KM5OQQL5.cjs} +8 -8
- package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-KM5OQQL5.cjs.map} +1 -1
- package/dist/{chunk-KQUI4BGS.cjs → chunk-LGIQVSAE.cjs} +17 -17
- package/dist/{chunk-KQUI4BGS.cjs.map → chunk-LGIQVSAE.cjs.map} +1 -1
- package/dist/{chunk-FXO5ARBB.cjs → chunk-M5NYHH3Z.cjs} +4 -4
- package/dist/{chunk-FXO5ARBB.cjs.map → chunk-M5NYHH3Z.cjs.map} +1 -1
- package/dist/{chunk-URAQIF67.cjs → chunk-MB5KIIT4.cjs} +6 -6
- package/dist/{chunk-URAQIF67.cjs.map → chunk-MB5KIIT4.cjs.map} +1 -1
- package/dist/{chunk-PSXTXFLM.cjs → chunk-NEFBVO5W.cjs} +24 -3
- package/dist/chunk-NEFBVO5W.cjs.map +1 -0
- package/dist/{chunk-XZNN3S3S.cjs → chunk-O5A4GTTG.cjs} +4 -4
- package/dist/{chunk-XZNN3S3S.cjs.map → chunk-O5A4GTTG.cjs.map} +1 -1
- package/dist/{chunk-DZ5HFLRC.js → chunk-OWLWABAS.js} +3 -3
- package/dist/{chunk-DZ5HFLRC.js.map → chunk-OWLWABAS.js.map} +1 -1
- package/dist/{chunk-IX6KFB3K.cjs → chunk-OZ2LP2VQ.cjs} +9 -9
- package/dist/{chunk-IX6KFB3K.cjs.map → chunk-OZ2LP2VQ.cjs.map} +1 -1
- package/dist/{chunk-N6IY47YA.cjs → chunk-PLDJU623.cjs} +8 -8
- package/dist/{chunk-N6IY47YA.cjs.map → chunk-PLDJU623.cjs.map} +1 -1
- package/dist/{chunk-WGPLUCBD.js → chunk-R47H3Y7J.js} +3 -3
- package/dist/{chunk-WGPLUCBD.js.map → chunk-R47H3Y7J.js.map} +1 -1
- package/dist/{chunk-OE5CKRUC.js → chunk-R5AFQWR5.js} +3 -3
- package/dist/{chunk-OE5CKRUC.js.map → chunk-R5AFQWR5.js.map} +1 -1
- package/dist/{chunk-2IZLKPUW.js → chunk-T7U5HHGK.js} +3 -3
- package/dist/{chunk-2IZLKPUW.js.map → chunk-T7U5HHGK.js.map} +1 -1
- package/dist/{chunk-OCSCBB52.cjs → chunk-TVSGJT6G.cjs} +6 -6
- package/dist/{chunk-OCSCBB52.cjs.map → chunk-TVSGJT6G.cjs.map} +1 -1
- package/dist/{chunk-3QEVGSFG.cjs → chunk-UKUKBUME.cjs} +5 -5
- package/dist/{chunk-3QEVGSFG.cjs.map → chunk-UKUKBUME.cjs.map} +1 -1
- package/dist/{chunk-GOALNQZ2.js → chunk-UV4IJNSN.js} +4 -83
- package/dist/chunk-UV4IJNSN.js.map +1 -0
- package/dist/{chunk-VOKVG3ER.js → chunk-UXI33QGR.js} +3 -3
- package/dist/{chunk-VOKVG3ER.js.map → chunk-UXI33QGR.js.map} +1 -1
- package/dist/{chunk-XEAT7XJG.cjs → chunk-VLBUT2QM.cjs} +4 -4
- package/dist/{chunk-XEAT7XJG.cjs.map → chunk-VLBUT2QM.cjs.map} +1 -1
- package/dist/chunk-VNCIIXGO.js +1924 -0
- package/dist/chunk-VNCIIXGO.js.map +1 -0
- package/dist/{chunk-5GUOOLPR.cjs → chunk-VPRKE2YU.cjs} +5 -5
- package/dist/{chunk-5GUOOLPR.cjs.map → chunk-VPRKE2YU.cjs.map} +1 -1
- package/dist/{chunk-KZFBQ7GY.js → chunk-VVZALGPI.js} +3 -3
- package/dist/{chunk-KZFBQ7GY.js.map → chunk-VVZALGPI.js.map} +1 -1
- package/dist/{chunk-V7D3YGUV.js → chunk-W5TPBCBM.js} +4 -4
- package/dist/{chunk-V7D3YGUV.js.map → chunk-W5TPBCBM.js.map} +1 -1
- package/dist/{chunk-H4ZXMQQW.js → chunk-WBBOH5QF.js} +3 -3
- package/dist/{chunk-H4ZXMQQW.js.map → chunk-WBBOH5QF.js.map} +1 -1
- package/dist/{chunk-3QGS6CXD.js → chunk-WC25GQZD.js} +3 -3
- package/dist/{chunk-3QGS6CXD.js.map → chunk-WC25GQZD.js.map} +1 -1
- package/dist/{chunk-VKELAMAZ.js → chunk-WN6A4QOF.js} +3 -3
- package/dist/{chunk-VKELAMAZ.js.map → chunk-WN6A4QOF.js.map} +1 -1
- package/dist/chunk-XFLEW7AT.cjs +88 -0
- package/dist/chunk-XFLEW7AT.cjs.map +1 -0
- package/dist/{chunk-MNILXWVY.js → chunk-XU2E7MTG.js} +7 -7
- package/dist/{chunk-MNILXWVY.js.map → chunk-XU2E7MTG.js.map} +1 -1
- package/dist/{chunk-E4IBHYJ7.cjs → chunk-YEQLSYJO.cjs} +5 -5
- package/dist/{chunk-E4IBHYJ7.cjs.map → chunk-YEQLSYJO.cjs.map} +1 -1
- package/dist/chunk-YIWJTNR5.cjs +1967 -0
- package/dist/chunk-YIWJTNR5.cjs.map +1 -0
- package/dist/components/AlertDialog/index.cjs +4 -3
- package/dist/components/AlertDialog/index.js +3 -2
- package/dist/components/Button/index.cjs +4 -3
- package/dist/components/Button/index.d.cts +3 -2
- package/dist/components/Button/index.d.ts +3 -2
- package/dist/components/Button/index.js +2 -1
- package/dist/components/CalendarView/index.cjs +5 -4
- package/dist/components/CalendarView/index.d.cts +1 -1
- package/dist/components/CalendarView/index.d.ts +1 -1
- package/dist/components/CalendarView/index.js +3 -2
- package/dist/components/CustomizableDashboard/index.cjs +10 -9
- package/dist/components/CustomizableDashboard/index.js +3 -2
- package/dist/components/FloatingWindow/index.cjs +5 -4
- package/dist/components/FloatingWindow/index.js +3 -2
- package/dist/components/GanttView/index.d.cts +1 -1
- package/dist/components/GanttView/index.d.ts +1 -1
- package/dist/components/ListView/index.cjs +5 -4
- package/dist/components/ListView/index.d.cts +90 -2
- package/dist/components/ListView/index.d.ts +90 -2
- package/dist/components/ListView/index.js +3 -2
- package/dist/components/Markdown/index.cjs +20 -19
- package/dist/components/Markdown/index.js +8 -7
- package/dist/components/MediaEditor/index.cjs +9 -8
- package/dist/components/MediaEditor/index.js +4 -3
- package/dist/components/MediaPlayer/index.cjs +6 -5
- package/dist/components/MediaPlayer/index.js +3 -2
- package/dist/components/MegaMenu/index.cjs +6 -5
- package/dist/components/MegaMenu/index.js +3 -2
- package/dist/components/RadialExplorer/index.cjs +4 -3
- package/dist/components/RadialExplorer/index.js +3 -2
- package/dist/components/RichTextEditor/index.cjs +6 -5
- package/dist/components/RichTextEditor/index.js +3 -2
- package/dist/components/SectionSpyNav/index.cjs +4 -3
- package/dist/components/SectionSpyNav/index.js +3 -2
- package/dist/components/ViewSet/index.cjs +6 -5
- package/dist/components/ViewSet/index.d.cts +101 -1
- package/dist/components/ViewSet/index.d.ts +101 -1
- package/dist/components/ViewSet/index.js +5 -4
- package/dist/components/ViewSwitcher/index.d.cts +57 -4
- package/dist/components/ViewSwitcher/index.d.ts +57 -4
- package/dist/datavis.cjs +3 -2
- package/dist/datavis.cjs.map +1 -1
- package/dist/datavis.js +2 -1
- package/dist/datavis.js.map +1 -1
- package/dist/esheet.cjs +7 -6
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +4 -3
- package/dist/esheet.js.map +1 -1
- package/dist/index.cjs +613 -523
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +558 -1
- package/dist/index.d.ts +558 -1
- package/dist/index.js +41 -38
- package/dist/index.js.map +1 -1
- package/dist/styles/effects.css +33 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/templates.cjs +103 -0
- package/dist/templates.cjs.map +1 -0
- package/dist/templates.d.cts +560 -0
- package/dist/templates.d.ts +560 -0
- package/dist/templates.js +10 -0
- package/dist/templates.js.map +1 -0
- package/dist/{types-DsdZvEI1.d.cts → types-C3HQe74F.d.cts} +1 -7
- package/dist/{types-DsdZvEI1.d.ts → types-C3HQe74F.d.ts} +1 -7
- package/package.json +12 -1
- package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
- package/dist/CsvBlock-UWPMTLE2.js +0 -7
- package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
- package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
- package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
- package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
- package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
- package/dist/SurveyBlock-4DO62RBT.js +0 -7
- package/dist/chunk-DLRCAV4Z.js.map +0 -1
- package/dist/chunk-GOALNQZ2.js.map +0 -1
- package/dist/chunk-PSXTXFLM.cjs.map +0 -1
- package/dist/chunk-VNYW4C4J.cjs.map +0 -1
- package/dist/index-DoYYWsNc.d.cts +0 -127
- package/dist/index-DoYYWsNc.d.ts +0 -127
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import * as lucide_react from 'lucide-react';
|
|
4
|
+
|
|
5
|
+
/** A navigational call to action. Always rendered as a real anchor so it is crawlable. */
|
|
6
|
+
interface TemplateLink {
|
|
7
|
+
label: string;
|
|
8
|
+
href: string;
|
|
9
|
+
/** Rendered as `data-track` for the site's analytics to pick up. */
|
|
10
|
+
trackingId?: string;
|
|
11
|
+
}
|
|
12
|
+
interface TemplateImage {
|
|
13
|
+
src: string;
|
|
14
|
+
alt: string;
|
|
15
|
+
width?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Surface a section sits on. `brand` is a saturated primary band with light
|
|
20
|
+
* text in both colour modes; the others follow the active theme.
|
|
21
|
+
*/
|
|
22
|
+
type SectionTone = 'default' | 'muted' | 'brand';
|
|
23
|
+
type SectionAlign = 'start' | 'center';
|
|
24
|
+
/** Props a site's image component receives, e.g. an adapter around `next/image`. */
|
|
25
|
+
interface TemplateImageProps extends TemplateImage {
|
|
26
|
+
className?: string;
|
|
27
|
+
/** True for the likely LCP image (the hero); load it eagerly at high priority. */
|
|
28
|
+
priority?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Props a site's link component receives, e.g. `next/link`. */
|
|
31
|
+
interface TemplateLinkProps {
|
|
32
|
+
href: string;
|
|
33
|
+
className?: string;
|
|
34
|
+
children?: React.ReactNode;
|
|
35
|
+
tabIndex?: number;
|
|
36
|
+
'aria-current'?: 'page';
|
|
37
|
+
'data-slot'?: string;
|
|
38
|
+
'data-track'?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Swap the plain `<img>` and `<a>` the sections render for the site's own,
|
|
42
|
+
* so pages get optimized images and client-side navigation.
|
|
43
|
+
*/
|
|
44
|
+
interface TemplateComponents {
|
|
45
|
+
Image?: React.ComponentType<TemplateImageProps>;
|
|
46
|
+
Link?: React.ComponentType<TemplateLinkProps>;
|
|
47
|
+
}
|
|
48
|
+
/** Fields every landing section shares. Everything except `components` is JSON-serializable. */
|
|
49
|
+
interface SectionBaseProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title' | 'children'> {
|
|
50
|
+
/** Anchor id for in-page links (`#faq`). */
|
|
51
|
+
id?: string;
|
|
52
|
+
/** Short label above the heading. */
|
|
53
|
+
eyebrow?: string;
|
|
54
|
+
/** Section heading, rendered as an `<h2>`. */
|
|
55
|
+
title?: string;
|
|
56
|
+
/** Supporting paragraph under the heading. */
|
|
57
|
+
description?: string;
|
|
58
|
+
tone?: SectionTone;
|
|
59
|
+
align?: SectionAlign;
|
|
60
|
+
/** Site image and link components; `LandingPage` passes its own to every section. */
|
|
61
|
+
components?: TemplateComponents;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ComparisonRow {
|
|
65
|
+
feature: string;
|
|
66
|
+
/** One value per column: `true`/`false` render as included/not included, strings render as text. */
|
|
67
|
+
values: (boolean | string)[];
|
|
68
|
+
}
|
|
69
|
+
interface ComparisonSectionLabels {
|
|
70
|
+
/** Header of the first column. */
|
|
71
|
+
feature?: string;
|
|
72
|
+
/** Screen-reader text for a `true` cell. */
|
|
73
|
+
included?: string;
|
|
74
|
+
/** Screen-reader text for a `false` cell. */
|
|
75
|
+
notIncluded?: string;
|
|
76
|
+
}
|
|
77
|
+
interface ComparisonSectionProps extends SectionBaseProps {
|
|
78
|
+
/** Value column headers, e.g. `["Without BlueHive", "With BlueHive"]`. */
|
|
79
|
+
columns: string[];
|
|
80
|
+
rows: ComparisonRow[];
|
|
81
|
+
/** Index into `columns` to emphasise — usually your product. */
|
|
82
|
+
highlightColumn?: number;
|
|
83
|
+
labels?: ComparisonSectionLabels;
|
|
84
|
+
}
|
|
85
|
+
declare const ComparisonSection: React.ForwardRefExoticComponent<ComparisonSectionProps & React.RefAttributes<HTMLElement>>;
|
|
86
|
+
|
|
87
|
+
interface CtaSectionProps extends SectionBaseProps {
|
|
88
|
+
title: string;
|
|
89
|
+
primaryCta?: TemplateLink;
|
|
90
|
+
secondaryCta?: TemplateLink;
|
|
91
|
+
/** Small print under the buttons ("Setup takes about 10 minutes"). */
|
|
92
|
+
note?: string;
|
|
93
|
+
/** `band` fills the section with `tone`; `panel` floats a rounded card of `tone` on the page background. */
|
|
94
|
+
layout?: 'band' | 'panel';
|
|
95
|
+
}
|
|
96
|
+
declare const CtaSection: React.ForwardRefExoticComponent<CtaSectionProps & React.RefAttributes<HTMLElement>>;
|
|
97
|
+
|
|
98
|
+
interface FaqItem {
|
|
99
|
+
question: string;
|
|
100
|
+
/** Plain text; line breaks are preserved. */
|
|
101
|
+
answer: string;
|
|
102
|
+
/** Anchor id so a link can open straight to this answer. */
|
|
103
|
+
id?: string;
|
|
104
|
+
}
|
|
105
|
+
interface FaqSectionProps extends SectionBaseProps {
|
|
106
|
+
items: FaqItem[];
|
|
107
|
+
}
|
|
108
|
+
declare const FaqSection: React.ForwardRefExoticComponent<FaqSectionProps & React.RefAttributes<HTMLElement>>;
|
|
109
|
+
|
|
110
|
+
type TemplateIconComponent = React.ComponentType<{
|
|
111
|
+
className?: string;
|
|
112
|
+
strokeWidth?: number;
|
|
113
|
+
'aria-hidden'?: boolean | 'true' | 'false';
|
|
114
|
+
}>;
|
|
115
|
+
/** Extra icon tokens a site maps to its own components; merged over the built-ins. */
|
|
116
|
+
type TemplateIconRegistry = Record<string, TemplateIconComponent>;
|
|
117
|
+
/**
|
|
118
|
+
* Built-in icon tokens. Page data names an icon by token (`"shield-check"`)
|
|
119
|
+
* rather than holding a component, so it stays JSON-serializable.
|
|
120
|
+
*/
|
|
121
|
+
declare const templateIcons: {
|
|
122
|
+
activity: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
123
|
+
award: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
124
|
+
'badge-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
125
|
+
bell: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
126
|
+
briefcase: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
127
|
+
building: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
128
|
+
calendar: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
129
|
+
'calendar-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
130
|
+
'chart-column': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
131
|
+
'chart-line': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
132
|
+
'circle-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
133
|
+
'clipboard-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
134
|
+
clock: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
135
|
+
cloud: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
136
|
+
database: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
137
|
+
'dollar-sign': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
138
|
+
factory: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
139
|
+
'file-text': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
140
|
+
flask: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
141
|
+
globe: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
142
|
+
'graduation-cap': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
143
|
+
handshake: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
144
|
+
'hard-hat': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
145
|
+
headset: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
146
|
+
'heart-pulse': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
147
|
+
hospital: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
148
|
+
layers: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
149
|
+
leaf: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
150
|
+
lightbulb: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
151
|
+
lock: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
152
|
+
mail: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
153
|
+
'map-pin': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
154
|
+
'message-square': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
155
|
+
microscope: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
156
|
+
phone: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
157
|
+
plane: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
158
|
+
plug: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
159
|
+
rocket: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
160
|
+
scale: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
161
|
+
search: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
162
|
+
settings: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
163
|
+
shield: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
164
|
+
'shield-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
165
|
+
smartphone: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
166
|
+
sparkles: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
167
|
+
stethoscope: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
168
|
+
syringe: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
169
|
+
target: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
170
|
+
timer: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
171
|
+
'trending-up': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
172
|
+
truck: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
173
|
+
'user-check': React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
174
|
+
users: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
175
|
+
workflow: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
176
|
+
wrench: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
177
|
+
zap: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
178
|
+
};
|
|
179
|
+
type TemplateIconName = keyof typeof templateIcons;
|
|
180
|
+
interface TemplateIconProps {
|
|
181
|
+
/** A built-in token, a token from `icons`, or a lettermark of up to four characters. */
|
|
182
|
+
name: string;
|
|
183
|
+
icons?: TemplateIconRegistry;
|
|
184
|
+
className?: string;
|
|
185
|
+
}
|
|
186
|
+
declare function TemplateIcon({ name, icons, className }: TemplateIconProps): react_jsx_runtime.JSX.Element | null;
|
|
187
|
+
|
|
188
|
+
interface FeatureItem {
|
|
189
|
+
title: string;
|
|
190
|
+
description: string;
|
|
191
|
+
/** Icon token (see `templateIcons`) or a lettermark such as `"EHR"`. */
|
|
192
|
+
icon?: string;
|
|
193
|
+
/** Small label above the title. */
|
|
194
|
+
tag?: string;
|
|
195
|
+
link?: TemplateLink;
|
|
196
|
+
}
|
|
197
|
+
interface FeatureGridSectionProps extends SectionBaseProps {
|
|
198
|
+
features: FeatureItem[];
|
|
199
|
+
columns?: 2 | 3 | 4;
|
|
200
|
+
/** `cards` frames each item; `plain` sets them straight on the section. */
|
|
201
|
+
variant?: 'cards' | 'plain';
|
|
202
|
+
icons?: TemplateIconRegistry;
|
|
203
|
+
}
|
|
204
|
+
declare const FeatureGridSection: React.ForwardRefExoticComponent<FeatureGridSectionProps & React.RefAttributes<HTMLElement>>;
|
|
205
|
+
|
|
206
|
+
interface HeroSectionLabels {
|
|
207
|
+
/** Accessible name of the breadcrumb `<nav>`. */
|
|
208
|
+
breadcrumb?: string;
|
|
209
|
+
}
|
|
210
|
+
interface HeroSectionProps extends Omit<SectionBaseProps, 'align'> {
|
|
211
|
+
title: string;
|
|
212
|
+
/** `split` puts copy beside `image`; `centered` stacks everything. */
|
|
213
|
+
variant?: 'centered' | 'split';
|
|
214
|
+
primaryCta?: TemplateLink;
|
|
215
|
+
secondaryCta?: TemplateLink;
|
|
216
|
+
/** Reassurance line under the calls to action ("No credit card required"). */
|
|
217
|
+
ctaNote?: string;
|
|
218
|
+
/** Short trust points rendered as a checked list. */
|
|
219
|
+
highlights?: string[];
|
|
220
|
+
image?: TemplateImage;
|
|
221
|
+
/** Trail ending in the current page, which renders unlinked. */
|
|
222
|
+
breadcrumbs?: TemplateLink[];
|
|
223
|
+
/** A page has one `h1`; set `h2` when the page already renders its own. */
|
|
224
|
+
headingLevel?: 'h1' | 'h2';
|
|
225
|
+
labels?: HeroSectionLabels;
|
|
226
|
+
}
|
|
227
|
+
declare const HeroSection: React.ForwardRefExoticComponent<HeroSectionProps & React.RefAttributes<HTMLElement>>;
|
|
228
|
+
|
|
229
|
+
interface LeadFormField {
|
|
230
|
+
name: string;
|
|
231
|
+
label: string;
|
|
232
|
+
type?: 'text' | 'email' | 'tel' | 'textarea' | 'select';
|
|
233
|
+
required?: boolean;
|
|
234
|
+
autoComplete?: string;
|
|
235
|
+
placeholder?: string;
|
|
236
|
+
/** Choices for `type: 'select'`. */
|
|
237
|
+
options?: string[];
|
|
238
|
+
/** `half` pairs two fields on one row from the `sm` breakpoint. */
|
|
239
|
+
width?: 'full' | 'half';
|
|
240
|
+
}
|
|
241
|
+
interface LeadFormSectionProps extends Omit<SectionBaseProps, 'align' | 'onSubmit'> {
|
|
242
|
+
title: string;
|
|
243
|
+
/**
|
|
244
|
+
* A URL, or a React form action such as a Next.js Server Action. A URL is
|
|
245
|
+
* page data: if its scheme is not http(s), mailto or tel the section
|
|
246
|
+
* renders nothing, so an executable action never reaches the form.
|
|
247
|
+
*/
|
|
248
|
+
action: string | ((formData: FormData) => void | Promise<void>);
|
|
249
|
+
/** Only used with a URL `action`. */
|
|
250
|
+
method?: 'post' | 'get';
|
|
251
|
+
fields?: LeadFormField[];
|
|
252
|
+
/** Posted with the form, e.g. `{ source: 'industry-construction' }`. */
|
|
253
|
+
hiddenFields?: Record<string, string>;
|
|
254
|
+
submitLabel?: string;
|
|
255
|
+
/** Privacy or consent line under the button. */
|
|
256
|
+
note?: string;
|
|
257
|
+
/** Rendered as `data-track` on the submit button. */
|
|
258
|
+
submitTrackingId?: string;
|
|
259
|
+
/** `split` puts the heading beside the form; `stacked` centres it above. */
|
|
260
|
+
layout?: 'split' | 'stacked';
|
|
261
|
+
}
|
|
262
|
+
declare const defaultLeadFormFields: LeadFormField[];
|
|
263
|
+
declare const LeadFormSection: React.ForwardRefExoticComponent<LeadFormSectionProps & React.RefAttributes<HTMLElement>>;
|
|
264
|
+
|
|
265
|
+
interface LogoItem {
|
|
266
|
+
name: string;
|
|
267
|
+
/** Logo image; without it the name renders as a wordmark. */
|
|
268
|
+
src?: string;
|
|
269
|
+
href?: string;
|
|
270
|
+
trackingId?: string;
|
|
271
|
+
}
|
|
272
|
+
interface LogoCloudSectionProps extends SectionBaseProps {
|
|
273
|
+
logos: LogoItem[];
|
|
274
|
+
/** `marquee` loops the row horizontally; it holds still under reduced motion. */
|
|
275
|
+
variant?: 'grid' | 'marquee';
|
|
276
|
+
speed?: 'slow' | 'normal' | 'fast';
|
|
277
|
+
}
|
|
278
|
+
declare const LogoCloudSection: React.ForwardRefExoticComponent<LogoCloudSectionProps & React.RefAttributes<HTMLElement>>;
|
|
279
|
+
|
|
280
|
+
interface PricingPlan {
|
|
281
|
+
name: string;
|
|
282
|
+
/** Display price as written, e.g. "$49", "Custom" or "Free". */
|
|
283
|
+
price: string;
|
|
284
|
+
/** Billing unit after the price, e.g. "per employee / month". */
|
|
285
|
+
period?: string;
|
|
286
|
+
description?: string;
|
|
287
|
+
features: string[];
|
|
288
|
+
cta?: TemplateLink;
|
|
289
|
+
/** Emphasise this plan and show `badge`. */
|
|
290
|
+
highlighted?: boolean;
|
|
291
|
+
badge?: string;
|
|
292
|
+
}
|
|
293
|
+
interface PricingSectionProps extends SectionBaseProps {
|
|
294
|
+
plans: PricingPlan[];
|
|
295
|
+
/** Small print under the plans (taxes, contract terms). */
|
|
296
|
+
note?: string;
|
|
297
|
+
}
|
|
298
|
+
declare const PricingSection: React.ForwardRefExoticComponent<PricingSectionProps & React.RefAttributes<HTMLElement>>;
|
|
299
|
+
|
|
300
|
+
interface ProcessStep {
|
|
301
|
+
title: string;
|
|
302
|
+
description: string;
|
|
303
|
+
/** Icon token shown in the step marker instead of its number. */
|
|
304
|
+
icon?: string;
|
|
305
|
+
}
|
|
306
|
+
interface ProcessStepsSectionProps extends SectionBaseProps {
|
|
307
|
+
steps: ProcessStep[];
|
|
308
|
+
icons?: TemplateIconRegistry;
|
|
309
|
+
}
|
|
310
|
+
declare const ProcessStepsSection: React.ForwardRefExoticComponent<ProcessStepsSectionProps & React.RefAttributes<HTMLElement>>;
|
|
311
|
+
|
|
312
|
+
interface ResourceItem {
|
|
313
|
+
title: string;
|
|
314
|
+
href: string;
|
|
315
|
+
excerpt?: string;
|
|
316
|
+
image?: TemplateImage;
|
|
317
|
+
/** Content type label, e.g. "Guide" or "Case study". */
|
|
318
|
+
kind?: string;
|
|
319
|
+
/** Free-text detail line the caller formats, e.g. "8 min read". */
|
|
320
|
+
meta?: string;
|
|
321
|
+
trackingId?: string;
|
|
322
|
+
}
|
|
323
|
+
interface ResourceCardsSectionProps extends SectionBaseProps {
|
|
324
|
+
items: ResourceItem[];
|
|
325
|
+
columns?: 2 | 3 | 4;
|
|
326
|
+
/** Link to the full index, shown under the cards. */
|
|
327
|
+
viewAll?: TemplateLink;
|
|
328
|
+
}
|
|
329
|
+
declare const ResourceCardsSection: React.ForwardRefExoticComponent<ResourceCardsSectionProps & React.RefAttributes<HTMLElement>>;
|
|
330
|
+
|
|
331
|
+
interface SplitContentSectionProps extends Omit<SectionBaseProps, 'align'> {
|
|
332
|
+
title: string;
|
|
333
|
+
image: TemplateImage;
|
|
334
|
+
/** Caption under the image. */
|
|
335
|
+
caption?: string;
|
|
336
|
+
/** Proof points rendered as a checked list under the description. */
|
|
337
|
+
bullets?: string[];
|
|
338
|
+
primaryCta?: TemplateLink;
|
|
339
|
+
secondaryCta?: TemplateLink;
|
|
340
|
+
/** Which side the image sits on at desktop widths (follows reading direction). */
|
|
341
|
+
mediaPosition?: 'start' | 'end';
|
|
342
|
+
}
|
|
343
|
+
declare const SplitContentSection: React.ForwardRefExoticComponent<SplitContentSectionProps & React.RefAttributes<HTMLElement>>;
|
|
344
|
+
|
|
345
|
+
interface StatItem {
|
|
346
|
+
/** Numbers are locale-formatted; strings render as written. */
|
|
347
|
+
value: number | string;
|
|
348
|
+
prefix?: string;
|
|
349
|
+
suffix?: string;
|
|
350
|
+
label: string;
|
|
351
|
+
description?: string;
|
|
352
|
+
/** Decorative arrow. Say the direction in `label` too — the arrow is hidden from screen readers. */
|
|
353
|
+
trend?: 'up' | 'down';
|
|
354
|
+
}
|
|
355
|
+
interface StatsSectionProps extends SectionBaseProps {
|
|
356
|
+
stats: StatItem[];
|
|
357
|
+
variant?: 'plain' | 'cards';
|
|
358
|
+
/** BCP 47 locale for number formatting. */
|
|
359
|
+
locale?: string;
|
|
360
|
+
}
|
|
361
|
+
declare const StatsSection: React.ForwardRefExoticComponent<StatsSectionProps & React.RefAttributes<HTMLElement>>;
|
|
362
|
+
|
|
363
|
+
interface TestimonialItem {
|
|
364
|
+
quote: string;
|
|
365
|
+
author: string;
|
|
366
|
+
role?: string;
|
|
367
|
+
company?: string;
|
|
368
|
+
/** Headshot URL; decorative, since the author is named beside it. */
|
|
369
|
+
avatar?: string;
|
|
370
|
+
/** Whole stars out of five. */
|
|
371
|
+
rating?: 1 | 2 | 3 | 4 | 5;
|
|
372
|
+
}
|
|
373
|
+
interface TestimonialSectionLabels {
|
|
374
|
+
/** Screen-reader rating text; `{rating}` is replaced with the number. */
|
|
375
|
+
rating?: string;
|
|
376
|
+
}
|
|
377
|
+
interface TestimonialSectionProps extends SectionBaseProps {
|
|
378
|
+
testimonials: TestimonialItem[];
|
|
379
|
+
/** `featured` gives the first testimonial the whole section; `cards` lays them out in a grid. */
|
|
380
|
+
variant?: 'cards' | 'featured';
|
|
381
|
+
labels?: TestimonialSectionLabels;
|
|
382
|
+
}
|
|
383
|
+
declare const TestimonialSection: React.ForwardRefExoticComponent<TestimonialSectionProps & React.RefAttributes<HTMLElement>>;
|
|
384
|
+
|
|
385
|
+
interface VideoBase {
|
|
386
|
+
/** Accessible name of the player, e.g. "Product tour (3 min)". */
|
|
387
|
+
title: string;
|
|
388
|
+
}
|
|
389
|
+
type VideoSource = (VideoBase & {
|
|
390
|
+
/** Embeds `youtube-nocookie.com`, which sets no cookies until playback. Captions come from YouTube. */
|
|
391
|
+
youtubeId: string;
|
|
392
|
+
}) | (VideoBase & {
|
|
393
|
+
/** A self-hosted file, played with the native `<video>` element. */
|
|
394
|
+
src: string;
|
|
395
|
+
/** Still frame shown before playback. */
|
|
396
|
+
poster?: string;
|
|
397
|
+
/** WebVTT captions — required, because prerecorded speech needs captions (WCAG 1.2.2). */
|
|
398
|
+
captions: {
|
|
399
|
+
src: string;
|
|
400
|
+
srcLang: string;
|
|
401
|
+
label: string;
|
|
402
|
+
};
|
|
403
|
+
});
|
|
404
|
+
interface VideoSectionProps extends SectionBaseProps {
|
|
405
|
+
video: VideoSource;
|
|
406
|
+
/** Caption under the player. */
|
|
407
|
+
caption?: string;
|
|
408
|
+
}
|
|
409
|
+
declare const VideoSection: React.ForwardRefExoticComponent<VideoSectionProps & React.RefAttributes<HTMLElement>>;
|
|
410
|
+
|
|
411
|
+
/** A section the site renders itself, looked up by name in `LandingPage`'s `custom` map. */
|
|
412
|
+
interface CustomBlock {
|
|
413
|
+
type: 'custom';
|
|
414
|
+
component: string;
|
|
415
|
+
props?: Record<string, unknown>;
|
|
416
|
+
id?: string;
|
|
417
|
+
}
|
|
418
|
+
/** Section props as page data: no event handlers, children or components, so a block survives JSON. */
|
|
419
|
+
type BlockData<P> = Omit<P, keyof React.DOMAttributes<HTMLElement> | 'components' | 'icons'>;
|
|
420
|
+
/** One entry of a page's `blocks` array: a section's props tagged with its `type`. */
|
|
421
|
+
type LandingBlock = ({
|
|
422
|
+
type: 'hero';
|
|
423
|
+
} & BlockData<HeroSectionProps>) | ({
|
|
424
|
+
type: 'logos';
|
|
425
|
+
} & BlockData<LogoCloudSectionProps>) | ({
|
|
426
|
+
type: 'features';
|
|
427
|
+
} & BlockData<FeatureGridSectionProps>) | ({
|
|
428
|
+
type: 'split';
|
|
429
|
+
} & BlockData<SplitContentSectionProps>) | ({
|
|
430
|
+
type: 'process';
|
|
431
|
+
} & BlockData<ProcessStepsSectionProps>) | ({
|
|
432
|
+
type: 'stats';
|
|
433
|
+
} & BlockData<StatsSectionProps>) | ({
|
|
434
|
+
type: 'comparison';
|
|
435
|
+
} & BlockData<ComparisonSectionProps>) | ({
|
|
436
|
+
type: 'pricing';
|
|
437
|
+
} & BlockData<PricingSectionProps>) | ({
|
|
438
|
+
type: 'video';
|
|
439
|
+
} & BlockData<VideoSectionProps>) | ({
|
|
440
|
+
type: 'testimonials';
|
|
441
|
+
} & BlockData<TestimonialSectionProps>) | ({
|
|
442
|
+
type: 'resources';
|
|
443
|
+
} & BlockData<ResourceCardsSectionProps>) | ({
|
|
444
|
+
type: 'faq';
|
|
445
|
+
} & BlockData<FaqSectionProps>) | ({
|
|
446
|
+
type: 'lead-form';
|
|
447
|
+
} & Omit<BlockData<LeadFormSectionProps>, 'action'> & {
|
|
448
|
+
/** A URL, or the name of a function in `LandingPage`'s `actions` map. */
|
|
449
|
+
action: string;
|
|
450
|
+
}) | ({
|
|
451
|
+
type: 'cta';
|
|
452
|
+
} & BlockData<CtaSectionProps>) | CustomBlock;
|
|
453
|
+
type LandingBlockType = LandingBlock['type'];
|
|
454
|
+
interface LandingPageProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
455
|
+
/** The page, top to bottom. Plain data — import it from a content file or a CMS. */
|
|
456
|
+
blocks: LandingBlock[];
|
|
457
|
+
/** Site icon tokens, passed to every section that renders icons. */
|
|
458
|
+
icons?: TemplateIconRegistry;
|
|
459
|
+
/** Site image and link components (e.g. `next/image`, `next/link`), passed to every section. */
|
|
460
|
+
components?: TemplateComponents;
|
|
461
|
+
/** Site-owned sections for `{ type: 'custom', component }` blocks. */
|
|
462
|
+
custom?: Record<string, React.ComponentType<any>>;
|
|
463
|
+
/** Form actions (e.g. Server Actions, React 19) that `lead-form` blocks name in `action`. */
|
|
464
|
+
actions?: Record<string, (formData: FormData) => void | Promise<void>>;
|
|
465
|
+
}
|
|
466
|
+
declare const LandingPage: React.ForwardRefExoticComponent<LandingPageProps & React.RefAttributes<HTMLDivElement>>;
|
|
467
|
+
|
|
468
|
+
interface LandingPreset {
|
|
469
|
+
label: string;
|
|
470
|
+
description: string;
|
|
471
|
+
/** Recommended order, top to bottom. Blocks not listed may sit anywhere. */
|
|
472
|
+
sequence: LandingBlockType[];
|
|
473
|
+
/** Blocks the page is incomplete without. */
|
|
474
|
+
required: LandingBlockType[];
|
|
475
|
+
}
|
|
476
|
+
/** Page archetypes shared by the BlueHive and Enterprise Health marketing sites. */
|
|
477
|
+
declare const landingPresets: {
|
|
478
|
+
'vertical-hub': {
|
|
479
|
+
label: string;
|
|
480
|
+
description: string;
|
|
481
|
+
sequence: ("split" | "hero" | "features" | "logos" | "stats" | "testimonials" | "process" | "resources" | "faq" | "cta")[];
|
|
482
|
+
required: ("hero" | "features" | "faq" | "cta")[];
|
|
483
|
+
};
|
|
484
|
+
'service-detail': {
|
|
485
|
+
label: string;
|
|
486
|
+
description: string;
|
|
487
|
+
sequence: ("hero" | "features" | "stats" | "testimonials" | "video" | "process" | "comparison" | "pricing" | "faq" | "cta")[];
|
|
488
|
+
required: ("hero" | "features" | "cta")[];
|
|
489
|
+
};
|
|
490
|
+
campaign: {
|
|
491
|
+
label: string;
|
|
492
|
+
description: string;
|
|
493
|
+
sequence: ("hero" | "features" | "logos" | "stats" | "testimonials" | "faq" | "lead-form")[];
|
|
494
|
+
required: ("hero" | "lead-form")[];
|
|
495
|
+
};
|
|
496
|
+
comparison: {
|
|
497
|
+
label: string;
|
|
498
|
+
description: string;
|
|
499
|
+
sequence: ("hero" | "features" | "testimonials" | "comparison" | "faq" | "cta")[];
|
|
500
|
+
required: ("hero" | "comparison" | "cta")[];
|
|
501
|
+
};
|
|
502
|
+
resource: {
|
|
503
|
+
label: string;
|
|
504
|
+
description: string;
|
|
505
|
+
sequence: ("split" | "hero" | "resources" | "faq" | "lead-form")[];
|
|
506
|
+
required: ("hero" | "lead-form")[];
|
|
507
|
+
};
|
|
508
|
+
pricing: {
|
|
509
|
+
label: string;
|
|
510
|
+
description: string;
|
|
511
|
+
sequence: ("hero" | "stats" | "testimonials" | "comparison" | "pricing" | "faq" | "cta")[];
|
|
512
|
+
required: ("hero" | "pricing" | "faq")[];
|
|
513
|
+
};
|
|
514
|
+
};
|
|
515
|
+
type LandingPresetId = keyof typeof landingPresets;
|
|
516
|
+
interface LandingPageIssue {
|
|
517
|
+
severity: 'error' | 'warning';
|
|
518
|
+
message: string;
|
|
519
|
+
/** Index into `blocks`, when the issue belongs to one block. */
|
|
520
|
+
index?: number;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Checks a page against the heading contract (exactly one `h1` hero, first)
|
|
524
|
+
* and, when given, a preset's required blocks and order. Run it in a build
|
|
525
|
+
* step or test; `LandingPage` itself renders whatever it is given.
|
|
526
|
+
*/
|
|
527
|
+
declare function validateLandingPage(blocks: LandingBlock[], preset?: LandingPresetId | LandingPreset): LandingPageIssue[];
|
|
528
|
+
|
|
529
|
+
interface SectionHeadingProps {
|
|
530
|
+
eyebrow?: string;
|
|
531
|
+
title?: string;
|
|
532
|
+
description?: string;
|
|
533
|
+
/** Heading element. Sections use `h2`; only a page's hero is `h1`. */
|
|
534
|
+
as?: 'h1' | 'h2' | 'h3';
|
|
535
|
+
size?: 'section' | 'hero';
|
|
536
|
+
align?: SectionAlign;
|
|
537
|
+
tone?: SectionTone;
|
|
538
|
+
titleId?: string;
|
|
539
|
+
className?: string;
|
|
540
|
+
}
|
|
541
|
+
/** Eyebrow, heading and supporting text — the opener every landing section shares. */
|
|
542
|
+
declare function SectionHeading({ eyebrow, title, description, as: Heading, size, align, tone, titleId, className, }: SectionHeadingProps): react_jsx_runtime.JSX.Element | null;
|
|
543
|
+
interface SectionShellProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {
|
|
544
|
+
eyebrow?: string;
|
|
545
|
+
title?: string;
|
|
546
|
+
description?: string;
|
|
547
|
+
tone?: SectionTone;
|
|
548
|
+
align?: SectionAlign;
|
|
549
|
+
width?: 'wide' | 'narrow';
|
|
550
|
+
spacing?: 'default' | 'compact';
|
|
551
|
+
/** Accepted so sections can forward their props; the shell renders no links or images. */
|
|
552
|
+
components?: TemplateComponents;
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* The `<section>` + container + heading frame every landing section renders.
|
|
556
|
+
* Exported so a site can build its own section that sits flush with the rest.
|
|
557
|
+
*/
|
|
558
|
+
declare const SectionShell: React.ForwardRefExoticComponent<SectionShellProps & React.RefAttributes<HTMLElement>>;
|
|
559
|
+
|
|
560
|
+
export { type ComparisonRow, ComparisonSection, type ComparisonSectionLabels, type ComparisonSectionProps, CtaSection, type CtaSectionProps, type CustomBlock, type FaqItem, FaqSection, type FaqSectionProps, FeatureGridSection, type FeatureGridSectionProps, type FeatureItem, HeroSection, type HeroSectionLabels, type HeroSectionProps, type LandingBlock, type LandingBlockType, LandingPage, type LandingPageIssue, type LandingPageProps, type LandingPreset, type LandingPresetId, type LeadFormField, LeadFormSection, type LeadFormSectionProps, LogoCloudSection, type LogoCloudSectionProps, type LogoItem, type PricingPlan, PricingSection, type PricingSectionProps, type ProcessStep, ProcessStepsSection, type ProcessStepsSectionProps, ResourceCardsSection, type ResourceCardsSectionProps, type ResourceItem, type SectionAlign, type SectionBaseProps, SectionHeading, type SectionHeadingProps, SectionShell, type SectionShellProps, type SectionTone, SplitContentSection, type SplitContentSectionProps, type StatItem, StatsSection, type StatsSectionProps, type TemplateComponents, TemplateIcon, type TemplateIconComponent, type TemplateIconName, type TemplateIconProps, type TemplateIconRegistry, type TemplateImage, type TemplateImageProps, type TemplateLink, type TemplateLinkProps, type TestimonialItem, TestimonialSection, type TestimonialSectionLabels, type TestimonialSectionProps, VideoSection, type VideoSectionProps, type VideoSource, defaultLeadFormFields, landingPresets, templateIcons, validateLandingPage };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { ComparisonSection, CtaSection, FaqSection, FeatureGridSection, HeroSection, LandingPage, LeadFormSection, LogoCloudSection, PricingSection, ProcessStepsSection, ResourceCardsSection, SectionHeading, SectionShell, SplitContentSection, StatsSection, TemplateIcon, TestimonialSection, VideoSection, defaultLeadFormFields, landingPresets, templateIcons, validateLandingPage } from './chunk-VNCIIXGO.js';
|
|
2
|
+
import './chunk-IQ4KQJAO.js';
|
|
3
|
+
import './chunk-6NZXWKUE.js';
|
|
4
|
+
import './chunk-3IMM2PM4.js';
|
|
5
|
+
import './chunk-BMSG4NBH.js';
|
|
6
|
+
import './chunk-AXRRBEER.js';
|
|
7
|
+
import './chunk-TQONQSJO.js';
|
|
8
|
+
import './chunk-PX6F3LHL.js';
|
|
9
|
+
//# sourceMappingURL=templates.js.map
|
|
10
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"templates.js"}
|
|
@@ -25,12 +25,6 @@ type ViewId = 'overview' | 'list' | 'board' | 'calendar' | 'gantt' | 'roadmap' |
|
|
|
25
25
|
* hardcode a palette that breaks under another brand or in dark mode.
|
|
26
26
|
*/
|
|
27
27
|
type Accent = 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';
|
|
28
|
-
/** A named stage: a board column, and the segments of a stage bar. */
|
|
29
|
-
interface Stage {
|
|
30
|
-
id: string;
|
|
31
|
-
label: string;
|
|
32
|
-
accent?: Accent;
|
|
33
|
-
}
|
|
34
28
|
/**
|
|
35
29
|
* How a view reads one item. Only `getId` and `getTitle` are always required;
|
|
36
30
|
* each view documents which of the rest it needs (a board needs `getStatus`, a
|
|
@@ -89,4 +83,4 @@ interface ViewBaseProps<T> {
|
|
|
89
83
|
className?: string;
|
|
90
84
|
}
|
|
91
85
|
|
|
92
|
-
export type {
|
|
86
|
+
export type { ViewLabels as V, ViewBaseProps as a };
|
|
@@ -25,12 +25,6 @@ type ViewId = 'overview' | 'list' | 'board' | 'calendar' | 'gantt' | 'roadmap' |
|
|
|
25
25
|
* hardcode a palette that breaks under another brand or in dark mode.
|
|
26
26
|
*/
|
|
27
27
|
type Accent = 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';
|
|
28
|
-
/** A named stage: a board column, and the segments of a stage bar. */
|
|
29
|
-
interface Stage {
|
|
30
|
-
id: string;
|
|
31
|
-
label: string;
|
|
32
|
-
accent?: Accent;
|
|
33
|
-
}
|
|
34
28
|
/**
|
|
35
29
|
* How a view reads one item. Only `getId` and `getTitle` are always required;
|
|
36
30
|
* each view documents which of the rest it needs (a board needs `getStatus`, a
|
|
@@ -89,4 +83,4 @@ interface ViewBaseProps<T> {
|
|
|
89
83
|
className?: string;
|
|
90
84
|
}
|
|
91
85
|
|
|
92
|
-
export type {
|
|
86
|
+
export type { ViewLabels as V, ViewBaseProps as a };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mieweb/ui",
|
|
3
|
-
"version": "0.10.0-dev.
|
|
3
|
+
"version": "0.10.0-dev.16",
|
|
4
4
|
"description": "A themeable, accessible React component library built with Tailwind CSS",
|
|
5
5
|
"author": "Medical Informatics Engineering, Inc.",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -151,6 +151,16 @@
|
|
|
151
151
|
"default": "./dist/globe.cjs"
|
|
152
152
|
}
|
|
153
153
|
},
|
|
154
|
+
"./templates": {
|
|
155
|
+
"import": {
|
|
156
|
+
"types": "./dist/templates.d.ts",
|
|
157
|
+
"default": "./dist/templates.js"
|
|
158
|
+
},
|
|
159
|
+
"require": {
|
|
160
|
+
"types": "./dist/templates.d.cts",
|
|
161
|
+
"default": "./dist/templates.cjs"
|
|
162
|
+
}
|
|
163
|
+
},
|
|
154
164
|
"./datavis": {
|
|
155
165
|
"import": {
|
|
156
166
|
"types": "./dist/datavis.d.ts",
|
|
@@ -254,6 +264,7 @@
|
|
|
254
264
|
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
255
265
|
"lint:fix": "eslint \"src/**/*.{ts,tsx}\" --fix",
|
|
256
266
|
"rtl:scan": "node scripts/rtl-scan.mjs",
|
|
267
|
+
"check:templates-rsc": "node --conditions=react-server scripts/check-templates-rsc.mjs",
|
|
257
268
|
"rtl:scan:update": "node scripts/rtl-scan.mjs --update",
|
|
258
269
|
"condensed:scan": "node scripts/condensed-scan.mjs",
|
|
259
270
|
"catalog:check": "node scripts/catalog-check.mjs",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkIX6KFB3K_cjs = require('./chunk-IX6KFB3K.cjs');
|
|
4
|
-
require('./chunk-UV2FVNWT.cjs');
|
|
5
|
-
require('./chunk-VNYW4C4J.cjs');
|
|
6
|
-
require('./chunk-S5RVSXDV.cjs');
|
|
7
|
-
require('./chunk-EUAMEVVI.cjs');
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Object.defineProperty(exports, "CsvBlock", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
get: function () { return chunkIX6KFB3K_cjs.CsvBlock; }
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=CsvBlock-ROJCKJDP.cjs.map
|
|
16
|
-
//# sourceMappingURL=CsvBlock-ROJCKJDP.cjs.map
|