import React, { useState } from "react"; import { AbacusReact, useAbacusDimensions, useAbacusState, BeadConfig, } from "./AbacusReact"; const AbacusExample: React.FC = () => { const [demoValue, setDemoValue] = useState(123); const [demoColumns, setDemoColumns] = useState("auto"); const [beadShape, setBeadShape] = useState<"diamond" | "square" | "circle">( "diamond", ); const [colorScheme, setColorScheme] = useState< "monochrome" | "place-value" | "alternating" | "heaven-earth" >("place-value"); const [colorPalette, setColorPalette] = useState< "default" | "colorblind" | "mnemonic" | "grayscale" | "nature" >("default"); const [scaleFactor, setScaleFactor] = useState(1); const [animated, setAnimated] = useState(true); const [draggable, setDraggable] = useState(false); const [hideInactive, setHideInactive] = useState(false); const [showEmpty, setShowEmpty] = useState(false); // Demonstrate hooks usage const actualColumns = demoColumns === "auto" ? Math.max(1, demoValue.toString().length) : demoColumns; const dimensions = useAbacusDimensions(actualColumns, scaleFactor); const { value, setValue, toggleBead } = useAbacusState(demoValue); const handleBeadClick = (bead: BeadConfig) => { console.log("Bead clicked:", { type: bead.type, value: bead.value, active: bead.active, column: bead.columnIndex, position: bead.position, }); }; const handleValueChange = (newValue: number) => { console.log("Value changed to:", newValue); setDemoValue(newValue); }; return (

Interactive Abacus React Component

{/* Controls */}
{/* Component info */}
Component Dimensions: {dimensions.width.toFixed(1)} ×{" "} {dimensions.height.toFixed(1)}px
Rod Spacing: {dimensions.rodSpacing.toFixed(1)}px
Bead Size: {dimensions.beadSize.toFixed(1)}px
Current Value: {demoValue}
Effective Columns: {actualColumns}
{/* Main Abacus Component */}
{/* Usage Examples */}

Usage Examples

Basic Usage

          {`import { AbacusReact } from './AbacusReact';

`}
        

With Hooks

          {`import { AbacusReact, useAbacusState, useAbacusDimensions } from './AbacusReact';

function MyComponent() {
  const { value, setValue, toggleBead } = useAbacusState(0);
  const dimensions = useAbacusDimensions(3, 1.2);

  return (
    
toggleBead(bead, 3)} />
); }`}

Advanced Configuration

          {` console.log('Clicked:', bead)}
  onValueChange={(newValue) => console.log('New value:', newValue)}
/>`}
        
{/* Quick Test Buttons */}

Quick Tests

); }; export default AbacusExample;