Loopar Introduction
loopar-webpage

Components Reference

Loopar provides a rich library of components for building pages, forms, and applications. All components are drag-and-drop ready in the visual builder.


Component Categories

CategoryComponents
LayoutSection, Row, Col, Panel, Tab, Collapse
TypographyTitle, Subtitle, Paragraph, Text Block, Markdown
Form FieldsData, Text, Select, Date, Check, Link, Table, etc.
MediaImage, Banner Image, Icon, Carousel, Particles
InteractiveButton, Link, Card, Feature Card, Pricing Card
Data DisplayCode Block, Table View, Badge, Progress
NavigationMenu, Breadcrumb, Tabs

Common Properties

All components share these base properties:

PropertyTypeDescription
keystringUnique identifier
labelstringDisplay name in builder
classstringCSS/Tailwind classes
styleobjectInline styles
hiddenbooleanHide component
animationstringAnimation effect
animation_delaynumberDelay in ms

Using Components

In Visual Builder

  1. Drag component from panel
  2. Drop into page/form
  3. Configure properties in sidebar

In JSON

{
  "element": "component_name",
  "data": {
    "key": "unique_key",
    "label": "Display Name",
    "class": "custom-classes"
  },
  "elements": []
}

In JSX

import { Section, Row, Col, Title } from "@loopar/components";

<Section>
  <Row layout={[50, 50]}>
    <Col>
      <Title>Hello World</Title>
    </Col>
  </Row>
</Section>

Layout Components

Structural components for organizing page content.


Section

Full-width container. The primary building block for page sections.

{
  "element": "section",
  "data": {
    "key": "hero_section",
    "class": "py-20 bg-background",
    "background_color": "#ffffff",
    "background_image": "url(/images/bg.jpg)",
    "background_size": "cover",
    "background_position": "center",
    "min_height": "100vh"
  }
}
PropertyTypeDefaultDescription
background_colorstringBackground color
background_imagestring/arrayBackground image URL
background_sizestringcovercover, contain, auto
background_positionstringcenterPosition of background
min_heightstringMinimum height (e.g., 100vh)
paddingstringPadding (e.g., py-20)

Row

Horizontal container with column layout.

{
  "element": "row",
  "data": {
    "key": "content_row",
    "columns": [50, 50],
    "gap": "gap-6",
    "align_items": "center"
  }
}
PropertyTypeDefaultDescription
columnsarray[100]Column widths as percentages
gapstringgap-4Gap between columns
align_itemsstringstartVertical alignment
justify_contentstringstartHorizontal alignment

Column Layouts:

  • [100] — Full width
  • [50, 50] — Two equal columns
  • [33, 33, 33] — Three equal columns
  • [25, 25, 25, 25] — Four columns
  • [30, 70] — Sidebar + content
  • [70, 30] — Content + sidebar

Col

Column within a Row. Automatically created based on Row's columns property.

{
  "element": "col",
  "data": {
    "key": "left_col",
    "class": "p-4",
    "align": "center"
  }
}
PropertyTypeDefaultDescription
classstringAdditional CSS classes
alignstringstartContent alignment

Panel

Card-like container with optional header, border, and shadow.

{
  "element": "panel",
  "data": {
    "key": "info_panel",
    "title": "Important Information",
    "variant": "default",
    "collapsible": false
  }
}
PropertyTypeDefaultDescription
titlestringPanel header title
variantstringdefaultdefault, outline, ghost, gradient
collapsiblebooleanfalseCan collapse/expand
default_openbooleantrueInitially expanded

Tab

Tabbed content container.

{
  "element": "tab",
  "data": {
    "key": "content_tabs",
    "tabs": [
      { "label": "Overview", "key": "overview" },
      { "label": "Details", "key": "details" },
      { "label": "Settings", "key": "settings" }
    ],
    "default_tab": "overview"
  }
}
PropertyTypeDefaultDescription
tabsarrayTab definitions
default_tabstringfirstInitially active tab
variantstringdefaultTab style variant

Collapse

Collapsible content section.

{
  "element": "collapse",
  "data": {
    "key": "faq_item",
    "title": "What is Loopar?",
    "default_open": false,
    "icon": "ChevronDown"
  }
}
PropertyTypeDefaultDescription
titlestringCollapse header
default_openbooleanfalseInitially expanded
iconstringChevronDownToggle icon

Generic (Div)

