markawesome-skill 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/LICENSE.txt +9 -0
- package/README.md +98 -0
- package/package.json +36 -0
- package/skills/markawesome/SKILL.md +112 -0
- package/skills/markawesome/references/authoring.md +116 -0
- package/skills/markawesome/references/components-content.md +258 -0
- package/skills/markawesome/references/components-interactive.md +240 -0
- package/skills/markawesome/references/components-media.md +175 -0
- package/skills/markawesome/references/examples.md +177 -0
- package/skills/markawesome/references/layouts.md +137 -0
- package/skills/markawesome/references/when-to-use.md +249 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `markawesome-skill` are documented here. The format is
|
|
4
|
+
based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
|
|
5
|
+
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.0] - 2026-07-05
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Initial release of the `markawesome` Agent Skill.
|
|
14
|
+
- `SKILL.md` routing body: what Markawesome is, the proactive behavioral
|
|
15
|
+
contract, a one-line "use when" roster for every component, the
|
|
16
|
+
progressive-disclosure index, and a companion-skills pointer to Web Awesome's
|
|
17
|
+
own `webawesome` / `webawesome-design` skills.
|
|
18
|
+
- Reference files under `skills/markawesome/references/`:
|
|
19
|
+
- `when-to-use.md` — content-pattern → component decision guide plus
|
|
20
|
+
anti-patterns.
|
|
21
|
+
- `components-content.md` — callout, card, tag, badge, button, copy button,
|
|
22
|
+
icon.
|
|
23
|
+
- `components-interactive.md` — details, accordion, tabs, dialog, popover,
|
|
24
|
+
tooltip, random content, tree.
|
|
25
|
+
- `components-media.md` — carousel, comparison, video, video playlist, format
|
|
26
|
+
date, relative time.
|
|
27
|
+
- `layouts.md` — grid, stack, cluster, split, flank, frame, the shared gap
|
|
28
|
+
scale, and nesting rules.
|
|
29
|
+
- `authoring.md` — dual syntax, Markdown-in-blocks, image/link auto-detection,
|
|
30
|
+
the `>>>` separator, the Web Awesome 3.10.0 pin, and static-safety / Pro
|
|
31
|
+
caveats.
|
|
32
|
+
- `examples.md` — generic full-page worked examples (landing page, docs
|
|
33
|
+
getting-started, changelog + FAQ).
|
|
34
|
+
- Distribution as an npm package (`files: ["skills", …]`) installable through the
|
|
35
|
+
`npx skills` CLI from GitHub or npm.
|
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Janne Warén
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# markawesome-skill
|
|
2
|
+
|
|
3
|
+
An [Agent Skill](https://docs.claude.com/en/docs/agents-and-tools/agent-skills)
|
|
4
|
+
that teaches an AI assistant to **author and review
|
|
5
|
+
[Markawesome](https://github.com/jannewaren/markawesome)-flavoured Markdown** —
|
|
6
|
+
the terse syntax (`:::`, `===`, `@@@`, `!!!`, `%%%`, `^^^`, `++++++`, `&&&`, …)
|
|
7
|
+
that the **markawesome** (Ruby) and **markawesome-js** (Node) engines transform
|
|
8
|
+
into [Web Awesome](https://webawesome.com/) web components.
|
|
9
|
+
|
|
10
|
+
It does two things:
|
|
11
|
+
|
|
12
|
+
1. **Recognizes opportunities proactively** — while you write or review Markdown,
|
|
13
|
+
it spots prose that would read better as a component and suggests it unprompted
|
|
14
|
+
("this warning should be a `:::danger` callout"; "these three features want a
|
|
15
|
+
`::::grid` of `===` cards").
|
|
16
|
+
2. **Writes the exact syntax** — every component's delimiter, attributes, and when
|
|
17
|
+
to reach for it, verified against both engines so it never emits syntax only
|
|
18
|
+
one accepts.
|
|
19
|
+
|
|
20
|
+
The skill is **pure Markdown knowledge** — no build step, and installing it needs
|
|
21
|
+
no clone of the Ruby or JS engine.
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
The skill installs with [`npx skills`](https://github.com/vercel-labs/skills) —
|
|
26
|
+
the same CLI Web Awesome ships their skill with.
|
|
27
|
+
|
|
28
|
+
### Recommended — one line, from GitHub
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx skills add jannewaren/markawesome-skill
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
No `npm install`, no engine clone. This symlinks the skill into each detected
|
|
35
|
+
agent's directory (`.claude/skills/markawesome`, `.agents/skills/markawesome`, …).
|
|
36
|
+
|
|
37
|
+
### From npm
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install markawesome-skill
|
|
41
|
+
npx skills experimental_sync # auto-discovers skills/markawesome/
|
|
42
|
+
# …or point at it explicitly:
|
|
43
|
+
npx skills add ./node_modules/markawesome-skill/skills/markawesome
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> **Reality check:** `npx skills` has **no npm-registry resolver**. A bare package
|
|
47
|
+
> name — `npx skills add markawesome-skill` — does **not** work: the CLI falls
|
|
48
|
+
> through to `git clone` and fails. The true one-liner is the **GitHub** form
|
|
49
|
+
> above; npm distribution is `install` + `experimental_sync` (or a path `add`).
|
|
50
|
+
|
|
51
|
+
## Companion skills
|
|
52
|
+
|
|
53
|
+
This is the **authoring layer** — which Markawesome Markdown to write, and when.
|
|
54
|
+
For the underlying `<wa-*>` component APIs and for page layout / theming / brand
|
|
55
|
+
color, also install Web Awesome's own skills:
|
|
56
|
+
|
|
57
|
+
- **`webawesome`** — the individual `<wa-*>` component APIs.
|
|
58
|
+
- **`webawesome-design`** — page layout, theming, and design tokens.
|
|
59
|
+
|
|
60
|
+
This skill deliberately does not duplicate their content.
|
|
61
|
+
|
|
62
|
+
## What's inside
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
skills/markawesome/
|
|
66
|
+
├── SKILL.md # routing body + the proactive "brain"
|
|
67
|
+
└── references/
|
|
68
|
+
├── when-to-use.md # content-pattern → component decision guide
|
|
69
|
+
├── components-content.md # callout, card, tag, badge, button, copy button, icon
|
|
70
|
+
├── components-interactive.md # details, accordion, tabs, dialog, popover, tooltip, random content, tree
|
|
71
|
+
├── components-media.md # carousel, comparison, video, playlist, format date, relative time
|
|
72
|
+
├── layouts.md # grid, stack, cluster, split, flank, frame
|
|
73
|
+
├── authoring.md # dual syntax, caveats, the WA 3.10.0 pin
|
|
74
|
+
└── examples.md # generic full-page worked examples
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## The Markawesome ecosystem
|
|
78
|
+
|
|
79
|
+
This skill is the **teaching layer** for a family of repositories that keep the
|
|
80
|
+
same Markdown dialect in lockstep:
|
|
81
|
+
|
|
82
|
+
| Repo | Role |
|
|
83
|
+
|------|------|
|
|
84
|
+
| [`markawesome`](https://github.com/jannewaren/markawesome) | Authors the syntax (Ruby engine) |
|
|
85
|
+
| [`markawesome-js`](https://github.com/jannewaren/markawesome-js) | Authors the syntax (Node engine) |
|
|
86
|
+
| [`jekyll-webawesome`](https://github.com/jannewaren/jekyll-webawesome) | Uses it (Jekyll integration) |
|
|
87
|
+
| [`eleventy-plugin-webawesome`](https://github.com/jannewaren/eleventy-plugin-webawesome) | Uses it (Eleventy integration) |
|
|
88
|
+
| [`markawesome-vscode`](https://github.com/jannewaren/markawesome-vscode) | Produces it (editor tooling) |
|
|
89
|
+
| **`markawesome-skill`** | **Teaches it (AI authoring skill)** |
|
|
90
|
+
|
|
91
|
+
Because the two engines accept byte-for-byte identical input, everything the skill
|
|
92
|
+
documents works in both the Ruby and Node worlds. See the
|
|
93
|
+
[live examples site](https://jannewaren.github.io/jekyll-webawesome/) to watch the
|
|
94
|
+
Markdown render into components side by side.
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
[MIT](LICENSE.txt) © Janne Warén
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "markawesome-skill",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AI authoring skill for Markawesome Markdown — proactively suggests and writes the terse syntax that markawesome / markawesome-js transform into Web Awesome components.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"markawesome",
|
|
7
|
+
"web-awesome",
|
|
8
|
+
"webawesome",
|
|
9
|
+
"markdown",
|
|
10
|
+
"web-components",
|
|
11
|
+
"agent-skills",
|
|
12
|
+
"skills"
|
|
13
|
+
],
|
|
14
|
+
"author": {
|
|
15
|
+
"name": "Janne Warén",
|
|
16
|
+
"email": "janne.waren@iki.fi"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/jannewaren/markawesome-skill.git"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/jannewaren/markawesome-skill",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/jannewaren/markawesome-skill/issues"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"skills",
|
|
29
|
+
"README.md",
|
|
30
|
+
"CHANGELOG.md",
|
|
31
|
+
"LICENSE.txt"
|
|
32
|
+
],
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: markawesome
|
|
3
|
+
description: >-
|
|
4
|
+
Authors and reviews Markawesome-flavoured Markdown — a terse syntax
|
|
5
|
+
(:::, ===, @@@, !!!, %%%, ^^^, ++++++, &&&, and more) that the markawesome
|
|
6
|
+
and markawesome-js engines transform into Web Awesome web components
|
|
7
|
+
(callouts, cards, tabs, accordions, tags, badges, buttons, tooltips,
|
|
8
|
+
carousels, and grid/stack/cluster/split/flank/frame layouts). Use when
|
|
9
|
+
writing, editing, or reviewing Markdown for a site built with markawesome,
|
|
10
|
+
markawesome-js, jekyll-webawesome, or eleventy-plugin-webawesome — and
|
|
11
|
+
proactively whenever plain prose would read better as a component (a warning
|
|
12
|
+
as a callout, a feature list as a card grid, alternatives as tabs, a glossary
|
|
13
|
+
term as a tooltip). Covers which component to reach for, when, and its exact
|
|
14
|
+
syntax.
|
|
15
|
+
license: MIT
|
|
16
|
+
metadata:
|
|
17
|
+
author: Janne Warén
|
|
18
|
+
version: "0.1.0"
|
|
19
|
+
homepage: https://github.com/jannewaren/markawesome-skill
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Markawesome authoring
|
|
23
|
+
|
|
24
|
+
Markawesome is a terse Markdown dialect that the **markawesome** (Ruby) and
|
|
25
|
+
**markawesome-js** (Node) engines transform into [Web Awesome](https://webawesome.com/)
|
|
26
|
+
web components. It powers the **jekyll-webawesome** and **eleventy-plugin-webawesome**
|
|
27
|
+
static-site integrations. Both engines accept **byte-for-byte identical** input,
|
|
28
|
+
so everything documented here works in either world.
|
|
29
|
+
|
|
30
|
+
## Behavioral contract (be proactive)
|
|
31
|
+
|
|
32
|
+
When writing, editing, or reviewing Markdown for one of these projects:
|
|
33
|
+
|
|
34
|
+
1. **Scan prose for component opportunities and act on them.** Don't wait to be
|
|
35
|
+
asked. A paragraph that warns wants a `:::warning` callout; a bulleted feature
|
|
36
|
+
list wants a `::::grid` of `===` cards; "on macOS… on Windows…" wants
|
|
37
|
+
`++++++` tabs; a copy-me command wants a `<<<` copy button; a defined term
|
|
38
|
+
wants a `(((term >>> definition)))` tooltip. Suggest the change and write it.
|
|
39
|
+
2. **Prefer terse Markawesome syntax over raw `<wa-*>` HTML.** If you would reach
|
|
40
|
+
for a Web Awesome web component, write the Markawesome delimiter instead. Drop
|
|
41
|
+
to raw HTML only for something Markawesome has no syntax for.
|
|
42
|
+
3. **Default to the primary shorthand delimiters** (`:::`, `===`, `@@@`, …). The
|
|
43
|
+
`:::wa-*` / `::::wa-*` alternative forms exist for readability or disambiguation;
|
|
44
|
+
reach for them only when the shorthand is ambiguous in context.
|
|
45
|
+
4. **Keep the Markdown valid.** Never break a table, list, or fenced code block.
|
|
46
|
+
Component syntax inside a fenced ``` block is **not** transformed (it is
|
|
47
|
+
protected), so use fences to show Markawesome examples literally.
|
|
48
|
+
5. **Never invent attributes.** Every delimiter, variant, size, and flag is
|
|
49
|
+
enumerated in the reference files. If it isn't listed there, an engine will
|
|
50
|
+
reject or ignore it — verify before you emit it.
|
|
51
|
+
|
|
52
|
+
## Component roster — recognize the opportunity
|
|
53
|
+
|
|
54
|
+
Each row is enough to *spot* a candidate without loading a reference. Load the
|
|
55
|
+
referenced file for exact attributes before writing anything non-trivial.
|
|
56
|
+
|
|
57
|
+
| Delimiter | Component | Reach for it when… | Reference |
|
|
58
|
+
|-----------|-----------|--------------------|-----------|
|
|
59
|
+
| `:::info` `:::success` `:::warning` `:::danger` `:::neutral` `:::brand` | Callout | highlighting a note, tip, prerequisite, warning, or error | components-content |
|
|
60
|
+
| `===` | Card | a self-contained unit (feature, product, link preview), esp. inside a grid | components-content |
|
|
61
|
+
| `@@@` | Tag | a status/category label — New, Beta, Deprecated, a topic (inline or block) | components-content |
|
|
62
|
+
| `!!!` | Badge | a compact count/status chip, often with `pulse`/`bounce` attention | components-content |
|
|
63
|
+
| `%%%` | Button | a call-to-action or link that should look like a button | components-content |
|
|
64
|
+
| `<<<` | Copy button | a command, URL, or config value users will copy-paste | components-content |
|
|
65
|
+
| `$$$name` / `:::wa-icon` | Icon | an inline decorative icon, or a labeled block icon | components-content |
|
|
66
|
+
| `^^^` | Details | one collapsible block of optional/advanced info | components-interactive |
|
|
67
|
+
| `//////` | Accordion | a *group* of collapsible sections — FAQ, doc sections | components-interactive |
|
|
68
|
+
| `++++++` | Tabs | switchable alternatives — multi-language code, per-OS steps, A/B | components-interactive |
|
|
69
|
+
| `???` | Dialog | long supplementary content hidden behind a trigger button | components-interactive |
|
|
70
|
+
| `&&&` | Popover | hover/click floating content (rich markdown block, or inline) | components-interactive |
|
|
71
|
+
| `(((` | Tooltip | an inline glossary term / short definition on hover | components-interactive |
|
|
72
|
+
| `......` | Random content | rotating tips/testimonials/featured content (zero-JS) | components-interactive |
|
|
73
|
+
| `\|\|\|\|\|\|` | Tree | a file/dir hierarchy or nested navigation from a bullet list | components-interactive |
|
|
74
|
+
| `~~~~~~` | Carousel | an image gallery or step-by-step visual slides | components-media |
|
|
75
|
+
| `\|\|\|` | Comparison | a before/after two-image slider | components-media |
|
|
76
|
+
| `;;;` / `;;;;;;` | Video / Playlist | embedded video(s) — Web Awesome **Pro** | components-media |
|
|
77
|
+
| `[[[…]]]` | Format date / Relative time | a localized absolute or "3 days ago" date | components-media |
|
|
78
|
+
| `::::grid` `::::stack` `::::cluster` `::::split` `::::flank` `::::frame` | Layouts | arranging the above (card grids, sidebars, tag clusters) | layouts |
|
|
79
|
+
|
|
80
|
+
## Where to read what
|
|
81
|
+
|
|
82
|
+
Load only what the task needs — the references are one level deep, each
|
|
83
|
+
self-contained:
|
|
84
|
+
|
|
85
|
+
- **`references/when-to-use.md`** — the decision guide: content shape → component,
|
|
86
|
+
why, a generic snippet, and the anti-patterns. Read this first when deciding
|
|
87
|
+
*whether* and *which*.
|
|
88
|
+
- **`references/components-content.md`** — callout, card, tag, badge, button,
|
|
89
|
+
copy button, icon.
|
|
90
|
+
- **`references/components-interactive.md`** — details, accordion, tabs, dialog,
|
|
91
|
+
popover, tooltip, random content, tree.
|
|
92
|
+
- **`references/components-media.md`** — carousel, comparison, video, video
|
|
93
|
+
playlist, format date, relative time.
|
|
94
|
+
- **`references/layouts.md`** — the six `::::` layouts, the shared gap scale,
|
|
95
|
+
`align`/`justify`, and nesting.
|
|
96
|
+
- **`references/authoring.md`** — dual syntax, Markdown-inside-blocks, image/link
|
|
97
|
+
auto-detection, the `>>>` separator, front matter, the Web Awesome 3.10.0 pin,
|
|
98
|
+
and static-safety / Pro caveats.
|
|
99
|
+
- **`references/examples.md`** — full generic pages combining many components.
|
|
100
|
+
|
|
101
|
+
## Companion skills
|
|
102
|
+
|
|
103
|
+
This is the **authoring layer** — which Markawesome Markdown to write, and when.
|
|
104
|
+
It does not document the underlying `<wa-*>` component APIs or page-level design.
|
|
105
|
+
For those, also install Web Awesome's own skills:
|
|
106
|
+
|
|
107
|
+
- **`webawesome`** — the individual `<wa-*>` component APIs (props, slots, events).
|
|
108
|
+
- **`webawesome-design`** — page layout, theming, design tokens, and brand color.
|
|
109
|
+
|
|
110
|
+
Reach for them when the work goes beyond emitting Markawesome Markdown (custom
|
|
111
|
+
component behavior, `<wa-page>` scaffolding, a theme). This skill deliberately
|
|
112
|
+
does not duplicate their content.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Authoring conventions & caveats
|
|
2
|
+
|
|
3
|
+
Cross-cutting rules that apply to every component. Read this once; it explains the
|
|
4
|
+
mechanics the per-component references assume.
|
|
5
|
+
|
|
6
|
+
## Dual syntax: primary shorthand vs. `:::wa-*` alternative
|
|
7
|
+
|
|
8
|
+
Every component accepts two equivalent spellings:
|
|
9
|
+
|
|
10
|
+
- **Primary** — the terse delimiter: `:::info`, `===`, `@@@brand`, `%%%`, `^^^`,
|
|
11
|
+
`//////`, `++++++`, `&&&`, `(((…)))`, `[[[…]]]`, `::::grid`.
|
|
12
|
+
- **Alternative** — an explicit `:::wa-component` (or `::::wa-layout`) form:
|
|
13
|
+
`:::wa-callout info`, `:::wa-card`, `:::wa-tag brand`, `::::wa-grid`.
|
|
14
|
+
|
|
15
|
+
**Default to the primary shorthand.** Reach for the `:::wa-*` form only when the
|
|
16
|
+
shorthand would be ambiguous or hard to read in context — for instance when a line
|
|
17
|
+
could be mistaken for something else, or when a reviewer benefits from the
|
|
18
|
+
component name spelled out. Both produce identical HTML; the choice is purely
|
|
19
|
+
readability.
|
|
20
|
+
|
|
21
|
+
## Markdown renders inside component bodies
|
|
22
|
+
|
|
23
|
+
The body of a component (a callout, a card, a tab panel, an accordion item, a
|
|
24
|
+
dialog, a details block) is **full Markdown** — headings, lists, links, emphasis,
|
|
25
|
+
inline code, even other components all work inside. Only the *inner* content of
|
|
26
|
+
components is rendered; the surrounding page Markdown is left for your site's own
|
|
27
|
+
Markdown processor.
|
|
28
|
+
|
|
29
|
+
Exceptions where the body is **plain text, not Markdown**:
|
|
30
|
+
|
|
31
|
+
- **Tooltip** tip content is plain text (HTML-escaped); `\n` becomes `<br>`.
|
|
32
|
+
- **Tree** labels are plain text (a leading `icon:name` token aside).
|
|
33
|
+
|
|
34
|
+
## The `>>>` separator
|
|
35
|
+
|
|
36
|
+
`>>>` on its own splits a **trigger from its body** inside these blocks:
|
|
37
|
+
|
|
38
|
+
- **Details** (`^^^`) — summary `>>>` content.
|
|
39
|
+
- **Dialog** (`???`) — trigger-button text `>>>` dialog content.
|
|
40
|
+
- **Popover** (`&&&`) — trigger `>>>` content (inline form too:
|
|
41
|
+
`&&&trigger >>> content&&&`).
|
|
42
|
+
- **Tooltip** (`(((…)))`) — anchor `>>>` tip.
|
|
43
|
+
- **Random content** (`......`) — separates each option from the next.
|
|
44
|
+
|
|
45
|
+
It only has meaning **inside** one of those blocks. Elsewhere `>` is an ordinary
|
|
46
|
+
Markdown blockquote.
|
|
47
|
+
|
|
48
|
+
## Image & link auto-detection in cards
|
|
49
|
+
|
|
50
|
+
A card (`===`) reads its body positionally — you don't name slots:
|
|
51
|
+
|
|
52
|
+
- First **Markdown image** → the media slot.
|
|
53
|
+
- First **bold line** (`**Title**`, *not* a `#` heading) → the header slot.
|
|
54
|
+
- A **trailing Markdown link** on its own line → a footer button.
|
|
55
|
+
- Everything else → the body.
|
|
56
|
+
|
|
57
|
+
Buttons (`%%%`) and videos (`;;;`) similarly pick up a Markdown link in their body
|
|
58
|
+
to become clickable / sourced. See the per-component references for specifics.
|
|
59
|
+
|
|
60
|
+
## Code fences are protected
|
|
61
|
+
|
|
62
|
+
Anything inside a fenced ``` code block is **not** transformed — the engines
|
|
63
|
+
replace fenced blocks with placeholders before running, then restore them. So to
|
|
64
|
+
show Markawesome syntax literally in documentation, put it in a fenced block (as
|
|
65
|
+
this skill's references do). Inline code (`` `like this` ``) is likewise safe.
|
|
66
|
+
|
|
67
|
+
## Front matter is SSG-specific
|
|
68
|
+
|
|
69
|
+
Markawesome transforms the Markdown **body**, not the YAML front matter. How front
|
|
70
|
+
matter works — permalinks, layouts, collections, data — is defined by your static
|
|
71
|
+
site generator, not by Markawesome:
|
|
72
|
+
|
|
73
|
+
- **Jekyll** (via `jekyll-webawesome`) — Jekyll/Liquid front matter and layouts.
|
|
74
|
+
- **Eleventy** (via `eleventy-plugin-webawesome`) — Eleventy front matter and
|
|
75
|
+
templating.
|
|
76
|
+
|
|
77
|
+
Author the component syntax in the body; leave front-matter conventions to the
|
|
78
|
+
host SSG's own docs.
|
|
79
|
+
|
|
80
|
+
## Web Awesome version pin: 3.10.0
|
|
81
|
+
|
|
82
|
+
The ecosystem's examples sites pin **Web Awesome 3.10.0** in their CDN URLs, and
|
|
83
|
+
this skill's attribute vocabulary (icon families, animations, the `xs–xl` size
|
|
84
|
+
scale, canvas sizing) matches that release. If a project pins a different Web
|
|
85
|
+
Awesome version, some newer families/animations may not exist there — validate
|
|
86
|
+
against the version the site actually loads.
|
|
87
|
+
|
|
88
|
+
## Static-safety & Pro caveats
|
|
89
|
+
|
|
90
|
+
Most components are **declarative and static-site-safe** — they render correctly
|
|
91
|
+
with only the Web Awesome library on the page and no JavaScript of your own.
|
|
92
|
+
Know the exceptions:
|
|
93
|
+
|
|
94
|
+
- **Web Awesome Pro required:** Video (`;;;`) and Video playlist (`;;;;;;`) emit
|
|
95
|
+
`<wa-video>` / `<wa-video-playlist>`, which are Pro (and experimental). They do
|
|
96
|
+
nothing on a free kit.
|
|
97
|
+
- **No light-DOM fallback (needs Web Awesome's JS to show anything):** Icon
|
|
98
|
+
(`$$$` / `:::wa-icon`), Format date (`[[[…]]]`), and Relative time
|
|
99
|
+
(`[[[relative …]]]`) render generated content into shadow DOM. With Web
|
|
100
|
+
Awesome's JavaScript disabled they show nothing.
|
|
101
|
+
- **Fires an event but doesn't act on its own:** a Tag's `with-remove` × button
|
|
102
|
+
fires `wa-remove` but doesn't remove the tag without your listener.
|
|
103
|
+
- **Declarative-safe but note the runtime quirk:** Tree (`||||||`) expands only
|
|
104
|
+
top-level branches on load (WA 3.9.0); Random content (`......`) and Accordion
|
|
105
|
+
(`//////`) are experimental in Web Awesome but fully declarative here.
|
|
106
|
+
|
|
107
|
+
When a page must work with scripting disabled, prefer the declarative-safe
|
|
108
|
+
components and avoid the shadow-DOM-only ones for essential content.
|
|
109
|
+
|
|
110
|
+
## The lockstep guarantee
|
|
111
|
+
|
|
112
|
+
The **markawesome** (Ruby) and **markawesome-js** (Node) engines accept
|
|
113
|
+
byte-for-byte identical input. Everything in these references works in both, so a
|
|
114
|
+
document authored for a Jekyll site transforms identically on an Eleventy site.
|
|
115
|
+
Never emit a delimiter or attribute that only one engine supports — if it isn't in
|
|
116
|
+
these references, don't use it.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Content components
|
|
2
|
+
|
|
3
|
+
Callout · Card · Tag · Badge · Button · Copy button · Icon
|
|
4
|
+
|
|
5
|
+
Every component has a **primary** shorthand delimiter and an equivalent
|
|
6
|
+
**`:::wa-*` alternative**. All attributes are optional and order-independent
|
|
7
|
+
(rightmost wins on conflict). Inner content is full Markdown. Unknown tokens are
|
|
8
|
+
silently dropped, so a mistyped variant simply vanishes — spell them exactly.
|
|
9
|
+
|
|
10
|
+
## Callout
|
|
11
|
+
|
|
12
|
+
Draw attention to elevated information with a colored, icon-led block.
|
|
13
|
+
|
|
14
|
+
- **Primary:** `:::type size? appearance? family? variant? animation? icon:name?`
|
|
15
|
+
- **Alt:** `:::wa-callout type size? appearance? family? variant? animation? icon:name?`
|
|
16
|
+
- Close with `:::`.
|
|
17
|
+
|
|
18
|
+
**Types** (the first token; sets color + default icon):
|
|
19
|
+
|
|
20
|
+
| Type | Color | Default icon | Use for |
|
|
21
|
+
|------|-------|--------------|---------|
|
|
22
|
+
| `info` / `brand` | blue | `circle-info` | notes, tips (`info` is an alias for `brand`) |
|
|
23
|
+
| `success` | green | `circle-check` | confirmations, "done" states |
|
|
24
|
+
| `warning` | yellow | `triangle-exclamation` | things that need care |
|
|
25
|
+
| `danger` | red | `circle-exclamation` | data loss, errors, destructive actions |
|
|
26
|
+
| `neutral` | gray | `gear` | low-key asides |
|
|
27
|
+
|
|
28
|
+
**Sizes:** `xs`, `s`, `m`, `l`, `xl` (Web Awesome 3.x five-step scale) plus the
|
|
29
|
+
legacy `small` / `medium` / `large` aliases.
|
|
30
|
+
|
|
31
|
+
**Appearances:** `accent`, `filled`, `outlined`, `plain`, `filled-outlined`.
|
|
32
|
+
|
|
33
|
+
**Icon overrides** (the callout's leading icon):
|
|
34
|
+
|
|
35
|
+
- `icon:name` — swap the icon glyph (e.g. `icon:rocket`, `icon:shield`).
|
|
36
|
+
- `family` — icon family: `classic`, `sharp`, `duotone`, `sharp-duotone`,
|
|
37
|
+
`brands`, plus the WA 3.10.0 families `mosaic`, `pixel`, `vellum`, `slab-duo`,
|
|
38
|
+
`slab-press-duo`, `chisel`, `etch`, `graphite`, `jelly`, `jelly-duo`,
|
|
39
|
+
`jelly-fill`, `notdog`, `notdog-duo`, `slab`, `slab-press`, `thumbprint`,
|
|
40
|
+
`utility`, `utility-duo`, `utility-fill`, `whiteboard`.
|
|
41
|
+
- `variant` — Font Awesome weight: `thin`, `light`, `regular`, `solid`,
|
|
42
|
+
`semibold`.
|
|
43
|
+
- `animation` — `beat`, `fade`, `beat-fade`, `bounce`, `flip`, `shake`, `spin`,
|
|
44
|
+
`spin-pulse`, `spin-reverse`, plus WA 3.10.0's `flip-360`, `spin-snap`,
|
|
45
|
+
`spin-snap-4`, `spin-snap-8`, `buzz`, `float`, `jello`, `swing`, `wag`.
|
|
46
|
+
Animation needs no Pro kit — e.g. `:::warning shake`.
|
|
47
|
+
- `canvas` — icon sizing box: `fixed` (default), `auto`, `square`, `roomy`.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
:::success l icon:trophy
|
|
51
|
+
**Deploy succeeded.** Your site is live at the production URL.
|
|
52
|
+
:::
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
:::warning shake
|
|
57
|
+
This warning's icon animates. Family/variant glyph changes depend on your
|
|
58
|
+
Font Awesome kit tier; animation and canvas work with any kit.
|
|
59
|
+
:::
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Card
|
|
63
|
+
|
|
64
|
+
A flexible container with optional media, header, body, and footer slots — the
|
|
65
|
+
building block of a `::::grid`.
|
|
66
|
+
|
|
67
|
+
- **Primary:** `===appearance? orientation?`
|
|
68
|
+
- **Alt:** `:::wa-card appearance? orientation?`
|
|
69
|
+
- Close with `===`.
|
|
70
|
+
|
|
71
|
+
**Appearances:** `outlined` (default), `filled`, `filled-outlined`, `plain`,
|
|
72
|
+
`accent`. **Orientation:** `vertical` (default), `horizontal` (media and content
|
|
73
|
+
side by side).
|
|
74
|
+
|
|
75
|
+
**Composition is auto-detected from the body** (this is the part people get
|
|
76
|
+
wrong):
|
|
77
|
+
|
|
78
|
+
- The **first Markdown image** `` becomes the **media** slot.
|
|
79
|
+
- The **first bold line** `**Title**` becomes the **header** slot. (It must be a
|
|
80
|
+
bold line on its own — *not* a `#` heading.)
|
|
81
|
+
- A **trailing Markdown link** on its own line becomes a **footer** button.
|
|
82
|
+
- Everything else is the body.
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
===
|
|
86
|
+

|
|
87
|
+
**Analytics**
|
|
88
|
+
Track visits, referrers, and conversions in real time.
|
|
89
|
+
[Learn more](/docs/analytics)
|
|
90
|
+
===
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
===horizontal accent
|
|
95
|
+
**Horizontal card**
|
|
96
|
+
Media and content sit side by side.
|
|
97
|
+
===
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Tag
|
|
101
|
+
|
|
102
|
+
A small colored label for a category or status. Works **inline** in a sentence or
|
|
103
|
+
as a **block**.
|
|
104
|
+
|
|
105
|
+
- **Primary:** `@@@variant? appearance? size? pill? with-remove? icon:name?`
|
|
106
|
+
- **Alt:** `:::wa-tag variant? appearance? size? pill? with-remove? icon:name?`
|
|
107
|
+
- Inline form opens and closes on one line: `@@@variant Label @@@`.
|
|
108
|
+
|
|
109
|
+
**Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
|
|
110
|
+
**Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`.
|
|
111
|
+
**Sizes:** `xs`, `s`, `m`, `l`, `xl` plus legacy `small` / `medium` / `large`.
|
|
112
|
+
**Flags:** `pill` (rounded), `with-remove` (adds a × button).
|
|
113
|
+
**Icon:** `icon:name` places an icon inside the tag.
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
The @@@success icon:check Stable @@@ API and the @@@warning Beta @@@ API differ.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
@@@brand pill icon:star
|
|
121
|
+
Featured
|
|
122
|
+
@@@
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
> **`with-remove` caveat:** the × button only *fires* a `wa-remove` event — Web
|
|
126
|
+
> Awesome does not remove the tag for you. On a page with no JavaScript beyond
|
|
127
|
+
> the Web Awesome library it is inert. Add your own `wa-remove` listener to make
|
|
128
|
+
> it functional. The markup is valid either way.
|
|
129
|
+
|
|
130
|
+
## Badge
|
|
131
|
+
|
|
132
|
+
A compact count/status chip, often used to grab attention.
|
|
133
|
+
|
|
134
|
+
- **Primary:** `!!!variant? appearance? attention? pill?`
|
|
135
|
+
- **Alt:** `:::wa-badge variant? appearance? attention? pill?`
|
|
136
|
+
- Close with `!!!`.
|
|
137
|
+
|
|
138
|
+
**Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
|
|
139
|
+
**Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`.
|
|
140
|
+
**Attention:** `none`, `pulse`, `bounce`. **Flags:** `pill`.
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
!!!brand pulse
|
|
144
|
+
New
|
|
145
|
+
!!!
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Tag vs. badge: reach for a **tag** for a category/status label in flowing content,
|
|
149
|
+
a **badge** for a small attention-grabbing count or "new" marker (badges carry
|
|
150
|
+
the `pulse`/`bounce` animations).
|
|
151
|
+
|
|
152
|
+
## Button
|
|
153
|
+
|
|
154
|
+
A styled button — a link when it wraps a Markdown link, a plain button otherwise.
|
|
155
|
+
|
|
156
|
+
- **Primary:** `%%%variant? appearance? size? pill? caret? loading? disabled? target? download? icon:name? icon:end:name?`
|
|
157
|
+
- **Alt:** `:::wa-button variant? appearance? size? pill? caret? loading? disabled? …`
|
|
158
|
+
- Close with `%%%`.
|
|
159
|
+
|
|
160
|
+
**Variants:** `brand`, `success`, `neutral`, `warning`, `danger`.
|
|
161
|
+
**Appearances:** `accent`, `filled`, `outlined`, `filled-outlined`, `plain`.
|
|
162
|
+
**Sizes:** `xs`, `s`, `m`, `l`, `xl` plus legacy `small` / `medium` / `large`.
|
|
163
|
+
**Flags:** `pill`, `caret` (dropdown indicator), `loading`, `disabled`.
|
|
164
|
+
|
|
165
|
+
**Link behavior** (link-form buttons only — the body holds a Markdown link).
|
|
166
|
+
These are **bare tokens**, not `key=value` pairs:
|
|
167
|
+
|
|
168
|
+
- `_blank`, `_self`, `_parent`, `_top` set the anchor target; `_blank` also adds
|
|
169
|
+
`rel="noopener noreferrer"` automatically.
|
|
170
|
+
- `download` makes the link download its target instead of navigating.
|
|
171
|
+
|
|
172
|
+
**Icons:** `icon:name` for a start icon, `icon:end:name` for an end icon (or the
|
|
173
|
+
explicit `icon:start:name`); combine both.
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
%%%brand icon:rocket
|
|
177
|
+
[Get started](https://example.com/start)
|
|
178
|
+
%%%
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
%%%neutral outlined icon:end:arrow-right _blank
|
|
183
|
+
[Read the docs](https://example.com/docs)
|
|
184
|
+
%%%
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
%%%success download
|
|
189
|
+
[Download sample](/files/sample.zip)
|
|
190
|
+
%%%
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Copy button
|
|
194
|
+
|
|
195
|
+
A button that copies text to the clipboard — attach it to any command, URL, or
|
|
196
|
+
value the reader will copy. The display supports Markdown while the copied text
|
|
197
|
+
stays raw.
|
|
198
|
+
|
|
199
|
+
- **Primary:** `<<<placement? tooltip:full|copy|none? duration? disabled? copy-label? success-label? error-label? from?`
|
|
200
|
+
- **Alt:** `:::wa-copy-button placement? tooltip:full|copy|none? …`
|
|
201
|
+
- Close with `<<<`.
|
|
202
|
+
|
|
203
|
+
**Tooltip placement:** `top` (default), `right`, `bottom`, `left`.
|
|
204
|
+
**Tooltip mode:** `tooltip:full` (default — hover/focus + copy feedback),
|
|
205
|
+
`tooltip:copy` (feedback only), `tooltip:none` (no tooltip).
|
|
206
|
+
**Feedback duration:** a bare number is the success-message duration in ms
|
|
207
|
+
(e.g. `2000`).
|
|
208
|
+
**Custom labels:** `copy-label="…"`, `success-label="…"`, `error-label="…"`.
|
|
209
|
+
**Copy from another element:** `from="element-id"` (also `from="input.value"`,
|
|
210
|
+
`from="link[href]"`). **Flags:** `disabled`.
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
<<<top copy-label="Copy install command"
|
|
214
|
+
npm install markawesome-js
|
|
215
|
+
<<<
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Icon
|
|
219
|
+
|
|
220
|
+
A standalone Web Awesome `<wa-icon>` — inline and decorative, or a labeled block.
|
|
221
|
+
|
|
222
|
+
- **Inline** `$$$name` — name only, decorative, no attributes; use mid-prose:
|
|
223
|
+
`Click the $$$gear icon.`
|
|
224
|
+
- **Block** `:::wa-icon name family? variant? animation? canvas?` — the first
|
|
225
|
+
token is the icon name; the rest are optional, order-independent attributes. A
|
|
226
|
+
non-empty block body becomes the icon's accessible `label`; an empty body
|
|
227
|
+
leaves it presentational. Close with `:::`.
|
|
228
|
+
|
|
229
|
+
**Icon attributes** (same vocabulary as the callout icon overrides):
|
|
230
|
+
|
|
231
|
+
- **family** — `classic`, `sharp`, `duotone`, `sharp-duotone`, `brands`, plus the
|
|
232
|
+
WA 3.10.0 families (`mosaic`, `pixel`, `vellum`, `slab-duo`, `slab-press-duo`,
|
|
233
|
+
`chisel`, `etch`, `graphite`, `jelly`, `jelly-duo`, `jelly-fill`, `notdog`,
|
|
234
|
+
`notdog-duo`, `slab`, `slab-press`, `thumbprint`, `utility`, `utility-duo`,
|
|
235
|
+
`utility-fill`, `whiteboard`).
|
|
236
|
+
- **variant** (Font Awesome weight) — `thin`, `light`, `regular`, `solid`,
|
|
237
|
+
`semibold`.
|
|
238
|
+
- **animation** — `beat`, `fade`, `beat-fade`, `bounce`, `flip`, `shake`, `spin`,
|
|
239
|
+
`spin-pulse`, `spin-reverse`, `flip-360`, `spin-snap`, `spin-snap-4`,
|
|
240
|
+
`spin-snap-8`, `buzz`, `float`, `jello`, `swing`, `wag`.
|
|
241
|
+
- **canvas** (sizing box) — `fixed` (default), `auto`, `square`, `roomy`.
|
|
242
|
+
|
|
243
|
+
Animation and canvas work with any kit; family/variant glyph changes depend on
|
|
244
|
+
the kit's Font Awesome tier.
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
Enable it under the $$$gear Settings menu.
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
:::wa-icon bell shake
|
|
252
|
+
Notifications
|
|
253
|
+
:::
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
> **Static-site caveat:** an icon renders its glyph into shadow DOM with no
|
|
257
|
+
> light-DOM fallback — with Web Awesome's JavaScript disabled it shows nothing.
|
|
258
|
+
> See `authoring.md`.
|