mirror of
https://github.com/kremalicious/blog.git
synced 2024-11-22 09:56:51 +01:00
replace react-transition-group with framer-motion
This commit is contained in:
parent
c9a3f1cc28
commit
d28f4eff9b
875
package-lock.json
generated
875
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
18
package.json
18
package.json
@ -37,6 +37,7 @@
|
|||||||
"fast-exif": "^1.0.1",
|
"fast-exif": "^1.0.1",
|
||||||
"feather-icons": "^4.29.0",
|
"feather-icons": "^4.29.0",
|
||||||
"fraction.js": "^4.2.0",
|
"fraction.js": "^4.2.0",
|
||||||
|
"framer-motion": "^7.6.7",
|
||||||
"gatsby": "^5.0.1",
|
"gatsby": "^5.0.1",
|
||||||
"gatsby-plugin-catch-links": "^5.0.0",
|
"gatsby-plugin-catch-links": "^5.0.0",
|
||||||
"gatsby-plugin-feed": "^5.0.0",
|
"gatsby-plugin-feed": "^5.0.0",
|
||||||
@ -65,7 +66,6 @@
|
|||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-clipboard.js": "^2.0.16",
|
"react-clipboard.js": "^2.0.16",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-transition-group": "^4.4.5",
|
|
||||||
"rehype-react": "^7.1.1",
|
"rehype-react": "^7.1.1",
|
||||||
"remark-parse": "^10.0.1",
|
"remark-parse": "^10.0.1",
|
||||||
"remark-rehype": "^10.1.0",
|
"remark-rehype": "^10.1.0",
|
||||||
@ -79,21 +79,21 @@
|
|||||||
"@testing-library/jest-dom": "^5.16.5",
|
"@testing-library/jest-dom": "^5.16.5",
|
||||||
"@testing-library/react": "^13.4.0",
|
"@testing-library/react": "^13.4.0",
|
||||||
"@types/fs-extra": "^9.0.13",
|
"@types/fs-extra": "^9.0.13",
|
||||||
"@types/jest": "^29.2.2",
|
"@types/jest": "^29.2.3",
|
||||||
"@types/lunr": "^2.3.4",
|
"@types/lunr": "^2.3.4",
|
||||||
"@types/node": "^18.11.9",
|
"@types/node": "^18.11.9",
|
||||||
"@types/react": "^18.0.25",
|
"@types/react": "^18.0.25",
|
||||||
"@types/react-dom": "^18.0.8",
|
"@types/react-dom": "^18.0.9",
|
||||||
"@types/react-transition-group": "^4.4.5",
|
"@types/react-transition-group": "^4.4.5",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.42.1",
|
"@typescript-eslint/eslint-plugin": "^5.43.0",
|
||||||
"@typescript-eslint/parser": "^5.42.1",
|
"@typescript-eslint/parser": "^5.43.0",
|
||||||
"babel-preset-gatsby": "^3.0.0",
|
"babel-preset-gatsby": "^3.0.0",
|
||||||
"eslint": "^8.27.0",
|
"eslint": "^8.28.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-graphql": "^4.0.0",
|
"eslint-plugin-graphql": "^4.0.0",
|
||||||
"eslint-plugin-jsx-a11y": "^6.6.1",
|
"eslint-plugin-jsx-a11y": "^6.6.1",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"eslint-plugin-react": "^7.31.10",
|
"eslint-plugin-react": "^7.31.11",
|
||||||
"eslint-plugin-testing-library": "^5.9.1",
|
"eslint-plugin-testing-library": "^5.9.1",
|
||||||
"fs-extra": "^10.1.0",
|
"fs-extra": "^10.1.0",
|
||||||
"identity-obj-proxy": "^3.0.0",
|
"identity-obj-proxy": "^3.0.0",
|
||||||
@ -106,13 +106,13 @@
|
|||||||
"polar": "https://gitpkg.now.sh/mtyn/polar/vscode?master",
|
"polar": "https://gitpkg.now.sh/mtyn/polar/vscode?master",
|
||||||
"postcss": "^8.4.19",
|
"postcss": "^8.4.19",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"stylelint": "^14.14.1",
|
"stylelint": "^14.15.0",
|
||||||
"stylelint-config-css-modules": "^4.1.0",
|
"stylelint-config-css-modules": "^4.1.0",
|
||||||
"stylelint-config-prettier": "^9.0.4",
|
"stylelint-config-prettier": "^9.0.4",
|
||||||
"stylelint-config-standard": "^29.0.0",
|
"stylelint-config-standard": "^29.0.0",
|
||||||
"stylelint-prettier": "^2.0.0",
|
"stylelint-prettier": "^2.0.0",
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "^10.9.1",
|
||||||
"typescript": "^4.8.4",
|
"typescript": "^4.9.3",
|
||||||
"typescript-plugin-css-modules": "^3.4.0"
|
"typescript-plugin-css-modules": "^3.4.0"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
|
32
src/components/atoms/Transitions.ts
Normal file
32
src/components/atoms/Transitions.ts
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
export const moveInTop = {
|
||||||
|
initial: {
|
||||||
|
opacity: 0,
|
||||||
|
y: -100,
|
||||||
|
transition: { type: 'spring' }
|
||||||
|
},
|
||||||
|
enter: {
|
||||||
|
opacity: 1,
|
||||||
|
y: 0,
|
||||||
|
transition: {
|
||||||
|
type: 'spring',
|
||||||
|
duration: 0.2,
|
||||||
|
stiffness: 120
|
||||||
|
}
|
||||||
|
},
|
||||||
|
exit: {
|
||||||
|
opacity: 0,
|
||||||
|
y: -100,
|
||||||
|
transition: {
|
||||||
|
type: 'spring',
|
||||||
|
duration: 0.2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getAnimationProps(shouldReduceMotion: boolean) {
|
||||||
|
return {
|
||||||
|
initial: `${shouldReduceMotion ? 'enter' : 'initial'}`,
|
||||||
|
animate: `${shouldReduceMotion ? null : 'enter'}`,
|
||||||
|
exit: `${shouldReduceMotion ? null : 'exit'}`
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,13 @@
|
|||||||
import React, { useState, useEffect, ReactElement } from 'react'
|
import React, { useState, useEffect, ReactElement } from 'react'
|
||||||
import { CSSTransition } from 'react-transition-group'
|
import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
|
||||||
import SearchInput from './SearchInput'
|
import SearchInput from './SearchInput'
|
||||||
import SearchButton from './SearchButton'
|
import SearchButton from './SearchButton'
|
||||||
import SearchResults from './SearchResults'
|
import SearchResults from './SearchResults'
|
||||||
import * as styles from './index.module.css'
|
import * as styles from './index.module.css'
|
||||||
|
import { getAnimationProps, moveInTop } from '../../atoms/Transitions'
|
||||||
|
|
||||||
export default function Search(): ReactElement {
|
export default function Search(): ReactElement {
|
||||||
|
const shouldReduceMotion = useReducedMotion()
|
||||||
const [searchOpen, setSearchOpen] = useState(false)
|
const [searchOpen, setSearchOpen] = useState(false)
|
||||||
const [query, setQuery] = useState('')
|
const [query, setQuery] = useState('')
|
||||||
const [results, setResults] = useState([])
|
const [results, setResults] = useState([])
|
||||||
@ -43,20 +45,19 @@ export default function Search(): ReactElement {
|
|||||||
|
|
||||||
{searchOpen && (
|
{searchOpen && (
|
||||||
<>
|
<>
|
||||||
<CSSTransition
|
<LazyMotion features={domAnimation}>
|
||||||
appear={searchOpen}
|
<m.section
|
||||||
in={searchOpen}
|
variants={moveInTop}
|
||||||
timeout={200}
|
{...getAnimationProps(shouldReduceMotion)}
|
||||||
classNames={styles}
|
className={styles.search}
|
||||||
>
|
>
|
||||||
<section className={styles.search}>
|
|
||||||
<SearchInput
|
<SearchInput
|
||||||
value={query}
|
value={query}
|
||||||
onChange={(e: any) => setQuery(e.target.value)}
|
onChange={(e: any) => setQuery(e.target.value)}
|
||||||
onToggle={toggleSearch}
|
onToggle={toggleSearch}
|
||||||
/>
|
/>
|
||||||
</section>
|
</m.section>
|
||||||
</CSSTransition>
|
</LazyMotion>
|
||||||
|
|
||||||
<SearchResults
|
<SearchResults
|
||||||
searchQuery={query}
|
searchQuery={query}
|
||||||
|
Loading…
Reference in New Issue
Block a user