Skill — Builder primitives

Supported node primitives for Component Builder.

Skill — Builder primitives

Copy the block below into your AI chat when the Skills index says to include this file.

GitHub: inked-colibri-skills

# Builder — Fresh Block Primitives

Use these when no existing component can be instanced. Build everything from frames, text, rectangles, and ellipses.

## Icon (circle)

```json
{
  "name": "Icon",
  "type": "ellipse",
  "width": 24,
  "height": 24,
  "fill": "#ef4444"
}
```

## Logo mark

```json
{
  "name": "Logo Mark",
  "type": "rectangle",
  "width": 32,
  "height": 32,
  "cornerRadius": 8,
  "fill": "#3b82f6"
}
```

## Simple button (raw)

```json
{
  "name": "Button",
  "type": "frame",
  "layout": "horizontal",
  "layoutSizingHorizontal": "hug",
  "layoutSizingVertical": "hug",
  "paddingTop": 8,
  "paddingBottom": 8,
  "paddingLeft": 16,
  "paddingRight": 16,
  "cornerRadius": 6,
  "fill": "#3b82f6",
  "primaryAxisAlignItems": "center",
  "counterAxisAlignItems": "center",
  "children": [
    {
      "name": "Label",
      "type": "text",
      "content": "Action",
      "fontSize": 14,
      "fontFamily": "Inter",
      "fontWeight": 500,
      "fill": "#ffffff"
    }
  ]
}
```

## Toggle

```json
{
  "name": "Toggle",
  "type": "frame",
  "layout": "horizontal",
  "layoutSizingHorizontal": "hug",
  "layoutSizingVertical": "hug",
  "paddingTop": 6,
  "paddingBottom": 6,
  "paddingLeft": 12,
  "paddingRight": 12,
  "cornerRadius": 20,
  "stroke": "#e2e8f0",
  "strokeWidth": 1,
  "itemSpacing": 8,
  "primaryAxisAlignItems": "center",
  "children": [
    {
      "name": "Knob",
      "type": "ellipse",
      "width": 16,
      "height": 16,
      "fill": "#fbbf24"
    },
    {
      "name": "Label",
      "type": "text",
      "content": "Theme",
      "fontSize": 13,
      "fontFamily": "Inter"
    }
  ]
}
```

## Nav item

```json
{
  "name": "Nav Item",
  "type": "frame",
  "layout": "horizontal",
  "layoutSizingHorizontal": "hug",
  "layoutSizingVertical": "hug",
  "paddingTop": 8,
  "paddingBottom": 8,
  "paddingLeft": 12,
  "paddingRight": 12,
  "cornerRadius": 4,
  "children": [
    {
      "name": "Label",
      "type": "text",
      "content": "Navigation",
      "fontSize": 14,
      "fontFamily": "Inter"
    }
  ]
}
```

## Card shell

```json
{
  "name": "Card",
  "type": "frame",
  "layout": "vertical",
  "layoutSizingHorizontal": "fixed",
  "layoutSizingVertical": "hug",
  "width": 320,
  "paddingTop": 24,
  "paddingBottom": 24,
  "paddingLeft": 24,
  "paddingRight": 24,
  "itemSpacing": 16,
  "cornerRadius": 12,
  "fill": "#ffffff",
  "stroke": "#e2e8f0",
  "strokeWidth": 1,
  "children": []
}
```

Always prefer binding to existing variables/styles when reference exports are present in the conversation. Fall back to the raw values shown above only when no matching paths exist.

Written by Narek Ch