mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 09:50:33 -04:00
b91532f6c7
* migrate some www components to tokens * consolidate InteractiveShimmerCard to Panel component * update tokens in blog * update tokens in careers page * update tokens in customers section * update tokens in open-source section * update tokens in Realtime page * update tokens in Storage and Vector * update tokens in SplitCodeBlockCarousel * update tokens in PGCharts * remove unused css files * update tokens in Card * update tokens in Pricing page * clean up priving page imports * remove hardcoded theme vars * migrate first half of defaultTheme.ts to tokens * migrate second half of defaultTheme.ts to tokens * improve inputs * add foreground to text-light and text-lighter * add foreground to text-light and text-lighter * migrate docs components with styling tokens * migrate docs components with styling tokens * fix broken Repos component * fix broken classes in blog * update tokens on Button and other components * update tokens on IconPanel * update studio main layout base styling tokens * update tokens across studio, docs and www * update tokens across studio, docs and www * update ui/Panel to styling tokens * update ExampleProject and TableEditorMenu tokens * www vector page tokens * update studio UI tokens * update other studio UI tokens * update more studio UI tokens * change tokens here, change tokens there * finish updating colors with tokens variables * add gui sandbox for theme experimentation * use common package for www, docs and studio and fix Command K tokens * provide light mode default tokens options * fix conflict leftover * update loading line * fix className typo * fix prettier * update themeSandbox preset default values * fix text-background0 * prettier * update warningBanner with warning color * switch all border-border with border-default * improve border-secondary and foreground-muted in light mode * force ring color on toggle * fix button bg color and border-muted light token * fix input bg color * fix dark button hover * fix homepage product card * fix code-hike table header colors * button dark border * remove tabIndex leftover from homepage main ctas --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import rangeParser from 'parse-numeric-range'
|
|
import { useMemo } from 'react'
|
|
import CodeBlock, { CodeBlockProps } from './CodeBlock/CodeBlock'
|
|
|
|
interface ScrollableCodeBlockProps extends CodeBlockProps {
|
|
highlightLines: string
|
|
children: string
|
|
/**
|
|
* Shows an application toolbar at the top
|
|
*/
|
|
showToolbar?: boolean
|
|
}
|
|
|
|
const MAX_HEIGHT = 520
|
|
const CODE_LINE_HEIGHT = 22
|
|
const TOP_OFFSET = 4
|
|
|
|
const ScrollableCodeBlock = ({
|
|
highlightLines: highlightLinesRange,
|
|
children,
|
|
showToolbar,
|
|
...props
|
|
}: ScrollableCodeBlockProps) => {
|
|
const highlightLines = useMemo(
|
|
() => rangeParser(highlightLinesRange ?? ''),
|
|
[highlightLinesRange]
|
|
)
|
|
const firstLine = Math.min(...highlightLines)
|
|
const lastLine = Math.max(...highlightLines)
|
|
|
|
const firstLinePosition = firstLine * CODE_LINE_HEIGHT
|
|
const lastLinePosition = lastLine * CODE_LINE_HEIGHT
|
|
|
|
const middlePosition = (firstLinePosition + lastLinePosition) / 2
|
|
const position = Math.max(middlePosition - MAX_HEIGHT / 2 + TOP_OFFSET, 0)
|
|
|
|
return (
|
|
<div>
|
|
{showToolbar && (
|
|
<div className="bg-surface-100 border-overlay flex h-7 w-full items-center gap-1.5 rounded-t-lg border border-b-0 px-4">
|
|
<div className="flex items-center gap-1.5">
|
|
<div className="bg-surface-300 h-2.5 w-2.5 rounded-full"></div>
|
|
<div className="bg-surface-300 h-2.5 w-2.5 rounded-full"></div>
|
|
<div className="bg-surface-300 h-2.5 w-2.5 rounded-full"></div>
|
|
</div>
|
|
</div>
|
|
)}
|
|
|
|
<div
|
|
className="border-overlay overflow-hidden rounded-b-lg border"
|
|
style={{ maxHeight: MAX_HEIGHT, transform: 'translateZ(0)' }}
|
|
>
|
|
<div
|
|
className="transition-transform duration-500"
|
|
style={{ transform: `translate3d(0, -${position}px, 0)` }}
|
|
>
|
|
{/* <CodeBlock highlightLines={highlightLinesRange} hideBorder={true} {...props}> */}
|
|
<CodeBlock {...props}>{children + '\n'.repeat(100)}</CodeBlock>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default ScrollableCodeBlock
|