Skip to content

Commit 386e124

Browse files
committed
Improve pricing and cta components.
1 parent 2669279 commit 386e124

19 files changed

Lines changed: 565 additions & 399 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<ComparisonColumn
2+
title="Small pieces. A coherent whole."
3+
summary="Build your interface from focused components that already speak the same design language."
4+
badge="Made to compose"
5+
icon="lucide:layers"
6+
tone="accent"
7+
>
8+
<ul class="m-0 p-0 list-none">
9+
<ComparisonFeature tone="accent"
10+
>Readable source you can make your own</ComparisonFeature>
11+
<ComparisonFeature tone="accent"
12+
>Shared theme tokens across every screen</ComparisonFeature>
13+
<ComparisonFeature tone="accent"
14+
>Room for your own content and interactions</ComparisonFeature>
15+
</ul>
16+
<template #actions>
17+
<BtnLink
18+
class="max-w-full ws-normal"
19+
href="/components/landing/feature-card/"
20+
tone="accent"
21+
icon="lucide:arrow-right"
22+
iconPosition="end"
23+
>Explore card composition</BtnLink>
24+
</template>
25+
</ComparisonColumn>

‎frontend/purestack.studio/components/landing/comparison-column/comparison-column.mdx‎

Lines changed: 21 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ nav:
1717
name="ComparisonColumn"
1818
kind="One alternative"
1919
summary="One self-contained option in a comparison, with independent emphasis and freely composed details."
20-
source="https://github.com/PureStackStudio/PureStack/blob/main/packages/ts-components/src/standard/landing/landingTypes.ts"
20+
source="https://github.com/PureStackStudio/PureStack/blob/main/packages/ts-components/src/standard/landing/comparisonColumn.ts"
2121
section="Landing &amp; pricing"
2222
sectionHref="/components/landing/"/>
2323

2424
## A highlighted option
2525

26-
An icon and badge identify the option before its supporting details.
26+
ComparisonColumn gives each option a clear introduction, readable details,
27+
and room for a next step. Use the `actions` slot to keep links aligned at the
28+
bottom when neighboring columns contain different amounts of content.
2729

2830
<Tabs
2931
group="comparison-column-sample-1"
@@ -35,47 +37,18 @@ An icon and badge identify the option before its supporting details.
3537
>
3638
<TabPane id="comparison-column-sample-1-preview" label="Preview">
3739
<ComponentExample
38-
label="ComparisonColumn in context"
39-
caption="Compare the composition, then open its source tab to adapt it."
40+
data-toc-ignore
41+
label="One option, a clear story"
42+
caption="Introduce the option, explain its strengths, and give the reader a next step."
4043
>
41-
<ComparisonColumn
42-
title="Component composition"
43-
summary="Build a view from focused pieces."
44-
badge="Recommended here"
45-
icon="lucide:check"
46-
tone="accent"
47-
>
48-
<ul class="pl-0">
49-
<ComparisonFeature>Readable source</ComparisonFeature>
50-
<ComparisonFeature>Shared theme tokens</ComparisonFeature>
51-
</ul>
52-
<BtnLink href="/components/landing/feature-card/" variant="link">
53-
Explore card composition
54-
</BtnLink>
55-
</ComparisonColumn>
44+
<import-content src="./_highlighted-option.mdx"/>
5645
</ComponentExample>
5746
</TabPane>
5847
<TabPane
5948
id="comparison-column-sample-1-source-0"
6049
label="highlighted-option.mdx"
6150
>
62-
```html
63-
<ComparisonColumn
64-
title="Component composition"
65-
summary="Build a view from focused pieces."
66-
badge="Recommended here"
67-
icon="lucide:check"
68-
tone="accent"
69-
>
70-
<ul class="pl-0">
71-
<ComparisonFeature>Readable source</ComparisonFeature>
72-
<ComparisonFeature>Shared theme tokens</ComparisonFeature>
73-
</ul>
74-
<BtnLink href="/components/landing/feature-card/" variant="link">
75-
Explore card composition
76-
</BtnLink>
77-
</ComparisonColumn>
78-
```
51+
<import-codeblock src="./_highlighted-option.mdx" lang="html"/>
7952
</TabPane>
8053
</Tabs>
8154

@@ -92,11 +65,11 @@ Use outline or neutral treatments when both options should have equal emphasis.
9265
tabVariant="underline"
9366
>
9467
<TabPane id="comparison-column-sample-2-preview" label="Preview">
95-
<div class="component-preview-stage">
68+
<div class="component-preview-stage" data-toc-ignore>
9669
<ComparisonColumn
9770
title="Plain content"
9871
summary="A good fit for a short explanation."
99-
variant="outline"
72+
variant="surface"
10073
>
10174
<p class="mb-0">
10275
Choose the simplest structure that communicates the information.
@@ -109,7 +82,7 @@ Use outline or neutral treatments when both options should have equal emphasis.
10982
<ComparisonColumn
11083
title="Plain content"
11184
summary="A good fit for a short explanation."
112-
variant="outline"
85+
variant="surface"
11386
>
11487
<p class="mb-0">Choose the simplest structure that communicates the information.</p>
11588
</ComparisonColumn>
@@ -122,6 +95,7 @@ Use outline or neutral treatments when both options should have equal emphasis.
12295
The same composition in every semantic tone. Child tones are explicit where the composition owns them, including navigation actions.
12396

