+ {/* Slider for controlling camera X-axis */}
+
+
+
+
+
+
+ )
+}
+
+// Custom camera component
+const DynamicOrthographicCamera = ({ x }: { x: number }) => {
+ const { size, viewport, camera } = useThree()
+ const frustumSize = 50
+
+ const aspect = size.width / size.height
+
+ console.log(aspect, size.width)
+
+ // Dynamically calculate camera bounds
+ const left = (-frustumSize * aspect) / 2
+ const right = (frustumSize * aspect) / 2
+ const top = frustumSize / 2
+ const bottom = -frustumSize / 2
+
+ useEffect(() => {
+ // Update camera bounds dynamically
+ const orthoCamera = camera as THREE.OrthographicCamera
+
+ orthoCamera.left = left
+ orthoCamera.right = right
+ orthoCamera.top = top
+ orthoCamera.bottom = bottom
+ orthoCamera.position.x = x
+ orthoCamera.updateProjectionMatrix()
+ }, [camera, left, right, top, bottom, x])
+
+ useEffect(() => {
+ console.log('Viewport Width in World Units:', viewport.width)
+ }, [viewport.width])
+
+ return null
+}
diff --git a/src/components/mindset/components/Sidebar/Transcript/index.tsx b/src/components/mindset/components/Sidebar/Transcript/index.tsx
new file mode 100644
index 000000000..84472cabc
--- /dev/null
+++ b/src/components/mindset/components/Sidebar/Transcript/index.tsx
@@ -0,0 +1,40 @@
+import styled from 'styled-components'
+import { Flex } from '~/components/common/Flex'
+import { transcript } from '~/components/mindset/data/transcript'
+import { usePlayerStore } from '~/stores/usePlayerStore'
+import { colors } from '~/utils'
+
+export const Transcript = () => {
+ const data = transcript
+
+ const { playingTime } = usePlayerStore((s) => s)
+
+ return (
+