The Toes logo now links to a system-wide dashboard view that shows app and tool counts. This is the default view when first opening the web app. https://claude.ai/code/session_013L9HKHxMEoub76B1zuKive
253 lines
5.3 KiB
TypeScript
253 lines
5.3 KiB
TypeScript
import { define } from '@because/forge'
|
|
import { theme } from '../themes'
|
|
|
|
export const Layout = define('Layout', {
|
|
display: 'flex',
|
|
height: '100vh',
|
|
fontFamily: theme('fonts-sans'),
|
|
background: theme('colors-bg'),
|
|
color: theme('colors-text'),
|
|
})
|
|
|
|
export const Sidebar = define('Sidebar', {
|
|
width: 220,
|
|
borderRight: `1px solid ${theme('colors-border')}`,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
flexShrink: 0,
|
|
})
|
|
|
|
export const Logo = define('Logo', {
|
|
height: 64,
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'space-between',
|
|
padding: '0 16px',
|
|
fontSize: 20,
|
|
fontWeight: 'bold',
|
|
borderBottom: `1px solid ${theme('colors-border')}`,
|
|
})
|
|
|
|
export const LogoLink = define('LogoLink', {
|
|
cursor: 'pointer',
|
|
borderRadius: theme('radius-md'),
|
|
padding: '4px 8px',
|
|
margin: '-4px -8px',
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
},
|
|
},
|
|
})
|
|
|
|
export const HamburgerButton = define('HamburgerButton', {
|
|
base: 'button',
|
|
background: 'none',
|
|
border: 'none',
|
|
cursor: 'pointer',
|
|
padding: 4,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
justifyContent: 'center',
|
|
gap: 4,
|
|
selectors: {
|
|
'&:hover span': { background: theme('colors-text') },
|
|
},
|
|
})
|
|
|
|
export const HamburgerLine = define('HamburgerLine', {
|
|
width: 18,
|
|
height: 2,
|
|
background: theme('colors-textMuted'),
|
|
borderRadius: 1,
|
|
transition: 'background 0.15s',
|
|
})
|
|
|
|
export const SectionLabel = define('SectionLabel', {
|
|
padding: '16px 16px 8px',
|
|
fontSize: 12,
|
|
fontWeight: 600,
|
|
color: theme('colors-textFaint'),
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
})
|
|
|
|
export const SectionSwitcher = define('SectionSwitcher', {
|
|
display: 'flex',
|
|
gap: 0,
|
|
padding: '12px 16px',
|
|
borderBottom: `1px solid ${theme('colors-border')}`,
|
|
})
|
|
|
|
export const SectionTab = define('SectionTab', {
|
|
base: 'button',
|
|
flex: 1,
|
|
padding: '6px 12px',
|
|
background: 'none',
|
|
border: 'none',
|
|
cursor: 'pointer',
|
|
fontSize: 12,
|
|
fontWeight: 600,
|
|
color: theme('colors-textMuted'),
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
borderRadius: theme('radius-md'),
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
color: theme('colors-text'),
|
|
},
|
|
},
|
|
variants: {
|
|
active: {
|
|
background: theme('colors-bgSelected'),
|
|
color: theme('colors-text'),
|
|
},
|
|
},
|
|
})
|
|
|
|
export const AppList = define('AppList', {
|
|
flex: 1,
|
|
overflow: 'auto',
|
|
})
|
|
|
|
export const AppItem = define('AppItem', {
|
|
display: 'flex',
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
gap: 8,
|
|
padding: '8px 16px',
|
|
color: theme('colors-textMuted'),
|
|
textDecoration: 'none',
|
|
fontSize: 14,
|
|
cursor: 'pointer',
|
|
selectors: {
|
|
'&:hover': { background: theme('colors-bgHover'), color: theme('colors-text') },
|
|
},
|
|
variants: {
|
|
selected: { background: theme('colors-bgSelected'), color: theme('colors-text'), fontWeight: 500 },
|
|
},
|
|
})
|
|
|
|
export const SidebarFooter = define('SidebarFooter', {
|
|
padding: 16,
|
|
borderTop: `1px solid ${theme('colors-border')}`,
|
|
})
|
|
|
|
export const Main = define('Main', {
|
|
flex: 1,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
overflow: 'hidden',
|
|
})
|
|
|
|
export const MainHeader = define('MainHeader', {
|
|
height: 64,
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'space-between',
|
|
padding: '0 24px',
|
|
borderBottom: `1px solid ${theme('colors-border')}`,
|
|
})
|
|
|
|
export const MainTitle = define('MainTitle', {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: 8,
|
|
fontSize: 20,
|
|
fontWeight: 600,
|
|
margin: 0,
|
|
})
|
|
|
|
export const AppSelectorChevron = define('AppSelectorChevron', {
|
|
base: 'button',
|
|
background: 'none',
|
|
border: 'none',
|
|
cursor: 'pointer',
|
|
padding: '4px 8px',
|
|
marginLeft: 4,
|
|
fontSize: 14,
|
|
color: theme('colors-textMuted'),
|
|
selectors: {
|
|
'&:hover': { color: theme('colors-text') },
|
|
},
|
|
})
|
|
|
|
export const ClickableAppName = define('ClickableAppName', {
|
|
cursor: 'pointer',
|
|
borderRadius: theme('radius-md'),
|
|
padding: '2px 6px',
|
|
margin: '-2px -6px',
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
},
|
|
},
|
|
})
|
|
|
|
export const HeaderActions = define('HeaderActions', {
|
|
display: 'flex',
|
|
gap: 8,
|
|
})
|
|
|
|
export const MainContent = define('MainContent', {
|
|
flex: 1,
|
|
padding: '10px 24px',
|
|
overflow: 'auto',
|
|
})
|
|
|
|
export const DashboardContainer = define('DashboardContainer', {
|
|
flex: 1,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
padding: 40,
|
|
gap: 40,
|
|
})
|
|
|
|
export const DashboardHeader = define('DashboardHeader', {
|
|
textAlign: 'center',
|
|
})
|
|
|
|
export const DashboardTitle = define('DashboardTitle', {
|
|
fontSize: 48,
|
|
fontWeight: 'bold',
|
|
margin: 0,
|
|
marginBottom: 8,
|
|
})
|
|
|
|
export const DashboardSubtitle = define('DashboardSubtitle', {
|
|
fontSize: 16,
|
|
color: theme('colors-textMuted'),
|
|
margin: 0,
|
|
})
|
|
|
|
export const StatsGrid = define('StatsGrid', {
|
|
display: 'flex',
|
|
gap: 24,
|
|
})
|
|
|
|
export const StatCard = define('StatCard', {
|
|
background: theme('colors-bgElement'),
|
|
border: `1px solid ${theme('colors-border')}`,
|
|
borderRadius: theme('radius-md'),
|
|
padding: '24px 40px',
|
|
textAlign: 'center',
|
|
minWidth: 120,
|
|
})
|
|
|
|
export const StatValue = define('StatValue', {
|
|
fontSize: 36,
|
|
fontWeight: 'bold',
|
|
color: theme('colors-text'),
|
|
marginBottom: 4,
|
|
})
|
|
|
|
export const StatLabel = define('StatLabel', {
|
|
fontSize: 14,
|
|
color: theme('colors-textMuted'),
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
})
|