From bc1bf9f14a8b2ee107e3b7bb578f0565d8f6bf43 Mon Sep 17 00:00:00 2001 From: feledori Date: Tue, 15 Oct 2024 17:02:03 +0200 Subject: [PATCH] first part of porting libs/ code to typescript --- biome.json | 3 + bun.lockb | Bin 491506 -> 490666 bytes components/gsap/scroll-trigger.js | 2 +- components/link/index.js | 4 +- components/marquee/index.js | 2 +- components/scrollbar/index.js | 2 +- libs/augment.d.ts | 7 ++ libs/lenis/index.js | 3 - libs/maths.ts | 54 +++--------- libs/orchestra/grid/{index.js => index.tsx} | 15 +++- libs/orchestra/{index.js => index.ts} | 33 ++++--- .../orchestra/minimap/{index.js => index.tsx} | 23 +++-- libs/orchestra/react.js | 31 ------- libs/orchestra/react.tsx | 45 ++++++++++ libs/orchestra/stats/{index.js => index.ts} | 6 +- libs/store.ts | 7 +- libs/style-variables/{index.js => index.tsx} | 10 ++- .../hooks/{use-studio.js => use-studio.ts} | 10 ++- libs/theatre/hooks/use-theatre.js | 63 ------------- libs/theatre/hooks/use-theatre.ts | 83 ++++++++++++++++++ libs/theatre/{index.js => index.tsx} | 48 ++++++---- libs/theatre/{r3f.js => r3f.tsx} | 31 ++++--- libs/theatre/studio/{index.js => index.tsx} | 0 libs/utils.ts | 56 ++++++------ .../components/canvas/{index.js => index.tsx} | 37 ++++++-- .../components/canvas/{webgl.js => webgl.tsx} | 6 +- .../flowmap/{index.js => index.tsx} | 24 +++-- .../components/image/{index.js => index.tsx} | 11 ++- .../components/image/{webgl.js => webgl.tsx} | 14 ++- .../postprocessing/{index.js => index.ts} | 10 ++- .../components/preload/{index.js => index.ts} | 10 ++- .../components/raf/{index.js => index.ts} | 4 +- .../components/tunnel/{index.js => index.tsx} | 6 +- .../hooks/{use-texture.js => use-texture.ts} | 18 ++-- .../{use-webgl-rect.js => use-webgl-rect.ts} | 20 +++-- libs/webgl/utils/{blend.js => blend.ts} | 2 +- .../utils/{functions.js => functions.ts} | 2 +- libs/webgl/utils/{noise.js => noise.ts} | 2 +- libs/webgl/utils/{program.js => program.ts} | 22 +++-- package.json | 5 +- tsconfig.json | 1 + 41 files changed, 448 insertions(+), 284 deletions(-) create mode 100644 libs/augment.d.ts delete mode 100644 libs/lenis/index.js rename libs/orchestra/grid/{index.js => index.tsx} (70%) rename libs/orchestra/{index.js => index.ts} (76%) rename libs/orchestra/minimap/{index.js => index.tsx} (83%) delete mode 100644 libs/orchestra/react.js create mode 100644 libs/orchestra/react.tsx rename libs/orchestra/stats/{index.js => index.ts} (89%) rename libs/style-variables/{index.js => index.tsx} (73%) rename libs/theatre/hooks/{use-studio.js => use-studio.ts} (86%) delete mode 100644 libs/theatre/hooks/use-theatre.js create mode 100644 libs/theatre/hooks/use-theatre.ts rename libs/theatre/{index.js => index.tsx} (65%) rename libs/theatre/{r3f.js => r3f.tsx} (61%) rename libs/theatre/studio/{index.js => index.tsx} (100%) rename libs/webgl/components/canvas/{index.js => index.tsx} (57%) rename libs/webgl/components/canvas/{webgl.js => webgl.tsx} (89%) rename libs/webgl/components/flowmap/{index.js => index.tsx} (81%) rename libs/webgl/components/image/{index.js => index.tsx} (82%) rename libs/webgl/components/image/{webgl.js => webgl.tsx} (72%) rename libs/webgl/components/postprocessing/{index.js => index.ts} (90%) rename libs/webgl/components/preload/{index.js => index.ts} (84%) rename libs/webgl/components/raf/{index.js => index.ts} (83%) rename libs/webgl/components/tunnel/{index.js => index.tsx} (76%) rename libs/webgl/hooks/{use-texture.js => use-texture.ts} (59%) rename libs/webgl/hooks/{use-webgl-rect.js => use-webgl-rect.ts} (83%) rename libs/webgl/utils/{blend.js => blend.ts} (98%) rename libs/webgl/utils/{functions.js => functions.ts} (98%) rename libs/webgl/utils/{noise.js => noise.ts} (99%) rename libs/webgl/utils/{program.js => program.ts} (61%) diff --git a/biome.json b/biome.json index d346c9ef..8554098f 100644 --- a/biome.json +++ b/biome.json @@ -45,6 +45,9 @@ "a11y": { "useKeyWithClickEvents": "warn", "useValidAnchor": "warn" + }, + "style": { + "noNonNullAssertion": "off" } } }, diff --git a/bun.lockb b/bun.lockb index 68f9e1433e43c57fae6ce78e18786453bbc562e7..43f2740ca8728fb0496dc8e8f2083e3a1ef45dbf 100755 GIT binary patch delta 93119 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 number -type MapRangeFunction = ( - in_min: number, - in_max: number, - input: number, - out_min: number, - out_max: number -) => number -type LerpFunction = (start: number, end: number, amt: number) => number -type TruncateFunction = (value: number, decimals: number) => number -type ModuloFunction = (n: number, d: number) => number - -// Interface for the Maths object -interface Maths { - lerp: LerpFunction - clamp: ClampFunction - mapRange: MapRangeFunction - truncate: TruncateFunction - modulo: ModuloFunction -} - -// Function implementations -const clamp: ClampFunction = (min, input, max) => { +function clamp(min: number, input: number, max: number) { return Math.max(min, Math.min(input, max)) } -const mapRange: MapRangeFunction = ( - in_min, - in_max, - input, - out_min, - out_max -) => { - return ((input - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min +function mapRange( + inMin: number, + inMax: number, + input: number, + outMin: number, + outMax: number +) { + return ((input - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin } -const lerp: LerpFunction = (start, end, amt) => { - return (1 - amt) * start + amt * end +function lerp(start: number, end: number, amount: number) { + return (1 - amount) * start + amount * end } -const truncate: TruncateFunction = (value, decimals) => { +function truncate(value: number, decimals: number) { return Number.parseFloat(value.toFixed(decimals)) } -const modulo: ModuloFunction = (n, d) => { +function modulo(n: number, d: number) { if (d === 0) return n if (d < 0) return Number.NaN return ((n % d) + d) % d } -// Maths object -const Maths: Maths = { lerp, clamp, mapRange, truncate, modulo } +const Maths = { lerp, clamp, mapRange, truncate, modulo } export { clamp, lerp, mapRange, modulo, truncate } export default Maths diff --git a/libs/orchestra/grid/index.js b/libs/orchestra/grid/index.tsx similarity index 70% rename from libs/orchestra/grid/index.js rename to libs/orchestra/grid/index.tsx index 50f6d1bb..1ef11195 100644 --- a/libs/orchestra/grid/index.js +++ b/libs/orchestra/grid/index.tsx @@ -3,7 +3,13 @@ import cn from 'clsx' import { useMemo } from 'react' import s from './grid.module.css' -export function GridDebugger({ gridClassName = 'layout-grid' }) { +type GridDebuggerProps = { + gridClassName?: string +} + +export function GridDebugger({ + gridClassName = 'layout-grid', +}: GridDebuggerProps) { const { width: windowWidth, height: windowHeight } = useWindowSize() // biome-ignore lint/correctness/useExhaustiveDependencies: columns dependency is needed to adjust on size changes @@ -21,7 +27,12 @@ export function GridDebugger({ gridClassName = 'layout-grid' }) {
{Array.from({ length: columns }).map((_, index) => ( - + + index + }`} + /> ))}
diff --git a/libs/orchestra/index.js b/libs/orchestra/index.ts similarity index 76% rename from libs/orchestra/index.js rename to libs/orchestra/index.ts index 41ff23d3..a9cbfd13 100644 --- a/libs/orchestra/index.js +++ b/libs/orchestra/index.ts @@ -1,4 +1,3 @@ -// import { create } from 'zustand' import { createJSONStorage, persist, @@ -7,14 +6,14 @@ import { import { createStore } from 'zustand/vanilla' const storageKey = 'orchestra' -const store = createStore( +const store = createStore>()( persist( subscribeWithSelector(() => ({})), { name: storageKey, storage: createJSONStorage(() => localStorage), - }, - ), + } + ) ) if (typeof window !== 'undefined') { @@ -26,9 +25,11 @@ if (typeof window !== 'undefined') { } class Toggle { - constructor(id, content) { + id: string + domElement: HTMLButtonElement + private unsubscribeStore: () => void + constructor(id: string, content: string) { this.id = id - this.content = content this.domElement = document.createElement('button') this.domElement.innerText = content this.domElement.title = id @@ -37,11 +38,11 @@ class Toggle { this.unsubscribeStore = store.subscribe( ({ [this.id]: value }) => value, (value) => { - this.domElement.dataset.active = value + this.domElement.dataset.active = String(value) }, { fireImmediately: true, - }, + } ) } @@ -57,17 +58,19 @@ class Toggle { } class Orchestra { + private domElement: HTMLDivElement + toggles: Toggle[] constructor() { this.domElement = document.createElement('div') this.toggles = [] } - subscribe(callback) { - return store.subscribe(callback, { fireImmediately: true }) + subscribe(callback: (value: Record) => void) { + return store.subscribe((s) => s, callback, { fireImmediately: true }) } - add(id, content) { + add(id: string, content: string) { if (this.toggles.find((toggle) => toggle.id === id)) return this const toggle = new Toggle(id, content) @@ -77,10 +80,10 @@ class Orchestra { return this } - remove(id) { + remove(id: string) { const toggle = this.toggles.find((toggle) => toggle.id === id) // this.domElement.removeChild(toggle.domElement) - toggle.destroy() + toggle?.destroy() this.toggles = this.toggles.filter((toggle) => toggle.id !== id) return this @@ -89,7 +92,9 @@ class Orchestra { const isClient = typeof window !== 'undefined' -export default isClient && new Orchestra() +const orchestra = isClient ? new Orchestra() : null + +export default orchestra // To be added to debug page // Orchestra.add('studio', '⚙️').add('stats', '📈').add('grid', '🌐').add('dev', '🚧') diff --git a/libs/orchestra/minimap/index.js b/libs/orchestra/minimap/index.tsx similarity index 83% rename from libs/orchestra/minimap/index.js rename to libs/orchestra/minimap/index.tsx index 52ec6ca6..a4ad8e13 100644 --- a/libs/orchestra/minimap/index.js +++ b/libs/orchestra/minimap/index.tsx @@ -5,7 +5,16 @@ import { useCallback, useEffect, useId, useRef, useState } from 'react' import { create } from 'zustand' import s from './minimap.module.css' -const useMinimapStore = create(() => ({ +type MinimapEntry = { + element: HTMLElement + color: string +} + +type MinimapStore = { + list: Record +} + +const useMinimapStore = create(() => ({ list: {}, })) @@ -38,7 +47,7 @@ export function useMinimap({ color = 'blue' } = {}) { } export function Minimap() { - const [aspectRatio, setAspectRatio] = useState(1) + const [aspectRatio, setAspectRatio] = useState('1') useEffect(() => { const resizeObserver = new ResizeObserver(([entry]) => { @@ -54,14 +63,14 @@ export function Minimap() { } }, []) - const elementRef = useRef() + const elementRef = useRef(null!) const onScroll = useCallback(() => { const progress = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) - elementRef.current.style.setProperty('--progress', progress) + elementRef.current.style.setProperty('--progress', progress.toString()) }, []) useEffect(() => { @@ -95,8 +104,8 @@ export function Minimap() { ) } -function Marker({ element, color }) { - const markerRef = useRef() +function Marker({ element, color }: MinimapEntry) { + const markerRef = useRef(null!) useFrame(() => { if (!element) return @@ -108,7 +117,7 @@ function Marker({ element, color }) { const width = rect.width / window.innerWidth // markerRef.current.style.top = `${top * 100}%` - markerRef.current.style.setProperty('--top', top) + markerRef.current.style.setProperty('--top', top.toString()) // markerRef.current.style.height = `${height * 100}%` markerRef.current.style.left = `${left * 100}%` markerRef.current.style.width = `${width * 100}%` diff --git a/libs/orchestra/react.js b/libs/orchestra/react.js deleted file mode 100644 index a2a9f277..00000000 --- a/libs/orchestra/react.js +++ /dev/null @@ -1,31 +0,0 @@ -import { useEffect, useRef, useState } from 'react' -import Orchestra from '.' - -export function useOrchestra() { - const [state, setState] = useState({}) - - useEffect(() => { - const usubscribe = Orchestra.subscribe(setState) - - return usubscribe - }, []) - - return state -} - -export function OrchestraToggle({ id, children, ...props }) { - const elementRef = useRef() - - useEffect(() => { - Orchestra.add(id, children) - const toggle = Orchestra.toggles.find((toggle) => toggle.id === id) - elementRef.current.appendChild(toggle.domElement) - - return () => { - Orchestra.remove(id) - toggle.domElement.remove() - } - }, [id, children]) - - return
-} diff --git a/libs/orchestra/react.tsx b/libs/orchestra/react.tsx new file mode 100644 index 00000000..1c84f9a2 --- /dev/null +++ b/libs/orchestra/react.tsx @@ -0,0 +1,45 @@ +import { type HTMLAttributes, useEffect, useRef, useState } from 'react' +import Orchestra from '.' + +export function useOrchestra() { + const [state, setState] = useState>({}) + + useEffect(() => { + if (!Orchestra) return + const usubscribe = Orchestra.subscribe(setState) + + return usubscribe + }, []) + + return state +} + +type OrchestraToggleProps = Omit< + HTMLAttributes, + 'id' | 'children' +> & { + children: string + id: string +} + +export function OrchestraToggle({ + id, + children, + ...props +}: OrchestraToggleProps) { + const elementRef = useRef(null!) + + useEffect(() => { + if (!Orchestra) return + Orchestra.add(id, children) + const toggle = Orchestra.toggles.find((toggle) => toggle.id === id) + toggle?.domElement && elementRef.current.appendChild(toggle.domElement) + + return () => { + Orchestra?.remove(id) + toggle?.domElement.remove() + } + }, [id, children]) + + return
+} diff --git a/libs/orchestra/stats/index.js b/libs/orchestra/stats/index.ts similarity index 89% rename from libs/orchestra/stats/index.js rename to libs/orchestra/stats/index.ts index ad8b48cf..0bc8c709 100644 --- a/libs/orchestra/stats/index.js +++ b/libs/orchestra/stats/index.ts @@ -1,11 +1,11 @@ import { useFrame } from '@darkroom.engineering/hamo' -import { useCanvas } from 'libs/webgl/components/canvas' +import { useThree } from '@react-three/fiber' import { useEffect, useMemo } from 'react' import _Stats from 'stats-gl' import s from './stats.module.css' export function Stats() { - const { gl } = useCanvas() + const { gl } = useThree() const stats = useMemo(() => new _Stats({ minimal: false }), []) @@ -31,4 +31,6 @@ export function Stats() { stats.end() stats.update() }, Number.POSITIVE_INFINITY) + + return null } diff --git a/libs/store.ts b/libs/store.ts index ba0c9d8d..2be65fb6 100644 --- a/libs/store.ts +++ b/libs/store.ts @@ -1,6 +1,11 @@ import { create } from 'zustand' -export const useStore = create((set) => ({ +type Store = { + isNavOpened: boolean + setIsNavOpened: (value: boolean) => void +} + +export const useStore = create((set) => ({ isNavOpened: false, setIsNavOpened: (value: boolean) => set({ isNavOpened: value }), })) diff --git a/libs/style-variables/index.js b/libs/style-variables/index.tsx similarity index 73% rename from libs/style-variables/index.js rename to libs/style-variables/index.tsx index 864ffa64..67748f01 100644 --- a/libs/style-variables/index.js +++ b/libs/style-variables/index.tsx @@ -1,4 +1,12 @@ -export function StyleVariables({ colors = {}, themes = {} }) { +type StyleVariablesProps = { + colors?: Record + themes?: Record> +} + +export function StyleVariables({ + colors = {}, + themes = {}, +}: StyleVariablesProps) { return (