import * as React from "react"; const themeColorName = "theme-color"; export const changeThemeColor = (newThemeColor: string | null): void => { const themeColorMetaElement = window.document .getElementsByTagName("meta") .namedItem("theme-color"); if (themeColorMetaElement !== null) { if (typeof newThemeColor === "string") { themeColorMetaElement.content = newThemeColor; return; } themeColorMetaElement.remove(); return; } if (newThemeColor === null) { return; } const newMetaElement = document.createElement("meta"); document.head.appendChild(newMetaElement); newMetaElement.name = themeColorName; newMetaElement.content = newThemeColor; }; const numberToString = (num: number): string => Math.abs((Math.floor(num) % 0xff) - 0x80) .toString(16) .padStart(2, "0"); const countToColor = (count: number): string => { return ( "#" + numberToString(count / 5) + numberToString(count / 3) + numberToString(count / 2) ); }; const svgWith = 230; const svgHeight = 24; export const ThemeColorRainbow = (): React.ReactElement => { const [count, setCount] = React.useState(0); React.useEffect(() => { const loop = () => { setCount((oldCount) => { changeThemeColor(countToColor(oldCount)); return (oldCount + 7) % 0xffffff; }); requestAnimationFrame(loop); }; loop(); }, []); return ( テーマカラーレインボー ); };