@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.
@@ -1,11 +1,15 @@
1
- # Symbols / DOMQL — UI Patterns, Accessibility & AI Optimization
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
- ## Part 1: UI/UX Patterns
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
- extends: 'Flex',
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', flexAlign: 'center center',
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 NOT reactive `display` bindings (causes rendering failures).
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', extends: 'Flex', ... },
136
- ExploreView: { id: 'view-explore', extends: 'Flex', display: 'none', ... },
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
- ## Part 2: Accessibility
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
- // CORRECT semantic atoms
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
- // WRONG loses semantics
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
- extends: 'Flex',
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 rules:
277
- - `tabindex: '0'` — in tab order
278
- - `tabindex: '-1'` focusable programmatically only
279
- - Never use `tabindex > 0`
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 always combine with icon + text
330
- - Use `title`, `caption`, `paragraph` semantic tokens for sufficient contrast
331
- - Low opacity colors (`gray 0.3`) likely fail WCAG AA verify contrast ratio
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
- ## Part 3: AI Agent Optimization
356
+ ## AI Agent Optimization
336
357
 
337
358
  ### `aid-*` Attributes for Machine Parsing
338
359
 
339
- Include `aid-*` attributes so AI agents can parse structural intent:
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
- | `aid-type` values | Meaning |
357
- | ----------------- | ---------------------------------------------------- |
358
- | `header` | Page header |
359
- | `nav` | Navigation |
360
- | `main` | Primary content |
361
- | `content` | Content section |
362
- | `complementary` | Supplementary (sidebar, aside) |
363
- | `interactive` | Form, control panel |
364
- | `modal` | Dialog overlay |
365
- | `alert` | Error or notification |
366
- | `search` | Search interface |
367
-
368
- | `aid-state` values | Meaning |
369
- | ------------------ | -------------------- |
370
- | `idle` | Default state |
371
- | `loading` | Fetching data |
372
- | `processing` | Submitting/computing |
373
- | `done` | Completed |
374
- | `error` | Error state |
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
- Include JSON-LD for entity representation by AI agents and search engines:
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
- Schema types to use: `Organization`, `Product`, `Service`, `Article`, `FAQPage`, `BreadcrumbList`
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
- One H1 per page defining the primary subject.
406
- Logical hierarchy: H1 H2 H3 never skip levels.
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
- ### Failure Pattern Recognition
478
+ Avoid these -- they break AI comprehension:
452
479
 
453
- Watch for these anti-patterns that break AI comprehension:
454
- - Excessive divs/boxes without semantic meaning
455
- - Non-descriptive link text ("click here", "read more")
456
- - Missing or skipped heading levels
457
- - Critical content rendered client-side only
458
- - Conflicting metadata (page title vs. H1 vs. JSON-LD)
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
- ## Part 4: Design Principles
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`→`H6`, `P`, `Caption`) to create hierarchy
469
- - Adequate whitespace breathing room improves comprehension
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 | Component | Use |
474
- | ------------ | ------------------ | ----------------------- |
475
- | Primary | `theme: 'primary'` | Main CTA (one per view) |
476
- | Secondary | `theme: 'dialog'` | Supporting actions |
477
- | Tertiary | `theme: 'transparent'` | Least important |
478
- | Destructive | `theme: 'warning'` | Irreversible actions |
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 & Micro-interactions
518
+ ### Transitions and Micro-interactions
492
519
 
493
520
  ```js
494
521
  // Standard transition
495
522
  Component: {
496
- transition: 'B defaultBezier', // B 280ms
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`) they force reflow. Animate `transform` and `opacity` instead.
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.