From 93ee54801067a8192a69c706350a3f0b6479f32d Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Wed, 1 Apr 2026 11:42:38 -0400 Subject: [PATCH 1/2] feat(ui): Add composite, button, and text components --- .../ui/src/ceramic/{button.ts => button.tsx} | 39 +++++++++++++--- packages/ui/src/ceramic/composite.tsx | 46 +++++++++++++++++++ packages/ui/src/ceramic/{text.ts => text.tsx} | 32 ++++++++++++- packages/ui/src/ceramic/variants.ts | 6 +-- 4 files changed, 113 insertions(+), 10 deletions(-) rename packages/ui/src/ceramic/{button.ts => button.tsx} (72%) create mode 100644 packages/ui/src/ceramic/composite.tsx rename packages/ui/src/ceramic/{text.ts => text.tsx} (68%) diff --git a/packages/ui/src/ceramic/button.ts b/packages/ui/src/ceramic/button.tsx similarity index 72% rename from packages/ui/src/ceramic/button.ts rename to packages/ui/src/ceramic/button.tsx index 21326c01cfe..7247499a922 100644 --- a/packages/ui/src/ceramic/button.ts +++ b/packages/ui/src/ceramic/button.tsx @@ -1,9 +1,11 @@ -import { style, variants } from './variants'; +import * as React from 'react'; + +import { Composite, type RenderProp } from './composite'; +import { type StyleRule, type VariantProps, style, variants } from './variants'; export const buttonStyles = variants({ base: style(theme => ({ appearance: 'none', - boxSizing: 'border-box', position: 'relative', display: 'inline-flex', alignItems: 'center', @@ -16,8 +18,6 @@ export const buttonStyles = variants({ fontFamily: theme.fontFamilies.sans, border: 'none', outline: 'none', - margin: 0, - paddingBlock: 0, paddingInline: theme.spacing[3], cursor: 'pointer', textDecoration: 'none', @@ -55,7 +55,7 @@ export const buttonStyles = variants({ }, })), variants: { - variant: { + color: { primary: style(theme => ({ background: theme.colors.purple[700], color: theme.colors.white, @@ -73,7 +73,34 @@ export const buttonStyles = variants({ }, }, defaultVariants: { - variant: 'primary', + color: 'primary', fullWidth: false, }, }); + +type ButtonVariantProps = VariantProps; + +type ButtonProps = ButtonVariantProps & { + render?: RenderProp; + sx?: StyleRule; +}; + +export const Button = React.forwardRef & ButtonProps>( + function Button(props, forwardedRef) { + const { render =