diff --git a/src/components/Card/Card.stories.tsx b/src/components/Card/Card.stories.tsx index 32c7768..cde35c9 100644 --- a/src/components/Card/Card.stories.tsx +++ b/src/components/Card/Card.stories.tsx @@ -1,5 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { CardLayout } from "./CardLayout"; +import { HeadingField } from "../Heading/HeadingField"; +import { RichTextDisplayField } from "../RichText/RichTextDisplayField"; +import { TextItem } from "../RichText/TextItem"; +import { ButtonWidget } from "../Button/ButtonWidget"; const meta = { title: "Components/Card", @@ -235,6 +239,113 @@ export const BorderAndShadow: Story = { }, }; +export const VerticalAlignment: Story = { + args: { children: null }, + parameters: { layout: "padded" }, + render: () => ( +
+
+

+ Cards use flex flex-col internally. + Put mt-auto on your footer element to pin it to the bottom when cards stretch to equal height. +

+
+ + {/* Food menu pattern */} +
+

Variable content, footer pinned to bottom

+
+ +
+ + ]} marginBelow="NONE" className="[&>div]:leading-tight!" /> +
+ ]} marginBelow="NONE" /> + +
+
+ + +
+ + ]} marginBelow="NONE" className="[&>div]:leading-tight!" /> +
+ $8.00 + +
+
+ + +
+ + ]} marginBelow="NONE" className="[&>div]:leading-tight!" /> +
+ $8.50 + +
+
+ + +
+ + ]} marginBelow="NONE" className="[&>div]:leading-tight!" /> +
+ $7.00 + +
+
+
+
+ + {/* Pricing pattern */} +
+

Variable feature list, button at bottom

+
+ + + +
    +
  • ✓ 5 projects
  • +
  • ✓ Basic analytics
  • +
+
+ +
+
+ + + + +
    +
  • ✓ Unlimited projects
  • +
  • ✓ Advanced analytics
  • +
  • ✓ Team collaboration
  • +
  • ✓ Priority support
  • +
  • ✓ Custom integrations
  • +
+
+ +
+
+ + + + +
    +
  • ✓ Everything in Pro
  • +
  • ✓ SSO & SAML
  • +
  • ✓ Dedicated support
  • +
+
+ +
+
+
+
+
+ ), +}; + export const CardStyles: Story = { args: { children: null }, render: () => ( diff --git a/src/components/Card/CardLayout.tsx b/src/components/Card/CardLayout.tsx index 0a6026f..f5e25cd 100644 --- a/src/components/Card/CardLayout.tsx +++ b/src/components/Card/CardLayout.tsx @@ -174,7 +174,8 @@ export const CardLayout: React.FC = ({ marginBelowMap[marginBelow], showBorder ? `border ${borderProps.className || ''}` : '', showShadow ? 'shadow-md' : '', - 'relative' + 'relative', + 'flex flex-col' ].filter(Boolean).join(' ') // Merge with optional className override @@ -202,7 +203,7 @@ export const CardLayout: React.FC = ({ aria-hidden="true" /> )} -
+
{children}