12497
<ComponentExample
98+
data-toc-ignore
12599
label="All ten semantic tones"
126100
caption="Switch the site theme to compare the same samples in both palettes."
127101
>
@@ -135,6 +109,7 @@ The same composition in every semantic tone. Child tones are explicit where the
135109
Every supported variant is shown in accent, including none. Variant controls the outer treatment; nested content may use its own treatment.
136110

137111
<ComponentExample
112+
data-toc-ignore
138113
label="All eighteen visual variants"
139114
caption="Switch the site theme to compare the same samples in both palettes."
140115
>
@@ -146,6 +121,7 @@ Every supported variant is shown in accent, including none. Variant controls the
146121
## Decoration and rich detail
147122

148123
<ComponentExample
124+
data-toc-ignore
149125
label="A quiet alternative and a highlighted choice"
150126
caption="A title, summary, badge, and icon are independently optional. Compose feature lists in the default slot."
151127
>
@@ -154,7 +130,7 @@ Every supported variant is shown in accent, including none. Variant controls the
154130
<code>Quiet</code><ComparisonColumn
155131
title="Start small"
156132
summary="A few reusable patterns."
157-
variant="outline"
133+
variant="surface"
158134
><ul class="m-0 p-0">
159135
<ComparisonFeature>Basic composition</ComparisonFeature>
160136
</ul></ComparisonColumn>
@@ -185,6 +161,7 @@ Every supported variant is shown in accent, including none. Variant controls the
185161
| title, summary | Quiet uses a title and summary without decoration. |
186162
| icon, badge | Icon-only and badge-only samples sit beside the fully decorated tone gallery. |
187163
| Default slot | Compose native feature lists or rich supporting paragraphs below the summary. |
164+
| actions slot | Place links or buttons here to keep the next step at the bottom of the column. |
188165
| Native attributes and events | Pass attributes through the root; keyboard behavior belongs to the composed native controls. |
189166

190167
This component exposes tone and variant, but no variantMode. Style individual child components explicitly when their appearance should match.
@@ -281,10 +258,11 @@ Titles render as h3. A comparison column can contain links but is not itself cli
281258

282259
### Composition
283260

284-
<div class="api-contract">
261+
<div class="api-contract wrap-anywhere">
285262
<p>
286-
<strong>Default slot:</strong> details, feature lists and actions. Register
287-
defineComparisonColumnComponent with Panel, Flex, Badge and Icon
263+
<strong>Default slot:</strong> details and feature lists.
264+
<strong>actions slot:</strong> links or buttons below the details. Register
265+
defineComparisonColumnComponent with Panel, Flex, Badge and IconFrame
288266
dependencies.
289267
</p>
290268
</div>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<Panel tone="neutral" variant="surface" class="p-5">
2+
<ul class="m-0 p-0 list-none">
3+
<ComparisonFeature tone="success">
4+
<div>
5+
<strong>Built for the keyboard</strong>
6+
<p class="m-0 opacity-75">
7+
Native controls keep everyday interactions familiar.
8+
</p>
9+
</div>
10+
</ComparisonFeature>
11+
<ComparisonFeature tone="info" icon="lucide:mail">
12+
<div>
13+
<strong>Connected to your application</strong>
14+
<p class="m-0 opacity-75">
15+
Add your own email integration when the experience needs it.
16+
</p>
17+
</div>
18+
</ComparisonFeature>
19+
<ComparisonFeature>
20+
Shared components, with room for details that make the experience yours.
21+
</ComparisonFeature>
22+
</ul>
23+
</Panel>

‎frontend/purestack.studio/components/landing/comparison-feature/comparison-feature.mdx‎

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ nav:
1717
name="ComparisonFeature"
1818
kind="Comparison detail"
1919
summary="A list item with a compact icon, designed for clear and consistent comparison details."
20-
source="https://github.com/PureStackStudio/PureStack/blob/main/packages/ts-components/src/standard/landing/landingTypes.ts"
20+
source="https://github.com/PureStackStudio/PureStack/blob/main/packages/ts-components/src/standard/landing/comparisonFeature.ts"
2121
section="Landing &amp; pricing"
2222
sectionHref="/components/landing/"/>
2323

