Component Library ​

BadgePill ​

Rounded rectangle badges for labels, status indicators, and tags.

Default BadgeOutlined Badge
html
<BadgePill>Default Badge</BadgePill>
<BadgePill variant="outlined">Outlined Badge</BadgePill>

Props:

PropTypeDefaultOptions
variantstring"filled"filled, outlined
sizestring"md"sm, md, lg

Sizes

SmallMediumLarge
html
<BadgePill size="sm">Small</BadgePill>
<BadgePill size="md">Medium</BadgePill>
<BadgePill size="lg">Large</BadgePill>

BorderedBox ​

Bordered containers for stamps, forms, and callout content.

Simple bordered content
Contact
hello@elliottregan.com
Contact
hello@elliottregan.com
html
<!-- Basic -->
<BorderedBox>Simple bordered content</BorderedBox>

<!-- With title -->
<BorderedBox title="Contact" variant="stamp">
  hello@elliottregan.com
</BorderedBox>

<!-- Inverted title -->
<BorderedBox title="Contact" variant="stamp" inverted-title>
  hello@elliottregan.com
</BorderedBox>

Props:

PropTypeDefaultOptions
titlestring——
variantstring"default"default, stamp, vertical
invertedTitlebooleanfalse—

Vertical Text

Frontend developer and UX designer based in the USA
html
<BorderedBox variant="vertical">
  Frontend developer and UX designer based in the USA
</BorderedBox>

Card ​

Flexible card container with CSS variables for individual padding control.

Default bordered card with equal padding.
Elevated card with shadow.
Filled card with background.
Flat card with no decoration.
html
<Card>Default bordered card</Card>
<Card variant="elevated">Elevated card with shadow</Card>
<Card variant="filled">Filled card with background</Card>
<Card variant="flat">Flat card with no decoration</Card>

Props:

PropTypeDefaultOptions
variantstring"bordered"flat, bordered, elevated, filled

CSS Variables:

VariableDefaultDescription
--card-padding-topvar(--space-lg)Top padding
--card-padding-rightvar(--space-lg)Right padding
--card-padding-bottomvar(--space-lg)Bottom padding
--card-padding-leftvar(--space-lg)Left padding
--card-radiusvar(--space-sm)Border radius
--card-backgroundtransparentBackground color

Custom Padding via CSS

Large equal padding on all sides.
More top padding, less bottom padding.
css
.card-large-padding {
  --card-padding-top: var(--space-xl);
  --card-padding-right: var(--space-xl);
  --card-padding-bottom: var(--space-xl);
  --card-padding-left: var(--space-xl);
}

.card-asymmetric {
  --card-padding-top: var(--space-2xl);
  --card-padding-bottom: var(--space-sm);
}
html
<Card class="card-large-padding">Large padding</Card>
<Card class="card-asymmetric">Asymmetric padding</Card>
Large padding
Asymmetric padding
html
<Card
  :style="{ '--card-padding-left': 'var(--space-2xl)', '--card-radius': '1rem' }"
>
  Override via inline style
</Card>

AsideStack ​

Right-aligned vertically stacked text. Pairs well with DisclaimerGrid.

html
<AsideStack>
  <span>Currently</span>
  <span>based in</span>
  <span>Virginia,</span>
  <span>USA</span>
</AsideStack>

DisclaimerGrid ​

Two-column grid layout (2/3 + 1/3) for disclaimer text with a figure slot.

html
<DisclaimerGrid>
  Built with VitePress, html.js, and TypeScript.
  <template #figure>
    <span>Elliott Regan</span>
    <strong>elliottregan.com</strong>
  </template>
</DisclaimerGrid>

Slots:

SlotDescription
defaultMain disclaimer text
figureRight column content

FooterGrid ​

Combines AsideStack + DisclaimerGrid with a side panel spanning both rows.

html
<FooterGrid>
  <AsideStack>
    <span>Available</span>
    <span>for</span>
    <span>freelance</span>
  </AsideStack>
  <DisclaimerGrid>
    This portfolio showcases selected work.
    <template #figure>
      <strong>&copy; 2024</strong>
    </template>
  </DisclaimerGrid>
  <template #side>
    <p>Stack | html, TypeScript, VitePress</p>
  </template>
</FooterGrid>

StatBlock ​

Display metrics and statistics with large values and labels.

15+
Years Experience
50+
Projects Shipped
10M+
Users Reached
html
<StatBlock value="15+" label="Years Experience" />
<StatBlock value="50+" label="Projects Shipped" />
<StatBlock value="10M+" label="Users Reached" />

Props:

PropTypeDefaultOptions
valuestring——
labelstring——
variantstring"default"compact, default, large

Size Variants

99%
Uptime
99%
Uptime
99%
Uptime
html
<StatBlock value="99%" label="Uptime" variant="compact" />
<StatBlock value="99%" label="Uptime" variant="default" />
<StatBlock value="99%" label="Uptime" variant="large" />

Design Accents ​


Existing Components ​

CssStrokeTitle ​

html
<CssStrokeTitle text="Stroke Title Example" />
html
<TagList :items="['design', 'development', 'ux']" />