|
1 | 1 | <script lang="ts"> |
2 | 2 | import { onDestroy, onMount } from "svelte"; |
3 | 3 | import ThemeToggle from "./ThemeToggle.svelte"; |
| 4 | + import { theme } from "../state/theme.svelte"; |
| 5 | +
|
| 6 | + let textColour = $derived( |
| 7 | + theme.isDark |
| 8 | + ? "oklch(0.9644 0.0282 74.31)" |
| 9 | + : "oklch(0.2316 0.0373 288.04)", |
| 10 | + ); |
4 | 11 |
|
5 | 12 | let marker: HTMLDivElement; |
6 | 13 |
|
|
44 | 51 | } |
45 | 52 |
|
46 | 53 | function updateMarker() { |
47 | | - marker.style.transform = `rotate(${angle}deg)`; |
| 54 | + marker.style.transform = `translateX(-32px) rotate(${angle}deg)`; |
48 | 55 | } |
49 | 56 |
|
50 | 57 | onMount(() => { |
|
70 | 77 | }); |
71 | 78 | </script> |
72 | 79 |
|
73 | | -<div bind:this={marker} class="clock -top-1"> |
74 | | - <ThemeToggle /> |
| 80 | +<div class="absolute top-0"> |
| 81 | + <svg |
| 82 | + class="absolute z-[-1] w-auto h-[70vw] -translate-x-1/2 -translate-y-1/2" |
| 83 | + viewBox="-0 0 100 100" |
| 84 | + > |
| 85 | + <circle |
| 86 | + cx="50" |
| 87 | + cy="100" |
| 88 | + r="46" |
| 89 | + fill="transparent" |
| 90 | + stroke={textColour} |
| 91 | + stroke-width="0.5" |
| 92 | + stroke-dasharray="1,10,1" |
| 93 | + > |
| 94 | + <animateTransform |
| 95 | + attributeName="transform" |
| 96 | + begin="0s" |
| 97 | + dur="60s" |
| 98 | + type="rotate" |
| 99 | + from="0 50 100" |
| 100 | + to="360 50 100" |
| 101 | + repeatCount="indefinite" |
| 102 | + /> |
| 103 | + </circle> |
| 104 | + <!-- <circle cx="50" cy="100.5" r="1" fill="magenta" /> --> |
| 105 | + </svg> |
| 106 | + <div bind:this={marker} class="clock"> |
| 107 | + <ThemeToggle /> |
| 108 | + <!-- <div --> |
| 109 | + <!-- class="absolute h-100 bg-blue-500 rounded-full clock-arm" --> |
| 110 | + <!-- ></div> --> |
| 111 | + </div> |
| 112 | + <!-- <div --> |
| 113 | + <!-- class="absolute w-2 h-2 bg-red-500 rounded-full" --> |
| 114 | + <!-- style="top: 35vw; left: 50%; transform: translate(-50%, -50%);" --> |
| 115 | + <!-- ></div> --> |
75 | 116 | </div> |
76 | 117 |
|
77 | | - |
78 | 118 | <style> |
79 | 119 | .clock { |
80 | 120 | position: absolute; |
| 121 | + width: max-content; |
81 | 122 | transform-origin: center 35vw; |
82 | | - transform: rotate(-90deg); |
| 123 | + transform: translateX(-32px) rotate(-90deg); |
83 | 124 | transition: transform 1s ease-in-out; |
84 | 125 | } |
85 | 126 | </style> |
0 commit comments