purity-mcp 0.0.0-stage → 2.0.1

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.
Files changed (66) hide show
  1. package/README.md +262 -2
  2. package/dist/data/component-catalog.d.ts +3 -0
  3. package/dist/data/component-catalog.d.ts.map +1 -0
  4. package/dist/data/component-catalog.js +330 -0
  5. package/dist/data/component-catalog.js.map +1 -0
  6. package/dist/data/documentation.d.ts +10 -0
  7. package/dist/data/documentation.d.ts.map +1 -0
  8. package/dist/data/documentation.js +625 -0
  9. package/dist/data/documentation.js.map +1 -0
  10. package/dist/data/templates.d.ts +11 -0
  11. package/dist/data/templates.d.ts.map +1 -0
  12. package/dist/data/templates.js +633 -0
  13. package/dist/data/templates.js.map +1 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +62 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/prompts/index.d.ts +3 -0
  19. package/dist/prompts/index.d.ts.map +1 -0
  20. package/dist/prompts/index.js +161 -0
  21. package/dist/prompts/index.js.map +1 -0
  22. package/dist/resources/index.d.ts +3 -0
  23. package/dist/resources/index.d.ts.map +1 -0
  24. package/dist/resources/index.js +208 -0
  25. package/dist/resources/index.js.map +1 -0
  26. package/dist/server.d.ts +3 -0
  27. package/dist/server.d.ts.map +1 -0
  28. package/dist/server.js +108 -0
  29. package/dist/server.js.map +1 -0
  30. package/dist/tools/components.tool.d.ts +34 -0
  31. package/dist/tools/components.tool.d.ts.map +1 -0
  32. package/dist/tools/components.tool.js +41 -0
  33. package/dist/tools/components.tool.js.map +1 -0
  34. package/dist/tools/docs.tool.d.ts +44 -0
  35. package/dist/tools/docs.tool.d.ts.map +1 -0
  36. package/dist/tools/docs.tool.js +60 -0
  37. package/dist/tools/docs.tool.js.map +1 -0
  38. package/dist/tools/inspect.tool.d.ts +9 -0
  39. package/dist/tools/inspect.tool.d.ts.map +1 -0
  40. package/dist/tools/inspect.tool.js +204 -0
  41. package/dist/tools/inspect.tool.js.map +1 -0
  42. package/dist/tools/scaffold.tool.d.ts +28 -0
  43. package/dist/tools/scaffold.tool.d.ts.map +1 -0
  44. package/dist/tools/scaffold.tool.js +56 -0
  45. package/dist/tools/scaffold.tool.js.map +1 -0
  46. package/dist/tools/transform.tool.d.ts +9 -0
  47. package/dist/tools/transform.tool.d.ts.map +1 -0
  48. package/dist/tools/transform.tool.js +9 -0
  49. package/dist/tools/transform.tool.js.map +1 -0
  50. package/dist/tools/validate.tool.d.ts +13 -0
  51. package/dist/tools/validate.tool.d.ts.map +1 -0
  52. package/dist/tools/validate.tool.js +53 -0
  53. package/dist/tools/validate.tool.js.map +1 -0
  54. package/dist/types.d.ts +105 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +5 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/utils/code-analyzer.d.ts +3 -0
  59. package/dist/utils/code-analyzer.d.ts.map +1 -0
  60. package/dist/utils/code-analyzer.js +321 -0
  61. package/dist/utils/code-analyzer.js.map +1 -0
  62. package/dist/utils/template-converter.d.ts +12 -0
  63. package/dist/utils/template-converter.d.ts.map +1 -0
  64. package/dist/utils/template-converter.js +158 -0
  65. package/dist/utils/template-converter.js.map +1 -0
  66. package/package.json +45 -4
