syncfusion-angular-treeview
Implement hierarchical tree structures with Syncfusion Angular TreeView component. Use this when building tree-based UIs with features like checkboxes, drag-and-drop, node editing, filtering, and templating. This skill covers dynamic data binding, nested hierarchies, folder structures, and interactive tree-based interfaces.
What this skill does
# Implementing TreeView in Angular
The **TreeView** component displays hierarchical data in a tree-like structure with built-in support for interactive features including checkboxes, drag-and-drop, in-place editing, multi-selection, filtering, sorting, templating, and keyboard navigation. It's ideal for displaying file systems, organizational charts, category hierarchies, navigation menus, and any nested data structure.
## When to Use This Skill
- **Building hierarchical UIs**: Displaying parent-child data relationships
- **File/folder browsers**: Showing directory structures with expand/collapse
- **Navigation structures**: Creating menu systems or site hierarchies
- **Data organization**: Displaying categorized or nested data
- **Interactive selection**: Implementing multi-selection or checkbox-based selection
- **Drag-and-drop interfaces**: Reorganizing tree data by dragging nodes
- **Search/filter functionality**: Finding nodes in large tree structures
- **Customized appearances**: Styling nodes per level or with templates
## Navigation Guide
Choose your task below to navigate to the relevant reference documentation:
### Getting Started
๐ **Read:** [references/getting-started.md](references/getting-started.md)
When to read: Setting up TreeView for the first time, installing packages, importing modules, basic component initialization, CSS imports, theme selection, creating your first tree.
### Data Binding & Hierarchies
๐ **Read:** [references/data-binding.md](references/data-binding.md)
When to read: Connecting data sources to TreeView, binding hierarchical or self-referential data, using DataManager, loading data from remote APIs, implementing lazy loading (load on demand), dynamically updating tree data.
### Node Selection & Checkboxes
๐ **Read:** [references/node-selection.md](references/node-selection.md)
When to read: Enabling checkboxes, managing checkbox states (checked/unchecked/tri-state), implementing multi-selection vs single-selection, using selection events, getting selected node IDs, disabling checkboxes, removing parent checkboxes.
### Node Editing & Manipulation
๐ **Read:** [references/node-editing.md](references/node-editing.md)
When to read: Enabling in-place editing, adding/removing/updating nodes programmatically, validating edited text, moving nodes, using node manipulation methods (addNodes, removeNodes, updateNode, moveNodes).
### Drag and Drop
๐ **Read:** [references/drag-and-drop.md](references/drag-and-drop.md)
When to read: Enabling drag-and-drop functionality, restricting drops on specific nodes, handling drag events, customizing drop indicators, preventing invalid operations.
### Templating & Styling Nodes
๐ **Read:** [references/templating.md](references/templating.md)
When to read: Creating custom node templates, using dynamic icons, styling nodes based on level, customizing expand/collapse icons, showing tooltips, handling multi-line nodes, CSS customization.
### Filtering & Sorting
๐ **Read:** [references/filtering-sorting.md](references/filtering-sorting.md)
When to read: Filtering nodes by text, implementing search functionality, sorting nodes globally or per level, organizing tree display order.
### Context Menu Integration
๐ **Read:** [references/context-menu.md](references/context-menu.md)
When to read: Adding context menu for node operations, handling right-click actions, implementing add/edit/delete via menu, creating custom menu items.
### Accessibility, Advanced Features & API Migration
๐ **Read:** [references/accessibility-advanced.md](references/accessibility-advanced.md)
When to read: Keyboard navigation (arrow keys, Enter, Space), ARIA attributes and accessibility compliance, RTL (right-to-left) support, getting child nodes, accordion behavior, advanced methods, migrating from EJ1 to EJ2, performance optimization.
## Quick Start Example
Here's a minimal TreeView implementation with static hierarchical data:
```typescript
import { Component } from '@angular/core';
import { TreeViewModule } from '@syncfusion/ej2-angular-navigations';
import { FormsModule } from '@angular/forms';
@Component({
selector: 'app-tree-view',
standalone: true,
imports: [FormsModule, TreeViewModule],
template: `
<ejs-treeview
id="treeView"
[fields]="treeFields"
[allowMultiSelection]="true">
</ejs-treeview>
`
})
export class TreeViewComponent {
// Hierarchical data structure
treeData = [
{
id: '01',
name: 'Documents',
hasChild: true,
expanded: true,
subChild: [
{ id: '01-01', name: 'Work Files' },
{ id: '01-02', name: 'Personal' }
]
},
{
id: '02',
name: 'Downloads',
hasChild: true,
subChild: [
{ id: '02-01', name: 'Images' },
{ id: '02-02', name: 'Videos' }
]
}
];
// Field mapping configuration
treeFields = {
dataSource: this.treeData,
id: 'id',
text: 'name',
child: 'subChild',
hasChildren: 'hasChild',
expanded: 'expanded'
};
}
```
## Key TreeView Methods
| Method | Purpose |
|--------|---------|
| `addNodes(nodes, target?, index?, preventTargetExpand?)` | Add collection of nodes at target position |
| `removeNodes(nodeIds)` | Remove nodes by ID |
| `updateNode(target, newText)` | Replace node text (requires allowEditing enabled) |
| `moveNodes(sourceNodes, target, index?, preventTargetExpand?)` | Move nodes to new parent and index position |
| `getTreeData(nodeId?)` | Get all tree data or specific node data |
| `getAllCheckedNodes()` | Get all checked node IDs including child nodes whether loaded or not |
| `checkAll(nodes?)` | Check all or specific nodes |
| `uncheckAll(nodes?)` | Uncheck all or specific nodes |
| `beginEdit(nodeId)` | Start editing a node |
| `expandAll(nodes?, level?, excludeHiddenNodes?, preventAnimation?)` | Expand all or specific nodes, optionally by level |
| `collapseAll(nodes?, level?, excludeHiddenNodes?)` | Collapse all or specific nodes, optionally by level |
| `ensureVisible(nodeId)` | Scroll to make node visible |
| `disableNodes(nodeIds)` | Disable specific nodes |
| `enableNodes(nodeIds)` | Enable specific nodes |
| `getNode(nodeId)` | Get HTML element of node |
| `destroy()` | Destroy TreeView component |
## Key TreeView Events
| Event | Triggered When |
|-------|-----------------|
| `created` | TreeView component is created |
| `dataBound` | Data source binding is complete |
| `dataSourceChanged` | Tree data is modified (add/remove/update) |
| `nodeClicked` | User clicks on a node |
| `nodeSelected` | Node is selected |
| `nodeSelecting` | Before node selection (can prevent) |
| `nodeChecked` | Checkbox state changes |
| `nodeChecking` | Before checkbox changes (can prevent) |
| `nodeExpanding` | Before node expansion |
| `nodeExpanded` | Node is expanded |
| `nodeCollapsing` | Before node collapse |
| `nodeCollapsed` | Node is collapsed |
| `nodeEditing` | Before node text editing |
| `nodeEdited` | After node text is edited |
| `nodeDragStart` | Drag operation begins |
| `nodeDragging` | Node is being dragged |
| `nodeDragStop` | Drag ends before drop |
| `nodeDropped` | Node is dropped successfully |
| `drawNode` | Before rendering each node (customize appearance) |
| `keyPress` | User presses keyboard key |
| `destroyed` | TreeView component is destroyed |
## Common Patterns
### Pattern 1: Checkbox-Based Selection
Enable checkboxes for multi-selection with hierarchical checkbox states:
```typescript
treeFields = {
dataSource: this.treeData,
id: 'id',
text: 'name',
child: 'subChild',
hasChildren: 'hasChild'
};
showCheckBox = true; // Enable checkboxes
autoCheck = true; // Parent/child auto-check
```
### Pattern 2: File Browser with Drag-and-Drop
Create an interactive file browser with node reorganization:
```typescript
<ejs-treeview
[fields]="treeFields"
[allowDragAndDrop]="true"
[allowMultiSelection]="true"
(nodeDragging)="onNodeDraRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context โ no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes โ information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development โ guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.