All files / islands / CounterDemo.tsx

100.00% Branches 0/0
12.00% Lines 9/75
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
x1
x1
x1
x1
x1
x1
x1
x1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
x1



















































































































import { useCounter } from "@hooks/useCounter.ts";
import { useToggle } from "@hooks/useToggle.ts";
import Button from "@components/ui/Button.tsx";
import Card, {
  CardContent,
  CardHeader,
  CardTitle,
} from "@components/ui/Card.tsx";

const CounterDemo = () => {
  const { count, increment, decrement, reset, set } = useCounter(0, {
    min: 0,
    max: 100,
  });
  const [autoIncrement, toggleAutoIncrement] = useToggle(false);

  // 自动递增逻辑
  if (typeof window !== "undefined" && autoIncrement) {
    setTimeout(() => {
      if (count < 100) {
        increment();
      } else {
        toggleAutoIncrement();
      }
    }, 100);
  }

  return (
    <Card variant="hover" className="max-w-md">
      <CardHeader>
        <CardTitle>计数器演示</CardTitle>
      </CardHeader>

      <CardContent>
        <div className="text-center space-y-6">
          {/* 计数显示 */}
          <div className="text-6xl font-bold text-blue-600 dark:text-blue-400">
            {count}
          </div>

          {/* 进度条 */}
          <div className="progress-bar">
            <div
              className="progress-fill"
              style={{ width: `${count}%` }}
            />
          </div>

          {/* 控制按钮 */}
          <div className="flex justify-center gap-3">
            <Button
              variant="outline"
              onClick={decrement}
              disabled={count <= 0}
            >
              -1
            </Button>

            <Button
              variant="primary"
              onClick={increment}
              disabled={count >= 100}
            >
              +1
            </Button>
          </div>

          {/* 快捷操作 */}
          <div className="flex justify-center gap-2">
            <Button
              variant="ghost"
              size="sm"
              onClick={() => set(25)}
            >
              25
            </Button>
            <Button
              variant="ghost"
              size="sm"
              onClick={() => set(50)}
            >
              50
            </Button>
            <Button
              variant="ghost"
              size="sm"
              onClick={() => set(75)}
            >
              75
            </Button>
            <Button
              variant="ghost"
              size="sm"
              onClick={reset}
            >
              重置
            </Button>
          </div>

          {/* 自动递增 */}
          <div className="pt-4 border-t border-gray-200 dark:border-gray-700">
            <Button
              variant={autoIncrement ? "secondary" : "outline"}
              size="sm"
              onClick={toggleAutoIncrement}
              disabled={count >= 100}
            >
              {autoIncrement ? "停止自动递增" : "开始自动递增"}
            </Button>
          </div>
        </div>
      </CardContent>
    </Card>
  );
};

export default CounterDemo;