/home/bdqbpbxa/demo-subdomains/ping-proxies.goodface.com.ua/src/pages/BrandAssets/Colours/index.jsx
import './styles.scss'
import { useEffect, useRef } from 'react';
import { useAnimation } from 'hooks/useAnimation';
const ColoursSection = ({ isLoading }) => {
const container = useRef();
const containerGradiend = useRef();
const degLine = useRef(null);
useAnimation({
items: ['.brand-assets-colours__title',
'.brand-assets-colours__description',
'.brand-assets-colours__primary .title',
'.brand-assets-colours-item',
'.brand-assets-colours-gradient',
'.brand-assets-colours__secondary .title'],
container,
dependencies: [isLoading],
})
const data = {
title: "Colours",
description: "If you want to use our brand colours in your materials about Ping Proxies, please make sure to check the colour codes.",
primary: {
title: "Primary colors",
colors: [
{
title: "Light grey",
params: [
{
name: "HEX",
code: "#F2F3F8"
},
{
name: "RGB",
code: "242 243 248"
},
]
},
{
title: "Grey",
params: [
{
name: "HEX",
code: "#E5E7F1"
},
{
name: "RGB",
code: "229 231 241"
},
]
},
{
title: "Dark blue",
params: [
{
name: "HEX",
code: "#0D1126"
},
{
name: "RGB",
code: "13 17 38"
},
]
},
{
title: "Blue-purple",
params: [
{
name: "HEX",
code: "#5547EB"
},
{
name: "RGB",
code: "85 71 235"
},
]
},
{
title: "Lavender",
params: [
{
name: "HEX",
code: "#A192EC"
},
{
name: "RGB",
code: "161 145 236"
},
]
},
]
},
gradient: {
title: "Brand gradient",
deg: 225,
colors: [
"#A192EC",
"#5547EB"
]
},
secondary: {
title: "Secondary colors",
colors: [
{
title: "Blue",
params: [
{
name: "HEX",
code: "#8ABDF9"
},
{
name: "RGB",
code: "138 189 249"
},
]
},
{
title: "Pink",
params: [
{
name: "HEX",
code: "#D993F7"
},
{
name: "RGB",
code: "217 147 247"
},
]
},
{
title: "Green",
params: [
{
name: "HEX",
code: "#00B67A"
},
{
name: "RGB",
code: "0 182 122"
},
]
},
]
}
}
useEffect(() => {
const updateDegLineStyles = () => {
if (containerGradiend.current && degLine.current) {
// @ts-ignore
const containerWidth = containerGradiend.current.offsetWidth;
// @ts-ignore
const containerHeight = containerGradiend.current.offsetHeight;
const diagonalLength = Math.sqrt(Math.pow(containerWidth, 2) + Math.pow(containerHeight, 2));
const padding = 24;
const circleWidth = 32;
const adjacentSide = containerWidth - 2 * padding - circleWidth;
const oppositeSide = containerHeight - 2 * padding - circleWidth;
const deg = Math.atan(oppositeSide / adjacentSide) * (180 / Math.PI);
const lineLength = diagonalLength - 2 * padding - circleWidth;
const leftOffset = (containerWidth - lineLength) / 2;
degLine.current.style.width = `${lineLength}px`;
degLine.current.style.transform = `rotate(-${deg}deg)`;
degLine.current.style.left = `${leftOffset}px`;
}
};
updateDegLineStyles();
window.addEventListener('resize', updateDegLineStyles);
return () => {
window.removeEventListener('resize', updateDegLineStyles);
};
}, [data.gradient]);
const gradientString = `linear-gradient(${data.gradient.deg}deg, ${data.gradient.colors.join(', ')})`;
return (
<section ref={container} className="inner-container brand-assets-colours">
<h2 className='brand-assets-colours__title h2'>{data.title}</h2>
<p className='brand-assets-colours__description body1'>{data.description}</p>
<div className='brand-assets-colours__wrapper'>
<div className='brand-assets-colours-section brand-assets-colours__primary'>
<p className='title body1'>{data.primary.title}</p>
<div className='brand-assets-colours-primary-container'>
{
data.primary.colors.map((item, index) => (
<div className='brand-assets-colours-item body3' key={index}>
<p className='name'>{item.title}</p>
<ul>
{
item.params.map((item, index) => (
<li key={index}> {item.name} — {item.code}</li>
))
}
</ul>
</div>
))
}
</div>
</div>
<div className='brand-assets-colours-gradient' style={{
background: gradientString
}} ref={containerGradiend}>
<p className='title body1'>{data.gradient.title}</p>
<div className='color-code body3'>{data.gradient.colors[0]}</div>
<div className='color-code body3'>{data.gradient.colors[1]}</div>
<div className='deg-line' ref={degLine}>
<div className='circle'></div>
<div className='line'></div>
<div className='circle'></div>
</div>
</div>
<div className='brand-assets-colours-section brand-assets-colours__secondary'>
<p className='title body1'>{data.secondary.title}</p>
<div className='brand-assets-colours-secondary-container'>
{
data.secondary.colors.map((item, index) => (
<div className='brand-assets-colours-item body3' key={index}>
<p className='name'>{item.title}</p>
<ul>
{
item.params.map((item, index) => (
<li key={index}>{item.name} — {item.code}</li>
))
}
</ul>
</div>
))
}
</div>
</div>
</div>
</section >
);
}
export default ColoursSection;