Generic container for custom layouts.

{
  "element": "generic",
  "data": {
    "key": "custom_container",
    "class": "flex items-center justify-center p-8 bg-primary/10 rounded-xl",
    "inner_text": "Custom content here"
  }
}
PropertyTypeDefaultDescription
classstringCSS/Tailwind classes
inner_textstringText content
tagstringdivHTML tag to use

Typography Components

Text and content display components.


Title

Heading text with configurable level.

{
  "element": "title",
  "data": {
    "key": "main_title",
    "text": "Welcome to Loopar",
    "size": "4xl",
    "tag": "h1",
    "class": "font-bold text-primary"
  }
}
PropertyTypeDefaultDescription
textstringTitle content
sizestring2xlsm, lg, xl, 2xl, 3xl, 4xl, 5xl
tagstringh2h1 - h6
gradientbooleanfalseApply gradient effect

Subtitle

Secondary heading, typically paired with Title.

{
  "element": "subtitle",
  "data": {
    "key": "section_subtitle",
    "text": "Build faster, deploy smarter",
    "class": "text-muted-foreground"
  }
}
PropertyTypeDefaultDescription
textstringSubtitle content
sizestringlgText size

Paragraph

Body text content.

{
  "element": "paragraph",
  "data": {
    "key": "intro_text",
    "text": "Loopar is a meta-framework that revolutionizes how you build applications.",
    "class": "text-lg leading-relaxed"
  }
}
PropertyTypeDefaultDescription
textstringParagraph content
classstringStyling classes

Text Block

Combined title + subtitle + description block.

{
  "element": "text_block",
  "data": {
    "key": "features_intro",
    "subtitle": "Why Loopar?",
    "title": "Everything you need to build modern apps",
    "description": "From database to deployment, Loopar handles it all.",
    "align": "center"
  }
}
PropertyTypeDefaultDescription
subtitlestringSmall text above title
titlestringMain heading
descriptionstringBody text below title
alignstringleftleft, center, right

Markdown

Render markdown content with syntax highlighting.

{
  "element": "markdown",
  "data": {
    "key": "docs_content",
    "value": "# Getting Started\n\nWelcome to **Loopar**!\n\n```javascript\nconst app = new Loopar();\n```"
  }
}
PropertyTypeDefaultDescription
valuestringMarkdown content
classstringContainer classes

Supports:

  • Headers, bold, italic, strikethrough
  • Code blocks with syntax highlighting
  • Tables, lists, blockquotes
  • Links and images

Code Block

Syntax-highlighted code display.

{
  "element": "code_block",
  "data": {
    "key": "example_code",
    "code": "npx loopar-install my-project",
    "language": "bash",
    "show_line_numbers": true,
    "copyable": true
  }
}
PropertyTypeDefaultDescription
codestringCode content
languagestringjavascriptSyntax highlighting
show_line_numbersbooleanfalseShow line numbers
copyablebooleantrueShow copy button

Supported languages: javascript, typescript, python, bash, json, html, css, sql, jsx, markdown

Form Field Components

Input components for data collection. These store values in the database when used in Entities.


Data (Text Input)

Single-line text input.

{
  "element": "data",
  "data": {
    "name": "customer_name",
    "label": "Customer Name",
    "required": true,
    "placeholder": "Enter name...",
    "max_length": 100
  }
}
PropertyTypeDefaultDescription
namestringField identifier
labelstringDisplay label
requiredbooleanfalseMust have value
placeholderstringPlaceholder text
max_lengthnumber255Maximum characters
defaultstringDefault value
readonlybooleanfalseCannot edit
hiddenbooleanfalseHide from UI

Text (Textarea)

Multi-line text input.

{
  "element": "text",
  "data": {
    "name": "description",
    "label": "Description",
    "rows": 5,
    "placeholder": "Enter description..."
  }
}
PropertyTypeDefaultDescription
rowsnumber3Visible rows
max_lengthnumberMaximum characters

Select

Dropdown selection.

{
  "element": "select",
  "data": {
    "name": "status",
    "label": "Status",
    "options": "Draft\nPending\nApproved\nRejected",
    "default": "Draft"
  }
}
PropertyTypeDefaultDescription
optionsstringOptions (newline separated)
defaultstringDefault selected value
allow_nullbooleantrueAllow empty selection

Check

Boolean checkbox.

