mirror of
https://github.com/Sped0n/bridget.git
synced 2026-04-14 10:09:31 -07:00
92 lines
2.3 KiB
TypeScript
92 lines
2.3 KiB
TypeScript
// eslint-disable-next-line sort-imports
|
|
import { Show, createMemo, createSignal, type JSX } from 'solid-js'
|
|
|
|
import type { ImageJSON } from '../resources'
|
|
import type { Vector } from '../utils'
|
|
|
|
import { CustomCursor } from './customCursor'
|
|
import { Nav } from './nav'
|
|
import { Stage } from './stage'
|
|
import { StageNav } from './stageNav'
|
|
|
|
/**
|
|
* interfaces and types
|
|
*/
|
|
|
|
export interface DesktopImage extends HTMLImageElement {
|
|
dataset: {
|
|
hiUrl: string
|
|
hiImgH: string
|
|
hiImgW: string
|
|
loUrl: string
|
|
loImgH: string
|
|
loImgW: string
|
|
}
|
|
}
|
|
|
|
export interface HistoryItem {
|
|
i: number
|
|
x: number
|
|
y: number
|
|
}
|
|
|
|
/**
|
|
* components
|
|
*/
|
|
|
|
export default function Desktop(props: {
|
|
children?: JSX.Element
|
|
ijs: ImageJSON[]
|
|
prevText: string
|
|
closeText: string
|
|
nextText: string
|
|
loadingText: string
|
|
}): JSX.Element {
|
|
const [cordHist, setCordHist] = createSignal<HistoryItem[]>([])
|
|
const [isLoading, setIsLoading] = createSignal(false)
|
|
const [isOpen, setIsOpen] = createSignal(false)
|
|
const [isAnimating, setIsAnimating] = createSignal(false)
|
|
const [hoverText, setHoverText] = createSignal('')
|
|
const [navVector, setNavVector] = createSignal<Vector>('none')
|
|
|
|
const active = createMemo(() => isOpen() && !isAnimating())
|
|
const cursorText = createMemo(() => (isLoading() ? props.loadingText : hoverText()))
|
|
|
|
return (
|
|
<>
|
|
<Nav />
|
|
<Show when={props.ijs.length > 0}>
|
|
<Stage
|
|
ijs={props.ijs}
|
|
setIsLoading={setIsLoading}
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
isAnimating={isAnimating}
|
|
setIsAnimating={setIsAnimating}
|
|
cordHist={cordHist}
|
|
setCordHist={setCordHist}
|
|
navVector={navVector}
|
|
setNavVector={setNavVector}
|
|
/>
|
|
<Show when={isOpen()}>
|
|
<CustomCursor cursorText={cursorText} active={active} isOpen={isOpen} />
|
|
<StageNav
|
|
prevText={props.prevText}
|
|
closeText={props.closeText}
|
|
nextText={props.nextText}
|
|
loadingText={props.loadingText}
|
|
active={active}
|
|
isAnimating={isAnimating}
|
|
setCordHist={setCordHist}
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
setHoverText={setHoverText}
|
|
navVector={navVector}
|
|
setNavVector={setNavVector}
|
|
/>
|
|
</Show>
|
|
</Show>
|
|
</>
|
|
)
|
|
}
|