<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/ivica-batinic/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Thu, 30 Apr 2026 13:44:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>38682https://infinum.com/uploads/2023/05/react-project-setup-hero.webp</url>
				</image>
				<title>Get Your Components in Order with React Project Structure</title>
				<link>https://infinum.com/blog/react-project-structure/</link>
				<pubDate>Wed, 24 May 2023 11:21:32 +0000</pubDate>
				<dc:creator>Ivica Batinić</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=38682</guid>
				<description>
					<![CDATA[<p>Organizing your React project folder structure is crucial for maintainability and scalability of any React application.</p>
<p>The post <a href="https://infinum.com/blog/react-project-structure/">Get Your Components in Order with React Project Structure</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-436"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-36-text js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	Want to explore the rules and best practices for structuring React projects and unlock the full potential of your development process? Read on.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	In the world of web development, a well-organized project structure is essential for the success and maintainability of any React application. At Infinum, we have developed a comprehensive stack that serves as the foundation for our projects. However, the principles and guidelines we follow can be applied universally to any React project.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	Our stack includes powerful tools and libraries:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-102">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-103'
	>
	<li><a href="https://nextjs.org/" target="_blank" rel="noreferrer noopener">Next.js</a></li><li><a href="https://www.typescriptlang.org/" target="_blank" rel="noreferrer noopener">TypeScript</a></li><li><a href="https://datx.dev/" target="_blank" rel="noreferrer noopener">Datx</a></li><li><a href="https://jsonapi.org/" target="_blank" rel="noreferrer noopener">JSON:API</a></li><li><a href="https://swr.vercel.app/" target="_blank" rel="noreferrer noopener">SWR</a></li><li><a href="https://chakra-ui.com/" target="_blank" rel="noreferrer noopener">Chakra UI</a></li><li><a href="https://react-hook-form.com/" target="_blank" rel="noreferrer noopener">React Hook Form</a></li><li><a href="https://testing-library.com/docs/react-testing-library/intro" target="_blank" rel="noreferrer noopener">React Testing Library</a> and <a href="https://jestjs.io/" target="_blank" rel="noreferrer noopener">Jest</a> for unit and integration tests</li><li><a href="https://storybook.js.org/" target="_blank" rel="noreferrer noopener">Storybook</a></li><li><a href="https://www.i18next.com/" target="_blank" rel="noreferrer noopener">I18Next</a></li><li><a href="https://github.com/infinum/react-nuts-and-bolts/tree/main/packages/plop-next-ts-generators" target="_blank" rel="noreferrer noopener">Plop Next.js Generators</a></li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	Leveraging these technologies allows us to build robust and scalable applications.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	To showcase the effectiveness of our React project structure, we maintain an <a href="https://github.com/infinum/JS-React-Example" target="_blank" rel="noreferrer noopener">example repository on GitHub</a>. This repository serves as a practical reference and demonstrates how our project structure aligns with industry best practices.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	In this blog post, we will dive into the key components of our React project structure, explaining how each tool and library contributes to the overall organization, maintainability, and efficiency of our React applications. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-115"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-36-text js-typography block-highlighted-text__typography'
	data-id='es-114'
	>
	Whether you are using our stack or working with different technologies, the insights shared here will help you establish a solid foundation for your React projects.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-118"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-116">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-117'
	>
	Organizing components in React project structure</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-121"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-119">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-120'
	>
	When it comes to organizing components in your React application, a well-defined structure is crucial for maintainability and scalability. By following a consistent and intuitive folder structure, you can easily locate and manage your components, promoting code reuse and modularity. Let&#8217;s explore some best practices for organizing your components effectively.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-124"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-122">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-123'
	>
	UI Components</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-127"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-125">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-126'
	>
	When adding UI components, you should be able to group them into three root domains:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-128">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-129'
	>
	1</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-130'
	>
	<code>core</code> – primitives, low level components</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-135"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-132">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-133'
	>
	2</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-134'
	>
	<code>shared</code> – components that are shared across the whole app</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-136">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-137'
	>
	3</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-138'
	>
	<code>features</code> – root folder for components based on a specific feature (could be scoped by page or island)</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-140">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-141'
	>
	Folder naming rules:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-146"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-143">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-144'
	>
	1</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-145'
	>
	<code>kebab-case</code> folder name indicates domain name</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-150"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-147">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-148'
	>
	2</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-149'
	>
	<code>PascalCase</code> folders and filenames should be used for naming components</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-152"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">core</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Section</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Section</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Card</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Card</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">features</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">home</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">HomeHeaderSection</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">HomeHeaderSection</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">HomeTodoListSection</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">HomeTodoListSection</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">todo</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoHeaderSection</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoHeaderSection</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCreateFormSection</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">           </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCreateFormSection</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">shared</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">fields</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TextField</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TextField</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">todo</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCard</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoList</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoList</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCreateForm</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCreateForm</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">utilities</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">             </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">BugsnagErrorBoundary</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">             </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">BugsnagErrorBoundary</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">             </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Meta</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token">                 </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Meta</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">pages</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">index</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">todo</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">id</span><span class="token">]</span><span class="token">
</span></span><span class="line"><span class="token">             </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">index</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-155"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-153">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-154'
	>
	The Core domain</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-158"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-156">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-157'
	>
	We can refer to these components as <strong>atoms</strong>, the smallest building blocks. They are highly reusable and composable. If you need some inspiration on how to split components into small segments, you can check the <a href="https://open-ui.org/components/card.research" target="_blank" rel="noreferrer noopener">Open UI</a> standard proposal. Components could be designed as <a href="https://kentcdodds.com/blog/compound-components-with-react-hooks" target="_blank" rel="noreferrer noopener">Compound Components</a> or “Black-Box” Components with good <a href="https://kentcdodds.com/blog/inversion-of-control" target="_blank" rel="noreferrer noopener">inversion of control interface</a>, like <a href="https://react-select.com/components" target="_blank" rel="noreferrer noopener">ReactSelect</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-161"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-159">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-160'
	>
	Here are some examples of core components:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-164"
	 data-animation-target='inner-items'>
		
			<div class="block-group" data-id=es-163>
	
<div
	class="wrapper"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			
<figure class="wp-block-table is-style-first-column-strong-white-space-wrap-body-top-align has-medium-font-size"><table class="has-grey-200-background-color has-background"><tbody><tr><td>Components</td><td><strong>Parts</strong></td><td><strong>Description</strong></td></tr><tr><td>Card</td><td><code>Card</code>, <code>CardImage</code>, <code>CardImageOverlay</code>, <code>CardTitle</code>, <code>CardDescription</code>, …</td><td>From these parts, you&#8217;ll be able to compose multiple more specific <code>molecules</code> like <code>ProductCard</code> or <code>UserCard</code>.</td></tr><tr><td>Section</td><td><code>Section</code>, <code>SectionHeader</code>, <code>SectionBody</code>, ..</td><td>These might have multiple background schemes like <code>dimmed</code>, <code>inverted</code>, <code>light</code>.</td></tr><tr><td>Search</td><td><code>Search</code>, <code>SearchInput</code>, <code>SearchEmpty</code>, <code>SearchResults</code>, …</td><td><code>Search</code> uses context to provide shared state to other parts. <code>SearchInput</code> renders input and it could be placed anywhere in the DOM structure (for example, in the page <code>Header</code>). <code>SearchEmpty</code> and <code>SearchResults</code> handle switching between states and showing the result.</td></tr><tr><td>ReactSelect</td><td><code>ReactSelect</code>, <code>./components/ClearIndicator</code>, <code>./components/Control</code>, …</td><td>The list of custom components can be found <a href="https://react-select.com/components" target="_blank" rel="noreferrer noopener">here</a>.</td></tr></tbody></table></figure>
		</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-165">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-166'
	>
	Folder structure:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-169"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">core</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Card</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Card</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Section</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Section</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Search</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Search</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">ReactSelect</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">            └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">ReactSelect</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-172"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-170">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-171'
	>
	The<strong> Shared</strong> domain</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-173">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-174'
	>
	These components can be considered <strong>molecules</strong>. They are more specific, and built out of <strong>atoms</strong>,<em> </em>i.e. core components. They can be shared between feature components, and encapsulate some specific logic of a feature.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	We can split them into three domains:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-182"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-179">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-180'
	>
	1</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-181'
	>
	<code>UI</code> – higher order user interface components</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-183">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-184'
	>
	2</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-185'
	>
	<code>Entity</code> – UI representation of data models</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-190"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-187">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-188'
	>
	3</p>	<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-189'
	>
	<code>Utility</code> – headless utility components</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-193"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-191">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-192'
	>
	Shared <strong>UI</strong> domain</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-196"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-194">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-195'
	>
	Component name is always composed out of two parts, <code>Context</code> + <code>Domain</code>. For example, <code>InputField</code> where <code>Input</code> is context and <code>Field</code> is domain.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-199"
	 data-animation-target='inner-items'>
		
			<div class="block-group" data-id=es-198>
	
<div
	class="wrapper"
	data-id="es-197"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			
<figure class="wp-block-table is-style-first-column-strong-white-space-wrap-body-top-align has-medium-font-size"><table class="has-grey-200-background-color has-background"><tbody><tr><td>Domains</td><td><strong>Components</strong></td><td><strong>Description</strong></td></tr><tr><td><code>fields</code></td><td><code>Card</code>, <code>CardImage</code>, <code>CardImageOverlay</code>, <code>CardTitle</code>, <code>CardDescription</code>, …</td><td>Specific form fields prepared to be used with the <a href="https://react-hook-form.com/" target="_blank" rel="noreferrer noopener">React Hook Form</a> library. Built out of multiple parts, for example <code>InputGroup</code>, <code>InputLeftElement</code>, Input from <a href="https://chakra-ui.com/docs/components/input">Chakra UI</a>.</td></tr><tr><td><code>overlays</code></td><td><code>UnsupportedBrowserOverlay</code>, <code>BugsnagErrorOverlay</code></td><td>Components that cover the whole page and prevent users from interacting with the page to some degree.</td></tr><tr><td><code>layouts</code></td><td><code>MainLayout</code>, <code>AdminLayout</code></td><td>Components that are shared across pages and render the application shell (navigation and footer).</td></tr><tr><td><code>messages</code></td><td><code>NoResultsMessage</code>, <code>EmptyListMessage</code>, <code>LoadingMessage</code>, <code>ErrorMessage</code></td><td>Reusable message components that could be shared across pages for handling empty list results, loading states or ErrorBoundaries fallback.</td></tr><tr><td><strong><code>navigations</code></strong></td><td><code>MainNavigation</code>, <code>AdminNavigation</code></td><td>Different navigations used in layouts to support different app shell styles. They can handle user logged-in/logged-out states and mobile/desktop layouts.</td></tr><tr><td><code>footers</code></td><td><code>MainFooter</code>, <code>AdminFooter</code></td><td>Different footers used in layouts to support different app shell styles. Serves the same purpose as <code>navigations</code>.</td></tr><tr><td><code>panels</code></td><td><code>ArticlesPanel</code>, <code>EventPanel</code>, <code>EventSidebarPanel</code>, <code>GroupPanel</code></td><td>Specific panels that hold filtering dropdowns for narrowing down list results. Usually consists of a core <code>Panel</code> compound component for sharing styles and sorting dropdowns.</td></tr><tr><td><code>markdowns</code></td><td><code>ArticleMarkdown</code>, <code>AnnouncementMarkdown</code></td><td>Components that handle parsing of the markdown and styling of the generated HTML.</td></tr><tr><td><code>icons</code></td><td><code>PlusIcon</code>, <code>TrashIcon</code></td><td>SVG icons used throughout the application. The icons should be named by what they are, not where they are used, e.g. <code>TrashIcon</code> instead of <code>DeleteIcon</code> or <code>ExclamationCircleIcon</code> instead of <code>ErrorIcon</code>.</td></tr></tbody></table></figure>
		</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-202"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-200">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-201'
	>
	Folder structure:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">shared</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">fields</span><span class="token">
</span></span><span class="line"><span class="token">             </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TextField</span><span class="token">
</span></span><span class="line"><span class="token">                 </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TextField</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-205">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-206'
	>
	Shared Entity domain</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-210"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-208">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-209'
	>
	We can also refer to these components as <strong>molecules</strong>, but they are tied to a certain entity, for example an API data model, Algolia resource, or Google Map entity.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-213"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-211">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-212'
	>
	Component names are always composed out of two parts, <code>Entity</code> + <code>Context</code>. For example, <code>TodoList</code> where <code>Todo</code> is an entity and <code>List</code> is the context.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-216"
	 data-animation-target='inner-items'>
		
			<div class="block-group" data-id=es-215>
	
<div
	class="wrapper"
	data-id="es-214"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			
<figure class="wp-block-table is-style-first-column-strong-white-space-wrap-body-top-align has-medium-font-size"><table class="has-grey-200-background-color has-background"><tbody><tr><td>Domains</td><td><strong>Components</strong></td><td><strong>Description</strong></td></tr><tr><td><code>todo</code></td><td><code>TodoList</code>, <code>TodoCreateForm</code>, <code>TodoCard</code>, …</td><td></td></tr><tr><td><code>user</code></td><td><code>UserList</code>, <code>UserCreateForm</code>, <code>UserCard</code>, …</td><td>Primarily, they should accept an entity prop like this <code>&lt;UserCard user={user} /&gt;</code> where <code>user</code> is a resource from the API, or on rare occasion they could accept primitive props like <code>resourceId</code> and perform resource fetching via <code>SWR</code>.</td></tr><tr><td><code>ticket</code></td><td><code>TicketList</code>, <code>TicketCreateForm</code>, <code>TicketCard</code>, …</td><td></td></tr></tbody></table></figure>
		</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-219"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-217">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-218'
	>
	Folder structure:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-221"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">shared</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">todo</span><span class="token">
</span></span><span class="line"><span class="token">             </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCard</span><span class="token">
</span></span><span class="line"><span class="token">                 </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TodoCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-224"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-222">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-223'
	>
	Shared Utility domain</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-227"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-225">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-226'
	>
	Utility components are usually <strong>headless</strong> components, which means that they don&#8217;t have any impact on the UI itself, but are still reusable declarative React components.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-230"
	 data-animation-target='inner-items'>
		
			<div class="block-group" data-id=es-229>
	
<div
	class="wrapper"
	data-id="es-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			
<figure class="wp-block-table is-style-first-column-strong-white-space-wrap-body-top-align has-medium-font-size"><table class="has-grey-200-background-color has-background"><tbody><tr><td>Domains</td><td><strong>Components</strong></td><td><strong>Description</strong></td></tr><tr><td><code>utilities</code></td><td><code>Meta</code>, <code>BugsnagErrorBoundary</code></td><td><code>Meta</code> inserts <code>meta</code> tags into the document <code>head</code>. <code>BugsnagErrorBoundary</code> catches the error, triggers the Bugsnag report and renders fallback components.</td></tr></tbody></table></figure>
		</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-233"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-231">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-232'
	>
	For example, let’s see how the <code>Meta</code> component is used for injecting meta tags inside the document <code>&lt;head&gt;</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-235"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token" style="color: #005cc5;">React</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">FC</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">react</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token" style="color: #005cc5;">Head</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">next/head</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">Meta</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">FC</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Head</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">link</span><span class="token"> </span><span class="token" style="color: #005cc5;">rel</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">icon</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">type</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">image/png</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">sizes</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">32x32</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">href</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">/favicon-32x32.png</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">link</span><span class="token"> </span><span class="token" style="color: #005cc5;">rel</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">icon</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">type</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">image/png</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">sizes</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">16x16</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">href</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">/favicon-16x16.png</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">link</span><span class="token"> </span><span class="token" style="color: #005cc5;">rel</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">shortcut icon</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">href</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">/favicon.ico</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">title</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token" style="color: #005cc5;">Infinum</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">title</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Head</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-238"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-236">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-237'
	>
	Folder structure:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-240"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">shared</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">utilities</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Meta</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">│</span><span class="token">       </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Meta</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">…</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-243"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-241">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-242'
	>
	The components folder</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-246"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-244">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-245'
	>
	When adding a <code>components</code> folder, you are basically extracting smaller chunks of your main React component that are only going to be used in that component and nowhere else.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-249"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-247">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-248'
	>
	Note: There should only be one level of component nesting inside the <code>components</code> folder. In fact, we are considering renaming this folder from <code>components</code> to <code>elements</code> to avoid confusion with the project root <code>components</code> folder, but this is still to be defined.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-252"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-250">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-251'
	>
	In this example, the <code>MainTable</code> component has a unique header component that should be placed inside the <code>/components</code> folder because it contains some styles, translations and an icon.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-254"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">TableHeader</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">FC</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">FlexProps</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">props</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">t</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useTranslation</span><span class="token">()</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Flex</span><span class="token"> </span><span class="token" style="color: #005cc5;">align</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">center</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">p</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #005cc5;">20</span><span class="token">}</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #005cc5;">props</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Heading</span><span class="token"> </span><span class="token" style="color: #005cc5;">size</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">colorScheme</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">secondary</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #d73a49;">as</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">h3</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        </span><span class="token">{</span><span class="token">t</span><span class="token">(&#039;</span><span class="token" style="color: #6f42c1;">table</span><span class="token">.</span><span class="token" style="color: #6f42c1;">t</span><span class="token" style="color: #032f62;">itle</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">)</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Heading</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Button</span><span class="token"> </span><span class="token" style="color: #005cc5;">leftIcon</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">ArrowForwardIcon</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">colorScheme</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">teal</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">variant</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">solid</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        </span><span class="token">{</span><span class="token" style="color: #6f42c1;">t</span><span class="token">(&#039;</span><span class="token" style="color: #6f42c1;">table</span><span class="token">.</span><span class="token" style="color: #032f62;">viewAll</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">)</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Button</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Flex</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-257"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-255">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-256'
	>
	The folder structure should look something like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-259"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">features</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">some</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">feature</span><span class="token">
</span></span><span class="line"><span class="token">             </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">MainTable</span><span class="token">
</span></span><span class="line"><span class="token">                 </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token">                 </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">TableHeader</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">                 </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">MainTable</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-262"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-260">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-261'
	>
	Elements</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-265"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-263">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-264'
	>
	If you have a lot of style declarations inside your component file, enough to make the file difficult to read, you should create a separate file <code>ComponentName.elements.ts</code> and store your custom components there.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-268"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-266">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-267'
	>
	Example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">.</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCard</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">elements</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-271">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-272'
	>
	In the following example, <code>WelcomeCardLayoutOverlay</code> is a Pure Functional Component because the Chakra UI factory doesn&#8217;t allow the custom <code>isOpen</code> prop.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-275"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">chakra</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">HTMLChakraProps</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">ThemingProps</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">useStyleConfig</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@chakra-ui/react</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCardLayout</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">chakra</span><span class="token">(</span><span class="token" style="color: #005cc5;">Grid</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #6f42c1;"> baseSty</span><span class="token">le:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridTemplate</span><span class="token">Rows:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1fr min-content min-content</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridTemplateCol</span><span class="token">umns:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1fr min-content</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  ro</span><span class="token">wGap:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">16px</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCardLayoutContent</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">chakra</span><span class="token">(</span><span class="token" style="color: #005cc5;">GridItem</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #6f42c1;"> baseSty</span><span class="token">le:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  posi</span><span class="token">tion:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">relative</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridRowS</span><span class="token">tart:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridRo</span><span class="token">wEnd:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">auto</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridColumnS</span><span class="token">tart:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">  gridColum</span><span class="token">nEnd:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">auto</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">interface</span><span class="token"> </span><span class="token" style="color: #6f42c1;">WelcomeCardLayoutOverlayProps</span><span class="token"> </span><span class="token" style="color: #d73a49;">extends</span><span class="token"> </span><span class="token" style="color: #6f42c1;">TMLChakraProps</span><span class="token">&lt;&#039;</span><span class="token" style="color: #6f42c1;">div</span><span class="token">&#039;&gt; </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  isOpen</span><span class="token" style="color: #d73a49;">?:</span><span class="token"> </span><span class="token" style="color: #d73a49;">boolean</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">WelcomeCardLayoutOverlay</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">forwardRef</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">WelcomeCardOverlayProps</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">div</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  </span><span class="token">({</span><span class="token"> </span><span class="token" style="color: #005cc5;">isOpen</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #005cc5;">rest</span><span class="token"> </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">ref</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    const</span><span class="token"> </span><span class="token" style="color: #005cc5;">height</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">isOpen</span><span class="token"> </span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">base</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">300px</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">md</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">500px</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">null</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    return</span><span class="token"> (
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">GridItem</span><span class="token"> </span><span class="token" style="color: #005cc5;">ref</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #005cc5;">ref</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">h</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #005cc5;">height</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">position</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">relative</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">column</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1 / 3</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token" style="color: #005cc5;">row</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">1 / 2</span><span class="token" style="color: #032f62;">&#039;</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #005cc5;">rest</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-278"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-276">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-277'
	>
	Moving component parts to <code>.elements.tsx</code> should be the last step in the development process and it should only be used for organizational purposes, i.e. when the main component becomes cluttered and unreadable.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-281"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-279">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-280'
	>
	Here are some rules that you should follow when creating elements:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-284"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-282">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-283'
	>
	<li><code>.elements.tsx</code> should only be used for organizational purposes</li><li>Custom components are tightly coupled with the root component and they should not be used in the outside scope</li><li>Mixture of <code>chakra factory</code> and <code>Function Components</code> is allowed</li><li>Using hooks inside elements is not recommended</li><li>Wrapping in forwardRef is recommended but not mandatory (you need this in case you want to access real DOM element in the root component)</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-287"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-285">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-286'
	>
	<strong>Note</strong>: For more information check the <a href="https://infinum.com/handbook/frontend/react/chakra-ui#style-props" target="_blank" rel="noreferrer noopener">Chakra UI &#8211; Style Props</a> section in our Handbook.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-290"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-288">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-289'
	>
	Different component layouts for different screen sizes</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-293"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-291">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-292'
	>
	In most cases we&#8217;re striving to create responsive components that consist of one DOM structure that is going to be rendered on all screen sizes by utilizing CSS-only solutions. Work closely with your designer to achieve this.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-296"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-294">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-295'
	>
	However, there are cases when we need to create different DOM structures for different screen sizes.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-299"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-297">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-298'
	>
	Collocating different layouts in one component</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-302"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-300">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-301'
	>
	With the help of <a href="https://chakra-ui.com/docs/styling/style-props/layout">Chakra UI Display</a> helper props:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-304"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">props</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Box</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #005cc5;">props</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Box</span><span class="token"> </span><span class="token" style="color: #005cc5;">hideFrom</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Mobile layout</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Box</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Box</span><span class="token"> </span><span class="token" style="color: #005cc5;">hideBelow</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Desktop layout</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Box</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Box</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-307"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-305">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-306'
	>
	Different component layouts for different screen sizes in separate <code>layout</code> components</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-310"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-308">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-309'
	>
	In this case, inside a specific component, we could add a subfolder <code>layouts</code> (not to be confused with the actual layout described below) to define how our component would look like on a specific media query.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-313"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-311">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-312'
	>
	We advise using this approach only for those layouts that would add too much complexity when using <a href="https://chakra-ui.com/docs/styling/style-props/layout">Chakra UI Display</a> helper props. We realize that this approach usually results in a lot of code duplication, so it’s best to use it only when necessary.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-315"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">.</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">admin</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">layouts</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">mobile</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">│</span><span class="token">   </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">desktop</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">         </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-318"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-316">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-317'
	>
	For this case, inside <code>UserCard.tsx</code> we would have something like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-321"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-319">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-320'
	>
	With the help of Chakra UI Display helper props:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-323"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCardMobile</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Box</span><span class="token"> </span><span class="token" style="color: #005cc5;">hideFrom</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Mobile layout</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Box</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCardDesktop</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Box</span><span class="token"> </span><span class="token" style="color: #005cc5;">hideBelow</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Desktop layout</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Box</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Fragment</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">UserCardMobile</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">UserCardDesktop</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Fragment</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-326"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-324">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-325'
	>
	With help of Chakra UI <a href="https://chakra-ui.com/docs/components/concepts/overview">Show/Hide</a>:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-328"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">Show</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">Hide</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@chakra-ui/react</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">UserCard</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Fragment</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Hide</span><span class="token"> </span><span class="token" style="color: #005cc5;">above</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">UserCardMobile</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Hide</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">Show</span><span class="token"> </span><span class="token" style="color: #005cc5;">above</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">UserCardDesktop</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Show</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">Fragment</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-331"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-329">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-330'
	>
	Use of <a href="https://chakra-ui.com/docs/components/concepts/overview">Show/Hide</a> helpers is advisable to be used only for client side rendering. For server side rendering use <a href="https://chakra-ui.com/docs/styling/overview">Display</a> helper props.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-334"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-332">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-333'
	>
	Extracting utility functions and hooks</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-337"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-335">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-336'
	>
	Sometimes, you will have complex functions or effects inside your React component that will affect the readability of your component. In that case, you should extract them into separate files: <code>*.utils.ts</code> and <code>*.hooks.ts</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-340"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-338">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-339'
	>
	The main goal of these files is to store functions and hooks that are specific for that component, so we could keep our root <code>hooks</code> and <code>utils</code> folders clean and for global usage purposes only. If you would like to know more, we’ve written about <a href="https://infinum.com/blog/how-to-use-react-hooks-in-class-components/" target="_blank" rel="noreferrer noopener">React hooks in class components</a> before.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-343"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-341">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-342'
	>
	Folder structure example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-345"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">.</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">…</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">utils</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">hooks</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-348"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-346">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-347'
	>
	Cluttered component example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-350"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">props</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isPlaying</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsPlaying</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #6f42c1;">t</span><span class="token" style="color: #005cc5;">rue</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">highlighted</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setHighlighted</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #6f42c1;">n</span><span class="token" style="color: #005cc5;">ull</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">zoom</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setZoom</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(1</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">modals</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useModals</span><span class="token">()</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">carouselRef</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useRef</span><span class="token">()</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">showLoginModal</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    modals</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">open</span><span class="token">(</span><span class="token" style="color: #6f42c1;">Mod</span><span class="token" style="color: #005cc5;">als</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">Login</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">highlightAlbum</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">id</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">number</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    setIsPlaying</span><span class="token">(</span><span class="token" style="color: #6f42c1;">fal</span><span class="token" style="color: #005cc5;">se</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    setHighlighted</span><span class="token">(</span><span class="token" style="color: #6f42c1;">id</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    carouselRef</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">current</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">collapseItems</span><span class="token">();
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">formatReleaseDate</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">startDate</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">string</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">endDate</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">string</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    const</span><span class="token"> </span><span class="token" style="color: #005cc5;">start</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">Date</span><span class="token">(</span><span class="token" style="color: #005cc5;">startDate</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    const</span><span class="token"> </span><span class="token" style="color: #005cc5;">end</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">Date</span><span class="token">(</span><span class="token" style="color: #005cc5;">endDate</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    const</span><span class="token"> </span><span class="token" style="color: #005cc5;">timezonedStart</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">Date</span><span class="token">(</span><span class="token" style="color: #005cc5;">start</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">valueOf</span><span class="token">() +</span><span class="token"> </span><span class="token" style="color: #005cc5;">start</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">getTimezoneOffset</span><span class="token">() *</span><span class="token"> </span><span class="token" style="color: #005cc5;">60</span><span class="token"> </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">1000</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    const</span><span class="token"> </span><span class="token" style="color: #005cc5;">timezonedEnd</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">new</span><span class="token"> </span><span class="token" style="color: #005cc5;">Date</span><span class="token">(</span><span class="token" style="color: #005cc5;">end</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">valueOf</span><span class="token">() +</span><span class="token"> </span><span class="token" style="color: #005cc5;">end</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">getTimezoneOffset</span><span class="token">() *</span><span class="token"> </span><span class="token" style="color: #005cc5;">60</span><span class="token"> </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">1000</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    if</span><span class="token"> (</span><span class="token" style="color: #6f42c1;">is</span><span class="token" style="color: #6f42c1;">SameDay</span><span class="token">(</span><span class="token" style="color: #6f42c1;">tim</span><span class="token" style="color: #005cc5;">ezonedStart</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">timezonedEnd</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      return</span><span class="token"> </span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${format(timezonedStart, &#039;d MMMM yyyy&#039;)}</span><span class="token" style="color: #032f62;">`</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    if</span><span class="token"> (!</span><span class="token" style="color: #6f42c1;">i</span><span class="token" style="color: #6f42c1;">sSameYear</span><span class="token">(</span><span class="token" style="color: #6f42c1;">tim</span><span class="token" style="color: #005cc5;">ezonedStart</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">timezonedEnd</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      return</span><span class="token"> </span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${format(timezonedStart, &#039;d MMMM yyyy&#039;)} ${String.fromCharCode(8212)} ${format(
</span></span><span class="line"><span class="token" style="color: #032f62;">        timezonedEnd,
</span></span><span class="line"><span class="token" style="color: #032f62;">        &#039;d MMMM yyyy&#039;,
</span></span><span class="line"><span class="token" style="color: #032f62;">      )}</span><span class="token" style="color: #032f62;">`</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    if</span><span class="token"> (!</span><span class="token" style="color: #6f42c1;">i</span><span class="token" style="color: #6f42c1;">sSameMonth</span><span class="token">(</span><span class="token" style="color: #6f42c1;">tim</span><span class="token" style="color: #005cc5;">ezonedStart</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">timezonedEnd</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">      return</span><span class="token"> </span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${format(timezonedStart, &#039;d MMMM&#039;)} ${String.fromCharCode(8212)} ${format(
</span></span><span class="line"><span class="token" style="color: #032f62;">        timezonedEnd,
</span></span><span class="line"><span class="token" style="color: #032f62;">        &#039;d MMMM yyyy&#039;,
</span></span><span class="line"><span class="token" style="color: #032f62;">      )}</span><span class="token" style="color: #032f62;">`</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    return</span><span class="token"> </span><span class="token" style="color: #032f62;">`</span><span class="token" style="color: #032f62;">${format(timezonedStart, &#039;d&#039;)} ${String.fromCharCode(8212)} ${format(
</span></span><span class="line"><span class="token" style="color: #032f62;">      timezonedEnd,
</span></span><span class="line"><span class="token" style="color: #032f62;">      &#039;d MMMM yyyy&#039;,
</span></span><span class="line"><span class="token" style="color: #032f62;">    )}</span><span class="token" style="color: #032f62;">`</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">{</span><span class="token" style="color: #6f42c1;">formatReleaseDate</span><span class="token">(</span><span class="token" style="color: #6f42c1;">pro</span><span class="token" style="color: #005cc5;">ps</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">startDate</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">props</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">endDate</span><span class="token">)</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-353"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-351">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-352'
	>
	Clean component:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-355"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">formatReleaseDate</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #005cc5;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">./AlbumsCarousel.utils.ts</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">AlbumsCarousel</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">props</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isPlaying</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsPlaying</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #6f42c1;">t</span><span class="token" style="color: #005cc5;">rue</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">highlighted</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setHighlighted</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #6f42c1;">n</span><span class="token" style="color: #005cc5;">ull</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">zoom</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setZoom</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(1</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">modals</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useModals</span><span class="token">()</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">carouselRef</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useRef</span><span class="token">()</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">showLoginModal</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    modals</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">open</span><span class="token">(</span><span class="token" style="color: #6f42c1;">Mod</span><span class="token" style="color: #005cc5;">als</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">Login</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  const</span><span class="token"> </span><span class="token" style="color: #005cc5;">highlightAlbum</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">id</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">number</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    setIsPlaying</span><span class="token">(</span><span class="token" style="color: #6f42c1;">fal</span><span class="token" style="color: #005cc5;">se</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    setHighlighted</span><span class="token">(</span><span class="token" style="color: #6f42c1;">id</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    carouselRef</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">current</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #6f42c1;">collapseItems</span><span class="token">();
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">}</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  return</span><span class="token"> (</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">{</span><span class="token" style="color: #6f42c1;">formatReleaseDate</span><span class="token">(</span><span class="token" style="color: #6f42c1;">pro</span><span class="token" style="color: #005cc5;">ps</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">startDate</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">props</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">endDate</span><span class="token">)</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  </span><span class="token">)
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-358"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-356">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-357'
	>
	<strong>Note</strong>: You can find out more about <a href="https://infinum.com/handbook/frontend/react/react-hooks#hooks-encapsulation">hook encapsulation</a> in our handbook.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-361"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-359">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-360'
	>
	Layouts</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-364"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-362">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-363'
	>
	With Layouts, we generally define the overall page structure that will be presented to the user based on a specific auth state or a specific page.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-367"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-365">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-366'
	>
	For example, your app can have an Admin dashboard on the <code>/admin</code> route which has a fixed header and sidebars on both right and left, and scrollable content in the middle (you&#8217;re most likely familiar with this kind of layout).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-370"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-368">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-369'
	>
	You define your different layouts inside the <code>layouts</code> folder:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-372"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">.</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">layouts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AdminLayout</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">AdminLayout</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">MainLayout</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">MainLayout</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">BlogLayout</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">            └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">BlogLayout</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-375"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-373">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-374'
	>
	Then, when creating your routes (pages), you wrap your page in the layout that represents the current page:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-377"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> pages/index.tsx</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  return</span><span class="token"> </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">MainLayout</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">MainLayout</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> pages/admin.tsx</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Admin</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">  return</span><span class="token"> </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #005cc5;">AdminLayout</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">AdminLayout</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-380"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-378">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-379'
	>
	<strong>Note</strong>: This section is preparation for the new Next.js App folder structure.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-383"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-381">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-382'
	>
	Setting up the global store</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-386"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-384">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-385'
	>
	At Infinum we use our own solution for global data management and remote data fetching, called <a href="https://datx.dev/" target="_blank" rel="noreferrer noopener">Datx</a>. You can read more about <a href="https://infinum.com/blog/working-with-json-api/" target="_blank" rel="noreferrer noopener">working with JSON API, hassle-free</a> in one of our previous blog posts.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-389"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-387">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-388'
	>
	Our Datx store and models will be placed in the root of the <code>src</code> folder as follows:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-391"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">models</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">User</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Session</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">datx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">create</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">client</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-394"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-392">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-393'
	>
	<strong>Note</strong>: we have recently released the <code>@datx/swr</code> (<a href="https://datx.dev/docs/jsonapi-swr/overview" target="_blank" rel="noreferrer noopener">doc</a>) package which is a wrapper around <a href="https://swr.vercel.app/" target="_blank" rel="noreferrer noopener">SWR</a> library. This is recommended for fetching data from the API using the <a href="https://jsonapi.org/" target="_blank" rel="noreferrer noopener">JSON:API</a> specification.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-397"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-395">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-396'
	>
	Setting up theming and styles</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-400"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-398">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-399'
	>
	When creating styles for your core components, you will create the <code>components</code> folder inside the styles folder. The styles folder will contain all core stylings and the theme setup.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-402"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">styles</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">theme</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">index</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token"> </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> main theme endpoint</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">styles</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token"> </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> global styles</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">foundations</span><span class="token"> </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> colors, typography, sizes...</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">font</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">sizes</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        │</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">colors</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token"> </span><span class="token" style="color: #6a737d;">#</span><span class="token" style="color: #6a737d;"> components styles</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #005cc5;">            └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">button</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-405"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-403">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-404'
	>
	Tests</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-408"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-406">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-407'
	>
	Here are a couple of quick rules to follow when organizing test files:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-411"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-409">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-410'
	>
	<li>Components, utils, fetchers, etc. should have a test file in the same folder where they are placed</li><li>When testing pages, create the <code>__tests__/pages</code> folder, because of how Next.js treats the pages folder</li><li>All mocks should be placed in the <code>__mocks__</code> folder</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-414"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-412">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-413'
	>
	For other in-depth guides for testing, take a look at the <a href="https://infinum.com/handbook/frontend/react/testing-best-practices" target="_blank" rel="noreferrer noopener">testing guide</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-417"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-415">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-416'
	>
	Your folder structure should look something like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-419"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">src</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">.</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">__mocks__</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">react</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">i18next</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">__tests__</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">pages</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">user</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">utils</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">pages</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">│</span><span class="token"> </span><span class="token" style="color: #005cc5;"> </span><span class="token"> </span><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">user</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">ts</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">└──</span><span class="token"> </span><span class="token" style="color: #005cc5;">components</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">    └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">shared</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">        └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">core</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">            └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Button</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">                ├──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Button</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">                └──</span><span class="token"> </span><span class="token" style="color: #005cc5;">Button</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">tsx</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-422"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-420">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-421'
	>
	A well-defined React project structure goes a long way</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-425"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-423">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-424'
	>
	Organizing your React project folder structure is crucial for maintainability and scalability. At Infinum, we have established a well-defined structure that categorizes components into different domains: core, shared, and features.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-428"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-426">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-427'
	>
	By embracing Chakra UI and leveraging concepts such as compound components and the inversion of control interfaces, we foster the creation of highly composable and customizable core components.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-431"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-429">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-430'
	>
	Adopting a consistent and well-defined React native project structure for components enables development teams to easily locate and understand the purpose of each component. This approach promotes code reuse, modularity, and improves collaboration among team members. Ultimately, an organized folder structure paves the way for a more maintainable and scalable codebase.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-434"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-432">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-433'
	>
	The complete folder structure presented in this article can be found <a href="https://infinum.com/handbook/frontend/react/project-structure#the-complete-structure" target="_blank" rel="noreferrer noopener">in our handbook</a>.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/react-project-structure/">Get Your Components in Order with React Project Structure</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
					<item>
				<image>
					<url>37462https://infinum.com/uploads/2023/04/Panda-JavaScript-HERO-img-min.webp</url>
				</image>
				<title>Panda CSS – CSS-in-JS without Runtime Overhead</title>
				<link>https://infinum.com/blog/panda-css-css-in-js-without-runtime-overhead/</link>
				<pubDate>Thu, 13 Apr 2023 15:52:17 +0000</pubDate>
				<dc:creator>Ivica Batinić</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=37462</guid>
				<description>
					<![CDATA[<p>With its simplified approach to front-end styling, Panda CSS can help you streamline your development workflow and create efficient web applications.</p>
<p>The post <a href="https://infinum.com/blog/panda-css-css-in-js-without-runtime-overhead/">Panda CSS – CSS-in-JS without Runtime Overhead</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-733"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-437">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-440"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-438">
	<p	class='typography typography--size-36-text js-typography block-paragraph__paragraph'
	data-id='es-439'
	>
	<strong>CSS-in-JS concept has a bad reputation because of its bad runtime performance. This is about to change. With Panda CSS, you can have the best of both worlds, performance and nice syntax – and we have the code examples and runnable projects to prove it.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-443"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-441">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-442'
	>
	<em><strong>Update note, 20 June 2023:</strong> This article has been updated based on the official documentation. For the latest information, please visit <a href="https://panda-css.com/docs" target="_blank" rel="noreferrer noopener">https://panda-css.com/docs</a>.</em></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-446"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-444">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-445'
	>
	As front-end developers, we&#8217;re always looking for tools and libraries that streamline our workflow and improve the performance of our web applications. One such promising solution that has caught my attention is Panda CSS. With Panda CSS, we can simplify front-end styling and completely eliminate the runtime overhead of CSS-in-JS libraries, making it a compelling choice for modern web development.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-449"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-447">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-448'
	>
	This blog post will dive into the basics of setting up Panda CSS and explore the key features that make it a standout tool for front-end development. From installation to usage, we will cover the steps to get started with Panda CSS and discover how it can help us achieve efficient and optimized styling in our web applications. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-452"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-450">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-451'
	>
	So let&#8217;s get started with this exciting new addition to the front-end development ecosystem!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-455"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-453">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-454'
	>
	Chakra UI – a <strong>development workflow</strong> game-changer</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-458"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-456">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-457'
	>
	As a Lead React Engineer with a strong passion for React and a special love for Chakra UI, which I have been using for the past two years, I&#8217;m excited to share my thoughts on the future of this powerful component library. Chakra UI has been a game-changer in my development workflow, solving challenges like delivery speed, providing a basic component library, and managing design tokens for consistent UIs. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-461"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-459">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-460'
	>
	Looking ahead, the Chakra UI team is actively working on enhancements, including integrating Panda CSS to eliminate the runtime overhead of CSS-in-JS, resulting in even faster and more optimized UIs.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-464"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-462">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-463'
	>
	In addition to my insights, the author of Chakra UI, <a href="https://www.adebayosegun.com/blog/the-future-of-chakra-ui" target="_blank" rel="noreferrer noopener">Adebayo Segun, has also shared his thoughts on the future of Chakra UI</a> in a recent blog post, providing further insights and perspectives on what&#8217;s to come for this popular component library.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-467"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-465">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-466'
	>
	Panda CSS – frontend styling, simplified</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-470"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-468">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-469'
	>
	Panda CSS is a utility CSS library that provides a set of utility classes, patterns, and recipes for building modern and responsive user interfaces in Web applications. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-473"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-471">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-472'
	>
	In addition, it offers a declarative approach to styling components using JavaScript objects, making it more readable and maintainable than pure string-based approaches. Similar to Tailwind CSS, Panda CSS enables developers to customize styles easily, and more details about its features will be revealed in <a href="#customize-styling">step 3 below</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-476"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-474">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-475'
	>
	Get started with Panda CSS in three steps</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-480"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-477">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-478'
	>
	1</p>	<div class="bullet__content">
		<h3	class='typography typography--size-36-text js-typography bullet__heading'
	data-id='es-479'
	>
	Install Next.js</h3>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-483"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-481">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-482'
	>
	If you haven&#8217;t already, install create-next-app globally on your local machine using pnpm, npm, or yarn. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-486"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-484">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-485'
	>
	You can use the following command to create a new Next.js project with TypeScript:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-488"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">npx</span><span class="token"> </span><span class="token" style="color: #032f62;">create-next-app@latest</span><span class="token"> </span><span class="token" style="color: #005cc5;">-</span><span class="token" style="color: #005cc5;">-use-npm</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-491"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-489">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-490'
	>
	Here are my answers to the prompts:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-494"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-492">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-493'
	>
	<li>What is your project named? test-app</li><li>Would you like to use TypeScript with this project? Yes</li><li>Would you like to use ESLint with this project? Yes</li><li>Would you like to use Tailwind CSS with this project? No</li><li>Would you like to use <code>src/</code> directory with this project? Yes</li><li>Use App Router (recommended)? Yes</li><li>Would you like to customize the default import alias? @/*</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-497"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-495">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-496'
	>
	This will create a new Next.js project with a TypeScript template, which we will use as the base for our Panda CSS setup.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-500"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-498">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-499'
	>
	Enter the newly created directory:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-502"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">cd</span><span class="token"> </span><span class="token" style="color: #005cc5;">test</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #005cc5;">app</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-506"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-503">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-504'
	>
	2</p>	<div class="bullet__content">
		<h3	class='typography typography--size-36-text js-typography bullet__heading'
	data-id='es-505'
	>
	Setup Panda CSS<br />
</h3>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-509"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-507">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-508'
	>
	Install @pandacss/dev:</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-512"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-510">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-511'
	>
	First off, install Panda CSS as a dependency in your Next.js project and initialize it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-515"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-513">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-514'
	>
	You can run the following commands:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-517"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">npm</span><span class="token"> </span><span class="token" style="color: #032f62;">install</span><span class="token"> </span><span class="token" style="color: #005cc5;">-</span><span class="token" style="color: #005cc5;">D</span><span class="token"> </span><span class="token" style="color: #032f62;">@pandacss/dev</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">npx</span><span class="token"> </span><span class="token" style="color: #032f62;">panda</span><span class="token"> </span><span class="token" style="color: #032f62;">init</span><span class="token"> </span><span class="token" style="color: #005cc5;">-</span><span class="token" style="color: #005cc5;">-postcss</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-520"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-518">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-519'
	>
	The <code>panda init --postcss</code> command will automatically create a <code>postcss.config.js</code> file at the root of your project with the following code:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-522"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-php github-light" data-language="php" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #005cc5;">module</span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">exports</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">plugins</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">     </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@pandacss/dev/postcss</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-525"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-523">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-524'
	>
	Update package.json scripts:&nbsp;</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-528"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-526">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-527'
	>
	Update the scripts section in your project&#8217;s package.json file to include the necessary Panda CSS scripts. Replace the &#8220;dev&#8221; script with the following:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-530"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">scripts</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">{</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">prepare</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">panda codegen</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">,</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">dev</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">next dev</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">,</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">build</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">next build</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">,</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">start</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">next start</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">,</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">lint</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">next lint</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">}
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-533"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-531">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-532'
	>
	This is the prepare script that will run codegen after dependency installation. You can read more about <a href="https://panda-css.com/docs/references/cli#panda-codegen" target="_blank" rel="noreferrer noopener">codegen</a> in the CLI section of the official documentation.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-536"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-534">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-535'
	>
	Set up the configuration using the PostCSS plugin:</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-541"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-537">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-538'
	>
	1</p>	<div class="bullet__content">
		<h5	class='typography typography--size-20-text js-typography bullet__heading'
	data-id='es-539'
	>
	Set up custom PostCSS configuration</h5><p	class='typography typography--size-18-text-roman js-typography bullet__paragraph'
	data-id='es-540'
	>
	Follow the Next.js PostCSS guide to set up a custom PostCSS configuration by referring to this <a href="https://nextjs.org/docs/pages/guides/post-css">link</a>.</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-545"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-542">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-543'
	>
	2</p>	<div class="bullet__content">
		<h5	class='typography typography--size-20-text js-typography bullet__heading'
	data-id='es-544'
	>
	Install additional dependencies:</h5>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-547"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">npm</span><span class="token"> </span><span class="token" style="color: #032f62;">install</span><span class="token"> </span><span class="token" style="color: #032f62;">postcss-flexbugs-fixes</span><span class="token"> </span><span class="token" style="color: #032f62;">postcss-preset-env</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-551"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-548">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-549'
	>
	3</p>	<div class="bullet__content">
		<h5	class='typography typography--size-20-text js-typography bullet__heading'
	data-id='es-550'
	>
	Uninstall &#8220;concurrently&#8221; if it was previously installed:</h5>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-553"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6f42c1;">npm</span><span class="token"> </span><span class="token" style="color: #032f62;">uninstall</span><span class="token"> </span><span class="token" style="color: #032f62;">concurrently</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-558"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-554">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-555'
	>
	4</p>	<div class="bullet__content">
		<h5	class='typography typography--size-20-text js-typography bullet__heading'
	data-id='es-556'
	>
	Update your PostCSS configuration</h5><p	class='typography typography--size-18-text-roman js-typography bullet__paragraph'
	data-id='es-557'
	>
	Update your PostCSS configuration to include the Panda CSS PostCSS plugin:</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-560"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-shellscript github-light" data-language="shellscript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">plugins</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> [</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">postcss-flexbugs-fixes</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">,</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    [</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">      </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">postcss-preset-env</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">,</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">      </span><span class="token" style="color: #032f62;">{</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">        </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">autoprefixer</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">{
</span></span><span class="line"><span class="token" style="color: #6f42c1;">          </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">flexbox</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">no-2009</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">        },</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">        </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">stage</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">3,
</span></span><span class="line"><span class="token" style="color: #6f42c1;">        </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">features</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #032f62;">{
</span></span><span class="line"><span class="token" style="color: #6f42c1;">          </span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">custom-properties</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #005cc5;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">false</span><span class="token" style="color: #032f62;">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">        }</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">      }</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    ],</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6f42c1;">    [</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">@pandacss/dev/postcss</span><span class="token" style="color: #6f42c1;">&quot;</span><span class="token" style="color: #6f42c1;">,</span><span class="token"> </span><span class="token" style="color: #032f62;">{}]
</span></span><span class="line"><span class="token" style="color: #6f42c1;">  ]</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-563"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-561">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-562'
	>
	Configure the content:</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-566"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-564">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-565'
	>
	Open the <code>panda.config.ts</code> file in the root of your Next.js project directory. This file will serve as the configuration file for Panda CSS.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-569"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-567">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-568'
	>
	You can start with a basic configuration, such as:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-571"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">defineConfig</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@pandacss/dev</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #6f42c1;">defineConfig</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Whether to include css reset styles in the generated css.</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">preflight</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Where to look for your css declarations</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">include</span><span class="token">:</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">./src/components/**/*.{ts,tsx,js,jsx}</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">./src/app/**/*.{ts,tsx,js,jsx}</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">]</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Used to create reusable config presets for your project or team.</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">presets</span><span class="token">:</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@pandacss/dev/presets</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">]</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Files to exclude</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">exclude</span><span class="token">:</span><span class="token"> </span><span class="token">[</span><span class="token">]</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> The framework to use for generating supercharged elements.</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">jsxFramework</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">react</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> The output directory.</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">outdir</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">styled-system</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-574"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-572">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-573'
	>
	Configure the entry CSS with layers:</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-577"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-575">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-576'
	>
	In your Next.js project, navigate to the <code>src/app</code> folder and open the <code>global.css</code> file. Replace all the content with the following code:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-579"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">@</span><span class="token" style="color: #24292e;">layer</span><span class="token"> </span><span class="token" style="color: #24292e;">reset</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">base</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">tokens</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">recipes</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">utilities</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-582"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-580">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-581'
	>
	Update Next.js layout (layout.tsx) and index page (page.tsx):</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-585"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-583">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-584'
	>
	In your Next.js project, navigate to the layout.tsx file located at src/app/layout.tsx. Make sure that <code>./globals.css</code> is imported at the beginning of that file.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-588"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-586">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-587'
	>
	The final snippet for <code>layout.tsx</code> would look like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-590"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">./globals.css</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">metadata</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">title</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">Hello ?!</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">description</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">Generated by create next app</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">RootLayout</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #e36209;">children</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #e36209;">children</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Rea</span><span class="token" style="color: #6f42c1;">c</span><span class="token" style="color: #6f42c1;">t</span><span class="token">.</span><span class="token" style="color: #6f42c1;">ReactNode</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #22863a;">&lt;htm</span><span class="token">l</span><span class="token"> </span><span class="token" style="color: #6f42c1;">lang</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">en</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #22863a;">&lt;</span><span class="token" style="color: #22863a;">bod</span><span class="token">y&gt;</span><span class="token">{</span><span class="token" style="color: #24292e;">children</span><span class="token">}</span><span class="token" style="color: #22863a;">&lt;</span><span class="token" style="color: #22863a;">/bo</span><span class="token">dy&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #22863a;">&lt;/</span><span class="token" style="color: #22863a;">h</span><span class="token" style="color: #22863a;">t</span><span class="token">ml&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-593"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-591">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-592'
	>
	Also, delete all the default CSS files, for example <code>src/app/page.module.css.</code> </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-596"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-594">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-595'
	>
	Next, you can update the contents of <code>page.tsx</code> with the following snippet that uses Panda CSS:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-598"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../styled-system/jsx</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;panda.di</span><span class="token">v</span><span class="token"> </span><span class="token" style="color: #6f42c1;">fontSize</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">24px</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">hello ?</span><span class="token" style="color: #005cc5;">&lt;/panda</span><span class="token" style="color: #005cc5;">.</span><span class="token" style="color: #005cc5;">d</span><span class="token">iv&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-601"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-599">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-600'
	>
	Start the development server:</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-604"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-602">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-603'
	>
	In your Next.js project, run the command <code>npm run dev</code> in your terminal to start the development server. This will launch your Next.js application locally at <code>http://localhost:3000/</code> in your web browser.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-607"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-605"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-606">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2023/04/1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="824"
															width="1216"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-610"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-608">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-609'
	>
	After running the dev server, you should be able to see the <code>panda</code> folder with all the generated components in the root folder of your project. The components will be generated based on the styles defined in your Panda CSS configuration file (<code>panda.config.ts</code>) and the usage of the panda object in your components.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-613"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-611"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-auto" data-id="es-612">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2023/04/2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="773"
															width="721"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-616"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-614">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-615'
	>
	With these setup steps, you will be ready to use Panda CSS in your Next.js project and leverage its powerful features for creating responsive and customizable CSS styles.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-620"
	 data-animation='slideFade' data-animation-target='inner-items'>
				<div class="wrapper__anchor" id="customize-styling"></div>
	
			<div class="bullet bullet--left bullet__type--number bullet__color--infinum block-bullet__bullet" data-id="es-617">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-618'
	>
	3</p>	<div class="bullet__content">
		<h3	class='typography typography--size-36-text js-typography bullet__heading'
	data-id='es-619'
	>
	Customize styling</h3>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-623"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-621">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-622'
	>
	Panda CSS provides a set of default styles for its components, but you can easily customize the styling to match your project&#8217;s design. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-626"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-624">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-625'
	>
	Theme</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-629"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-627">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-628'
	>
	One of the powerful features of Panda CSS is the ability to customize the theme according to your project&#8217;s specific needs. You can easily define your own color palettes, typography, spacing, and more to create a unique visual style for your application.<br></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-632"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-630">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-631'
	>
	To customize the theme, you can define your own theme configuration in a <code>panda.config.ts</code> file. For example, you can add a custom color gradient called &#8220;infinum&#8221; to your theme:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-634"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">defineConfig</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@pandacss/dev</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #6f42c1;">defineConfig</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">theme</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">extend</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">tokens</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">colors</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">infinum</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">50</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#FBE9EA</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">100</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#F7D3D5</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">200</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#EFA8AB</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">300</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#E77D81</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">400</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#E05257</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">500</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#D8262C</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">600</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#BD2127</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">700</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#A21C21</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">800</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#87171C</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #005cc5;">900</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">value</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">#6C1216</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-637"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-635">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-636'
	>
	After defining the custom color gradient in your theme configuration, you can easily apply it to your component:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-639"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">&lt;</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token"> 
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #6f42c1;"> col</span><span class="token">or</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">infinum.400</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  hello ?
</span></span><span class="line"><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token">&gt;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-642"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-640">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-641'
	>
	<em>Note: This will use &#8216;#E05257&#8217; color from our custom theme. </em></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-645"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-643">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-644'
	>
	Patterns</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-648"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-646">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-647'
	>
	Panda CSS patterns are common layout building blocks that provide pre-designed styles and configurations for elements such as box container, flex containers, grid containers, grid items, and more. These patterns are included by default in Panda CSS and can be easily used in your Next.js projects.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-651"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-649">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-650'
	>
	You can also extend or customize these patterns in your project by adding additional configurations in the <code>panda.config.ts</code> file. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-653"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">defineConfig</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@pandacss/dev</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #6f42c1;">defineConfig</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">patterns</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">extend</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">container</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">transform</span><span class="token">(</span><span class="token" style="color: #e36209;">props</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> TODO descructuring props.centerContent is not working @panda</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #d73a49;">delete</span><span class="token"> </span><span class="token" style="color: #24292e;">props</span><span class="token" style="color: #24292e;">.centerConten</span><span class="token">t</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #24292e;">Object</span><span class="token">.</span><span class="token" style="color: #6f42c1;">assign</span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">position</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">relative</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">width</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">100%</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">maxWidth</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">7xl</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">mx</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">auto</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">paddingX</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">base</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">4</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token"> </span><span class="token">md</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">6</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #24292e;">props</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-656"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-654">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-655'
	>
	And this is how you can use container pattern with the simple div:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-658"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../styled-system/jsx</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">container</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../panda/patterns</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #22863a;">&lt;di</span><span class="token">v</span><span class="token"> </span><span class="token" style="color: #6f42c1;">className</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #6f42c1;">container</span><span class="token">(</span><span class="token">{</span><span class="token">}</span><span class="token">)</span><span class="token">}</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #005cc5;">&lt;panda.di</span><span class="token">v</span><span class="token"> </span><span class="token" style="color: #6f42c1;">fontSize</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">24px</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">hello ?</span><span class="token" style="color: #005cc5;">&lt;/pan</span><span class="token" style="color: #005cc5;">d</span><span class="token" style="color: #005cc5;">a.d</span><span class="token">iv&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #22863a;">&lt;</span><span class="token" style="color: #22863a;">/</span><span class="token" style="color: #22863a;">d</span><span class="token">iv&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-661"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-659">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-660'
	>
	Or, by using JSX component:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-663"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Container</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../styled-system/jsx</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;Conta</span><span class="token" style="color: #005cc5;">i</span><span class="token" style="color: #005cc5;">ne</span><span class="token">r&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #005cc5;">&lt;panda.di</span><span class="token">v</span><span class="token"> </span><span class="token" style="color: #6f42c1;">fontSize</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">24px</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">hello ?</span><span class="token" style="color: #005cc5;">&lt;/pan</span><span class="token" style="color: #005cc5;">d</span><span class="token" style="color: #005cc5;">a.d</span><span class="token">iv&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;/Conta</span><span class="token" style="color: #005cc5;">i</span><span class="token" style="color: #005cc5;">n</span><span class="token">er&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-666"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-664">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-665'
	>
	In the browser, it looks like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-669"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-667"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-668">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2023/04/pattern.webp"
					class="image__img block-media__image-img"
					alt=""
										height="825"
															width="1208"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-672"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-670">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-671'
	>
	This way, you can easily customize and extend the default patterns provided by Panda CSS to suit your specific layout requirements in your Next.js project.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-675"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-673">
	<h4	class='typography typography--size-30-text js-typography block-heading__heading'
	data-id='es-674'
	>
	Recipes</h4></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-678"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-676">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-677'
	>
	Panda CSS allows you to create pre-defined styles for common UI components, referred to as &#8220;recipes.&#8221; These recipes include styles for core components such as accordions, buttons, links, selects, and more. Recipes are designed to be highly customizable and can be easily extended or overridden to match your specific design requirements.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-681"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-679">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-680'
	>
	You can configure and extend the default set of recipes or add additional recipes to your project&#8217;s Panda CSS configuration file, <code>panda.config.ts</code>. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-684"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-682">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-683'
	>
	For example, you can define a recipe for a custom Link component:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-687"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-685">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-686'
	>
	First, we need to create a recipe:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-689"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">defineConfig</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@pandacss/dev</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #6f42c1;">defineConfig</span><span class="token">(</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">theme</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">extend</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">...</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">recipes</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">link</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">name</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">link</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">description</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">A link styles</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">base</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> some base styles</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">variants</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">variant</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">primary</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">color</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">infinum.500</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">textDecoration</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">underline</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">_hover</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">color</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">infinum.600</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">_active</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">color</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">infinum.700</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">unstyled</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">color</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">inherit</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">textDecoration</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">none</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">defaultVariants</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">variant</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">primary</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-692"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-690">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-691'
	>
	Then, we need to create a custom Link component and apply the recipe. We will also use Next.js Link component as the base:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-694"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">cx</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../../styled-system/css</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">type</span><span class="token"> </span><span class="token" style="color: #24292e;">HTMLPandaProps</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../../styled-system/jsx</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">link</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">type</span><span class="token"> </span><span class="token" style="color: #24292e;">LinkVariants</span><span class="token">,</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../../panda/recipes</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token" style="color: #24292e;">NextLink</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #d73a49;">type</span><span class="token"> </span><span class="token" style="color: #24292e;">LinkProps</span><span class="token"> </span><span class="token" style="color: #d73a49;">as</span><span class="token"> </span><span class="token" style="color: #24292e;">NextLinkProps</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">next/link</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">type</span><span class="token"> </span><span class="token" style="color: #6f42c1;">LinkProps</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">LinkVariants</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #e36209;">href</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #6f42c1;">NextLinkProps</span><span class="token">[</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">href</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">]</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">HTMLPandaProps</span><span class="token">&lt;</span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">a</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">&gt;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Link</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #e36209;">props</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #6f42c1;">LinkProps</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">href</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">variant</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">content</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">className</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">.</span><span class="token" style="color: #005cc5;">..re</span><span class="token">st</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #24292e;">props</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;NextLin</span><span class="token">k</span><span class="token"> </span><span class="token" style="color: #6f42c1;">legacyBehavior</span><span class="token" style="color: #6f42c1;"> hre</span><span class="token">f</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">href</span><span class="token">}</span><span class="token" style="color: #6f42c1;"> passHre</span><span class="token">f</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #005cc5;">&lt;panda.</span><span class="token">a</span><span class="token"> </span><span class="token" style="color: #6f42c1;">className</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #6f42c1;">cx</span><span class="token">(</span><span class="token" style="color: #24292e;">className</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #6f42c1;">link</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">variant</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">)</span><span class="token">}</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #d73a49;">...</span><span class="token" style="color: #24292e;">rest</span><span class="token">}</span><span class="token"> </span><span class="token">/&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;/Next</span><span class="token" style="color: #005cc5;">L</span><span class="token" style="color: #005cc5;">i</span><span class="token">nk&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-697"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-695">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-696'
	>
	Then we can use it like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-699"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Container</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">../../panda/jsx</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Link</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">@/components/core/Link</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;Conta</span><span class="token" style="color: #005cc5;">i</span><span class="token" style="color: #005cc5;">ne</span><span class="token">r&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #005cc5;">&lt;Lin</span><span class="token">k</span><span class="token"> </span><span class="token" style="color: #6f42c1;">href</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">/panda</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">Go to Panda page</span><span class="token" style="color: #005cc5;">&lt;</span><span class="token" style="color: #005cc5;">/Li</span><span class="token">nk&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&lt;/Conta</span><span class="token" style="color: #005cc5;">i</span><span class="token" style="color: #005cc5;">n</span><span class="token">er&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-702"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-700">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-701'
	>
	In the browser, it looks like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-705"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-703"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-704">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2023/04/recipes.webp"
					class="image__img block-media__image-img"
					alt=""
										height="825"
															width="1208"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-708"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-706">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-707'
	>
	If you prefer not to write your components from scratch, you can leverage the pre-defined components available in the Ark-UI library at <a href="https://ark-ui.com/">ark-ui.com</a>, saving time and effort in building your user interfaces.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-711"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-709">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-710'
	>
	Advanced Usage of Panda CSS: Implementing Animated Card Hover Effects</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-714"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-712">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-713'
	>
	The complex example section demonstrates how to implement a card with animation on hover using Panda CSS, showcasing the versatility and flexibility of the library for creating complex and interactive user interfaces with ease.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-716"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-javascript github-light" data-language="javascript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Link</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">@/components/core/Link</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Container</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">panda</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">../../styled-system/jsx</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">export</span><span class="token"> </span><span class="token" style="color: #d73a49;">default</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Home</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">Container</span><span class="token"> </span><span class="token" style="color: #6f42c1;">display</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">flex</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">justifyContent</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">center</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">py</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">10</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">Link</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">href</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">/panda</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">variant</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">unstyled</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">className</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">group</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">display</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">flex</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">flexDirection</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">column</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">alignItems</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">center</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">maxW</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">300px</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">fontFamily</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">sans</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">borderWidth</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">1px</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">borderColor</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">gray.200</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">borderRadius</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">3xl</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">shadow</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">md</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">transition</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">all 0.2s</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #6f42c1;">_hover</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token">transform</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">translateY(-2px)</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token">shadow</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">lg</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">}</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #6f42c1;">display</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">block</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #6f42c1;">fontSize</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">9xl</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #6f42c1;">_groupHover</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                        </span><span class="token">animation</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&#039;</span><span class="token" style="color: #032f62;">spin 1s infinite</span><span class="token" style="color: #032f62;">&#039;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token">}</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                    ?
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">panda.h2</span><span class="token"> </span><span class="token" style="color: #6f42c1;">fontSize</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">2xl</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">mb</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">2</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                    Panda CSS
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">panda.h2</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token"> </span><span class="token" style="color: #6f42c1;">color</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">gray.900</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #6f42c1;">p</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">4</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                    Because why settle for just regular bear CSS when you can have a cute,
</span></span><span class="line"><span class="token">                    powerful, and flexible framework like Panda CSS to make your web
</span></span><span class="line"><span class="token">                    development roar with excitement!
</span></span><span class="line"><span class="token">                </span><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">panda.div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">Link</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">&lt;/</span><span class="token" style="color: #005cc5;">Container</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-719"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-717">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-718'
	>
	In the video demonstration below, you can see the Card component rendered in the browser, showcasing the implementation of the code snippet above.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-722"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-720"
	 data-media-type='video'>

	<div class="video__wrapper" data-id="es-721">
		<video
		class="video block-media__video js-video js-block-media-video video--cursor-takeover-use"
		 loop autoplay playsinline muted preload='metadata'>
		<source  src='https://infinum.com/uploads/2023/04/video-demo.mp4' type='video/mp4' />	</video>
	</div></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-725"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-723">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-724'
	>
	Live link: <a href="https://js-panda-css.vercel.app/" target="_blank" rel="noreferrer noopener">https://js-panda-css.vercel.app/</a></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-728"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-726">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-727'
	>
	Start experimenting with Panda CSS</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-731"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-729">
	<p	class='typography typography--size-20-text-roman js-typography block-paragraph__paragraph'
	data-id='es-730'
	>
	That&#8217;s it! You&#8217;re ready to start using Panda CSS in your Next.js project. With its simplified approach to front-end styling, Panda CSS can help you streamline your development workflow and create efficient and <a href="https://infinum.com/mobile-web-apps/">optimized web applications</a>. Happy coding!</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/panda-css-css-in-js-without-runtime-overhead/">Panda CSS – CSS-in-JS without Runtime Overhead</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>