{
  "$schema": "https://pi-tui.ratstack.sh/schema/pattern.schema.json",
  "aka": [
    "Keyed status slot"
  ],
  "animated": false,
  "apis": [
    {
      "name": "ctx.ui.setStatus",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    }
  ],
  "applicability": [
    "Use this when an operation's state fits in one short label."
  ],
  "category": "status",
  "categoryLabel": "Status and widgets",
  "consequences": [
    "Stable keys isolate compact status ownership.",
    "Every lifecycle exit must clear its own key."
  ],
  "family": "structural",
  "familyLabel": "Structural",
  "id": "keyed-slot",
  "implementation": [
    "Clear the same key when its state ends.",
    "Clearing one key does not clear other operations.",
    "Reject updates from stale contexts."
  ],
  "intent": "Publish and clear compact state under one stable footer key.",
  "jsonUrl": "https://pi-tui.ratstack.sh/patterns/keyed-slot.json",
  "kind": "screen",
  "knownUses": [
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "extensions/rp-native-tools-lock/index.ts",
          "lines": "105-118",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/rp-native-tools-lock/index.ts#L105-L118"
        },
        {
          "file": "extensions/ephemeral-mode.ts",
          "lines": "34-70",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/ephemeral-mode.ts#L34-L70"
        },
        {
          "file": "extensions/pi-codex-goal/src/goal-runtime-status.ts",
          "lines": "1-15",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/pi-codex-goal/src/goal-runtime-status.ts#L1-L15"
        },
        {
          "file": "extensions/stash/index.ts",
          "lines": "34-72",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/stash/index.ts#L34-L72"
        },
        {
          "file": "extensions/poly-notify/index.ts",
          "lines": "315-335",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/poly-notify/index.ts#L315-L335"
        }
      ],
      "repo": "dot314",
      "repoUrl": "https://github.com/nicobailon/dot314",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "54-57",
          "sha": "cebb68de",
          "url": "https://github.com/nicobailon/pi-annotate/blob/cebb68deb28dcc6422d2846a2a36e5e20ca31725/index.ts#L54-L57"
        }
      ],
      "repo": "pi-annotate",
      "repoUrl": "https://github.com/nicobailon/pi-annotate",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "1422-1445",
          "sha": "1a5985b2",
          "url": "https://github.com/nicobailon/pi-boomerang/blob/1a5985b2d92cfa84ce1f470d100d02b368711a91/index.ts#L1422-L1445"
        },
        {
          "file": "index.ts",
          "lines": "1155-1170",
          "sha": "1a5985b2",
          "url": "https://github.com/nicobailon/pi-boomerang/blob/1a5985b2d92cfa84ce1f470d100d02b368711a91/index.ts#L1155-L1170"
        }
      ],
      "repo": "pi-boomerang",
      "repoUrl": "https://github.com/nicobailon/pi-boomerang",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "202-205",
          "sha": "b254ece4",
          "url": "https://github.com/nicobailon/pi-model-switch/blob/b254ece4fe90d34938fdd69c975379041dce9c53/index.ts#L202-L205"
        }
      ],
      "repo": "pi-model-switch",
      "repoUrl": "https://github.com/nicobailon/pi-model-switch",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "784-797",
          "sha": "6da20591",
          "url": "https://github.com/nicobailon/pi-prompt-template-model/blob/6da205917e549cbe8e855c1d241c616ae1fb1627/index.ts#L784-L797"
        },
        {
          "file": "index.ts",
          "lines": "1578-1590",
          "sha": "6da20591",
          "url": "https://github.com/nicobailon/pi-prompt-template-model/blob/6da205917e549cbe8e855c1d241c616ae1fb1627/index.ts#L1578-L1590"
        },
        {
          "file": "index.ts",
          "lines": "1757-1765",
          "sha": "6da20591",
          "url": "https://github.com/nicobailon/pi-prompt-template-model/blob/6da205917e549cbe8e855c1d241c616ae1fb1627/index.ts#L1757-L1765"
        }
      ],
      "repo": "pi-prompt-template-model",
      "repoUrl": "https://github.com/nicobailon/pi-prompt-template-model",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "16-22",
          "sha": "878d1a50",
          "url": "https://github.com/nicobailon/pi-review-loop/blob/878d1a50ceff4ae6d76b99ea0a715a4b2ba28a11/index.ts#L16-L22"
        }
      ],
      "repo": "pi-review-loop",
      "repoUrl": "https://github.com/nicobailon/pi-review-loop",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "keyed-status-slots",
      "moreRefs": 0,
      "refs": [
        {
          "file": "index.ts",
          "lines": "440-450",
          "sha": "a62e7c2c",
          "url": "https://github.com/nicobailon/pi-rewind-hook/blob/a62e7c2c89d130b3a02f7f799c15de62743d3fa8/index.ts#L440-L450"
        }
      ],
      "repo": "pi-rewind-hook",
      "repoUrl": "https://github.com/nicobailon/pi-rewind-hook",
      "title": "Own and clear a named status slot"
    },
    {
      "example": "upstream-preset-picker",
      "moreRefs": 0,
      "refs": [
        {
          "file": "extensions/preset.ts",
          "lines": "1-18",
          "sha": "17cce138",
          "url": "https://github.com/nicobailon/dot314/blob/17cce138f3f687211d0485d204408a9650953c61/extensions/preset.ts#L1-L18"
        }
      ],
      "repo": "dot314",
      "repoUrl": "https://github.com/nicobailon/dot314",
      "title": "Upstream-derived preset picker and status"
    }
  ],
  "linkedFrom": [
    {
      "how": "supplies keyed footer signals",
      "id": "status-ribbon",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/status-ribbon.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/status-ribbon.md",
      "name": "Status Ribbon",
      "url": "https://pi-tui.ratstack.sh/patterns/status-ribbon/"
    }
  ],
  "links": {
    "agentGuide": "https://pi-tui.ratstack.sh/llms.txt",
    "index": "https://pi-tui.ratstack.sh/patterns.md",
    "skill": "https://pi-tui.ratstack.sh/skills/build-pi-tui-component.md"
  },
  "mdUrl": "https://pi-tui.ratstack.sh/patterns/keyed-slot.md",
  "motivation": "Nico's status helpers need to clear one operation without clearing concurrent footer signals.",
  "name": "Keyed Slot",
  "participants": [
    {
      "name": "ctx.ui.setStatus",
      "role": "Writes or clears one named footer slot.",
      "url": "https://github.com/earendil-works/pi/blob/v1.0.3/packages/coding-agent/docs/extensions.md#interact-with-the-user"
    },
    {
      "name": "Slot owner",
      "role": "Chooses a stable key and clears it when its state ends.",
      "url": null
    }
  ],
  "pi": "1.0.3",
  "related": [
    {
      "how": "adds a deadline to the slot",
      "id": "notice-fuse",
      "jsonUrl": "https://pi-tui.ratstack.sh/patterns/notice-fuse.json",
      "mdUrl": "https://pi-tui.ratstack.sh/patterns/notice-fuse.md",
      "name": "Notice Fuse",
      "url": "https://pi-tui.ratstack.sh/patterns/notice-fuse/"
    }
  ],
  "sampleCode": {
    "code": "// Keyed Slot: clear one stable footer key without clearing another operation.\nimport type { PatternStory } from \"../../../src/pattern.ts\";\n\nexport const story: PatternStory = {\n  id: \"keyed-slot\", title: \"Keyed Slot\", kind: \"screen\",\n  apis: [\"ctx.ui.setStatus\"],\n  states: [\n    { id: \"active\", label: \"Owned status\" },\n    { id: \"cleared\", label: \"One slot cleared\", steps: [{ type: \"action\", name: \"clear-lint\" }] },\n  ],\n  setup({ ui, theme, action }) {\n    const lintKey = \"lint\";\n    const runKey = \"run\";\n    // Two owners can publish to the footer at once.\n    const showLint = () => ui.setStatus(lintKey, theme.fg(\"warning\", \"2/3\"));\n    const showRun = () => ui.setStatus(runKey, theme.fg(\"success\", \"ready\"));\n    const clearLint = () => ui.setStatus(lintKey, undefined);\n    const clearRun = () => ui.setStatus(runKey, undefined);\n\n    ui.setEditorText(\"Review src/tasks.ts\");\n    ui.setWorkingMessage(\"Checking sample code\");\n    showLint();\n    showRun();\n    action(\"clear-lint\", () => {\n      clearLint();\n      // The independent run slot remains ready.\n      ui.setWorkingMessage(\"\");\n      ui.notify(\"Sample-code check complete\");\n    });\n\n    // All lifecycle exits clear precisely the keys this example owns.\n    return () => {\n      clearLint();\n      clearRun();\n      ui.setWorkingMessage(\"\");\n    };\n  },\n};\n",
    "lang": "ts",
    "path": "stories/patterns/structural/keyed-slot.ts"
  },
  "states": [
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Keyed Slot, Owned status state, 40 columns, dark theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-40-dark.af1dd3ad52b9.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Keyed Slot, Owned status state, 40 columns, light theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-40-light.88bb4a6eb7d8.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Keyed Slot, Owned status state, 60 columns, dark theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-60-dark.1af2e5deade2.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Keyed Slot, Owned status state, 60 columns, light theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-60-light.4c87dbdc754a.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Keyed Slot, Owned status state, 80 columns, dark theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-80-dark.be59cade8c8d.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Keyed Slot, Owned status state, 80 columns, light theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-80-light.61b13fa2646f.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Keyed Slot, Owned status state, 120 columns, dark theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-120-dark.e2c016440b01.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Keyed Slot, Owned status state, 120 columns, light theme, 10 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 440,
          "rows": 10,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/active-120-light.3c75f32564c2.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Show two independent synthetic operation labels.",
      "id": "active",
      "label": "Owned status",
      "problems": []
    },
    {
      "dont": false,
      "expectFail": [],
      "frames": [
        {
          "alt": "Keyed Slot, One slot cleared state, 40 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-40-dark.f17d649dc2d2.webp",
          "theme": "dark",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 40 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-40-light.d032968a6bc5.webp",
          "theme": "light",
          "w": 800,
          "width": 40
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 60 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-60-dark.ba58bc287194.webp",
          "theme": "dark",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 60 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-60-light.67654098c67b.webp",
          "theme": "light",
          "w": 1200,
          "width": 60
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 80 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-80-dark.2ef742545372.webp",
          "theme": "dark",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 80 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-80-light.fef45355610f.webp",
          "theme": "light",
          "w": 1600,
          "width": 80
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 120 columns, dark theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-120-dark.b952dd837fe4.webp",
          "theme": "dark",
          "w": 2400,
          "width": 120
        },
        {
          "alt": "Keyed Slot, One slot cleared state, 120 columns, light theme, 11 rows",
          "animated": false,
          "animation": null,
          "checks": [
            {
              "evidence": [],
              "name": "width",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "style-leak",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "hard-coded-colour",
              "status": "pass",
              "verdict": "pass"
            },
            {
              "evidence": [],
              "name": "height",
              "status": "pass",
              "verdict": "pass"
            }
          ],
          "h": 484,
          "rows": 11,
          "still": "https://pi-tui.ratstack.sh/frames/keyed-slot/cleared-120-light.3360985e3f36.webp",
          "theme": "light",
          "w": 2400,
          "width": 120
        }
      ],
      "how": "Remove one owned key while the other remains.",
      "id": "cleared",
      "label": "One slot cleared",
      "problems": []
    }
  ],
  "structure": "owner -> setStatus(key, text)\nend -> setStatus(key, undefined)",
  "thumbnails": {
    "dark": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/keyed-slot/dark.3c14f90fec3b.webp"
    },
    "light": {
      "animation": null,
      "src": "https://pi-tui.ratstack.sh/thumbs/keyed-slot/light.403836e8f970.webp"
    }
  },
  "url": "https://pi-tui.ratstack.sh/patterns/keyed-slot/",
  "widths": [
    40,
    60,
    80,
    120
  ]
}
