8.0.5 • Published 4 days ago

@graphcommerce/framer-next-pages v8.0.5

Weekly downloads
-
License
-
Repository
github
Last release
4 days ago

Framer Next Pages

  • Ability to create pages that are overlays over other pages.
  • Ability to create multiple levels of overlays over other pages.
  • Ability to create entry and exit animations.
  • Ability to maintain a SharedComponent between multiple pages.
  • Handles proper scroll position

This package does not provide any actual overlays, that is up to the implementor.

Installing

Create a pages/_app.ts file:

import { FramerNextPages } from '@graphcommerce/framer-next-pages'
import { AppPropsType } from 'next/dist/next-server/lib/utils'

export default function App({ router, Component, pageProps }: AppPropsType) {
  return (
    <FramerNextPages
      router={router}
      Component={Component}
      pageProps={pageProps}
    />
  )
}

Enable Next's scrollRestoration:

const config = {
  experimental: {
    scrollRestoration: true,
  },
}

Creating overlays

Create a page that works as an overlay:

Define pageOptions on a page. This can be any static or dynamic page:

Example routes:

  • pages/overlay.tsx
  • pages/overlay/[overlayId].tsx
import { PageOptions } from '@graphcommerce/framer-next-pages'

export default function Overlay() {
  return <MyOverlay>blabla</MyOverlay>
}

Overlay.pageOptions = {
  overlayGroup: 'left',
  // sharedKey default is `(router) => router.asPath` resulting in `pages/overlay/[overlayId]`
} as PageOptions

Create an overlay that doesn't share the layout in a dynamic routes:

Define key as router.asPath in pageOptions.

Example route:

  • pages/overlay/[overlayId]
import { PageOptions } from '@graphcommerce/framer-next-pages'

Overlay.pageOptions = {
  overlayGroup: 'left',
  sharedKey: (router) => router.asPath, // will return pages/overlay/123
} as PageOptions

Create an overlay that shares the layout between different dynamic routs:

Define key as a static value in pageOptions in your routes.

Example routes:

  • pages/account.tsx
  • pages/account/orders.tsx
  • pages/account/orders/[orderId].tsx
import { PageOptions } from '@graphcommerce/framer-next-pages'

Overlay.pageOptions = {
  overlayGroup: 'left',
  sharedKey: () => 'account',
} as PageOptions

SharedComponent

To create a stable layout between multiple routes we can define a SharedComponent.

Example route:

  • pages/overlay/[overlayId]
CmsPage.pageOptions = {
  SharedComponent: LayoutSheet,
} as PageOptions

Passing props to a SharedComponent with sharedProps

CmsPage.pageOptions = {
  SharedComponent: LayoutSheet,
  sharedProps: { variant: 'bottom' },
} as PageOptions

Passing props to a SharedComponent with getStaticProps

export function getStaticProps() {
  return {
    variantMd: 'bottom',
  }
}

Create a SharedComponent between multiple routes

const pageOptions: PageOptions<LayoutSheetProps> = {
  SharedComponent: LayoutSheet,
  sharedKey: () => 'page',
}
const pageOptions: PageOptions<LayoutSheetProps> = {
  overlayGroup: 'account',
  SharedComponent: LayoutSheet,
  sharedKey: () => 'account',
}

Hooks

We have multiple hooks available to animate based on certain states, etc.

export default function MyComponent() {
  const { level, depth, direction } = usePageContext()
}

usePageContext().level

If we have multiple pages layered on top of each other we get the level the page has.

E.g.

  • /my-regular-page: level === 0

After navigating to overlay-one

  • /my-regular-page: level === 0
  • /overlay-one: level === 1

After navigation to overlay-two

  • /my-regular-page: level === 0
  • /overlay-one: level === 1
  • /overlay-two: level === 2 /

usePageContext().depth

If we have multiple pages layered on top of each other we get the depth the page has.

E.g.

  • /my-regular-page: depth === 0