package/README.md CHANGED
@@ -1,3 +1,263 @@
1
- # Temporary Holding Version
1
+ # Purity Model Context Protocol (MCP) Server
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![MCP Standard](https://img.shields.io/badge/MCP-1.32.2-blue.svg)](https://modelcontextprotocol.io/)
4
+ [![TypeScript](https://img.shields.io/badge/TypeScript-ES2022-3178C6.svg)](https://www.typescriptlang.org/)
5
+ [![Vitest](https://img.shields.io/badge/Vitest-passing-6E9F18.svg)](https://vitest.dev/)
6
+ [![Design System](https://img.shields.io/badge/Design-Adwaita%20Glassmorphism-9141ac.svg)](https://gnome.org)
7
+
8
+ Official **Model Context Protocol (MCP)** server for the **Purity** framework.
9
+
10
+ This server bridges your AI development environments (**Claude Desktop**, **Cursor**, **Google Antigravity / AGY**, **VS Code / Cline / Roo Code / Continue**, **Windsurf**) directly into Purity's architecture—eliminating hallucinations, enforcing synchronous signals, scaffolding 100% compliant Custom Elements, inspecting project health, and transforming foreign template code in real time.
11
+
12
+ ---
13
+
14
+ ## ⚡ Features at a Glance
15
+
16
+ | Category | Capability | Description |
17
+ | :--- | :--- | :--- |
18
+ | 🛠️ **Tools** | `purity_scaffold` | Scaffold components, services, pipes, directives, validators, interceptors, behaviors, and pages with tests. |
19
+ | 🔍 **Tools** | `purity_validate` | Deep static analysis auditing signal mutations, path aliases, inline styles, Adwaita tokens, and foreign syntax. |
20
+ | 📊 **Tools** | `purity_inspect_project` | Scans workspace health, discovered components, test coverage, and SCSS architecture. |
21
+ | 📚 **Tools** | `purity_get_docs` | Authoritative reference documentation and runnable code examples across 20+ framework topics. |
22
+ | 🧩 **Tools** | `purity_lookup_component` | Look up signatures, reactive signals, methods, events, and copy-paste HTML for shared UI components. |
23
+ | 🗂️ **Tools** | `purity_list_components` | Browse all built-in UI components and widgets categorized by role. |
24
+ | 🔄 **Tools** | `purity_transform_template` | Converts Angular (`*ngFor`, `*ngIf`, `(click)`, `[(ngModel)]`) or Vue (`v-for`, `v-if`, `@click`, `v-model`) to Purity. |
25
+ | 📖 **Resources** | `purity://docs/*` | Live access to Cheatsheet, Architecture Rules, and Adwaita Design Tokens. |
26
+ | 🎨 **Resources** | `purity://catalog/*` | Live catalog of all UI components (`switch-button`, `modal-view`, `expander`, `popover`, etc.). |
27
+ | 📋 **Resources** | `purity://templates/*` | Dynamic starter templates for any Purity construct. |
28
+ | 💬 **Prompts** | `purity-create-component` | Guided workflow to design and implement production-ready Purity Custom Elements. |
29
+ | 💬 **Prompts** | `purity-review-code` | 12-point architectural and quality audit prompt. |
30
+ | 💬 **Prompts** | `purity-migrate-component`| Seamless migration prompt from React / Angular / Vue to Purity. |
31
+ | 💬 **Prompts** | `purity-debug-reactivity` | Reactivity troubleshooter diagnosing signal access, untracked dependencies, and effect loops. |
32
+
33
+ ---
34
+
35
+ ## 🚀 Quick Setup
36
+
37
+ ### 1. Build the MCP Server
38
+ Inside the repository:
39
+ ```bash
40
+ cd AI
41
+ npm install
42
+ npm run build
43
+ ```
44
+
45
+ Verify it runs:
46
+ ```bash
47
+ node dist/index.js --help
48
+ ```
49
+
50
+ ---
51
+
52
+ ## ⚙️ Environment Configuration
53
+
54
+ ### 1. Claude Desktop
55
+ Add to your `claude_desktop_config.json`:
56
+ - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
57
+ - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
58
+ - **Linux**: `~/.config/Claude/claude_desktop_config.json`
59
+
60
+ ```json
61
+ {
62
+ "mcpServers": {
63
+ "purity": {
64
+ "command": "node",
65
+ "args": ["/absolute/path/to/purity/AI/dist/index.js"]
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ ---
72
+
73
+ ### 2. Cursor
74
+ Add to your project's `.cursor/mcp.json` (or global Cursor MCP configuration):
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "purity": {
80
+ "command": "node",
81
+ "args": ["${workspaceFolder}/AI/dist/index.js"]
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ ---
88
+
89
+ ### 3. Google Antigravity / AGY
90
+ Add to your MCP server configuration:
91
+
92
+ ```json
93
+ {
94
+ "mcpServers": {
95
+ "purity": {
96
+ "command": "node",
97
+ "args": ["/run/media/{logged_user}/d/Development/purity/AI/dist/index.js"]
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ ---
104
+
105
+ ### 4. VS Code (Cline, Roo Code, Continue)
106
+ In your VS Code extension settings (`cline_mcp_settings.json` or `roo_code_mcp_settings.json`):
107
+
108
+ ```json
109
+ {
110
+ "mcpServers": {
111
+ "purity": {
112
+ "command": "node",
113
+ "args": ["/absolute/path/to/purity/AI/dist/index.js"]
114
+ }
115
+ }
116
+ }
117
+ ```
118
+
119
+ ---
120
+
121
+ ### 5. Windsurf
122
+ Add to `~/.codeium/windsurf/mcp_config.json`:
123
+
124
+ ```json
125
+ {
126
+ "mcpServers": {
127
+ "purity": {
128
+ "command": "node",
129
+ "args": ["/absolute/path/to/purity/AI/dist/index.js"]
130
+ }
131
+ }
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 🛠️ MCP Tools Reference
138
+
139
+ ### `purity_scaffold`
140
+ Generates complete, production-ready Purity boilerplate files adhering to all architectural standards:
141
+ - **`type`**: `'component'` | `'service'` | `'pipe'` | `'directive'` | `'validator'` | `'interceptor'` | `'behavior'` | `'page'`
142
+ - **`name`**: Artifact name (e.g. `'user-badge'`)
143
+ - **`selector`** *(optional)*: Custom element tag (e.g. `'user-badge'`)
144
+ - **`targetDir`** *(optional)*: Directory to save generated files
145
+ - **`writeToDisk`** *(optional)*: Automatically writes files to disk when `true`
146
+ - **`description`** *(optional)*: Summary description of functionality
147
+
148
+ *Example Tool Call:*
149
+ ```json
150
+ {
151
+ "type": "component",
152
+ "name": "shopping-cart",
153
+ "description": "Interactive checkout tray",
154
+ "writeToDisk": false
155
+ }
156
+ ```
157
+
158
+ ---
159
+
160
+ ### `purity_validate`
161
+ Audits TypeScript, HTML, or SCSS against Purity's 12 non-negotiable rules:
162
+ - **`code`** *(optional)*: Raw code string to validate
163
+ - **`filePath`** *(optional)*: Path to file on disk to validate
164
+ - **`fileName`** *(optional)*: Virtual filename (e.g. `'my.component.ts'`, `'card.component.scss'`)
165
+
166
+ *Checks Include:*
167
+ - Synchronous signals (`.set()`, `.update()`, no direct `.value` assignment)
168
+ - Strictly zero imports from RxJS, Redux, Zustand, MobX
169
+ - Mandatory path aliases (no `../` relative traversal)
170
+ - Zero inline `style="..."` attributes (modular SCSS with `@use '@styles' as *;`)
171
+ - Adwaita design tokens and KDE Breeze cursor tokens
172
+ - No foreign templates or lifecycle hooks
173
+ - **Prohibition of native event listeners and dispatching** (`addEventListener`, `removeEventListener`, `dispatchEvent`, `CustomEvent`) — communication must use signals/effects (nested) or `@Injectable` services (distant)
174
+ - **Prohibition of query selectors** (`querySelector`, `querySelectorAll`, `getElementById`, etc.) — `@ViewChild` decorators are mandatory
175
+
176
+ *Returns:*
177
+ - Numerical score (0 to 100)
178
+ - Validation status (`valid: true/false`)
179
+ - Specific violation list with line numbers, code snippets, and exact recommended replacements.
180
+
181
+ ---
182
+
183
+ ### `purity_inspect_project`
184
+ Audits the health and structure of a Purity repository:
185
+ - **`projectRoot`** *(optional)*: Path to project root (defaults to current working directory).
186
+ - Detects registered `@Component`, `@Injectable`, `@Pipe`, `@Directive`, `@Validator`, and `HttpInterceptor` instances.
187
+ - Verifies test coverage (`*.spec.ts`) and SCSS pairing for all components.
188
+
189
+ ---
190
+
191
+ ### `purity_get_docs`
192
+ Provides instant reference documentation and runnable code examples:
193
+ - **`topic`**:
194
+ `'signals'` | `'components'` | `'templates'` | `'repeaters'` | `'virtual-for'` | `'conditionals'` | `'slots'` | `'di'` | `'http'` | `'interceptors'` | `'pipes'` | `'directives'` | `'validators'` | `'behaviors'` | `'router'` | `'seo'` | `'design-system'` | `'cursors'` | `'styling'` | `'testing'` | `'rules'`
195
+ - **`detail`**: `'full'` | `'summary'` | `'examples'`
196
+
197
+ ---
198
+
199
+ ### `purity_lookup_component`
200
+ Inspects built-in shared UI components and widgets:
201
+ - **`query`**: Component name or selector (e.g. `'switch-button'`, `'modal-view'`, `'popover'`, `'expander'`, `'date-time-picker'`, `'loader'`, `'navigation-menu'`, `'profile-avatar'`, `'radial-context-menu'`, `'analogue-clock'`).
202
+ - Returns tag selector, inputs, signals, methods, events, slots, and copy-paste HTML examples.
203
+
204
+ ---
205
+
206
+ ### `purity_transform_template`
207
+ Translates foreign framework templates into idiomatic Purity templates:
208
+ - Angular `*ngFor="let item of items; let i = index"` ➔ `for="let item, i of items"`
209
+ - Vue `v-for="(item, i) in items"` ➔ `for="let item, i of items"`
210
+ - Angular `*ngIf="isLoggedIn"` ➔ `if="isLoggedIn"`
211
+ - Vue `v-if` / `v-else-if` / `v-else` ➔ `if` / `else-if` / `else`
212
+ - Angular `(click)="save()"` / Vue `@click="save"` ➔ `onclick="save()"`
213
+ - Angular `[(ngModel)]="val"` / Vue `v-model="val"` ➔ `value="{{ val() }}" oninput="val.set(this.value)"`
214
+ - Strips prohibited inline styles and suggests clean SCSS styling.
215
+
216
+ ---
217
+
218
+ ## 📖 MCP Resources Reference
219
+
220
+ Connect to these resources in your MCP client:
221
+
222
+ - **`purity://docs/cheatsheet`**: Single-page developer cheat sheet covering signals, components, repeaters, DI, and Adwaita styles.
223
+ - **`purity://docs/architecture`**: Official framework architectural rules and quality constraints.
224
+ - **`purity://docs/design-system`**: Adwaita glassmorphism tokens, corner radii hierarchy, and KDE Breeze cursors.
225
+ - **`purity://catalog/components`**: Markdown table of all shared components and widgets with categories and descriptions.
226
+ - **`purity://templates/{type}`**: Dynamic starter template for `component`, `service`, `pipe`, `directive`, `validator`, `interceptor`, `behavior`, or `page`.
227
+
228
+ ---
229
+
230
+ ## 💬 MCP Prompts Reference
231
+
232
+ Invoke these prompts in your AI chat:
233
+
234
+ - **`purity-create-component`**: Guides the AI step-by-step in generating an end-to-end Purity Custom Element with signals, templates, SCSS, and unit tests.
235
+ - **`purity-review-code`**: Directs the AI to run a rigorous 12-point compliance audit against Purity rules (signals, lifecycle, `@ViewChild`, no querySelector, no native addEventListener/dispatchEvent, Adwaita tokens, Breeze cursors).
236
+ - **`purity-migrate-component`**: Instructs the AI to migrate React, Angular, or Vue components into Purity Custom Elements.
237
+ - **`purity-debug-reactivity`**: Directs the AI to analyze reactivity bugs (signal subscriptions, untracked dependencies, effect loops).
238
+
239
+ ---
240
+
241
+ ## 🧪 Testing
242
+
243
+ The MCP server has its own dedicated Vitest test suite:
244
+
245
+ ```bash
246
+ cd AI
247
+ npm test
248
+ ```
249
+
250
+ Tests cover:
251
+ - File scaffolding for all 8 artifact types
252
+ - Deep static validation checks & scoring
253
+ - Workspace inspection and artifact discovery
254
+ - Documentation retrieval across all topics
255
+ - Component catalog lookup and categorization
256
+ - Template conversion from Angular and Vue syntax
257
+ - Server instantiation and registration
258
+
259
+ ---
260
+
261
+ ## 📄 License
262
+
263
+ MIT © Purity Framework Team
@@ -0,0 +1,3 @@
1
+ import { ComponentMetadata } from '../types.js';
2
+ export declare const COMPONENT_CATALOG: ComponentMetadata[];
3
+ //# sourceMappingURL=component-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-catalog.d.ts","sourceRoot":"","sources":["../../src/data/component-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAwUhD,CAAC"}
@@ -0,0 +1,330 @@
1
+ export const COMPONENT_CATALOG = [
2
+ {
3
+ name: 'SwitchButtonComponent',
4
+ selector: 'switch-button',
5
+ description: 'Adwaita toggle switch component with fine-grained signals and programmatic control.',
6
+ category: 'form',
7
+ inputs: [
8
+ { name: 'checked', type: 'boolean | string', description: 'Initial checked state (supports boolean or "true")', default: 'false' },
9
+ { name: 'disabled', type: 'boolean | string', description: 'Whether the switch is interactive', default: 'false' }
10
+ ],
11
+ signals: [
12
+ { name: 'checked', type: 'Signal<boolean>', description: 'Current toggle state signal' },
13
+ { name: 'disabled', type: 'Signal<boolean>', description: 'Disabled state signal' }
14
+ ],
15
+ methods: [
16
+ { name: 'toggle', signature: 'toggle(): void', description: 'Toggles between checked and unchecked' },
17
+ { name: 'check', signature: 'check(): void', description: 'Sets state to checked' },
18
+ { name: 'uncheck', signature: 'uncheck(): void', description: 'Sets state to unchecked' }
19
+ ],
20
+ events: [
21
+ { name: 'change', description: 'Dispatched when state changes with detail: { checked: boolean }' }
22
+ ],
23
+ slots: [],
24
+ htmlExample: `<!-- Declarative attribute sync with parent signal -->
25
+ <switch-button checked="{{ isDarkMode() }}" onchange="handleThemeToggle($event)"></switch-button>`,
26
+ typescriptExample: `import { Component, signal, ViewChild } from '@purity/core';
27
+ import { SwitchButtonComponent } from '@components/switch-button/switch-button.component';
28
+
29
+ @Component({ selector: 'settings-view' })
30
+ export class SettingsView {
31
+ @ViewChild('switch-button')
32
+ toggleSwitch?: SwitchButtonComponent;
33
+
34
+ isDarkMode = signal(true);
35
+
36
+ handleThemeToggle(e: CustomEvent) {
37
+ this.isDarkMode.set(e.detail.checked);
38
+ }
39
+ }`
40
+ },
41
+ {
42
+ name: 'ModalViewComponent',
43
+ selector: 'modal-view',
44
+ description: 'Floating Adwaita dialog with open, close, maximize, backdrop blur, and slotted regions.',
45
+ category: 'overlay',
46
+ inputs: [
47
+ { name: 'is-open', type: 'boolean | string', description: 'Visibility state of the modal', default: 'false' },
48
+ { name: 'title', type: 'string', description: 'Modal header title text', default: '""' }
49
+ ],
50
+ signals: [
51
+ { name: 'isOpen', type: 'Signal<boolean>', description: 'Modal open/closed reactive state' },
52
+ { name: 'isMaximized', type: 'Signal<boolean>', description: 'Maximized full-screen state' }
53
+ ],
54
+ methods: [
55
+ { name: 'open', signature: 'open(): void', description: 'Opens the modal dialog' },
56
+ { name: 'close', signature: 'close(): void', description: 'Closes the modal dialog' },
57
+ { name: 'toggle', signature: 'toggle(): void', description: 'Toggles open/close state' },
58
+ { name: 'maximize', signature: 'maximize(): void', description: 'Toggles maximized state' }
59
+ ],
60
+ events: [
61
+ { name: 'modal-opened', description: 'Fired when modal opens' },
62
+ { name: 'modal-closed', description: 'Fired when modal closes' }
63
+ ],
64
+ slots: [
65
+ { name: 'header', description: 'Custom header content' },
66
+ { name: 'default', description: 'Body content' },
67
+ { name: 'footer', description: 'Action buttons / footer' }
68
+ ],
69
+ htmlExample: `<modal-view is-open="{{ showDialog() }}" title="Confirm Action">
70
+ <p>Are you sure you want to proceed?</p>
71
+ <div slot="footer">
72
+ <button class="button-default" onclick="showDialog.set(false)">Cancel</button>
73
+ <button class="button-primary" onclick="confirmAction()">Confirm</button>
74
+ </div>
75
+ </modal-view>`,
76
+ typescriptExample: `import { Component, signal } from '@purity/core';
77
+
78
+ @Component({ selector: 'user-manager' })
79
+ export class UserManager {
80
+ showDialog = signal(false);
81
+
82
+ confirmAction() {
83
+ this.showDialog.set(false);
84
+ }
85
+ }`
86
+ },
87
+ {
88
+ name: 'ExpanderComponent',
89
+ selector: 'expander',
90
+ description: 'Collapsible accordion card with animated header, toggle methods, and slot support.',
91
+ category: 'layout',
92
+ inputs: [
93
+ { name: 'title', type: 'string', description: 'Title displayed on the expander header', default: '""' },
94
+ { name: 'is-expanded', type: 'boolean | string', description: 'Whether the expander is currently open', default: 'false' }
95
+ ],
96
+ signals: [
97
+ { name: 'isExpanded', type: 'Signal<boolean>', description: 'Expanded reactive state signal' }
98
+ ],
99
+ methods: [
100
+ { name: 'toggle', signature: 'toggle(): void', description: 'Toggles expanded/collapsed state' },
101
+ { name: 'expand', signature: 'expand(): void', description: 'Expands the content' },
102
+ { name: 'collapse', signature: 'collapse(): void', description: 'Collapses the content' }
103
+ ],
104
+ events: [
105
+ { name: 'expander-toggled', description: 'Dispatched with detail: { expanded: boolean }' }
106
+ ],
107
+ slots: [
108
+ { name: 'header', description: 'Optional custom header content' },
109
+ { name: 'default', description: 'Collapsible body content' }
110
+ ],
111
+ htmlExample: `<!-- Direct structural repeater interoperability -->
112
+ <expander for="let section of sections" title="{{ section.name }}" is-expanded="{{ section.isOpen }}">
113
+ <p>{{ section.details }}</p>
114
+ </expander>`,
115
+ typescriptExample: `import { Component, signal } from '@purity/core';
116
+
117
+ @Component({ selector: 'faq-section' })
118
+ export class FaqSection {
119
+ sections = signal([
120
+ { name: 'Reactivity', isOpen: true, details: 'Synchronous signals with automatic tracking' },
121
+ { name: 'Components', isOpen: false, details: 'Native Custom Elements v1' }
122
+ ]);
123
+ }`
124
+ },
125
+ {
126
+ name: 'PopoverComponent',
127
+ selector: 'popover',
128
+ description: 'Anchored floating container with viewport collision auto-flipping and directional placement.',
129
+ category: 'overlay',
130
+ inputs: [
131
+ { name: 'is-open', type: 'boolean | string', description: 'Popover visibility state', default: 'false' },
132
+ { name: 'target', type: 'string', description: 'CSS selector or ID of anchor trigger element', default: '""' },
133
+ { name: 'placement', type: '"top" | "bottom" | "left" | "right"', description: 'Preferred anchor placement', default: '"bottom"' }
134
+ ],
135
+ signals: [
136
+ { name: 'isOpen', type: 'Signal<boolean>', description: 'Current open signal' }
137
+ ],
138
+ methods: [
139
+ { name: 'open', signature: 'open(): void', description: 'Shows the popover' },
140
+ { name: 'close', signature: 'close(): void', description: 'Hides the popover' },
141
+ { name: 'toggle', signature: 'toggle(): void', description: 'Toggles popover visibility' }
142
+ ],
143
+ events: [
144
+ { name: 'popover-opened', description: 'Dispatched when popover displays' },
145
+ { name: 'popover-closed', description: 'Dispatched when popover closes' }
146
+ ],
147
+ slots: [
148
+ { name: 'default', description: 'Popover card contents' }
149
+ ],
150
+ htmlExample: `<button id="btnOptions" class="button-default" onclick="showOptions.set(!showOptions())">Options</button>
151
+ <popover target="#btnOptions" is-open="{{ showOptions() }}" placement="bottom">
152
+ <div class="popover-menu">
153
+ <button onclick="edit()">Edit</button>
154
+ <button onclick="deleteItem()">Delete</button>
155
+ </div>
156
+ </popover>`,
157
+ typescriptExample: `import { Component, signal } from '@purity/core';
158
+
159
+ @Component({ selector: 'action-bar' })
160
+ export class ActionBar {
161
+ showOptions = signal(false);
162
+ }`
163
+ },
164
+ {
165
+ name: 'DateTimePickerComponent',
166
+ selector: 'date-time-picker',
167
+ description: 'Reactive calendar and time selector with body teleportation and Adwaita styling.',
168
+ category: 'form',
169
+ inputs: [
170
+ { name: 'value', type: 'string', description: 'ISO date string or current value', default: '""' },
171
+ { name: 'format', type: 'string', description: 'Date format string (e.g. "YYYY-MM-DD")', default: '"YYYY-MM-DD"' },
172
+ { name: 'mode', type: '"date" | "time" | "datetime"', description: 'Picker selection mode', default: '"date"' }
173
+ ],
174
+ signals: [
175
+ { name: 'selectedDate', type: 'Signal<Date | null>', description: 'Currently selected date signal' }
176
+ ],
177
+ methods: [
178
+ { name: 'open', signature: 'open(): void', description: 'Opens the calendar popup' },
179
+ { name: 'close', signature: 'close(): void', description: 'Closes the calendar popup' },
180
+ { name: 'setDate', signature: 'setDate(date: Date): void', description: 'Programmatically selects a date' }
181
+ ],
182
+ events: [
183
+ { name: 'date-change', description: 'Dispatched with detail: { date: Date, formatted: string }' }
184
+ ],
185
+ slots: [],
186
+ htmlExample: `<date-time-picker value="{{ eventDate() }}" ondate-change="handleDateSelect($event)"></date-time-picker>`,
187
+ typescriptExample: `import { Component, signal } from '@purity/core';
188
+
189
+ @Component({ selector: 'event-form' })
190
+ export class EventForm {
191
+ eventDate = signal('2026-10-28');
192
+ handleDateSelect(e: CustomEvent) {
193
+ this.eventDate.set(e.detail.formatted);
194
+ }
195
+ }`
196
+ },
197
+ {
198
+ name: 'LoaderComponent',
199
+ selector: 'loader-component',
200
+ description: 'Glassmorphic spinner and progress indicator with show/hide methods and message signal.',
201
+ category: 'overlay',
202
+ inputs: [
203
+ { name: 'is-loading', type: 'boolean | string', description: 'Loading state', default: 'false' },
204
+ { name: 'message', type: 'string', description: 'Optional status message text', default: '""' }
205
+ ],
206
+ signals: [
207
+ { name: 'isLoading', type: 'Signal<boolean>', description: 'Loading state signal' },
208
+ { name: 'message', type: 'Signal<string>', description: 'Current message signal' }
209
+ ],
210
+ methods: [
211
+ { name: 'show', signature: 'show(message?: string): void', description: 'Activates loader with optional message' },
212
+ { name: 'hide', signature: 'hide(): void', description: 'Hides loader' }
213
+ ],
214
+ events: [],
215
+ slots: [],
216
+ htmlExample: `<loader-component is-loading="{{ isFetching() }}" message="Syncing records..."></loader-component>`,
217
+ typescriptExample: `import { Component, signal } from '@purity/core';
218
+
219
+ @Component({ selector: 'data-grid' })
220
+ export class DataGrid {
221
+ isFetching = signal(false);
222
+ }`
223
+ },
224
+ {
225
+ name: 'ProfileAvatarComponent',
226
+ selector: 'profile-avatar',
227
+ description: 'User avatar displaying image, fallback initials, presence status badge, and custom sizing.',
228
+ category: 'widget',
229
+ inputs: [
230
+ { name: 'src', type: 'string', description: 'Avatar image URL', default: '""' },
231
+ { name: 'name', type: 'string', description: 'User full name for initial computation', default: '""' },
232
+ { name: 'status', type: '"online" | "offline" | "busy" | "away"', description: 'Presence indicator status', default: '"offline"' },
233
+ { name: 'size', type: '"sm" | "md" | "lg" | "xl"', description: 'Avatar dimensions', default: '"md"' }
234
+ ],
235
+ signals: [
236
+ { name: 'status', type: 'Signal<string>', description: 'Presence status signal' }
237
+ ],
238
+ methods: [],
239
+ events: [],
240
+ slots: [],
241
+ htmlExample: `<profile-avatar src="{{ user().avatar }}" name="{{ user().fullName }}" status="online" size="md"></profile-avatar>`,
242
+ typescriptExample: `import { Component, signal } from '@purity/core';
243
+
244
+ @Component({ selector: 'user-badge' })
245
+ export class UserBadge {
246
+ user = signal({ fullName: 'Ada Lovelace', avatar: '' });
247
+ }`
248
+ },
249
+ {
250
+ name: 'RadialContextMenuComponent',
251
+ selector: 'radial-context-menu',
252
+ description: 'Circular context menu with pie segments, icon badges, submenus, and mouse trigger.',
253
+ category: 'navigation',
254
+ inputs: [
255
+ { name: 'radius', type: 'number', description: 'Outer circle radius in pixels', default: '120' }
256
+ ],
257
+ signals: [
258
+ { name: 'isOpen', type: 'Signal<boolean>', description: 'Menu open signal' }
259
+ ],
260
+ methods: [
261
+ { name: 'openAt', signature: 'openAt(x: number, y: number): void', description: 'Opens menu at specific viewport coordinates' },
262
+ { name: 'close', signature: 'close(): void', description: 'Closes radial menu' }
263
+ ],
264
+ events: [
265
+ { name: 'item-selected', description: 'Dispatched with detail: { action: string, data?: any }' }
266
+ ],
267
+ slots: [
268
+ { name: 'default', description: 'Menu item icons and actions' }
269
+ ],
270
+ htmlExample: `<div oncontextmenu="handleContextMenu($event)">
271
+ Right click here
272
+ <radial-context-menu id="radialMenu"></radial-context-menu>
273
+ </div>`,
274
+ typescriptExample: `import { Component, ViewChild } from '@purity/core';
275
+ import { RadialContextMenuComponent } from '@components/radial-context-menu/radial-context-menu.component';
276
+
277
+ @Component({ selector: 'canvas-view' })
278
+ export class CanvasView {
279
+ @ViewChild('#radialMenu')
280
+ radialMenu?: RadialContextMenuComponent;
281
+
282
+ handleContextMenu(e: MouseEvent) {
283
+ e.preventDefault();
284
+ this.radialMenu?.openAt(e.clientX, e.clientY);
285
+ }
286
+ }`
287
+ },
288
+ {
289
+ name: 'NavigationMenuComponent',
290
+ selector: 'navigation-menu',
291
+ description: 'Draggable floating radial navigation bar with quick routes, glassmorphic backdrop, and Breeze cursors.',
292
+ category: 'navigation',
293
+ inputs: [],
294
+ signals: [
295
+ { name: 'isExpanded', type: 'Signal<boolean>', description: 'Menu expansion state signal' }
296
+ ],
297
+ methods: [
298
+ { name: 'toggle', signature: 'toggle(): void', description: 'Toggles expanded floating items' }
299
+ ],
300
+ events: [],
301
+ slots: [],
302
+ htmlExample: `<navigation-menu></navigation-menu>`,
303
+ typescriptExample: `import { Component } from '@purity/core';
304
+
305
+ @Component({ selector: 'app-root' })
306
+ export class AppRoot {}`
307
+ },
308
+ {
309
+ name: 'AnalogueClockComponent',
310
+ selector: 'analogue-clock',
311
+ description: '2D Canvas analogue clock widget with smooth sweep hands, configurable theme, and timezone support.',
312
+ category: 'widget',
313
+ inputs: [
314
+ { name: 'size', type: 'number', description: 'Canvas dimension in pixels', default: '200' },
315
+ { name: 'timezone', type: 'string', description: 'IANA timezone string (e.g. "UTC", "America/New_York")', default: '"local"' }
316
+ ],
317
+ signals: [
318
+ { name: 'currentTime', type: 'Signal<Date>', description: 'Current ticking clock time' }
319
+ ],
320
+ methods: [],
321
+ events: [],
322
+ slots: [],
323
+ htmlExample: `<analogue-clock size="240" timezone="UTC"></analogue-clock>`,
324
+ typescriptExample: `import { Component } from '@purity/core';
325
+
326
+ @Component({ selector: 'clock-dashboard' })
327
+ export class ClockDashboard {}`
328
+ }
329
+ ];
330
+ //# sourceMappingURL=component-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-catalog.js","sourceRoot":"","sources":["../../src/data/component-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { DocTopic } from '../types.js';
2
+ export interface DocEntry {
3
+ topic: DocTopic;
4
+ title: string;
5
+ summary: string;
6
+ content: string;
7
+ examples: string[];
8
+ }
9
+ export declare const DOCUMENTATION: Record<DocTopic, DocEntry>;
10
+ //# sourceMappingURL=documentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../src/data/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAooBpD,CAAC"}