Компоненты/Блик по логотипу

Блик по логотипу

Pro
28 сентября 2026

Шейдерная вспышка, превращающая логотип в источник света с ореолом, лучами и плёночным зерном.

Установка

import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";

Установка через CLIPro

Команда станет доступна после оформления Pro.

Оформить ProВойти

Файлы

index.tsx
НазадРтутьДалееСтена логотипов

Логотип растеризуется в поле расстояний, и шейдер Skia рисует вокруг него раскалённое ядро, мягкий ореол, игольчатые лучи с бегущими искрами и лепестки поверх плёночного зерна. При появлении вспышка разгорается за несколько секунд, а затем медленно пульсирует. По умолчанию светится знак Astra, собранный из векторного контура; через src можно передать своё растровое изображение.

Свет слегка наклоняется вслед за пальцем, а на вебе — за курсором. Шейдер считается целиком на GPU, время идёт на UI-потоке Reanimated, поэтому React не перерисовывается на каждом кадре. Анимация замирает, когда включено «Уменьшение движения» или приложение свёрнуто, — тогда вспышка показывается в конечном состоянии. Работает на iOS, Android и в вебе.

Вручную

Поставьте зависимости:

npm install @shopify/react-native-skia react-native-reanimated react-native-gesture-handler
pnpm add @shopify/react-native-skia react-native-reanimated react-native-gesture-handler
yarn add @shopify/react-native-skia react-native-reanimated react-native-gesture-handler
bun add @shopify/react-native-skia react-native-reanimated react-native-gesture-handler

Скопируйте эти файлы в src/shared/components/organisms/logo-flare/:

index.tsx
import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";
// Полный исходник открывается с подпиской Pro
export interface LogoFlareProps {
speed?: number;
intensity?: number;
palette?: "aurora" | "mono";
interactive?: boolean;
}
export function LogoFlare({
speed = 1,
intensity = 0.6,
interactive = true,
}: LogoFlareProps) {
const progress = useSharedValue(0);
const frame = useMemo(() => createFrame(speed), [speed]);
useEffect(() => {
// …

Код доступен по подпискеPro

Исходник «Блик по логотипу» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.

Оформить ProВойти

Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.

Использование

usage.tsx
import { useEffect, useMemo } from "react";
import Animated, { useSharedValue } from "react-native-reanimated";
import { StyleSheet, View } from "react-native";
// Полный исходник открывается с подпиской Pro
export interface LogoFlareProps {
speed?: number;
intensity?: number;
palette?: "aurora" | "mono";
interactive?: boolean;
}
export function LogoFlare({
speed = 1,
intensity = 0.6,
interactive = true,
}: LogoFlareProps) {
const progress = useSharedValue(0);
const frame = useMemo(() => createFrame(speed), [speed]);
useEffect(() => {
// …

Код доступен по подпискеPro

Исходник «Блик по логотипу» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.

Оформить ProВойти

Компонент растягивается на весь родитель. Цвет свечения tint задаётся тройкой RGB от 0 до 1, а center — смещением от центра кадра в долях его высоты.

Пропсы

Пропс
Описание
src?

Тип LogoFlareSource

center?

Тип readonly [number, number]

size?

Тип number

tint?

Тип readonly [number, number, number]

clearCenter?

Тип boolean

paper?

Тип boolean

speed?

Тип number

intro?

Тип boolean

play?

Тип boolean

interactive?

Тип boolean

style?

Тип StyleProp<ViewStyle>