@symbo.ls/mcp 1.0.11 → 1.0.14
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/README.md +1 -0
- package/package.json +1 -1
- package/symbols_mcp/skills/AUDIT.md +148 -174
- package/symbols_mcp/skills/BRAND_IDENTITY.md +75 -0
- package/symbols_mcp/skills/COMPONENTS.md +151 -306
- package/symbols_mcp/skills/COOKBOOK.md +850 -0
- package/symbols_mcp/skills/DEFAULT_COMPONENTS.md +3856 -0
- package/symbols_mcp/skills/DEFAULT_LIBRARY.md +301 -0
- package/symbols_mcp/skills/DESIGN_CRITIQUE.md +70 -59
- package/symbols_mcp/skills/DESIGN_DIRECTION.md +109 -175
- package/symbols_mcp/skills/DESIGN_SYSTEM.md +473 -181
- package/symbols_mcp/skills/DESIGN_SYSTEM_ARCHITECT.md +65 -57
- package/symbols_mcp/skills/DESIGN_TO_CODE.md +83 -64
- package/symbols_mcp/skills/DESIGN_TREND.md +62 -50
- package/symbols_mcp/skills/FIGMA_MATCHING.md +69 -58
- package/symbols_mcp/skills/LEARNINGS.md +374 -0
- package/symbols_mcp/skills/MARKETING_ASSETS.md +71 -59
- package/symbols_mcp/skills/MIGRATION.md +158 -117
- package/symbols_mcp/skills/PATTERNS.md +101 -74
- package/symbols_mcp/skills/PRESENTATION.md +78 -0
- package/symbols_mcp/skills/PROJECT_STRUCTURE.md +114 -116
- package/symbols_mcp/skills/RULES.md +179 -148
- package/symbols_mcp/skills/RUNNING_APPS.md +476 -0
- package/symbols_mcp/skills/SEO-METADATA.md +33 -18
- package/symbols_mcp/skills/SNIPPETS.md +598 -0
- package/symbols_mcp/skills/SSR-BRENDER.md +99 -0
- package/symbols_mcp/skills/SYNTAX.md +356 -298
- package/symbols_mcp/skills/BRAND_INDENTITY.md +0 -69
- package/symbols_mcp/skills/THE_PRESENTATION.md +0 -69
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
# Symbols / DOMQL
|
|
1
|
+
# Symbols / DOMQL Patterns Reference
|
|
2
|
+
|
|
3
|
+
Use these patterns as recipes when building Symbols/DOMQL components. Each pattern is self-contained: apply it directly.
|
|
2
4
|
|
|
3
5
|
---
|
|
4
6
|
|
|
5
|
-
##
|
|
7
|
+
## UI Patterns
|
|
6
8
|
|
|
7
9
|
### Loading State
|
|
8
10
|
|
|
11
|
+
When to use: Any component that fetches data asynchronously.
|
|
12
|
+
|
|
9
13
|
```js
|
|
10
14
|
export const DataList = {
|
|
11
15
|
state: { items: [], loading: true, error: null },
|
|
@@ -35,11 +39,13 @@ export const DataList = {
|
|
|
35
39
|
|
|
36
40
|
### Toggle / Accordion
|
|
37
41
|
|
|
42
|
+
When to use: Expandable/collapsible content sections.
|
|
43
|
+
|
|
38
44
|
```js
|
|
39
45
|
export const Accordion = {
|
|
40
46
|
state: { open: false },
|
|
41
47
|
Header: {
|
|
42
|
-
|
|
48
|
+
flow: 'x',
|
|
43
49
|
attr: (el, s) => ({
|
|
44
50
|
'aria-expanded': s.open,
|
|
45
51
|
'aria-controls': 'accordion-body'
|
|
@@ -56,6 +62,8 @@ export const Accordion = {
|
|
|
56
62
|
|
|
57
63
|
### Active List Item
|
|
58
64
|
|
|
65
|
+
When to use: Navigation menus or lists where one item is selected.
|
|
66
|
+
|
|
59
67
|
```js
|
|
60
68
|
export const Menu = {
|
|
61
69
|
state: { active: null },
|
|
@@ -70,10 +78,12 @@ export const Menu = {
|
|
|
70
78
|
|
|
71
79
|
### Modal (v3 complete pattern)
|
|
72
80
|
|
|
81
|
+
When to use: Dialog overlays with backdrop, focus trapping, and animated open/close.
|
|
82
|
+
|
|
73
83
|
```js
|
|
74
84
|
// components/ModalCard.js
|
|
75
85
|
export const ModalCard = {
|
|
76
|
-
position: 'absolute',
|
|
86
|
+
position: 'absolute', align: 'center center',
|
|
77
87
|
top: 0, left: 0, boxSize: '100% 100%',
|
|
78
88
|
transition: 'all C defaultBezier',
|
|
79
89
|
opacity: '0', visibility: 'hidden', pointerEvents: 'none', zIndex: '-1',
|
|
@@ -128,12 +138,12 @@ export const closeModal = function closeModal() {
|
|
|
128
138
|
|
|
129
139
|
### Tab Switching (DOM ID pattern)
|
|
130
140
|
|
|
131
|
-
Use DOM IDs for view switching
|
|
141
|
+
When to use: Multi-view tab interfaces. Use DOM IDs for view switching -- NOT reactive `display` bindings (causes rendering failures).
|
|
132
142
|
|
|
133
143
|
```js
|
|
134
144
|
// Page definition
|
|
135
|
-
HomeView: { id: 'view-home',
|
|
136
|
-
ExploreView: { id: 'view-explore',
|
|
145
|
+
HomeView: { id: 'view-home', flow: 'column', ... },
|
|
146
|
+
ExploreView: { id: 'view-explore', flow: 'column', display: 'none', ... },
|
|
137
147
|
|
|
138
148
|
// Navbar
|
|
139
149
|
Navbar: {
|
|
@@ -152,6 +162,8 @@ export const switchView = function switchView(view) {
|
|
|
152
162
|
|
|
153
163
|
### Dynamic Class Toggle
|
|
154
164
|
|
|
165
|
+
When to use: Conditionally applying a style class based on props or state.
|
|
166
|
+
|
|
155
167
|
```js
|
|
156
168
|
export const Button = {
|
|
157
169
|
'.active': { background: 'primary', color: 'white' },
|
|
@@ -161,6 +173,8 @@ export const Button = {
|
|
|
161
173
|
|
|
162
174
|
### Dynamic Form / Async Submit
|
|
163
175
|
|
|
176
|
+
When to use: Forms with async submission, loading indicators, and inline error display.
|
|
177
|
+
|
|
164
178
|
```js
|
|
165
179
|
export const LoginForm = {
|
|
166
180
|
tag: 'form',
|
|
@@ -196,6 +210,8 @@ export const LoginForm = {
|
|
|
196
210
|
|
|
197
211
|
### Responsive Layout
|
|
198
212
|
|
|
213
|
+
When to use: Grid-based layouts that adapt across breakpoints.
|
|
214
|
+
|
|
199
215
|
```js
|
|
200
216
|
export const Layout = {
|
|
201
217
|
extends: 'Grid',
|
|
@@ -209,14 +225,14 @@ export const Layout = {
|
|
|
209
225
|
|
|
210
226
|
---
|
|
211
227
|
|
|
212
|
-
##
|
|
228
|
+
## Accessibility
|
|
213
229
|
|
|
214
230
|
### Semantic Atoms First
|
|
215
231
|
|
|
216
|
-
Always prefer built-in semantic atoms over generic containers
|
|
232
|
+
Always prefer built-in semantic atoms over generic containers.
|
|
217
233
|
|
|
218
234
|
```js
|
|
219
|
-
//
|
|
235
|
+
// CORRECT -- semantic atoms
|
|
220
236
|
Button: { text: 'Submit' } // <button>
|
|
221
237
|
Link: { text: 'Dashboard', href: '/dashboard' } // <a>
|
|
222
238
|
Input: { placeholder: 'Search...' } // <input>
|
|
@@ -225,7 +241,7 @@ Header: {} // <header>
|
|
|
225
241
|
Footer: {} // <footer>
|
|
226
242
|
Main: {} // <main>
|
|
227
243
|
|
|
228
|
-
//
|
|
244
|
+
// WRONG -- loses semantics
|
|
229
245
|
Box: { tag: 'div', text: 'Submit', onClick: fn } // div is not a button
|
|
230
246
|
```
|
|
231
247
|
|
|
@@ -250,10 +266,12 @@ Button: {
|
|
|
250
266
|
|
|
251
267
|
### Keyboard Navigation
|
|
252
268
|
|
|
269
|
+
When to use: Custom interactive widgets (listbox, dropdown, menu).
|
|
270
|
+
|
|
253
271
|
```js
|
|
254
272
|
// Custom keyboard interaction (listbox pattern)
|
|
255
273
|
{
|
|
256
|
-
|
|
274
|
+
flow: 'y',
|
|
257
275
|
attr: { role: 'listbox', tabindex: '0', 'aria-label': 'Select option' },
|
|
258
276
|
onKeydown: (e, el, s) => {
|
|
259
277
|
if (e.key === 'ArrowDown') {
|
|
@@ -273,10 +291,13 @@ Button: {
|
|
|
273
291
|
}
|
|
274
292
|
```
|
|
275
293
|
|
|
276
|
-
Tabindex
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
294
|
+
#### Tabindex Rules
|
|
295
|
+
|
|
296
|
+
| Value | Behavior |
|
|
297
|
+
|-------|----------|
|
|
298
|
+
| `tabindex: '0'` | Element is in the natural tab order |
|
|
299
|
+
| `tabindex: '-1'` | Focusable programmatically only (not via Tab key) |
|
|
300
|
+
| `tabindex > 0` | **Never use.** Breaks natural tab order. |
|
|
280
301
|
|
|
281
302
|
### Focus Styles
|
|
282
303
|
|
|
@@ -326,17 +347,17 @@ Button: { Icon: { name: 'search', attr: { 'aria-hidden': 'true' } }, text: 'Sear
|
|
|
326
347
|
|
|
327
348
|
### Color and Contrast
|
|
328
349
|
|
|
329
|
-
- Do NOT rely on color alone for error/success states
|
|
330
|
-
- Use `title`, `caption`, `paragraph` semantic tokens for sufficient contrast
|
|
331
|
-
- Low opacity colors (`gray 0.3`) likely fail WCAG AA
|
|
350
|
+
- Do NOT rely on color alone for error/success states -- always combine with icon + text.
|
|
351
|
+
- Use `title`, `caption`, `paragraph` semantic tokens for sufficient contrast.
|
|
352
|
+
- Low opacity colors (`gray 0.3`) likely fail WCAG AA -- verify contrast ratio.
|
|
332
353
|
|
|
333
354
|
---
|
|
334
355
|
|
|
335
|
-
##
|
|
356
|
+
## AI Agent Optimization
|
|
336
357
|
|
|
337
358
|
### `aid-*` Attributes for Machine Parsing
|
|
338
359
|
|
|
339
|
-
|
|
360
|
+
Add `aid-*` attributes so AI agents can parse structural intent.
|
|
340
361
|
|
|
341
362
|
```js
|
|
342
363
|
export const HeroSection = {
|
|
@@ -353,29 +374,33 @@ export const HeroSection = {
|
|
|
353
374
|
}
|
|
354
375
|
```
|
|
355
376
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
|
359
|
-
|
|
360
|
-
| `
|
|
361
|
-
| `
|
|
362
|
-
| `
|
|
363
|
-
| `
|
|
364
|
-
| `
|
|
365
|
-
| `
|
|
366
|
-
| `
|
|
367
|
-
|
|
368
|
-
| `
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
|
373
|
-
|
|
374
|
-
| `
|
|
377
|
+
#### `aid-type` Values
|
|
378
|
+
|
|
379
|
+
| Value | Meaning |
|
|
380
|
+
|-------|---------|
|
|
381
|
+
| `header` | Page header |
|
|
382
|
+
| `nav` | Navigation |
|
|
383
|
+
| `main` | Primary content |
|
|
384
|
+
| `content` | Content section |
|
|
385
|
+
| `complementary` | Supplementary (sidebar, aside) |
|
|
386
|
+
| `interactive` | Form, control panel |
|
|
387
|
+
| `modal` | Dialog overlay |
|
|
388
|
+
| `alert` | Error or notification |
|
|
389
|
+
| `search` | Search interface |
|
|
390
|
+
|
|
391
|
+
#### `aid-state` Values
|
|
392
|
+
|
|
393
|
+
| Value | Meaning |
|
|
394
|
+
|-------|---------|
|
|
395
|
+
| `idle` | Default state |
|
|
396
|
+
| `loading` | Fetching data |
|
|
397
|
+
| `processing` | Submitting/computing |
|
|
398
|
+
| `done` | Completed |
|
|
399
|
+
| `error` | Error state |
|
|
375
400
|
|
|
376
401
|
### JSON-LD Structured Data
|
|
377
402
|
|
|
378
|
-
|
|
403
|
+
When to use: Entity representation for AI agents and search engines.
|
|
379
404
|
|
|
380
405
|
```js
|
|
381
406
|
export const StructuredData = {
|
|
@@ -395,20 +420,20 @@ export const StructuredData = {
|
|
|
395
420
|
}
|
|
396
421
|
```
|
|
397
422
|
|
|
398
|
-
|
|
423
|
+
Supported schema types: `Organization`, `Product`, `Service`, `Article`, `FAQPage`, `BreadcrumbList`.
|
|
399
424
|
|
|
400
425
|
Structured data must match server-rendered content exactly.
|
|
401
426
|
|
|
402
427
|
### Semantic Heading Structure
|
|
403
428
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
Heading hierarchy is used by AI agents to determine page structure.
|
|
408
|
-
```
|
|
429
|
+
- One `H1` per page defining the primary subject.
|
|
430
|
+
- Logical hierarchy: H1 then H2 then H3 -- never skip levels.
|
|
431
|
+
- AI agents use heading hierarchy to determine page structure.
|
|
409
432
|
|
|
410
433
|
### AI-Accessible Tool Exposure (Chrome WebMCP)
|
|
411
434
|
|
|
435
|
+
When to use: Exposing form-based tools for AI agent interaction via MCP.
|
|
436
|
+
|
|
412
437
|
```js
|
|
413
438
|
export const CheckOrderTool = {
|
|
414
439
|
extends: 'Form',
|
|
@@ -423,7 +448,7 @@ export const CheckOrderTool = {
|
|
|
423
448
|
|
|
424
449
|
### llms.txt Support
|
|
425
450
|
|
|
426
|
-
Provide `/llms.txt` at your project root for AI routing guidance
|
|
451
|
+
Provide `/llms.txt` at your project root for AI routing guidance.
|
|
427
452
|
|
|
428
453
|
```text
|
|
429
454
|
# Organization Name
|
|
@@ -444,43 +469,45 @@ Provide `/llms.txt` at your project root for AI routing guidance:
|
|
|
444
469
|
|
|
445
470
|
### Server-Rendered Critical Content
|
|
446
471
|
|
|
447
|
-
- All critical content (text, headings, prices, key data) must be server-rendered in the initial HTML
|
|
448
|
-
- Do not rely on client-side-only rendering for content AI agents need to parse
|
|
449
|
-
- `aria-busy="true"` while loading; `aria-busy="false"` when complete
|
|
472
|
+
- All critical content (text, headings, prices, key data) must be server-rendered in the initial HTML.
|
|
473
|
+
- Do not rely on client-side-only rendering for content AI agents need to parse.
|
|
474
|
+
- Set `aria-busy="true"` while loading; `aria-busy="false"` when complete.
|
|
475
|
+
|
|
476
|
+
### Anti-Patterns (Failure Pattern Recognition)
|
|
450
477
|
|
|
451
|
-
|
|
478
|
+
Avoid these -- they break AI comprehension:
|
|
452
479
|
|
|
453
|
-
|
|
454
|
-
-
|
|
455
|
-
-
|
|
456
|
-
-
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
- Missing `alt` text on informative images
|
|
480
|
+
- Excessive divs/boxes without semantic meaning.
|
|
481
|
+
- Non-descriptive link text ("click here", "read more").
|
|
482
|
+
- Missing or skipped heading levels.
|
|
483
|
+
- Critical content rendered client-side only.
|
|
484
|
+
- Conflicting metadata (page title vs. H1 vs. JSON-LD).
|
|
485
|
+
- Missing `alt` text on informative images.
|
|
460
486
|
|
|
461
487
|
---
|
|
462
488
|
|
|
463
|
-
##
|
|
489
|
+
## Design Principles
|
|
464
490
|
|
|
465
491
|
### Visual Hierarchy
|
|
466
492
|
|
|
467
|
-
- Lead with the most important content (F-pattern, Z-pattern)
|
|
468
|
-
- Use typographic scale (`H1
|
|
469
|
-
- Adequate whitespace
|
|
493
|
+
- Lead with the most important content (F-pattern, Z-pattern).
|
|
494
|
+
- Use typographic scale (`H1` through `H6`, `P`, `Caption`) to create hierarchy.
|
|
495
|
+
- Adequate whitespace -- breathing room improves comprehension.
|
|
470
496
|
|
|
471
497
|
### Component Button Hierarchy
|
|
472
498
|
|
|
473
|
-
| Level
|
|
474
|
-
|
|
475
|
-
| Primary
|
|
476
|
-
| Secondary
|
|
477
|
-
| Tertiary
|
|
478
|
-
| Destructive
|
|
499
|
+
| Level | Component | Use |
|
|
500
|
+
|-------|-----------|-----|
|
|
501
|
+
| Primary | `theme: 'primary'` | Main CTA (one per view) |
|
|
502
|
+
| Secondary | `theme: 'dialog'` | Supporting actions |
|
|
503
|
+
| Tertiary | `theme: 'transparent'` | Least important |
|
|
504
|
+
| Destructive | `theme: 'warning'` | Irreversible actions |
|
|
479
505
|
|
|
480
506
|
### Responsive Behavior
|
|
481
507
|
|
|
508
|
+
When to use: Mobile-first progressive enhancement.
|
|
509
|
+
|
|
482
510
|
```js
|
|
483
|
-
// Mobile-first approach
|
|
484
511
|
Component: {
|
|
485
512
|
padding: 'A', // mobile base
|
|
486
513
|
'@tabletS': { padding: 'B' }, // tablet
|
|
@@ -488,12 +515,12 @@ Component: {
|
|
|
488
515
|
}
|
|
489
516
|
```
|
|
490
517
|
|
|
491
|
-
### Transitions
|
|
518
|
+
### Transitions and Micro-interactions
|
|
492
519
|
|
|
493
520
|
```js
|
|
494
521
|
// Standard transition
|
|
495
522
|
Component: {
|
|
496
|
-
transition: 'B defaultBezier', // B
|
|
523
|
+
transition: 'B defaultBezier', // B = 280ms
|
|
497
524
|
transitionProperty: 'opacity, transform'
|
|
498
525
|
}
|
|
499
526
|
|
|
@@ -504,6 +531,6 @@ Button: {
|
|
|
504
531
|
}
|
|
505
532
|
```
|
|
506
533
|
|
|
507
|
-
Easing: `defaultBezier` = `cubic-bezier(.29, .67, .51, .97)` (smooth ease-out)
|
|
534
|
+
Easing: `defaultBezier` = `cubic-bezier(.29, .67, .51, .97)` (smooth ease-out).
|
|
508
535
|
|
|
509
|
-
Do NOT animate layout properties (`width`, `height`, `top`, `left`)
|
|
536
|
+
Do NOT animate layout properties (`width`, `height`, `top`, `left`) -- they force reflow. Animate `transform` and `opacity` instead.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Presentation Designer
|
|
2
|
+
|
|
3
|
+
You are a Presentation Designer at Apple, creating keynote presentations for executive audiences. Design a complete presentation.
|
|
4
|
+
|
|
5
|
+
## Inputs
|
|
6
|
+
|
|
7
|
+
- Topic/Purpose: [TOPIC/PURPOSE]
|
|
8
|
+
- Audience: [C-SUITE/INVESTORS/CUSTOMERS/TEAM]
|
|
9
|
+
- Duration: [20/30/60] minutes
|
|
10
|
+
- Objective: [INFORM/PERSUADE/INSPIRE/EDUCATE]
|
|
11
|
+
|
|
12
|
+
## Deliverables
|
|
13
|
+
|
|
14
|
+
### 1. Narrative Architecture
|
|
15
|
+
|
|
16
|
+
- Story arc (apply hero's journey framework to business context)
|
|
17
|
+
- Opening hook (first 60 seconds)
|
|
18
|
+
- Key message hierarchy (3 core messages max)
|
|
19
|
+
- Closing call-to-action
|
|
20
|
+
|
|
21
|
+
### 2. Slide Specs (20-30 slides)
|
|
22
|
+
|
|
23
|
+
For each slide provide:
|
|
24
|
+
- Slide number and title
|
|
25
|
+
- Layout type (title, content, data, image, split, quote, transition)
|
|
26
|
+
- Visual description (composition, imagery, colors)
|
|
27
|
+
- Exact copy (headlines: 6 words max, body: 20 words max)
|
|
28
|
+
- Speaker notes (60-90 seconds of presenter content)
|
|
29
|
+
- Animation notes (builds, transitions, timing)
|
|
30
|
+
|
|
31
|
+
Follow this slide structure:
|
|
32
|
+
1. Title slide (impactful, minimal)
|
|
33
|
+
2. Agenda (3 sections max)
|
|
34
|
+
3. The Problem (emotional hook)
|
|
35
|
+
4. Current State (data visualization)
|
|
36
|
+
5. The Opportunity (market size, trend)
|
|
37
|
+
6. Our Solution (product/demo)
|
|
38
|
+
7. How It Works (3-step process)
|
|
39
|
+
8. Key Benefits (3 benefits with icons)
|
|
40
|
+
9. Proof Points (3 case studies/testimonials)
|
|
41
|
+
10. Competitive Landscape (2x2 matrix or comparison)
|
|
42
|
+
11. Business Model (revenue streams)
|
|
43
|
+
12. Traction (metrics, growth curve)
|
|
44
|
+
13. Roadmap (3 phases)
|
|
45
|
+
14. Team (3 key members)
|
|
46
|
+
15. The Ask (investment/partnership/next steps)
|
|
47
|
+
16. Closing (memorable final thought)
|
|
48
|
+
|
|
49
|
+
### 3. Visual Design
|
|
50
|
+
|
|
51
|
+
- Color palette (dark background for impact, or light for clarity)
|
|
52
|
+
- Typography (1 display font, 1 body font, sizes for each level)
|
|
53
|
+
- Imagery style (photography vs. illustration vs. abstract)
|
|
54
|
+
- Data visualization style (chart types, colors, labeling)
|
|
55
|
+
- Iconography style (line vs. filled, consistent weight)
|
|
56
|
+
|
|
57
|
+
### 4. Assets
|
|
58
|
+
|
|
59
|
+
- Image requirements (subject, mood, composition, resolution)
|
|
60
|
+
- Chart data (exact numbers, trend lines, comparisons)
|
|
61
|
+
- Icon needs (list 15 required icons)
|
|
62
|
+
- Video/animation requirements (if applicable)
|
|
63
|
+
|
|
64
|
+
### 5. Presenter Guidelines
|
|
65
|
+
|
|
66
|
+
- Pacing (time per section)
|
|
67
|
+
- Transition scripts
|
|
68
|
+
- Audience interaction moments (questions, polls)
|
|
69
|
+
- Backup slides (5 optional deep-dive slides)
|
|
70
|
+
|
|
71
|
+
### 6. Handout Materials
|
|
72
|
+
|
|
73
|
+
- One-pager summary design
|
|
74
|
+
- Leave-behind deck (simplified version)
|
|
75
|
+
|
|
76
|
+
## Instructions
|
|
77
|
+
|
|
78
|
+
Design for emotional impact. Every slide must earn its place.
|