Go to file
2025-12-26 21:46:47 -08:00
examples fix js 2025-12-26 21:46:47 -08:00
src gucci 2025-12-26 21:41:36 -08:00
.gitignore FORGE 2025-12-26 19:11:01 -08:00
bun.lock FORGE 2025-12-26 19:11:01 -08:00
package.json temp tests 2025-12-26 20:38:17 -08:00
README.md gucci 2025-12-26 21:41:36 -08:00
server.tsx wip navigation example 2025-12-26 20:39:07 -08:00
tsconfig.json FORGE 2025-12-26 19:11:01 -08:00

forge

Example:

import { define } from "forge"

export const Button = define("button", {
  base: "button",

  padding: 20,
  background: "blue",

  variants: {
    kind: {
      danger: { background: "red" },
      warning: { background: "yellow" },
    }
  },
})

// Usage
<Button>Click me</Button>
<Button kind="danger">Click me carefully</Button>
<Button kind="warning">Click me?</Button>

export const Profile = define("div", {
  padding: 50,
  background: "red",

  parts: {
    Header: { display: "flex" },
    Avatar: { base: 'img', width: 50 },
    Bio: { color: "gray" },
  },

  variants: {
    size: {
      small: {
        parts: { Avatar: { width: 20 }}
      }
    }
  },

  render({ props, parts: { Root, Header, Avatar, Bio } }) {
    return (
      <Root>
        <Header>
          <Avatar src={props.pic} />
          <Bio>{props.bio}</Bio>
        </Header>
      </Root>
    )
  },
})

// Usage:
import { Profile } from './whatever'

<Profile pic={user.pic} bio={user.bio} />