261 lines
5.2 KiB
TypeScript
261 lines
5.2 KiB
TypeScript
import { define } from '@because/forge'
|
|
import { theme } from '../themes'
|
|
|
|
// Vitals Section
|
|
export const VitalsSection = define('VitalsSection', {
|
|
display: 'grid',
|
|
gridTemplateColumns: 'repeat(3, 1fr)',
|
|
gap: 24,
|
|
width: '100%',
|
|
maxWidth: 800,
|
|
variants: {
|
|
narrow: {
|
|
gap: 12,
|
|
},
|
|
},
|
|
})
|
|
|
|
export const VitalCard = define('VitalCard', {
|
|
background: theme('colors-bgElement'),
|
|
border: `1px solid ${theme('colors-border')}`,
|
|
borderRadius: theme('radius-md'),
|
|
padding: 24,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
gap: 16,
|
|
variants: {
|
|
narrow: {
|
|
padding: 12,
|
|
gap: 8,
|
|
},
|
|
},
|
|
})
|
|
|
|
export const VitalLabel = define('VitalLabel', {
|
|
fontSize: 12,
|
|
fontWeight: 600,
|
|
color: theme('colors-textFaint'),
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
})
|
|
|
|
export const GaugeContainer = define('GaugeContainer', {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
})
|
|
|
|
export const GaugeSvg = define('GaugeSvg', {
|
|
base: 'svg',
|
|
width: 120,
|
|
height: 70,
|
|
overflow: 'visible',
|
|
})
|
|
|
|
export const GaugeValue = define('GaugeValue', {
|
|
fontSize: 20,
|
|
fontWeight: 'bold',
|
|
fontFamily: theme('fonts-mono'),
|
|
color: theme('colors-text'),
|
|
marginTop: 20,
|
|
marginLeft: 5,
|
|
})
|
|
|
|
// Unified Logs Section
|
|
export const LogsSection = define('LogsSection', {
|
|
width: '100%',
|
|
maxWidth: 800,
|
|
flex: 1,
|
|
minHeight: 0,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
background: theme('colors-bgElement'),
|
|
border: `1px solid ${theme('colors-border')}`,
|
|
borderRadius: theme('radius-md'),
|
|
overflow: 'hidden',
|
|
})
|
|
|
|
export const LogsHeader = define('LogsHeader', {
|
|
display: 'flex',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
padding: '12px 16px',
|
|
borderBottom: `1px solid ${theme('colors-border')}`,
|
|
flexShrink: 0,
|
|
})
|
|
|
|
export const LogsTitle = define('LogsTitle', {
|
|
fontSize: 12,
|
|
fontWeight: 600,
|
|
color: theme('colors-textFaint'),
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
})
|
|
|
|
export const LogsClearButton = define('LogsClearButton', {
|
|
base: 'button',
|
|
background: theme('colors-border'),
|
|
border: 'none',
|
|
borderRadius: 4,
|
|
padding: '4px 10px',
|
|
fontSize: 11,
|
|
fontWeight: 600,
|
|
color: theme('colors-textMuted'),
|
|
cursor: 'pointer',
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.03em',
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
color: theme('colors-text'),
|
|
},
|
|
},
|
|
})
|
|
|
|
export const LogsTabs = define('LogsTabs', {
|
|
display: 'flex',
|
|
gap: 0,
|
|
})
|
|
|
|
export const LogsTab = define('LogsTab', {
|
|
base: 'button',
|
|
background: 'none',
|
|
border: 'none',
|
|
borderBottom: '2px solid transparent',
|
|
padding: '0 8px 8px',
|
|
fontSize: 11,
|
|
fontWeight: 600,
|
|
color: theme('colors-textFaint'),
|
|
cursor: 'pointer',
|
|
textTransform: 'uppercase',
|
|
letterSpacing: '0.05em',
|
|
selectors: {
|
|
'&:hover': {
|
|
color: theme('colors-text'),
|
|
},
|
|
},
|
|
variants: {
|
|
active: {
|
|
color: theme('colors-text'),
|
|
borderBottomColor: theme('colors-text'),
|
|
},
|
|
},
|
|
})
|
|
|
|
export const LogsBody = define('LogsBody', {
|
|
flex: 1,
|
|
minHeight: 0,
|
|
overflow: 'auto',
|
|
fontFamily: theme('fonts-mono'),
|
|
fontSize: 12,
|
|
lineHeight: 1.5,
|
|
})
|
|
|
|
export const LogEntry = define('LogEntry', {
|
|
display: 'flex',
|
|
gap: 8,
|
|
padding: '2px 16px',
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
},
|
|
},
|
|
variants: {
|
|
narrow: {
|
|
padding: '2px 8px',
|
|
},
|
|
},
|
|
})
|
|
|
|
export const LogTimestamp = define('LogTimestamp', {
|
|
color: theme('colors-textFaint'),
|
|
flexShrink: 0,
|
|
variants: {
|
|
narrow: {
|
|
display: 'none',
|
|
},
|
|
},
|
|
})
|
|
|
|
export const LogApp = define('LogApp', {
|
|
color: theme('colors-textMuted'),
|
|
flexShrink: 0,
|
|
minWidth: 80,
|
|
variants: {
|
|
narrow: {
|
|
minWidth: 50,
|
|
},
|
|
},
|
|
})
|
|
|
|
export const LogText = define('LogText', {
|
|
color: theme('colors-text'),
|
|
whiteSpace: 'pre-wrap',
|
|
wordBreak: 'break-all',
|
|
})
|
|
|
|
export const LogStatus = define('LogStatus', {
|
|
variants: {
|
|
success: { color: '#22c55e' },
|
|
error: { color: '#ef4444' },
|
|
warning: { color: '#f59e0b' },
|
|
},
|
|
})
|
|
|
|
// URL List
|
|
export const UrlLeft = define('UrlLeft', {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: 8,
|
|
minWidth: 0,
|
|
})
|
|
|
|
export const UrlLink = define('UrlLink', {
|
|
base: 'a',
|
|
color: theme('colors-link'),
|
|
textDecoration: 'none',
|
|
overflow: 'hidden',
|
|
textOverflow: 'ellipsis',
|
|
whiteSpace: 'nowrap',
|
|
selectors: {
|
|
'&:hover': { textDecoration: 'underline' },
|
|
},
|
|
})
|
|
|
|
export const UrlList = define('UrlList', {
|
|
width: '100%',
|
|
minWidth: 400,
|
|
maxWidth: 800,
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
background: theme('colors-bgElement'),
|
|
border: `1px solid ${theme('colors-border')}`,
|
|
borderRadius: theme('radius-md'),
|
|
overflow: 'hidden',
|
|
})
|
|
|
|
export const UrlPort = define('UrlPort', {
|
|
fontFamily: theme('fonts-mono'),
|
|
fontSize: 12,
|
|
color: theme('colors-textFaint'),
|
|
flexShrink: 0,
|
|
})
|
|
|
|
export const UrlRow = define('UrlRow', {
|
|
display: 'flex',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
padding: '10px 16px',
|
|
fontFamily: theme('fonts-mono'),
|
|
fontSize: 13,
|
|
selectors: {
|
|
'&:hover': {
|
|
background: theme('colors-bgHover'),
|
|
},
|
|
'&:not(:last-child)': {
|
|
borderBottom: `1px solid ${theme('colors-border')}`,
|
|
},
|
|
},
|
|
})
|