Buckets:
| import { | |
| FrameBufferRenderable, | |
| RGBA, | |
| type OptimizedBuffer, | |
| type RenderContext, | |
| type RenderableOptions, | |
| } from "@opentui/core" | |
| import { extend, useRenderer } from "@opentui/solid" | |
| import { onCleanup, onMount } from "solid-js" | |
| import { tint, useTheme } from "../context/theme" | |
| import { GoUpsellArtPainter } from "./bg-pulse-render" | |
| type GoUpsellArtOptions = RenderableOptions<FrameBufferRenderable> & { | |
| backgroundPanel?: RGBA | |
| primary?: RGBA | |
| logoBase?: RGBA | |
| } | |
| class GoUpsellArtRenderable extends FrameBufferRenderable { | |
| private painter = new GoUpsellArtPainter() | |
| constructor(ctx: RenderContext, options: GoUpsellArtOptions = {}) { | |
| const width = typeof options.width === "number" ? options.width : 1 | |
| const height = typeof options.height === "number" ? options.height : 1 | |
| super(ctx, { | |
| ...options, | |
| width, | |
| height, | |
| live: options.live ?? true, | |
| respectAlpha: false, | |
| }) | |
| if (options.width !== undefined && typeof options.width !== "number") this.width = options.width | |
| if (options.height !== undefined && typeof options.height !== "number") this.height = options.height | |
| this.painter.setBackgroundPanel(options.backgroundPanel) | |
| this.painter.setPrimary(options.primary) | |
| this.painter.setLogoBase(options.logoBase) | |
| } | |
| set backgroundPanel(value: RGBA | undefined) { | |
| if (this.painter.setBackgroundPanel(value)) this.requestRender() | |
| } | |
| set logoBase(value: RGBA | undefined) { | |
| if (this.painter.setLogoBase(value)) this.requestRender() | |
| } | |
| set primary(value: RGBA | undefined) { | |
| if (this.painter.setPrimary(value)) this.requestRender() | |
| } | |
| protected override renderSelf(buffer: OptimizedBuffer, deltaTime = 0): void { | |
| if (!this.visible || this.isDestroyed) return | |
| this.painter.render(this.frameBuffer, { | |
| deltaTime, | |
| rgb: this._ctx.capabilities?.rgb === true, | |
| }) | |
| super.renderSelf(buffer) | |
| } | |
| } | |
| declare module "@opentui/solid" { | |
| interface OpenTUIComponents { | |
| go_upsell_art: typeof GoUpsellArtRenderable | |
| } | |
| } | |
| extend({ go_upsell_art: GoUpsellArtRenderable }) | |
| export function BgPulse() { | |
| const { theme } = useTheme() | |
| const renderer = useRenderer() | |
| let targetFps = renderer.targetFps | |
| let maxFps = renderer.maxFps | |
| onMount(() => { | |
| targetFps = renderer.targetFps | |
| maxFps = renderer.maxFps | |
| renderer.targetFps = 30 | |
| renderer.maxFps = 30 | |
| }) | |
| onCleanup(() => { | |
| renderer.targetFps = targetFps | |
| renderer.maxFps = maxFps | |
| }) | |
| return ( | |
| <go_upsell_art | |
| width="100%" | |
| height="100%" | |
| backgroundPanel={theme.backgroundPanel} | |
| primary={theme.primary} | |
| logoBase={tint(theme.background, theme.text, 0.62)} | |
| live | |
| /> | |
| ) | |
| } | |
Xet Storage Details
- Size:
- 2.71 kB
- Xet hash:
- 32515287f3ef0295926196e245d14b256771c126e44af25a4c6ba37429918275
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.