@@ -35,27 +35,15 @@ Every feature is an li, so place it inside a list.
3535
>
3636
<TabPane id="comparison-feature-sample-1-preview" label="Preview">
3737
<ComponentExample
38-
label="ComparisonFeature in context"
39-
caption="Compare the composition, then open its source tab to adapt it."
38+
data-toc-ignore
39+
label="Details worth comparing"
40+
caption="Icons align with the first line while longer explanations flow naturally beside them."
4041
>
41-
<ul class="pl-0">
42-
<ComparisonFeature tone="success"
43-
>Keyboard-operable controls</ComparisonFeature>
44-
<ComparisonFeature tone="info" icon="lucide:mail">
45-
Email integration supplied by your application
46-
</ComparisonFeature>
47-
</ul>
42+
<import-content src="./_feature-list.mdx"/>
4843
</ComponentExample>
4944
</TabPane>
5045
<TabPane id="comparison-feature-sample-1-source-0" label="feature-list.mdx">
51-
```html
52-
<ul class="pl-0">
53-
<ComparisonFeature tone="success">Keyboard-operable controls</ComparisonFeature>
54-
<ComparisonFeature tone="info" icon="lucide:mail">
55-
Email integration supplied by your application
56-
</ComparisonFeature>
57-
</ul>
58-
```
46+
<import-codeblock src="./_feature-list.mdx" lang="html"/>
5947
</TabPane>
6048
</Tabs>
6149

@@ -72,7 +60,7 @@ The slot can contain more than a short string.
7260
tabVariant="underline"
7361
>
7462
<TabPane id="comparison-feature-sample-2-preview" label="Preview">
75-
<div class="component-preview-stage">
63+
<div class="component-preview-stage" data-toc-ignore>
7664
<ul class="pl-0">
7765
<ComparisonFeature>
7866
<div>
@@ -106,6 +94,7 @@ The slot can contain more than a short string.
10694
Every tone is visible on the icon frame. The row text keeps the surrounding text color.
10795

10896
<ComponentExample
97+
data-toc-ignore
10998
label="All ten semantic tones"
11099
caption="Switch the site theme to compare the same samples in both palettes."
111100
>
@@ -117,6 +106,7 @@ Every tone is visible on the icon frame. The row text keeps the surrounding text
117106
## Defaults, custom icons, and rich text
118107

119108
<ComponentExample
109+
data-toc-ignore
120110
label="Explain the difference clearly"
121111
caption="ComparisonFeature creates an li. Keep it inside ul or ol; tone colors its icon rather than the entire row."
122112
>
@@ -203,10 +193,10 @@ Use explicit text for included, limited or unavailable features. An icon color a
203193

204194
### Composition
205195

206-
<div class="api-contract">
196+
<div class="api-contract wrap-anywhere">
207197
<p>
208198
<strong>Default slot:</strong> feature text or flow content. Root element is
209-
li. Register defineComparisonFeatureComponent with Flex and Icon
199+
li. Register defineComparisonFeatureComponent with Flex and IconFrame
210200
dependencies.
211201
</p>
212202
</div>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<ComparisonTable
2+
eyebrow="CHOOSE YOUR APPROACH"
3+
title="The right foundation for your next page."
4+
subtitle="Start with the content. Add interactivity where the experience calls for it."
5+
columnsLg="2"
6+
variant="none"
7+
class="p-0"
8+
>
9+
<ComparisonColumn
10+
title="A content page"
11+
summary="Give your ideas a clear, readable home with pages that are easy to maintain."
12+
icon="lucide:file-text"
13+
tone="neutral"
14+
>
15+
<ul class="m-0 p-0 list-none">
16+
<ComparisonFeature
17+
>Write pages and shared fragments in MDX</ComparisonFeature>
18+
<ComparisonFeature>Render components at build time</ComparisonFeature>
19+
<ComparisonFeature>Keep the focus on your content</ComparisonFeature>
20+
</ul>
21+
<template #actions>
22+
<BtnLink
23+
class="max-w-full ws-normal"
24+
href="/guides/"
25+
tone="neutral"
26+
variant="surface"
27+
icon="lucide:arrow-right"
28+
iconPosition="end"
29+
>Explore the guides</BtnLink>
30+
</template>
31+
</ComparisonColumn>
32+
<ComparisonColumn
33+
title="An interactive view"
34+
summary="Bring the same design system to experiences that respond to your visitors."
35+
icon="lucide:code"
36+
badge="Made to interact"
37+
tone="accent"
38+
>
39+
<ul class="m-0 p-0 list-none">
40+
<ComparisonFeature tone="accent"
41+
>Model local state with Regor refs</ComparisonFeature>
42+
<ComparisonFeature tone="accent"
43+
>Compose focused, reusable controls</ComparisonFeature>
44+
<ComparisonFeature tone="accent"
45+
>Add a browser entry where you need it</ComparisonFeature>
46+
</ul>
47+
<template #actions>
48+
<BtnLink
49+
class="max-w-full ws-normal"
50+
href="/components/"
51+
tone="accent"
52+
icon="lucide:arrow-right"
53+
iconPosition="end"
54+
>Browse components</BtnLink>
55+
</template>
56+
</ComparisonColumn>
57+
</ComparisonTable>

0 commit comments

Comments
 (0)