'use client';
import { forwardRef, HTMLAttributes } from 'react';
import styles from './arcane-circle.module.css';
export interface ArcaneCircleProps extends HTMLAttributes {
/** Intensity of the magical effect */
intensity?: 'mild' | 'medium' | 'extreme';
/** Primary color of the arcane magic */
color?: string;
/** Fixed or absolute positioning */
position?: 'fixed' | 'absolute';
}
const RUNES = ['ᚠ', 'ᚢ', 'ᚦ', 'ᚨ', 'ᚱ', 'ᚲ', 'ᚷ', 'ᚹ', 'ᚺ', 'ᚾ', 'ᛁ', 'ᛃ', 'ᛇ', 'ᛈ', 'ᛉ', 'ᛊ', 'ᛏ', 'ᛒ', 'ᛖ', 'ᛗ', 'ᛚ', 'ᛜ', 'ᛞ', 'ᛟ'];
export const ArcaneCircle = forwardRef(
(
{
intensity = 'medium',
color = '#8b5cf6',
position = 'fixed',
className,
style,
...props
},
ref
) => {
// Generate runes in a circular pattern
const runeCount = 12;
const runes = Array.from({ length: runeCount }, (_, i) => {
const angle = (i / runeCount) * 360 - 90;
const radius = 35; // percentage
const x = 50 + radius * Math.cos((angle * Math.PI) / 180);
const y = 50 + radius * Math.sin((angle * Math.PI) / 180);
const symbol = RUNES[i % RUNES.length];
return { id: i, x, y, symbol, angle };
});
return (
{runes.map((rune) => (
{rune.symbol}
))}
);
}
);
ArcaneCircle.displayName = 'ArcaneCircle';
export default ArcaneCircle;