Files
big-agi/src/modules/blocks/BlocksContainers.tsx
T
2025-04-27 02:32:34 -07:00

59 lines
2.1 KiB
TypeScript

import { Box, styled, Textarea } from '@mui/joy';
import { lineHeightChatTextMd } from '~/common/app.theme';
const blocksTextStyleSx = {
// note: this will be used for non-blocks mainly (errors and other strings ourside of RenderXYX)
lineHeight: lineHeightChatTextMd,
// customize the text selection color (also in edit mode)
'&::selection': {
// backgroundColor: '#fc70c3',
backgroundColor: 'var(--joy-palette-primary-solidBg)',
color: 'var(--joy-palette-primary-solidColor)',
},
};
/**
* This style is reused by all the Fragments (BlocksRenderer being the Text one),
* contained within a singe Grid (1fr) in the Message component.
*/
export const BlocksContainer = styled(Box)({
// the parent is a Grid, and this takes up to the Grid's width
// - maxWidth: '100%' makes sure we don't x-scroll the whole chat window
// - width: '100%' would also maximize the fragment width to the containing grid even if smaller
// NOTE 1: we choose just `maxWidth` to allow the grid to place this towards the start/end of the message
// however see `ContentPartTextEdit` where we set the width to 100% as we need a large editor
// NOTE 2: after seeing html/code fragments smaller than the text fragments before them, we're back
// to using width: 100% to make sure the fragments are all the same width (we lose the alignment unfortunately)
width: '100%',
// enables children's x-scrollbars (clips to the Fragment, so sub-parts will stay within this)
overflowX: 'auto',
// text style
...blocksTextStyleSx,
});
/**
* Use this TextArea for block-like looks while editing.
*/
export const BlocksTextarea = styled(Textarea)({
// very important: back to a 100% width - the parent is a Grid - see why we need this in BlocksContainer
width: '100%',
// just shrink padding tiny bit
paddingBlock: '0.25rem',
// marginBlock: '-0.25rem',
// make the editing stand out a bit more
boxShadow: 'inset 1px 0px 3px -2px var(--joy-palette-warning-softColor)',
outline: '1px solid',
outlineColor: 'var(--joy-palette-warning-solidBg)',
// text style
...blocksTextStyleSx,
});