npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

layouter.js

v1.9.1

Published

Layout builder without CSS, What???!!!

Downloads

40

Readme

Layouter

CI npm version code style: prettier Coverage Status npm bundle size types included Known Vulnerabilities

It is a library that allows us to build the entire layout quickly and easily, using directives on the HTML nodes. It mainly works based on the use of a grid, especially for the definition of columns.

  • 🚀 Super fast and parallel: Automatically processes all the nodes that are found when loading the web and also any new node that is added or starts using any directive.
  • 🎉 Shared styles: Share the already created styles of other previously processed nodes.
  • ⚗️ Pre-rendering virtual nodes: Pre-render virtual nodes before adding them to the DOM.

🔧 Installation

You just have to call, in the HTML, the script layouter.umd.js that is inside the 'dist' folder of this repository:

<script src="layouter.umd.js"></script>

you can also use one of these CDNs:

<script src="https://cdn.jsdelivr.net/npm/layouter.js/dist/layouter.umd.js" defer></script>
<script src="https://unpkg.com/layouter.js/dist/layouter.umd.js" defer></script>

And voila! That's all we need to use the layouter with its base configuration.

✨ Example of use

Let's say we want to define the following layout:

taking into account that we need to define margins, height, width by columns, etc, and each one in their respective breakpoints

So we would make this HTML with the following directives:

<main p="24-1/15 24-1/25@sm 30-1/31@md 29.26-1/41@lg" mxw="1280" mx="auto">
    <header fx="jc:sb@md" mb="24 30@md">
        <div h="100" c="11.1/29@md" mb="24@-md"></div>
        <div h="100" c="16.9/29@md"></div>
    </header>

    <section h="320" mb="24 25@sm 30@md"></section>

    <footer fx="jc:sb@sm">
        <div h="200" c="7/23@sm 9/29@md 12.33/39@lg"></div>
        <div h="200" c="7/23@sm 9/29@md 12.33/39@lg" my="24@-sm"></div>
        <div h="200" c="7/23@sm 9/29@md 12.33/39@lg"></div>
    </footer>
</main>
  • For the <main> tag, the following layout was determined:

    • A top and bottom padding of 24 pixels on your initial breakpoint (ie on mobile), also a left and right padding of 1 column, relative to the 15 columns defined for that breakpoint.
    • Upon reaching the breakpoint of sm the top and bottom padding of 24 pixels will be maintained but it is determined that 1 column of 25 columns is required for that breakpoint.
    • Then for the md breakpoint we change the top and bottom padding to 30 pixels and then set the left and right padding to be 1 column out of 31 columns for that breakpoint.
    • Finally, for the lg breakpoint, it was determined that the upper and lower padding would be 29.26 pixels, and for the right and left padding, 1 column of 41 columns would be taken from that breakpoint.
    • On the other hand, it was also determined that its maximum width would be 1280 pixels.
    • As well as it will have a top and bottom margin of 0 and right and left to 'auto'.
  • For the <header> tag, the following layout was determined:

    • Display 'flex' with 'justify-content' in 'space-between' from the breakpoint of md i.e. to tablet in landscape.
    • Bottom margin of 24 pixels at the start breakpoint and 30 pixels from the md breakpoint.
    • For its two child divs, a height of 100 pixels was determined.
    • For the first div 11.1 columns of 29 columns from the md breakpoint and only 24 pixels of bottom margin to the md breakpoint.
    • For the second child div, 16.9 columns out of 29 columns were determined from the md breakpoint.
  • For the <section> tag, the following layout was determined:

    • A height of 320 pixels.
    • A bottom margin of 24 pixels for your initial breakpoint, 25 pixels for the sm breakpoint, and finally 30 pixels for the md breakpoint.
  • For the <footer> tag, the following layout was determined:

    • A 'flex' display with 'justify-content' of 'space-between'.
    • For its child divs, a height of 200 pixels and a width of 7 columns of 23 columns were determined for the sm breakpoint, followed by 9 columns of 29 columns for the md breakpoint and finally 12.33 columns of 39 columns for the lg breakpoint.

Every time a new node is added to the body or an existing node uses a layouter directive, it will automatically be processed.

⚙️ Configuration

By default the library will work with the following base configuration:

