array(
'label' => __( 'Ring', 'aerospin-css-loading-spinners' ),
'description' => __( 'A clean rotating ring, the classic loading indicator.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'dual-ring' => array(
'label' => __( 'Dual Ring', 'aerospin-css-loading-spinners' ),
'description' => __( 'Two concentric rings rotating in opposite directions.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'circle' => array(
'label' => __( 'Circle', 'aerospin-css-loading-spinners' ),
'description' => __( 'A segmented circle that spins smoothly.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'dots' => array(
'label' => __( 'Bouncing Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'Three dots that bounce in sequence.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'pulse-dots' => array(
'label' => __( 'Pulse Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'Three dots that pulse with a wave effect.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'dot-spin' => array(
'label' => __( 'Dot Spin', 'aerospin-css-loading-spinners' ),
'description' => __( 'Dots orbiting around a center point.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'bars' => array(
'label' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'description' => __( 'Five bars that animate in a wave pattern.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'equalizer' => array(
'label' => __( 'Equalizer', 'aerospin-css-loading-spinners' ),
'description' => __( 'Bars that animate like an audio equalizer.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'ripple' => array(
'label' => __( 'Ripple', 'aerospin-css-loading-spinners' ),
'description' => __( 'Expanding ripple rings radiating outward.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'roller' => array(
'label' => __( 'Roller', 'aerospin-css-loading-spinners' ),
'description' => __( 'Dots rolling along a circular track.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'hourglass' => array(
'label' => __( 'Hourglass', 'aerospin-css-loading-spinners' ),
'description' => __( 'An hourglass shape that rotates continuously.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'heart' => array(
'label' => __( 'Heart', 'aerospin-css-loading-spinners' ),
'description' => __( 'A pulsing heart shape.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'square-spin' => array(
'label' => __( 'Square Spin', 'aerospin-css-loading-spinners' ),
'description' => __( 'A square that flips in 3D.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'fold' => array(
'label' => __( 'Fold', 'aerospin-css-loading-spinners' ),
'description' => __( 'Four squares that fold in sequence.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'wave-dots' => array(
'label' => __( 'Wave Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'A wave of expanding dots.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'orbit' => array(
'label' => __( 'Orbit', 'aerospin-css-loading-spinners' ),
'description' => __( 'A dot orbiting a central sphere.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'flip' => array(
'label' => __( 'Flip', 'aerospin-css-loading-spinners' ),
'description' => __( 'A square that flips on both axes.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'bounce' => array(
'label' => __( 'Bounce', 'aerospin-css-loading-spinners' ),
'description' => __( 'Two balls that bounce and cross paths.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'gradient-ring' => array(
'label' => __( 'Gradient Ring', 'aerospin-css-loading-spinners' ),
'description' => __( 'A ring with a smooth gradient sweep.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'chase' => array(
'label' => __( 'Chase', 'aerospin-css-loading-spinners' ),
'description' => __( 'Dots chasing each other in a circle.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'text-blink' => array(
'label' => __( 'Text: Blinking Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'Classic loading text with blinking ellipsis.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => '' . esc_html__( 'Loading', 'aerospin-css-loading-spinners' ) . '...
',
),
'text-wave' => array(
'label' => __( 'Text: Wave', 'aerospin-css-loading-spinners' ),
'description' => __( 'Individual letters jumping in a wave sequence.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => self::get_text_wave_html( __( 'Loading', 'aerospin-css-loading-spinners' ) ),
),
'text-glow' => array(
'label' => __( 'Text: Neon Glow', 'aerospin-css-loading-spinners' ),
'description' => __( 'Text that pulses with a bright neon outline.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => '' . esc_html__( 'Loading', 'aerospin-css-loading-spinners' ) . '
',
),
'rainbow-circle' => array(
'label' => __( 'Rainbow Circle', 'aerospin-css-loading-spinners' ),
'description' => __( 'A spinning circle cycling through vivid colors.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'rainbow-dots' => array(
'label' => __( 'Rainbow Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'Bouncing dots, each assigned a different vibrant color.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'rainbow-bar' => array(
'label' => __( 'Rainbow Progress Bar', 'aerospin-css-loading-spinners' ),
'description' => __( 'A horizontal bar smoothly sweeping through the color spectrum.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'color-pulse' => array(
'label' => __( 'Color Pulse', 'aerospin-css-loading-spinners' ),
'description' => __( 'A radiating circle that changes color on every beat.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'color-wheel' => array(
'label' => __( 'Color Wheel', 'aerospin-css-loading-spinners' ),
'description' => __( 'A multicolored segmented wheel rotating.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'cube-grid' => array(
'label' => __( 'Cube Grid', 'aerospin-css-loading-spinners' ),
'description' => __( 'A 3x3 grid of cubes pulsing diagonally.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'diamond-fold' => array(
'label' => __( 'Diamond Fold', 'aerospin-css-loading-spinners' ),
'description' => __( 'Four diamonds converging and unfolding.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'gear' => array(
'label' => __( 'Gear', 'aerospin-css-loading-spinners' ),
'description' => __( 'A mechanical cog slowly turning.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'sun' => array(
'label' => __( 'Sunburst', 'aerospin-css-loading-spinners' ),
'description' => __( 'A central circle with rotating outer rays.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'clock' => array(
'label' => __( 'Clock', 'aerospin-css-loading-spinners' ),
'description' => __( 'A clock face with rapidly spinning hour and minute hands.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'target' => array(
'label' => __( 'Target Rings', 'aerospin-css-loading-spinners' ),
'description' => __( 'Concentric rings collapsing inward.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'radar' => array(
'label' => __( 'Radar Sweep', 'aerospin-css-loading-spinners' ),
'description' => __( 'A scanner sweeping across a circular radar.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'wifi' => array(
'label' => __( 'Wi-Fi Signal', 'aerospin-css-loading-spinners' ),
'description' => __( 'Curved arcs broadcasting outward.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'heartbeat' => array(
'label' => __( 'Heartbeat EKG', 'aerospin-css-loading-spinners' ),
'description' => __( 'An animated EKG line drawing back and forth.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'battery' => array(
'label' => __( 'Battery Charge', 'aerospin-css-loading-spinners' ),
'description' => __( 'A battery outline filling with energy blocks.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'music-bars' => array(
'label' => __( 'Multicolor EQ', 'aerospin-css-loading-spinners' ),
'description' => __( 'Audio equalizer bars that feature distinct colors.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'hourglass-color' => array(
'label' => __( 'Sand Timer', 'aerospin-css-loading-spinners' ),
'description' => __( 'A solid sand timer that drains and flips.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'infinity' => array(
'label' => __( 'Infinity Loop', 'aerospin-css-loading-spinners' ),
'description' => __( 'A continuous figure-eight path pulsing in smooth motion.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'atom' => array(
'label' => __( 'Atom', 'aerospin-css-loading-spinners' ),
'description' => __( 'An atomic nucleus orbited by three 3D elliptical electron rings.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'dna' => array(
'label' => __( 'DNA Helix', 'aerospin-css-loading-spinners' ),
'description' => __( 'Intertwined strands undulating in a double-helix wave sequence.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'hexagon' => array(
'label' => __( 'Hexagon', 'aerospin-css-loading-spinners' ),
'description' => __( 'Geometric concentric hexagons pulsing and morphing inward.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'gyroscope' => array(
'label' => __( 'Gyroscope', 'aerospin-css-loading-spinners' ),
'description' => __( 'Concentric rings rotating smoothly on multi-axis gimbals.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'soundwave' => array(
'label' => __( 'Soundwave', 'aerospin-css-loading-spinners' ),
'description' => __( 'Dynamic audio frequency bars pulsing outward in stereo symmetry.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'pulsar' => array(
'label' => __( 'Pulsar', 'aerospin-css-loading-spinners' ),
'description' => __( 'A luminous core projecting synchronized acoustic ripples.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'meteor' => array(
'label' => __( 'Meteor', 'aerospin-css-loading-spinners' ),
'description' => __( 'A bright celestial spark orbiting with a smooth glowing trail.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'matrix' => array(
'label' => __( 'Digital Matrix', 'aerospin-css-loading-spinners' ),
'description' => __( 'Cascading cyber data blocks streaming downward in parallel.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'gem' => array(
'label' => __( 'Crystal Gem', 'aerospin-css-loading-spinners' ),
'description' => __( 'A faceted polygonal gem rotating with shimmering refractions.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'newtons-cradle' => array(
'label' => __( "Newton's Cradle", 'aerospin-css-loading-spinners' ),
'description' => __( 'Four suspended spheres striking and transferring momentum.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'droplet' => array(
'label' => __( 'Water Droplet', 'aerospin-css-loading-spinners' ),
'description' => __( 'A liquid droplet descending and generating fluid ripples.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'infinity-dots' => array(
'label' => __( 'Infinity Dots', 'aerospin-css-loading-spinners' ),
'description' => __( 'Sequential dots orbiting along a lemniscate curve.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'eclipse' => array(
'label' => __( 'Solar Eclipse', 'aerospin-css-loading-spinners' ),
'description' => __( 'A dark celestial body passing across a radiant stellar corona.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'vortex' => array(
'label' => __( 'Spiral Vortex', 'aerospin-css-loading-spinners' ),
'description' => __( 'Swirling logarithmic vortex rings converging inward.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'sonar' => array(
'label' => __( 'Sonar Ping', 'aerospin-css-loading-spinners' ),
'description' => __( 'Submarine acoustic sweep detecting pulsating radar blips.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'prism' => array(
'label' => __( 'Prism Light', 'aerospin-css-loading-spinners' ),
'description' => __( 'Light refracting through a triangular prism into rainbow dispersion.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'hypercube' => array(
'label' => __( 'Tesseract Hypercube', 'aerospin-css-loading-spinners' ),
'description' => __( 'A four-dimensional hypercube folding through isometric space.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'signal-beacon' => array(
'label' => __( 'Signal Beacon', 'aerospin-css-loading-spinners' ),
'description' => __( 'Transmission antenna broadcasting rhythmic radio waves.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'sandflow' => array(
'label' => __( 'Sandflow', 'aerospin-css-loading-spinners' ),
'description' => __( 'Hourglass chamber with a continuous stream of falling sand.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'text-typewriter' => array(
'label' => __( 'Text: Typewriter', 'aerospin-css-loading-spinners' ),
'description' => __( 'Loading text typing out letter by letter with a flashing cursor.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => '' . esc_html__( 'Loading', 'aerospin-css-loading-spinners' ) . '_
',
),
'pendulum' => array(
'label' => __( 'Pendulum Wave', 'aerospin-css-loading-spinners' ),
'description' => __( 'Harmonic pendulums oscillating smoothly in phase-delayed arc motion.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'kaleidoscope' => array(
'label' => __( 'Kaleidoscope', 'aerospin-css-loading-spinners' ),
'description' => __( 'Mandala petals shifting through kaleidoscopic color symmetry.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'neon-ring' => array(
'label' => __( 'Neon Ring', 'aerospin-css-loading-spinners' ),
'description' => __( 'A glowing neon ring spinning with vivid hue-shifting bloom.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'crosshair' => array(
'label' => __( 'Crosshair Lock', 'aerospin-css-loading-spinners' ),
'description' => __( 'Precision targeting reticle rotating with pulsing lock-on crosshairs.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'glitch' => array(
'label' => __( 'Cyber Glitch', 'aerospin-css-loading-spinners' ),
'description' => __( 'Futuristic digital HUD box with chromatic aberration glitches.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'pinwheel' => array(
'label' => __( 'Origami Pinwheel', 'aerospin-css-loading-spinners' ),
'description' => __( 'Folded paper-craft wind blades spinning in circular rotation.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'staircase' => array(
'label' => __( 'Staircase Bars', 'aerospin-css-loading-spinners' ),
'description' => __( 'Ascending steps animating with alternating rhythmic wave scaling.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'planetary' => array(
'label' => __( 'Planetary Rings', 'aerospin-css-loading-spinners' ),
'description' => __( 'A celestial sphere encircled by tilted, sweeping orbital rings.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'hive' => array(
'label' => __( 'Honeycomb Hive', 'aerospin-css-loading-spinners' ),
'description' => __( 'A cluster of seven hexagonal cells pulsing in a radial wave.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'black-hole' => array(
'label' => __( 'Black Hole', 'aerospin-css-loading-spinners' ),
'description' => __( 'A gravitational singularity warped by a swirling accretion disk.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'yin-yang' => array(
'label' => __( 'Yin Yang', 'aerospin-css-loading-spinners' ),
'description' => __( 'Complementary swirling forces rotating in harmonious equilibrium.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'quantum-orbit' => array(
'label' => __( 'Quantum Orbit', 'aerospin-css-loading-spinners' ),
'description' => __( 'Three elliptical orbital rings spinning with quantum electron particles at varying inclinations.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'cyber-hexagon' => array(
'label' => __( 'Cyber Hexagon', 'aerospin-css-loading-spinners' ),
'description' => __( 'Concentric rotating cyberpunk hexagon rings with glowing node accents.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'galaxy-spiral' => array(
'label' => __( 'Galaxy Spiral', 'aerospin-css-loading-spinners' ),
'description' => __( 'Two spiral arms revolving around a dense luminous galactic core.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'portal-vortex' => array(
'label' => __( 'Portal Vortex', 'aerospin-css-loading-spinners' ),
'description' => __( 'Multi-layered interdimensional gateway rotating with pulsating gradient horizons.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'metronome' => array(
'label' => __( 'Metronome Tick', 'aerospin-css-loading-spinners' ),
'description' => __( 'An inverted tempo needle swinging rhythmically with pendulum weight physics.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'dna-cascade' => array(
'label' => __( 'Chromatic Helix', 'aerospin-css-loading-spinners' ),
'description' => __( 'Color-shifting nucleotide rungs spiraling in an illuminated 3D ladder.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'liquid-bubble' => array(
'label' => __( 'Liquid Bubbles', 'aerospin-css-loading-spinners' ),
'description' => __( 'Organic buoyant liquid bubbles rising and coalescing in fluid suspension.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'origami-crane' => array(
'label' => __( 'Origami Crane', 'aerospin-css-loading-spinners' ),
'description' => __( 'Geometric folded paper wings flapping in synchronized polyhedral origami motion.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'compass-rose' => array(
'label' => __( 'Compass Rose', 'aerospin-css-loading-spinners' ),
'description' => __( 'Navigational mariner compass dial searching and calibrating magnetic north.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'hyper-tunnel' => array(
'label' => __( 'Hyper Tunnel', 'aerospin-css-loading-spinners' ),
'description' => __( 'Consecutive geometric squares zooming infinitely towards the observer in warp speed.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'sound-equalizer-radial' => array(
'label' => __( 'Radial Equalizer', 'aerospin-css-loading-spinners' ),
'description' => __( 'Circular arrangement of audio VU spectrum bars pulsing outward from the center.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Bars', 'aerospin-css-loading-spinners' ),
'html' => '
',
),
'shuriken' => array(
'label' => __( 'Ninja Shuriken', 'aerospin-css-loading-spinners' ),
'description' => __( 'Four-bladed curved ninja star spinning at high velocity with metallic luster.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'firefly-swarm' => array(
'label' => __( 'Firefly Swarm', 'aerospin-css-loading-spinners' ),
'description' => __( 'Bioluminescent fireflies flickering and floating in randomized organic orbits.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'cube-flip-3d' => array(
'label' => __( 'Isometric Cube', 'aerospin-css-loading-spinners' ),
'description' => __( '3D isometric cube rotating across isometric axes with illuminated faces.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'solar-flare' => array(
'label' => __( 'Solar Flare', 'aerospin-css-loading-spinners' ),
'description' => __( 'Radiant chromatic sun with corona plasma arcs expanding and dissipating.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'biohazard' => array(
'label' => __( 'Biohazard Sign', 'aerospin-css-loading-spinners' ),
'description' => __( 'Stylized tripartite hazard bio-rings interlocked and turning in warning sequence.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'text-shimmer' => array(
'label' => __( 'Text: Shimmer Stream', 'aerospin-css-loading-spinners' ),
'description' => __( 'Typography with a continuous luminous beam sweeping across the text.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => '' . esc_html__( 'Loading', 'aerospin-css-loading-spinners' ) . '
',
),
'text-flip' => array(
'label' => __( 'Text: 3D Flip', 'aerospin-css-loading-spinners' ),
'description' => __( '3D perspective tumbling loading text with depth and backface shadows.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Text', 'aerospin-css-loading-spinners' ),
'html' => '' . esc_html__( 'Loading', 'aerospin-css-loading-spinners' ) . '
',
),
'orbiting-moons' => array(
'label' => __( 'Lunar Orbiters', 'aerospin-css-loading-spinners' ),
'description' => __( 'Two celestial satellites circling around a planet on counter-rotating orbital planes.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'infinity-gear' => array(
'label' => __( 'Dual Synchro Gears', 'aerospin-css-loading-spinners' ),
'description' => __( 'Two interlocking meshed mechanical cogs counter-rotating in synchronicity.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'digital-clockwork' => array(
'label' => __( 'Digital Chrono', 'aerospin-css-loading-spinners' ),
'description' => __( 'High-tech stopwatch HUD dial with rapid second ticks and sweeping millisecond arc.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'neon-hex' => array(
'label' => __( 'Neon Cyber Ring', 'aerospin-css-loading-spinners' ),
'description' => __( 'Vivid neon gradient polygon pulsing with laser scan line animations.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'ripple-matrix' => array(
'label' => __( 'Dot Matrix Wave', 'aerospin-css-loading-spinners' ),
'description' => __( '3x3 matrix grid of dots undulating in a diagonal 2D ripple matrix.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Dots', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'constellation' => array(
'label' => __( 'Star Constellation', 'aerospin-css-loading-spinners' ),
'description' => __( 'Interconnected stellar nodes drawing shimmering astral geometric lines.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Animated', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'plasma-ball' => array(
'label' => __( 'Tesla Plasma Ball', 'aerospin-css-loading-spinners' ),
'description' => __( 'Glowing electromagnetic sphere with discharging electrical plasma arcs.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Colorful', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'satellite-dish' => array(
'label' => __( 'Orbital Satellite', 'aerospin-css-loading-spinners' ),
'description' => __( 'Space telemetry dish tracking satellite pulses across orbital radar beams.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Indicators', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'card-shuffle' => array(
'label' => __( 'Card Stack Shuffle', 'aerospin-css-loading-spinners' ),
'description' => __( 'Stack of isometric deck cards smoothly sliding and fanning in cardistry loop.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Shapes', 'aerospin-css-loading-spinners' ),
'html' => '',
),
'cascade-rings' => array(
'label' => __( 'Cascading Halos', 'aerospin-css-loading-spinners' ),
'description' => __( 'Triple concentric glowing halo rings expanding and collapsing in harmonic cascade.', 'aerospin-css-loading-spinners' ),
'category' => __( 'Classic', 'aerospin-css-loading-spinners' ),
'html' => '',
),
);
}
/**
* Build translated text wave spinner markup.
*
* @since 1.1.4
*
* @param string $text Loading text.
* @return string
*/
private static function get_text_wave_html( $text ) {
$text = is_string( $text ) ? $text : '';
$characters = preg_split( '//u', $text, -1, PREG_SPLIT_NO_EMPTY );
$html = '';
// Provide fallback array if splitting fails.
if ( false === $characters || empty( $characters ) || ! is_array( $characters ) ) {
$characters = str_split( 'Loading' );
}
// Iterate over characters and safely escape each piece.
foreach ( $characters as $character ) {
$html .= '' . esc_html( $character ) . '';
}
$html .= '
';
return $html;
}
/*
|--------------------------------------------------------------------------
| SECTION 3: Registry Normalization
|--------------------------------------------------------------------------
*/
/**
* Normalize spinner definitions after filtering.
*
* @since 1.1.4
*
* @param mixed $spinners Raw spinner definitions.
* @return array
*/
private static function normalize_spinners( $spinners ) {
if ( ! is_array( $spinners ) ) {
return array();
}
$normalized = array();
// Cleanse structure and values of user-provided configurations.
foreach ( $spinners as $key => $spinner ) {
$key = sanitize_key( self::safe_scalar( $key ) );
if ( '' === $key || ! is_array( $spinner ) ) {
continue;
}
$label = isset( $spinner['label'] ) ? sanitize_text_field( self::safe_scalar( $spinner['label'] ) ) : '';
$description = isset( $spinner['description'] ) ? sanitize_text_field( self::safe_scalar( $spinner['description'] ) ) : '';
$category = isset( $spinner['category'] ) ? sanitize_text_field( self::safe_scalar( $spinner['category'] ) ) : '';
$html = isset( $spinner['html'] ) ? self::sanitize_spinner_html( $spinner['html'] ) : '';
if ( '' === $label ) {
$label = ucwords( str_replace( '-', ' ', $key ) );
}
if ( '' === $category ) {
$category = __( 'Custom', 'aerospin-css-loading-spinners' );
}
if ( '' === $html ) {
continue;
}
$normalized[ $key ] = array(
'label' => $label,
'description' => $description,
'category' => $category,
'html' => $html,
);
}
return $normalized;
}
/**
* Safely cast scalar values.
*
* This prevents warnings if third-party filters provide arrays, objects,
* or unexpected values for labels, descriptions, categories, or keys.
*
* @since 1.1.4
*
* @param mixed $value Raw value.
* @return string
*/
private static function safe_scalar( $value ) {
if ( is_array( $value ) || is_object( $value ) ) {
return '';
}
return is_string( $value ) ? $value : (string) $value;
}
/**
* Sanitize spinner HTML.
*
* @since 1.1.4
*
* @param mixed $html Raw spinner markup.
* @return string
*/
private static function sanitize_spinner_html( $html ) {
if ( ! is_string( $html ) || '' === $html ) {
return '';
}
// Updated function call to strictly use the updated correct prefix.
if ( function_exists( 'aerospin_css_loading_spinners_kses_spinner_html' ) ) {
return aerospin_css_loading_spinners_kses_spinner_html( $html );
} elseif ( function_exists( 'Pure_CSS_Spinners_kses_spinner_html' ) ) {
return Pure_CSS_Spinners_kses_spinner_html( $html );
}
if (
( class_exists( 'AeroSpin_CSS_Loading_Spinners_Helpers' ) && is_callable( array( 'AeroSpin_CSS_Loading_Spinners_Helpers', 'kses_spinner_html' ) ) ) || class_exists( 'Pure_CSS_Spinners_Helpers' )
&& is_callable( array( 'Pure_CSS_Spinners_Helpers', 'kses_spinner_html' ) )
) {
return Pure_CSS_Spinners_Helpers::kses_spinner_html( $html );
}
// Failsafe kses pass guaranteeing tight control over tags/attributes.
return wp_kses(
$html,
array(
'div' => array(
'aria-hidden' => true,
'class' => true,
'role' => true,
),
'span' => array(
'aria-hidden' => true,
'class' => true,
'role' => true,
),
)
);
}
/*
|--------------------------------------------------------------------------
| SECTION 4: Category Extraction
|--------------------------------------------------------------------------
*/
/**
* Retrieve a unique list of spinner categories.
*
* @since 1.0.0
*
* @return array
*/
public static function get_categories() {
if ( null !== self::$categories_cache ) {
return self::$categories_cache;
}
// Serve from persistent transient cache if available.
$cached_transient = get_transient( 'acls_spinner_categories' );
if ( ! is_array( $cached_transient ) || empty( $cached_transient ) ) {
$cached_transient = get_transient( 'Pure_CSS_Spinners_spinner_categories' );
}
if ( is_array( $cached_transient ) && ! empty( $cached_transient ) ) {
self::$categories_cache = $cached_transient;
return self::$categories_cache;
}
$spinners = self::get_spinners();
$categories = array();
// Gather distinct categories into an array.
foreach ( $spinners as $spinner ) {
if ( empty( $spinner['category'] ) ) {
continue;
}
$category = sanitize_text_field( self::safe_scalar( $spinner['category'] ) );
if ( '' !== $category && ! in_array( $category, $categories, true ) ) {
$categories[] = $category;
}
}
// Organize alphabetically.
sort( $categories, SORT_NATURAL | SORT_FLAG_CASE );
self::$categories_cache = $categories;
// Store in persistent transient cache (24 hours TTL as verified in diagnostics).
set_transient( 'acls_spinner_categories', self::$categories_cache, 24 * HOUR_IN_SECONDS );
set_transient( 'Pure_CSS_Spinners_spinner_categories', self::$categories_cache, 24 * HOUR_IN_SECONDS );
return self::$categories_cache;
}
/**
* Clear spinner registry and category caches.
*
* @since 1.1.4
*
* @return void
*/
public static function clear_cache() {
self::$spinners_cache = null;
self::$categories_cache = null;
// Safe cleanup for both modern and legacy database transient records.
delete_transient( 'acls_spinner_categories' );
delete_transient( 'AeroSpin_CSS_Loading_Spinners_spinner_categories' );
delete_transient( 'Pure_CSS_Spinners_spinner_categories' );
delete_transient( 'cp_spinners_spinner_categories' );
}
}
}
if ( ! class_exists( 'AeroSpin_CSS_Loading_Spinners_List' ) ) {
class_alias( 'ACLS_Spinners_List', 'AeroSpin_CSS_Loading_Spinners_List' );
}
if ( ! class_exists( 'Pure_CSS_Spinners_List' ) ) {
class_alias( 'ACLS_Spinners_List', 'Pure_CSS_Spinners_List' );
}
if ( ! class_exists( 'AreoSpin_Css_Loading_Spinners_List' ) ) {
class_alias( 'ACLS_Spinners_List', 'AreoSpin_Css_Loading_Spinners_List' );
}
/*
|--------------------------------------------------------------------------
| SECTION 5: Procedural Standard Wrappers
|--------------------------------------------------------------------------
|
| These functions provide procedural access to AeroSpin CSS Loading Spinners list methods,
| adhering strictly to WordPress.org prefixing requirements.
|
*/
if ( ! function_exists( 'aerospin_css_loading_spinners_get_spinners' ) ) {
function aerospin_css_loading_spinners_get_spinners() {
return ACLS_Spinners_List::get_spinners();
}
}
if ( ! function_exists( 'aerospin_css_loading_spinners_get_spinner' ) ) {
function aerospin_css_loading_spinners_get_spinner( $key, $default_value = 'ring' ) {
return ACLS_Spinners_List::get_spinner( $key, $default_value );
}
}
if ( ! function_exists( 'aerospin_css_loading_spinners_get_categories' ) ) {
function aerospin_css_loading_spinners_get_categories() {
return ACLS_Spinners_List::get_categories();
}
}
if ( ! function_exists( 'aerospin_css_loading_spinners_clear_spinner_cache' ) ) {
function aerospin_css_loading_spinners_clear_spinner_cache() {
ACLS_Spinners_List::clear_cache();
}
}
// Backward-compatibility wrappers for legacy pure_css_spinners_* functions
if ( ! function_exists( 'pure_css_spinners_get_spinners' ) ) {
function pure_css_spinners_get_spinners() {
return aerospin_css_loading_spinners_get_spinners();
}
}
if ( ! function_exists( 'pure_css_spinners_get_spinner' ) ) {
function pure_css_spinners_get_spinner( $key, $default_value = 'ring' ) {
return aerospin_css_loading_spinners_get_spinner( $key, $default_value );
}
}
if ( ! function_exists( 'pure_css_spinners_get_categories' ) ) {
function pure_css_spinners_get_categories() {
return aerospin_css_loading_spinners_get_categories();
}
}
if ( ! function_exists( 'pure_css_spinners_clear_spinner_cache' ) ) {
function pure_css_spinners_clear_spinner_cache() {
aerospin_css_loading_spinners_clear_spinner_cache();
}
}