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
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Layouts
|
|
2
|
+
|
|
3
|
+
Grid · Stack · Cluster · Split · Flank · Frame
|
|
4
|
+
|
|
5
|
+
Layouts use the `::::` (**quadruple colon**) fence and map to Web Awesome CSS
|
|
6
|
+
utility containers (`<div class="wa-grid">`, etc.). They **wrap** components —
|
|
7
|
+
put cards, callouts, tags inside a layout; never put a layout inside a component.
|
|
8
|
+
Inner content is passed through untouched, so component `:::`/`===`/`@@@` syntax
|
|
9
|
+
inside a layout transforms normally.
|
|
10
|
+
|
|
11
|
+
- **Primary:** `::::type params?` … `::::`
|
|
12
|
+
- **Alt:** `::::wa-type params?` … `::::`
|
|
13
|
+
|
|
14
|
+
## Shared attributes (all six layouts)
|
|
15
|
+
|
|
16
|
+
- **`gap:SIZE`** — spacing between items. Scale: `0`, `3xs`, `2xs`, `xs`, `s`,
|
|
17
|
+
`m`, `l`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`.
|
|
18
|
+
- **`align:VALUE`** — align items: `start`, `end`, `center`, `stretch`,
|
|
19
|
+
`baseline`.
|
|
20
|
+
- **`justify:VALUE`** — justify content: `start`, `end`, `center`,
|
|
21
|
+
`space-between`, `space-around`, `space-evenly`.
|
|
22
|
+
|
|
23
|
+
Unknown gap/align/justify values are dropped, so a typo just has no effect.
|
|
24
|
+
|
|
25
|
+
## Grid
|
|
26
|
+
|
|
27
|
+
A responsive auto-wrapping grid — no media queries. The default layout for a
|
|
28
|
+
*set* of cards.
|
|
29
|
+
|
|
30
|
+
- **Extra attribute:** `min:CSS` — minimum column size before wrapping (e.g.
|
|
31
|
+
`min:300px`, `min:20ch`, `min:15rem`).
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
::::grid gap:l min:16rem
|
|
35
|
+
===
|
|
36
|
+
**Fast**
|
|
37
|
+
Sub-second builds.
|
|
38
|
+
===
|
|
39
|
+
|
|
40
|
+
===
|
|
41
|
+
**Themeable**
|
|
42
|
+
Restyle with design tokens.
|
|
43
|
+
===
|
|
44
|
+
|
|
45
|
+
===
|
|
46
|
+
**Portable**
|
|
47
|
+
Works with any static site generator.
|
|
48
|
+
===
|
|
49
|
+
::::
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Stack
|
|
53
|
+
|
|
54
|
+
A vertical stack with consistent spacing — use it to give a run of blocks even
|
|
55
|
+
rhythm.
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
::::stack gap:m
|
|
59
|
+
:::info
|
|
60
|
+
First note.
|
|
61
|
+
:::
|
|
62
|
+
|
|
63
|
+
:::success
|
|
64
|
+
Second note.
|
|
65
|
+
:::
|
|
66
|
+
::::
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Cluster
|
|
70
|
+
|
|
71
|
+
Inline items that wrap — perfect for a tag cloud, a button row, or an icon list.
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
::::cluster gap:xs
|
|
75
|
+
@@@brand Ruby @@@ @@@success Jekyll @@@ @@@neutral Markdown @@@ @@@warning Beta @@@
|
|
76
|
+
::::
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Split
|
|
80
|
+
|
|
81
|
+
Distributes items to opposite ends — the classic header / footer / nav-bar
|
|
82
|
+
pattern.
|
|
83
|
+
|
|
84
|
+
- **Extra modifiers:** `row` (horizontal, default) or `column` (vertical).
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
::::split
|
|
88
|
+
**© 2026 Example, Inc.**
|
|
89
|
+
|
|
90
|
+
[Privacy](/privacy) | [Terms](/terms)
|
|
91
|
+
::::
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Flank
|
|
95
|
+
|
|
96
|
+
A sidebar beside main content; the flank wraps below on small screens.
|
|
97
|
+
|
|
98
|
+
- **Modifiers:** `start` (flank on the start side, default) or `end`.
|
|
99
|
+
- **Extra attributes:** `size:CSS` (flank size, e.g. `size:200px`, `size:15rem`),
|
|
100
|
+
`content:PCT` (minimum content width, e.g. `content:70%`).
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
::::flank start size:220px gap:l
|
|
104
|
+

|
|
105
|
+
|
|
106
|
+
## About the author
|
|
107
|
+
A short bio goes here, beside the portrait.
|
|
108
|
+
::::
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Frame
|
|
112
|
+
|
|
113
|
+
An aspect-ratio container for images and media.
|
|
114
|
+
|
|
115
|
+
- **Modifiers:** `landscape` (16:9), `portrait` (9:16), `square` (1:1).
|
|
116
|
+
- **Extra attribute:** `radius:SIZE` — `s`, `m`, `l`, `pill`, `circle`, `square`.
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
::::frame landscape radius:l
|
|
120
|
+
<img src="/img/hero.jpg" alt="Product hero">
|
|
121
|
+
::::
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
> **Frame + images:** use a raw `<img>` tag inside a frame. Markdown image syntax
|
|
125
|
+
> may not be processed inside layout containers, so `` can fail to
|
|
126
|
+
> render there — this is the one place to drop to HTML. Elsewhere, Markdown
|
|
127
|
+
> images work normally.
|
|
128
|
+
|
|
129
|
+
## Nesting
|
|
130
|
+
|
|
131
|
+
- Components nest **inside** layouts: a `::::grid` of `===` cards, a `::::cluster`
|
|
132
|
+
of `@@@` tags, a `::::stack` of `:::` callouts.
|
|
133
|
+
- Layouts may nest inside layouts when it genuinely helps (a `::::split` header
|
|
134
|
+
above a `::::grid` body), but keep it shallow — deep nesting is hard to read and
|
|
135
|
+
rarely necessary.
|
|
136
|
+
- Do **not** nest a layout inside a component body (no `::::grid` inside a `===`
|
|
137
|
+
card). Component bodies hold prose and inline components, not block layouts.
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# When to use what — the decision guide
|
|
2
|
+
|
|
3
|
+
This is the proactive core. Match the **shape of the content** in front of you to
|
|
4
|
+
a component, reach for it, and write it. Every snippet below is generic — swap in
|
|
5
|
+
the real content. For exact attributes, open the linked component reference.
|
|
6
|
+
|
|
7
|
+
## Content shape → component
|
|
8
|
+
|
|
9
|
+
### A paragraph that warns, cautions, or flags a prerequisite → Callout
|
|
10
|
+
|
|
11
|
+
Prose like "Note that…", "Be careful…", "You must first…", "This will delete…"
|
|
12
|
+
is a callout. Pick the type by severity:
|
|
13
|
+
|
|
14
|
+
- `:::info` / `:::brand` — a neutral note or tip.
|
|
15
|
+
- `:::success` — a confirmation, a "you're done" state.
|
|
16
|
+
- `:::warning` — something that can go wrong or needs care.
|
|
17
|
+
- `:::danger` — data loss, irreversible or destructive actions, errors.
|
|
18
|
+
- `:::neutral` — a low-key aside.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
:::warning
|
|
22
|
+
Rotating your API key invalidates every existing token immediately. Update your
|
|
23
|
+
deployed services before rotating.
|
|
24
|
+
:::
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
→ `components-content.md`. Don't turn *every* sentence into a callout — reserve
|
|
28
|
+
them for genuinely elevated information (see anti-patterns).
|
|
29
|
+
|
|
30
|
+
### A bulleted list where each item is a self-contained unit → Card grid
|
|
31
|
+
|
|
32
|
+
Three features, three pricing tiers, three linked resources — each with a title
|
|
33
|
+
and a sentence or two — read far better as cards in a responsive grid than as a
|
|
34
|
+
bullet list.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
::::grid gap:l min:16rem
|
|
38
|
+
===
|
|
39
|
+
**Fast**
|
|
40
|
+
Zero-config, sub-second builds.
|
|
41
|
+
===
|
|
42
|
+
|
|
43
|
+
===
|
|
44
|
+
**Framework-agnostic**
|
|
45
|
+
Works with any static site generator.
|
|
46
|
+
===
|
|
47
|
+
|
|
48
|
+
===
|
|
49
|
+
**Themeable**
|
|
50
|
+
Restyle everything with design tokens.
|
|
51
|
+
===
|
|
52
|
+
::::
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
→ `layouts.md` (grid) + `components-content.md` (card). One card alone is fine
|
|
56
|
+
too; the grid is what makes a *set* of them shine.
|
|
57
|
+
|
|
58
|
+
### "On macOS… / On Windows…", or the same thing in several languages → Tabs
|
|
59
|
+
|
|
60
|
+
Parallel alternatives where the reader wants **one** of them — per-OS install
|
|
61
|
+
steps, the same API call in curl / JS / Python, an A/B choice — are tabs.
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
++++++
|
|
65
|
+
+++ macOS
|
|
66
|
+
`brew install example`
|
|
67
|
+
+++
|
|
68
|
+
+++ Windows
|
|
69
|
+
`winget install example`
|
|
70
|
+
+++
|
|
71
|
+
++++++
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
→ `components-interactive.md`. If the alternatives are meant to be read
|
|
75
|
+
*together* (a comparison), use a table or a `::::grid` instead.
|
|
76
|
+
|
|
77
|
+
### A list of question → answer pairs → Accordion
|
|
78
|
+
|
|
79
|
+
An FAQ, a set of collapsible doc sections, "common problems" — a *group* of
|
|
80
|
+
headers that expand — is an accordion. (One lone collapsible block is Details,
|
|
81
|
+
below.)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
//////single
|
|
85
|
+
/// Is it free?
|
|
86
|
+
The core library is free and open source.
|
|
87
|
+
///
|
|
88
|
+
/// Does it need a build step?
|
|
89
|
+
No — it runs at your site's build time.
|
|
90
|
+
///
|
|
91
|
+
//////
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
→ `components-interactive.md`.
|
|
95
|
+
|
|
96
|
+
### One block of optional / advanced / "click for details" content → Details
|
|
97
|
+
|
|
98
|
+
A single spoiler, an advanced-config aside, a long stack trace you don't want
|
|
99
|
+
inline — one collapsible section — is Details, not an accordion.
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
^^^
|
|
103
|
+
Show the full configuration
|
|
104
|
+
>>>
|
|
105
|
+
```yaml
|
|
106
|
+
verbose: true
|
|
107
|
+
retries: 5
|
|
108
|
+
```
|
|
109
|
+
^^^
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
→ `components-interactive.md`.
|
|
113
|
+
|
|
114
|
+
### A term that needs a short definition → Tooltip
|
|
115
|
+
|
|
116
|
+
A jargon word, an acronym, a field whose format needs explaining — anything where
|
|
117
|
+
you'd otherwise write "(i.e., …)" — is an inline tooltip.
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
Styled with (((CSS >>> Cascading Style Sheets))) and shipped as one file.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
→ `components-interactive.md`. For a *rich* floating block (markdown, links) on
|
|
124
|
+
hover, use a Popover instead.
|
|
125
|
+
|
|
126
|
+
### A command, URL, token, or config value the reader will copy → Copy button
|
|
127
|
+
|
|
128
|
+
Anything a reader will select-and-copy — an install command, a connection string,
|
|
129
|
+
an API endpoint — should carry a copy button so they don't have to hand-select.
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
<<<
|
|
133
|
+
npm install markawesome-js
|
|
134
|
+
<<<
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
→ `components-content.md`.
|
|
138
|
+
|
|
139
|
+
### A status or category label inline in prose or a heading → Tag or Badge
|
|
140
|
+
|
|
141
|
+
- **Tag** (`@@@`) — a category/status label with a variant color: `New`, `Beta`,
|
|
142
|
+
`Deprecated`, a topic. Works inline mid-sentence or as a block.
|
|
143
|
+
- **Badge** (`!!!`) — a compact count or status chip, often demanding attention
|
|
144
|
+
with `pulse` / `bounce` (a notification count, a "3 new" marker).
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
The @@@warning Deprecated @@@ endpoint is removed in v2.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
→ `components-content.md`.
|
|
151
|
+
|
|
152
|
+
### A call to action or a link that should look like a button → Button
|
|
153
|
+
|
|
154
|
+
"Get started", "Download", "View docs" — a prominent link — is a button. Include
|
|
155
|
+
a markdown link to make it navigate; omit it for a plain (JS-wired) button.
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
%%%brand
|
|
159
|
+
[Get started](https://example.com/start)
|
|
160
|
+
%%%
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
→ `components-content.md`.
|
|
164
|
+
|
|
165
|
+
### A before/after pair of images → Comparison
|
|
166
|
+
|
|
167
|
+
A redesign, a filter on/off, an edit diff — two images the reader drags between —
|
|
168
|
+
is a comparison slider.
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
|||
|
|
172
|
+

|
|
173
|
+

|
|
174
|
+
|||
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
→ `components-media.md`.
|
|
178
|
+
|
|
179
|
+
### A gallery or sequential visual steps → Carousel
|
|
180
|
+
|
|
181
|
+
Multiple images or slides the reader pages through — a screenshot gallery, a
|
|
182
|
+
step-by-step walkthrough — is a carousel.
|
|
183
|
+
|
|
184
|
+
→ `components-media.md`.
|
|
185
|
+
|
|
186
|
+
### A file/directory layout or nested hierarchy → Tree
|
|
187
|
+
|
|
188
|
+
Anywhere you'd draw an ASCII file tree, or show nested navigation/taxonomy, use a
|
|
189
|
+
Tree — it's just an indented bullet list inside a `||||||` fence.
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
||||||open
|
|
193
|
+
- icon:folder src
|
|
194
|
+
- icon:file index.ts
|
|
195
|
+
- icon:file utils.ts
|
|
196
|
+
- icon:file README.md
|
|
197
|
+
||||||
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
→ `components-interactive.md`.
|
|
201
|
+
|
|
202
|
+
### Rotating tips / testimonials / featured content → Random content
|
|
203
|
+
|
|
204
|
+
A "tip of the day", a rotating testimonial, a featured item that varies per load
|
|
205
|
+
— with **no JavaScript of your own** — is random content.
|
|
206
|
+
|
|
207
|
+
→ `components-interactive.md`.
|
|
208
|
+
|
|
209
|
+
### A published/updated date → Format date or Relative time
|
|
210
|
+
|
|
211
|
+
"Published June 26, 2026" → `[[[2026-06-26 style:long]]]`. "Updated 3 days ago" →
|
|
212
|
+
`[[[relative 2026-06-20]]]`. Both localize in the browser.
|
|
213
|
+
|
|
214
|
+
→ `components-media.md`.
|
|
215
|
+
|
|
216
|
+
### A sidebar-plus-content or header-with-actions section → Layout
|
|
217
|
+
|
|
218
|
+
- Sidebar + main → `::::flank`.
|
|
219
|
+
- Two things pushed to opposite ends (logo left, nav right; copyright + links) →
|
|
220
|
+
`::::split`.
|
|
221
|
+
- A row of tags/buttons/icons that wraps → `::::cluster`.
|
|
222
|
+
- Consistent vertical rhythm between blocks → `::::stack`.
|
|
223
|
+
- A responsive card grid → `::::grid`.
|
|
224
|
+
- An aspect-ratio media box → `::::frame`.
|
|
225
|
+
|
|
226
|
+
→ `layouts.md`.
|
|
227
|
+
|
|
228
|
+
## Anti-patterns — don't do these
|
|
229
|
+
|
|
230
|
+
- **Don't wrap everything.** If every paragraph is a callout, none of them stand
|
|
231
|
+
out. Components are emphasis; emphasis is scarce. Plain prose is the default.
|
|
232
|
+
- **Don't nest interactive triggers.** A dialog inside a tooltip, a popover
|
|
233
|
+
inside a popover, a tab group inside a single tab that only holds another tab
|
|
234
|
+
group — these confuse readers and sometimes the runtime. Keep one trigger deep.
|
|
235
|
+
- **Layouts wrap components; components don't wrap layouts.** Put cards inside a
|
|
236
|
+
`::::grid`; don't put a `::::grid` inside a `===` card. Layout containers are
|
|
237
|
+
the outermost structure. (A callout or card body holds prose and inline
|
|
238
|
+
components, not another `::::` block.)
|
|
239
|
+
- **Don't reach for a component when Markdown already says it.** A two-item list
|
|
240
|
+
doesn't need a grid. A single link doesn't need a button. A one-line note
|
|
241
|
+
doesn't need a callout. Use the plainest thing that reads well.
|
|
242
|
+
- **Don't use Details for a group or Accordion for one item.** One collapsible →
|
|
243
|
+
Details (`^^^`). A set of collapsibles → Accordion (`//////`).
|
|
244
|
+
- **Don't invent attributes or variants.** `:::caution` is not a callout type;
|
|
245
|
+
`@@@primary` is not a tag variant. Check the component reference — the engines
|
|
246
|
+
silently drop unknown tokens, so a typo just disappears.
|
|
247
|
+
- **Don't put Markdown image syntax directly inside a `::::frame`.** Use a raw
|
|
248
|
+
`<img>` tag there (Markdown images may not be processed inside layout
|
|
249
|
+
containers). Elsewhere, Markdown images work normally.
|