Dile Docs Pages logo

Dile Docs Pages

Organization
Polydile
dile-docs-pages

Use when creating or updating a Markdown documentation page of the Dile Components Eleventy site under docs/ — especially component pages in docs/components/*.md, but also docs/crud, docs/mixins, docs/lib and docs/icons. Covers front matter, section order, properties/events/methods/slots/CSS custom properties formats and live html:preview demos.

Overview

PublisherPolydile
Repositorydile-components
Skill namedile-docs-pages
Stars
106
Forks
23
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Polydile on GitHub. Read the source before you install it.

Installation

Install the Dile Docs Pages AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Polydile/dile-components/tree/master/.claude/skills/dile-docs-pages
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Polydile/dile-components.git /tmp/dile-components
mkdir -p .claude/skills
cp -r /tmp/dile-components/.claude/skills/dile-docs-pages .claude/skills/dile-docs-pages
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Dile Docs Pages in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Dile Docs Pages on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Dile Docs Pages is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Dile Components documentation pages

The documentation site is an Eleventy project rooted at docs/ (config in eleventy.config.cjs). Each section is a folder of Markdown pages whose shared data lives in a <folder>.json file (layout, collection tag, hasMarkdown, markdownFolder), so pages never declare layout unless the folder lacks that JSON.

Before writing, read the component source (packages/<pkg>/components/<name>/) and its demo (demos/<pkg>/) so the docs match the real API: reactive properties, dispatched events, public methods, slots and CSS custom properties. Then open 1–2 sibling pages of the same family (e.g. another input, another spinner) and mirror them.

Where the page goes

WhatFolderFile nameExample
@dile/ui, @dile/utils, @dile/editor componentsdocs/components/dile-<name>.md (the tag name)dile-qr-code.md
@dile/crud components and guidesdocs/crud/<name>.md (no dile- prefix)crud-list.md, ajax.md
Mixinsdocs/mixins/dile-<name>-mixin.mddile-form-mixin.md
App lib (@dile/lib)docs/lib/<name>.mdrouter-mixin.md
Iconsdocs/icons/<family>-icon.md, <family>-badge.md...lucide-icon.md

The page URL is /<folder>/<file-name>/ (e.g. /components/dile-button/); use that form for internal links.

Front matter

yaml
---
title: QR Code
package: '@dile/utils'
element: '&lt;dile-qr-code&gt;'
status: stable
summary: Lightweight component to generate and render customizable QR codes on a canvas.
tags: utils
---
  • title: human name in Title Case, without the dile- prefix ("Input Money", "Select Ajax Overlay"). Used as the HTML <title>, card title and nav label.
  • package: quoted npm package ('@dile/ui', '@dile/utils', '@dile/crud', '@dile/editor', '@dile/lib').
  • element:
    • docs/components/: tag with escaped brackets, quoted: '&lt;dile-name&gt;' (it is printed inside HTML cards).
    • docs/crud/: bare tag name: dile-crud-list.
    • Mixins / lib: the class or mixin name: DileForm, DileAppRouter.
  • status: stable (default for finished components), experimental (new/unsettled API) or deprecated. Deprecated pages are excluded from catalog and nav collections.
  • summary: one sentence (~15–25 words) saying what it does and its key features. It is shown on the catalog card and in llms.txt, so make it self-explanatory.
  • tags: decides the catalog group and side-nav menu. Must match the lists in eleventy.config.cjs:
    • components: forms, feedback, icons, utils, menu, spinner, layout, or input (input family, shown through _includes/input-family-grid.html). Any other tag lands in "Other components".
    • crud: introduction, configuration, ajax, operations, main, 'Crud extras' (quote tags with spaces).
    • mixins: formData, effects, scroll.
    • lib: 'state management', routing, 'app components'.
    • icons: lucide, fontawesome, material, phosphor, tabler, remixicon, 'universal icons'.
  • Optional: order: <n> (crud/lib pages sorted manually), hideLink: true (keep the page out of nav listings).

If you introduce a brand new tag group, it must also be added to the corresponding list in eleventy.config.cjs (and an icon imported in docs/assets/js/index.js for component tags) — prefer reusing an existing tag.

Page structure (component pages)

Keep this order; omit sections that don't apply. Headings are in English, like all docs.

markdown
# dile-name

One or two sentences describing the Web Component and its purpose.

## Installation

```bash
npm i @dile/ui
```

## Usage

Import the component.

```javascript
import '@dile/ui/components/name/name.js';
```

Use the component.

```html
<dile-name attribute="value"></dile-name>
```

## Properties
## Methods
## Events
## Slots
## CSS Custom Properties
## Accessibility        (optional: keyboard support, ARIA, labels)

## dile-name demos

### Basic usage
```html:preview
...
```

### Styled
...

Notes:

  • The H1 is the tag name (# dile-name), or the class name for mixins (# DileForm).
  • The import path is the public entry point under the package: @dile/<pkg>/components/<folder>/<file>.js.
  • Feature-specific explanations (e.g. "Adding an icon", "Form Integration", "File downloads") go as extra ##/### sections after Usage/Properties and before the demos.
  • Use blockquotes (> **Note:** ...) for caveats and recommendations.
  • Link related components with absolute site paths: [dile-iconlib](/icons/dile-iconlib/).

Properties

Prefer the 4-column table for new pages. Tables whose header has 4 columns including "Property" plus Type/Default/Description get the properties-table class and a responsive mobile layout (docs/_utilities/properties-table-transform.cjs), so keep exactly these columns:

markdown
| Property | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `value` | `String` | `""` | The text encoded in the QR code. |
| `errorCorrection` | `String` | `"M"` | Error correction level. Exposed via `error-correction`. |
  • Use the JS property name; when the attribute differs (camelCase → kebab-case), say "Exposed via kebab-name" or "(attribute kebab-name)".
  • Older pages use a bullet list (- **disabled**: Boolean, mark button as disabled.). Keep that format when making small edits to such pages; don't mix both formats in one page.

Methods, Events, Slots

Bullet lists with the name in bold:

markdown
## Methods

- **open()**: Opens the modal box.
- **close()**: Closes the modal box.

## Events

- **dile-modal-closed**: Dispatched when the modal box is closed for any reason. `detail` contains ...

## Slots

- **main slot** (unnamed slot): the card main content.
- **footer slot**: card footer.

Always document the event detail shape. A short addEventListener snippet in a javascript block is welcome for non-trivial events.

CSS Custom Properties

Pipe table with exactly these three columns (no leading pipes, as in existing pages):

markdown
Custom property | Description | Default
----------------|-------------|---------
--dile-name-color | Text color | #303030
--dile-name-size | Component size | 32px

When a value falls back to generic theme variables, write the chain in Default (--dile-primary-color or #7BB93D). If the component reuses another component's properties, say so and link it. If it only has plain Shadow DOM styles, a "CSS Encapsulation"/"Styling" section with the :host CSS block is fine.

Live demos (html:preview)

Fenced blocks with the language html:preview are turned into a live render plus a "Show Code" toggle by docs/_utilities/code-previews.cjs. The code runs on the real page.

  • Import once per page. All preview blocks share window, so put <script type="module">import '@dile/ui/components/name/name.js';</script> only in the first preview of that component. Import again only for a different component not yet registered (e.g. icon glyphs @dile/iconlib/lucide-icons/rocket.js, @dile/ui/components/pages/pages.js).

  • Components already imported globally by docs/assets/js/index.js (button, input, modal, card, tabs, etc.) work without an import, but importing them in the first block is harmless and keeps the page self-contained.

  • Start with the simplest example (### Basic usage / ### Default), then one ### per relevant feature or property, then a ### Styled ... demo that sets CSS custom properties through a class:

    html
    <style>
      .styled {
        --dile-name-color: #36c;
      }
    </style>
    <dile-name class="styled"></dile-name>
  • Demos that need events or JS logic: define a small Lit element inside the preview's module script and render it. Give it a name unique within the page (demo-otp-completed, my-rating-demo...):

    html
    <script type="module">
      import { LitElement, html } from 'lit';
      import '@dile/ui/components/rating/rating.js';
    
      class RatingDemo extends LitElement {
        static properties = { value: { type: Number } };
        render() {
          return html`
            <dile-rating @dile-rating-selected=${e => this.value = e.detail.value}></dile-rating>
            <p>The rating is ${this.value ?? 0}</p>
          `;
        }
      }
      customElements.define('rating-demo', RatingDemo);
    </script>
    <rating-demo></rating-demo>
  • Classic (non-module) scripts are wrapped in an IIFE automatically, so they can't leak globals — use module scripts for imports.

  • Use plain inline styles (display: flex; gap: 1.5rem; flex-wrap: wrap;) to lay out several variants side by side.

  • Images: put files in docs/static-images/ and reference them as /images/<file>.

  • Every html:preview must be valid stand-alone HTML; don't nest Markdown inside.

  • CRUD pages reuse demo components through Liquid includes from docs/_includes/componentes-crud/ ({% include "componentes-crud/country-form.md" %}); create a new include there if a demo element is shared between several CRUD pages.

Deprecated components

Keep the page (old links keep working) but reduce it to:

markdown
---
title: Countdown Time
package: '@dile/ui'
element: '&lt;dile-countdown-time&gt;'
status: deprecated
summary: Component no longer maintained. Check previous version documentation if you need ...
---

# dile-countdown-time

The dile-countdown-time web component is no longer maintained in this version of the dile-components. ...

Writing style

  • English, concise and practical. Explain why/when to use a property, not just its type.
  • Code identifiers in backticks; property names in bold in bullet lists.
  • Don't invent API: everything documented must exist in the component source.
  • Keep docs, demo (demos/<pkg>/) and implementation in sync (see AGENTS.md for the full new-component checklist: demo file, demo index in alphabetical order, component test).

Checklist

  1. File in the right folder with the right name.
  2. Front matter complete: title, package, element, status, summary, tags (valid tag).
  3. Sections in order: H1 → intro → Installation → Usage → Properties → Methods → Events → Slots → CSS Custom Properties → (Accessibility) → ## dile-name demos.
  4. Properties table with Property | Type | Default | Description; attribute names mentioned when they differ.
  5. Component imported once in the first html:preview; every demo renders.
  6. Preview the site with npm start (Eleventy dev server) and check the page, its catalog card (/components/) and the nav entry.

Frequently asked questions

What does the Dile Docs Pages AI skill do?

Use when creating or updating a Markdown documentation page of the Dile Components Eleventy site under docs/ — especially component pages in docs/components/*.md, but also docs/crud, docs/mixins, docs/lib and docs/icons. Covers front matter, section order, properties/events/methods/slots/CSS custom properties formats and live html:preview demos.

Why use Dile Docs Pages on TypingMind?

Because you install it once and use it with any model. Dile Docs Pages is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Dile Docs Pages in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Polydile/dile-components/tree/master/.claude/skills/dile-docs-pages. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Dile Docs Pages?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Dile Docs Pages?

As many as you like. As long as a model supports skills, you can use Dile Docs Pages with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Dile Docs Pages AI skill free?

Yes. It is published on GitHub by Polydile under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