After navigating to overlay-one

  • /my-regular-page: depth === -1
  • /overlay-one: depth === 0

After navigation to overlay-two

  • /my-regular-page: depth === -2
  • /overlay-one: depth === -1
  • /overlay-two: depth === 0

usePageContext().direction

  • When navigating forward: usePageContext().direction === 1
  • When navigating back: usePageContext().direction === -1

usePageContext().backSteps

When navigating inside an overlay we need to be able to navigate back. We give a count that shows us if we can go back

function MyComponent {
  const { backSteps } = usePageContext();
  const router = useRouter();
  return <button onClick={backSteps > 0 && () => router.back()}>back</button>
}

usePageContext().closeSteps

When tying to close an overlay we need to be able to navigate back x-times to close the overlay. So we give the times it needs to go back.

function MyComponent {
  const { closeSteps } = usePageContext();
  const go = useGo();
  return <button onClick={closeSteps > 0 && () => go(closeSteps * -1)}>close</button>
}

Fallback routes

When an overlay is accessed by URL, it will render but it won't render as a normal page. You can provide a fallback to render something in this case.

Workins

Creates a pageList containing all the pages that should be rendered on top of each other.

Each time a new page is provided to <FramerNextPages /> it will add them to the pageList. This pageList is remembered when navigating between pages.

