Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - TypeComposer/skill: The official TypeComposer Agent Skill · GitHub
Skip to content

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

TypeComposer Skill for AI Coding Agents

A Skills.sh-compatible AI coding-agent skill for developers building TypeComposer applications and components.

Install

npx skills add TypeComposer/skill

What this skill helps with

Once installed, any Skills.sh-compatible AI agent gains deep, accurate knowledge of TypeComposer's APIs so it can:

TaskWhat the agent does
Scaffold new componentsGenerates TypeScript class-based components with correct onInit lifecycle and element imports — no JSX/HTML templates
Layout compositionUses VBox, HBox, BorderPanel, GridPanel, FlowPanel, ScrollPanel, StackPanel, and other layout primitives correctly
Reactive stateUses ref(), typed ref variants (RefString, RefNumber, RefBoolean, RefList, RefMap, RefSet, RefState), and Computed with proper subscription and cleanup patterns
RoutingConfigures Router.create() with RoutePage[], RouterGuard, nested routes, dynamic params, and Router.go() navigation
Dependency injectionApplies @Service / @Inject decorators with InjectedType scope options
Composing with built-in elementsUses ButtonElement, H1Element, ImageElement, SpanElement, and the full typed element catalogue from typecomposer
Anti-pattern avoidancePrevents JSX mental-model leakage, unsafe innerHTML for user content, and ad-hoc DOM trees where TypeComposer primitives exist
App bootstrappingUses App.setPage() correctly, understands Router lifecycle integration

Quick start

npm create typecomposer@latest

Minimal TypeComposer app

// main.tsimport{App,BorderPanel,VBox,H1Element,ButtonElement}from"typecomposer";exportclassMyPageextendsBorderPanel{privatecount=0;onInit(): void{constvbox=newVBox({justifyContent: "center",alignItems: "center"});vbox.append(newH1Element({text: "Hello TypeComposer"}));constbtn=newButtonElement({text: "Click me"});btn.onclick=()=>{this.count++;btn.text=`Clicked ${this.count}×`;};vbox.append(btn);this.center=vbox;}}App.setPage(newMyPage());

Repo layout

README.md ← this file (human-facing)
SKILL.md ← agent-facing instructions (YAML frontmatter + rules)
references/
component-patterns.md ← class/lifecycle/element patterns
layout-patterns.md ← VBox, HBox, BorderPanel, Grid, Flow, Scroll …
reactivity-patterns.md ← ref(), typed refs, Computed, subscribe/listen
routing-patterns.md ← Router.create, RoutePage, RouterGuard, RouteView
dependency-injection.md ← @Service, @Inject, InjectedType
anti-patterns.md ← what NOT to do
examples.md ← full worked examples

Links

About

The official TypeComposer Agent Skill

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors