Saltar a contenido

Frontend Component Inventory

Generated: 2026-04-06 | Scan level: exhaustive

All components live in desparchado/frontend/components/presentational/ and are presentational only — they accept props but make no API calls. API calls happen in script-layer classes (EventContainer, getEventList) which then pass data to components via props.

Components are auto-registered by mount-vue.ts and can be mounted in Django templates via:

<div data-vue-component="event-card"
     data-vue-prop-title="My Event"
     data-vue-prop-location="Bogotá">
</div>


Foundation

Typography (foundation/typography/Typography.vue)

A polymorphic text element with variant and weight control.

Prop Type Default Values
tag string 'p' Any HTML tag
type string required h1h6, body, body_highlight, caption
weight string regular, medium, bold
text string required Display text
customClass string Extra CSS class
id string HTML id attribute

Used throughout other components for consistent typography.


Icon (foundation/icon/Icon.vue)

SVG icon wrapper.

Prop Type Notes
name string Icon name
customClass string Optional CSS class

Atoms

Button (atoms/button/Button.vue)

A link or button element with type and size variants.

Prop Type Default Values
type string 'primary' primary, secondary, ghost
label string required Button text
link string If set, renders <a> instead of <button>
padding string 'default' default, condensed
customClass string Extra CSS class

Logo (atoms/logo/Logo.vue)

Site logo, optionally linkable.

Prop Type Notes
link string Optional URL
customClass string Optional CSS class

A navigation menu item.

Prop Type Notes
label string Display text
link string URL
active boolean Highlights active state
customClass string Optional

Components

EventCard (components/event-card/EventCard.vue)

A standard event card for use in list views.

Prop Type Default Notes
tag FeaturedEventTags 'div' div, li, section, article
location string required Place name
title string required Event title
description string required HTML content (rendered with v-html)
day string required Formatted day (e.g., "10 Apr")
time string required Formatted time (e.g., "18:00")
imageUrl string fallback URL Event image URL
link string required URL to event detail
customClass string Extra CSS class

Used by EventContainer to render the dynamic events list on the homepage.


EventCardFullWidth (components/event-card-full-width/EventCardFullWidth.vue)

Full-width variant of EventCard for featured placement.

Props mirror EventCard.


FeaturedEventCard (components/featured-event-card/FeaturedEventCard.vue)

A card variant for homepage featured events with a background image style.

Props mirror EventCard with an emphasis on the imageUrl as a CSS background.


Header (components/header/Header.vue)

Site header with navigation. Props include navigation items and current page info.


A navigation dropdown menu for use inside the Header.

Prop Type Notes
label string Trigger label
items array Navigation items (label + link)

Script-layer Components (Non-Vue)

These are TypeScript classes that orchestrate data fetching and Vue mounting. They are attached to DOM elements via the data-url or similar attributes.

EventContainer (scripts/event-container.ts)

Fetches future events from the API and mounts an EventsListApp (a render-function component wrapping EventCard) into the target DOM element.

Usage in template:

<div class="event-container" data-url="/events/api/v1/events/future/?limit=6">
</div>

Registered in: home.ts via attachOnLoadListener

Flow: 1. EventContainer(el) reads el.dataset.url 2. Calls getEventList(url) via fetch 3. Maps IEvent[]EventCardProps[] via mapEventToCardProps() 4. Mounts EventsListApp (renders a list of EventCard components)


Storybook Stories

Each component has a corresponding story in desparchado/frontend/stories/:

Story file Component
Button.stories.ts Button
EventCard.stories.ts EventCard
EventCardFullWidth.stories.ts EventCardFullWidth
FeaturedEventCard.stories.ts FeaturedEventCard
Header.stories.ts Header
Icon.stories.ts Icon
Logo.stories.ts Logo
MenuDropdown.stories.ts MenuDropdown
NavItem.stories.ts NavItem
Typography.stories.ts Typography

Run Storybook: make run-storybook (port 6006)


Vite Aliases

Alias Resolves to
@presentational_components desparchado/frontend/components/presentational
@styles desparchado/frontend/styles
@fonts desparchado/frontend/assets/fonts
@assets desparchado/frontend/assets