🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

astro-json-element

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

astro-json-element

Create/define HTML elements using JSON objects

latest
Source
npmnpm
Version
1.1.4
Version published
Maintainers
1
Created
Source

Astro JSON Element

Create/define HTML elements using JSON objects

This component was originaly created to customize an element using props for my pagination component

Note: Using thestyle attribute or tailwindcss classes allows you to style your astro-json-element easier and keep the html and css together

How to use

Install package:

npm i astro-json-element

Create Element:

---
import { Element } from 'astro-json-element';

const my_element = {
    tag: "h1",
    text: "Heading",
    class: "heading",
    id: "my-heading";
}
---

<Element {...my_element}/>
// <h1 id="my-heading" class="heading">Heading</h1>

Example

Navbar

---
import { Element } from 'astro-json-element';

const header = {
    tag: "header",
    style: "font-family:Arial;display:flex;justify-content:space-around;margin:1rem;border-radius:5px;background-color:white;border:3px solid purple",
    _heading: {
        tag: "h1",
        text: "Purple",
        style: "font-weight:bold;font-size:3rem;color:purple;"
    },
    _ul: {
        tag: "ul",
        style: "display:flex;align-items:center;gap:1rem;font-weight:bold;font-size:1.25rem;color:purple;",
        _item1: {
            tag: "li",
            _link: {
                tag: "a",
                text: "Home"
            }
        },
        _item2: {
            tag: "li",
            _link: {
                tag: "a",
                text: "Products"
            }
        },
        _item3: {
            tag: "li",
            _link: {
                tag: "a",
                text: "About"
            }
        },
        _item4: {
            tag: "li",
            style: "padding:.75rem 1rem;border-radius:5px;background-color:purple;color:white;",
            _link: {
                tag: "a",
                text: "Contact"
            }
        },
    }
}
---

<Element {...header}/>

Render Order

  • slot first
  • _[child] slot first
  • text
  • _[child] slot before
  • slot (default)
  • _[child] slot after
  • innerHTML
  • _[child] slot last
  • slot last

Slots

Default: Elements are slot in at the center of the render order (5 of 9)

first

First element in Render Order

last

Last elemenet in Render Order

Props

tag

Type: string

Default: div

Defines what HTML tag the element will be

slot

Type: string

Options: first, before, after, last

Default: last

Controls where a _child element will be rendered inside of a parent json-element

Render Order

text

Type: string

Set the text of an element, automatically escaped

innerHTML

Type: string

Set the innerHTML of an element, a string of HTML

defaults

Type: object

Define default props for _child elements

debug

Type: boolean

Default: false

If true the element will print its props to the console

...attrs

Type: object

Any other key/value pairs will be added as attributes to your element

---
const my_element = {
    tag: "span",
    text: "Text",
    id: "my-element",
    key: value,
}
---

<Element {...my_element}/>
// <span id="my-element" key="value">Text</span>

class

Type: set | object | array | string

Class uses the class:list directive:

---
const my_element = {
    tag: "div",
    'class-list': ['This', 'is', 'a', 'test']
}
---

<Element {...my_element}/>
// <div class="This is a test">Text</div>

_[child]

Type: astro-json-element

astro-json-elements are recursive, you can create elements inside of elements by prefixing a key with _

NOTE: Some tags like h1-6 and p tags do not allow children and will slot the child element after the defined element inside the parent element

Example:

Header

---
const header = {
    tag: "header",
    style: "display:flex;justify-content:center;background-color:white;border:3px solid purple",
    _heading: {
        tag: "h1",
        text: "Purple Heading",
        style: "font-weight:bold;font-size:3rem;color:purple;"
    }
}
---

<Element {...header}/>

Elements are recursive allowing for unlimited nested child Elements

List

---
const list = {
    tag: "ul",
    style: "display:flex;align-items:center;gap:1rem;font-weight:bold;font-size:1.25rem;color:purple;",
    _item1: {
        tag: "li",
        _link: {
            tag: "a",
            text: "Home"
        }
    },
    _item2: {
        tag: "li",
        _link: {
            tag: "a",
            text: "Products"
        }
    },
    _item3: {
        tag: "li",
        _link: {
            tag: "a",
            text: "About"
        }
    },
    _item4: {
        tag: "li",
        style: "padding:.75rem 1rem;border-radius:5px;background-color:purple;color:white;",
        _link: {
            tag: "a",
            text: "Contact"
        }
    },
}
---

<Element {...list}/>

Keywords

astro

FAQs

Package last updated on 08 Nov 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts