{
  "name": "states",
  "kind": "bundled",
  "title": "States",
  "description": "Named values your setup can react to: the ones you declare, built-ins like the hour, the front app and the network, and what extensions publish. Set one by hand for a while, reset it, or declare a new one.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "glyph": "󰓹",
      "bg": "indigo"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/states@v0.9.1",
  "source": "https://github.com/zcag/pal/tree/HEAD/extensions/states",
  "commit": "63287e180ce349dac3aa87c68ce4c80bc42ad409",
  "manifest": {
    "name": "states",
    "title": "States",
    "description": "Named values your setup can react to: the ones you declare, built-ins like the hour, the front app and the network, and what extensions publish. Set one by hand for a while, reset it, or declare a new one.",
    "version": "0.1.0",
    "icon": {
      "tile": {
        "glyph": "󰓹",
        "bg": "indigo"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "keywords": [
      "state",
      "states",
      "variable",
      "working"
    ],
    "store": {
      "tagline": "See, set and declare the named states your setup reacts to",
      "category": "system",
      "features": [
        "Every state with its live value and where it comes from: set by hand, its expression, an extension, the default",
        "Hold one true or false for 15 minutes, an hour, three hours or until tomorrow, or type any value and duration",
        "New state adds one to your config file with an expression, a default and a description",
        "A bar item that shows while a state is held by hand, with the time left"
      ],
      "screenshots": [
        {
          "file": "1-list.png",
          "caption": "Every state with its value and which layer answers: its expression, set by hand with the time left, a publisher, built-in"
        },
        {
          "file": "2-held.png",
          "caption": "Tab steps through the filters: held by hand, yours, what extensions publish, the built-ins"
        },
        {
          "file": "3-actions.png",
          "caption": "Set a state for an hour, three, until tomorrow or a value typed, reset it, or remove it from the config"
        },
        {
          "file": "4-new.png",
          "caption": "New state writes [states.\u003cname\u003e] to the config: a name, an expression over the others, a default"
        },
        {
          "file": "bar-menubar.png",
          "caption": "On the menu bar only while a state is held by hand: its name and the time left",
          "kind": "bar"
        },
        {
          "file": "bar-menubar-two.png",
          "caption": "Two held: the soonest to run out first, the count after it",
          "kind": "bar"
        },
        {
          "file": "bar-popover.png",
          "caption": "A click opens the palette: every state with its value; Enter flips one, ⌘R resets it",
          "kind": "bar",
          "box": [
            334,
            64,
            840,
            960
          ]
        },
        {
          "file": "bar-sketchybar.png",
          "caption": "On sketchybar: the state and the time left on amber",
          "kind": "bar"
        }
      ]
    },
    "palettes": {
      "states": {
        "title": "States",
        "description": "Every state with its value and source; set one by hand, reset it, declare a new one.",
        "kind": "live",
        "tier": "normal",
        "keywords": [
          "state",
          "variable",
          "working"
        ],
        "keys": [
          {
            "keys": "enter",
            "title": "Toggle a boolean, or set the typed value"
          },
          {
            "keys": "cmd+r",
            "title": "Reset the manual value"
          },
          {
            "keys": "cmd+backspace",
            "title": "Remove the declaration from the config"
          }
        ]
      }
    },
    "bar": {
      "forced": {
        "title": "Held states",
        "description": "The states set by hand, with the time left on the soonest to expire; hidden while none is. A click opens the palette.",
        "refresh": {
          "every": 60,
          "on": [
            "state:*"
          ]
        },
        "mocks": {
          "one": {
            "title": "One state held for a while",
            "item": {
              "icon": "󰓹",
              "title": "working · 2 h 40 m",
              "color": "amber",
              "tooltip": "working = true, set by hand, 2 h 40 m left"
            }
          },
          "two": {
            "title": "Two states held",
            "item": {
              "icon": "󰓹",
              "title": "working · 40 m",
              "badge": 2,
              "color": "amber",
              "tooltip": "working = true (40 m), deep = true"
            }
          }
        }
      }
    }
  },
  "playable": false,
  "updated_at": "2026-09-30T01:45:08Z",
  "url": "https://pal.cagdas.io/extensions/states",
  "tagline": "See, set and declare the named states your setup reacts to",
  "category": "system",
  "screenshots": [
    "https://pal.cagdas.io/extensions/states/screenshots/1-list-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/1-list.png",
    "https://pal.cagdas.io/extensions/states/screenshots/2-held-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/2-held.png",
    "https://pal.cagdas.io/extensions/states/screenshots/3-actions-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/3-actions.png",
    "https://pal.cagdas.io/extensions/states/screenshots/4-new-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/4-new.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-two-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-two.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-sketchybar-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/states/screenshots/1-list.png",
    "https://pal.cagdas.io/extensions/states/screenshots/2-held.png",
    "https://pal.cagdas.io/extensions/states/screenshots/3-actions.png",
    "https://pal.cagdas.io/extensions/states/screenshots/4-new.png"
  ],
  "bar_screenshots": [
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-two.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/states/screenshots/1-list-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/2-held-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/3-actions-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/4-new-dark.png"
  ],
  "bar_screenshots_dark": [
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-two-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/states/screenshots/bar-sketchybar-dark.png"
  ],
  "has_bar": true,
  "bar_items": [
    {
      "id": "forced",
      "title": "Held states",
      "description": "The states set by hand, with the time left on the soonest to expire; hidden while none is. A click opens the palette.",
      "refresh": {
        "every": 60,
        "on": [
          "state:*"
        ]
      },
      "refresh_words": "every 1 min"
    }
  ],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": false
}
