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

astro-plain

v0.1.3

Published

Generic, batteries-included prototype for Astro pages

Downloads

17

Readme

Astro Plain

Generic, batteries-included template for building pages with Astro.

Astro Plain provides a convinient way of controlling the surrounding HTML of a page as well as it's HEAD, including (but not limited to) title, styles and scripts.

graph LR
  subgraph "HTML + ?"
    subgraph "HEAD + ?"
      A[?????]
    end
    B[?????]
  end

Usage

npm i astro-plain
---
import Root from "astro-plain";
---
<Root {...Astro.props}>
  <main>
    <header> ... </header>
    ...
    <footer> ... </footer>
  </main>
</Root>

Special Features

This template includes special features to make common tasks easier.

Blank Favicon

By default, this template uses an embedded blank icon. This prevents the page from making failed calls to favicon.ico upon load.

Titles Array

You may pass an array to the "title" property. Items will be joined with the value of "titleJoiner". This is useful for creating titles represented nested pages.

Meta Tags + Open Graph

You may pass a nested object to the meta property and keys will be joined using ":". This is useful for creating meta tags that follow the Open Graph schema.

<Root
  meta={{
    og:{
      image: "abc.png",
    },
  }}
></Root>

produces

...
<meta name="og:image" content="abc.png" />
...

set the "ogMeta" or "twitterMeta" properties to true and appropriate Open Graph meta tags will be generated from the provided title, image, and description.

SEO

This template takes titles, description and keywords as props and produces and produces the appropraite metatags for SEO.

<Root = titles={["Example Web Page", "Part 2" ]} titleJoiner=": "
description="Second of an example web pages."
keywords={["example", "test", "astro", "page"]}
 ></Root>
<meta name="title" content="Example Web Page: Part 2" />
<meta name="description" content="Second of an example web pages" />
<meta name="keywords " content="example, test, astro, page" />

Google Tag Manager

You may pass in a tag manager ID to add Google Tag Manager to your site.

Important! Tag Manager requires that additional HTML be added to the body of your site. Astro astro-plain's GenericPage component specifically avoids affecting content of the body tag. Import the TagManagerBody component into the body of your applicaiton.

---
import Root, {TagManagerBody} from "astro-plain";
const TagManagerID = "GTM-XXXXX";
---
<Root tmid={TagManagerID}>
    ...
    <TagManagerBody tmid={TagManagerID} slot="append-to-body"/>
</Root>

API

Slots

Slot exist to pass components into other components

Default

By default, tags passed to the element appear withing the body tag.

slot="append-to-head"

Tags passed with the "slot" attribute set to "append-to-head" are appeneded to the HEAD tag.

slot="append-to-body"

Tags passed with the "slot" attribute set to "append-to-body" are appended to BODY tag.

Props

Aside from passing in other components, this component is configured to accept a number of props:

title

titleJoiner

charSet

description

keywords

author

canonical

htmlClass

serviceWorkerScript

favicon

faviconType

tmid

manifest

criticalStyles

criticalScripts

externalStyles

externalScripts

appleTouchIcons

webComponents

meta

lang