# Components

Located at src/components.

A component is represented by at least one *.njk file that holds the Nunjucks/HTML code. The contents of this file replace the {% block pangolin_body %}{% endblock %} of templates. Pangolin.js respects sub-folders and automatically creates a navigation tree for components.

Additional information can be provided with a *.json and a *.md file. All files have to share the same name, e.g. button.njk, button.json, and button.md.

File Purpose
*.njk Holds the component’s Nunjucks/HTML code.
*.json Optional Configuration file for a component.
*.md Optional Markdown documentation for a component.

# Nunjucks

Stored as *.njk.

Nunjucks files support all default templating features, except {% extends … %} (this will be handled by Pangolin.js). Custom filters and tags can be defined in the Pangolin.js configuration file.

# include and import

Include and import paths will be resolved relative to the src directory:

{% include "components/atoms/hello.njk" %}

{% import "components/atoms/hello.njk" as hello %}
{% from "components/atoms/hello.njk" import hello as world %}

# static custom tag

The custom tag static prefixes a string with an absolute path to the final output directory. If a base path is set with an environment variable or a project setting this path will be prefixed as well.

<!-- Load an SVG image from `public/img` -->
<img src="{% static 'img/logo.svg' %}" alt="Logo">

<!-- This creates the following output -->
<img src="/optional/base/path/img/logo.svg" alt="Logo">

# Configuration Optional

Stored as *.json.

Set a custom configuration for this component. The following options are available:

{
  // Hide the component from the navigation tree
  // Default: false
  "hidden": true,

  // Set a different file from `src/templates` as the template
  // Default: "default.njk"
  "template": "page.njk"
}