πŸš€Β Β Astro β€” Base document enclosure


Provide sensible defaults for HTML base document. The goal is to reduce boilerplate when using multiple layouts in Astro projects.

Keywords:

  • astro
  • astro-component
  • boilerplate
  • app
  • base
  • wrapper
  • javascript
  • html
  • document

πŸš€Β Β Astro β€” Base document enclosure

Provide sensible defaults for HTML base document.
The goal is to reduce boilerplate when using multiple layouts in Astro projects.

πŸ“¦Β Β Installation

pnpm i @julian_cataldo/astro-base

πŸ› Β Β Usage

In your layout component, for example ./src/layouts/Default.astro:

---
import Document from '@julian_cataldo/astro-base/Document.astro';
import Body from '@julian_cataldo/astro-base/Body.astro';
// ...
---

<!-- All properties are optional -->
<Document
  id='test-base-rootDoc'
  data-theme='default'
  lang='en'
  class:list={[
    `mode-${import.meta.env.MODE}`,
    'test-base-rootDoc-1',
    'test-base-rootDoc-2',
  ]}
  data-test='scrollObserver-rootDoc base-rootDoc'
>
  <Fragment slot='head'>
    <!-- Things you can inject in HEAD -->
    <style is:inline>
      .some-class {
        color: red;
      }
    </style>
  </Fragment>

  <Body
    id='test-base-body'
    slot='body'
    class:list={['test-base-body-1', 'test-base-body-2']}
    data-test='base-body'
  >
    <!-- Things you can inject in BODY -->
    <nav>My navbar</nav>

    <!-- Your page content slot  -->
    <slot></slot>
  </Body>
</Document>

πŸŽ‰Β Β Result

<!DOCTYPE html>
<html lang="es" class="some-class doby-doba js" id="the-id">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <script>
      // CRITICAL
      // Add 'js' class to HTML tag if JavaScript is enabled
      (() => {
        const root = document.documentElement;
        root.classList.add('js');
      })();
    </script>

    <style is:inline>
      .some-class {
        color: red;
      }
    </style>
  </head>

  <body class="other-class dabadi-dabada" id="much-id">
    <nav>My navbar</nav>

    <!-- Page content slot -->
    <div>My page content</div>
  </body>
</html>

The js class is added to HTML tag, critically.
That way, you can handle CSS for users with or without JS enabled with .js & / :not(.js) & SCSS selectors.

TypeScript API

Extends: astroHTML.JSX.HTMLAttributes


name
type
required
default
jsEnabledClass
boolean
false
true
redirectTo
string | null
false
null

Changelog

Change Log

All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

0.13.2 (2022-07-24)

Note: Version bump only for package @julian_cataldo/astro-base

0.13.1 (2022-07-24)

Note: Version bump only for package @julian_cataldo/astro-base

0.13.0 (2022-07-18)

Features

  • add redirection mechanism (21f8856)
  • ts properties extractor for docs (9a8e65e)

0.12.0 (2022-06-28)

Features

  • better defaults for app base (ba9ee93)
  • better defaults properties (cc55aec)

0.11.5 (2022-06-26)

Note: Version bump only for package @julian_cataldo/astro-base

0.11.4 (2022-06-25)

Note: Version bump only for package @julian_cataldo/astro-base

0.11.3 (2022-06-22)

Note: Version bump only for package @julian_cataldo/astro-base

0.11.2 (2022-06-22)

Note: Version bump only for package @julian_cataldo/astro-base

0.11.1 (2022-06-21)

Note: Version bump only for package @julian_cataldo/astro-base

0.11.0 (2022-06-20)

Features

  • option for js detection (929faca)

0.10.4 (2022-06-20)

Note: Version bump only for package @julian_cataldo/astro-base

0.10.3 (2022-06-19)

Note: Version bump only for package @julian_cataldo/astro-base

0.10.2 (2022-06-19)

Note: Version bump only for package @julian_cataldo/astro-base

0.10.1 (2022-06-19)

Note: Version bump only for package @julian_cataldo/astro-base

0.10.0 (2022-06-19)

Features

  • init app base component (4b5da37)
...