{
  "element": "check",
  "data": {
    "name": "is_active",
    "label": "Is Active",
    "default": true
  }
}
PropertyTypeDefaultDescription
defaultbooleanfalseDefault checked state

Int / Float / Currency

Numeric inputs.

{
  "element": "currency",
  "data": {
    "name": "total_amount",
    "label": "Total Amount",
    "precision": 2,
    "min": 0
  }
}
PropertyTypeDefaultDescription
precisionnumber2Decimal places (float/currency)
minnumberMinimum value
maxnumberMaximum value
stepnumber1Increment step

Date / DateTime / Time

Date and time inputs.

{
  "element": "date",
  "data": {
    "name": "due_date",
    "label": "Due Date",
    "min_date": "today",
    "format": "YYYY-MM-DD"
  }
}
PropertyTypeDefaultDescription
formatstringvariesDate/time format
min_datestringMinimum allowed date
max_datestringMaximum allowed date

Reference to another entity (foreign key).

{
  "element": "link",
  "data": {
    "name": "customer",
    "label": "Customer",
    "options": "Customer",
    "filters": { "status": "Active" }
  }
}
PropertyTypeDefaultDescription
optionsstringTarget entity name
filtersobjectFilter linked records
link_fieldstringnameField to display

Table

Child table (one-to-many relationship).

{
  "element": "table",
  "data": {
    "name": "items",
    "label": "Items",
    "options": "Invoice Item",
    "columns": ["item_name", "quantity", "rate", "amount"]
  }
}
PropertyTypeDefaultDescription
optionsstringChild entity name
columnsarrayVisible columns
min_rowsnumber0Minimum rows required
max_rowsnumberMaximum rows allowed

Email / Phone / Password

Specialized text inputs with validation.

{
  "element": "email",
  "data": {
    "name": "email",
    "label": "Email Address",
    "required": true
  }
}

Image / File

File upload fields.