If an overlay is rendered, we find the closest 'regular' page (that isn't an overlay) and render from that page until the current active page.

Uses Framer's AnimatePresence to animate pages in and out of existence.

8.1.0-canary.12

4 days ago

8.1.0-canary.11

8 days ago

8.1.0-canary.9

10 days ago

8.1.0-canary.10

10 days ago

8.1.0-canary.8

11 days ago

8.1.0-canary.6

17 days ago

8.1.0-canary.7

17 days ago

8.0.5-canary.11

18 days ago

8.1.0-canary.5

18 days ago

8.0.6-canary.0

18 days ago

8.0.6-canary.2

18 days ago

8.0.6-canary.1

18 days ago

8.0.6-canary.4

18 days ago

8.0.6-canary.3

18 days ago

8.0.5-canary.9

21 days ago

8.0.5-canary.10

21 days ago

8.0.5

21 days ago

8.0.5-canary.8

23 days ago

8.0.5-canary.7

23 days ago

8.0.5-canary.6

23 days ago

8.0.5-canary.5

28 days ago

8.0.5-canary.4

1 month ago

8.0.5-canary.3

1 month ago

8.0.5-canary.2

1 month ago

8.0.5-canary.1

1 month ago

8.0.5-canary.0

1 month ago

8.0.4-canary.1

1 month ago

8.0.4

1 month ago

8.0.3-canary.9

2 months ago

8.0.4-canary.0

2 months ago

8.0.3-canary.8

2 months ago

8.0.3-canary.7

2 months ago

8.0.3

2 months ago

8.0.3-canary.6

3 months ago

8.0.3-canary.5

3 months ago

8.0.3-canary.4

3 months ago

8.0.3-canary.2

3 months ago

8.0.3-canary.3

3 months ago

8.1.0-canary.2

3 months ago

8.1.0-canary.3

3 months ago

8.0.3-canary.0

3 months ago

8.0.3-canary.1

3 months ago

8.0.2-canary.3

3 months ago

8.0.2-canary.2

3 months ago

8.0.2-canary.0

3 months ago

8.0.2

3 months ago

8.0.1-canary.4

3 months ago

8.0.1

3 months ago

8.0.1-canary.3

3 months ago

8.0.1-canary.2

3 months ago

8.0.1-canary.1

3 months ago

8.0.1-canary.0

3 months ago

8.0.0-canary.100

3 months ago

8.0.0-canary.98

3 months ago

8.0.0-canary.99

3 months ago

8.0.0-canary.97

3 months ago

8.0.0

3 months ago

8.0.0-canary.94

4 months ago

8.0.0-canary.95

4 months ago

8.0.0-canary.93

4 months ago

8.0.0-canary.92

4 months ago

8.0.0-canary.91

4 months ago

8.0.0-canary.89

4 months ago

8.0.0-canary.90

4 months ago

8.0.0-canary.78

4 months ago

8.0.0-canary.79

4 months ago

8.0.0-canary.80

4 months ago

8.0.0-canary.81

4 months ago

8.0.0-canary.82

4 months ago

8.0.0-canary.87

4 months ago

8.0.0-canary.88

4 months ago

8.0.0-canary.83

4 months ago

8.0.0-canary.84

4 months ago

8.0.0-canary.85

4 months ago

8.0.0-canary.86

4 months ago

8.0.0-canary.76

4 months ago

8.0.0-canary.77

4 months ago

8.0.0-canary.75

4 months ago

8.0.0-canary.73

4 months ago

8.0.0-canary.74

4 months ago

8.0.0-canary.72

4 months ago

8.0.0-canary.69

4 months ago

8.0.0-canary.70

4 months ago

8.0.0-canary.71

4 months ago

7.1.0-canary.68

4 months ago

7.1.0-canary.66

4 months ago

7.1.0-canary.67

4 months ago

7.1.0-canary.65

5 months ago

7.1.0-canary.64

5 months ago

7.1.0-canary.63

5 months ago

7.0.2-canary.7

7 months ago

7.0.2-canary.6

7 months ago

7.0.2-canary.3

7 months ago

7.0.2-canary.2

7 months ago

7.0.2-canary.5

7 months ago

7.0.2-canary.4

7 months ago

7.0.2-canary.1

7 months ago

7.0.2-canary.0

8 months ago

6.2.0-canary.60

10 months ago

6.2.0-canary.57

10 months ago

6.2.0-canary.59

10 months ago

6.2.0-canary.58

10 months ago

8.0.0-canary.40

6 months ago

7.1.0-canary.9

7 months ago

7.1.0-canary.8

7 months ago

7.1.0-canary.36

6 months ago

7.1.0-canary.37

6 months ago

7.1.0-canary.38

6 months ago

7.1.0-canary.39

6 months ago

7.1.0-canary.32

6 months ago

7.1.0-canary.33

6 months ago

7.1.0-canary.34

6 months ago

7.1.0-canary.35

6 months ago

7.1.0-canary.30

6 months ago

7.1.0-canary.31

6 months ago

7.1.0-canary.29

6 months ago

7.1.0-canary.25

7 months ago

7.1.0-canary.26

7 months ago

7.1.0-canary.27

7 months ago

7.1.0-canary.28

7 months ago

7.1.0-canary.21

7 months ago

7.1.0-canary.22

7 months ago

7.1.0-canary.23

7 months ago

7.1.0-canary.24

7 months ago

7.1.0-canary.20

7 months ago

7.1.0-canary.18

7 months ago

7.1.0-canary.19

7 months ago

7.1.0-canary.14

7 months ago

7.1.0-canary.15

7 months ago

7.1.0-canary.16

7 months ago

7.1.0-canary.17

7 months ago

7.1.0-canary.10

7 months ago

7.0.0

8 months ago

7.1.0-canary.11

7 months ago

7.1.0-canary.12

7 months ago

7.1.0-canary.13

7 months ago

7.0.1

8 months ago

7.0.1-canary.15

8 months ago

7.0.1-canary.14

8 months ago

7.0.1-canary.13

8 months ago

7.0.1-canary.12

8 months ago

7.0.1-canary.11

8 months ago

7.0.1-canary.10

8 months ago

6.2.0-canary.91

9 months ago

6.2.0-canary.90

9 months ago

6.2.0-canary.93

9 months ago

6.2.0-canary.92

9 months ago

6.2.0-canary.88

9 months ago

6.2.0-canary.87

9 months ago

6.2.0-canary.89

9 months ago

6.2.0-canary.84

9 months ago

6.2.0-canary.83

9 months ago

6.2.0-canary.86

9 months ago

6.2.0-canary.85

9 months ago

6.2.0-canary.98

8 months ago

6.2.0-canary.95

9 months ago

6.2.0-canary.94

9 months ago

6.2.0-canary.97

8 months ago

6.2.0-canary.96

8 months ago

7.1.0-canary.61

5 months ago

7.1.0-canary.62

5 months ago

7.1.0-canary.60

5 months ago

6.2.0-canary.71

9 months ago

6.2.0-canary.70

9 months ago

6.2.0-canary.66

10 months ago

6.2.0-canary.65

10 months ago

6.2.0-canary.68

9 months ago

6.2.0-canary.67

10 months ago

7.1.0-canary.58

6 months ago

6.2.0-canary.62

10 months ago

7.1.0-canary.59

6 months ago

6.2.0-canary.61

10 months ago

6.2.0-canary.64

10 months ago

6.2.0-canary.63

10 months ago

7.1.0-canary.54

6 months ago

7.1.0-canary.55

6 months ago

7.1.0-canary.56

6 months ago

7.1.0-canary.57

6 months ago

7.1.0-canary.50

6 months ago

7.1.0-canary.51

6 months ago

6.2.0-canary.69

9 months ago

7.1.0-canary.52

6 months ago

7.1.0-canary.53

6 months ago

6.2.0-canary.80

9 months ago

7.0.1-canary.9

8 months ago

6.2.0-canary.82

9 months ago

6.2.0-canary.81

9 months ago

7.0.1-canary.7

8 months ago

7.0.1-canary.8

8 months ago

7.0.1-canary.5

8 months ago

7.0.1-canary.6

8 months ago

7.0.1-canary.3

8 months ago

6.2.0-canary.77

9 months ago

7.0.1-canary.4

8 months ago

6.2.0-canary.76

9 months ago

7.0.1-canary.1

8 months ago

6.2.0-canary.79

9 months ago

7.0.1-canary.2

8 months ago

6.2.0-canary.78

9 months ago

7.1.0-canary.47

6 months ago

6.2.0-canary.73

9 months ago

7.1.0-canary.48

6 months ago

7.0.1-canary.0

8 months ago

6.2.0-canary.72

9 months ago

7.1.0-canary.49

6 months ago

6.2.0-canary.75

9 months ago

6.2.0-canary.74

9 months ago

7.1.0-canary.43

6 months ago

7.1.0-canary.44

6 months ago

7.1.0-canary.45

6 months ago

7.1.0-canary.46

6 months ago

7.1.0-canary.41

6 months ago

7.1.0-canary.42

6 months ago

6.2.0-canary.56

11 months ago

6.2.0-canary.44

11 months ago

6.2.0-canary.43

11 months ago

6.2.0-canary.46

11 months ago

6.2.0-canary.45

11 months ago

6.2.0-canary.40

11 months ago

6.2.0-canary.42

11 months ago

6.2.0-canary.41

11 months ago

6.2.0-canary.48

11 months ago

6.2.0-canary.47

11 months ago

6.2.0-canary.49

11 months ago

6.2.0-canary.55

11 months ago

6.2.0-canary.54

11 months ago

6.2.0-canary.51

11 months ago

6.2.0-canary.50

11 months ago

6.2.0-canary.53

11 months ago

6.2.0-canary.52

11 months ago

6.2.0-canary.35

11 months ago

6.2.0-canary.34

11 months ago

6.2.0-canary.37

11 months ago

6.2.0-canary.36

11 months ago

6.2.0-canary.39

11 months ago

6.2.0-canary.38

11 months ago

7.0.0-canary.21

12 months ago

6.2.0-canary.22

12 months ago

6.2.0-canary.21

12 months ago

6.2.0-canary.24

12 months ago

6.2.0-canary.23

12 months ago

6.2.0-canary.20

12 months ago

6.2.0-canary.29

12 months ago

7.0.0-canary.13

1 year ago

7.0.0-canary.12

1 year ago

6.2.0-canary.26

12 months ago

6.2.0-canary.25

12 months ago

6.2.0-canary.28

12 months ago

6.2.0-canary.27

12 months ago

6.2.0-canary.33

12 months ago

6.2.0-canary.32

12 months ago

6.2.0-canary.31

12 months ago

6.2.0-canary.30

12 months ago

6.2.0-canary.11

1 year ago

6.2.0-canary.10

1 year ago

6.2.0-canary.13

1 year ago

6.2.0-canary.12

1 year ago

6.2.0-canary.19

12 months ago

6.2.0-canary.18

12 months ago

6.2.0-canary.15

1 year ago

6.2.0-canary.14

1 year ago

6.2.0-canary.17

12 months ago

6.2.0-canary.16

1 year ago

6.2.0-canary.7

1 year ago

6.2.0-canary.8

1 year ago

6.2.0-canary.6

1 year ago

6.2.0-canary.9

1 year ago

6.1.1-canary.3

1 year ago

6.1.1-canary.4

1 year ago

6.1.1-canary.5

1 year ago

6.0.0-canary.51

1 year ago

6.0.0-canary.50

1 year ago

6.1.0

1 year ago

6.0.0-canary.49

1 year ago

6.0.2-canary.22

1 year ago

6.0.2-canary.21

1 year ago

6.0.0-canary.44

1 year ago

6.0.0-canary.43

1 year ago

6.0.0-canary.42

1 year ago

6.0.0-canary.41

1 year ago

6.0.0-canary.48

1 year ago

6.0.0-canary.47

1 year ago

6.0.0-canary.46

1 year ago

6.0.0-canary.45

1 year ago

6.0.1-canary.4

1 year ago

6.0.1-canary.5

1 year ago

6.0.1-canary.6

1 year ago

6.0.1-canary.7

1 year ago

6.0.1-canary.0

1 year ago

6.0.1-canary.1

1 year ago

6.0.1-canary.2

1 year ago

6.0.1-canary.3

1 year ago

6.0.0-canary.54

1 year ago

6.0.0-canary.53

1 year ago

6.0.0-canary.52

1 year ago

6.0.0-canary.40

1 year ago

6.0.0-canary.39

1 year ago

6.0.0-canary.38

1 year ago

6.0.0-canary.33

1 year ago

6.0.0-canary.32

1 year ago

6.0.0-canary.37

1 year ago

6.0.0-canary.36

1 year ago

6.0.0-canary.35

1 year ago

6.0.0-canary.34

1 year ago

6.0.2-canary.8

1 year ago

6.0.2-canary.7

1 year ago

6.0.2-canary.6

1 year ago

6.0.2-canary.5

1 year ago

6.0.2-canary.9

1 year ago

6.0.2-canary.0

1 year ago

6.0.2-canary.4

1 year ago

6.0.2-canary.3

1 year ago

6.0.2-canary.2

1 year ago

6.0.2-canary.1

1 year ago

6.0.1

1 year ago

6.0.0

1 year ago

6.1.1-canary.0

1 year ago

6.1.1-canary.1

1 year ago

6.1.1-canary.2

1 year ago

6.0.2-canary.10

1 year ago

6.0.2-canary.13

1 year ago

6.0.2-canary.12

1 year ago

6.0.2-canary.15

1 year ago

6.0.2-canary.14

1 year ago

6.0.2-canary.17

1 year ago

6.0.2-canary.16

1 year ago

6.0.2-canary.19

1 year ago

6.0.2-canary.18

1 year ago

6.0.0-canary.29

1 year ago

6.0.0-canary.28

1 year ago

6.0.0-canary.27

1 year ago

6.0.0-canary.31

1 year ago

6.0.0-canary.30

1 year ago

6.0.0-canary.26

1 year ago

6.0.0-canary.25

1 year ago

6.0.0-canary.22

1 year ago

6.0.0-canary.21

1 year ago

6.0.0-canary.20

1 year ago

6.0.0-canary.24

1 year ago

6.0.0-canary.23

1 year ago

5.2.0-canary.13

1 year ago

5.2.0-canary.14

1 year ago

5.2.0-canary.15

1 year ago

5.2.0-canary.16

1 year ago

5.2.0-canary.17

1 year ago

5.2.0-canary.18

1 year ago

5.2.0-canary.19

1 year ago

5.2.0-canary.10

1 year ago

5.2.0-canary.11

1 year ago

5.2.0-canary.12

1 year ago

5.2.0-canary.7

1 year ago

5.2.0-canary.8

1 year ago

5.2.0-canary.9

1 year ago

5.1.1

1 year ago

5.1.0

1 year ago

5.1.0-canary.11

1 year ago

5.1.0-canary.10

1 year ago

5.0.0-canary.14

1 year ago

5.1.1-canary.0

1 year ago

5.1.1-canary.1

1 year ago

4.31.0-canary.0

2 years ago

4.31.0-canary.2

2 years ago

4.31.0-canary.1

2 years ago

4.31.0-canary.4

2 years ago

4.31.0-canary.3

2 years ago

4.31.0-canary.6

1 year ago

4.31.0-canary.5

1 year ago

5.0.0-canary.9

1 year ago

4.31.0-canary.8

1 year ago

4.31.0-canary.7

1 year ago

5.1.0-canary.5

1 year ago

5.1.0-canary.6

1 year ago

5.1.0-canary.3

1 year ago

5.1.0-canary.4

1 year ago

5.1.0-canary.9

1 year ago

5.1.0-canary.7

1 year ago

5.0.0

1 year ago

5.1.0-canary.8

1 year ago

5.2.0-canary.0

1 year ago

5.2.0-canary.1

1 year ago

5.2.0-canary.2

1 year ago

5.2.0-canary.3

1 year ago

5.2.0-canary.4

1 year ago

5.2.0-canary.5

1 year ago

5.2.0-canary.6

1 year ago

5.1.0-canary.1

1 year ago

5.1.0-canary.2

1 year ago

5.1.0-canary.0

1 year ago

4.30.2

2 years ago

4.30.1

2 years ago

3.3.1

2 years ago

3.3.2

2 years ago

4.30.0

2 years ago

4.30.0-canary.1

2 years ago

4.30.0-canary.0

2 years ago

3.3.0

2 years ago

3.2.5

2 years ago

3.2.4

2 years ago

3.2.3

2 years ago

3.2.2

2 years ago

3.2.1

2 years ago

3.2.0

2 years ago

3.1.6

2 years ago

3.1.5

2 years ago

3.1.4

2 years ago

3.1.3

2 years ago

3.1.2

2 years ago

3.1.1

2 years ago

3.1.0

2 years ago

3.0.2

2 years ago

3.0.1

2 years ago

3.0.0

2 years ago

2.109.2

2 years ago

2.109.1

2 years ago

2.109.0

2 years ago

2.108.11

2 years ago

2.108.10

2 years ago

2.108.9

2 years ago

2.108.8

2 years ago

2.108.7

2 years ago

2.108.6

2 years ago

2.108.5

2 years ago

2.108.4

2 years ago

2.108.3

2 years ago

2.108.2

2 years ago

2.108.1

2 years ago

2.108.0

2 years ago

2.107.5

2 years ago

2.107.4

3 years ago

2.107.3

3 years ago

2.107.2

3 years ago

2.107.1

3 years ago

2.107.0

3 years ago

2.106.12

3 years ago

2.106.11

3 years ago

2.106.10

3 years ago

2.106.9

3 years ago

2.106.8

3 years ago

2.106.7

3 years ago

2.106.6

3 years ago

2.106.5

3 years ago

2.106.4

3 years ago

2.106.3

3 years ago

2.106.2

3 years ago

2.106.1

3 years ago