---
name: arcgis-coding-components
description: Embed an Arcade expression editor in applications using the Coding Components package. Use for building Arcade authoring, testing, and debugging interfaces.
---
# ArcGIS Coding Components
Use this skill when embedding an Arcade expression editor into a web application. The `@arcgis/coding-components` package provides the `arcgis-arcade-editor` web component - a full-featured code editor for writing, testing, and debugging Arcade expressions. This is a **new component package in 5.0** with no 4.x equivalent.
## Import Patterns
### CDN (No Build Tools)
```html
```
### Direct ESM Imports (Build Tools)
```javascript
import "@arcgis/coding-components/components/arcgis-arcade-editor";
```
## arcgis-arcade-editor Component
A rich code editor for Arcade expressions with syntax highlighting, diagnostics, code suggestions, and a documentation side panel.
### Properties
| Property | Attribute | Type | Default | Description |
| -------------------------- | -------------------------- | --------------------------------------- | -------- | ---------------------------------------------------------------------- |
| `script` | `script` | `string` | `""` | The Arcade script content (read/write) |
| `profile` | - | `IEditorProfileDefinition` | - | Profile metadata defining the editing context (set via JS) |
| `testData` | - | `IEditorTestContext` | - | Test data context for expression validation (set via JS) |
| `snippets` | - | `ApiSnippet[]` | - | Collection of code snippets to show in the snippets panel (set via JS) |
| `suggestions` | - | `IEditorCodeSuggestion[]` | - | Code suggestions shown to the user (set via JS) |
| `editorOptions` | - | `IEditorOptions & IGlobalEditorOptions` | - | Monaco-style editor options (set via JS) |
| `hideSideBar` | `hide-side-bar` | `boolean` | `false` | Hide the side action bar for a minimal UI |
| `hideDocumentationActions` | - | `boolean` | `false` | Hide the documentation action in the side panel |
| `openedSidePanel` | `opened-side-panel` | `string` | `"none"` | Name of the currently opened side panel |
| `sideActionBarExpanded` | `side-action-bar-expanded` | `boolean` | `false` | Whether the side action bar is expanded |
### Methods
| Method | Returns | Description |
| -------------------- | --------------- | ------------------------------------------- |
| `setFocus()` | `void` | Set focus on the editor |
| `componentOnReady()` | `Promise` | Resolves when the component is fully loaded |
### Events
| Event | Detail | Description |
| ------------------------- | -------------- | ------------------------------------------------- |
| `arcgisScriptChange` | `string` | Fired when the script content changes (debounced) |
| `arcgisDiagnosticsChange` | `Diagnostic[]` | Fired when diagnostics (errors/warnings) change |
## Basic Usage
### Minimal Editor
```html
```
### Listening for Script Changes
```html
```
### Editor with Profile Context
```javascript
const editor = document.querySelector("arcgis-arcade-editor");
// Define the editing profile - tells the editor what variables are available
editor.profile = {
id: "popup",
title: "Popup Expression",
description: "Expression for popup content",
variables: [
{
name: "$feature",
type: "Feature",
description: "The current feature",
},
{
name: "$layer",
type: "FeatureSet",
description: "The feature's parent layer",
},
],
};
```
### Editor with Test Data
```javascript
const editor = document.querySelector("arcgis-arcade-editor");
// Provide test data for expression validation
editor.testData = {
spatialReference: { wkid: 4326 },
features: [
{
attributes: {
Name: "Test Feature",
Population: 50000,
Area: 125.5,
},
geometry: {
type: "point",
x: -118.24,
y: 34.05,
},
},
],
fields: [
{ name: "Name", type: "esriFieldTypeString", alias: "Name" },
{ name: "Population", type: "esriFieldTypeInteger", alias: "Population" },
{ name: "Area", type: "esriFieldTypeDouble", alias: "Area" },
],
};
```
### Editor with Custom Snippets
```javascript
const editor = document.querySelector("arcgis-arcade-editor");
editor.snippets = [
{
name: "Format Currency",
description: "Format a number as US currency",
code: 'Text($feature.Value, "$#,###.00")',
},
{
name: "Concatenate Fields",
description: "Join two text fields with a separator",
code: 'Concatenate([$feature.FirstName, $feature.LastName], " ")',
},
];
```
### Minimal Editor (No Side Bar)
```html
```
## Full Example with Map Integration
```html
Arcade Editor
```
## Common Pitfalls
1. **Missing coding-components script**: The `arcgis-arcade-editor` element must be loaded separately from the core SDK.
```html
```
```html
```
**Impact:** The element is unrecognized and renders as empty.
2. **No size on the editor**: The editor needs explicit width and height to render.
```html
```
```html
```
**Impact:** The editor renders with zero height and is invisible.
3. **Setting `profile` or `testData` as HTML attributes**: These properties accept complex objects and must be set via JavaScript.
**Impact:** Values are silently ignored; the editor lacks context for autocompletion and validation.
4. **Not debouncing `arcgisScriptChange`**: The event fires on every keystroke (debounced internally but can still be frequent). Avoid expensive operations in the handler.
```javascript
// Anti-pattern: expensive operation on every change
editor.addEventListener("arcgisScriptChange", async (event) => {
await compileAndExecuteArcade(event.detail); // too frequent
});
```
```javascript
// Correct: add your own debounce for expensive operations
let timeout;
editor.addEventListener("arcgisScriptChange", (event) => {
clearTimeout(timeout);
timeout = setTimeout(() => {
compileAndExecuteArcade(event.detail);
}, 500);
});
```
**Impact:** UI freezes or excessive server requests during typing.
## Reference Samples
- Search for Arcade-related samples that demonstrate expression editing workflows.
## Related Skills
- See `arcgis-arcade` for Arcade expression language syntax and usage patterns.
- See `arcgis-widgets-ui` for layout components to host the editor panel.
- See `arcgis-popup-templates` for using Arcade expressions in popup content.
- See `arcgis-visualization` for Arcade-driven visual variables and renderers.