{
  "element": "image",
  "data": {
    "name": "profile_photo",
    "label": "Profile Photo",
    "accept": "image/*",
    "max_size": 5
  }
}
PropertyTypeDefaultDescription
acceptstring*/*Accepted file types
max_sizenumber10Max size in MB
multiplebooleanfalseAllow multiple files

Color

Color picker input.

{
  "element": "color",
  "data": {
    "name": "brand_color",
    "label": "Brand Color",
    "default": "#3b82f6"
  }
}

JSON

JSON editor field.

{
  "element": "json",
  "data": {
    "name": "metadata",
    "label": "Metadata",
    "default": {}
  }
}

Media Components

Visual and interactive media elements.


Image

Display image with various sizing options.

{
  "element": "image",
  "data": {
    "key": "hero_image",
    "background_image": "/images/hero.jpg",
    "alt": "Hero illustration",
    "aspect_ratio": "16:9",
    "background_size": "cover",
    "border_radius": "rounded-xl"
  }
}
PropertyTypeDefaultDescription
background_imagestring/arrayImage URL
altstringAlt text
aspect_ratiostring1:1, 4:3, 16:9, 21:9
background_sizestringcovercover, contain, auto
background_positionstringcenterImage position
border_radiusstringBorder radius class

Full-width hero banner with overlay support.

{
  "element": "banner_image",
  "data": {
    "key": "hero_banner",
    "background_image": "/images/banner.jpg",
    "height": "500px",
    "overlay": true,
    "overlay_opacity": 0.5,
    "parallax": true
  }
}
PropertyTypeDefaultDescription
background_imagestringBanner image URL
heightstring400pxBanner height
overlaybooleanfalseShow dark overlay
overlay_opacitynumber0.4Overlay opacity (0-1)
parallaxbooleanfalseParallax scroll effect

Icon

Lucide icon display.

{
  "element": "icon",
  "data": {
    "key": "feature_icon",
    "icon": "Rocket",
    "size": "48",
    "color": "text-primary",
    "class": "mb-4"
  }
}
PropertyTypeDefaultDescription
iconstringLucide icon name
sizestring/number24Icon size in pixels
colorstringcurrentColorIcon color class
stroke_widthnumber2Stroke width

Popular icons: Check, X, Plus, Minus, ChevronRight, ArrowRight, Star, Heart, User, Settings, Search, Menu, Rocket, Zap, Shield, Code, Database, Globe


Image/content slider.

{
  "element": "carousel",
  "data": {
    "key": "testimonials_carousel",
    "autoplay": true,
    "interval": 5000,
    "show_arrows": true,
    "show_dots": true,
    "loop": true,
    "animation": "slide"
  }
}
PropertyTypeDefaultDescription
autoplaybooleanfalseAuto-advance slides
intervalnumber5000Autoplay interval (ms)
show_arrowsbooleantrueShow prev/next arrows
show_dotsbooleantrueShow dot indicators
loopbooleantrueLoop back to start
animationstringslideslide, fade
slides_per_viewnumber1Visible slides

Particles

Animated particle background.

{
  "element": "particles",
  "data": {
    "key": "hero_particles",
    "type": "dots",
    "color": "#3b82f6",
    "quantity": 50,
    "speed": 1,
    "opacity": 0.5,
    "connected": true
  }
}
PropertyTypeDefaultDescription
typestringdotsParticle type
colorstring#ffffffParticle color
quantitynumber30Number of particles
speednumber1Animation speed
opacitynumber0.7Particle opacity
connectedbooleanfalseDraw lines between
interactivebooleantrueReact to mouse

Card Components

Pre-styled card layouts for common use cases.


Feature Card

Highlight features with icon, title, and description.

{
  "element": "feature_card",
  "data": {
    "key": "feature_1",
    "icon": "Zap",
    "title": "Lightning Fast",
    "description": "Build and deploy in minutes, not hours.",
    "background_image": "https://illustrations.popsy.co/violet/rocket.svg",
    "link": "/features/speed",
    "variant": "default"
  }
}
PropertyTypeDefaultDescription
iconstringLucide icon name
titlestringCard title
descriptionstringCard description
background_imagestring/arrayBackground illustration
linkstringCard click destination
variantstringdefaultdefault, outline, ghost

Pricing Card

Pricing tier display with feature list.

{
  "element": "pricing_card",
  "data": {
    "key": "pro_plan",
    "title": "Pro",
    "price": "$29",
    "period": "month",
    "description": "For growing teams",
    "features": [
      "Unlimited projects",
      "Priority support",
      "Custom domains",
      "Analytics dashboard"
    ],
    "cta_text": "Get Started",
    "cta_link": "/signup?plan=pro",
    "highlighted": true,
    "badge": "Popular"
  }
}
PropertyTypeDefaultDescription
titlestringPlan name
pricestringPrice display
periodstringmonthBilling period
descriptionstringPlan description
featuresarrayList of features
cta_textstringGet StartedButton text
cta_linkstringButton destination
highlightedbooleanfalseHighlight this card
badgestringBadge text (e.g., "Popular")

Testimonial Card

Customer testimonial with quote and avatar.

{
  "element": "testimonial_card",
  "data": {
    "key": "testimonial_1",
    "quote": "Loopar transformed how we build applications. Development time reduced by 70%.",
    "author": "Jane Smith",
    "role": "CTO, TechCorp",
    "avatar": "/images/jane.jpg",
    "rating": 5
  }
}
PropertyTypeDefaultDescription
quotestringTestimonial text
authorstringPerson's name
rolestringTitle/company
avatarstringAvatar image URL
ratingnumberStar rating (1-5)

Stat Card

Display statistics with label and value.

{
  "element": "stat_card",
  "data": {
    "key": "users_stat",
    "value": "10,000+",
    "label": "Active Users",
    "icon": "Users",
    "trend": "+25%",
    "trend_direction": "up"
  }
}
PropertyTypeDefaultDescription
valuestringStat value
labelstringStat label
iconstringOptional icon
trendstringTrend indicator
trend_directionstringup, down, neutral

Team Card

Team member profile card.

{
  "element": "team_card",
  "data": {
    "key": "team_member_1",
    "name": "Alex Johnson",
    "role": "Lead Developer",
    "image": "/images/alex.jpg",
    "bio": "10+ years building enterprise software.",
    "social": {
      "twitter": "https://twitter.com/alex",
      "linkedin": "https://linkedin.com/in/alex",
      "github": "https://github.com/alex"
    }
  }
}
PropertyTypeDefaultDescription
namestringMember name
rolestringJob title
imagestringPhoto URL
biostringShort bio
socialobjectSocial links

Interactive Components

Buttons, links, and user interaction elements.


Button

Clickable button with various styles.

{
  "element": "button",
  "data": {
    "key": "submit_btn",
    "label": "Submit",
    "variant": "default",
    "size": "default",
    "icon": "Send",
    "icon_position": "right",
    "loading": false,
    "disabled": false
  }
}
PropertyTypeDefaultDescription
labelstringButton text
variantstringdefaultdefault, destructive, outline, secondary, ghost, link
sizestringdefaultsm, default, lg, icon
iconstringLucide icon name
icon_positionstringleftleft, right
loadingbooleanfalseShow loading spinner
disabledbooleanfalseDisable button
full_widthbooleanfalseFull width button

Navigation link, can be styled as button.

{
  "element": "link",
  "data": {
    "key": "cta_link",
    "label": "Get Started",
    "to": "/signup",
    "variant": "default",
    "external": false,
    "icon": "ArrowRight"
  }
}
PropertyTypeDefaultDescription
labelstringLink text
tostringDestination URL
variantstringlinkButton variant for styling
externalbooleanfalseOpen in new tab
iconstringOptional icon

Badge

Small status indicator or label.

{
  "element": "badge",
  "data": {
    "key": "status_badge",
    "text": "New",
    "variant": "default"
  }
}
PropertyTypeDefaultDescription
textstringBadge text
variantstringdefaultdefault, secondary, destructive, outline

Progress

Progress bar indicator.

{
  "element": "progress",
  "data": {
    "key": "upload_progress",
    "value": 75,
    "max": 100,
    "show_label": true,
    "size": "default"
  }
}
PropertyTypeDefaultDescription
valuenumber0Current value
maxnumber100Maximum value
show_labelbooleanfalseShow percentage
sizestringdefaultsm, default, lg

Accordion

Expandable content sections (FAQ style).

{
  "element": "accordion",
  "data": {
    "key": "faq",
    "items": [
      {
        "title": "What is Loopar?",
        "content": "Loopar is a meta-framework for building full-stack applications."
      },
      {
        "title": "Is it free?",
        "content": "Yes, Loopar is open source and free to use."
      }
    ],
    "allow_multiple": false
  }
}
PropertyTypeDefaultDescription
itemsarrayAccordion items
allow_multiplebooleanfalseAllow multiple open
default_opennumberInitially open index

Alert

Notification message box.

{
  "element": "alert",
  "data": {
    "key": "warning_alert",
    "title": "Warning",
    "description": "This action cannot be undone.",
    "variant": "warning",
    "icon": "AlertTriangle",
    "dismissible": true
  }
}
PropertyTypeDefaultDescription
titlestringAlert title
descriptionstringAlert message
variantstringdefaultdefault, info, success, warning, destructive
iconstringCustom icon
dismissiblebooleanfalseCan be closed

Animations

All components support entrance animations. Add these properties to any component.


Animation Properties

{
  "element": "any_component",
  "data": {
    "animation": "fade-up",
    "animation_delay": 100,
    "animation_duration": 500,
    "animation_once": true
  }
}
PropertyTypeDefaultDescription
animationstringAnimation type
animation_delaynumber0Delay in ms
animation_durationnumber400Duration in ms
animation_oncebooleantrueOnly animate once

Available Animations

Fade

AnimationEffect
fadeSimple fade in
fade-upFade in from below
fade-downFade in from above
fade-leftFade in from right
fade-rightFade in from left

Zoom

AnimationEffect
zoom-inZoom in from smaller
zoom-outZoom in from larger
zoom-in-upZoom + move up
zoom-in-downZoom + move down

Slide

AnimationEffect
slide-upSlide from below
slide-downSlide from above
slide-leftSlide from right
slide-rightSlide from left

Flip

AnimationEffect
flip-up3D flip from bottom
flip-down3D flip from top
flip-left3D flip from right
flip-right3D flip from left

Staggered Animations

Create staggered effects by incrementing delays:

[
  { "element": "feature_card", "data": { "animation": "fade-up", "animation_delay": 0 } },
  { "element": "feature_card", "data": { "animation": "fade-up", "animation_delay": 100 } },
  { "element": "feature_card", "data": { "animation": "fade-up", "animation_delay": 200 } }
]

This creates a cascading reveal effect.


Best Practices

DoDon't
Use subtle animationsOveruse animations
Keep durations short (300-500ms)Use very long durations
Stagger related elementsAnimate everything at once
Use animation_once: trueRepeat animations on scroll
Match animation to content flowUse random animation directions