{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "homepage": "https://formula2030.alexandrejoly.me",
  "items": [
    {
      "name": "formula",
      "type": "registry:item",
      "title": "Formula 2030",
      "description": "The tokens every Formula 2030 component reads: the glass, the tonal ramp, the tiles, the metals and the signal colours.",
      "categories": [
        "theme"
      ],
      "files": [
        {
          "path": "registry/formula/ui/formula/tokens.css",
          "type": "registry:file",
          "target": "@ui/formula/tokens.css"
        }
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Stacked tonal bands whose plus turns into a minus as the band turns to ink and its panel opens on a light tone.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "strata"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/accordion.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/accordion.tsx"
        },
        {
          "path": "registry/formula/ui/formula/accordion.css",
          "type": "registry:file",
          "target": "@ui/formula/accordion.css"
        }
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "A key cap standing on a solid skirt: a press sinks it flush, and it stays down while its action runs.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/button.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/button.tsx"
        },
        {
          "path": "registry/formula/ui/formula/button.css",
          "type": "registry:file",
          "target": "@ui/formula/button.css"
        }
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "A small square well: checked seats a dark milled cap in it, and the mixed state is a single engraved bar.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/checkbox.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/checkbox.tsx"
        },
        {
          "path": "registry/formula/ui/formula/checkbox.css",
          "type": "registry:file",
          "target": "@ui/formula/checkbox.css"
        }
      ]
    },
    {
      "name": "glass",
      "type": "registry:ui",
      "title": "Glass",
      "description": "The black display the readout components sit on, with optional corner brackets.",
      "dependencies": [],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "readout"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/glass.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/glass.tsx"
        },
        {
          "path": "registry/formula/ui/formula/glass.css",
          "type": "registry:file",
          "target": "@ui/formula/glass.css"
        }
      ]
    },
    {
      "name": "knob",
      "type": "registry:ui",
      "title": "Knob",
      "description": "A knurled metal dial in a ring of ticks: dragging up turns its index dot and lights the ticks up to the value.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/knob.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/knob.tsx"
        },
        {
          "path": "registry/formula/ui/formula/knob.css",
          "type": "registry:file",
          "target": "@ui/formula/knob.css"
        }
      ]
    },
    {
      "name": "meter",
      "type": "registry:ui",
      "title": "Meter",
      "description": "A ruler that reads a measurement: ticks light up to the value and a square marker sits at the reading, horizontal or vertical.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "readout"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/meter.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/meter.tsx"
        },
        {
          "path": "registry/formula/ui/formula/meter.css",
          "type": "registry:file",
          "target": "@ui/formula/meter.css"
        }
      ]
    },
    {
      "name": "number-input",
      "type": "registry:ui",
      "title": "Number Input",
      "description": "A large thin numeral over a pair of engraved stepper arrows, with a knurled grip to drag the value.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/number-input.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/number-input.tsx"
        },
        {
          "path": "registry/formula/ui/formula/number-input.css",
          "type": "registry:file",
          "target": "@ui/formula/number-input.css"
        }
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "A ruler for a task that advances: ticks light up to the value, and a short run of lit ticks travels the scale while the progress is unknown.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "readout"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/progress.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/progress.tsx"
        },
        {
          "path": "registry/formula/ui/formula/progress.css",
          "type": "registry:file",
          "target": "@ui/formula/progress.css"
        }
      ]
    },
    {
      "name": "radio",
      "type": "registry:ui",
      "title": "Radio",
      "description": "A list of tonal option rows, each with a square marker: the checked row turns to ink and its marker fills.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "strata"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/radio.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/radio.tsx"
        },
        {
          "path": "registry/formula/ui/formula/radio.css",
          "type": "registry:file",
          "target": "@ui/formula/radio.css"
        }
      ]
    },
    {
      "name": "segmented-control",
      "type": "registry:ui",
      "title": "Segmented Control",
      "description": "Tonal bands stepping from dark to light, with a block of ink that slides to the choice.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "strata"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/segmented-control.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/segmented-control.tsx"
        },
        {
          "path": "registry/formula/ui/formula/segmented-control.css",
          "type": "registry:file",
          "target": "@ui/formula/segmented-control.css"
        }
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "A ruler: ticks light up to the value and a square marker rides the scale.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "readout"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/slider.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/slider.tsx"
        },
        {
          "path": "registry/formula/ui/formula/slider.css",
          "type": "registry:file",
          "target": "@ui/formula/slider.css"
        }
      ]
    },
    {
      "name": "sound",
      "type": "registry:ui",
      "title": "Sound",
      "description": "Interaction sounds for every Formula component, synthesised in the browser: keys thock, knobs tick, bands thud, rulers blip. Mount it once; it ships no audio files.",
      "dependencies": [],
      "registryDependencies": [],
      "meta": {
        "register": "all"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/sound.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/sound.tsx"
        }
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "A rotary knob in a ring: on turns its slot upright.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/switch.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/switch.tsx"
        },
        {
          "path": "registry/formula/ui/formula/switch.css",
          "type": "registry:file",
          "target": "@ui/formula/switch.css"
        }
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "A run of tonal bands with a block of ink that slides to the selected tab, above or beside a flat light panel.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "strata"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/tabs.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/tabs.tsx"
        },
        {
          "path": "registry/formula/ui/formula/tabs.css",
          "type": "registry:file",
          "target": "@ui/formula/tabs.css"
        }
      ]
    },
    {
      "name": "tile",
      "type": "registry:ui",
      "title": "Tile",
      "description": "A machined tile for one control, with a lamp that lights while the control is on.",
      "dependencies": [],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/tile.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/tile.tsx"
        },
        {
          "path": "registry/formula/ui/formula/tile.css",
          "type": "registry:file",
          "target": "@ui/formula/tile.css"
        }
      ]
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "A latching key that stays sunk while pressed and lights the engraved bar under its content; a group lines keys up along shared seams.",
      "dependencies": [
        "@ui-sdk/react@0.1.0-beta.2",
        "@ui-sdk/core@0.1.0-beta.2"
      ],
      "registryDependencies": [
        "https://formula2030.alexandrejoly.me/r/formula.json"
      ],
      "meta": {
        "register": "machined"
      },
      "files": [
        {
          "path": "registry/formula/ui/formula/toggle.tsx",
          "type": "registry:ui",
          "target": "@ui/formula/toggle.tsx"
        },
        {
          "path": "registry/formula/ui/formula/toggle.css",
          "type": "registry:file",
          "target": "@ui/formula/toggle.css"
        }
      ]
    }
  ],
  "name": "formula2030"
}
