npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@artsy/next-layout

v0.2.0

Published

Enhanced layout helpers for Next.js

Downloads

12

Readme

@artsy/next-layout

This package provides a new mechanism for creating shared layouts in Next.js. Inspired by this article, this package enables you to create a new _layout file anywhere in your pages directory to automatically provide a layout for all pages in that directory and its children.

Installation

yarn add @artsy/next-layout

If you don't have one yet, create a .babelrc at the root of your Next.js project and add the following

module.exports = {
  presets: ["next/babel"],
  plugins: ["@artsy/next-layout/babel"],
};

If you don't already have a _app.tsx or _app.jsx in your pages directory go ahead and create one. You'll need the following content:

import React from "react";
import { Layout } from "@artsy/next-layout";

export function App(props) {
  return <Layout {...props} />;
}

If you've already got an _app file and have made modifications to it, that's fine! Instead of returning Component from the props, make sure you pass props to Layout and return that instead.

Usage

Creating a layout

Inside the pages directory of your next.js app create a _layout.tsx or _layout.jsx in whatever directory you'd like to provide a layout for. If you put it in the root (pages) then all pages of your Next.js site would by default have that layout. If you place it in the pages/blog directory, then all pages in the blog directory will have that layout.

A _layout file must have a named export of Layout.

export const Layout = ({ children }) => {
  return (
    <>
      <h1>Welcome to my site!</h1>
      {children}
    </>
}

The children prop passed to Layout is the Next.js page being rendered. Layout will also be passed any props that the Next.js page would receive.

Overriding a layout

If you have a particular page you'd like to override the layout on then doing so is pretty easy! In your page file, simply define a Layout property attached to your exported component.

const MyPage = () => {
  return <p>Lorem Ipsum</p>
}

MyPage.Layout = ({ children }) => {
  return (
    <>
      <h1>This is a layout override</h1>
      {children}
    </>
  )
}

export MyPage;

If you'd just like to disable the layout, you can do so by setting the Layout property to null.

const MyPage = () => {
  return <p>Lorem Ipsum</p>
}

// This will disable the page's layout
MyPage.Layout = null;

export MyPage;