fix(styles): animation issues
This commit is contained in:
parent
5b86ebbf7e
commit
87e13f71f5
@ -7,7 +7,7 @@
|
|||||||
- [ ] Using [Scuti](https://scuti.netlify.app/) dataset for its [renderer.](https://github.com/kozennnn/scuti-renderer)
|
- [ ] Using [Scuti](https://scuti.netlify.app/) dataset for its [renderer.](https://github.com/kozennnn/scuti-renderer)
|
||||||
- [ ] Languages feature. (Default: EN)
|
- [ ] Languages feature. (Default: EN)
|
||||||
- [ ] Download Habbo assets. (>800 MB of disk memory, make sure the IPC handles it correctly)
|
- [ ] Download Habbo assets. (>800 MB of disk memory, make sure the IPC handles it correctly)
|
||||||
- [ ] Fix rendering animation issues.
|
- [x] Fix rendering animation issues.
|
||||||
- [ ] Add "abort" button with written data suppression feature.
|
- [ ] Add "abort" button with written data suppression feature.
|
||||||
- [x] Convert front-end with SolidJS
|
- [x] Convert front-end with SolidJS
|
||||||
- [x] Fix issue of prettier-plugin-tailwindcss
|
- [x] Fix issue of prettier-plugin-tailwindcss
|
||||||
|
@ -1,19 +1,22 @@
|
|||||||
import { Show } from 'solid-js'
|
import { Show, createEffect } from 'solid-js'
|
||||||
import type { Component } from 'solid-js'
|
import type { Component } from 'solid-js'
|
||||||
import type { MotionComponentProps, Options as MotionProps } from '@motionone/solid'
|
import type { MotionComponentProps, Variant } from '@motionone/solid'
|
||||||
import { Motion, Presence } from '@motionone/solid'
|
import { Motion, Presence } from '@motionone/solid'
|
||||||
|
|
||||||
export interface AnimateViewProps extends MotionComponentProps {
|
export interface AnimateViewProps extends MotionComponentProps {
|
||||||
|
animation: Record<string, Variant>
|
||||||
condition: boolean
|
condition: boolean
|
||||||
animation: MotionProps
|
|
||||||
class?: string
|
class?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AnimateView: Component<AnimateViewProps> = (props) => {
|
export const AnimateView: Component<AnimateViewProps> = (props) => {
|
||||||
|
createEffect(() => {
|
||||||
|
console.log(props.condition)
|
||||||
|
})
|
||||||
return (
|
return (
|
||||||
<Presence>
|
<Presence>
|
||||||
<Show when={props.condition}>
|
<Show when={props.condition}>
|
||||||
<Motion.div {...props} initial={props.initial} animate={props.animate} exit={props.exit}>
|
<Motion.div class={props.class} {...props.animation}>
|
||||||
{props.children}
|
{props.children}
|
||||||
</Motion.div>
|
</Motion.div>
|
||||||
</Show>
|
</Show>
|
||||||
|
@ -13,7 +13,7 @@ export const Loader: Component<LoaderProps> = (props) => {
|
|||||||
<AnimateView
|
<AnimateView
|
||||||
class={props.class}
|
class={props.class}
|
||||||
condition={props.active}
|
condition={props.active}
|
||||||
animation={Animation.fadeInOut({ scale: [0, 1, 0], y: [1, 4, 1] })}>
|
variants={Animation.fadeInOut({ scale: [0, 1, 0], y: [1, 4, 1] })}>
|
||||||
<svg width='44' height='44' viewBox='0 0 44 44' xmlns='http://www.w3.org/2000/svg' stroke='#fff'>
|
<svg width='44' height='44' viewBox='0 0 44 44' xmlns='http://www.w3.org/2000/svg' stroke='#fff'>
|
||||||
<g fill='none' fill-rule='evenodd' stroke-width={2}>
|
<g fill='none' fill-rule='evenodd' stroke-width={2}>
|
||||||
<circle cx='22' cy='22' r='1'>
|
<circle cx='22' cy='22' r='1'>
|
||||||
|
@ -28,26 +28,17 @@ export const Downloader: Component<DownloaderProps> = (props) => {
|
|||||||
{props.children}
|
{props.children}
|
||||||
|
|
||||||
<AnimateView
|
<AnimateView
|
||||||
condition={activeContent()}
|
|
||||||
animation={Animation.fadeInOut()}
|
animation={Animation.fadeInOut()}
|
||||||
|
condition={activeContent()}
|
||||||
class='pointer-events-none absolute left-0 top-0 flex h-full w-full flex-col items-center justify-center rounded-xl bg-black/70 pb-5 text-center text-[12px] text-white'>
|
class='pointer-events-none absolute left-0 top-0 flex h-full w-full flex-col items-center justify-center rounded-xl bg-black/70 pb-5 text-center text-[12px] text-white'>
|
||||||
<Motion.h1
|
<Motion.h1 {...Animation.fadeInOut({ y: [-20, 0, -20] })} class='mb-3 text-[16px]'>
|
||||||
initial={{ opacity: 0, y: -20 }}
|
|
||||||
animate={{ opacity: 1, y: 0 }}
|
|
||||||
exit={{ opacity: 0, y: -20 }}
|
|
||||||
class='mb-3 text-[16px]'>
|
|
||||||
{props.content.title}
|
{props.content.title}
|
||||||
</Motion.h1>
|
</Motion.h1>
|
||||||
|
|
||||||
<For each={props.content.features}>
|
<For each={props.content.features}>
|
||||||
{(feature) => {
|
{(feature) => {
|
||||||
return (
|
return (
|
||||||
<Motion.span
|
<Motion.span {...Animation.fadeInOut({ y: [50, 0, 50], scale: [0.75, 1, 0.75] })}>{feature}</Motion.span>
|
||||||
initial={{ opacity: 0, y: 50, scale: 0.75 }}
|
|
||||||
animate={{ opacity: 1, y: 0, scale: 1 }}
|
|
||||||
exit={{ opacity: 0, y: 50, scale: 0.75 }}>
|
|
||||||
{feature}
|
|
||||||
</Motion.span>
|
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
</For>
|
</For>
|
||||||
|
@ -4,7 +4,7 @@ import classNames from 'classnames'
|
|||||||
|
|
||||||
import type { ConvertionHandler } from '../../../types'
|
import type { ConvertionHandler } from '../../../types'
|
||||||
import { handleConvertion } from '../../../tools/handleConvertion'
|
import { handleConvertion } from '../../../tools/handleConvertion'
|
||||||
import { Animation, GameAssetsDownloader, GameDataDownloader } from '../../../config'
|
import { GameAssetsDownloader, GameDataDownloader } from '../../../config'
|
||||||
import { Button, Image, Loader } from '../../design'
|
import { Button, Image, Loader } from '../../design'
|
||||||
import { Popup } from '../Popup'
|
import { Popup } from '../Popup'
|
||||||
import { Downloader } from './Downloader/Downloader'
|
import { Downloader } from './Downloader/Downloader'
|
||||||
@ -45,10 +45,11 @@ export const Downloaders: Component = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Loader active={loading()} class='mt-10' />
|
|
||||||
<Popup condition={popup()}>
|
<Popup condition={popup()}>
|
||||||
<span class={classNames('', { 'text-red-600': error })}>{message()}</span>
|
<span class={classNames('', { 'text-red-600': error })}>{message()}</span>
|
||||||
|
|
||||||
|
<Loader active={loading()} class='mt-10' />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
value='Close'
|
value='Close'
|
||||||
icon={<Image src='/icons/cross.png' />}
|
icon={<Image src='/icons/cross.png' />}
|
||||||
|
@ -12,10 +12,7 @@ export const Popup: Component<PopupProps> = (props) => {
|
|||||||
return (
|
return (
|
||||||
<AnimateView
|
<AnimateView
|
||||||
animation={Animation.fadeInOut()}
|
animation={Animation.fadeInOut()}
|
||||||
class='absolute left-0 top-0 z-20 flex h-screen w-screen flex-col items-center justify-center bg-black/40 text-white backdrop-blur-xl transition-all'
|
class='absolute left-0 top-0 z-20 flex h-screen w-screen flex-col items-center justify-center bg-black/40 text-white'
|
||||||
initial={{ opacity: 0 }}
|
|
||||||
animate={{ opacity: 1 }}
|
|
||||||
exit={{ opacity: 0 }}
|
|
||||||
condition={props.condition}>
|
condition={props.condition}>
|
||||||
{props.children}
|
{props.children}
|
||||||
</AnimateView>
|
</AnimateView>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import type { Options, Variant } from '@motionone/solid'
|
import type { Variant } from '@motionone/solid'
|
||||||
|
|
||||||
const fadeInOut = (variant?: Variant): Options => {
|
const fadeInOut = (variant?: Variant): Record<string, Variant> => {
|
||||||
const getVariantAtPosition = (pos: 0 | 1 | 2): Record<string, number> | null => {
|
const getVariantAtPosition = (pos: 0 | 1 | 2): Record<string, number> | null => {
|
||||||
if (variant == null) return null
|
if (variant == null) return null
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ const fadeInOut = (variant?: Variant): Options => {
|
|||||||
return {
|
return {
|
||||||
initial: { opacity: 0, ...getVariantAtPosition(0) },
|
initial: { opacity: 0, ...getVariantAtPosition(0) },
|
||||||
animate: { opacity: 1, ...getVariantAtPosition(1) },
|
animate: { opacity: 1, ...getVariantAtPosition(1) },
|
||||||
exit: { opacity: 1, ...getVariantAtPosition(2) }
|
exit: { opacity: 0, ...getVariantAtPosition(2) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user