import React from "react"
import { Box, Center } from "@chakra-ui/react"
import { GradientPath } from "~/gp/GradientPath"
export const Rainbow = (props: any): JSX.Element => {
const rainbow = ["#f34a4a", "#ffbc48", "#58ca70", "#47b5e6", "#a555e8"]
const [colors, setColors] = React.useState(props?.colors || rainbow)
const repeatedColours = React.useMemo(() => {
return [...colors, colors[0]]
}, [colors])
// make SVG that takes makes path in the shape of a box
// which adjusts to the parent containers size
const [strokeWidth, setStrokeWidth] = React.useState(1)
const [extraStroke, setExtraStroke] = React.useState(0)
const [width, setWidth] = React.useState(props?.width || "105%")
const [height, setHeight] = React.useState(props?.height || "105%")
const pathString = React.useMemo(() => {
const startPoint = 0 + strokeWidth / 2
const endPoint = 100 - strokeWidth / 2
return `M -${4} ${startPoint} H ${endPoint} V ${endPoint} H ${startPoint} V ${startPoint}`
}, [strokeWidth])
const viewBox = React.useMemo(() => {
return `0 0 100 100`
}, [])
const svgRef = React.useRef(null)
const colourKeyframes = React.useMemo(() => {
const ret = {}
repeatedColours.map((colour, i) => {
const keyframe = `${(i / (repeatedColours.length - 1)) * 100}%`
ret[keyframe] = {
fill: colour,
stroke: colour,
}
})
return ret
}, [repeatedColours])
const colourClasses = React.useMemo(() => {
const ret = {}
const steps = 500
repeatedColours.forEach((color, i) => {
for (let j = 0; j < steps; j++) {
const nth = `:nth-child(${repeatedColours?.length * j}n+${i + j})`
ret[".path-segment" + nth] = {
// animation: `rainbow-psych 2s linear infinite`,
// "animation-delay": `-${(i + j) * 0.05}s`,
}
}
})
return ret
}, [repeatedColours])
const svg = React.useMemo(() => {
return (