{
    breakpoints: {
        xs: {
            width: 360,
            cols: 15
        },
        sm: {
            width: 600,
            cols: 25
        },
        md: {
            width: 900,
            cols: 31
        },
        lg: {
            width: 1200,
            cols: 41
        },
        xlg: {
            width: 1536,
            cols: 51
        }
    },
    debug: true,
    bridge: false,
    prefix: '',
    ready: () => {
        // initial process completed!
    }
}

One can write one's own configuration by creating a variable called 'layouterConfig' in the 'window' object. This has to be before the library call. To know more check the configuration options table

⚡ Directivas

| Name | Alias | Examples | Description | | ---------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | Cols | c | cols="13/15", c="5/10" | Determines the columns, that is, the 'width' as a percentage. | | d | display | d="bl", display="inline" | Determines the display that the node will have. | | Mart | mt, margin-top | mart="10", mt="20", margin-top="12" | Determines the top margin of a node. | | Marr | mr, margin-right | marr="2/15", mr="5/10", margin-right="3/5" | Determine the right margin of a node. | | Marb | mb, margin-bottom | marb="30", mb="50", margin-bottom="25" | Determine the bottom margin of a node. | | Marl | ml, margin-left | marl="3/15", ml="5/10", margin-left="3/5" | Determine the left margin of a node. | | Mar | m, margin | mar="20-2/15-30-3/15", m="20-2/15-30-3/15", margin="20-2/15-30-3/15" | It is a shorthand of the directives: mart, marr, marb, y marl. | | Mary | my, margin-y | mary="10", my="20", margin-y="30" | Determine the top and bottom margin of a node. | | Marx | mx, maring-x | marx="10", mx="20", margin-x="30" | Determine the right and left margin at the same time of a node. | | Padt | pt, padding-top | padt="10", pt="20", padding-top="30" | Determine the top padding of a node. | | Padr | pr, padding-right | padr="2/15", pr="3/16", padding-right="4/17" | Determine the padding right of a node. | | Padb | pb, padding-bottom | padb="30", pb="40", padding-bottom="50" | Determine the bottom padding of a node. | | Padl | pl, padding-left | padl="3/15", pl="4/16", padding-left="5/17" | Determine the left padding of a node. | | Pad | p, padding | pad="20-2/15-30-3/15", p="20-2/15-30-3/15", padding="20-2/15-30-3/15" | It is a shorthand of the directives: padt, padr, padb, y padl. | | Pady | py, padding-y | pady="10", py="20", padding-y="30" | Determine the padding top and bottom than the same time of a node. | | Padx | px, padding-x | padx="10", px="20", padding-x="30 | Determine the right and left padding at the same time of a node. | | Flex | fx | flex="jc:ce ai:fs fd:co", flex="jc:fe ai:fs, fx="align-items:center flex-wrap:wrap" | Determine the display Flex of the node and its derivatives. | | Wdh | w, width | wdh="100", w="200", width="300" | Determine the width of the node in pixels or other unit of measure. | | Hgt | h, height | hgt="100", h="200", height="300" | Determine the height of the node in pixels or other unit of measure. | | Mxw | max-width | mxw="200", max-width="300" | Determine the maximum width of the node in pixels or other unit of measure. | | Mxh | max-height | mxh="200", max-height="300" | Determine the maximum height of the node in pixels or other unit of measure. | | Miw | min-width | miw="300", min-width="400" | Determine the minimum width of the node in pixels or other unit of measure. | | Mih | min-height | mih="300", min-height="400" | Determine the high height of the node in pixels or other unit of measure. | | Pos | position | pos="re", position="relative" | Determine the position of node. | | T | top | t="10", top="20" | Determine the top of the node in pixels or other unit of measure. | | R | right | r="10", right="20" | Determine the right of the node in pixels or other unit of measure. | | B | bottom | b="10", bottom="20" | Determine the bottom of the node in pixels or other unit of measure. | | L | left | l="10", left="20" | Determine the left of the node in pixels or other unit of measure. |

🌐 Websites that use layouter

📚 Where to get help?

There is extensive documentation in the archive DOCS.md.

📝 Planned work

  1. ~~Add a directive for positioning.~~ ✅ ¡Ready!
  2. ~~Add more semantic aliases for directives. (Example: from 'mar' to 'margin' or only 'm')~~ ✅ ¡Ready!
  3. ~~Add directives for declaration of superior margins and paddings.~~ ✅ ¡Ready!
  4. ~~Create component for React JS~~ ✅ ¡Ready!
  5. Create component for Vue JS 🏗️ In progress...
  6. Create component for Svelte JS

🧾 License

The code and documentation are published under the Mit License.