commit 15257b917addaac0c548ef0072c391964baf6532
Author: Thomas Hintz
Date: Mon Jan 30 08:27:08 2023 -0800
Initial commmit.
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..bffb357
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e10eaa2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,34 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+*~
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..279bcab
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.jsx`. The page auto-updates as you edit the file.
+
+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
+
+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/chapters.json b/chapters.json
new file mode 100644
index 0000000..dd964a3
--- /dev/null
+++ b/chapters.json
@@ -0,0 +1 @@
+{"version":"1.1.0","chapters":[{"startTime":2.0,"title":"Introduction to this episode."},{"startTime":181.0,"title":"Goal: build a weather app using React server components."},{"startTime":498.0,"title":"Data and data fetching is one of the biggest places where things could change. "},{"startTime":673.0,"title":"Server Side Rendering on the Server."},{"startTime":941.0,"title":"Fetch load and process data in a much more natural and efficient way with responsive clients."},{"startTime":1060.0,"title":"Adding client side interactivity."},{"startTime":1216.0,"title":"[Ad] Dive deep into the motivations and mechanics behind some very successful people.","url":"https://www.forwarddrinkingpodcast.com","img":"https://storage.buzzsprout.com/variants/jzp1bmnjrzryk78pb7iqev70j9dg/6861a7550229613e3387373f20ad829ba4bc5767dd8eb92e70a0abe304d4e657"},{"startTime":1259.86,"title":"(Cont.) Adding client side interactivity."},{"startTime":1391.86,"title":"Passing data from the client to the server. "},{"startTime":1537.86,"title":"What’s new in the react server component world. "},{"startTime":1770.86,"title":"React server components will fundamentally change how we’re going to fetch data and react. "},{"startTime":1907.86,"title":"server components can access server-side data sources directly, such as databases, file systems, and micro-services. "}]}
\ No newline at end of file
diff --git a/feed.rss b/feed.rss
new file mode 100644
index 0000000..fdc7f0b
--- /dev/null
+++ b/feed.rss
@@ -0,0 +1,1269 @@
+
+
+
+
+
+
+ The React Show
+ Mon, 23 Jan 2023 06:34:45 -0500
+ https://www.thereactshow.com
+ en-us
+ © 2023 Owl Creek Studio
+ yes
+ Support this Podcast
+a2863ece-d2d2-5562-84b4-accc82758033
+ Owl Creek Studios
+ episodic
+ false
+
+ react, software, frontend, development, full stack, react native, agile, scrum, programming, developer, programmer, engineering
+
+ Owl Creek Studios
+
+
+ https://storage.buzzsprout.com/variants/d1tds1rufs5340fyq9mpyzo491qp/5cfec01b44f3e29fae1fb88ade93fc4aecd05b192fbfbc2c2f1daa412b7c1921.jpg
+ The React Show
+ https://www.thereactshow.com
+
+
+
+
+
+ Thomas Hintz
+ -
+
A Fundamentally New React: My Journey with React Server Components
+ A Fundamentally New React: My Journey with React Server Components
+ React Sever Components are going to change so much of how we use and write React programs. In this episode we start to dive into Server Components and my journey using them to build an app.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ React Sever Components are going to change so much of how we use and write React programs. In this episode we start to dive into Server Components and my journey using them to build an app.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-12076221
+ Fri, 20 Jan 2023 07:00:00 -0800
+
+
+ 2232
+
+ 1
+ 73
+ full
+ false
+
+ -
+
Learning React on Only 3 Hours Per Week While Working Full-Time
+ Learning React on Only 3 Hours Per Week While Working Full-Time
+ What's it like to learn React while also working a full-time job? In this episode we join Jane on her journey to learn React while also working full-time. We join her in the triumph of building her first React app but also many struggles and pitfalls along the way from outdated React documentation to not understanding that React is not always so easy to integrate with non-React libraries.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What's it like to learn React while also working a full-time job? In this episode we join Jane on her journey to learn React while also working full-time. We join her in the triumph of building her first React app but also many struggles and pitfalls along the way from outdated React documentation to not understanding that React is not always so easy to integrate with non-React libraries.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-12033274
+ Fri, 13 Jan 2023 07:00:00 -0800
+
+
+ 2266
+
+ 1
+ 72
+ full
+ false
+
+ -
+
Testing & useEffect: Porting RN App to Web
+ Testing & useEffect: Porting RN App to Web
+ What is it like to port a React Native app to React for Web? In this episode we join Thomas on a journey to do just that. Along the way we discuss how testing and useEffect are possibly the worst parts about React and how you can use them in the best ways.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What is it like to port a React Native app to React for Web? In this episode we join Thomas on a journey to do just that. Along the way we discuss how testing and useEffect are possibly the worst parts about React and how you can use them in the best ways.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11941927
+ Fri, 30 Dec 2022 07:00:00 -0800
+
+
+ 2255
+
+ 1
+ 71
+ full
+ false
+
+ -
+
React 2022 Year in Review: Foundational Changes
+ React 2022 Year in Review: Foundational Changes
+ 2022 was a big year for React! We round-up the major developments in this recap and take a look at the ground-breaking changes that are laying the foundation for the future of React: server components.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ 2022 was a big year for React! We round-up the major developments in this recap and take a look at the ground-breaking changes that are laying the foundation for the future of React: server components.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11918765
+ Fri, 23 Dec 2022 07:00:00 -0800
+
+
+ 1849
+
+ 1
+ 70
+ full
+ false
+
+ -
+
News Dec 21st: ChatGPT, SWR 2.0, WASP, MFA CI, React Visual CMS & Flash in 2022
+ News Dec 21st: ChatGPT, SWR 2.0, WASP, MFA CI, React Visual CMS & Flash in 2022
+ React news Roundup For December 2022: fun with ChatGPT, new SRW release, WASP React app builder DSL release, Multi-factor auth for CI, React Bricks visual CMS, and Flash in 2022!Links Support the show ]]>
+ React news Roundup For December 2022: fun with ChatGPT, new SRW release, WASP React app builder DSL release, Multi-factor auth for CI, React Bricks visual CMS, and Flash in 2022!Links Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11912454
+ Wed, 21 Dec 2022 11:00:00 -0800
+ 778
+
+ 1
+ 69
+ full
+ false
+
+ -
+
How I Built My Own React
+ How I Built My Own React
+ Have you ever wondered how React works internally? Or what happens when React “renders”? I did and embarked on a journey to build my own version of React and dive deep into the source code of React itself to better understand exactly what happens “under the covers”. This is my story of that journey.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever wondered how React works internally? Or what happens when React “renders”? I did and embarked on a journey to build my own version of React and dive deep into the source code of React itself to better understand exactly what happens “under the covers”. This is my story of that journey.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11879575
+ Fri, 16 Dec 2022 07:00:00 -0800
+
+
+ 1534
+
+ 1
+ 68
+ full
+ false
+
+ -
+
FAQ on Typescript and Svelte
+ FAQ on Typescript and Svelte
+ Is Typescript really that important? Should you use it? Do I use it? Also, I recently got back into Svelte and share my thoughts on the experience and how it compares to React.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is Typescript really that important? Should you use it? Do I use it? Also, I recently got back into Svelte and share my thoughts on the experience and how it compares to React.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11802072
+ Fri, 09 Dec 2022 07:00:00 -0800
+
+
+ 2183
+
+ 1
+ 67
+ full
+ false
+
+ -
+
Thinking in React
+ Thinking in React
+ How do you “think in React”? If you can think in React you’ll be able to build React applications quicker, easier, and in a more robust manner. But where does one start? What is the best method for building React components and applications in a manner that fits well with the design of React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How do you “think in React”? If you can think in React you’ll be able to build React applications quicker, easier, and in a more robust manner. But where does one start? What is the best method for building React components and applications in a manner that fits well with the design of React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11802002
+ Fri, 02 Dec 2022 08:00:00 -0800
+
+
+ 2496
+
+ 1
+ 66
+ full
+ false
+
+ -
+
How Decentralized is Crypto, Really?
+ How Decentralized is Crypto, Really?
+ It's time to do a design analysis of cryptocurrencies and the technology they are built upon: blockchains. What are the design characteristics of cryptocurrencies and what problems are they good at solving? Are they good for currencies? How decentralized are they?LInks Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ It's time to do a design analysis of cryptocurrencies and the technology they are built upon: blockchains. What are the design characteristics of cryptocurrencies and what problems are they good at solving? Are they good for currencies? How decentralized are they?LInks Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11757420
+ Fri, 25 Nov 2022 06:00:00 -0800
+
+
+ 3615
+
+ 1
+ 65
+ full
+ false
+
+ -
+
Concise-ish Beginner's Guide to Learning React
+ Concise-ish Beginner's Guide to Learning React
+ Are you new to React or even new to programming in general but want to learn React? This is our concise-ish, opinionated guide to learning React. Between JavaScript, React, bundlers, JSX, code editors, npm or yarn, and more it can be extremely confusing when you first are trying to get started. The goal with this episode is to guide you through the path so you can learn React in the most efficient, pleasant, and fun way possible!https://www.thereactshow.com/podcast/concise-ish-beginners-guide-to-learning-react Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you new to React or even new to programming in general but want to learn React? This is our concise-ish, opinionated guide to learning React. Between JavaScript, React, bundlers, JSX, code editors, npm or yarn, and more it can be extremely confusing when you first are trying to get started. The goal with this episode is to guide you through the path so you can learn React in the most efficient, pleasant, and fun way possible!https://www.thereactshow.com/podcast/concise-ish-beginners-guide-to-learning-react Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11683392
+ Sun, 13 Nov 2022 07:00:00 -0800
+
+ 2500
+
+ 1
+ 64
+ full
+ false
+
+ -
+
It’s Not Your Fault You Don’t Understand The Code
+ It’s Not Your Fault You Don’t Understand The Code
+ If you or the previous programmer doesn't document what the code is intended to do it’s bad code and it won’t be maintainable in the long term. High quality, maintainable code must include high quality code comments. In this episode we look at why that is and how to do it. We also investigate if you can store React state outside of hooks or React classes.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ If you or the previous programmer doesn't document what the code is intended to do it’s bad code and it won’t be maintainable in the long term. High quality, maintainable code must include high quality code comments. In this episode we look at why that is and how to do it. We also investigate if you can store React state outside of hooks or React classes.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11586984
+ Fri, 28 Oct 2022 10:00:00 -0700
+
+ 2902
+
+ 1
+ 63
+ full
+ false
+
+ -
+
Your Boss Is Wrong and How Slow Is React?
+ Your Boss Is Wrong and How Slow Is React?
+ Are you more often correct than your boss? And what does that matter? Also, we have some fun experimenting with the performance of React compared to vanilla JavaScript and discuss why it does or does not matter.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you more often correct than your boss? And what does that matter? Also, we have some fun experimenting with the performance of React compared to vanilla JavaScript and discuss why it does or does not matter.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11533367
+ Fri, 21 Oct 2022 10:00:00 -0700
+
+ 2933
+
+ 1
+ 62
+ full
+ false
+
+ -
+
The Reality of Micro-Frontends and Why I Don't Recommend Them
+ The Reality of Micro-Frontends and Why I Don't Recommend Them
+ Micro-frontends have been gaining in popularity over the last few years. What actually are micro-frontends? Will they make your application better? Should you use them? We’ll do an analysis in this episode and answer those questions.Show Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Micro-frontends have been gaining in popularity over the last few years. What actually are micro-frontends? Will they make your application better? Should you use them? We’ll do an analysis in this episode and answer those questions.Show Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11500932
+ Fri, 14 Oct 2022 10:00:00 -0700
+
+ 3564
+
+ 1
+ 61
+ full
+ false
+
+ -
+
React FAQ
+ React FAQ
+ FAQ on React!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ FAQ on React!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11235167
+ Fri, 23 Sep 2022 10:00:00 -0700
+
+ 2825
+
+ 1
+ 60
+ full
+ false
+
+ -
+
Remix: As "Fast as Instant"?
+ Remix: As "Fast as Instant"?
+ We're finally going to dive into Remix and see what it's all about and if you should give it a try!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ We're finally going to dive into Remix and see what it's all about and if you should give it a try!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11235154
+ Fri, 09 Sep 2022 10:00:00 -0700
+
+ 3226
+
+ 1
+ 59
+ full
+ false
+
+ -
+
Noobs vs Experts; with Kyle VerHoef
+ Noobs vs Experts; with Kyle VerHoef
+ Are you the expert on your team and struggle to get things done with a constant barrage of questions lobbed at you? Or are you new and unsure what you should ask others and when? In this episode we try to solve those questions from both sides!Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you the expert on your team and struggle to get things done with a constant barrage of questions lobbed at you? Or are you new and unsure what you should ask others and when? In this episode we try to solve those questions from both sides!Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11193020
+ Fri, 26 Aug 2022 07:00:00 -0700
+
+ 3670
+
+ 1
+ 58
+ full
+ false
+
+ -
+
Oops I Built The Wrong Thing
+ Oops I Built The Wrong Thing
+ What do you do when you built the wrong feature or product? When your boss or client is upset? LinksWelcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What do you do when you built the wrong feature or product? When your boss or client is upset? LinksWelcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11130436
+ Sat, 13 Aug 2022 08:00:00 -0700
+
+ 2847
+
+ 1
+ 57
+ full
+ false
+
+ -
+
A New React Compiler!
+ A New React Compiler!
+ Twitter - The React Show Edited by: The Podcast Editor React Conf talk by Xuan HuangJoy UI TanStack Query 4
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Twitter - The React Show Edited by: The Podcast Editor React Conf talk by Xuan HuangJoy UI TanStack Query 4
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11086813
+ Fri, 05 Aug 2022 10:00:00 -0700
+
+ 2258
+
+ 1
+ 56
+ full
+ false
+
+ -
+
Popcorn Anyone? Or, How to Load Assets The Right Way
+ Popcorn Anyone? Or, How to Load Assets The Right Way
+ Nobody likes pages that jump around when loading or feel slow. How can we combat this in a measured fashion to create a smooth, enjoyable UX?News ZagJS : an exciting new library from the creator's of ChakraUI that could enable your components to be component-library agnostic!Next.js 12.2 : exciting new features in Next.js 12.2Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Nobody likes pages that jump around when loading or feel slow. How can we combat this in a measured fashion to create a smooth, enjoyable UX?News ZagJS : an exciting new library from the creator's of ChakraUI that could enable your components to be component-library agnostic!Next.js 12.2 : exciting new features in Next.js 12.2Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11010316
+ Fri, 22 Jul 2022 10:00:00 -0700
+
+ 2030
+
+ 1
+ 55
+ full
+ false
+
+ -
+
Security From Unintentional Abusers
+ Security From Unintentional Abusers
+ What do you do when your users accidentally or even purposefully abuse your service or app? Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What do you do when your users accidentally or even purposefully abuse your service or app? Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10966461
+ Fri, 15 Jul 2022 10:00:00 -0700
+
+ 2489
+
+ 1
+ 54
+ full
+ false
+
+ -
+
How to Start a New Project
+ How to Start a New Project
+ Or at least my method to starting and following through!Foundations of High Performance React Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Or at least my method to starting and following through!Foundations of High Performance React Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10889643
+ Fri, 01 Jul 2022 10:00:00 -0700
+
+ 2347
+
+ 1
+ 53
+ full
+ false
+
+ -
+
How I Became Good at React in a Month
+ How I Became Good at React in a Month
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10849241
+ Fri, 24 Jun 2022 10:00:00 -0700
+
+ 2905
+
+ 1
+ 52
+ full
+ false
+
+ -
+
Dan Abramov's Updated React Guide
+ Dan Abramov's Updated React Guide
+ Dan Abramov has an updated Beta React Effects Guide. In this episode we go through and see what the designers of React think about effects and how to correctly use them in React 18 and we take a look at user reactions.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Dan Abramov has an updated Beta React Effects Guide. In this episode we go through and see what the designers of React think about effects and how to correctly use them in React 18 and we take a look at user reactions.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10795014
+ Fri, 17 Jun 2022 10:00:00 -0700
+
+ 3312
+
+ 1
+ 51
+ full
+ false
+
+ -
+
Forms Still Suck, Can We Design Something Better?
+ Forms Still Suck, Can We Design Something Better?
+ The challenge: forms suck in React today, can we design a better way to work with forms in React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ The challenge: forms suck in React today, can we design a better way to work with forms in React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10735883
+ Sat, 04 Jun 2022 10:00:00 -0700
+
+ 3074
+
+ 1
+ 50
+ full
+ false
+
+ -
+
How To Become A React Engineer
+ How To Become A React Engineer
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10650446
+ Fri, 20 May 2022 10:00:00 -0700
+
+ 3660
+
+ 1
+ 49
+ full
+ false
+
+ -
+
The Secrets of React Routing
+ The Secrets of React Routing
+ Twitter: @TheReactShowFoundations of High Performance React 30% off with code REACTSHOW on Leanpub What actually is routing in React? In this episode we look at what React routing is, and how it can be used not only for the traditional tasks but for a whole lot more.
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Twitter: @TheReactShowFoundations of High Performance React 30% off with code REACTSHOW on Leanpub What actually is routing in React? In this episode we look at what React routing is, and how it can be used not only for the traditional tasks but for a whole lot more.
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10610563
+ Fri, 13 May 2022 10:00:00 -0700
+
+ 2385
+
+ 1
+ 48
+ full
+ false
+
+ -
+
How To Make Bad React Code Good
+ How To Make Bad React Code Good
+ Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10570193
+ Fri, 06 May 2022 10:00:00 -0700
+
+ 2894
+
+ 1
+ 47
+ full
+ false
+
+ -
+
React 18 Released! Everything you need to know
+ React 18 Released! Everything you need to know
+ Links Resources
Show Notes
Major New Features Concurrency! Mostly an implementation detail but powers many of the features. Interruptible renders! Better/smoother UI UX React can abandon and resume renders. Upcoming minor release will include Offscreen component for that allows restoring previous screens in the same state or even rendering a screen in the background. Breaking changes? Concurrent rendering is technically a breaking change Only enabled in parts of your app that use new features Benefits will take some time to realize, like waiting on library authors Suspense in Data Frameworks Server Components, still in development Automatic Batching Prioritized updates / AKA "transitions" Suspense On The Server Strict Mode developer features useTransition mark state updates as non-urgent useDeferredValue an upgrade over debouncing, an interruptible render that doesn't block user input useSyncExternalStore for libs, removes the needs to use useEffect when implementing subscriptions useInsertionEffect for libs, helps with CSS-in-JS lib performance issues How to upgrade: install React 18 via npm change ReactDOM.render to ReactDOM/client.createRoot (unmountComponentAtNode is also updated) callback is removed from render use useEffect or similar instead depending on use case If using SSR with hydration change hydrate to hydrateRoot State of React 18 & Reported issues: Should you upgrade? Or when should you upgrade? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Links Resources
Show Notes
Major New Features Concurrency! Mostly an implementation detail but powers many of the features. Interruptible renders! Better/smoother UI UX React can abandon and resume renders. Upcoming minor release will include Offscreen component for that allows restoring previous screens in the same state or even rendering a screen in the background. Breaking changes? Concurrent rendering is technically a breaking change Only enabled in parts of your app that use new features Benefits will take some time to realize, like waiting on library authors Suspense in Data Frameworks Server Components, still in development Automatic Batching Prioritized updates / AKA "transitions" Suspense On The Server Strict Mode developer features useTransition mark state updates as non-urgent useDeferredValue an upgrade over debouncing, an interruptible render that doesn't block user input useSyncExternalStore for libs, removes the needs to use useEffect when implementing subscriptions useInsertionEffect for libs, helps with CSS-in-JS lib performance issues How to upgrade: install React 18 via npm change ReactDOM.render to ReactDOM/client.createRoot (unmountComponentAtNode is also updated) callback is removed from render use useEffect or similar instead depending on use case If using SSR with hydration change hydrate to hydrateRoot State of React 18 & Reported issues: Should you upgrade? Or when should you upgrade? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10524868
+ Fri, 29 Apr 2022 10:00:00 -0700
+
+ 2618
+
+ 1
+ 46
+ full
+ false
+
+ -
+
How to Build React Features Right the First Time™
+ How to Build React Features Right the First Time™
+ Is it possible to build your React app right the first time? Or do you get annoyed with having to re-do things when it turns out we didn’t actually understand what users wanted? Or do you just want to make more money by creating happier users? On this episode we’ll work through methods to save time, effort, and actually build what the user wants.Links Resources
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is it possible to build your React app right the first time? Or do you get annoyed with having to re-do things when it turns out we didn’t actually understand what users wanted? Or do you just want to make more money by creating happier users? On this episode we’ll work through methods to save time, effort, and actually build what the user wants.Links Resources
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10402825
+ Fri, 08 Apr 2022 10:00:00 -0700
+
+ 4679
+
+ 1
+ 45
+ full
+ false
+
+ -
+
Why React Should Die
+ Why React Should Die
+ Is React the final answer? Is it possible today to take React’s shortcomings to create something better than React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is React the final answer? Is it possible today to take React’s shortcomings to create something better than React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10365089
+ Sat, 02 Apr 2022 10:00:00 -0700
+
+ 4395
+
+ 1
+ 44
+ full
+ false
+
+ -
+
How JavaScript Actually Executes
+ How JavaScript Actually Executes
+ How does the JavaScript that powers your React app actually get run in the browser? How does React take advantage of the browser execution model? In this episode we talk about what actually happens when your JavaScript source code gets sent to a browser and it executes it going into detail about every step in the pipeline.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How does the JavaScript that powers your React app actually get run in the browser? How does React take advantage of the browser execution model? In this episode we talk about what actually happens when your JavaScript source code gets sent to a browser and it executes it going into detail about every step in the pipeline.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10317720
+ Fri, 25 Mar 2022 10:00:00 -0700
+
+ 4738
+
+ 1
+ 43
+ full
+ false
+
+ -
+
What's the Hype about Shopify Hydrogen?
+ What's the Hype about Shopify Hydrogen?
+ As new technology emerges in your technical stack, it’s important to not only learn them in theory, but to find practical ways to implement the knowledge you’re learning. You could either spend your time making another Todo List or Tic Tac Toe implementation, or dive into a rapidly expanding eCommerce market with the new Shopify Hydrogen Framework, built on upcoming React 18 Features like React Server Components.Links Show Notes
Keeping Ahead of the Hiring Curve Practice makes Perfect Story Time on “Practice” React Applications we Made Transition: Making the Practical even more Practical Capitalizing on the eCommerce Industry Shopify is Eating their Ecosystem Shopify Partners Program Shopify for DevelopersAPIs + Graphql App Bridge Polaris Component Library Liquid Hydrogen What is Hydrogen Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ As new technology emerges in your technical stack, it’s important to not only learn them in theory, but to find practical ways to implement the knowledge you’re learning. You could either spend your time making another Todo List or Tic Tac Toe implementation, or dive into a rapidly expanding eCommerce market with the new Shopify Hydrogen Framework, built on upcoming React 18 Features like React Server Components.Links Show Notes
Keeping Ahead of the Hiring Curve Practice makes Perfect Story Time on “Practice” React Applications we Made Transition: Making the Practical even more Practical Capitalizing on the eCommerce Industry Shopify is Eating their Ecosystem Shopify Partners Program Shopify for DevelopersAPIs + Graphql App Bridge Polaris Component Library Liquid Hydrogen What is Hydrogen Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10278986
+ Sat, 19 Mar 2022 10:00:00 -0700
+
+ 4870
+
+ 1
+ 42
+ full
+ false
+
+ -
+
Preventing Startup Burnout with Brian Wetzel (Part 2)
+ Preventing Startup Burnout with Brian Wetzel (Part 2)
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10229771
+ Fri, 11 Mar 2022 10:00:00 -0800
+
+ 4201
+
+ 1
+ 41
+ full
+ false
+
+ -
+
Preventing Startup Burnout with Brian Wetzel (Part 1)
+ Preventing Startup Burnout with Brian Wetzel (Part 1)
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10181548
+ Fri, 04 Mar 2022 10:00:00 -0800
+
+ 4564
+
+ 1
+ 40
+ full
+ false
+
+ -
+
Taking the Pain Out of Forms in React
+ Taking the Pain Out of Forms in React
+ In any application, not just Javascript based ones, user input is one of the foundational pieces for user interaction with the application, the server, and with others across the web. In order to capture user input, you need forms. In this episode, we’ll explore the box form support provided by React with the basic HTML form elements like input, textarea and select, as well as libraries that have been developed to enhance form creation, as well as to perform validation. Links Resources
Show Notes
HTML + CSS as a basis for creating websites Javascript leads to enabling more user input and interactivity options Gathering user input without forms is possible, but forms make things simpler What are forms? Forms are the typical method we user input required to interact with an ecosystemHighly opinionated Many ways to do them Security, validation, accessibility etc. Lots to consider, what is the best way to do this in React?Working with What We Have in React and Javascript/HTML Controlled vs Uncontrolled Validationpreventing server side hacking ensuring validity of data checking each field on submission regex Where vanilla react forms fail?large swathes of setStates or managing a large state object multiple types of validation, shared validation lots of vanilla code to cover existing and potentially future cases you end up just creating your own form framework, so why not use an existing one? Form FrameworksWhat are some options? Why d Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In any application, not just Javascript based ones, user input is one of the foundational pieces for user interaction with the application, the server, and with others across the web. In order to capture user input, you need forms. In this episode, we’ll explore the box form support provided by React with the basic HTML form elements like input, textarea and select, as well as libraries that have been developed to enhance form creation, as well as to perform validation. Links Resources
Show Notes
HTML + CSS as a basis for creating websites Javascript leads to enabling more user input and interactivity options Gathering user input without forms is possible, but forms make things simpler What are forms? Forms are the typical method we user input required to interact with an ecosystemHighly opinionated Many ways to do them Security, validation, accessibility etc. Lots to consider, what is the best way to do this in React?Working with What We Have in React and Javascript/HTML Controlled vs Uncontrolled Validationpreventing server side hacking ensuring validity of data checking each field on submission regex Where vanilla react forms fail?large swathes of setStates or managing a large state object multiple types of validation, shared validation lots of vanilla code to cover existing and potentially future cases you end up just creating your own form framework, so why not use an existing one? Form FrameworksWhat are some options? Why d Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10138345
+ Fri, 25 Feb 2022 10:00:00 -0800
+
+ 4099
+
+ 1
+ 39
+ full
+ false
+
+ -
+
What are React Server Components and Why They're Awesome!
+ What are React Server Components and Why They're Awesome!
+ Upcoming in a React release is React Server Components. No, they aren’t just Server-Side Rendering. In fact, they are quite different and quite powerful in their own way. In this episode we learn about React Server Components and discuss how they could be used in applications of the future.Links Resources
Show Notes
OverviewPerformance, Load Time, Etc Critical for success 53% of users abandon a website if it takes more than 3 seconds to load Users are not interested in using apps that have poor performance, don’t feel right So many ways to tackle the problem, what method to pick?Bundle Optimization with Webpack, etc. Performance Audits in App Server Side Rendering What are React Server Components?Before RSC, all components were rendered in the browser... With RSC, parts of the React Tree can be rendered by the browser, and other parts are rendered on the server. How is it different than Server Side Rendering? What are the main benefits of using React Server Components? How do React Server Components work?component.server.jsx, component.client.jsx , component.jsx Client Components cannot import Server Components, only regular or Server components can. Server Components can import Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Upcoming in a React release is React Server Components. No, they aren’t just Server-Side Rendering. In fact, they are quite different and quite powerful in their own way. In this episode we learn about React Server Components and discuss how they could be used in applications of the future.Links Resources
Show Notes
OverviewPerformance, Load Time, Etc Critical for success 53% of users abandon a website if it takes more than 3 seconds to load Users are not interested in using apps that have poor performance, don’t feel right So many ways to tackle the problem, what method to pick?Bundle Optimization with Webpack, etc. Performance Audits in App Server Side Rendering What are React Server Components?Before RSC, all components were rendered in the browser... With RSC, parts of the React Tree can be rendered by the browser, and other parts are rendered on the server. How is it different than Server Side Rendering? What are the main benefits of using React Server Components? How do React Server Components work?component.server.jsx, component.client.jsx , component.jsx Client Components cannot import Server Components, only regular or Server components can. Server Components can import Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10037837
+ Fri, 18 Feb 2022 10:00:00 -0800
+
+ 3549
+
+ 1
+ 38
+ full
+ false
+
+ -
+
React Fibers / How Your App Actually Executes
+ React Fibers / How Your App Actually Executes
+ In this episode we learn about the primary data structure underlying the React rendering process: React Fibers. With this knowledge we take a look at some of React’s design and how fibers impact development.Links Resources
Show Notes
What causes Jank? How do you get concurrency?Jank is when we need to update the UI but we can’t because we’re still processing some other work Breaking down “work” into small, discrete units of work How does React render?Phase one: reconciler phase Phase two: render to DOM/mobile/etc JavaScript execution modelJavaScript is single thread, no real concurrency Event Queue Stack frame React RendersThey can take a long time Updates could potentially be batched Some updates, like animations, keyboard events, should be prioritized Processing an API response is less priority What are fibers?A data-structure Breaking down reconciler phase in discrete units of work run in a loop Contain a priority level Contain state needed to pause and resume execution Fibers are used to allow React to create its own scheduler How does this help?React can control the execution model Prioritizing and batching updates Creating a “smooth” UX, less jank Things to watch for Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In this episode we learn about the primary data structure underlying the React rendering process: React Fibers. With this knowledge we take a look at some of React’s design and how fibers impact development.Links Resources
Show Notes
What causes Jank? How do you get concurrency?Jank is when we need to update the UI but we can’t because we’re still processing some other work Breaking down “work” into small, discrete units of work How does React render?Phase one: reconciler phase Phase two: render to DOM/mobile/etc JavaScript execution modelJavaScript is single thread, no real concurrency Event Queue Stack frame React RendersThey can take a long time Updates could potentially be batched Some updates, like animations, keyboard events, should be prioritized Processing an API response is less priority What are fibers?A data-structure Breaking down reconciler phase in discrete units of work run in a loop Contain a priority level Contain state needed to pause and resume execution Fibers are used to allow React to create its own scheduler How does this help?React can control the execution model Prioritizing and batching updates Creating a “smooth” UX, less jank Things to watch for Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10037718
+ Fri, 11 Feb 2022 10:00:00 -0800
+
+ 4914
+
+ 1
+ 37
+ full
+ false
+
+ -
+
How to successfully test React apps to speed up development / Using Cypress
+ How to successfully test React apps to speed up development / Using Cypress
+ Stop getting midnight calls because you broke the site on the last deploy: use Cypress for front-end testing! In this episode we talk about how we use the free, open-source testing framework Cypress to save time, catch bugs, and sleep better at night.Links Show Notes
What is integration testing? What are other types of testing? Story Time, life without good testsStories about poorly written tests Problem: new features get priority over testing Good tests with good coverage speeds up development!I always write tests before refactoring because you can go wild and know that all you have to do is get the tests to pass in the end Good tests give confidence: you can write new features/code a lot more quickly because you don’t have to think about breaking things, if somethings breaks you’ll know and you can fix it Infrastructure investment : it’s like investing in better roads and transportation networks, it has an upfront cost but you can move people and goods faster and more efficiently afterwards Solution: new features priority over testingEstimates include testing Don’t demo until you have tests if demoing puts on pressure to finish before you wrote tests What to test? / Testing priorities?Integration first (ensures things actually work for the end-user) Then unit What is Cypress used for?Integration Tests Unit Tests What makes Cypress best suitable for the task?Fast Consistent Screenshots, videos, logs Network request spies, spoofing CI Integration Dashboard What I don’t like about Cypress:Async APIMaybe necessary for this because of JS? Successfully Maintaining Tests? When to write tests? Cypress tips & tricksCustom commands Capturing valuesExample: capture a numeric value, do test, check t Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Stop getting midnight calls because you broke the site on the last deploy: use Cypress for front-end testing! In this episode we talk about how we use the free, open-source testing framework Cypress to save time, catch bugs, and sleep better at night.Links Show Notes
What is integration testing? What are other types of testing? Story Time, life without good testsStories about poorly written tests Problem: new features get priority over testing Good tests with good coverage speeds up development!I always write tests before refactoring because you can go wild and know that all you have to do is get the tests to pass in the end Good tests give confidence: you can write new features/code a lot more quickly because you don’t have to think about breaking things, if somethings breaks you’ll know and you can fix it Infrastructure investment : it’s like investing in better roads and transportation networks, it has an upfront cost but you can move people and goods faster and more efficiently afterwards Solution: new features priority over testingEstimates include testing Don’t demo until you have tests if demoing puts on pressure to finish before you wrote tests What to test? / Testing priorities?Integration first (ensures things actually work for the end-user) Then unit What is Cypress used for?Integration Tests Unit Tests What makes Cypress best suitable for the task?Fast Consistent Screenshots, videos, logs Network request spies, spoofing CI Integration Dashboard What I don’t like about Cypress:Async APIMaybe necessary for this because of JS? Successfully Maintaining Tests? When to write tests? Cypress tips & tricksCustom commands Capturing valuesExample: capture a numeric value, do test, check t Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10011866
+ Fri, 04 Feb 2022 10:00:00 -0800
+
+ 5663
+
+ 1
+ 36
+ full
+ false
+
+ -
+
Chris Keen on Succeeding as a React Contractor
+ Chris Keen on Succeeding as a React Contractor
+ Join Chris Keen, of Keen Concepts, in learning about being and becoming a React contractor and how to succeed long term. Chris Keen has been a highly successful React consultant for over 7 years, a web contractor for nearly two decades, and is the founder of Keen Concepts. In this episode, we’ll learn from Chris how to become and stay a successful React contractor.Episode Page Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Join Chris Keen, of Keen Concepts, in learning about being and becoming a React contractor and how to succeed long term. Chris Keen has been a highly successful React consultant for over 7 years, a web contractor for nearly two decades, and is the founder of Keen Concepts. In this episode, we’ll learn from Chris how to become and stay a successful React contractor.Episode Page Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9935994
+ Fri, 28 Jan 2022 10:00:00 -0800
+
+ 5375
+
+ 1
+ 35
+ full
+ false
+
+ -
+
Query Caching, Why You Must Use It With React; Using React Query
+ Query Caching, Why You Must Use It With React; Using React Query
+ A great way to improve the UX of most React applications is to include a query caching layer. In this episode we talk about why it can be be so important and some techniques to implement it well.Show Notes
IssuesExample, data hooks based on another data hook; “location” hook used everywhere Issues with vanilla data fetching hooksEvery component/page refetches everything Everything re-renders Delays while waiting for parent hooks to return data Not triggering requests at the correct/ideal timeShould be when the user clicks the button to open the new page, not when the new page component is loaded How to structure dependent data flows and refetches? Could also use global state Update endpoints that return new data/object Scroll recovery Paged endpoints refresh intervals ️️️ResolutionQuery caching/fetching logic libSWR, React Query etc Tell lib what endpoint to hit and under which conditions, assigning that setup a keyLib stores result with a key Everything is done via that key, if the cache has a value for it it will return it Returns the same value every time the hook is used so it doesn’t cause a re-render, smoother app Stale-while Revalidate key/value store with fetching logic built in downsidessome places where it isn’t needed, appropriate Complicated RQ has good dev tools, use them! Triggering requests at the correct/ideal time Generally use endpoint paths as keys scroll recovery paged endpoints dependencies refresh intervals hook for creating RQ endpoints Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ A great way to improve the UX of most React applications is to include a query caching layer. In this episode we talk about why it can be be so important and some techniques to implement it well.Show Notes
IssuesExample, data hooks based on another data hook; “location” hook used everywhere Issues with vanilla data fetching hooksEvery component/page refetches everything Everything re-renders Delays while waiting for parent hooks to return data Not triggering requests at the correct/ideal timeShould be when the user clicks the button to open the new page, not when the new page component is loaded How to structure dependent data flows and refetches? Could also use global state Update endpoints that return new data/object Scroll recovery Paged endpoints refresh intervals ️️️ResolutionQuery caching/fetching logic libSWR, React Query etc Tell lib what endpoint to hit and under which conditions, assigning that setup a keyLib stores result with a key Everything is done via that key, if the cache has a value for it it will return it Returns the same value every time the hook is used so it doesn’t cause a re-render, smoother app Stale-while Revalidate key/value store with fetching logic built in downsidessome places where it isn’t needed, appropriate Complicated RQ has good dev tools, use them! Triggering requests at the correct/ideal time Generally use endpoint paths as keys scroll recovery paged endpoints dependencies refresh intervals hook for creating RQ endpoints Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9926848
+ Fri, 21 Jan 2022 10:00:00 -0800
+
+ 4932
+
+ 1
+ 34
+ full
+ false
+
+ -
+
Where and How to Store Data from Your React Application
+ Where and How to Store Data from Your React Application
+ As React Developers, we’ve definitely got the front-end under control, but what about the back-end? One of the core components of a successful application is your Database. What is a Database? How do you choose the right one? Where do you host it? We’ll answer all your questions and share some experiences on Where and How to Store Data from your React ApplicationShow Notes Intro Data is fundamental to solving every programming problemFirst thing I do, whether it is writing an app or designing an algorithm or creating a library is look at the data What is the structure and how I will interact with it From Hard Coded Values to Your First DatabaseParalysis by Analysis due to lack of knowing options Starting with something that you don’t know well and it takes up all your time Making the wrong choice and sticking with it even though it causes more problems Making wrong assumptions on how you write your front-end, and it doesn’t sync up well with the way you are receiving data Making the Right ChoiceWhat is the structure of the data? Who is the data for? How is the data accessed? How to choose the right type of data storage?Types of Data StorageRelational DatabasesGreat for CRUD Typically the best to start with Simple data models Need to know SQL Good enough to use for most things Key Value StoresFast access + updates to self contained datasets? Document Stores Good for specialized cases Graph DatabaseWhat is a graph?Network of Vertices and Edges Common AlgosShortest path between two verticies Allows relations via whole networks Find the path between two nodes Maintenance resources?Choosing librariesSQL LiteFile Based Relational Storage option for when Code changes every few years Running your own Database ServerCheck if it’s running User Accounts App logins, connection maintenance option for when Code changes frequently? How often does the code-base change? Where to Host Your DatabaseSelf HostedPrivacy More “maintenance” but not really if you do it right. Databases A Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ As React Developers, we’ve definitely got the front-end under control, but what about the back-end? One of the core components of a successful application is your Database. What is a Database? How do you choose the right one? Where do you host it? We’ll answer all your questions and share some experiences on Where and How to Store Data from your React ApplicationShow Notes Intro Data is fundamental to solving every programming problemFirst thing I do, whether it is writing an app or designing an algorithm or creating a library is look at the data What is the structure and how I will interact with it From Hard Coded Values to Your First DatabaseParalysis by Analysis due to lack of knowing options Starting with something that you don’t know well and it takes up all your time Making the wrong choice and sticking with it even though it causes more problems Making wrong assumptions on how you write your front-end, and it doesn’t sync up well with the way you are receiving data Making the Right ChoiceWhat is the structure of the data? Who is the data for? How is the data accessed? How to choose the right type of data storage?Types of Data StorageRelational DatabasesGreat for CRUD Typically the best to start with Simple data models Need to know SQL Good enough to use for most things Key Value StoresFast access + updates to self contained datasets? Document Stores Good for specialized cases Graph DatabaseWhat is a graph?Network of Vertices and Edges Common AlgosShortest path between two verticies Allows relations via whole networks Find the path between two nodes Maintenance resources?Choosing librariesSQL LiteFile Based Relational Storage option for when Code changes every few years Running your own Database ServerCheck if it’s running User Accounts App logins, connection maintenance option for when Code changes frequently? How often does the code-base change? Where to Host Your DatabaseSelf HostedPrivacy More “maintenance” but not really if you do it right. Databases A Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9886172
+ Fri, 14 Jan 2022 10:00:00 -0800
+
+ 4816
+
+ 1
+ 33
+ full
+ false
+
+ -
+
How To Stop Wasting Your Time
+ How To Stop Wasting Your Time
+ A lot of us end up wasting a lot of time doing repetitive tasks. But we also worry that learning a new scripting language or keyboard shortcuts will be more work than it’s worth. In this episode we discuss a method you can use to find the right things to optimize.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ A lot of us end up wasting a lot of time doing repetitive tasks. But we also worry that learning a new scripting language or keyboard shortcuts will be more work than it’s worth. In this episode we discuss a method you can use to find the right things to optimize.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9842114
+ Fri, 07 Jan 2022 10:00:00 -0800
+
+ 5431
+
+ 1
+ 32
+ full
+ false
+
+ -
+
React Component Lifecycle, What is a Component?
+ React Component Lifecycle, What is a Component?
+ We’re always working with components, but do we know when they mount or unmount or even what that actually means? Do we know how effects play into the lifecycle of a component? On this episode, we’re going to take a close look the lifecycle of a React component; what it is made up of and how it interacts with the rest of your program.Links Show Notes
Intro Overview BackgroundStory about defining a component inside of a component (starts with tests/cypress)React has to check if the definition of a component has changed What actually is a component? Nothing more than a function with bookkeeping LifecycleMounting UpdatingRuns function code but doesn’t use default state/props Updates the DOM when completeother than useLayoutEffects Post-Updating / EffectsuseLayoutEffect, synchronous, after DOM update but before paint Runs hook code sometime after component code completes running and DOM is updated, asynchronous Unmounting lexical scope SolutionsCreating lifecycle methods with useEffect properlyuseLayoutEffect vs useEffect Dependency array useOnce (similar to onMount)Similar to onMount but different because uses useEffect vs useLayoutEffect useRef - ref.current will be undefined on first run set ref.current to true after running hook code onUnmountAFAIK there is no way to on unmount in a function component But you shouldn’t need to, if you use cleanup effects properly Updating StatePrefer updating in event handlers vs useEffectEvent handler is more synchronous/easier to reason about Divisions between components/how to divide up your components/hooksShould this influence how we divide up our components?Generally no, abstractions should, not mechanics or performance Tangent: best practices Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ We’re always working with components, but do we know when they mount or unmount or even what that actually means? Do we know how effects play into the lifecycle of a component? On this episode, we’re going to take a close look the lifecycle of a React component; what it is made up of and how it interacts with the rest of your program.Links Show Notes
Intro Overview BackgroundStory about defining a component inside of a component (starts with tests/cypress)React has to check if the definition of a component has changed What actually is a component? Nothing more than a function with bookkeeping LifecycleMounting UpdatingRuns function code but doesn’t use default state/props Updates the DOM when completeother than useLayoutEffects Post-Updating / EffectsuseLayoutEffect, synchronous, after DOM update but before paint Runs hook code sometime after component code completes running and DOM is updated, asynchronous Unmounting lexical scope SolutionsCreating lifecycle methods with useEffect properlyuseLayoutEffect vs useEffect Dependency array useOnce (similar to onMount)Similar to onMount but different because uses useEffect vs useLayoutEffect useRef - ref.current will be undefined on first run set ref.current to true after running hook code onUnmountAFAIK there is no way to on unmount in a function component But you shouldn’t need to, if you use cleanup effects properly Updating StatePrefer updating in event handlers vs useEffectEvent handler is more synchronous/easier to reason about Divisions between components/how to divide up your components/hooksShould this influence how we divide up our components?Generally no, abstractions should, not mechanics or performance Tangent: best practices Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9811470
+ Fri, 31 Dec 2021 10:00:00 -0800
+
+ 4505
+
+ 1
+ 31
+ full
+ false
+
+ -
+
Why You Need To Check Software Licenses
+ Why You Need To Check Software Licenses
+ You probably know that software licenses exist, but do you know what implications they can have on your business or project? Did you know not paying attention to them can be extremely costly? In this episode we’ll talk about software licensing, how it can affect your business or project, how you can navigate it, and which license to choose for your project. LinksShow Notes
Intro Overview Consequences of using the wrong license What is software licensing?A legal contract between the party providing the software or source code and the end user Common typesFree Software (gives the recipient extensive rights to modify and redistribute)Copyleft / Free-Libre / FOSS (protective)GPL, AGPL Right to freely distribute and modify but derivative works must carry the same rights Opinion: Software end-user focused, attempts to protect end-user rights Permissive (can relicense, allows proprietization)Some BSDs, MIT, Apache, MPL Minimal restrictions, can be used, modified, redistributed Opinion: Software creator focused, attempts to make life easier on creator Public Domain & Equivalent (grants all rights)Very complicated, often depends on country of origin and use Proprietary (traditional copyright, no rights necessarily granted) License Compatibility React projects: make sure to include OSS licenses in builds/distributions Can you copy/paste code you find on stackoverflow, documentation, the internet? Trademarks Don’t add or modify licenses Distribution Analyzing Licenses for Inclusion in a Project Picking a Software License for a Project Attribution Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ You probably know that software licenses exist, but do you know what implications they can have on your business or project? Did you know not paying attention to them can be extremely costly? In this episode we’ll talk about software licensing, how it can affect your business or project, how you can navigate it, and which license to choose for your project. LinksShow Notes
Intro Overview Consequences of using the wrong license What is software licensing?A legal contract between the party providing the software or source code and the end user Common typesFree Software (gives the recipient extensive rights to modify and redistribute)Copyleft / Free-Libre / FOSS (protective)GPL, AGPL Right to freely distribute and modify but derivative works must carry the same rights Opinion: Software end-user focused, attempts to protect end-user rights Permissive (can relicense, allows proprietization)Some BSDs, MIT, Apache, MPL Minimal restrictions, can be used, modified, redistributed Opinion: Software creator focused, attempts to make life easier on creator Public Domain & Equivalent (grants all rights)Very complicated, often depends on country of origin and use Proprietary (traditional copyright, no rights necessarily granted) License Compatibility React projects: make sure to include OSS licenses in builds/distributions Can you copy/paste code you find on stackoverflow, documentation, the internet? Trademarks Don’t add or modify licenses Distribution Analyzing Licenses for Inclusion in a Project Picking a Software License for a Project Attribution Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9781457
+ Fri, 24 Dec 2021 10:00:00 -0800
+
+ 5350
+
+ 1
+ 30
+ full
+ false
+
+ -
+
Alternatives to the Software Interview / Getting a React Job
+ Alternatives to the Software Interview / Getting a React Job
+ Want to get a job as a React developer? What’s the best way to go about it? In this episode we discuss different paths to becoming a React developer and which one might be the best for you.Links Show Notes
Overview Thomas ExperienceCS degree, joke in a different way ran the gauntlet Austin Experience State of Software InterviewingWell known to be very broken Does not accurately gauge ability to do jobOne study found interviewers are primarily judging level of anxiety Obviously data-structures & algorithms are irrelevant to nearly all programming jobs (especially React)Blame Google One time Yelp was asking me about bits and bytes for a JS job Requires studying for weeks on stuff you don’t need to know even if you’re senior level Interviewing environment, like whiteboard, way different than real life Some people are great at this Why does this happen?Google High-risk for hiring company Very conservative decision making Many candidates, trying to filter without investing in more personnel Getting paid to interview How to gauge someone’s ability to do the job?Best way: see them do the job Contracting/ConsultingLower-risk for hiring company Generally leads to employment offers Much better gauge of how well you can actually do the job Generally doesn’t involve so much ds&a Either way, best thing to do is build Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Want to get a job as a React developer? What’s the best way to go about it? In this episode we discuss different paths to becoming a React developer and which one might be the best for you.Links Show Notes
Overview Thomas ExperienceCS degree, joke in a different way ran the gauntlet Austin Experience State of Software InterviewingWell known to be very broken Does not accurately gauge ability to do jobOne study found interviewers are primarily judging level of anxiety Obviously data-structures & algorithms are irrelevant to nearly all programming jobs (especially React)Blame Google One time Yelp was asking me about bits and bytes for a JS job Requires studying for weeks on stuff you don’t need to know even if you’re senior level Interviewing environment, like whiteboard, way different than real life Some people are great at this Why does this happen?Google High-risk for hiring company Very conservative decision making Many candidates, trying to filter without investing in more personnel Getting paid to interview How to gauge someone’s ability to do the job?Best way: see them do the job Contracting/ConsultingLower-risk for hiring company Generally leads to employment offers Much better gauge of how well you can actually do the job Generally doesn’t involve so much ds&a Either way, best thing to do is build Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9740045
+ Fri, 17 Dec 2021 10:00:00 -0800
+
+ 5893
+
+ 1
+ 29
+ full
+ false
+
+ -
+
What Do You Think of React? And other QA with Austin & Thomas
+ What Do You Think of React? And other QA with Austin & Thomas
+ Hot takes on React, async programming, and other topics in this special episode of the React Show where we join the hosts, Austin & Thomas, on a QA session.Episode page Show Notes Intro Announcements: Discord Overview What is your favorite program you’ve ever worked on or built?What makes it your favorite? What is your dream program to build? Have you ever considered a different career than programming?Have you ever thought about it after starting programming as a career? What do you think of React?Why React and not something else? If you could change anything about React, what would it be? What is your favorite aspect of programming? What is the most difficult part of programming for you? What programming languages do you know? How do you feel about web forms within React? Are you more interested in building apps or programming?Or something else related to programming? Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hot takes on React, async programming, and other topics in this special episode of the React Show where we join the hosts, Austin & Thomas, on a QA session.Episode page Show Notes Intro Announcements: Discord Overview What is your favorite program you’ve ever worked on or built?What makes it your favorite? What is your dream program to build? Have you ever considered a different career than programming?Have you ever thought about it after starting programming as a career? What do you think of React?Why React and not something else? If you could change anything about React, what would it be? What is your favorite aspect of programming? What is the most difficult part of programming for you? What programming languages do you know? How do you feel about web forms within React? Are you more interested in building apps or programming?Or something else related to programming? Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9698201
+ Fri, 10 Dec 2021 10:00:00 -0800
+
+ 6020
+
+ 1
+ 28
+ full
+ false
+
+ -
+
Refactoring Quickly, Safely, and Easily
+ Refactoring Quickly, Safely, and Easily
+ Refactoring can be dangerous, to your program and to your health. In this episode we discuss techniques to enable safe and healthy refactoring methods.Show Notes Story time(Thomas) I used to have delusions of grandeur about my refactoring ability Austin recent project Purpose: to make the code better The challenge, how to do it so that:You don’t break things unintentionally You don’t get mired in the details and unable to move forward It doesn’t take forever MethodCode is the way it is for a reason IncrementalKeep a working version Develop in parallel ContractsDon’t break contracts until you have a working replacement Contracts are:between input and output functions components interfaces libraries Bottom-upDon’t worry about code duplication until the end Avoid “second-system” effect Try to understand why the original system was created the way it was, don’t assume you know better, even if you do Story timeI’m working on a large refactoring project involving the inventory system No down-time, must be 100% accurate I’m building it:In parallel with the existing system until it proves to be a worthy replacement Incremental, developing and deploying many smaller pieces along the way NOT as one large project that gets deployed all at once Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Refactoring can be dangerous, to your program and to your health. In this episode we discuss techniques to enable safe and healthy refactoring methods.Show Notes Story time(Thomas) I used to have delusions of grandeur about my refactoring ability Austin recent project Purpose: to make the code better The challenge, how to do it so that:You don’t break things unintentionally You don’t get mired in the details and unable to move forward It doesn’t take forever MethodCode is the way it is for a reason IncrementalKeep a working version Develop in parallel ContractsDon’t break contracts until you have a working replacement Contracts are:between input and output functions components interfaces libraries Bottom-upDon’t worry about code duplication until the end Avoid “second-system” effect Try to understand why the original system was created the way it was, don’t assume you know better, even if you do Story timeI’m working on a large refactoring project involving the inventory system No down-time, must be 100% accurate I’m building it:In parallel with the existing system until it proves to be a worthy replacement Incremental, developing and deploying many smaller pieces along the way NOT as one large project that gets deployed all at once Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9656919
+ Fri, 03 Dec 2021 10:00:00 -0800
+
+ 2975
+
+ 1
+ 27
+ full
+ false
+
+ -
+
How to Diagnose React App Bottlenecks with the Profiler
+ How to Diagnose React App Bottlenecks with the Profiler
+ Have you ever wondered why your app is slow sometimes? Or why a specific action takes so long to fully run? Or maybe why it takes so long for your initial render? The React Profiler is a great tool for diagnosing these issues. In this episode we take a look at profilers in general and then dive deep into the React profiler and how you can use it to diagnose performance issues.Show Notes Intro 0:00 Small Talk 1:20 Announcements 4:20 Overview 6:09 What is a CPU profiler? 7:18 Tracing vs Sampling 9:07 How to enable the React Profiler 15:21 Profiler dev tool 18:30 Profiler Settings 34:05 What can you do with the results? 37:26 Summary 55:35 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever wondered why your app is slow sometimes? Or why a specific action takes so long to fully run? Or maybe why it takes so long for your initial render? The React Profiler is a great tool for diagnosing these issues. In this episode we take a look at profilers in general and then dive deep into the React profiler and how you can use it to diagnose performance issues.Show Notes Intro 0:00 Small Talk 1:20 Announcements 4:20 Overview 6:09 What is a CPU profiler? 7:18 Tracing vs Sampling 9:07 How to enable the React Profiler 15:21 Profiler dev tool 18:30 Profiler Settings 34:05 What can you do with the results? 37:26 Summary 55:35 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9608790
+ Fri, 26 Nov 2021 10:00:00 -0800
+
+ 3586
+
+ 1
+ 26
+ full
+ false
+
+ -
+
So, Where Do You Host Your React App?
+ So, Where Do You Host Your React App?
+ Hosting can get overwhelming fast, because it isn’t just hosting anymore. You want something that is simple, fast, scalable, and reliable but you also want to spend your time coding and not fiddling with build failures, right? In this episode we’re going to take a look at the factors involved in making hosting, devops, and CI/CD decisions and a method for developing the right solution for you.Show Notes Overview 10:16 Austin Experience: Hosting on Raspi Thomas Experience: Geocities, Linux, PaaS, AWS/GCP Factors: Team, Orchestration, etc 20:49 Method: start simple, build incremental 25:40 Recent Past Experiences: Heroku, Beanstalk, Vercel, more 36:05 Self Hosting/Hosting PaaS 42:28 Containerization 1:00:05 Automation: GitHub/GitLab/etc 1:10:08 Summary 1:23:08 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hosting can get overwhelming fast, because it isn’t just hosting anymore. You want something that is simple, fast, scalable, and reliable but you also want to spend your time coding and not fiddling with build failures, right? In this episode we’re going to take a look at the factors involved in making hosting, devops, and CI/CD decisions and a method for developing the right solution for you.Show Notes Overview 10:16 Austin Experience: Hosting on Raspi Thomas Experience: Geocities, Linux, PaaS, AWS/GCP Factors: Team, Orchestration, etc 20:49 Method: start simple, build incremental 25:40 Recent Past Experiences: Heroku, Beanstalk, Vercel, more 36:05 Self Hosting/Hosting PaaS 42:28 Containerization 1:00:05 Automation: GitHub/GitLab/etc 1:10:08 Summary 1:23:08 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9545960
+ Fri, 19 Nov 2021 10:00:00 -0800
+
+ 5463
+
+ 1
+ 25
+ full
+ false
+
+ -
+
Is Your React App Killing The Planet?
+ Is Your React App Killing The Planet?
+ Usually we are focused on adding new features, fixing bugs, and meeting deadlines, but what if the software we are building was also killing the planet? In this episode we’re going to take a look at the ecological impact of React applications, how to measure it, and how to reduce the impact on the planet that sustains us all. Episodes now posted with show notes and links on https://www.owlcreek.studio/podcast Show Notes:Performance related to ecological impact Discussion on why ecological impact is not a high priority 10:32 React takes a ton more resources than a good vanilla JS app 14:49 Optimize common tasks / main render path 22:02 Different than normal performance optimization 22:16 CPU wakes / sleep states 22:32 Package size / network transmission / write less code 27:08 Reduce the minimum hardware requirements 34:24 Carbon Neutral / Negative 43:32 Much, much, much better to just generate less pollution to begin with Forced upgrades 49:31 Right to repair 50:21 Long-running server tasks / Data processing / AI training 53:24 Tools 1:08:30 JS browser dev tools React Profiler powertop (linux only?) Simple watt meter Announcement: Podcast with notes on owlcreek.studio 1:14:25 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Usually we are focused on adding new features, fixing bugs, and meeting deadlines, but what if the software we are building was also killing the planet? In this episode we’re going to take a look at the ecological impact of React applications, how to measure it, and how to reduce the impact on the planet that sustains us all. Episodes now posted with show notes and links on https://www.owlcreek.studio/podcast Show Notes:Performance related to ecological impact Discussion on why ecological impact is not a high priority 10:32 React takes a ton more resources than a good vanilla JS app 14:49 Optimize common tasks / main render path 22:02 Different than normal performance optimization 22:16 CPU wakes / sleep states 22:32 Package size / network transmission / write less code 27:08 Reduce the minimum hardware requirements 34:24 Carbon Neutral / Negative 43:32 Much, much, much better to just generate less pollution to begin with Forced upgrades 49:31 Right to repair 50:21 Long-running server tasks / Data processing / AI training 53:24 Tools 1:08:30 JS browser dev tools React Profiler powertop (linux only?) Simple watt meter Announcement: Podcast with notes on owlcreek.studio 1:14:25 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9502941
+ Fri, 12 Nov 2021 10:00:00 -0800
+
+ 4741
+
+ 1
+ 24
+ full
+ false
+
+ -
+
Better Routing in React with NextJS
+ Better Routing in React with NextJS
+ Do you find React Router cumbersome or tedious to work with sometimes? Or are you just curious how routing could be done better? In this episode we take a look at how routing is done in NextJS. We discuss what it looks like and how to use it. And we also offer our opinions on the NextJS routing mechanism itself.Show Notes Intro Overview What is routing? What are routes?routing is choosing which component to render for a given path and in nextjs, or API routes relevant multi-page apps Before Nextjsvanilla react react router how to create routes With Nextjspages/routeName.js nesting Dynamic Routesblog using getServerSideProps to load slug [slug].js from sanity getServerSideProps Redirect example Opinions on: file based data-store / framework / NextJS Api Routes Summary Outro Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Do you find React Router cumbersome or tedious to work with sometimes? Or are you just curious how routing could be done better? In this episode we take a look at how routing is done in NextJS. We discuss what it looks like and how to use it. And we also offer our opinions on the NextJS routing mechanism itself.Show Notes Intro Overview What is routing? What are routes?routing is choosing which component to render for a given path and in nextjs, or API routes relevant multi-page apps Before Nextjsvanilla react react router how to create routes With Nextjspages/routeName.js nesting Dynamic Routesblog using getServerSideProps to load slug [slug].js from sanity getServerSideProps Redirect example Opinions on: file based data-store / framework / NextJS Api Routes Summary Outro Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9464470
+ Fri, 05 Nov 2021 10:00:00 -0700
+
+ 3725
+
+ 1
+ 23
+ full
+ false
+
+ -
+
Debug Smarter in your React Apps
+ Debug Smarter in your React Apps
+ It can be tempting to take the lazy approach to debugging and just start trying things, but I believe there is a much better way. In this episode we take a look at a method that works well for ensuring your debugging is productive, targeted, and successful.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ It can be tempting to take the lazy approach to debugging and just start trying things, but I believe there is a much better way. In this episode we take a look at a method that works well for ensuring your debugging is productive, targeted, and successful.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9451117
+ Fri, 29 Oct 2021 10:00:00 -0700
+
+ 3789
+
+ 1
+ 22
+ full
+ false
+
+ -
+
Your Boss Asks for an Estimate--What Do You Say?
+ Your Boss Asks for an Estimate--What Do You Say?
+ How long will that take? It’s the classic question from the boss or the client. How do you answer? Do you get stressed from trying to get things done within your answer? Or do you end up cutting corners? In this episode we’re going to discuss a method that I use to make estimates that has worked quite well and is designed to work with stakeholders to help them understand estimates and the effects of changes on estimates.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How long will that take? It’s the classic question from the boss or the client. How do you answer? Do you get stressed from trying to get things done within your answer? Or do you end up cutting corners? In this episode we’re going to discuss a method that I use to make estimates that has worked quite well and is designed to work with stakeholders to help them understand estimates and the effects of changes on estimates.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9402933
+ Fri, 22 Oct 2021 10:00:00 -0700
+
+ 6100
+
+ 1
+ 21
+ full
+ false
+
+ -
+
Discussing React Program Structure and Learning to Learn
+ Discussing React Program Structure and Learning to Learn
+ In this episode Austin and I discuss various aspects of React program structure, like component size and files. We also take a look at learning this material in general and how you can learn the best methods yourself.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In this episode Austin and I discuss various aspects of React program structure, like component size and files. We also take a look at learning this material in general and how you can learn the best methods yourself.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9311649
+ Fri, 15 Oct 2021 10:00:00 -0700
+
+ 2083
+
+ 1
+ 20
+ full
+ false
+
+ -
+
How software teams should be structured
+ How software teams should be structured
+ Do you ever feel like you’re not being heard? Or everyone on the team is just making the code worse? Does everything feel sloppy? Is there a lot of miscommunication? In this episode we’re going to look at why you might have answered yes to those questions and what a better way to organize your team might be.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Do you ever feel like you’re not being heard? Or everyone on the team is just making the code worse? Does everything feel sloppy? Is there a lot of miscommunication? In this episode we’re going to look at why you might have answered yes to those questions and what a better way to organize your team might be.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9310587
+ Fri, 08 Oct 2021 10:00:00 -0700
+
+ 6132
+
+ 1
+ 19
+ full
+ false
+
+ -
+
How does React Render?
+ How does React Render?
+ How does React actually render your components? When is it going to invoke your component’s render code and when is it not? How intelligent is the fabled React tree diffing algorithm? We’re going to take an in-depth look at how React renders and talk about the internal algorithms and how that can and should influence the way you write React code.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How does React actually render your components? When is it going to invoke your component’s render code and when is it not? How intelligent is the fabled React tree diffing algorithm? We’re going to take an in-depth look at how React renders and talk about the internal algorithms and how that can and should influence the way you write React code.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9277254
+ Fri, 01 Oct 2021 10:00:00 -0700
+
+ 5293
+
+ 1
+ 18
+ full
+ false
+
+ -
+
How to become a better programmer
+ How to become a better programmer
+ Ever feel like you aren’t as good as the programmer next to you? Or just curious and want to know how you can get better? And not just a little better, but to become really good at programming? In this episode we discuss some techniques that will make that happen for you based on our research and experience.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Ever feel like you aren’t as good as the programmer next to you? Or just curious and want to know how you can get better? And not just a little better, but to become really good at programming? In this episode we discuss some techniques that will make that happen for you based on our research and experience.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9221145
+ Fri, 24 Sep 2021 10:00:00 -0700
+
+ 3804
+
+ 1
+ 17
+ full
+ false
+
+ -
+
Building Flows, Not Apps
+ Building Flows, Not Apps
+ The User Journey. A system used to define the interaction from acquisition to retention a user has with your web application. Our entire programming paradigm is built around discovering this journey, and then building an app around it. What if we instead built flows, extending further beyond our isolated use case amongst a fragmented collection of tools? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ The User Journey. A system used to define the interaction from acquisition to retention a user has with your web application. Our entire programming paradigm is built around discovering this journey, and then building an app around it. What if we instead built flows, extending further beyond our isolated use case amongst a fragmented collection of tools? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9212081
+ Fri, 17 Sep 2021 10:00:00 -0700
+
+ 3510
+
+ 1
+ 16
+ full
+ false
+
+ -
+
Why Hooks Suck
+ Why Hooks Suck
+ Hooks are all the rage in React these days but they actually have a pretty bad API design that leads to bugs and frustration. In this episode we will take a look at the design, discuss what makes it bad, why it is that way, what the React team can do about it, and finally, what we as users of React can do about it in the meantime. So tune in and learn how to make hooks work better for you!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hooks are all the rage in React these days but they actually have a pretty bad API design that leads to bugs and frustration. In this episode we will take a look at the design, discuss what makes it bad, why it is that way, what the React team can do about it, and finally, what we as users of React can do about it in the meantime. So tune in and learn how to make hooks work better for you!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9142117
+ Fri, 10 Sep 2021 10:00:00 -0700
+
+ 4113
+
+ 1
+ 15
+ full
+ false
+
+ -
+
Less Code, Better Code and Your Best Friend: DSL
+ Less Code, Better Code and Your Best Friend: DSL
+ Want to take your programs to the next level in quality and longevity? In this episode we learn about and discuss Domain Specific Languages and how you can use them in your React applications to write less code and higher quality applications that can be worked on by large teams without development slowing.Support the show ]]>
+ Want to take your programs to the next level in quality and longevity? In this episode we learn about and discuss Domain Specific Languages and how you can use them in your React applications to write less code and higher quality applications that can be worked on by large teams without development slowing.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9134714
+ Fri, 03 Sep 2021 10:00:00 -0700
+ 4525
+
+ 1
+ 14
+ full
+ false
+
+ -
+
Best Component Library: Chakra UI?
+ Best Component Library: Chakra UI?
+ There are many React component toolkits you can choose from, but one of the best is Chakra UI. In the words of Chakra UI: if you want to create accessible react apps with speed, choose Chakra UI. Chakra UI is a simple, modular, accessible component library that gives you the building blocks you need to create your React Applications.Support the show ]]>
+ There are many React component toolkits you can choose from, but one of the best is Chakra UI. In the words of Chakra UI: if you want to create accessible react apps with speed, choose Chakra UI. Chakra UI is a simple, modular, accessible component library that gives you the building blocks you need to create your React Applications.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9085485
+ Fri, 27 Aug 2021 10:00:00 -0700
+
+ 3062
+
+ 1
+ 13
+ full
+ false
+
+ -
+
Don't Get Blocked: A Better Way To Program
+ Don't Get Blocked: A Better Way To Program
+ Ever gotten a huge mental block when programming and can't figure out how to move forward? Or maybe you planned everything out nicely but it turned in to a big mess? There is a better way to program that helps mitigate these issues: bottom-up programming. In this episode we talk about what bottom-up programming is, how to do it, and what it can do to make you a better and happier programmer.Support the show ]]>
+ Ever gotten a huge mental block when programming and can't figure out how to move forward? Or maybe you planned everything out nicely but it turned in to a big mess? There is a better way to program that helps mitigate these issues: bottom-up programming. In this episode we talk about what bottom-up programming is, how to do it, and what it can do to make you a better and happier programmer.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9031635
+ Fri, 20 Aug 2021 10:00:00 -0700
+ 3317
+
+ 1
+ 12
+ full
+ false
+
+ -
+
From Dream to React App Part One: Developing a Brand Identity
+ From Dream to React App Part One: Developing a Brand Identity
+ This is the start of our series on building a new React App! But we’re not starting with just the technical nitty-gritty, we’re going to talk about the whole process of building a React based product, starting with branding. We have developed a process that helps us and our clients quickly understand, define, and develop a brand identity. In this episode we’re going to discuss the process where you too can get started with branding the right way.Support the show ]]>
+ This is the start of our series on building a new React App! But we’re not starting with just the technical nitty-gritty, we’re going to talk about the whole process of building a React based product, starting with branding. We have developed a process that helps us and our clients quickly understand, define, and develop a brand identity. In this episode we’re going to discuss the process where you too can get started with branding the right way.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8956088
+ Fri, 13 Aug 2021 10:00:00 -0700
+ 2799
+
+ 1
+ 11
+ full
+ false
+
+ -
+
Ethical Dilemma
+ Ethical Dilemma
+ As programmers, what is our role in preventing unethical software from being developed? In this episode we discuss why it’s so important for programmers, especially, to formulate an ethical framework. Then we talk about how the framework can be utilized to make decisions about new features or products.Support the show ]]>
+ As programmers, what is our role in preventing unethical software from being developed? In this episode we discuss why it’s so important for programmers, especially, to formulate an ethical framework. Then we talk about how the framework can be utilized to make decisions about new features or products.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8955960
+ Fri, 06 Aug 2021 10:00:00 -0700
+ 2977
+
+ 1
+ 10
+ full
+ false
+
+ -
+
Don’t DRY & You’re Doing Code Reviews Wrong
+ Don’t DRY & You’re Doing Code Reviews Wrong
+ What’s the best way to write a React app, or a program in general? Are you trying to get it perfect the first time, following all the best practices? How should you do a code review? Write a comment every time someone has some code duplication? In this episode we’ll discuss why standard industry answers to those questions will actually lead to worse programs and we’ll talk about the right mentality for writing code and doing code reviews.Support the show ]]>
+ What’s the best way to write a React app, or a program in general? Are you trying to get it perfect the first time, following all the best practices? How should you do a code review? Write a comment every time someone has some code duplication? In this episode we’ll discuss why standard industry answers to those questions will actually lead to worse programs and we’ll talk about the right mentality for writing code and doing code reviews.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8906045
+ Fri, 30 Jul 2021 10:00:00 -0700
+ 2302
+
+ 1
+ 9
+ full
+ false
+
+ -
+
Next.js or create-react-app
+ Next.js or create-react-app
+ Just getting started with React? Or maybe you have built React apps for years but want to learn a better way of creating React projects? Next.js is a React based framework designed to improve the developer and user experience. In this episode we discuss Next.js, how it compares to Create-React-App, and when you might benefit from using Next.js instead.Support the show ]]>
+ Just getting started with React? Or maybe you have built React apps for years but want to learn a better way of creating React projects? Next.js is a React based framework designed to improve the developer and user experience. In this episode we discuss Next.js, how it compares to Create-React-App, and when you might benefit from using Next.js instead.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8870396
+ Fri, 23 Jul 2021 10:00:00 -0700
+ 2478
+
+ 1
+ 8
+ full
+ false
+
+ -
+
You’re using useEffect Wrong
+ You’re using useEffect Wrong
+ Yes, you are probably using useEffect wrong. useEffect is a powerful tool for hook based React components but it comes with many potential pitfalls and one widely abused feature that can lead to difficult to locate bugs. Tune in to this episode to learn how to use useEffect correctly.Support the show ]]>
+ Yes, you are probably using useEffect wrong. useEffect is a powerful tool for hook based React components but it comes with many potential pitfalls and one widely abused feature that can lead to difficult to locate bugs. Tune in to this episode to learn how to use useEffect correctly.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8870372
+ Fri, 16 Jul 2021 10:00:00 -0700
+ 2464
+
+ 1
+ 7
+ full
+ false
+
+ -
+
Driving React Forward
+ Driving React Forward
+ What will it take to drive React and the surrounding JavaScript ecosystem forward in a dramatic way? How much better can we make it in the next 20 years? In this episode we discuss major and fundamental improvements that should be made.Support the show ]]>
+ What will it take to drive React and the surrounding JavaScript ecosystem forward in a dramatic way? How much better can we make it in the next 20 years? In this episode we discuss major and fundamental improvements that should be made.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8838108
+ Fri, 09 Jul 2021 10:00:00 -0700
+ 3882
+
+ 1
+ 6
+ full
+ false
+
+ -
+
React 18: FINALLY concurrent execution!
+ React 18: FINALLY concurrent execution!
+ In this episode we talk about the upcoming React 18 release. This is a very exciting release, especially from a performance perspective, as it finally brings concurrent and interruptible rendering along with other exciting changes!Support the show ]]>
+ In this episode we talk about the upcoming React 18 release. This is a very exciting release, especially from a performance perspective, as it finally brings concurrent and interruptible rendering along with other exciting changes!Support the show ]]>
+ Thomas
+
+ Buzzsprout-8795702
+ Thu, 01 Jul 2021 08:00:00 -0700
+ 2409
+
+ 1
+ 5
+ full
+ false
+
+ -
+
Finding and Fixing React Bottlenecks
+ Finding and Fixing React Bottlenecks
+ Do you have a bottleneck in your React application? If so, we're going to discuss the best ways to find and solve it based on the principles I've outlined in my follow-up book to "Foundations of High Performance React" called "High Performance React." We're going to use an example bottleneck I solved recently for a client that was making their application unusable in some critical circumstances.Support the show ]]>
+ Do you have a bottleneck in your React application? If so, we're going to discuss the best ways to find and solve it based on the principles I've outlined in my follow-up book to "Foundations of High Performance React" called "High Performance React." We're going to use an example bottleneck I solved recently for a client that was making their application unusable in some critical circumstances.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8745645
+ Tue, 22 Jun 2021 09:00:00 -0700
+ 2228
+
+ 1
+ 4
+ full
+ false
+
+ -
+
High Quality at High Speed (bug free code?) - The React Show #3
+ High Quality at High Speed (bug free code?) - The React Show #3
+ How do you both write code quickly but also minimize the number of times your weekend will be ruined by nasty bug reports? In this episode we're going to talk about how to write and ship React applications quickly while also minimizing the number and extent of the bugs that make it into production!Support the show ]]>
+ How do you both write code quickly but also minimize the number of times your weekend will be ruined by nasty bug reports? In this episode we're going to talk about how to write and ship React applications quickly while also minimizing the number and extent of the bugs that make it into production!Support the show ]]>
+ Thomas
+
+ Buzzsprout-8546247
+ Tue, 18 May 2021 18:00:00 -0700
+ 2291
+
+ 1
+ 3
+ full
+ false
+
+ -
+
Debugging React Apps - The React Show #2
+ Debugging React Apps - The React Show #2
+ Debugging can be extremely frustrating and time consuming, but it doesn't have to be. In this Q & A session we will talk about techniques to more efficiently debug React applications and how to do it without wanting to tear your hair out.Support the show ]]>
+ Debugging can be extremely frustrating and time consuming, but it doesn't have to be. In this Q & A session we will talk about techniques to more efficiently debug React applications and how to do it without wanting to tear your hair out.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8478262
+ Fri, 07 May 2021 08:00:00 -0700
+ 2260
+
+ 1
+ 2
+ full
+ false
+
+ -
+
No MUI?? - The React Show #1
+ No MUI?? - The React Show #1
+ Should you use Material UI for your React component library or are there better alternatives? Join us as we discuss React component libraries for our first episode.Support the show ]]>
+ Should you use Material UI for your React component library or are there better alternatives? Join us as we discuss React component libraries for our first episode.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8391451
+ Fri, 23 Apr 2021 09:00:00 -0700
+ 1743
+
+ 1
+ 1
+ full
+ false
+
+
+
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..abe04df
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/next.config.js b/next.config.js
new file mode 100644
index 0000000..9181109
--- /dev/null
+++ b/next.config.js
@@ -0,0 +1,9 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ reactStrictMode: true,
+ experimental: {
+ appDir: true,
+ },
+}
+
+module.exports = nextConfig
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..033db51
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,9714 @@
+{
+ "name": "thereactshow",
+ "version": "0.1.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "thereactshow",
+ "version": "0.1.0",
+ "dependencies": {
+ "@extractus/feed-extractor": "^6.2.1",
+ "@headlessui/react": "^1.7.7",
+ "@heroicons/react": "^2.0.13",
+ "@next/font": "13.1.4",
+ "@tailwindcss/forms": "^0.5.3",
+ "@tailwindcss/line-clamp": "^0.4.2",
+ "@tailwindcss/typography": "^0.5.7",
+ "clsx": "^1.2.1",
+ "eslint": "8.32.0",
+ "eslint-config-next": "13.1.4",
+ "focus-visible": "^5.2.0",
+ "i": "^0.3.7",
+ "next": "13.1.4",
+ "nodemailer": "^6.9.1",
+ "postcss-focus-visible": "^6.0.4",
+ "react": "18.2.0",
+ "react-aria": "^3.19.0",
+ "react-dom": "18.2.0",
+ "react-stately": "^3.17.0",
+ "sanitize-html": "^2.8.1",
+ "srtparsejs": "^1.0.8"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.13",
+ "postcss": "^8.4.21",
+ "tailwindcss": "^3.2.4"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.20.13",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
+ "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@extractus/feed-extractor": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@extractus/feed-extractor/-/feed-extractor-6.2.1.tgz",
+ "integrity": "sha512-zCIcvp4CDhgqdX17MJenBCXXm4NMVFJyKmvVMzl3LwOyFUEmpO4WGjtzXhxw1XN1Mjj5gvPclJNPgRBGlom2zA==",
+ "dependencies": {
+ "bellajs": "^11.1.1",
+ "cross-fetch": "^3.1.5",
+ "fast-xml-parser": "^4.0.13",
+ "html-entities": "^2.3.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.14.3.tgz",
+ "integrity": "sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg==",
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.2.32",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.7.tgz",
+ "integrity": "sha512-hPeM5LXUUjtCKPybWOUAWpv8lpja8Xz+uKprFPJcg5F2Rd+/bf1E0UUsLRpaAgOReAf5HMRtoIgv/UcyPICrTQ==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.1.14",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.14.tgz",
+ "integrity": "sha512-0KqeVOb72losEhUW+59vhZGGd14s1f35uThfEMVKZHKLEObvJdFTiI3ZQwvTMUCzLEMxnS6mtnYPmG4mTvwd3Q==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "@formatjs/icu-skeleton-parser": "1.3.18",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.3.18",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz",
+ "integrity": "sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.2.32",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz",
+ "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@headlessui/react": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.7.tgz",
+ "integrity": "sha512-BqDOd/tB9u2tA0T3Z0fn18ktw+KbVwMnkxxsGPIH2hzssrQhKB5n/6StZOyvLYP/FsYtvuXfi9I0YowKPv2c1w==",
+ "dependencies": {
+ "client-only": "^0.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16 || ^17 || ^18",
+ "react-dom": "^16 || ^17 || ^18"
+ }
+ },
+ "node_modules/@heroicons/react": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.13.tgz",
+ "integrity": "sha512-iSN5XwmagrnirWlYEWNPdCDj9aRYVD/lnK3JlsC9/+fqGF80k8C7rl+1HCvBX0dBoagKqOFBs6fMhJJ1hOg1EQ==",
+ "peerDependencies": {
+ "react": ">= 16"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
+ },
+ "node_modules/@internationalized/date": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.0.2.tgz",
+ "integrity": "sha512-9V1IxesP6ASZj/hYyOXOC4yPJvidbbStyWQKLCQSqhhKACMOXoo+BddXZJy47ju9mqOMpWdrJ2rTx4yTxK9oag==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "node_modules/@internationalized/message": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.0.10.tgz",
+ "integrity": "sha512-vfLqEop/NH68IgqMcXJNSDqZ5Leg3EEgCxhuuSefU7vvdbptD3pwpUWXaK9igYPa+aZfUU0eqv86yqm76obtsw==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14",
+ "intl-messageformat": "^10.1.0"
+ }
+ },
+ "node_modules/@internationalized/number": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.1.2.tgz",
+ "integrity": "sha512-Mbys8SGsn0ApXz3hJLNU+d95B8luoUbwnmCpBwl7d63UmYAlcT6TRDyvaS/vwdbElXLcsQJjQCu0gox2cv/Tig==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "node_modules/@internationalized/string": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.0.1.tgz",
+ "integrity": "sha512-2+rHfXZ56YgsC6i3fKvBue/xatnSm0Jv+C/x4+n3wg5xAcLh4LPW3GvZ/9ifxNAz9+IWplgZHa1FRIbSuUvNWg==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.4.tgz",
+ "integrity": "sha512-x7ydhMpi9/xX7yVK+Fw33OuwwQWVZUFRxenK3z89fmPzQZyUk35Ynb+b7JkrhfRhDIFFvvqpzVSXeseSlBAw7A=="
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.4.tgz",
+ "integrity": "sha512-a/T30+7Q1scom5t3L+wEBkYzCa+bhT/3DTxzxlNy4Xckw2InzcckQGeIi/larDgh5r2fSSJswhYAZEcKtuJiig==",
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/@next/font": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.4.tgz",
+ "integrity": "sha512-NfqQPAIFJhssdaZEsP0MADZKN+tc040jOkNKVlDZHtVjJWBJSgbe8UHg3w0S6YuQr7PHc0ACbFeVCBQeG4MEvg=="
+ },
+ "node_modules/@next/swc-android-arm-eabi": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.4.tgz",
+ "integrity": "sha512-5PAchzFst3In6Ml+9APvBj89H29lcPXcUqEYBVv09fWK/V4IuViKc2qOqM9pyPyw7KsqaZPmuqaG595E6jdZLA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-android-arm64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.4.tgz",
+ "integrity": "sha512-LCLjjRhsQ5fR9ExzR2fqxuyJe/D4Ct/YkdonVfJfqOfkEpFwUTQDOVo5GrQec4LZDk3zY+o6vZYjXbB0nD9VLA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.4.tgz",
+ "integrity": "sha512-LSc/tF1FQ1y1SwKiCdGg8IIl7+Csk6nuLcLIyQXs24UNYjXg5+7vUQXqE8y66v/Dq8qFDC9rM61QhpM9ZDftbg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.4.tgz",
+ "integrity": "sha512-WoApDo8xfafrNc9+Mz5MwGFKUwbDHsGqLleTGZ8upegwVqDyHsYzqJQudf+loqhV58oGTOqP1eWaHn2J7dijXA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-freebsd-x64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.4.tgz",
+ "integrity": "sha512-fqNyeT8G4guN8AHPIoBRhGY2GJg89FyWpuwX4o0Y3vUy/84IGZpNst3paCzaYkQSqQE/AuCpkB7hKxkN7ittXw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm-gnueabihf": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.4.tgz",
+ "integrity": "sha512-MEfm8OC1YR9/tYHUzlQsxcSmiuf8XdO7bqh5VtG4pilScjc5I5t+tQgIDgoDGePfh5W99W23hb3s6oCFrt99rw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.4.tgz",
+ "integrity": "sha512-2wgth/KsuODzW/E7jsRoWdhKmE5oZzXcBPvf9RW+ZpBNvYQkEDlzfLA7n8DtxTU8I4oMas0mdEPdCWXrSNnVZw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.4.tgz",
+ "integrity": "sha512-GdWhCRljsT7rNEElEsdu4RRppd+XaQOX1IJslsh/+HU6LsJGUE8tXpa68yJjCsHZHifkbdZNeCr5SYdsN6CbAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.4.tgz",
+ "integrity": "sha512-Rsk/ojwYqMskN2eo5hUSVe7UuMV/aSjmrmJ0BCFGFPfBY9sPgmYj/oXlDDN0y5lJD9acPuiBjknLWgnOnx5JIA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.4.tgz",
+ "integrity": "sha512-gKSVPozedA2gpA+vggYnAqpDuzWFed2oxFeXxHw0aW2ALdAZswAinn1ZwXEQ5fHnVguxjZhH0+2nBxpMdF8p5Q==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.4.tgz",
+ "integrity": "sha512-+kAXIIVb7Q4LCKmi7dn9qVlG1XUf3Chgj5Rwl0rAP4WBV2TnJIgsOEC24G1Mm3jjif+qXm7SJS9YZ9Yg3Y8sSQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.4.tgz",
+ "integrity": "sha512-EsfzAFBVaw1zg1FzlLMgRaTX/DKY+EnAvJ6mCIJMGeSOPIj4Oy6xF2yEQ3VaRkwFpAafHJH6JNB/CGrdKFCMXw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.4.tgz",
+ "integrity": "sha512-bygNjmnq+F9NqJXh7OfhJgqu6LGU29GNKQYVyZkxY/h5K0WWUvAE/VL+TdyMwbvQr9KByx5XLwORwetLxXCo4g==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgr/utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "is-glob": "^4.0.3",
+ "open": "^8.4.0",
+ "picocolors": "^1.0.0",
+ "tiny-glob": "^0.2.9",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@react-aria/breadcrumbs": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.4.1.tgz",
+ "integrity": "sha512-3dotDXcXX5IbES9tS9gK5m/2inlZH1ZESi61aBUoD/kQbUcf4CJ3TniVqzBKjNqQN8yIBH/LjwkAoGmuvtPVRQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/link": "^3.3.6",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/breadcrumbs": "^3.4.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/button": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.6.4.tgz",
+ "integrity": "sha512-OEs5fNGiuZzyC5y0cNl96+6pRf/3ZhI1i2m6LlRYhJLsWXPhHt21UHEnlSchE/XGtgKojJEeTsXottoBFTBi5w==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-RIOwGYIwMizN/MAF5RkTb2ic9OJ0rJyR2VqqgtV3c7ADHNejzyLYMQmaalEFDUHS+AbvaXM1LCXdFBhSB8nf5w==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/calendar": "^3.0.5",
+ "@react-types/button": "^3.7.0",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/checkbox": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.7.1.tgz",
+ "integrity": "sha512-3KRg/KrTRwQdw5Yg7gpbIKWWVt57PbGSEXAS/diQvRf9pTXbOuChTES8uVlcwF8q+3mKXc4ppzE3gsNQ5jOMqg==",
+ "dependencies": {
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/toggle": "^3.4.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/checkbox": "^3.3.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/combobox": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.4.4.tgz",
+ "integrity": "sha512-aviSDt4JkYZC1Ww83gvrNB4cHetXu73n5NuEfMNBC3B6fiL0MP5Av5+lMgf8FzpQks39QkZNxBtQ/h4I3D7SBA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/combobox": "^3.3.1",
+ "@react-stately/layout": "^3.10.0",
+ "@react-types/button": "^3.7.0",
+ "@react-types/combobox": "^3.5.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/datepicker": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.2.1.tgz",
+ "integrity": "sha512-NnW9VgX/YjxkgjcIaxmOhzpfiQmTQpCXjpPJ1+3nPhKzPKpcjtPxIYTDMkm/R+6i5FRukEGtjhg3QY9amLK6hQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/number": "^3.1.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/spinbutton": "^3.2.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/datepicker": "^3.2.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/dialog": "^3.4.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/dialog": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.4.2.tgz",
+ "integrity": "sha512-Z6YZYXtwwmC5ZHjJldF3zuTjHnli7fXe/sM1ts3bw6jvU2L0kzhV/DRbPXYg8h695Oj9t+OIi4qxjEyKVH7SEA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-types/dialog": "^3.4.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/dnd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.0.1.tgz",
+ "integrity": "sha512-z/T59Jc+6mj3OMcLjfA6MYd0zD6K3DYw+kB2CZ0EPte7BRN8wtU4+q/bx1iX+If97X6bTcHjMGX6nrQJ5vX/fw==",
+ "dependencies": {
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/dnd": "^3.0.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/focus": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.10.1.tgz",
+ "integrity": "sha512-HjgFUC1CznuYC7CxtBIFML6bOBxW3M3cSNtvmXU9QWlrPSwwOLkXCnfY6+UkjCc5huP4v7co4PoRDX8Vbe/cVQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/grid": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.5.2.tgz",
+ "integrity": "sha512-+cDtTvTT0YF4jgy1pv0omcweub6z1N+GdkpHC6L6/jtH2gFRVns3IC6pf5ihLDIpLloylthaMMR8C3lus7035g==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/grid": "^3.4.2",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/gridlist": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.1.2.tgz",
+ "integrity": "sha512-3HI/e8HzyBRWdEbDH+3Hvj9U5fD/1TYaqA0f4XnBdSEDd7LHPOzZyNzbZMdlMmaq2W0Dmm1YRCMELacFVUehUA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/grid": "^3.5.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/list": "^3.6.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/i18n": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.6.3.tgz",
+ "integrity": "sha512-cDWl8FXJIXsw/raWcThywBueCJ5ncoogq81wYVS6hfZVmSyncONIB3bwUL12cojmjX1VEP31sN0ujT/83QP95Q==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/message": "^3.0.10",
+ "@internationalized/number": "^3.1.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/interactions": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.13.1.tgz",
+ "integrity": "sha512-WCvfZOi1hhussVTHxVq76OR48ry13Zvp9U5hmuQufyxIUlf4hOvDk4/cbK4o4JiCs8X7C7SRzcwFM34M4NHzmg==",
+ "dependencies": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/label": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.4.4.tgz",
+ "integrity": "sha512-1fuYf2UctNhBy31uYN7OhdcrwzlB5GS0+C49gDkwWzccB7yr+CoOJ5UQUoVB7WBmzrc+CuzwWxSDd4OupSYIZQ==",
+ "dependencies": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/label": "^3.7.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/link": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.3.6.tgz",
+ "integrity": "sha512-UjbdBJ8EB+jCC3mPZD6cYykHqZKTy6/VvI5RGJoKtF8cg9639tRy6g102pd4ncFTdD4DfU5PPWtthC24nQRCyQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/link": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/listbox": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.7.2.tgz",
+ "integrity": "sha512-e3O/u2T3TccinmfS/UvHywxLbASmh28U4020WTpZnIrsaoriVCkGZvG1AYNNPDIESz2WO0oRF6vDrmGunglJ2A==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-types/listbox": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/live-announcer": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.1.2.tgz",
+ "integrity": "sha512-BqtVLPWU10sZssoOJF1lJiRvZe5zqZ5BM39PsFyO7dWhVkR/9O9bZviqvKXnC1oXCnypfa+85gUshbK9unFcWA==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "node_modules/@react-aria/menu": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.7.1.tgz",
+ "integrity": "sha512-5KIUTs3xYSmERB8qzofFghznMVLcG3RWDnJcQjpRtrrYjm6Oc39TJeodDH874fiEr6o3i5WwMrEYVp7NSxz/TQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/tree": "^3.4.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/menu": "^3.7.3",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/meter": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.3.4.tgz",
+ "integrity": "sha512-RdVd5vlb6//HI8G1hhH4G+E0Y387GYFKjmewSUKK0Lzp9PFLili26s+xLvgigUX9ald7HiPmfPdAlXzotvo54Q==",
+ "dependencies": {
+ "@react-aria/progress": "^3.3.4",
+ "@react-types/meter": "^3.2.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/numberfield": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.3.4.tgz",
+ "integrity": "sha512-yoYeYaEW5v84Ff0x+oSN0h3uzqrSOBEgjtv8ZMaFVsZfm9yMjsVLu+QWGBYCEOPcASMkNZpNR3o91nBPK3XTDw==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/spinbutton": "^3.2.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/numberfield": "^3.3.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/numberfield": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/overlays": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.12.1.tgz",
+ "integrity": "sha512-OSgSopk2uQI5unvC3+fUyngbRFFe4GnF0iopCmrsI7qSQEusJUd4M2SuPVXUBBwWFt5TsiH7TnxmIPWeh5LSoA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/progress": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.3.4.tgz",
+ "integrity": "sha512-MVlWdH7L2e0u1SvkVk+C6/onS8opex9rIKUKHM08s++y80Xe3BIAh8jd5tgdlutDtcZ1kKgfb4bet9dvjymo4A==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/progress": "^3.2.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/radio": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.4.2.tgz",
+ "integrity": "sha512-PpEsQjwkYOkSfKfnqXpBzf0FM/V2GSC0g/NG2ZAI5atDIACeic+kHCcs8fm2QzXtUDaRltNurvYdDJ+XzZ8g1g==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/radio": "^3.6.2",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/searchfield": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.4.4.tgz",
+ "integrity": "sha512-Z3nZI2FXrWLPNUeJ3QV2ruTKBR9eHhPoHi+Iiuq4n+e02ib5s0Jlbam29FFiOxmf6vUMhScNcEYP9p2BNANmQA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/searchfield": "^3.3.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/searchfield": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/select": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.8.4.tgz",
+ "integrity": "sha512-d2JOe11lUoGLvsE32bZRMq32SzXuyLNczyTOLrWM0e9fsOr49A8p6L6bFm3symU/KpwjjnO+pf5IkvgEq+GoJg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/select": "^3.3.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/select": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/selection": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.12.1.tgz",
+ "integrity": "sha512-UX1vSY+iUdHe0itFZIOizX1BCI8SAeFnEh5VIQ1bYRt93+kAxeC914fsxFPPgrodJyqWRCX1dblPyRUIWAzQiw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/separator": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.2.6.tgz",
+ "integrity": "sha512-QhYqoLfu+4T3ASCs5Q8ZWfBbRKBUmqquVdREWvHyvVyOBk9kRN9nxsoIxlkss1RJlJJx59AYF9T9CwgL80/bvw==",
+ "dependencies": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/slider": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.2.4.tgz",
+ "integrity": "sha512-+BDPFaCgm0gtGewO33ZDNZz1b3Fc1p5Y/HSuwCcru+jHetODJXy23IIVpWsDri1vG3fHECRnWcDZAjLZgkVnAw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/radio": "^3.6.2",
+ "@react-stately/slider": "^3.2.4",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/slider": "^3.3.1",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/spinbutton": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.2.1.tgz",
+ "integrity": "sha512-y9QZ0VzWL7qzbWSPOCsAdvZhVlQrnHLRGc8bkRa2jmWrnCqS0iua/TRuLGgazIf2Rb7GmdbKBJJuPSScytVDUw==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/ssr": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.4.1.tgz",
+ "integrity": "sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/switch": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.3.1.tgz",
+ "integrity": "sha512-o9MvXiSK9c7rUZjA6oQ0PNlVCnHEctue6v6W8Vn4HNbQMfhJiWqiSSff4RFcgRgs8WsPsEqbT+vHi2kXykQzdA==",
+ "dependencies": {
+ "@react-aria/toggle": "^3.4.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/switch": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/table": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.7.0.tgz",
+ "integrity": "sha512-1YqOeb8r8pxIYyfa5qNdCoM3fNQELM4d+9DanoNJhgnehoq9QDI9A1pGC2pvK2PN2y9IuTJM+U/ITjSpPBoGjQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/grid": "^3.5.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/tabs": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.3.4.tgz",
+ "integrity": "sha512-SqlgfPvpRHlWelFk/lF9Ziu/8881NVErhKcpyyi+A9jASv5tvILWiwK8na82oI22UXXzyp0Y1EojLB25HnCB+w==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/tabs": "^3.2.4",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/tabs": "^3.1.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/textfield": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.8.1.tgz",
+ "integrity": "sha512-jgun/B9ecuRCfBSJLX2xDuNwfuj1lL0oibMWoSv6Y++W+CSS8a7LjR1f9Kll5TDVkQiRRUm9qHwI0og9xTJrNw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/toggle": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.4.2.tgz",
+ "integrity": "sha512-xokCGf0fn96mOMqQku5QW672iQoMsN9RMpFbKvvgg2seceh8ifblyAXElWf/6YmluOZSgUSZljDkFrbMMYlzVA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/switch": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/tooltip": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.3.4.tgz",
+ "integrity": "sha512-KPDkDu7fquuUOOnNh9S7KfhPMwB1w9K+yLIFrYaj4iYSOLk/HH5TDkyiUQ7j5+B963D1fWlQjYFEGQ9o2KwO/Q==",
+ "dependencies": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/tooltip": "^3.2.4",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/tooltip": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/utils": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.14.2.tgz",
+ "integrity": "sha512-3nr5gsAf/J/W+6Tu4NF3Q7m+1mXjfpXESh7TPa6UR6v3tVDTsJVMrITg2BkHN1jM8xELcl2ZxyUffOWqOXzWuA==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.4.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/visually-hidden": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.6.1.tgz",
+ "integrity": "sha512-7rUbiaIiR1nok9HAHPn/WcyQlvuldUqxnvh81V4dlI3NtXOgMw7/QaNc5Xo5FFWlsSVpbyK3UVJgzIui0Ns0Xg==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-vu5hKsiA8edqNtsqBTGi8QR38qZ+uHDjuq3vp2m0f6TZSnp0kg8fkPNHEOuBTQ8ZXFFbGUZKhL/1B+ZWwLHwMQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/checkbox": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.3.2.tgz",
+ "integrity": "sha512-eU3zvWgQrcqS8UK8ZVkb3fMP816PeuN9N0/dOJKuOXXhkoLPuxtuja1oEqKU3sFMa5+bx3czZhhNIRpr60NAdw==",
+ "dependencies": {
+ "@react-stately/toggle": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/collections": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.5.1.tgz",
+ "integrity": "sha512-egzVrZC5eFc5RJBpqUkzxd2aJOHZ2T1o7horEi8tAWZkg4YI+AmKrqela4ijVrrB9l1GO9z06qPT1UoPkFrC1w==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/combobox": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.3.1.tgz",
+ "integrity": "sha512-DgYn0MyfbDySf54o7ofXRd29TWznqtRRRbMG8TWgi/RaB0piDckT/TYWWSYOH3iMgnOEhReJhUUdMiQG4QLpIg==",
+ "dependencies": {
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/select": "^3.3.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/combobox": "^3.5.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/data": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.8.1.tgz",
+ "integrity": "sha512-YSc45qfmt8uhg9KTGGDQ/xbAPPP6ty5itzWoWORYLEsorBNUj7mLF+q126nYcYX4B5Xf84w8EexqP8Y8nh2Gdg==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/datepicker": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.2.1.tgz",
+ "integrity": "sha512-nd6thX2Z+rOLDHduB3EgMKA0n5U83lrwn3IUfjRGrcE21zFaFmhTPsHyvol5jHy3eSyjWSN9kGpKFzOxES+uoA==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/dnd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.0.1.tgz",
+ "integrity": "sha512-pwtyY/TR6Rdk33lFdF6dztQTV9gPujFmTqJG31NSSs6ei1FfUW9ZMq+311Zb8OhZ0TFiwZqAutVmmaaUrtl5+A==",
+ "dependencies": {
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/grid": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.4.2.tgz",
+ "integrity": "sha512-NeIUykQeA7Hen+dV4771ARW5SRrHYNn5VTOsQwn3KBUd2Z2gZ01OwUl3gETl5u0e3/tzMUdJ1LUoSPhDMwcmKw==",
+ "dependencies": {
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/layout": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.10.0.tgz",
+ "integrity": "sha512-ThFgivQSD5ksLMX7tbu0HqIxbxac/E8a/0vA21wB9QF9IQnUKO796QAQqwfA5rwPvTT41LL2Xn00GkrwQ9g/zg==",
+ "dependencies": {
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/list": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.6.1.tgz",
+ "integrity": "sha512-+/fVkK3UO+N2NoUGpe57k9gcnfIsyEgWP8SD6CXZUkJho7BTp6mwrH0Wm8tcOclT3uBk+fZaQrk8mR3uWsPZGw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/menu": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.4.4.tgz",
+ "integrity": "sha512-WKak1NSV9yDY0tDB4mzsbj0FboTtR06gekio0VmKb1+FmnrC07mef8eGKUn974F0WhTNUy5A1iI5eM0W2YNynA==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/menu": "^3.7.3",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/numberfield": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.3.1.tgz",
+ "integrity": "sha512-GOu6wE2L2eal4AOL+rJQ4wQnFRgRkwiS9xdAFPu9B4qfP0DVfEIUC3XV4jws9nBhANxEf5LyilUv400nG881wg==",
+ "dependencies": {
+ "@internationalized/number": "^3.1.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/numberfield": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/overlays": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.4.4.tgz",
+ "integrity": "sha512-IIlx+VXtXS4snDXrocUOls8QZ5XBQ4SNonaz1ox8/5W7Nsvq4VtdKsIaXsUP4agOudswaimlpj3pTDO/KuF5tQ==",
+ "dependencies": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/overlays": "^3.6.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/radio": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.6.2.tgz",
+ "integrity": "sha512-qjbebR0YSkdEocLsPSzNnCsUYllWY938/5Z8mETxk4+74PJLxC3z0qjqVRq+aDO8hOgIfqSgrRRp3cJz9vIsBg==",
+ "dependencies": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/searchfield": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.3.4.tgz",
+ "integrity": "sha512-H/1evv7lsJl6PlD7/Sv7VgbCe0Yd2E2eKFihD6/tXPWO6L/ngYp5siqqhdwazjWTK2Hgw4TL0eviHGOGXKItzQ==",
+ "dependencies": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/searchfield": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/select": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.3.4.tgz",
+ "integrity": "sha512-gD4JnF9/OIrQNdA4VqPIbifqpBC84BXHR5N7KmG7Ef06K9WGGVNB4FS538wno/znKg7lR6A45CPlaV53qfvWHg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/select": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/selection": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.11.2.tgz",
+ "integrity": "sha512-g21Y36xhYkXO3yzz0BYSBqnD38olvEwsJUqBXGZfx//bshMC2FNmI5sRYMAi36stxWbwzBvB01OytxfLLxCXCA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/slider": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.2.4.tgz",
+ "integrity": "sha512-J97lTLqQKsrVSovYr4dTz7IJO/+j9OStT78N6bumDklnIKT7bsH3g857zITUFjs8yCcq0Jt3sfOvEU0ts6vyww==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/slider": "^3.3.1",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/table": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.7.0.tgz",
+ "integrity": "sha512-oPvMEabRUD4LSJ/NZsal3TT2YjoRmpEK8t2pqG20+Vapxy5tC6QKEZQvrDxJwF4Z8fqQnX/GvnqmfypvqWDUSA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/grid": "^3.4.2",
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tabs": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.2.4.tgz",
+ "integrity": "sha512-qSnkoxzbC21KXZYGtg6TEDaex34WSNmPN4sJzXc9Xe39L6+wXNCA2tqZxWCfpIcWQklFm+BmnnNNCO8/PDDrMA==",
+ "dependencies": {
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/tabs": "^3.1.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/toggle": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.4.4.tgz",
+ "integrity": "sha512-OwVJpd2M7P7fekTWpl3TUdD3Brq+Z/xElOCJYP5QuVytXCa5seKsk40YPld8JQnA5dRKojpbUxMDOJpb6hOOfw==",
+ "dependencies": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tooltip": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.2.4.tgz",
+ "integrity": "sha512-t7ksDRs9jKcOS25BVLM5cNCyzSCnzrin8OZ3AEmgeNxfiS58HhHbNxYk725hyGrbdpugQ03cRcJG70EZ6VgwDQ==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/tooltip": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tree": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.4.1.tgz",
+ "integrity": "sha512-kIXeJOHgGGaUFnAD2wyRIiOwOw/+PN1OXo46n8+dPTFIYwR4+IWFNG8OMjVlIiSLPYWMCzzxZBE9a5grmbmNWQ==",
+ "dependencies": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/utils": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.5.2.tgz",
+ "integrity": "sha512-639gSKqamPHIEPaApb9ahVJS0HgAqNdVF3tQRoh+Ky6759Mbk6i3HqG4zk4IGQ1tVlYSYZvCckwehF7b2zndMg==",
+ "dependencies": {
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/virtualizer": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.4.1.tgz",
+ "integrity": "sha512-2S7GARkZl41X7fN0Xa94TkN8ELAUbA89zn1xH59d02NOvAKLAFXHkCe69AivvVvbhXo8/nONzO8NXqqgBS/XQw==",
+ "dependencies": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/breadcrumbs": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.4.6.tgz",
+ "integrity": "sha512-hvGUI4mKHvOl3QyKFHk1qT/UkG+C4iJsRTlk6pbQgwk4lb7rplEm1CEa7fxzRdI8Gh4Id+C9+WyKCxZf9GNWUw==",
+ "dependencies": {
+ "@react-types/link": "^3.3.6",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/button": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.0.tgz",
+ "integrity": "sha512-81BQO3QxSgF9PTXsVozNdNCKxBOB1lpbCWocV99dN1ws9s8uaYw8pmJJZ0LJKLiOsIECQ/3QrhQjmWTDW/qTug==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-Kx00132hFEVvqay/Ub7q2oZEA1AzksirAuCsjakamn4LAXvitlo3PZxqBdEsyRc3nP5NR48KJj8yo276mXY8kQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/checkbox": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.1.tgz",
+ "integrity": "sha512-kDMpy9SntjGQ7x00m5zmW8GENPouOtyiDgiEDKsPXUr2iYqHsNtricqVyG9S9+6hqpzuu8BzTcvZamc/xYjzlg==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/combobox": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.5.5.tgz",
+ "integrity": "sha512-gpDo/NTQFd5IfCZoNnG16N4/JfvwXpZBNc15Kn7bF+NcpSDhDpI26BZN4mvK4lljKCheD4VrEl9/3PtImCg7cA==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/datepicker": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.1.4.tgz",
+ "integrity": "sha512-NBCXBCe3YZqeA/JrVKy0IAvJ2XSnXaVpR9iAlUwKu7V8P81CtnXHsVCrd/0HSH8QZWsGdIV5E23z0TctvW8trA==",
+ "dependencies": {
+ "@internationalized/date": "^3.0.2",
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/dialog": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.4.5.tgz",
+ "integrity": "sha512-FkxZAYNRWkZVH5rjlw6qyQ/SpoGcYtNI/JQvn1H/xtZy/OJh2b2ERxGWv5x0RItGSeyATdSwFO1Qnf1Kl2K02A==",
+ "dependencies": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/grid": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.1.5.tgz",
+ "integrity": "sha512-KiEywsOJ+wdzLmJerAKEMADdvdItaLfhdo3bFfn1lgNUaKiNDJctDYWlhOYsRePf7MIrzoZuXEFnJj45jfpiOQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/label": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.7.1.tgz",
+ "integrity": "sha512-wFpdtjSDBWO4xQQGF57V3PqvVVyE9TPj9ELWLs1yzL09fpXosycuEl5d79RywVlC9aF9dQYUfES09q/DZhRhMQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/link": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.3.6.tgz",
+ "integrity": "sha512-HMFd94CW8WrHbwXeTtCP/WOZmGugrEkN8f16R0i7T9xlTumk5GxubDMjA41ND/ehH72Xq7lP9VX8qezHWCGSoQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/listbox": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.3.5.tgz",
+ "integrity": "sha512-7SMRJWUi7ayzQ7SUPCXXwgI/Ua3vg0PPQOZFsmJ4/E8VG/xK82IV7BYSZiNjUQuGpVZJL0VPndt/RwIrQO4S3w==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/menu": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.7.3.tgz",
+ "integrity": "sha512-3Pax24I/FyNKBjKyNR4ePD8eZs35Th57HzJAVjamQg2fHEDRomg9GQ7fdmfGj72Dv3x3JRCoPYqhJ3L5R3kbzg==",
+ "dependencies": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/meter": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.2.5.tgz",
+ "integrity": "sha512-pBrHoWRSwrfo3JtCCxoniSEd27Pokt20Fj4ZkJxjjDtLdcHOM4Z1JIKvOlcXMCV35iknrVu4veDHpmXolI+vAw==",
+ "dependencies": {
+ "@react-types/progress": "^3.2.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/numberfield": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.3.5.tgz",
+ "integrity": "sha512-qBhUSkahiIeTW5IvKvyfLtVHgzyqwKfuDIOlJQiBwgrOPR96X8KDDsOib4r5SFv0lhibv0gQ5L5ucXbmwLyQ8A==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/overlays": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.6.5.tgz",
+ "integrity": "sha512-IeWcF+YTucCYYHagNh8fZLH6R4YUONO1VHY57WJyIHwMy0qgEaKSQCwq72VO1fQJ0ySZgOgm31FniOyKkg6+eQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/progress": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.2.5.tgz",
+ "integrity": "sha512-pFSqaj6rlSdPqGHVErJ8G3RkIyYigoJ3EVozvhR9bcKkLlhnzJiFgOZl+k5u/ZKJOA+YHivIHJwg+Kl1sG0J6A==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/radio": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.3.1.tgz",
+ "integrity": "sha512-q/x0kMvBsu6mH4bIkp/Jjrm9ff5y/p3UR0V4CmQFI7604gQd2Dt1dZMU/2HV9x70r1JfWRrDeRrVjUHVfFL5Vg==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/searchfield": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.3.6.tgz",
+ "integrity": "sha512-DIv5eznnJVv0CM4f8SEEiptEZSzXUJWUyxRPkTzYNWt91pPPaCNbCQbmzZtyR9/R9KRJ9hlZN2bMkrtfVLvl1g==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/select": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.6.5.tgz",
+ "integrity": "sha512-FDeSA7TYMNnhsbXREnD4dWRSu21T5M4BLy+J/5VgwDpr3IN9pzbvngK8a3jc8Yg2S3igKYLMLYfmcsx+yk7ohA==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/shared": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.16.0.tgz",
+ "integrity": "sha512-IQgU4oAEvMwylEvaTsr2XB1G/mAoMe1JFYLD6G78v++oAR9l8o9MQxZ0YSeANDkqTamb2gKezGoT1RxvSKjVxw==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/slider": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.3.1.tgz",
+ "integrity": "sha512-CbEa1v1IcUJD7VrFhWyOOlT7VyQ5DHEf/pNMkvICOBLMAwnWxS+tnTiRFgA/EbvV/vp24ydeszHYtMvsyRONRw==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/switch": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.2.5.tgz",
+ "integrity": "sha512-DlUL0Bz79SUTRje/i8m6qn4Ipn+q8QnyIkyJhkoHeH1R0YNude8xZrBPWbj3zfdddAGDFSF1NzP69q0xmNAcTQ==",
+ "dependencies": {
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/table": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.4.0.tgz",
+ "integrity": "sha512-G2L5WtaBMeG3v/5Kj/ZXH4ywz95vyPUBj7qy9UZJOYNaAR7uJWZkbe+Ka4xD4H/AaOk4mqW8dSo8cj7gtD66GQ==",
+ "dependencies": {
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/tabs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.1.5.tgz",
+ "integrity": "sha512-YgWY8IajCDBZmBzR3eii0aW6+SjcAT/dmqDNmfIuVVnDN7sHQ3PFa0nbmByvb0SfjOkJYumt8TJwFUCugohS8A==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/textfield": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.6.2.tgz",
+ "integrity": "sha512-QhFcpXvmSEW1/PwkWkvHJkcjsVezLW0OAvA0kMt/FMOChQNxnO36Pha+WjfcVbiFHXMhCBl6akbY2xG9NsHJrQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/tooltip": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.2.5.tgz",
+ "integrity": "sha512-D4lN32JwQuA3JbCgcI26mgCkLHIj1WE8MTzf1McaasPkx7gVaqW+wfPyFwt99/Oo52TLvA/1oin78qePP67PSw==",
+ "dependencies": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+ "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
+ }
+ },
+ "node_modules/@tailwindcss/line-clamp": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz",
+ "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==",
+ "peerDependencies": {
+ "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
+ "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz",
+ "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.48.2",
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/typescript-estree": "5.48.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz",
+ "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==",
+ "dependencies": {
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/visitor-keys": "5.48.2"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz",
+ "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz",
+ "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==",
+ "dependencies": {
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/visitor-keys": "5.48.2",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz",
+ "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==",
+ "dependencies": {
+ "@typescript-eslint/types": "5.48.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-node/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.2.tgz",
+ "integrity": "sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/bellajs": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/bellajs/-/bellajs-11.1.1.tgz",
+ "integrity": "sha512-Fjsx2ZVarl3UWeTq3YJbbPoQPyh4dWtduw+DMnDYhKya9agbEg/8eXP7yHOvv88zUEHoVl9O/XmgrNTMcMTVSQ==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001446",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz",
+ "integrity": "sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/cross-fetch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+ "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+ "dependencies": {
+ "node-fetch": "2.6.7"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz",
+ "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "es-get-iterator": "^1.1.2",
+ "get-intrinsic": "^1.1.3",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.1",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
+ "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "dependencies": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
+ "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.21.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
+ "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.3",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.4",
+ "is-array-buffer": "^3.0.1",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
+ "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
+ "dependencies": {
+ "@eslint/eslintrc": "^1.4.1",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.4.tgz",
+ "integrity": "sha512-r7n9V4/kkiDDVFfBwI3tviGUV/jUzGI0lY3JefxceYaU18gdk2kMgNPyhHobowu1+yHZpZi8iEzRtzeTrtGRLg==",
+ "dependencies": {
+ "@next/eslint-plugin-next": "13.1.4",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.42.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz",
+ "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==",
+ "dependencies": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.10.0",
+ "get-tsconfig": "^4.2.0",
+ "globby": "^13.1.2",
+ "is-core-module": "^2.10.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.4"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
+ "dependencies": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.32.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz",
+ "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "node_modules/fast-xml-parser": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.14.tgz",
+ "integrity": "sha512-uKe7uxZ9DgNOmHfUmBdhkTBZcMMVxvQ3vELTxUpmotAqRxkpMayEiiQ4AQWTGAVyfzT4Dv79jaszLECWCYbd4w==",
+ "dependencies": {
+ "strnum": "^1.0.5"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ },
+ "funding": {
+ "type": "paypal",
+ "url": "https://paypal.me/naturalintelligence"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+ },
+ "node_modules/focus-visible": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz",
+ "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ=="
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.3.0.tgz",
+ "integrity": "sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==",
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/html-entities": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
+ "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
+ "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "entities": "^4.3.0"
+ }
+ },
+ "node_modules/i": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
+ "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/intl-messageformat": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.2.5.tgz",
+ "integrity": "sha512-AievYMN6WLLHwBeCTv4aRKG+w3ZNyZtkObwgsKk3Q7GNTq8zDRvDbJSBQkb2OPeVCcAKcIXvak9FF/bRNavoww==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "@formatjs/fast-memoize": "1.2.7",
+ "@formatjs/icu-messageformat-parser": "2.1.14",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
+ "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-typed-array": "^1.1.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
+ "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "node_modules/next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-13.1.4.tgz",
+ "integrity": "sha512-g0oBUU+tcOPKbXTVdsDO2adc6wd/ggqauHHysPQJxuIKqZ+fwICGJht0C5D5V0A/77eQDF5EFwNdAHkFvBDsog==",
+ "dependencies": {
+ "@next/env": "13.1.4",
+ "@swc/helpers": "0.4.14",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.14",
+ "styled-jsx": "5.1.1"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=14.6.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-android-arm-eabi": "13.1.4",
+ "@next/swc-android-arm64": "13.1.4",
+ "@next/swc-darwin-arm64": "13.1.4",
+ "@next/swc-darwin-x64": "13.1.4",
+ "@next/swc-freebsd-x64": "13.1.4",
+ "@next/swc-linux-arm-gnueabihf": "13.1.4",
+ "@next/swc-linux-arm64-gnu": "13.1.4",
+ "@next/swc-linux-arm64-musl": "13.1.4",
+ "@next/swc-linux-x64-gnu": "13.1.4",
+ "@next/swc-linux-x64-musl": "13.1.4",
+ "@next/swc-win32-arm64-msvc": "13.1.4",
+ "@next/swc-win32-ia32-msvc": "13.1.4",
+ "@next/swc-win32-x64-msvc": "13.1.4"
+ },
+ "peerDependencies": {
+ "fibers": ">= 3.1.0",
+ "node-sass": "^6.0.0 || ^7.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "fibers": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
+ "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==",
+ "dev": true
+ },
+ "node_modules/nodemailer": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz",
+ "integrity": "sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
+ "dependencies": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-srcset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+ "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-focus-visible": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz",
+ "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.9"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >=16"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
+ "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.10"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-aria": {
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.22.0.tgz",
+ "integrity": "sha512-GA+qwnVVTvSirdhB/PsYPwix24vFDlGeK5Lk3zUgB9Q5VHnTfMMJ4+tyu9G38UR0clLQ5SAG1ArNjgzmhexQYg==",
+ "dependencies": {
+ "@react-aria/breadcrumbs": "^3.4.1",
+ "@react-aria/button": "^3.6.4",
+ "@react-aria/calendar": "^3.0.5",
+ "@react-aria/checkbox": "^3.7.1",
+ "@react-aria/combobox": "^3.4.4",
+ "@react-aria/datepicker": "^3.2.1",
+ "@react-aria/dialog": "^3.4.2",
+ "@react-aria/dnd": "^3.0.1",
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/gridlist": "^3.1.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/link": "^3.3.6",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/meter": "^3.3.4",
+ "@react-aria/numberfield": "^3.3.4",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/progress": "^3.3.4",
+ "@react-aria/radio": "^3.4.2",
+ "@react-aria/searchfield": "^3.4.4",
+ "@react-aria/select": "^3.8.4",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/separator": "^3.2.6",
+ "@react-aria/slider": "^3.2.4",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/switch": "^3.3.1",
+ "@react-aria/table": "^3.7.0",
+ "@react-aria/tabs": "^3.3.4",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/tooltip": "^3.3.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-stately": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.20.0.tgz",
+ "integrity": "sha512-5011Pmn8d17d1kbl7ScnQw1z+tXKsmTwVsAqrTARdZdH6NBmVNHEMlybU1t3/3PfcVn5XoRYwWvCgeTNZtNb8w==",
+ "dependencies": {
+ "@react-stately/calendar": "^3.0.5",
+ "@react-stately/checkbox": "^3.3.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/combobox": "^3.3.1",
+ "@react-stately/data": "^3.8.1",
+ "@react-stately/datepicker": "^3.2.1",
+ "@react-stately/dnd": "^3.0.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/numberfield": "^3.3.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/radio": "^3.6.2",
+ "@react-stately/searchfield": "^3.3.4",
+ "@react-stately/select": "^3.3.4",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/slider": "^3.2.4",
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/tabs": "^3.2.4",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-stately/tooltip": "^3.2.4",
+ "@react-stately/tree": "^3.4.1",
+ "@react-types/shared": "^3.16.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sanitize-html": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.8.1.tgz",
+ "integrity": "sha512-qK5neD0SaMxGwVv5txOYv05huC3o6ZAA4h5+7nJJgWMNFUNRjcjLO6FpwAtKzfKCZ0jrG6xTk6eVFskbvOGblg==",
+ "dependencies": {
+ "deepmerge": "^4.2.2",
+ "escape-string-regexp": "^4.0.0",
+ "htmlparser2": "^8.0.0",
+ "is-plain-object": "^5.0.0",
+ "parse-srcset": "^1.0.2",
+ "postcss": "^8.3.11"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/srtparsejs": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/srtparsejs/-/srtparsejs-1.0.8.tgz",
+ "integrity": "sha512-xXyMHb8XWIFEYaLYa/RqXOXYdpxnk5VdonBEuv0CRfOxS8FVVeo4ZfPeUuhL3IRUQPClUxTI2oKPC0comyIPOA=="
+ },
+ "node_modules/stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "dependencies": {
+ "internal-slot": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/synckit": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz",
+ "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
+ "dependencies": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
+ "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
+ "dependencies": {
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.1",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.6",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.18",
+ "postcss-import": "^14.1.0",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.1"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "dependencies": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.9.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "dependencies": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.20.13",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
+ "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
+ "requires": {
+ "regenerator-runtime": "^0.13.11"
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@extractus/feed-extractor": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@extractus/feed-extractor/-/feed-extractor-6.2.1.tgz",
+ "integrity": "sha512-zCIcvp4CDhgqdX17MJenBCXXm4NMVFJyKmvVMzl3LwOyFUEmpO4WGjtzXhxw1XN1Mjj5gvPclJNPgRBGlom2zA==",
+ "requires": {
+ "bellajs": "^11.1.1",
+ "cross-fetch": "^3.1.5",
+ "fast-xml-parser": "^4.0.13",
+ "html-entities": "^2.3.3"
+ }
+ },
+ "@formatjs/ecma402-abstract": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.14.3.tgz",
+ "integrity": "sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg==",
+ "requires": {
+ "@formatjs/intl-localematcher": "0.2.32",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/fast-memoize": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.7.tgz",
+ "integrity": "sha512-hPeM5LXUUjtCKPybWOUAWpv8lpja8Xz+uKprFPJcg5F2Rd+/bf1E0UUsLRpaAgOReAf5HMRtoIgv/UcyPICrTQ==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/icu-messageformat-parser": {
+ "version": "2.1.14",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.14.tgz",
+ "integrity": "sha512-0KqeVOb72losEhUW+59vhZGGd14s1f35uThfEMVKZHKLEObvJdFTiI3ZQwvTMUCzLEMxnS6mtnYPmG4mTvwd3Q==",
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "@formatjs/icu-skeleton-parser": "1.3.18",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/icu-skeleton-parser": {
+ "version": "1.3.18",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz",
+ "integrity": "sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==",
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@formatjs/intl-localematcher": {
+ "version": "0.2.32",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz",
+ "integrity": "sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@headlessui/react": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.7.tgz",
+ "integrity": "sha512-BqDOd/tB9u2tA0T3Z0fn18ktw+KbVwMnkxxsGPIH2hzssrQhKB5n/6StZOyvLYP/FsYtvuXfi9I0YowKPv2c1w==",
+ "requires": {
+ "client-only": "^0.0.1"
+ }
+ },
+ "@heroicons/react": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.13.tgz",
+ "integrity": "sha512-iSN5XwmagrnirWlYEWNPdCDj9aRYVD/lnK3JlsC9/+fqGF80k8C7rl+1HCvBX0dBoagKqOFBs6fMhJJ1hOg1EQ==",
+ "requires": {}
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
+ },
+ "@internationalized/date": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.0.2.tgz",
+ "integrity": "sha512-9V1IxesP6ASZj/hYyOXOC4yPJvidbbStyWQKLCQSqhhKACMOXoo+BddXZJy47ju9mqOMpWdrJ2rTx4yTxK9oag==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@internationalized/message": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.0.10.tgz",
+ "integrity": "sha512-vfLqEop/NH68IgqMcXJNSDqZ5Leg3EEgCxhuuSefU7vvdbptD3pwpUWXaK9igYPa+aZfUU0eqv86yqm76obtsw==",
+ "requires": {
+ "@swc/helpers": "^0.4.14",
+ "intl-messageformat": "^10.1.0"
+ }
+ },
+ "@internationalized/number": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.1.2.tgz",
+ "integrity": "sha512-Mbys8SGsn0ApXz3hJLNU+d95B8luoUbwnmCpBwl7d63UmYAlcT6TRDyvaS/vwdbElXLcsQJjQCu0gox2cv/Tig==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@internationalized/string": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.0.1.tgz",
+ "integrity": "sha512-2+rHfXZ56YgsC6i3fKvBue/xatnSm0Jv+C/x4+n3wg5xAcLh4LPW3GvZ/9ifxNAz9+IWplgZHa1FRIbSuUvNWg==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@next/env": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.4.tgz",
+ "integrity": "sha512-x7ydhMpi9/xX7yVK+Fw33OuwwQWVZUFRxenK3z89fmPzQZyUk35Ynb+b7JkrhfRhDIFFvvqpzVSXeseSlBAw7A=="
+ },
+ "@next/eslint-plugin-next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.4.tgz",
+ "integrity": "sha512-a/T30+7Q1scom5t3L+wEBkYzCa+bhT/3DTxzxlNy4Xckw2InzcckQGeIi/larDgh5r2fSSJswhYAZEcKtuJiig==",
+ "requires": {
+ "glob": "7.1.7"
+ }
+ },
+ "@next/font": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.4.tgz",
+ "integrity": "sha512-NfqQPAIFJhssdaZEsP0MADZKN+tc040jOkNKVlDZHtVjJWBJSgbe8UHg3w0S6YuQr7PHc0ACbFeVCBQeG4MEvg=="
+ },
+ "@next/swc-android-arm-eabi": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.4.tgz",
+ "integrity": "sha512-5PAchzFst3In6Ml+9APvBj89H29lcPXcUqEYBVv09fWK/V4IuViKc2qOqM9pyPyw7KsqaZPmuqaG595E6jdZLA==",
+ "optional": true
+ },
+ "@next/swc-android-arm64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.4.tgz",
+ "integrity": "sha512-LCLjjRhsQ5fR9ExzR2fqxuyJe/D4Ct/YkdonVfJfqOfkEpFwUTQDOVo5GrQec4LZDk3zY+o6vZYjXbB0nD9VLA==",
+ "optional": true
+ },
+ "@next/swc-darwin-arm64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.4.tgz",
+ "integrity": "sha512-LSc/tF1FQ1y1SwKiCdGg8IIl7+Csk6nuLcLIyQXs24UNYjXg5+7vUQXqE8y66v/Dq8qFDC9rM61QhpM9ZDftbg==",
+ "optional": true
+ },
+ "@next/swc-darwin-x64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.4.tgz",
+ "integrity": "sha512-WoApDo8xfafrNc9+Mz5MwGFKUwbDHsGqLleTGZ8upegwVqDyHsYzqJQudf+loqhV58oGTOqP1eWaHn2J7dijXA==",
+ "optional": true
+ },
+ "@next/swc-freebsd-x64": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.4.tgz",
+ "integrity": "sha512-fqNyeT8G4guN8AHPIoBRhGY2GJg89FyWpuwX4o0Y3vUy/84IGZpNst3paCzaYkQSqQE/AuCpkB7hKxkN7ittXw==",
+ "optional": true
+ },
+ "@next/swc-linux-arm-gnueabihf": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.4.tgz",
+ "integrity": "sha512-MEfm8OC1YR9/tYHUzlQsxcSmiuf8XdO7bqh5VtG4pilScjc5I5t+tQgIDgoDGePfh5W99W23hb3s6oCFrt99rw==",
+ "optional": true
+ },
+ "@next/swc-linux-arm64-gnu": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.4.tgz",
+ "integrity": "sha512-2wgth/KsuODzW/E7jsRoWdhKmE5oZzXcBPvf9RW+ZpBNvYQkEDlzfLA7n8DtxTU8I4oMas0mdEPdCWXrSNnVZw==",
+ "optional": true
+ },
+ "@next/swc-linux-arm64-musl": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.4.tgz",
+ "integrity": "sha512-GdWhCRljsT7rNEElEsdu4RRppd+XaQOX1IJslsh/+HU6LsJGUE8tXpa68yJjCsHZHifkbdZNeCr5SYdsN6CbAA==",
+ "optional": true
+ },
+ "@next/swc-linux-x64-gnu": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.4.tgz",
+ "integrity": "sha512-Rsk/ojwYqMskN2eo5hUSVe7UuMV/aSjmrmJ0BCFGFPfBY9sPgmYj/oXlDDN0y5lJD9acPuiBjknLWgnOnx5JIA==",
+ "optional": true
+ },
+ "@next/swc-linux-x64-musl": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.4.tgz",
+ "integrity": "sha512-gKSVPozedA2gpA+vggYnAqpDuzWFed2oxFeXxHw0aW2ALdAZswAinn1ZwXEQ5fHnVguxjZhH0+2nBxpMdF8p5Q==",
+ "optional": true
+ },
+ "@next/swc-win32-arm64-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.4.tgz",
+ "integrity": "sha512-+kAXIIVb7Q4LCKmi7dn9qVlG1XUf3Chgj5Rwl0rAP4WBV2TnJIgsOEC24G1Mm3jjif+qXm7SJS9YZ9Yg3Y8sSQ==",
+ "optional": true
+ },
+ "@next/swc-win32-ia32-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.4.tgz",
+ "integrity": "sha512-EsfzAFBVaw1zg1FzlLMgRaTX/DKY+EnAvJ6mCIJMGeSOPIj4Oy6xF2yEQ3VaRkwFpAafHJH6JNB/CGrdKFCMXw==",
+ "optional": true
+ },
+ "@next/swc-win32-x64-msvc": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.4.tgz",
+ "integrity": "sha512-bygNjmnq+F9NqJXh7OfhJgqu6LGU29GNKQYVyZkxY/h5K0WWUvAE/VL+TdyMwbvQr9KByx5XLwORwetLxXCo4g==",
+ "optional": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@pkgr/utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "is-glob": "^4.0.3",
+ "open": "^8.4.0",
+ "picocolors": "^1.0.0",
+ "tiny-glob": "^0.2.9",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@react-aria/breadcrumbs": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.4.1.tgz",
+ "integrity": "sha512-3dotDXcXX5IbES9tS9gK5m/2inlZH1ZESi61aBUoD/kQbUcf4CJ3TniVqzBKjNqQN8yIBH/LjwkAoGmuvtPVRQ==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/link": "^3.3.6",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/breadcrumbs": "^3.4.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/button": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.6.4.tgz",
+ "integrity": "sha512-OEs5fNGiuZzyC5y0cNl96+6pRf/3ZhI1i2m6LlRYhJLsWXPhHt21UHEnlSchE/XGtgKojJEeTsXottoBFTBi5w==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-RIOwGYIwMizN/MAF5RkTb2ic9OJ0rJyR2VqqgtV3c7ADHNejzyLYMQmaalEFDUHS+AbvaXM1LCXdFBhSB8nf5w==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/calendar": "^3.0.5",
+ "@react-types/button": "^3.7.0",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/checkbox": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.7.1.tgz",
+ "integrity": "sha512-3KRg/KrTRwQdw5Yg7gpbIKWWVt57PbGSEXAS/diQvRf9pTXbOuChTES8uVlcwF8q+3mKXc4ppzE3gsNQ5jOMqg==",
+ "requires": {
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/toggle": "^3.4.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/checkbox": "^3.3.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/combobox": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.4.4.tgz",
+ "integrity": "sha512-aviSDt4JkYZC1Ww83gvrNB4cHetXu73n5NuEfMNBC3B6fiL0MP5Av5+lMgf8FzpQks39QkZNxBtQ/h4I3D7SBA==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/combobox": "^3.3.1",
+ "@react-stately/layout": "^3.10.0",
+ "@react-types/button": "^3.7.0",
+ "@react-types/combobox": "^3.5.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/datepicker": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.2.1.tgz",
+ "integrity": "sha512-NnW9VgX/YjxkgjcIaxmOhzpfiQmTQpCXjpPJ1+3nPhKzPKpcjtPxIYTDMkm/R+6i5FRukEGtjhg3QY9amLK6hQ==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/number": "^3.1.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/spinbutton": "^3.2.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/datepicker": "^3.2.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/dialog": "^3.4.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/dialog": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.4.2.tgz",
+ "integrity": "sha512-Z6YZYXtwwmC5ZHjJldF3zuTjHnli7fXe/sM1ts3bw6jvU2L0kzhV/DRbPXYg8h695Oj9t+OIi4qxjEyKVH7SEA==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-types/dialog": "^3.4.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/dnd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.0.1.tgz",
+ "integrity": "sha512-z/T59Jc+6mj3OMcLjfA6MYd0zD6K3DYw+kB2CZ0EPte7BRN8wtU4+q/bx1iX+If97X6bTcHjMGX6nrQJ5vX/fw==",
+ "requires": {
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/dnd": "^3.0.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/focus": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.10.1.tgz",
+ "integrity": "sha512-HjgFUC1CznuYC7CxtBIFML6bOBxW3M3cSNtvmXU9QWlrPSwwOLkXCnfY6+UkjCc5huP4v7co4PoRDX8Vbe/cVQ==",
+ "requires": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ }
+ },
+ "@react-aria/grid": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.5.2.tgz",
+ "integrity": "sha512-+cDtTvTT0YF4jgy1pv0omcweub6z1N+GdkpHC6L6/jtH2gFRVns3IC6pf5ihLDIpLloylthaMMR8C3lus7035g==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/grid": "^3.4.2",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/gridlist": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.1.2.tgz",
+ "integrity": "sha512-3HI/e8HzyBRWdEbDH+3Hvj9U5fD/1TYaqA0f4XnBdSEDd7LHPOzZyNzbZMdlMmaq2W0Dmm1YRCMELacFVUehUA==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/grid": "^3.5.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/list": "^3.6.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/i18n": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.6.3.tgz",
+ "integrity": "sha512-cDWl8FXJIXsw/raWcThywBueCJ5ncoogq81wYVS6hfZVmSyncONIB3bwUL12cojmjX1VEP31sN0ujT/83QP95Q==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/message": "^3.0.10",
+ "@internationalized/number": "^3.1.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/interactions": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.13.1.tgz",
+ "integrity": "sha512-WCvfZOi1hhussVTHxVq76OR48ry13Zvp9U5hmuQufyxIUlf4hOvDk4/cbK4o4JiCs8X7C7SRzcwFM34M4NHzmg==",
+ "requires": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/label": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.4.4.tgz",
+ "integrity": "sha512-1fuYf2UctNhBy31uYN7OhdcrwzlB5GS0+C49gDkwWzccB7yr+CoOJ5UQUoVB7WBmzrc+CuzwWxSDd4OupSYIZQ==",
+ "requires": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/label": "^3.7.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/link": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.3.6.tgz",
+ "integrity": "sha512-UjbdBJ8EB+jCC3mPZD6cYykHqZKTy6/VvI5RGJoKtF8cg9639tRy6g102pd4ncFTdD4DfU5PPWtthC24nQRCyQ==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/link": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/listbox": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.7.2.tgz",
+ "integrity": "sha512-e3O/u2T3TccinmfS/UvHywxLbASmh28U4020WTpZnIrsaoriVCkGZvG1AYNNPDIESz2WO0oRF6vDrmGunglJ2A==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-types/listbox": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/live-announcer": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.1.2.tgz",
+ "integrity": "sha512-BqtVLPWU10sZssoOJF1lJiRvZe5zqZ5BM39PsFyO7dWhVkR/9O9bZviqvKXnC1oXCnypfa+85gUshbK9unFcWA==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/menu": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.7.1.tgz",
+ "integrity": "sha512-5KIUTs3xYSmERB8qzofFghznMVLcG3RWDnJcQjpRtrrYjm6Oc39TJeodDH874fiEr6o3i5WwMrEYVp7NSxz/TQ==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/tree": "^3.4.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/menu": "^3.7.3",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/meter": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.3.4.tgz",
+ "integrity": "sha512-RdVd5vlb6//HI8G1hhH4G+E0Y387GYFKjmewSUKK0Lzp9PFLili26s+xLvgigUX9ald7HiPmfPdAlXzotvo54Q==",
+ "requires": {
+ "@react-aria/progress": "^3.3.4",
+ "@react-types/meter": "^3.2.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/numberfield": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.3.4.tgz",
+ "integrity": "sha512-yoYeYaEW5v84Ff0x+oSN0h3uzqrSOBEgjtv8ZMaFVsZfm9yMjsVLu+QWGBYCEOPcASMkNZpNR3o91nBPK3XTDw==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/spinbutton": "^3.2.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/numberfield": "^3.3.1",
+ "@react-types/button": "^3.7.0",
+ "@react-types/numberfield": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/overlays": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.12.1.tgz",
+ "integrity": "sha512-OSgSopk2uQI5unvC3+fUyngbRFFe4GnF0iopCmrsI7qSQEusJUd4M2SuPVXUBBwWFt5TsiH7TnxmIPWeh5LSoA==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/progress": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.3.4.tgz",
+ "integrity": "sha512-MVlWdH7L2e0u1SvkVk+C6/onS8opex9rIKUKHM08s++y80Xe3BIAh8jd5tgdlutDtcZ1kKgfb4bet9dvjymo4A==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/progress": "^3.2.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/radio": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.4.2.tgz",
+ "integrity": "sha512-PpEsQjwkYOkSfKfnqXpBzf0FM/V2GSC0g/NG2ZAI5atDIACeic+kHCcs8fm2QzXtUDaRltNurvYdDJ+XzZ8g1g==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/radio": "^3.6.2",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/searchfield": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.4.4.tgz",
+ "integrity": "sha512-Z3nZI2FXrWLPNUeJ3QV2ruTKBR9eHhPoHi+Iiuq4n+e02ib5s0Jlbam29FFiOxmf6vUMhScNcEYP9p2BNANmQA==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/searchfield": "^3.3.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/searchfield": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/select": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.8.4.tgz",
+ "integrity": "sha512-d2JOe11lUoGLvsE32bZRMq32SzXuyLNczyTOLrWM0e9fsOr49A8p6L6bFm3symU/KpwjjnO+pf5IkvgEq+GoJg==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1",
+ "@react-stately/select": "^3.3.4",
+ "@react-types/button": "^3.7.0",
+ "@react-types/select": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/selection": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.12.1.tgz",
+ "integrity": "sha512-UX1vSY+iUdHe0itFZIOizX1BCI8SAeFnEh5VIQ1bYRt93+kAxeC914fsxFPPgrodJyqWRCX1dblPyRUIWAzQiw==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/separator": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.2.6.tgz",
+ "integrity": "sha512-QhYqoLfu+4T3ASCs5Q8ZWfBbRKBUmqquVdREWvHyvVyOBk9kRN9nxsoIxlkss1RJlJJx59AYF9T9CwgL80/bvw==",
+ "requires": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/slider": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.2.4.tgz",
+ "integrity": "sha512-+BDPFaCgm0gtGewO33ZDNZz1b3Fc1p5Y/HSuwCcru+jHetODJXy23IIVpWsDri1vG3fHECRnWcDZAjLZgkVnAw==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/radio": "^3.6.2",
+ "@react-stately/slider": "^3.2.4",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/slider": "^3.3.1",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/spinbutton": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.2.1.tgz",
+ "integrity": "sha512-y9QZ0VzWL7qzbWSPOCsAdvZhVlQrnHLRGc8bkRa2jmWrnCqS0iua/TRuLGgazIf2Rb7GmdbKBJJuPSScytVDUw==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/button": "^3.7.0",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/ssr": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.4.1.tgz",
+ "integrity": "sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/switch": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.3.1.tgz",
+ "integrity": "sha512-o9MvXiSK9c7rUZjA6oQ0PNlVCnHEctue6v6W8Vn4HNbQMfhJiWqiSSff4RFcgRgs8WsPsEqbT+vHi2kXykQzdA==",
+ "requires": {
+ "@react-aria/toggle": "^3.4.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/switch": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/table": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.7.0.tgz",
+ "integrity": "sha512-1YqOeb8r8pxIYyfa5qNdCoM3fNQELM4d+9DanoNJhgnehoq9QDI9A1pGC2pvK2PN2y9IuTJM+U/ITjSpPBoGjQ==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/grid": "^3.5.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/live-announcer": "^3.1.2",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/tabs": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.3.4.tgz",
+ "integrity": "sha512-SqlgfPvpRHlWelFk/lF9Ziu/8881NVErhKcpyyi+A9jASv5tvILWiwK8na82oI22UXXzyp0Y1EojLB25HnCB+w==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/tabs": "^3.2.4",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/tabs": "^3.1.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/textfield": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.8.1.tgz",
+ "integrity": "sha512-jgun/B9ecuRCfBSJLX2xDuNwfuj1lL0oibMWoSv6Y++W+CSS8a7LjR1f9Kll5TDVkQiRRUm9qHwI0og9xTJrNw==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/toggle": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.4.2.tgz",
+ "integrity": "sha512-xokCGf0fn96mOMqQku5QW672iQoMsN9RMpFbKvvgg2seceh8ifblyAXElWf/6YmluOZSgUSZljDkFrbMMYlzVA==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/switch": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/tooltip": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.3.4.tgz",
+ "integrity": "sha512-KPDkDu7fquuUOOnNh9S7KfhPMwB1w9K+yLIFrYaj4iYSOLk/HH5TDkyiUQ7j5+B963D1fWlQjYFEGQ9o2KwO/Q==",
+ "requires": {
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/tooltip": "^3.2.4",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/tooltip": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-aria/utils": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.14.2.tgz",
+ "integrity": "sha512-3nr5gsAf/J/W+6Tu4NF3Q7m+1mXjfpXESh7TPa6UR6v3tVDTsJVMrITg2BkHN1jM8xELcl2ZxyUffOWqOXzWuA==",
+ "requires": {
+ "@react-aria/ssr": "^3.4.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ }
+ },
+ "@react-aria/visually-hidden": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.6.1.tgz",
+ "integrity": "sha512-7rUbiaIiR1nok9HAHPn/WcyQlvuldUqxnvh81V4dlI3NtXOgMw7/QaNc5Xo5FFWlsSVpbyK3UVJgzIui0Ns0Xg==",
+ "requires": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14",
+ "clsx": "^1.1.1"
+ }
+ },
+ "@react-stately/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-vu5hKsiA8edqNtsqBTGi8QR38qZ+uHDjuq3vp2m0f6TZSnp0kg8fkPNHEOuBTQ8ZXFFbGUZKhL/1B+ZWwLHwMQ==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/calendar": "^3.0.5",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/checkbox": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.3.2.tgz",
+ "integrity": "sha512-eU3zvWgQrcqS8UK8ZVkb3fMP816PeuN9N0/dOJKuOXXhkoLPuxtuja1oEqKU3sFMa5+bx3czZhhNIRpr60NAdw==",
+ "requires": {
+ "@react-stately/toggle": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/collections": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.5.1.tgz",
+ "integrity": "sha512-egzVrZC5eFc5RJBpqUkzxd2aJOHZ2T1o7horEi8tAWZkg4YI+AmKrqela4ijVrrB9l1GO9z06qPT1UoPkFrC1w==",
+ "requires": {
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/combobox": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.3.1.tgz",
+ "integrity": "sha512-DgYn0MyfbDySf54o7ofXRd29TWznqtRRRbMG8TWgi/RaB0piDckT/TYWWSYOH3iMgnOEhReJhUUdMiQG4QLpIg==",
+ "requires": {
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/select": "^3.3.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/combobox": "^3.5.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/data": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.8.1.tgz",
+ "integrity": "sha512-YSc45qfmt8uhg9KTGGDQ/xbAPPP6ty5itzWoWORYLEsorBNUj7mLF+q126nYcYX4B5Xf84w8EexqP8Y8nh2Gdg==",
+ "requires": {
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/datepicker": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.2.1.tgz",
+ "integrity": "sha512-nd6thX2Z+rOLDHduB3EgMKA0n5U83lrwn3IUfjRGrcE21zFaFmhTPsHyvol5jHy3eSyjWSN9kGpKFzOxES+uoA==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@internationalized/string": "^3.0.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/datepicker": "^3.1.4",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/dnd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.0.1.tgz",
+ "integrity": "sha512-pwtyY/TR6Rdk33lFdF6dztQTV9gPujFmTqJG31NSSs6ei1FfUW9ZMq+311Zb8OhZ0TFiwZqAutVmmaaUrtl5+A==",
+ "requires": {
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/grid": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.4.2.tgz",
+ "integrity": "sha512-NeIUykQeA7Hen+dV4771ARW5SRrHYNn5VTOsQwn3KBUd2Z2gZ01OwUl3gETl5u0e3/tzMUdJ1LUoSPhDMwcmKw==",
+ "requires": {
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/layout": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.10.0.tgz",
+ "integrity": "sha512-ThFgivQSD5ksLMX7tbu0HqIxbxac/E8a/0vA21wB9QF9IQnUKO796QAQqwfA5rwPvTT41LL2Xn00GkrwQ9g/zg==",
+ "requires": {
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/virtualizer": "^3.4.1",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/list": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.6.1.tgz",
+ "integrity": "sha512-+/fVkK3UO+N2NoUGpe57k9gcnfIsyEgWP8SD6CXZUkJho7BTp6mwrH0Wm8tcOclT3uBk+fZaQrk8mR3uWsPZGw==",
+ "requires": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/menu": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.4.4.tgz",
+ "integrity": "sha512-WKak1NSV9yDY0tDB4mzsbj0FboTtR06gekio0VmKb1+FmnrC07mef8eGKUn974F0WhTNUy5A1iI5eM0W2YNynA==",
+ "requires": {
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/menu": "^3.7.3",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/numberfield": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.3.1.tgz",
+ "integrity": "sha512-GOu6wE2L2eal4AOL+rJQ4wQnFRgRkwiS9xdAFPu9B4qfP0DVfEIUC3XV4jws9nBhANxEf5LyilUv400nG881wg==",
+ "requires": {
+ "@internationalized/number": "^3.1.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/numberfield": "^3.3.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/overlays": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.4.4.tgz",
+ "integrity": "sha512-IIlx+VXtXS4snDXrocUOls8QZ5XBQ4SNonaz1ox8/5W7Nsvq4VtdKsIaXsUP4agOudswaimlpj3pTDO/KuF5tQ==",
+ "requires": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/overlays": "^3.6.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/radio": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.6.2.tgz",
+ "integrity": "sha512-qjbebR0YSkdEocLsPSzNnCsUYllWY938/5Z8mETxk4+74PJLxC3z0qjqVRq+aDO8hOgIfqSgrRRp3cJz9vIsBg==",
+ "requires": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/radio": "^3.3.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/searchfield": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.3.4.tgz",
+ "integrity": "sha512-H/1evv7lsJl6PlD7/Sv7VgbCe0Yd2E2eKFihD6/tXPWO6L/ngYp5siqqhdwazjWTK2Hgw4TL0eviHGOGXKItzQ==",
+ "requires": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/searchfield": "^3.3.6",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/select": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.3.4.tgz",
+ "integrity": "sha512-gD4JnF9/OIrQNdA4VqPIbifqpBC84BXHR5N7KmG7Ef06K9WGGVNB4FS538wno/znKg7lR6A45CPlaV53qfvWHg==",
+ "requires": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/select": "^3.6.5",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/selection": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.11.2.tgz",
+ "integrity": "sha512-g21Y36xhYkXO3yzz0BYSBqnD38olvEwsJUqBXGZfx//bshMC2FNmI5sRYMAi36stxWbwzBvB01OytxfLLxCXCA==",
+ "requires": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/slider": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.2.4.tgz",
+ "integrity": "sha512-J97lTLqQKsrVSovYr4dTz7IJO/+j9OStT78N6bumDklnIKT7bsH3g857zITUFjs8yCcq0Jt3sfOvEU0ts6vyww==",
+ "requires": {
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/utils": "^3.14.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/slider": "^3.3.1",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/table": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.7.0.tgz",
+ "integrity": "sha512-oPvMEabRUD4LSJ/NZsal3TT2YjoRmpEK8t2pqG20+Vapxy5tC6QKEZQvrDxJwF4Z8fqQnX/GvnqmfypvqWDUSA==",
+ "requires": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/grid": "^3.4.2",
+ "@react-stately/selection": "^3.11.2",
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0",
+ "@react-types/table": "^3.4.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/tabs": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.2.4.tgz",
+ "integrity": "sha512-qSnkoxzbC21KXZYGtg6TEDaex34WSNmPN4sJzXc9Xe39L6+wXNCA2tqZxWCfpIcWQklFm+BmnnNNCO8/PDDrMA==",
+ "requires": {
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/tabs": "^3.1.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/toggle": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.4.4.tgz",
+ "integrity": "sha512-OwVJpd2M7P7fekTWpl3TUdD3Brq+Z/xElOCJYP5QuVytXCa5seKsk40YPld8JQnA5dRKojpbUxMDOJpb6hOOfw==",
+ "requires": {
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/tooltip": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.2.4.tgz",
+ "integrity": "sha512-t7ksDRs9jKcOS25BVLM5cNCyzSCnzrin8OZ3AEmgeNxfiS58HhHbNxYk725hyGrbdpugQ03cRcJG70EZ6VgwDQ==",
+ "requires": {
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/tooltip": "^3.2.5",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/tree": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.4.1.tgz",
+ "integrity": "sha512-kIXeJOHgGGaUFnAD2wyRIiOwOw/+PN1OXo46n8+dPTFIYwR4+IWFNG8OMjVlIiSLPYWMCzzxZBE9a5grmbmNWQ==",
+ "requires": {
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/utils": "^3.5.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/utils": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.5.2.tgz",
+ "integrity": "sha512-639gSKqamPHIEPaApb9ahVJS0HgAqNdVF3tQRoh+Ky6759Mbk6i3HqG4zk4IGQ1tVlYSYZvCckwehF7b2zndMg==",
+ "requires": {
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-stately/virtualizer": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.4.1.tgz",
+ "integrity": "sha512-2S7GARkZl41X7fN0Xa94TkN8ELAUbA89zn1xH59d02NOvAKLAFXHkCe69AivvVvbhXo8/nONzO8NXqqgBS/XQw==",
+ "requires": {
+ "@react-aria/utils": "^3.14.2",
+ "@react-types/shared": "^3.16.0",
+ "@swc/helpers": "^0.4.14"
+ }
+ },
+ "@react-types/breadcrumbs": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.4.6.tgz",
+ "integrity": "sha512-hvGUI4mKHvOl3QyKFHk1qT/UkG+C4iJsRTlk6pbQgwk4lb7rplEm1CEa7fxzRdI8Gh4Id+C9+WyKCxZf9GNWUw==",
+ "requires": {
+ "@react-types/link": "^3.3.6",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/button": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.0.tgz",
+ "integrity": "sha512-81BQO3QxSgF9PTXsVozNdNCKxBOB1lpbCWocV99dN1ws9s8uaYw8pmJJZ0LJKLiOsIECQ/3QrhQjmWTDW/qTug==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/calendar": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.0.5.tgz",
+ "integrity": "sha512-Kx00132hFEVvqay/Ub7q2oZEA1AzksirAuCsjakamn4LAXvitlo3PZxqBdEsyRc3nP5NR48KJj8yo276mXY8kQ==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/checkbox": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.1.tgz",
+ "integrity": "sha512-kDMpy9SntjGQ7x00m5zmW8GENPouOtyiDgiEDKsPXUr2iYqHsNtricqVyG9S9+6hqpzuu8BzTcvZamc/xYjzlg==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/combobox": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.5.5.tgz",
+ "integrity": "sha512-gpDo/NTQFd5IfCZoNnG16N4/JfvwXpZBNc15Kn7bF+NcpSDhDpI26BZN4mvK4lljKCheD4VrEl9/3PtImCg7cA==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/datepicker": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.1.4.tgz",
+ "integrity": "sha512-NBCXBCe3YZqeA/JrVKy0IAvJ2XSnXaVpR9iAlUwKu7V8P81CtnXHsVCrd/0HSH8QZWsGdIV5E23z0TctvW8trA==",
+ "requires": {
+ "@internationalized/date": "^3.0.2",
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/dialog": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.4.5.tgz",
+ "integrity": "sha512-FkxZAYNRWkZVH5rjlw6qyQ/SpoGcYtNI/JQvn1H/xtZy/OJh2b2ERxGWv5x0RItGSeyATdSwFO1Qnf1Kl2K02A==",
+ "requires": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/grid": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.1.5.tgz",
+ "integrity": "sha512-KiEywsOJ+wdzLmJerAKEMADdvdItaLfhdo3bFfn1lgNUaKiNDJctDYWlhOYsRePf7MIrzoZuXEFnJj45jfpiOQ==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/label": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.7.1.tgz",
+ "integrity": "sha512-wFpdtjSDBWO4xQQGF57V3PqvVVyE9TPj9ELWLs1yzL09fpXosycuEl5d79RywVlC9aF9dQYUfES09q/DZhRhMQ==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/link": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.3.6.tgz",
+ "integrity": "sha512-HMFd94CW8WrHbwXeTtCP/WOZmGugrEkN8f16R0i7T9xlTumk5GxubDMjA41ND/ehH72Xq7lP9VX8qezHWCGSoQ==",
+ "requires": {
+ "@react-aria/interactions": "^3.13.1",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/listbox": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.3.5.tgz",
+ "integrity": "sha512-7SMRJWUi7ayzQ7SUPCXXwgI/Ua3vg0PPQOZFsmJ4/E8VG/xK82IV7BYSZiNjUQuGpVZJL0VPndt/RwIrQO4S3w==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/menu": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.7.3.tgz",
+ "integrity": "sha512-3Pax24I/FyNKBjKyNR4ePD8eZs35Th57HzJAVjamQg2fHEDRomg9GQ7fdmfGj72Dv3x3JRCoPYqhJ3L5R3kbzg==",
+ "requires": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/meter": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.2.5.tgz",
+ "integrity": "sha512-pBrHoWRSwrfo3JtCCxoniSEd27Pokt20Fj4ZkJxjjDtLdcHOM4Z1JIKvOlcXMCV35iknrVu4veDHpmXolI+vAw==",
+ "requires": {
+ "@react-types/progress": "^3.2.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/numberfield": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.3.5.tgz",
+ "integrity": "sha512-qBhUSkahiIeTW5IvKvyfLtVHgzyqwKfuDIOlJQiBwgrOPR96X8KDDsOib4r5SFv0lhibv0gQ5L5ucXbmwLyQ8A==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/overlays": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.6.5.tgz",
+ "integrity": "sha512-IeWcF+YTucCYYHagNh8fZLH6R4YUONO1VHY57WJyIHwMy0qgEaKSQCwq72VO1fQJ0ySZgOgm31FniOyKkg6+eQ==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/progress": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.2.5.tgz",
+ "integrity": "sha512-pFSqaj6rlSdPqGHVErJ8G3RkIyYigoJ3EVozvhR9bcKkLlhnzJiFgOZl+k5u/ZKJOA+YHivIHJwg+Kl1sG0J6A==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/radio": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.3.1.tgz",
+ "integrity": "sha512-q/x0kMvBsu6mH4bIkp/Jjrm9ff5y/p3UR0V4CmQFI7604gQd2Dt1dZMU/2HV9x70r1JfWRrDeRrVjUHVfFL5Vg==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/searchfield": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.3.6.tgz",
+ "integrity": "sha512-DIv5eznnJVv0CM4f8SEEiptEZSzXUJWUyxRPkTzYNWt91pPPaCNbCQbmzZtyR9/R9KRJ9hlZN2bMkrtfVLvl1g==",
+ "requires": {
+ "@react-types/shared": "^3.16.0",
+ "@react-types/textfield": "^3.6.2"
+ }
+ },
+ "@react-types/select": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.6.5.tgz",
+ "integrity": "sha512-FDeSA7TYMNnhsbXREnD4dWRSu21T5M4BLy+J/5VgwDpr3IN9pzbvngK8a3jc8Yg2S3igKYLMLYfmcsx+yk7ohA==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/shared": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.16.0.tgz",
+ "integrity": "sha512-IQgU4oAEvMwylEvaTsr2XB1G/mAoMe1JFYLD6G78v++oAR9l8o9MQxZ0YSeANDkqTamb2gKezGoT1RxvSKjVxw==",
+ "requires": {}
+ },
+ "@react-types/slider": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.3.1.tgz",
+ "integrity": "sha512-CbEa1v1IcUJD7VrFhWyOOlT7VyQ5DHEf/pNMkvICOBLMAwnWxS+tnTiRFgA/EbvV/vp24ydeszHYtMvsyRONRw==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/switch": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.2.5.tgz",
+ "integrity": "sha512-DlUL0Bz79SUTRje/i8m6qn4Ipn+q8QnyIkyJhkoHeH1R0YNude8xZrBPWbj3zfdddAGDFSF1NzP69q0xmNAcTQ==",
+ "requires": {
+ "@react-types/checkbox": "^3.4.1",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/table": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.4.0.tgz",
+ "integrity": "sha512-G2L5WtaBMeG3v/5Kj/ZXH4ywz95vyPUBj7qy9UZJOYNaAR7uJWZkbe+Ka4xD4H/AaOk4mqW8dSo8cj7gtD66GQ==",
+ "requires": {
+ "@react-types/grid": "^3.1.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/tabs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.1.5.tgz",
+ "integrity": "sha512-YgWY8IajCDBZmBzR3eii0aW6+SjcAT/dmqDNmfIuVVnDN7sHQ3PFa0nbmByvb0SfjOkJYumt8TJwFUCugohS8A==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/textfield": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.6.2.tgz",
+ "integrity": "sha512-QhFcpXvmSEW1/PwkWkvHJkcjsVezLW0OAvA0kMt/FMOChQNxnO36Pha+WjfcVbiFHXMhCBl6akbY2xG9NsHJrQ==",
+ "requires": {
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@react-types/tooltip": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.2.5.tgz",
+ "integrity": "sha512-D4lN32JwQuA3JbCgcI26mgCkLHIj1WE8MTzf1McaasPkx7gVaqW+wfPyFwt99/Oo52TLvA/1oin78qePP67PSw==",
+ "requires": {
+ "@react-types/overlays": "^3.6.5",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "@rushstack/eslint-patch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
+ },
+ "@swc/helpers": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@tailwindcss/forms": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+ "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
+ "requires": {
+ "mini-svg-data-uri": "^1.2.3"
+ }
+ },
+ "@tailwindcss/line-clamp": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz",
+ "integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==",
+ "requires": {}
+ },
+ "@tailwindcss/typography": {
+ "version": "0.5.9",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz",
+ "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
+ "requires": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "postcss-selector-parser": "6.0.10"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz",
+ "integrity": "sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==",
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.48.2",
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/typescript-estree": "5.48.2",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz",
+ "integrity": "sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==",
+ "requires": {
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/visitor-keys": "5.48.2"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz",
+ "integrity": "sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA=="
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz",
+ "integrity": "sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==",
+ "requires": {
+ "@typescript-eslint/types": "5.48.2",
+ "@typescript-eslint/visitor-keys": "5.48.2",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.48.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz",
+ "integrity": "sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==",
+ "requires": {
+ "@typescript-eslint/types": "5.48.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "acorn": {
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "requires": {}
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ }
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "requires": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "array-includes": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "is-string": "^1.0.7"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
+ },
+ "array.prototype.flat": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.tosorted": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "es-shim-unscopables": "^1.0.0",
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
+ },
+ "autoprefixer": {
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.4",
+ "caniuse-lite": "^1.0.30001426",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ }
+ },
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
+ },
+ "axe-core": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.2.tgz",
+ "integrity": "sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg=="
+ },
+ "axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "requires": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bellajs": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/bellajs/-/bellajs-11.1.1.tgz",
+ "integrity": "sha512-Fjsx2ZVarl3UWeTq3YJbbPoQPyh4dWtduw+DMnDYhKya9agbEg/8eXP7yHOvv88zUEHoVl9O/XmgrNTMcMTVSQ=="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001446",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz",
+ "integrity": "sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw=="
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
+ },
+ "clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "cross-fetch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
+ "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+ "requires": {
+ "node-fetch": "2.6.7"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-equal": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz",
+ "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-get-iterator": "^1.1.2",
+ "get-intrinsic": "^1.1.3",
+ "is-arguments": "^1.1.1",
+ "is-array-buffer": "^3.0.1",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "isarray": "^2.0.5",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.1",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "deepmerge": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
+ "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og=="
+ },
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
+ },
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q=="
+ },
+ "detective": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+ "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+ "requires": {
+ "acorn-node": "^1.8.2",
+ "defined": "^1.0.0",
+ "minimist": "^1.2.6"
+ }
+ },
+ "didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+ },
+ "domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "requires": {
+ "domelementtype": "^2.3.0"
+ }
+ },
+ "domutils": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
+ "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "requires": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.1"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "enhanced-resolve": {
+ "version": "5.12.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
+ "requires": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ }
+ },
+ "entities": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA=="
+ },
+ "es-abstract": {
+ "version": "1.21.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
+ "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "es-set-tostringtag": "^2.0.1",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
+ "get-intrinsic": "^1.1.3",
+ "get-symbol-description": "^1.0.0",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has": "^1.0.3",
+ "has-property-descriptors": "^1.0.0",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.4",
+ "is-array-buffer": "^3.0.1",
+ "is-callable": "^1.2.7",
+ "is-negative-zero": "^2.0.2",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.2",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.10",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.2",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.4",
+ "regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
+ "typed-array-length": "^1.0.4",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.9"
+ }
+ },
+ "es-get-iterator": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+ "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "is-arguments": "^1.1.1",
+ "is-map": "^2.0.2",
+ "is-set": "^2.0.2",
+ "is-string": "^1.0.7",
+ "isarray": "^2.0.5",
+ "stop-iteration-iterator": "^1.0.0"
+ }
+ },
+ "es-set-tostringtag": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+ "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "eslint": {
+ "version": "8.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz",
+ "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==",
+ "requires": {
+ "@eslint/eslintrc": "^1.4.1",
+ "@humanwhocodes/config-array": "^0.11.8",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-config-next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.4.tgz",
+ "integrity": "sha512-r7n9V4/kkiDDVFfBwI3tviGUV/jUzGI0lY3JefxceYaU18gdk2kMgNPyhHobowu1+yHZpZi8iEzRtzeTrtGRLg==",
+ "requires": {
+ "@next/eslint-plugin-next": "13.1.4",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.42.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
+ "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
+ "requires": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.11.0",
+ "resolve": "^1.22.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-import-resolver-typescript": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz",
+ "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==",
+ "requires": {
+ "debug": "^4.3.4",
+ "enhanced-resolve": "^5.10.0",
+ "get-tsconfig": "^4.2.0",
+ "globby": "^13.1.2",
+ "is-core-module": "^2.10.0",
+ "is-glob": "^4.0.3",
+ "synckit": "^0.8.4"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
+ "requires": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.11",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ }
+ },
+ "slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
+ "requires": {
+ "debug": "^3.2.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.27.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
+ "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "array.prototype.flatmap": "^1.3.1",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.7",
+ "eslint-module-utils": "^2.7.4",
+ "has": "^1.0.3",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.values": "^1.1.6",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "requires": {
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.32.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz",
+ "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==",
+ "requires": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.8"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "requires": {}
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA=="
+ },
+ "espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+ },
+ "fast-xml-parser": {
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.14.tgz",
+ "integrity": "sha512-uKe7uxZ9DgNOmHfUmBdhkTBZcMMVxvQ3vELTxUpmotAqRxkpMayEiiQ4AQWTGAVyfzT4Dv79jaszLECWCYbd4w==",
+ "requires": {
+ "strnum": "^1.0.5"
+ }
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+ },
+ "focus-visible": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz",
+ "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ=="
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "fraction.js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-tsconfig": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.3.0.tgz",
+ "integrity": "sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ=="
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "globals": {
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globalyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
+ },
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "html-entities": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
+ "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
+ },
+ "htmlparser2": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
+ "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
+ "requires": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "entities": "^4.3.0"
+ }
+ },
+ "i": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q=="
+ },
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "internal-slot": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
+ "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+ "requires": {
+ "get-intrinsic": "^1.1.3",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "intl-messageformat": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.2.5.tgz",
+ "integrity": "sha512-AievYMN6WLLHwBeCTv4aRKG+w3ZNyZtkObwgsKk3Q7GNTq8zDRvDbJSBQkb2OPeVCcAKcIXvak9FF/bRNavoww==",
+ "requires": {
+ "@formatjs/ecma402-abstract": "1.14.3",
+ "@formatjs/fast-memoize": "1.2.7",
+ "@formatjs/icu-messageformat-parser": "2.1.14",
+ "tslib": "^2.4.0"
+ }
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-array-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
+ "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-set": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-weakmap": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA=="
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-weakset": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "js-sdsl": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
+ "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
+ "requires": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.3"
+ }
+ },
+ "language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
+ },
+ "language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "requires": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg=="
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "next": {
+ "version": "13.1.4",
+ "resolved": "https://registry.npmjs.org/next/-/next-13.1.4.tgz",
+ "integrity": "sha512-g0oBUU+tcOPKbXTVdsDO2adc6wd/ggqauHHysPQJxuIKqZ+fwICGJht0C5D5V0A/77eQDF5EFwNdAHkFvBDsog==",
+ "requires": {
+ "@next/env": "13.1.4",
+ "@next/swc-android-arm-eabi": "13.1.4",
+ "@next/swc-android-arm64": "13.1.4",
+ "@next/swc-darwin-arm64": "13.1.4",
+ "@next/swc-darwin-x64": "13.1.4",
+ "@next/swc-freebsd-x64": "13.1.4",
+ "@next/swc-linux-arm-gnueabihf": "13.1.4",
+ "@next/swc-linux-arm64-gnu": "13.1.4",
+ "@next/swc-linux-arm64-musl": "13.1.4",
+ "@next/swc-linux-x64-gnu": "13.1.4",
+ "@next/swc-linux-x64-musl": "13.1.4",
+ "@next/swc-win32-arm64-msvc": "13.1.4",
+ "@next/swc-win32-ia32-msvc": "13.1.4",
+ "@next/swc-win32-x64-msvc": "13.1.4",
+ "@swc/helpers": "0.4.14",
+ "caniuse-lite": "^1.0.30001406",
+ "postcss": "8.4.14",
+ "styled-jsx": "5.1.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "8.4.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ }
+ }
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
+ "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==",
+ "dev": true
+ },
+ "nodemailer": {
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz",
+ "integrity": "sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ },
+ "object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.hasown": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
+ "requires": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "object.values": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "open": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-srcset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+ "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+ },
+ "postcss": {
+ "version": "8.4.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
+ "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "postcss-focus-visible": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz",
+ "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==",
+ "requires": {
+ "postcss-selector-parser": "^6.0.9"
+ }
+ },
+ "postcss-import": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+ "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+ "requires": {
+ "camelcase-css": "^2.0.1"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+ "requires": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^1.10.2"
+ }
+ },
+ "postcss-nested": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
+ "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
+ "requires": {
+ "postcss-selector-parser": "^6.0.10"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+ },
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+ },
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-aria": {
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.22.0.tgz",
+ "integrity": "sha512-GA+qwnVVTvSirdhB/PsYPwix24vFDlGeK5Lk3zUgB9Q5VHnTfMMJ4+tyu9G38UR0clLQ5SAG1ArNjgzmhexQYg==",
+ "requires": {
+ "@react-aria/breadcrumbs": "^3.4.1",
+ "@react-aria/button": "^3.6.4",
+ "@react-aria/calendar": "^3.0.5",
+ "@react-aria/checkbox": "^3.7.1",
+ "@react-aria/combobox": "^3.4.4",
+ "@react-aria/datepicker": "^3.2.1",
+ "@react-aria/dialog": "^3.4.2",
+ "@react-aria/dnd": "^3.0.1",
+ "@react-aria/focus": "^3.10.1",
+ "@react-aria/gridlist": "^3.1.2",
+ "@react-aria/i18n": "^3.6.3",
+ "@react-aria/interactions": "^3.13.1",
+ "@react-aria/label": "^3.4.4",
+ "@react-aria/link": "^3.3.6",
+ "@react-aria/listbox": "^3.7.2",
+ "@react-aria/menu": "^3.7.1",
+ "@react-aria/meter": "^3.3.4",
+ "@react-aria/numberfield": "^3.3.4",
+ "@react-aria/overlays": "^3.12.1",
+ "@react-aria/progress": "^3.3.4",
+ "@react-aria/radio": "^3.4.2",
+ "@react-aria/searchfield": "^3.4.4",
+ "@react-aria/select": "^3.8.4",
+ "@react-aria/selection": "^3.12.1",
+ "@react-aria/separator": "^3.2.6",
+ "@react-aria/slider": "^3.2.4",
+ "@react-aria/ssr": "^3.4.1",
+ "@react-aria/switch": "^3.3.1",
+ "@react-aria/table": "^3.7.0",
+ "@react-aria/tabs": "^3.3.4",
+ "@react-aria/textfield": "^3.8.1",
+ "@react-aria/tooltip": "^3.3.4",
+ "@react-aria/utils": "^3.14.2",
+ "@react-aria/visually-hidden": "^3.6.1"
+ }
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "react-stately": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.20.0.tgz",
+ "integrity": "sha512-5011Pmn8d17d1kbl7ScnQw1z+tXKsmTwVsAqrTARdZdH6NBmVNHEMlybU1t3/3PfcVn5XoRYwWvCgeTNZtNb8w==",
+ "requires": {
+ "@react-stately/calendar": "^3.0.5",
+ "@react-stately/checkbox": "^3.3.2",
+ "@react-stately/collections": "^3.5.1",
+ "@react-stately/combobox": "^3.3.1",
+ "@react-stately/data": "^3.8.1",
+ "@react-stately/datepicker": "^3.2.1",
+ "@react-stately/dnd": "^3.0.1",
+ "@react-stately/list": "^3.6.1",
+ "@react-stately/menu": "^3.4.4",
+ "@react-stately/numberfield": "^3.3.1",
+ "@react-stately/overlays": "^3.4.4",
+ "@react-stately/radio": "^3.6.2",
+ "@react-stately/searchfield": "^3.3.4",
+ "@react-stately/select": "^3.3.4",
+ "@react-stately/selection": "^3.11.2",
+ "@react-stately/slider": "^3.2.4",
+ "@react-stately/table": "^3.7.0",
+ "@react-stately/tabs": "^3.2.4",
+ "@react-stately/toggle": "^3.4.4",
+ "@react-stately/tooltip": "^3.2.4",
+ "@react-stately/tree": "^3.4.1",
+ "@react-types/shared": "^3.16.0"
+ }
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "requires": {
+ "pify": "^2.3.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+ },
+ "regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
+ "sanitize-html": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.8.1.tgz",
+ "integrity": "sha512-qK5neD0SaMxGwVv5txOYv05huC3o6ZAA4h5+7nJJgWMNFUNRjcjLO6FpwAtKzfKCZ0jrG6xTk6eVFskbvOGblg==",
+ "requires": {
+ "deepmerge": "^4.2.2",
+ "escape-string-regexp": "^4.0.0",
+ "htmlparser2": "^8.0.0",
+ "is-plain-object": "^5.0.0",
+ "parse-srcset": "^1.0.2",
+ "postcss": "^8.3.11"
+ }
+ },
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "srtparsejs": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/srtparsejs/-/srtparsejs-1.0.8.tgz",
+ "integrity": "sha512-xXyMHb8XWIFEYaLYa/RqXOXYdpxnk5VdonBEuv0CRfOxS8FVVeo4ZfPeUuhL3IRUQPClUxTI2oKPC0comyIPOA=="
+ },
+ "stop-iteration-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+ "requires": {
+ "internal-slot": "^1.0.4"
+ }
+ },
+ "string.prototype.matchall": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+ },
+ "strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+ },
+ "styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "requires": {
+ "client-only": "0.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "synckit": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz",
+ "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
+ "requires": {
+ "@pkgr/utils": "^2.3.1",
+ "tslib": "^2.4.0"
+ }
+ },
+ "tailwindcss": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
+ "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
+ "requires": {
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "color-name": "^1.1.4",
+ "detective": "^5.2.1",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "lilconfig": "^2.0.6",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.18",
+ "postcss-import": "^14.1.0",
+ "postcss-js": "^4.0.0",
+ "postcss-load-config": "^3.1.4",
+ "postcss-nested": "6.0.0",
+ "postcss-selector-parser": "^6.0.10",
+ "postcss-value-parser": "^4.2.0",
+ "quick-lru": "^5.1.1",
+ "resolve": "^1.22.1"
+ }
+ },
+ "tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "tiny-glob": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
+ "requires": {
+ "globalyzer": "0.1.0",
+ "globrex": "^0.1.2"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "requires": {
+ "tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ }
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
+ },
+ "typed-array-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+ "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "is-typed-array": "^1.1.9"
+ }
+ },
+ "typescript": {
+ "version": "4.9.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
+ "peer": true
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-collection": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+ "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+ "requires": {
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-weakmap": "^2.0.1",
+ "is-weakset": "^2.0.1"
+ }
+ },
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..4fd812e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "thereactshow",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "browserslist": "defaults, not ie <= 11",
+ "dependencies": {
+ "@extractus/feed-extractor": "^6.2.1",
+ "@headlessui/react": "^1.7.7",
+ "@heroicons/react": "^2.0.13",
+ "@next/font": "13.1.4",
+ "@tailwindcss/forms": "^0.5.3",
+ "@tailwindcss/line-clamp": "^0.4.2",
+ "@tailwindcss/typography": "^0.5.7",
+ "clsx": "^1.2.1",
+ "eslint": "8.32.0",
+ "eslint-config-next": "13.1.4",
+ "focus-visible": "^5.2.0",
+ "i": "^0.3.7",
+ "next": "13.1.4",
+ "nodemailer": "^6.9.1",
+ "postcss-focus-visible": "^6.0.4",
+ "react": "18.2.0",
+ "react-aria": "^3.19.0",
+ "react-dom": "18.2.0",
+ "react-stately": "^3.17.0",
+ "sanitize-html": "^2.8.1",
+ "srtparsejs": "^1.0.8"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.13",
+ "postcss": "^8.4.21",
+ "tailwindcss": "^3.2.4"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..6573c25
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,9 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ 'postcss-focus-visible': {
+ replaceWith: '[data-focus-visible-added]',
+ },
+ autoprefixer: {},
+ },
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/files/foundations-high-performance-react-sample-export.pdf b/public/files/foundations-high-performance-react-sample-export.pdf
new file mode 100644
index 0000000..e69de29
diff --git a/public/next.svg b/public/next.svg
new file mode 100644
index 0000000..5174b28
--- /dev/null
+++ b/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/thirteen.svg b/public/thirteen.svg
new file mode 100644
index 0000000..8977c1b
--- /dev/null
+++ b/public/thirteen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
new file mode 100644
index 0000000..d2f8422
--- /dev/null
+++ b/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/(extra)/book-success/head.jsx b/src/app/(extra)/book-success/head.jsx
new file mode 100644
index 0000000..be00f21
--- /dev/null
+++ b/src/app/(extra)/book-success/head.jsx
@@ -0,0 +1,10 @@
+import StandardHead from '@/components/StandardHead';
+
+export default async function Head({ params }) {
+ return (
+
+ );
+};
diff --git a/src/app/(extra)/book-success/page.jsx b/src/app/(extra)/book-success/page.jsx
new file mode 100644
index 0000000..b3c0d85
--- /dev/null
+++ b/src/app/(extra)/book-success/page.jsx
@@ -0,0 +1,30 @@
+import JustifiedSection from '@/components/JustifiedSection'
+
+export default async function Page({ params }) {
+ return (
+ <>
+
+
+
+ >
+ )
+}
diff --git a/src/app/(extra)/book/head.jsx b/src/app/(extra)/book/head.jsx
new file mode 100644
index 0000000..fdfa574
--- /dev/null
+++ b/src/app/(extra)/book/head.jsx
@@ -0,0 +1,10 @@
+import StandardHead from '@/components/StandardHead';
+
+export default async function Head({ params }) {
+ return (
+
+ );
+};
diff --git a/src/app/(extra)/book/page.jsx b/src/app/(extra)/book/page.jsx
new file mode 100644
index 0000000..0c43bb2
--- /dev/null
+++ b/src/app/(extra)/book/page.jsx
@@ -0,0 +1,191 @@
+import Head from 'next/head'
+import Image from 'next/image'
+
+import BookPurchaseCTA from '@/components/BookPurchaseCTA'
+import BookTitle from '@/components/BookTitle'
+import JustifiedSection from '@/components/JustifiedSection'
+import JustifiedSectionReversed from '@/components/JustifiedSectionReversed'
+import { Box } from '@/components/Components'
+
+import bookImage from '@/images/foundations.png'
+import authorImage from '@/images/headshot.jpg'
+
+const chapters = [
+ 'Preface',
+ 'Acknowledgments',
+ 'Introduction',
+ 'Components of React',
+ 'Markup in JavaScript: JSX',
+ 'Getting Ready to Render with createElement',
+ 'Render: Putting Elements on the Screen',
+ 'Reconciliation, or How React Diffs',
+ 'Fibers: Splitting up Render',
+ 'Putting it all together',
+ 'Conclusion'
+];
+
+export default async function Page({ params }) {
+ return (
+ <>
+
+ Foundations of High-Performance React
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ It All Starts With Understanding The Foundation
+
+
+ It can be hard to create high-performance React applications without having a firm understanding of the foundations. In this book you'll create your own version of React that will give you a deep insight into the performance of React itself.
+
+
+
+
+
+
+
+
+
+ React performance can be a mystery. When your app performance degrades it isn't always clear where to look or how to fix the issue. Foundations of High-Performance React Applications is a mini-book exploring what makes React itself behave the way it does. Armed with this knowledge you will be better equipped to build your own high-performance React applications and correctly diagnose bottlenecks.
+
+
+ Beyond diagnosing bottlenecks, this book teaches the fundamentals of how React renders. By the end of the book you will not only know exactly how React works internally but you’ll also have a deep understanding of how to build React applications that take full advantage of the strengths of the React architecture.
+
+
+ The book takes you through the process of creating your own “mini” version of React that is based on the same heuristic algorithms React is. You will not only learn how React renders but be able to see it demonstrated in the included source code.
+
+
+
+
+ {chapters.map((c, i) => (
+
+ {c}
+
+ ))}
+
+
+
+
+
+ Workcation
+
+
+
+
+
+
+
+
+
+
+
+
+ “I might be new to React but it was entertaining and clearly communicated.”
+
+
+
+
+
+
+
+
+
+
+
+
+
+ About the Author
+
+
+ )} bg="gray-800">
+
+ Thomas Hintz has been a web developer for two decades and has been in the software industry for 13 years as an engineer and engineering manager. Creator of the 3L Operating System, a Lisp Compiler, web server, web sockets library, and much more.
+
+
+ Author of wildly popular essays like “Work When You Feel Like It”, creator of the fastest websockets server library, and serial speaker at bay-area software events.
+
+
+ >
+ )
+}
diff --git a/src/app/(extra)/layout.jsx b/src/app/(extra)/layout.jsx
new file mode 100644
index 0000000..9a53b19
--- /dev/null
+++ b/src/app/(extra)/layout.jsx
@@ -0,0 +1,10 @@
+import NavBar from '@/components/NavBar'
+
+export default function ExtraLayout({children}) {
+ return (
+
+
+ {children}
+
+ );
+}
diff --git a/src/app/(main)/contact-success/page.jsx b/src/app/(main)/contact-success/page.jsx
new file mode 100644
index 0000000..bed3b67
--- /dev/null
+++ b/src/app/(main)/contact-success/page.jsx
@@ -0,0 +1,18 @@
+import { Container } from '@/components/Container'
+
+export default async function Page({}) {
+ return (
+
+
+
+ Contact Us
+
+
+
+ Message sent successfully! Thank you!
+
+
+
+
+ );
+}
diff --git a/src/app/(main)/contact-us/head.jsx b/src/app/(main)/contact-us/head.jsx
new file mode 100644
index 0000000..3413edd
--- /dev/null
+++ b/src/app/(main)/contact-us/head.jsx
@@ -0,0 +1,10 @@
+import StandardHead from '@/components/StandardHead';
+
+export default async function Head({ params }) {
+ return (
+
+ );
+};
diff --git a/src/app/(main)/contact-us/page.jsx b/src/app/(main)/contact-us/page.jsx
new file mode 100644
index 0000000..d14b394
--- /dev/null
+++ b/src/app/(main)/contact-us/page.jsx
@@ -0,0 +1,155 @@
+import { redirect } from 'next/navigation';
+import nodemailer from 'nodemailer';
+import sanitizeHtml from 'sanitize-html';
+
+import { Container } from '@/components/Container'
+
+export default async function Page({ searchParams }) {
+ const firstName = searchParams['first-name'];
+ const lastName = searchParams['last-name'];
+ const email = searchParams['email'];
+ const message = searchParams['message'];
+ const submitted = firstName || lastName || email || message;
+ const valid = submitted && firstName && lastName && email && message;
+ let emailSentSuccessfully = false;
+
+ if (valid) {
+ const transporter = nodemailer.createTransport({
+ host: process.env.CONTACT_HOST,
+ port: 587,
+ secure: false, // true for 465, false for other ports
+ auth: {
+ user: process.env.CONTACT_USER,
+ pass: process.env.CONTACT_PASSWORD,
+ },
+ });
+
+ // send mail with defined transport object
+ await transporter.sendMail({
+ from: `"${firstName} ${lastName}" <${process.env.CONTACT_FROM_ADDRESS}>`,
+ replyTo: `"${firstName} ${lastName}" <${email}>`,
+ to: process.env.CONTACT_TO_ADDRESS,
+ subject: "The React Show - Form Submission",
+ text: message,
+ html: sanitizeHtml(message, {
+ allowedTags: [],
+ allowedAttributes: {}
+ }),
+ });
+ redirect('/contact-success')
+ }
+
+ return (
+
+
+
+ Contact Us
+
+ {valid && !emailSentSuccessfully && (
+
+
+ Unable to send message. Please go back and reload the page and try again or try again later. Sorry!
+
+
+ )}
+ {!valid && (
+
+
+ Like the show? Want to hear us talk about something specific? Or just want to say hi? We’d love to hear from you!
+
+
+
+ )}
+
+
+ );
+}
diff --git a/src/app/(main)/head.jsx b/src/app/(main)/head.jsx
new file mode 100644
index 0000000..fa9918f
--- /dev/null
+++ b/src/app/(main)/head.jsx
@@ -0,0 +1,10 @@
+import StandardHead from '@/components/StandardHead';
+
+export default function Head({ params }) {
+ return (
+
+ );
+}
diff --git a/src/app/(main)/layout.jsx b/src/app/(main)/layout.jsx
new file mode 100644
index 0000000..1b91ae4
--- /dev/null
+++ b/src/app/(main)/layout.jsx
@@ -0,0 +1,280 @@
+import { Fragment, useId } from 'react'
+import Image from 'next/image'
+import Link from 'next/link'
+import clsx from 'clsx'
+
+import NavBar from '@/components/NavBar'
+import posterImage from '@/images/poster.png'
+
+function randomBetween(min, max, seed = 1) {
+ return () => {
+ let rand = Math.sin(seed++) * 10000
+ rand = rand - Math.floor(rand)
+ return Math.floor(rand * (max - min + 1) + min)
+ }
+}
+
+function Waveform(props) {
+ let id = useId()
+ let bars = {
+ total: 100,
+ width: 2,
+ gap: 2,
+ minHeight: 40,
+ maxHeight: 100,
+ }
+
+ let barHeights = Array.from(
+ { length: bars.total },
+ randomBetween(bars.minHeight, bars.maxHeight)
+ )
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {Array.from({ length: bars.total }, (_, index) => (
+
+ ))}
+
+
+
+
+ )
+}
+
+function TinyWaveFormIcon({ colors = [], ...props }) {
+ return (
+
+
+
+
+ )
+}
+
+function SpotifyIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function ApplePodcastIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function OvercastIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function RSSIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function PersonIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function AboutSection(props) {
+ /* let [isExpanded, setIsExpanded] = useState(false) */
+ const isExpanded = false
+ const setIsExpanded = {}
+ /* onClick={() => setIsExpanded(true)} */
+ return (
+
+
+
+ About
+
+
+ In this show, Thomas digs deep to understand React and how best to utilize it while discussing real world experiences with: React, programming, and software engineering. Tune in every Friday (usually) to hear the latest in the React community.
+
+
+ )
+}
+
+function Layout({ children }) {
+ let hosts = ['Thomas Hintz']
+
+ return (
+ <>
+
+
+
+ {children}
+
+
+ >
+ )
+}
+
+export default function MainLayout({children}) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/app/(main)/loading.jsx b/src/app/(main)/loading.jsx
new file mode 100644
index 0000000..f5eaa07
--- /dev/null
+++ b/src/app/(main)/loading.jsx
@@ -0,0 +1,8 @@
+export default function Loading() {
+ // You can add any UI inside Loading, including a Skeleton.
+ return (
+ <>
+ Loading...
+ >
+ )
+}
diff --git a/src/app/(main)/page.jsx b/src/app/(main)/page.jsx
new file mode 100644
index 0000000..981fead
--- /dev/null
+++ b/src/app/(main)/page.jsx
@@ -0,0 +1,245 @@
+import { Suspense } from "react";
+
+import Link from 'next/link'
+
+import { ArrowLongLeftIcon, ArrowLongRightIcon } from '@heroicons/react/20/solid'
+
+import { Container } from '@/components/Container'
+import { FormattedDate } from '@/components/FormattedDate'
+
+import { getEpisodes } from '@/data/episodes'
+
+import Player from '@/app/Player'
+
+function EpisodeEntry({ episode }) {
+ let date = new Date(episode.published)
+
+ return (
+
+
+
+
+ {episode.title}
+
+
+
+ {episode.description}
+
+
+
+
+ Listen
+
+
+
+ /
+
+
+ Show notes
+
+ {episode?.transcript &&
+ (
+ <>
+
+ /
+
+
+ Transcript
+
+ >
+ )}
+
+
+
+
+ )
+}
+
+function pageClasses(page, i) {
+ return `inline-flex items-center border-t-2 border-transparent px-4 pt-4 text-sm font-medium text-gray-500 hover:border-gray-300 hover:text-gray-700 ${page === i ? 'border-indigo-500 text-indigo-600': ''}`
+};
+
+async function Content({ page }) {
+ const episodes = await getEpisodes()
+ await new Promise(resolve => setTimeout(resolve, 1000));
+ const pages = Math.ceil(episodes.length / 10);
+ return (
+ <>
+
+ {episodes.slice((page - 1) * 10, page * 10).map((episode) => (
+
+ ))}
+
+
+
+
+
+ {page > 2 && (
+
+ 1
+
+ )}
+ {page > 2 && (
+
+ ...
+
+ )}
+ {page > 1 && (
+
+ {page - 1}
+
+ )}
+
+ {page}
+
+ {page < pages && (
+
+ {page + 1}
+
+ )}
+ {(page + 1) < pages && (
+
+ ...
+
+ )}
+ {(page + 1) < pages && (
+
+ {pages}
+
+ )}
+
+
+
= pages ? 'pointer-events-none' : ''}`}
+ >
+ Next
+
+
+
+
+
+ >
+ );
+}
+
+function Skeleton({ width, height, className, color }) {
+ const w = width ? '' : 'w-full';
+ const c = color ? color : 'bg-slate-200';
+ return (
+
+ );
+};
+
+function EpisodeEntryLoading() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /
+
+
+
+
+
+
+ )
+}
+
+function Loading() {
+ // You can add any UI inside Loading, including a Skeleton.
+ return (
+
+ {[0, 1, 2, 3, 4, 5, 6, 7].map((i) => (
+
+ ))}
+
+ );
+}
+
+export default async function Home({ searchParams }) {
+ return (
+ <>
+
+
+
+ Episodes
+
+
+ }>
+
+
+
+ >
+ )
+}
diff --git a/src/app/(main)/podcast/[slug]/chapters.json b/src/app/(main)/podcast/[slug]/chapters.json
new file mode 100644
index 0000000..dd964a3
--- /dev/null
+++ b/src/app/(main)/podcast/[slug]/chapters.json
@@ -0,0 +1 @@
+{"version":"1.1.0","chapters":[{"startTime":2.0,"title":"Introduction to this episode."},{"startTime":181.0,"title":"Goal: build a weather app using React server components."},{"startTime":498.0,"title":"Data and data fetching is one of the biggest places where things could change. "},{"startTime":673.0,"title":"Server Side Rendering on the Server."},{"startTime":941.0,"title":"Fetch load and process data in a much more natural and efficient way with responsive clients."},{"startTime":1060.0,"title":"Adding client side interactivity."},{"startTime":1216.0,"title":"[Ad] Dive deep into the motivations and mechanics behind some very successful people.","url":"https://www.forwarddrinkingpodcast.com","img":"https://storage.buzzsprout.com/variants/jzp1bmnjrzryk78pb7iqev70j9dg/6861a7550229613e3387373f20ad829ba4bc5767dd8eb92e70a0abe304d4e657"},{"startTime":1259.86,"title":"(Cont.) Adding client side interactivity."},{"startTime":1391.86,"title":"Passing data from the client to the server. "},{"startTime":1537.86,"title":"What’s new in the react server component world. "},{"startTime":1770.86,"title":"React server components will fundamentally change how we’re going to fetch data and react. "},{"startTime":1907.86,"title":"server components can access server-side data sources directly, such as databases, file systems, and micro-services. "}]}
\ No newline at end of file
diff --git a/src/app/(main)/podcast/[slug]/head.jsx b/src/app/(main)/podcast/[slug]/head.jsx
new file mode 100644
index 0000000..88a8b97
--- /dev/null
+++ b/src/app/(main)/podcast/[slug]/head.jsx
@@ -0,0 +1,13 @@
+import { getEpisode } from '@/data/episodes'
+
+import StandardHead from '@/components/StandardHead';
+
+export default async function Head({ params }) {
+ const episode = await getEpisode({ episodeSlug: params.slug })
+ return (
+
+ );
+};
diff --git a/src/app/(main)/podcast/[slug]/page.jsx b/src/app/(main)/podcast/[slug]/page.jsx
new file mode 100644
index 0000000..534901d
--- /dev/null
+++ b/src/app/(main)/podcast/[slug]/page.jsx
@@ -0,0 +1,104 @@
+/* import chaptersStatic from './chapters.json' assert { type: 'json' }; */
+
+import Head from 'next/head'
+
+import { Container } from '@/components/Container'
+import { FormattedDate } from '@/components/FormattedDate'
+import { PlayButtonClient } from '@/components/player/PlayButtonClient'
+import Player from '@/app/Player'
+
+import { getEpisode } from '@/data/episodes'
+
+function parseTime(time) {
+ const stepOne = time.split(',');
+ const hms = stepOne.length > 0 && stepOne[0].split(':')
+ const h = parseInt(hms[0], 10);
+ const m = parseInt(hms[1], 10);
+ const s = parseInt(hms[2], 10);
+ return (h * 3600) + (m * 60) + s;
+}
+
+function humanTime(time) {
+ const stepOne = time.split(',');
+ return stepOne.length > 0 ? stepOne[0] : '';
+}
+
+export default async function Page({ params }) {
+ const episode = await getEpisode({ episodeSlug: params.slug })
+ const chaptersRes = episode?.chapters && await fetch(episode.chapters, { cache: 'no-store' });
+ /* const { chapters } = chaptersStatic */
+ const { chapters } = chaptersRes ? await chaptersRes.json() : { chapters: null }
+ let chapterOffsets = [[0, 0]]
+ if (chapters) {
+ chapters.reduce(({ startTime: prevStartTime, title: prevTitle, acc }, { title, startTime }) => {
+ const containsAd = prevTitle.includes('[Ad]')
+ if (containsAd) {
+ chapterOffsets.push([prevStartTime, acc + (startTime - prevStartTime)])
+ }
+ return { startTime, title, acc: containsAd ? acc + (startTime - prevStartTime) : acc }
+ }, { startTime: 0, title: '', acc: 0 })
+ }
+ chapterOffsets = chapterOffsets.reverse()
+ let date = new Date(episode.published)
+
+ let audioPlayerData = {
+ title: episode.title,
+ audio: {
+ src: episode.audio?.src,
+ type: episode.audio?.type,
+ },
+ link: `/${episode.slug}`,
+ }
+
+ return (
+ <>
+
+ {`${episode.title} - Their Side`}
+
+
+
+
+
+
+
+ {episode?.transcript && (
+ <>
+
+ Transcript
+
+ {episode.transcript.map(({ id, startTime, endTime, text }) => (
+
+ parseTime(startTime) > start)[1]}
+ endTime={parseTime(endTime) + chapterOffsets.find(([start]) => parseTime(startTime) > start)[1]} />
+ {humanTime(startTime)} {text}
+
+ ))}
+
+ >
+ )}
+
+
+ >
+ )
+}
diff --git a/src/app/Player.jsx b/src/app/Player.jsx
new file mode 100644
index 0000000..e76f9a3
--- /dev/null
+++ b/src/app/Player.jsx
@@ -0,0 +1,52 @@
+'use client'
+import { useMemo } from 'react'
+
+import { useAudioPlayer } from '@/components/AudioProvider'
+
+function PlayPauseIcon({ playing, ...props }) {
+ return (
+
+ {playing ? (
+
+ ) : (
+
+ )}
+
+ )
+}
+
+export default function Player({ episode, startTime, endTime, children }) {
+ let audioPlayerData = useMemo(
+ () => ({
+ title: episode.title,
+ audio: {
+ src: episode.audio.src,
+ type: episode.audio.type,
+ },
+ link: `/${episode.id}`,
+ }),
+ [episode]
+ )
+ let player = useAudioPlayer(audioPlayerData)
+ const withinTimeframe = player.currentTime >= startTime && player.currentTime <= endTime
+ return (
+ { startTime ? (withinTimeframe ? player.toggle() : player.play(startTime)) : player.toggle(); }}
+ type="button"
+ className={`${startTime ? 'inline-flex mr-2': 'flex'} items-center text-sm font-bold leading-6 text-pink-500 hover:text-pink-700 active:text-pink-900`}
+ aria-label={`${player.playing ? 'Pause' : 'Play'} episode ${
+ episode.title
+ }`}
+ >
+
+ {children}
+
+ );
+}
diff --git a/src/app/globals.css b/src/app/globals.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/app/globals.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/app/head.jsx b/src/app/head.jsx
new file mode 100644
index 0000000..5ad797f
--- /dev/null
+++ b/src/app/head.jsx
@@ -0,0 +1,10 @@
+export default function Head() {
+ return (
+ <>
+ Create Next App
+
+
+
+ >
+ )
+}
diff --git a/src/app/layout.jsx b/src/app/layout.jsx
new file mode 100644
index 0000000..ea7cc3a
--- /dev/null
+++ b/src/app/layout.jsx
@@ -0,0 +1,19 @@
+import './globals.css';
+
+import { AudioPlayer } from '@/components/player/AudioPlayer'
+import { AudioProvider } from '@/components/AudioProvider'
+
+export default function RootLayout({children}) {
+ return (
+
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/src/app/page.module.css b/src/app/page.module.css
new file mode 100644
index 0000000..4732b55
--- /dev/null
+++ b/src/app/page.module.css
@@ -0,0 +1,271 @@
+.main {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ padding: 6rem;
+ min-height: 100vh;
+}
+
+.description {
+ display: inherit;
+ justify-content: inherit;
+ align-items: inherit;
+ font-size: 0.85rem;
+ max-width: var(--max-width);
+ width: 100%;
+ z-index: 2;
+ font-family: var(--font-mono);
+}
+
+.description a {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+}
+
+.description p {
+ position: relative;
+ margin: 0;
+ padding: 1rem;
+ background-color: rgba(var(--callout-rgb), 0.5);
+ border: 1px solid rgba(var(--callout-border-rgb), 0.3);
+ border-radius: var(--border-radius);
+}
+
+.code {
+ font-weight: 700;
+ font-family: var(--font-mono);
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(33%, auto));
+ width: var(--max-width);
+ max-width: 100%;
+}
+
+.card {
+ padding: 1rem 1.2rem;
+ border-radius: var(--border-radius);
+ background: rgba(var(--card-rgb), 0);
+ border: 1px solid rgba(var(--card-border-rgb), 0);
+ transition: background 200ms, border 200ms;
+}
+
+.card span {
+ display: inline-block;
+ transition: transform 200ms;
+}
+
+.card h2 {
+ font-weight: 600;
+ margin-bottom: 0.7rem;
+}
+
+.card p {
+ margin: 0;
+ opacity: 0.6;
+ font-size: 0.9rem;
+ line-height: 1.5;
+ max-width: 34ch;
+}
+
+.center {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ padding: 4rem 0;
+}
+
+.center::before {
+ background: var(--secondary-glow);
+ border-radius: 50%;
+ width: 480px;
+ height: 360px;
+ margin-left: -400px;
+}
+
+.center::after {
+ background: var(--primary-glow);
+ width: 240px;
+ height: 180px;
+ z-index: -1;
+}
+
+.center::before,
+.center::after {
+ content: '';
+ left: 50%;
+ position: absolute;
+ filter: blur(45px);
+ transform: translateZ(0);
+}
+
+.logo,
+.thirteen {
+ position: relative;
+}
+
+.thirteen {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 75px;
+ height: 75px;
+ padding: 25px 10px;
+ margin-left: 16px;
+ transform: translateZ(0);
+ border-radius: var(--border-radius);
+ overflow: hidden;
+ box-shadow: 0px 2px 8px -1px #0000001a;
+}
+
+.thirteen::before,
+.thirteen::after {
+ content: '';
+ position: absolute;
+ z-index: -1;
+}
+
+/* Conic Gradient Animation */
+.thirteen::before {
+ animation: 6s rotate linear infinite;
+ width: 200%;
+ height: 200%;
+ background: var(--tile-border);
+}
+
+/* Inner Square */
+.thirteen::after {
+ inset: 0;
+ padding: 1px;
+ border-radius: var(--border-radius);
+ background: linear-gradient(
+ to bottom right,
+ rgba(var(--tile-start-rgb), 1),
+ rgba(var(--tile-end-rgb), 1)
+ );
+ background-clip: content-box;
+}
+
+/* Enable hover only on non-touch devices */
+@media (hover: hover) and (pointer: fine) {
+ .card:hover {
+ background: rgba(var(--card-rgb), 0.1);
+ border: 1px solid rgba(var(--card-border-rgb), 0.15);
+ }
+
+ .card:hover span {
+ transform: translateX(4px);
+ }
+}
+
+@media (prefers-reduced-motion) {
+ .thirteen::before {
+ animation: none;
+ }
+
+ .card:hover span {
+ transform: none;
+ }
+}
+
+/* Mobile and Tablet */
+@media (max-width: 1023px) {
+ .content {
+ padding: 4rem;
+ }
+
+ .grid {
+ grid-template-columns: 1fr;
+ margin-bottom: 120px;
+ max-width: 320px;
+ text-align: center;
+ }
+
+ .card {
+ padding: 1rem 2.5rem;
+ }
+
+ .card h2 {
+ margin-bottom: 0.5rem;
+ }
+
+ .center {
+ padding: 8rem 0 6rem;
+ }
+
+ .center::before {
+ transform: none;
+ height: 300px;
+ }
+
+ .description {
+ font-size: 0.8rem;
+ }
+
+ .description a {
+ padding: 1rem;
+ }
+
+ .description p,
+ .description div {
+ display: flex;
+ justify-content: center;
+ position: fixed;
+ width: 100%;
+ }
+
+ .description p {
+ align-items: center;
+ inset: 0 0 auto;
+ padding: 2rem 1rem 1.4rem;
+ border-radius: 0;
+ border: none;
+ border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
+ background: linear-gradient(
+ to bottom,
+ rgba(var(--background-start-rgb), 1),
+ rgba(var(--callout-rgb), 0.5)
+ );
+ background-clip: padding-box;
+ backdrop-filter: blur(24px);
+ }
+
+ .description div {
+ align-items: flex-end;
+ pointer-events: none;
+ inset: auto 0 0;
+ padding: 2rem;
+ height: 200px;
+ background: linear-gradient(
+ to bottom,
+ transparent 0%,
+ rgb(var(--background-end-rgb)) 40%
+ );
+ z-index: 1;
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .vercelLogo {
+ filter: invert(1);
+ }
+
+ .logo,
+ .thirteen img {
+ filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
+ }
+}
+
+@keyframes rotate {
+ from {
+ transform: rotate(360deg);
+ }
+ to {
+ transform: rotate(0deg);
+ }
+}
diff --git a/src/components/AudioProvider.jsx b/src/components/AudioProvider.jsx
new file mode 100644
index 0000000..6747790
--- /dev/null
+++ b/src/components/AudioProvider.jsx
@@ -0,0 +1,139 @@
+'use client'
+
+import { createContext, useContext, useMemo, useReducer, useRef } from 'react'
+
+const AudioPlayerContext = createContext()
+
+const reducers = {
+ SET_META(state, action) {
+ return { ...state, meta: action.payload }
+ },
+ PLAY(state, _action) {
+ return { ...state, playing: true }
+ },
+ PAUSE(state, _action) {
+ return { ...state, playing: false }
+ },
+ TOGGLE_MUTE(state, _action) {
+ return { ...state, muted: !state.muted }
+ },
+ SET_CURRENT_TIME(state, action) {
+ return { ...state, currentTime: action.payload }
+ },
+ SET_DURATION(state, action) {
+ return { ...state, duration: action.payload }
+ },
+}
+
+function audioReducer(state, action) {
+ return reducers[action.type](state, action)
+}
+
+export function AudioProvider({ children }) {
+ let [state, dispatch] = useReducer(audioReducer, {
+ playing: false,
+ muted: false,
+ duration: 0,
+ currentTime: 0,
+ meta: null,
+ })
+ let playerRef = useRef(null)
+
+ let actions = useMemo(() => {
+ return {
+ play(data, startTime) {
+ if (data) {
+ dispatch({ type: 'SET_META', payload: data })
+
+ if (playerRef.current.currentSrc !== data.audio.src) {
+ let playbackRate = playerRef.current.playbackRate
+ playerRef.current.src = data.audio.src
+ playerRef.current.load()
+ playerRef.current.pause()
+ playerRef.current.playbackRate = playbackRate
+ playerRef.currentTime = 0
+ }
+ }
+
+ if (startTime) {
+ playerRef.current.currentTime = startTime
+ }
+ playerRef.current.play()
+ },
+ pause() {
+ playerRef.current.pause()
+ },
+ toggle(data) {
+ this.isPlaying(data) ? actions.pause() : actions.play(data)
+ },
+ seekBy(amount) {
+ playerRef.current.currentTime += amount
+ },
+ seek(time) {
+ playerRef.current.currentTime = time
+ },
+ playbackRate(rate) {
+ playerRef.current.playbackRate = rate
+ },
+ toggleMute() {
+ dispatch({ type: 'TOGGLE_MUTE' })
+ },
+ isPlaying(data) {
+ return data
+ ? state.playing && playerRef.current.currentSrc === data.audio.src
+ : state.playing
+ },
+ }
+ }, [state.playing])
+
+ let api = useMemo(() => ({ ...state, ...actions }), [state, actions])
+
+ return (
+ <>
+
+ {children}
+
+ dispatch({ type: 'PLAY' })}
+ onPause={() => dispatch({ type: 'PAUSE' })}
+ onTimeUpdate={(event) => {
+ dispatch({
+ type: 'SET_CURRENT_TIME',
+ payload: Math.floor(event.target.currentTime),
+ })
+ }}
+ onDurationChange={(event) => {
+ dispatch({
+ type: 'SET_DURATION',
+ payload: Math.floor(event.target.duration),
+ })
+ }}
+ muted={state.muted}
+ />
+ >
+ )
+}
+
+export function useAudioPlayer(data) {
+ let player = useContext(AudioPlayerContext)
+
+ return useMemo(
+ () => ({
+ ...player,
+ play(startTime) {
+ player.play(data, startTime)
+ },
+ toggle() {
+ player.toggle(data)
+ },
+ get playing() {
+ return player.isPlaying(data)
+ },
+ get currentTime() {
+ return player.currentTime
+ }
+ }),
+ [player, data]
+ )
+}
diff --git a/src/components/BookPurchaseCTA.jsx b/src/components/BookPurchaseCTA.jsx
new file mode 100644
index 0000000..1aa15ed
--- /dev/null
+++ b/src/components/BookPurchaseCTA.jsx
@@ -0,0 +1,19 @@
+import CenteredDarkPanel from '@/components/CenteredDarkPanel'
+
+export default function BookPurchaseCTA() {
+ return (
+ <>
+
+
+ $11.99
+
+
+ DRM-free Kindle, ePub, & PDF downloads.
+
+
+ >
+ );
+}
diff --git a/src/components/BookTitle.jsx b/src/components/BookTitle.jsx
new file mode 100644
index 0000000..8e55472
--- /dev/null
+++ b/src/components/BookTitle.jsx
@@ -0,0 +1,7 @@
+export default function BookTitle({ children }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/components/CenteredDarkPanel.jsx b/src/components/CenteredDarkPanel.jsx
new file mode 100644
index 0000000..fac5b47
--- /dev/null
+++ b/src/components/CenteredDarkPanel.jsx
@@ -0,0 +1,43 @@
+export default function CenteredDarkPanel({ title, children, buttonText, id, href }) {
+ return (
+
+
+
+
+ {title}
+
+ {children}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/Components.jsx b/src/components/Components.jsx
new file mode 100644
index 0000000..391491e
--- /dev/null
+++ b/src/components/Components.jsx
@@ -0,0 +1,8 @@
+export function Box({ children, ...props }) {
+ const classNames = Object.entries(props).reduce((acc, [k]) => `${acc} ${k}`, '')
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/components/Container.jsx b/src/components/Container.jsx
new file mode 100644
index 0000000..79aaf2e
--- /dev/null
+++ b/src/components/Container.jsx
@@ -0,0 +1,13 @@
+import clsx from 'clsx'
+
+export function Container({ className, children, ...props }) {
+ return (
+
+ )
+}
diff --git a/src/components/FormattedDate.jsx b/src/components/FormattedDate.jsx
new file mode 100644
index 0000000..f9af04b
--- /dev/null
+++ b/src/components/FormattedDate.jsx
@@ -0,0 +1,16 @@
+const dateFormatter = new Intl.DateTimeFormat('en-US', {
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric',
+})
+
+export function FormattedDate({ date, ...props }) {
+ if (date instanceof Date && !isNaN(date.valueOf())) {
+ return (
+
+ {dateFormatter.format(date)}
+
+ )
+ }
+ return null;
+}
diff --git a/src/components/HeadTags.jsx b/src/components/HeadTags.jsx
new file mode 100644
index 0000000..e89f216
--- /dev/null
+++ b/src/components/HeadTags.jsx
@@ -0,0 +1,8 @@
+export default function HeadTags() {
+ return (
+ <>
+
+
+ >
+ )
+};
diff --git a/src/components/JustifiedSection.jsx b/src/components/JustifiedSection.jsx
new file mode 100644
index 0000000..5cf0efd
--- /dev/null
+++ b/src/components/JustifiedSection.jsx
@@ -0,0 +1,14 @@
+export default function JustifiedSection({ title, children, bg = 'white' }) {
+ return (
+
+
+
+ {title}
+
+
+ {children}
+
+
+
+ )
+}
diff --git a/src/components/JustifiedSectionReversed.jsx b/src/components/JustifiedSectionReversed.jsx
new file mode 100644
index 0000000..348c8ca
--- /dev/null
+++ b/src/components/JustifiedSectionReversed.jsx
@@ -0,0 +1,15 @@
+import BookTitle from '@/components/BookTitle'
+
+export default function JustifiedSectionReversed({ title, children, bg = 'white' }) {
+ return (
+
+
+ {title && typeof title === 'string' &&
{title} }
+ {title && typeof title !== 'string' && title}
+
+ {children}
+
+
+
+ )
+}
diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx
new file mode 100644
index 0000000..528afab
--- /dev/null
+++ b/src/components/Layout.jsx
@@ -0,0 +1,285 @@
+import { Fragment, useId, useState } from 'react'
+import Image from 'next/image'
+import Link from 'next/link'
+import clsx from 'clsx'
+
+import { AudioPlayer } from '@/components/player/AudioPlayer'
+import posterImage from '@/images/poster.png'
+
+function randomBetween(min, max, seed = 1) {
+ return () => {
+ let rand = Math.sin(seed++) * 10000
+ rand = rand - Math.floor(rand)
+ return Math.floor(rand * (max - min + 1) + min)
+ }
+}
+
+function Waveform(props) {
+ let id = useId()
+ let bars = {
+ total: 100,
+ width: 2,
+ gap: 2,
+ minHeight: 40,
+ maxHeight: 100,
+ }
+
+ let barHeights = Array.from(
+ { length: bars.total },
+ randomBetween(bars.minHeight, bars.maxHeight)
+ )
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {Array.from({ length: bars.total }, (_, index) => (
+
+ ))}
+
+
+
+
+ )
+}
+
+function TinyWaveFormIcon({ colors = [], ...props }) {
+ return (
+
+
+
+
+ )
+}
+
+function SpotifyIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function ApplePodcastIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function OvercastIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function RSSIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function PersonIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function AboutSection(props) {
+ let [isExpanded, setIsExpanded] = useState(false)
+
+ return (
+
+
+
+ About
+
+
+ In this show, Eric and Wes dig deep to get to the facts with guests who
+ have been labeled villains by a society quick to judge, without actually
+ getting the full story. Tune in every Thursday to get to the truth with
+ another misunderstood outcast as they share the missing context in their
+ tragic tale.
+
+ {!isExpanded && (
+ setIsExpanded(true)}
+ >
+ Show more
+
+ )}
+
+ )
+}
+
+export function Layout({ children }) {
+ let hosts = ['Eric Gordon', 'Wes Mantooth']
+
+ return (
+ <>
+
+
+
+ {children}
+
+
+
+ >
+ )
+}
diff --git a/src/components/NavBar.jsx b/src/components/NavBar.jsx
new file mode 100644
index 0000000..0ec51fa
--- /dev/null
+++ b/src/components/NavBar.jsx
@@ -0,0 +1,30 @@
+import Link from 'next/link'
+
+export default function NavBar({ showPodcast }) {
+ return (
+
+
+
+ Book
+
+
+ Contact
+
+ {showPodcast && (
+
+ Podcast
+
+ )}
+
+
+ )
+}
diff --git a/src/components/StandardHead.jsx b/src/components/StandardHead.jsx
new file mode 100644
index 0000000..ca48dff
--- /dev/null
+++ b/src/components/StandardHead.jsx
@@ -0,0 +1,14 @@
+import HeadTags from '@/components/HeadTags';
+
+export default function StandardHead({ title, description }) {
+ return (
+ <>
+
+ {title}
+
+ >
+ );
+};
diff --git a/src/components/player/AudioPlayer.jsx b/src/components/player/AudioPlayer.jsx
new file mode 100644
index 0000000..2c8e6d4
--- /dev/null
+++ b/src/components/player/AudioPlayer.jsx
@@ -0,0 +1,97 @@
+'use client'
+
+import { useEffect, useRef, useState } from 'react'
+import Link from 'next/link'
+
+import { useAudioPlayer } from '@/components/AudioProvider'
+import { ForwardButton } from '@/components/player/ForwardButton'
+import { MuteButton } from '@/components/player/MuteButton'
+import { PlaybackRateButton } from '@/components/player/PlaybackRateButton'
+import { PlayButton } from '@/components/player/PlayButton'
+import { RewindButton } from '@/components/player/RewindButton'
+import { Slider } from '@/components/player/Slider'
+
+function parseTime(seconds) {
+ let hours = Math.floor(seconds / 3600)
+ let minutes = Math.floor((seconds - hours * 3600) / 60)
+ seconds = seconds - hours * 3600 - minutes * 60
+ return [hours, minutes, seconds]
+}
+
+function formatHumanTime(seconds) {
+ let [h, m, s] = parseTime(seconds)
+ return `${h} hour${h === 1 ? '' : 's'}, ${m} minute${
+ m === 1 ? '' : 's'
+ }, ${s} second${s === 1 ? '' : 's'}`
+}
+
+export function AudioPlayer() {
+ let player = useAudioPlayer()
+
+ let wasPlayingRef = useRef(false)
+
+ let [currentTime, setCurrentTime] = useState(player.currentTime)
+
+ useEffect(() => {
+ setCurrentTime(null)
+ }, [player.currentTime])
+
+ if (!player.meta) {
+ return null
+ }
+
+ return (
+
+
+
+
+ {player.meta.title}
+
+
+
+
+
+
+
setCurrentTime(v)}
+ onChangeEnd={(value) => {
+ player.seek(value)
+ if (wasPlayingRef.current) {
+ player.play()
+ }
+ }}
+ numberFormatter={{ format: formatHumanTime }}
+ onChangeStart={() => {
+ wasPlayingRef.current = player.playing
+ player.pause()
+ }}
+ />
+
+
+
+
+ )
+}
diff --git a/src/components/player/ForwardButton.jsx b/src/components/player/ForwardButton.jsx
new file mode 100644
index 0000000..a0f06fa
--- /dev/null
+++ b/src/components/player/ForwardButton.jsx
@@ -0,0 +1,38 @@
+function ForwardIcon(props) {
+ return (
+
+
+
+
+
+ )
+}
+
+export function ForwardButton({ player, amount = 10 }) {
+ return (
+ player.seekBy(amount)}
+ aria-label={`Fast-forward ${amount} seconds`}
+ >
+
+
+
+ )
+}
diff --git a/src/components/player/MuteButton.jsx b/src/components/player/MuteButton.jsx
new file mode 100644
index 0000000..f5eb9b9
--- /dev/null
+++ b/src/components/player/MuteButton.jsx
@@ -0,0 +1,46 @@
+function MuteIcon({ muted, ...props }) {
+ return (
+
+ {muted ? (
+ <>
+
+
+
+ >
+ ) : (
+ <>
+
+
+
+ >
+ )}
+
+ )
+}
+
+export function MuteButton({ player }) {
+ return (
+ player.toggleMute()}
+ aria-label={player.muted ? 'Unmute' : 'Mute'}
+ >
+
+
+
+ )
+}
diff --git a/src/components/player/PlayButton.jsx b/src/components/player/PlayButton.jsx
new file mode 100644
index 0000000..d65e110
--- /dev/null
+++ b/src/components/player/PlayButton.jsx
@@ -0,0 +1,64 @@
+import clsx from 'clsx'
+
+function PauseIcon(props) {
+ return (
+
+
+
+ )
+}
+
+function PlayIcon(props) {
+ return (
+
+
+
+ )
+}
+
+export function PlayButton({ player, size = 'large' }) {
+ return (
+
+
+ {player.playing ? (
+
+ ) : (
+
+ )}
+
+ )
+}
diff --git a/src/components/player/PlayButtonClient.jsx b/src/components/player/PlayButtonClient.jsx
new file mode 100644
index 0000000..7ab8d01
--- /dev/null
+++ b/src/components/player/PlayButtonClient.jsx
@@ -0,0 +1,12 @@
+'use client'
+
+import { useAudioPlayer } from '@/components/AudioProvider'
+import { PlayButton } from '@/components/player/PlayButton'
+
+export function PlayButtonClient({ audioPlayerData, size }) {
+ let player = useAudioPlayer(audioPlayerData)
+
+ return (
+
+ );
+};
diff --git a/src/components/player/PlaybackRateButton.jsx b/src/components/player/PlaybackRateButton.jsx
new file mode 100644
index 0000000..28fa378
--- /dev/null
+++ b/src/components/player/PlaybackRateButton.jsx
@@ -0,0 +1,114 @@
+import { useState } from 'react'
+
+const playbackRates = [
+ {
+ value: 1,
+ icon: function PlaybackIcon(props) {
+ return (
+
+
+
+
+
+
+ )
+ },
+ },
+ {
+ value: 1.5,
+ icon: function PlaybackIcon(props) {
+ return (
+
+
+
+
+
+
+ )
+ },
+ },
+ {
+ value: 2,
+ icon: function PlaybackIcon(props) {
+ return (
+
+
+
+
+
+
+ )
+ },
+ },
+]
+
+export function PlaybackRateButton({ player }) {
+ let [playbackRate, setPlaybackRate] = useState(playbackRates[0])
+
+ return (
+ {
+ setPlaybackRate((rate) => {
+ let existingIdx = playbackRates.indexOf(rate)
+ let idx = (existingIdx + 1) % playbackRates.length
+ let next = playbackRates[idx]
+
+ player.playbackRate(next.value)
+
+ return next
+ })
+ }}
+ aria-label="Playback rate"
+ >
+
+
+
+ )
+}
diff --git a/src/components/player/RewindButton.jsx b/src/components/player/RewindButton.jsx
new file mode 100644
index 0000000..99a7c31
--- /dev/null
+++ b/src/components/player/RewindButton.jsx
@@ -0,0 +1,31 @@
+function RewindIcon(props) {
+ return (
+
+
+
+
+
+ )
+}
+
+export function RewindButton({ player, amount = 10 }) {
+ return (
+ player.seekBy(-amount)}
+ aria-label={`Rewind ${amount} seconds`}
+ >
+
+
+
+ )
+}
diff --git a/src/components/player/Slider.jsx b/src/components/player/Slider.jsx
new file mode 100644
index 0000000..aa8c1ca
--- /dev/null
+++ b/src/components/player/Slider.jsx
@@ -0,0 +1,160 @@
+import { useRef } from 'react'
+import {
+ mergeProps,
+ useFocusRing,
+ useSlider,
+ useSliderThumb,
+ VisuallyHidden,
+} from 'react-aria'
+import { useSliderState } from 'react-stately'
+import clsx from 'clsx'
+
+function parseTime(seconds) {
+ let hours = Math.floor(seconds / 3600)
+ let minutes = Math.floor((seconds - hours * 3600) / 60)
+ seconds = seconds - hours * 3600 - minutes * 60
+ return [hours, minutes, seconds]
+}
+
+function formatTime(seconds, totalSeconds = seconds) {
+ let totalWithoutLeadingZeroes = totalSeconds.slice(
+ totalSeconds.findIndex((x) => x !== 0)
+ )
+ return seconds
+ .slice(seconds.length - totalWithoutLeadingZeroes.length)
+ .map((x) => x.toString().padStart(2, '0'))
+ .join(':')
+}
+
+function Thumb(props) {
+ let { state, trackRef, focusProps, isFocusVisible, index } = props
+ let inputRef = useRef(null)
+ let { thumbProps, inputProps } = useSliderThumb(
+ { index, trackRef, inputRef },
+ state
+ )
+
+ return (
+
+
{
+ thumbProps.onMouseDown(...args)
+ props.onChangeStart?.()
+ }}
+ onPointerDown={(...args) => {
+ thumbProps.onPointerDown(...args)
+ props.onChangeStart?.()
+ }}
+ className={clsx(
+ 'h-4 rounded-full',
+ isFocusVisible || state.isThumbDragging(index)
+ ? 'w-1.5 bg-slate-900'
+ : 'w-1 bg-slate-700'
+ )}
+ >
+
+
+
+
+
+ )
+}
+
+export function Slider(props) {
+ let trackRef = useRef(null)
+ let state = useSliderState(props)
+ let { groupProps, trackProps, labelProps, outputProps } = useSlider(
+ props,
+ state,
+ trackRef
+ )
+ let { focusProps, isFocusVisible } = useFocusRing()
+
+ let currentTime = parseTime(state.getThumbValue(0))
+ let totalTime = parseTime(state.getThumbMaxValue(0))
+
+ return (
+
+ {props.label && (
+
+ {props.label}
+
+ )}
+
{
+ trackProps.onMouseDown(...args)
+ props.onChangeStart?.()
+ }}
+ onPointerDown={(...args) => {
+ trackProps.onPointerDown(...args)
+ props.onChangeStart?.()
+ }}
+ ref={trackRef}
+ className="relative w-full bg-slate-100 md:rounded-full"
+ >
+
+
+
+
+
+ {formatTime(currentTime, totalTime)}
+
+
+ /
+
+
+ {formatTime(totalTime)}
+
+
+
+ )
+}
diff --git a/src/data/Buzzsprout-12076221.srt b/src/data/Buzzsprout-12076221.srt
new file mode 100644
index 0000000..735eb3d
--- /dev/null
+++ b/src/data/Buzzsprout-12076221.srt
@@ -0,0 +1,296 @@
+1
+00:00:02,790 --> 00:00:51,090
+Thomas Hintz: Welcome to the React show brought to you from occupied Lenape territory by me, your host, Thomas, and some funny code, Episode 73. Hooks in functional components changed react in a significant way compared to class based components. But I think react server components are going to alter react in an even more fundamental way. Hooks allowed us to basically just do what we were already doing, but in a different fashion. React server components, though, completely changed the way in which we'll create and even think about React apps. In this episode, we start learning what react server components really are, and take a journey attempting to use them in the real world.
+
+2
+00:00:53,010 --> 00:01:34,170
+Thank you for joining us, I've been following the development of React server components sort of like in the background for the last year or so. And even in the episode where we covered React 18 And talked about React server components, I did start to get excited. But even then, you still couldn't really get a good feel for what they would be like to use in practice as the only things really released until that point, were more like proofs of concepts, you know, from the React team, and from NextJS and stuff. So I was just thinking these seem like they have a lot of potential, but who really knows until we see a more finalized version?
+
+3
+00:01:34,710 --> 00:01:53,910
+Well, with NextJS 13, I think we do get to see a much more finalized version. Technically, React server components are still in beta. But it's almost certain the final version will be very similar to what has been released in NextJS 13. So we can finally take them for a spin.
+
+4
+00:01:53,940 --> 00:02:11,130
+And I'll be honest, I have been and I've been pretty blown away. It's not that it's really anything new in terms of like programming or web development. But it's completely new for React. And in my experience, so far, just, it's just completely game changing.
+
+5
+00:02:11,700 --> 00:02:43,650
+And yeah, for some extra fun, after recording this main episode, I'm going to do a short after show, recording, that just covers some more of my thoughts about the future of react. And you know what that might be with React server components, just in a more casual fashion, some cool tricks we can bring in from other systems that will be sort of like steroids for React server components, along with some interesting tidbits I picked up from my research, like how the React team actually looked into making react more like Svelte.
+
+6
+00:02:44,160 --> 00:02:54,960
+So yeah, if you're interested in just sort of joining along for that more casual follow up, the after show will be available exclusively on our Patreon. So definitely check that out. If you're interested.
+
+7
+00:02:55,560 --> 00:03:06,720
+Before we actually get into what react server components are, I thought it would be more digestible, if I like sort of walked you through some of my experiments with React server components.
+
+8
+00:03:07,680 --> 00:04:12,240
+First, I wanted to build a real sort of like a real world app using React server components and NextJS 13. And everything to get, like a good feel for what they were like and how to use them and stuff. So my goal was to just build the simple weather app, you know, where it lists some days, and each day shows like a summary of the temperature range or something, and then you can maybe click on a day, and it'll like, bring up more details, you know, things like that. Basically, I just wanted something that, you know, depended on some sort of external API. So I could see how data fetching and data integration worked. But also had, you know, some client side state, some things I wanted to have real interactivity with that, you know, needed to happen quickly to feel responsive. So I can just sort of get a feel for, you know, the sort of boundary between client and server and what it means to have some, maybe, client component versus, say, a server component. So yeah, it's pretty loose goal. But yeah, that was the goal, create this weather app.
+
+9
+00:04:12,240 --> 00:04:47,550
+So the first task, of course, was getting NextJS 13, with this new beta React server components support up and running. So in NextJS, they often call this app like just a-p-p support, because this new system lives inside the App folder instead of the Pages folder. So previously, with NextJS, you put your pages in the Pages folder, now you basically put your pages in the App folder. And once you do that, you can take advantage of all these new features.
+
+10
+00:04:47,850 --> 00:05:21,030
+So yeah, I got an NextJS, and I passed a flag to it, telling it to use the new beta app support and I got that up and running and didn't have any issues. You know, so this included a server component and some client components in sort of like a, you know, demo app that includes with it, and I got that up and running and no issues there. So that was that was really cool. Just worked. And yeah, it was fun to see this, you know, in practice and then actually going. So of course, next I had to like, actually do something with this, right.
+
+11
+00:05:21,690 --> 00:05:45,870
+So I just created a basic server component, like I read through the docs and learn how to create a server component how to create a client component. By default, all the components are actually server components, which is different. But you can put a little tag basically at the top of your file to indicate it should be a client component. And so I created a server component that rendered a both the client component and a server component.
+
+12
+00:05:46,140 --> 00:06:10,410
+And it just worked. I had no issues, it was really cool. It was really exciting to see it was like, Oh, this works. You know, I didn't really take advantage of any special features that I knew of at this point. But hey, it's working. So that's great. And now that I had something working, it was like, Okay, let's just sort of do some investigation, like, what is Next doing, like, what is different than before? Right?
+
+13
+00:06:10,830 --> 00:06:47,610
+So I started investigating, and it was pretty clear that, you know, Next is still providing server side rendering, which is different than react server components. It can still be used with React server components, but Next has done server side rendering for quite some time. And that's been supported on React for a while. And that seems to just work. Like before it does server side rendering, it returns HTML, and that gets hydrated by react. So that seems the same. But then, and this is maybe also, in a sense, not new: Next has done some of this as well before.
+
+14
+00:06:48,030 --> 00:07:12,900
+But I had link to another page, and it seemed to prefetch, this linked page, but that's where things started to get more interesting. So I, you know, brought up the network inspector, right? And I was like, okay, cool. It's like prefetching, you know, this other page. But then when I was looking at what it was actually prefetching, I was like, Whoa, this is totally different. This is super interesting.
+
+15
+00:07:13,410 --> 00:08:00,000
+So the result, you know, what the next server was returning to the client, it basically, it was data. It wasn't HTML, it was just data. But it looked to me, like the output from rendering a React tree, like, like the actual tree structure itself. And it was really, it's actually really funny. So if you are familiar with my book at all, where we like, create our own react, I create sort of my own data structure to represent the tree that the React rendering algorithm can parse to do its thing, right? This data that the server is sending to the client looks basically identical to that. I mean, there's only minor differences. So that was really fun to see. Yeah, it's basically the same thing.
+
+16
+00:08:00,000 --> 00:08:18,660
+It's like, Yeah, this is the data that represents a React tree of components, I guess. So it's not surprising, it would look just similar the same, but it was really fun to see. So yeah, this is it. We're starting to get into "this is different, this is cool, this is unique, this is, this is fun!" At least it was fun for me. Anyway.
+
+17
+00:08:18,660 --> 00:09:16,920
+So I'm like going through this investigating things, I noticed a couple other things. One is it seemed like, like some of these requests, were being streamed in, potentially, like just looking at the HTTP requests and the browser and stuff. I was like, Oh, it seems like React is doing some sort of, or Next or something is doing some sort-of streaming, which I hadn't seen in this fashion before. That's cool. And a really cool thing is, it seemed like React was doing some sort of automatic code splitting based on component like, it looks like, oh, it's not even sending the code it needs for a component, unless the user actually is going to load the page with that component on it. Like, I don't know exactly what it's doing yet, or how it's working but I was like, hey, that seems really cool. I definitely want to look into that further, you know, so I had some, you know, fun inspecting what was going on?
+
+18
+00:09:16,920 --> 00:09:26,520
+And I think I came up with a lot of questions like, you know, what is it doing? But it was really exciting. And, yeah, so I think we'll definitely learn more about that.
+
+19
+00:09:27,030 --> 00:09:50,970
+But the next thing that I wanted to mess around with was, like data and data fetching. So to me, based on the research I had done, this seemed like potentially one of the biggest places where things changed or could change, or we could do things differently, you know, so I wanted to fetch data within a server component and just sort of get a feel for how that worked. Right?
+
+20
+00:09:51,270 --> 00:10:32,400
+So I follow the NextJS docs to use a basic await fetch call to get some weather data from an API inside my react server component, and it just worked and it was awesome! So much better than having to use React query or doing it manually via useEffect, which React Query is almost certainly doing internally, right? It was just so beautiful and so simple. Like, it was just like, oh, 'await' the results of my API call and render them out in my component, I don't need to do anything special, you know, I don't need to follow these useEffect rules or something like that, you know. So yeah, this is super exciting.
+
+21
+00:10:32,930 --> 00:11:13,160
+When this worked, and I could sort of play with it and see how it worked. I was like, this has the potential to just fundamentally change how I write React apps. So anyways, this is the journey so far I created. It's not really the Weather app completely yet. But it fetches some weather data. And it just sort of renders it in a list to the screen to the browser's DOM, you know, and it's cool and all, but now it's like, Hey, I got an idea how this kind of works. But what actually are, you know, react server components, I wanted to get more of the theory, you know, so yeah, we'll talk about that.
+
+22
+00:11:13,160 --> 00:11:46,730
+Next, like I mentioned earlier, I guess, we've been able to render a tree of React components on the server for quite some time, you know, we've called it server side rendering, this worked by providing the tree of components with some default state and props, and just rendering basically the same as on the client, except for we just take the HTML output, and, you know, throw it to the browser. And that output, you know, gets hydrated by react, you know, where it just like, adds event and listeners and stuff to the DOM elements, right?
+
+23
+00:11:47,210 --> 00:12:53,750
+ Well, for React server components, we actually basically do the same thing, except instead of only being able to send the HTML output to the client, we instead send some JSON output that contains the data for the tree of React components. Essentially, if you're familiar with the term virtual DOM, we're essentially sending the virtual DOM from the server to the client. And then on the client side, React has enough information to merge this, like virtual DOM that it got from the server with whatever the state of the virtual DOM is on the client. So really, we used to have two trees, essentially a React component data, the output from rendering your components is incorporated into the DOM elements on the screen, right? But also, whenever you do a rerender, you generate like a new tree. And React is taking that, you know, those two trees, and essentially merging them together to figure out what needs to get updated on the screen. Right, so you had two trees.
+
+24
+00:12:54,200 --> 00:13:17,840
+But now we have three trees, the server tree, the client tree, and the browser DOM tree. So all we actually need to do is merge these three trees together. And this is what React does for us. This is basically the new feature they added for React server components is the ability to merge these three trees together.
+
+25
+00:13:18,470 --> 00:13:29,360
+Of course, it's not completely that simple. There are some distinctions between, essentially the client tree and the server tree or client components and server components.
+
+26
+00:13:29,000 --> 00:13:50,180
+On the client side, nothing really changes at all, we still have access to all the same hooks and all the same features. Basically, it's completely backwards compatible. When it comes to client components, which are the components we always used to write, they're now called Client components. Basically, nothing changes there.
+
+27
+00:13:50,450 --> 00:14:24,740
+However, server components, like they look the same, you still write a function that returns JSX, or whatever, it looks basically the same, and works basically the same, but there are some limitations. So on server components, you can't use anything that has to do with client side state or, of course, browser specific API's. So this means you can't use useState or useEffect or useContext or anything like that in your server components.
+
+28
+00:14:25,430 --> 00:15:01,160
+So this actually means that probably a lot of your components can be either a client component or a server component. And in some cases, you can probably use them as client components in some parts of your app. But in other parts, use them as server components, like the code in a lot of cases is fine to run in both environments, so as long as you're not using client side specific stuff, like useState or you know window or other browser specific API's, you can you is it in both places.
+
+29
+00:15:01,400 --> 00:15:13,280
+Now, of course, there are some things that you can do in a server component, which is really just code running on node. JS, that you can't do on a client component, which we're going to get into as well.
+
+30
+00:15:13,660 --> 00:15:40,930
+But what is really, really cool about all of this is that the server and client trees can be merged together without affecting client side state. So while you can't access or modify client side state from within a server component, you can fetch data in Server components, which will get merged with the client components without causing a reload or any loss of client side state.
+
+31
+00:15:41,350 --> 00:16:08,710
+To me, this last point is really the key to server components. They allow you to fetch, load and process data in a much more natural and efficient way on the server, while still having a highly responsive client with all the same client interactivity you would want in an app. Ultimately, with web apps, we always have to deal with clients and servers and having the power to choose where our React code runs, is incredibly powerful.
+
+32
+00:16:09,040 --> 00:16:25,630
+Choice, and power is what makes react so good, in my opinion. And this just extends and doubles down on this. So amazing, super exciting, in my opinion. And we're definitely going to get more into some of the details around this.
+
+33
+00:16:25,630 --> 00:17:01,060
+But what I also found really interesting to me is that the fundamentals of how React really like works haven't changed. Like the way react renders stays the same, like it renders in two different environments now, but the algorithm is the same. There are some restrictions on some features, depending on the environment, like server or client, but the fundamental algorithm react to uses internally remains the same. So yeah, if you're interested in the nitty gritty details of the algorithm, I did write a short book on the topic, which covers it in depth.
+
+34
+00:17:01,330 --> 00:17:16,720
+But it was just really cool to be like, wow, they designed this thing that works in both of these environments without really having to change anything about the fundamental way React works. I don't know, to me, that's really cool. And indicates like good design.
+
+35
+00:17:17,470 --> 00:17:40,390
+Anyways, so back to my journey, trying to build this app. So this like weather app, or whatever. So I got some basic stuff working. But now I really wanted to try to get a more full fledged app developed and try to really exercise the full capabilities, like kind of figure out the limitations and how to do things in this new world, right?
+
+36
+00:17:40,840 --> 00:17:58,030
+So the next experiment was adding some client side interactivity. And it's kind of not related to a weather app anyway. But I was like, hey, let's add a button with a counter, you know, where you click, every time you click the button, the counter on your screen goes up by one, right, just some text on the screen.
+
+37
+00:17:58,240 --> 00:18:38,980
+Just super basic, but you know, it's client side state, I was going to maintain all this data on the client, and I wanted to be like, okay, when I send new data, you know, from the weather API back to the client, or whatever, does this erase this client side state? Does it impact it in any way? Like, what is the effect here, you know, so that meant I had a server component that was rendering both another server component and a client component. And it all just worked seamlessly. Like, to be completely honest, if you didn't know any better, you couldn't even really tell that I was using some new server component technology. It just worked. It didn't lose it state, everything was great.
+
+38
+00:18:39,050 --> 00:18:59,120
+So next, I thought I wanted to, like make sure that whatever day I clicked on in this, you know, list of days for the weather forecast, I wanted it to be highlighted, and like open up in another pane or something, some extra details about the weather for that day, you know, and this is where things started to get really interesting.
+
+39
+00:18:59,570 --> 00:19:34,250
+So to do this, I needed to have an onclick handler, when I click on this day, which I think was a div or whatever, and then an onclick handler to fetch more information about that day and display it and highlight that day in the list of days, you know, but event handlers can only be specified within client components. But the component that I created to render the list of days was a server component. And it's like, if you try to add an event handler to it, React is just like, nope, what are you doing? You don't--you're out to lunch, you know, like, this doesn't make any sense.
+
+40
+00:19:34,700 --> 00:20:03,830
+So somehow, I need to figure out a way to pass data to that server component to like, tell it which day was selected, like I need to create, I guess, a client component for each day in that list that had the onClick handler. And then when you click on it, I needed to somehow tell the server, which day was clicked, so that server component could render some CSS or something to show that day was highlighted like to show I clicked on that day, right?
+
+41
+00:20:04,310 --> 00:20:40,040
+Of course, I could have done all of this as client components, you know, the way we used to do it in React. But that's no fun. That's not the point of this, right? I wanted to have this as a server component and just see how it worked. But you can't use the useState hook within the server component. You can't use the useContext hook, right? So I thought, if I made a context higher up in my tree, right, so this is not new in React, we create contexts that allow us to share data throughout our tree without having to pass that data down through the tree, right?
+
+42
+00:20:40,400 --> 00:21:02,270
+So I was like, Okay, I could create a context higher up in the tree, in a client component, that client component could render my server component that renders the list of days. And that would, again, render some client components. And I could use this to share data between all my components, right. But again, this turned out to not really work.
+
+43
+00:21:02,330 --> 00:21:39,110
+So server components, they just can't access the data that's stored in a context, only client components can. So basically, I realized that I could pass state and props like normal between client components, and even from a server component to a client component. But it didn't seem like there was any way to pass props, or a function from a server component to a client component. So basically, I was stuck. I was like, I don't know how to make this work. Like how do I tell the server which day is selected?
+
+44
+00:21:39,620 --> 00:22:01,430
+So I took a timeout to study what the React team did in their demo for React server components that they created in like 2020, the end of 2020. So at first, like, I was looking through their code, and I was like, Oh, they are using a context. So I must be able to use a context to do this. Like it looked like they were using it to pass data between client and server components.
+
+45
+00:22:01,690 --> 00:22:34,630
+But eventually, I figured out that the context was really basically just acting as a client-side cache, the real way they were passing data from client components to server components was via query parameters. Ah, I had figured it out! It was so exciting! So basically, you just can't directly pass props or state from a client component to a server component. So you have to pass data in some way that a server can read it.
+
+46
+00:22:35,290 --> 00:22:52,120
+There's multiple ways you could do this, you know, whether that's just a regular API call that you make to your server that stores the data in a session or wherever, right? Or, in this case, via the URL, which a server can obviously, you know, access from any request that comes in.
+
+47
+00:22:52,120 --> 00:23:30,640
+So basically, the way it works is you're like, hey, render the server component. And on the server, I can be like, Oh, okay, I will do that, but what URL did you ask for the server component on, and you can use that to like, set the query parameters on that URL and pass data from the client component to the server component. It worked, and it worked really well. And the cool thing was, I could directly pass data via props, from a server component to a client component. And the NextJS like, API allows directly accessing the data in query parameters.
+
+48
+00:23:31,060 --> 00:23:55,150
+I know this probably sounds confusing, trying to explain it in a podcast. But the bottom line is, once I realized that and took advantage of the existing, you know, NextJS API's, it all just worked seamlessly, I could pass data from the client to my server components, and back from my server components to my client components, all pretty much seamlessly.
+
+49
+00:23:55,990 --> 00:24:19,480
+The way I did this was I used the NextJS link components. And I used those to set the query parameters in the client components. So the client component, you know, would render and set up each of those link components with different query parameter values. And so when you clicked on those links, the server would get the unique data from the query parameter and be able to use it.
+
+50
+00:24:19,660 --> 00:25:02,050
+So now I could pass the data from the client to the server and back to the client, again, all quite seamlessly. Like I know, I know, this is not groundbreaking, we've been able to pass data from the server to the client back and forth, again for the ages. So you know, like, that's how you do things on the web, right? But the way in which you can pass them and render the data and the output of these components in like sort of interleave your server and client components and just sort of write components and think in terms of components. I don't know it was just mind blowing. It's totally different than the way we've ever done things in the React World, and just really cool in my opinion.
+
+51
+00:25:02,630 --> 00:25:19,490
+So with this basic prototype setup, I could really start experimenting. I also like I don't know, wanted to add a form, I've always just sort of been obsessed with trying to find a better way to do forms in React. And so I was like, Hey, maybe, this will let me do it.
+
+52
+00:25:19,490 --> 00:25:38,540
+Right, so, again, it's not really related to a weather app, per se, but I was like, I could add a form that lets you select a day using an input element, you know, and then it would show that day, I don't know why you'd really--I guess you could want this on a weather app, whatever, I wanted to add a form and just see how it works.
+
+53
+00:25:38,540 --> 00:26:26,450
+Right, so I passed some data from the higher level server component down into the form components, this turned out to be really awesome, because I figured out that you could update data, within the form, via server components without clearing the state of the form. So you could have some client components in your form for some of your inputs, you know, so it's like some custom made highly interactive form inputs, right? Then you can mix that with some server components that fetch data in real time or update in real time or update as the user is filling out the form even. And it doesn't, you know, erase the state of the form from the browser's perspective, and also from React's perspective.
+
+54
+00:26:26,750 --> 00:26:45,200
+So I don't, I need to do some more research in this area to figure out, you know, what the full implications of this are, but to me, this seemed like a potentially a huge breakthrough in the way we could do forms and React. So yep, super exciting it was really fun! I really enjoyed messing around with this!
+
+55
+00:26:45,830 --> 00:27:01,040
+So when I was reading through the Next documentation, for React server components, they also mentioned that you can use Suspense boundaries and transitions to create loading states. So I messed around with that, too. And it worked really well.
+
+56
+00:27:01,000 --> 00:27:41,110
+So you can fetch data in your server component, right. But you can use suspense to return a loading state. And so on the client side, it will show this loading state until the data returns on the server side, but you don't need to, like do any special coding, you just await your data and, you know, render a Suspense element in your output. And I'll just work seamlessly. It was like, I finally understand suspense boundaries. Like I mean, I always understood them before, but they were really clunky, to be honest, on the client side to coordinate and make work. And it works really seamlessly with server components: really awesome!
+
+57
+00:27:41,710 --> 00:28:00,700
+Another fun thing I realized is that in a React server component, you can, you know, have an 'if' statement, or some sort of branching. And, you know, maybe depending on if the users logged in or not, or some other condition, you can return one component or a different component, right?
+
+58
+00:28:01,060 --> 00:28:31,600
+Well, before all of the code needed to render both components would get sent to your browser, whether the user ever actually needed all of the components or not, it always got sent to the browser. Well, I started messing around with it. I was like, Oh, this is really cool: if I've branching code in my output, React only actually sends the code needed for client side components, if they are actually getting used. So that was really fun to mess around with as well.
+
+59
+00:28:32,110 --> 00:29:04,510
+All right, so I have a really ugly but functioning weather app at this point that has a mix of server components and client components. And it's really cool, and really fun and quirky, and not that useful in the real world yet, cuz I didn't polish anything but hey, it was a fun experiment, right? But I thought, alright, so we've got that working, I think it's a good time to sort of regroup on what we've learned and also just talk about and expand upon some of the new capabilities that NextJS 13 and React server components brings.
+
+60
+00:29:05,020 --> 00:29:26,410
+So like I said, before, server components, I think, fundamentally change how we're going to fetch data in React. The NextJS documentation even recommends only fetching data in Server components. This could mean that days of useEffect for data fetching and even things like React Query are maybe over.
+
+61
+00:29:26,590 --> 00:29:43,060
+We might not actually need React Query or SWT, or anything like that ever again. And that remains to be seen. Maybe there are still use cases for it. But in scenes like that, you know, we're going in a different direction now.
+
+62
+00:29:43,660 --> 00:30:01,330
+So the React team, to sort of, kick off the whole React server components project, they created an RFC "request for comment" about their ideas, and I thought it covered a lot of the benefits of React server components really well.
+
+63
+00:30:01,330 --> 00:30:38,470
+So I'm going to go over what they present in the RFC. So server components, they run only on the server, and have zero impact on bundle size. Their code is never downloaded to clients, which reduces bundle size, improves startup time, like, for example, let's say you wanted to render a date to the screen in a nice, pretty format that your users like to look at, not whatever, you know, milliseconds since 1970, or whatever format your data is stored on in your API or in your database or whatever.
+
+64
+00:30:38,470 --> 00:31:29,350
+Right. So normally, we would include a date library, like, you know, there's many of them, we've included on the client side and use that to tell it what format to convert the date to for the user, right? Well, that sucks, because now the user has to download that date library. With React server components, you can still use that exact same date library to format your dates. But you never need to send the code for the date library to the clients. It's awesome. Server components can also access server side data sources directly, such as databases, file systems, micro services, you don't need to do anything special, you can just access files, the contents of files, create database connections, all within your React server components!
+
+65
+00:31:29,830 --> 00:32:15,760
+Another cool feature is server components seamlessly integrate with client components. So I talked about this before. So server components can load data on the server and pass it as props to client components, allowing the client to handle rendering the interactive parts of a page. And server components can dynamically choose which client components to render, so I was talking about this at the end: essentially, they allow clients to download just the minimal amount of code necessary to render a page. Server components preserve client state when reloaded. This means that client state focus and even ongoing animations aren't disrupted or reset when a server component tree is refreshed. Amazing. Mind blown.
+
+66
+00:32:17,070 --> 00:32:37,860
+Yeah, also, server components are rendered progressively and incrementally stream rendered units of the UI to the client, kind of a cumbersome way of basically saying, as React renders your component tree, it can start streaming the results to the client before it finishes rendering all of your components.
+
+67
+00:32:38,370 --> 00:33:03,210
+And combined with Suspense, this allows developers to craft intentional loading states and quickly show important content while waiting for the remainder of a page to load. And yeah, I could see in practice, when I was trying this out, it works way better than the way we used to have to do it in React, really cool! And, you know, something a lot of people have tried to replicate in lots of different ways.
+
+68
+00:33:03,780 --> 00:33:29,790
+We can now share code between the server and the client as React components, allowing a single component to be used to render, say, a static version of some content on the server on one route, and an editable version of that content on the client and say, a different route. And I think there will ultimately be even more benefits realized by React server components than just those we listed above. And you know, time will tell.
+
+69
+00:33:30,110 --> 00:34:25,100
+But this isn't like necessarily for free, there are some downsides. For one, it's just more complicated, the React ecosystem is absolutely going to be more complicated. Learning React is going to be harder than it was before when we only had client side components. But at the same time, I think the payoff is definitely worth it unless you only ever planned on making purely client side apps that never need API or data integration. But if you're not in that super rare case, I think if you're just writing normal apps, where you are going to need API and data integration, all this, you're gonna have to learn how servers and clients work anyways, you're gonna need a server, you're you know, so I don't think it makes it so that overall, you really need to learn more, but learning React, this is probably going to make it so you got to learn more before you really can say I've learned React, you know, and there are definitely some other things that still need to be worked out.
+
+70
+00:34:25,100 --> 00:34:44,870
+So what I discovered when I was, you know, trying to build this weather app is that a lot of component libraries, you know, like Chakra UI, Material UI, and also CSS and JS libraries, they don't really work with server components right now, or at least don't work effectively.
+
+71
+00:34:45,080 --> 00:35:24,080
+You can like technically with some extra work, get them to work on your client components, but I found they basically just don't have an effect on your server components which made them really kind of a pain and kind of useless to use. And I'm sure there's going to be other growing pains, but I'm sure we're going to figure it out, you know, whether it's using different techniques or these libraries, maybe they just need to be updated, whatever. But at this point in time, there's definitely issues with a lot of existing React libraries. It's definitely not production ready right now.
+
+72
+00:35:24,000 --> 00:35:49,530
+But I had a blast trying it out, if you couldn't tell. So I'm curious though, what do you think? Are you wanting to try it out now? Is there anything I didn't mention that you want to experiment with? Do you want me to experiment with? Or does this just make you angry, you want to go back to a world where everything is client side and seemed simpler? Either way, like always, we'd love to hear from you.
+
+73
+00:35:49,590 --> 00:36:04,800
+And, you know, if you're curious about some of my more off the cuff, remarks and thoughts about React server components and some of my other ideas on really cool things we could do with them, definitely check out the After Show on our Patreon.
+
+74
+00:36:05,250 --> 00:36:18,780
+And like always, we hope you have a great rest of your day. Thank you so much for joining us. This episode was produced by Thomas and edited by Dougie, The Podcast Editor.
+
diff --git a/src/data/consice-ish-beginners-guide-content.md b/src/data/consice-ish-beginners-guide-content.md
new file mode 100644
index 0000000..cddb052
--- /dev/null
+++ b/src/data/consice-ish-beginners-guide-content.md
@@ -0,0 +1,18 @@
+Getting Started With Your Own Editor
+To actually get started with your own project install next.js
+
+install node
+run command: npm install react react-dom next
+run command: npx create-next-app [name-of-project] --use-npm
+run command: cd [name-of-project]
+run command: npm run dev
+this will open a browser window with your running react site
+Then you can use this project as a sandbox to learn React or just to get started building a new project.
+
+open pages/index.js
+
+delete everything between the parens after return
+
+you can now write your react code here
+
+you can declare new components in this file too and use them
diff --git a/src/data/episodes.js b/src/data/episodes.js
new file mode 100644
index 0000000..977febc
--- /dev/null
+++ b/src/data/episodes.js
@@ -0,0 +1,197 @@
+import * as srtparsejs from "srtparsejs";
+import fs from 'fs'
+
+import { extractFromXml } from '@extractus/feed-extractor'
+
+const episodeExtra = {
+ 'Buzzsprout-12076221': {
+ slug: 'a-fundamentally-new-react-my-journey-with-react-server-components',
+ transcript: srtparsejs.parse(fs.readFileSync('./src/data/Buzzsprout-12076221.srt').toString())
+ },
+ 'Buzzsprout-12033274': {
+ slug: 'learning-react-on-only-3-hours-per-week-while-working-full-time'
+ },
+ 'Buzzsprout-11941927': {
+ slug: 'testing-useeffect-porting-rn-app-to-web'
+ },
+ 'Buzzsprout-11918765': {
+ slug: 'react-2022-year-in-review-foundational-changes'
+ },
+ 'Buzzsprout-11912454': {
+ slug: 'news-dec-21st-chatgpt-swr-20-wasp-mfa-ci-react-visual-cms-flash-in-2022'
+ },
+ 'Buzzsprout-11879575': {
+ slug: 'how-i-built-my-own-react'
+ },
+ 'Buzzsprout-11802072': {
+ slug: 'faq-typescript-svelte'
+ },
+ 'Buzzsprout-11802002': {
+ slug: 'thinking-in-react'
+ },
+ 'Buzzsprout-11757420': {
+ slug: 'how-decentralized-is-crypto-really'
+ },
+ 'Buzzsprout-11683392': {
+ slug: 'concise-ish-beginners-guide-to-learning-react' // TODO extra content
+ },
+ 'Buzzsprout-11586984': {
+ slug: 'its-not-your-fault-you-dont-understand-the-code'
+ },
+ 'Buzzsprout-11533367': {
+ slug: 'your-boss-is-wrong-and-how-slow-is-react'
+ },
+ 'Buzzsprout-11500932': {
+ slug: 'the-reality-of-micro-frontends-and-why-i-dont-recommend-them'
+ },
+ 'Buzzsprout-11235167': {
+ slug: 'react-faq'
+ },
+ 'Buzzsprout-11235154': {
+ slug: 'remix-as-fast-as-instant'
+ },
+ 'Buzzsprout-11193020': {
+ slug: 'noobs-vs-experts-with-kyle-verhoef'
+ },
+ 'Buzzsprout-11130436': {
+ slug: 'oops-i-built-the-wrong-thing'
+ },
+ 'Buzzsprout-11086813': {
+ slug: 'a-new-react-compiler'
+ },
+ 'Buzzsprout-10735883': {
+ slug: 'forms-still-suck-can-we-design-something-better'
+ },
+ 'Buzzsprout-10402825': {
+ slug: 'how-to-build-react-features-right-the-first-time'
+ },
+ 'Buzzsprout-10365089': {
+ slug: 'why-react-should-die'
+ },
+ 'Buzzsprout-10317720': {
+ slug: 'how-javascript-actually-executes'
+ },
+ 'Buzzsprout-10278986': {
+ slug: 'whats-the-hype-about-shopify-hydrogen'
+ },
+ 'Buzzsprout-10229771': {
+ slug: 'preventing-startup-burnout-with-brian-wetzel-part-2'
+ },
+ 'Buzzsprout-10181548': {
+ slug: 'preventing-startup-burnout-with-brian-wetzel-part-1'
+ },
+ 'Buzzsprout-10138345': {
+ slug: 'taking-the-pain-out-of-forms-in-react'
+ },
+ 'Buzzsprout-10037837': {
+ slug: 'what-are-react-server-components-and-why-theyre-awesome'
+ },
+ 'Buzzsprout-10037718': {
+ slug: 'react-fibers-how-your-app-actually-executes'
+ },
+ 'Buzzsprout-10011866': {
+ slug: 'how-to-successfully-test-react-apps-using-cypress'
+ },
+ 'Buzzsprout-9935994': {
+ slug: 'chris-keen-on-succeeding-as-a-react-contractor'
+ },
+ 'Buzzsprout-9926848': {
+ slug: 'query-caching-why-you-must-use-it-with-react-using-react-query'
+ },
+ 'Buzzsprout-9886172': {
+ slug: 'where-and-how-to-store-data-from-your-react-application'
+ },
+ 'Buzzsprout-9842114': {
+ slug: 'how-to-stop-wasting-your-time'
+ },
+ 'Buzzsprout-9811470': {
+ slug: 'react-component-lifecycle-what-is-a-component'
+ },
+ 'Buzzsprout-9781457': {
+ slug: 'why-you-need-to-check-software-licenses'
+ },
+ 'Buzzsprout-9740045': {
+ slug: 'alternatives-to-the-software-interview-getting-a-react-job'
+ },
+ 'Buzzsprout-9698201': {
+ slug: 'what-do-you-think-of-react-and-other-qa'
+ },
+ 'Buzzsprout-9656919': {
+ slug: 'refactoring-quickly-safely-and-easily'
+ },
+ 'Buzzsprout-9608790': {
+ slug: 'how-to-diagnose-react-app-bottlenecks-with-the-profiler'
+ },
+ 'Buzzsprout-9545960': {
+ slug: 'so-where-do-you-host-your-react-app'
+ },
+ 'Buzzsprout-9502941': {
+ slug: 'is-your-react-app-killing-the-planet'
+ },
+ 'Buzzsprout-9464470': {
+ slug: 'better-routing-in-react-with-nextjs'
+ },
+ 'Buzzsprout-9451117': {
+ slug: 'debug-smarter-in-your-react-apps'
+ },
+}
+
+const slugToEpisode = {}
+Object.entries(episodeExtra).forEach(([id, { slug }]) => {
+ slugToEpisode[slug] = id
+})
+
+export async function getEpisodes() {
+ const feedRes = await fetch('https://feeds.buzzsprout.com/1764837.rss', { next: { revalidate: 60 * 10 } });
+ const feedString = await feedRes.text()
+ /* const feedString = fs.readFileSync('./feed.rss').toString() */
+
+ let feed = await extractFromXml(feedString,
+ {
+ getExtraEntryFields: (feedEntry) => {
+ const {
+ enclosure
+ } = feedEntry
+ return {
+ enclosure: {
+ url: enclosure['@_url'],
+ type: enclosure['@_type'],
+ length: enclosure['@_length']
+ },
+ content: feedEntry['content:encoded'],
+ chapters: feedEntry['podcast:chapters'] && feedEntry['podcast:chapters']['@_url']
+ }
+ }
+ })
+
+ return feed.entries.map(
+ ({ id, title, description, enclosure , published, content, chapters }) => ({
+ id,
+ title,
+ published,
+ description,
+ content,
+ chapters,
+ slug: episodeExtra[id]?.slug || title.replace(/[\W_]/g, '-'),
+ transcript: episodeExtra[id]?.transcript,
+ audio: [enclosure].map((enclosure) => ({
+ src: enclosure.url,
+ type: enclosure.type,
+ }))[0],
+ })
+ )
+}
+
+export async function getEpisode({ episodeSlug }) {
+ const episodes = await getEpisodes()
+ const episodeId = slugToEpisode[episodeSlug] || episodeSlug
+ let episode = episodes.find(({ id }) => id === episodeId) ||
+ episodes.find(({ title }) => title.replace(/[\W_]/g, '-') === episodeId)
+ if (!episode) {
+ return {
+ notFound: true,
+ }
+ }
+
+ return episode
+}
diff --git a/src/data/feed.rss b/src/data/feed.rss
new file mode 100644
index 0000000..fdc7f0b
--- /dev/null
+++ b/src/data/feed.rss
@@ -0,0 +1,1269 @@
+
+
+
+
+
+
+ The React Show
+ Mon, 23 Jan 2023 06:34:45 -0500
+ https://www.thereactshow.com
+ en-us
+ © 2023 Owl Creek Studio
+ yes
+ Support this Podcast
+a2863ece-d2d2-5562-84b4-accc82758033
+ Owl Creek Studios
+ episodic
+ false
+
+ react, software, frontend, development, full stack, react native, agile, scrum, programming, developer, programmer, engineering
+
+ Owl Creek Studios
+
+
+ https://storage.buzzsprout.com/variants/d1tds1rufs5340fyq9mpyzo491qp/5cfec01b44f3e29fae1fb88ade93fc4aecd05b192fbfbc2c2f1daa412b7c1921.jpg
+ The React Show
+ https://www.thereactshow.com
+
+
+
+
+
+ Thomas Hintz
+ -
+
A Fundamentally New React: My Journey with React Server Components
+ A Fundamentally New React: My Journey with React Server Components
+ React Sever Components are going to change so much of how we use and write React programs. In this episode we start to dive into Server Components and my journey using them to build an app.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ React Sever Components are going to change so much of how we use and write React programs. In this episode we start to dive into Server Components and my journey using them to build an app.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-12076221
+ Fri, 20 Jan 2023 07:00:00 -0800
+
+
+ 2232
+
+ 1
+ 73
+ full
+ false
+
+ -
+
Learning React on Only 3 Hours Per Week While Working Full-Time
+ Learning React on Only 3 Hours Per Week While Working Full-Time
+ What's it like to learn React while also working a full-time job? In this episode we join Jane on her journey to learn React while also working full-time. We join her in the triumph of building her first React app but also many struggles and pitfalls along the way from outdated React documentation to not understanding that React is not always so easy to integrate with non-React libraries.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What's it like to learn React while also working a full-time job? In this episode we join Jane on her journey to learn React while also working full-time. We join her in the triumph of building her first React app but also many struggles and pitfalls along the way from outdated React documentation to not understanding that React is not always so easy to integrate with non-React libraries.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-12033274
+ Fri, 13 Jan 2023 07:00:00 -0800
+
+
+ 2266
+
+ 1
+ 72
+ full
+ false
+
+ -
+
Testing & useEffect: Porting RN App to Web
+ Testing & useEffect: Porting RN App to Web
+ What is it like to port a React Native app to React for Web? In this episode we join Thomas on a journey to do just that. Along the way we discuss how testing and useEffect are possibly the worst parts about React and how you can use them in the best ways.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What is it like to port a React Native app to React for Web? In this episode we join Thomas on a journey to do just that. Along the way we discuss how testing and useEffect are possibly the worst parts about React and how you can use them in the best ways.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11941927
+ Fri, 30 Dec 2022 07:00:00 -0800
+
+
+ 2255
+
+ 1
+ 71
+ full
+ false
+
+ -
+
React 2022 Year in Review: Foundational Changes
+ React 2022 Year in Review: Foundational Changes
+ 2022 was a big year for React! We round-up the major developments in this recap and take a look at the ground-breaking changes that are laying the foundation for the future of React: server components.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ 2022 was a big year for React! We round-up the major developments in this recap and take a look at the ground-breaking changes that are laying the foundation for the future of React: server components.Show Notes Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11918765
+ Fri, 23 Dec 2022 07:00:00 -0800
+
+
+ 1849
+
+ 1
+ 70
+ full
+ false
+
+ -
+
News Dec 21st: ChatGPT, SWR 2.0, WASP, MFA CI, React Visual CMS & Flash in 2022
+ News Dec 21st: ChatGPT, SWR 2.0, WASP, MFA CI, React Visual CMS & Flash in 2022
+ React news Roundup For December 2022: fun with ChatGPT, new SRW release, WASP React app builder DSL release, Multi-factor auth for CI, React Bricks visual CMS, and Flash in 2022!Links Support the show ]]>
+ React news Roundup For December 2022: fun with ChatGPT, new SRW release, WASP React app builder DSL release, Multi-factor auth for CI, React Bricks visual CMS, and Flash in 2022!Links Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11912454
+ Wed, 21 Dec 2022 11:00:00 -0800
+ 778
+
+ 1
+ 69
+ full
+ false
+
+ -
+
How I Built My Own React
+ How I Built My Own React
+ Have you ever wondered how React works internally? Or what happens when React “renders”? I did and embarked on a journey to build my own version of React and dive deep into the source code of React itself to better understand exactly what happens “under the covers”. This is my story of that journey.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever wondered how React works internally? Or what happens when React “renders”? I did and embarked on a journey to build my own version of React and dive deep into the source code of React itself to better understand exactly what happens “under the covers”. This is my story of that journey.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11879575
+ Fri, 16 Dec 2022 07:00:00 -0800
+
+
+ 1534
+
+ 1
+ 68
+ full
+ false
+
+ -
+
FAQ on Typescript and Svelte
+ FAQ on Typescript and Svelte
+ Is Typescript really that important? Should you use it? Do I use it? Also, I recently got back into Svelte and share my thoughts on the experience and how it compares to React.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is Typescript really that important? Should you use it? Do I use it? Also, I recently got back into Svelte and share my thoughts on the experience and how it compares to React.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11802072
+ Fri, 09 Dec 2022 07:00:00 -0800
+
+
+ 2183
+
+ 1
+ 67
+ full
+ false
+
+ -
+
Thinking in React
+ Thinking in React
+ How do you “think in React”? If you can think in React you’ll be able to build React applications quicker, easier, and in a more robust manner. But where does one start? What is the best method for building React components and applications in a manner that fits well with the design of React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How do you “think in React”? If you can think in React you’ll be able to build React applications quicker, easier, and in a more robust manner. But where does one start? What is the best method for building React components and applications in a manner that fits well with the design of React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11802002
+ Fri, 02 Dec 2022 08:00:00 -0800
+
+
+ 2496
+
+ 1
+ 66
+ full
+ false
+
+ -
+
How Decentralized is Crypto, Really?
+ How Decentralized is Crypto, Really?
+ It's time to do a design analysis of cryptocurrencies and the technology they are built upon: blockchains. What are the design characteristics of cryptocurrencies and what problems are they good at solving? Are they good for currencies? How decentralized are they?LInks Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ It's time to do a design analysis of cryptocurrencies and the technology they are built upon: blockchains. What are the design characteristics of cryptocurrencies and what problems are they good at solving? Are they good for currencies? How decentralized are they?LInks Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11757420
+ Fri, 25 Nov 2022 06:00:00 -0800
+
+
+ 3615
+
+ 1
+ 65
+ full
+ false
+
+ -
+
Concise-ish Beginner's Guide to Learning React
+ Concise-ish Beginner's Guide to Learning React
+ Are you new to React or even new to programming in general but want to learn React? This is our concise-ish, opinionated guide to learning React. Between JavaScript, React, bundlers, JSX, code editors, npm or yarn, and more it can be extremely confusing when you first are trying to get started. The goal with this episode is to guide you through the path so you can learn React in the most efficient, pleasant, and fun way possible!https://www.thereactshow.com/podcast/concise-ish-beginners-guide-to-learning-react Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you new to React or even new to programming in general but want to learn React? This is our concise-ish, opinionated guide to learning React. Between JavaScript, React, bundlers, JSX, code editors, npm or yarn, and more it can be extremely confusing when you first are trying to get started. The goal with this episode is to guide you through the path so you can learn React in the most efficient, pleasant, and fun way possible!https://www.thereactshow.com/podcast/concise-ish-beginners-guide-to-learning-react Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11683392
+ Sun, 13 Nov 2022 07:00:00 -0800
+
+ 2500
+
+ 1
+ 64
+ full
+ false
+
+ -
+
It’s Not Your Fault You Don’t Understand The Code
+ It’s Not Your Fault You Don’t Understand The Code
+ If you or the previous programmer doesn't document what the code is intended to do it’s bad code and it won’t be maintainable in the long term. High quality, maintainable code must include high quality code comments. In this episode we look at why that is and how to do it. We also investigate if you can store React state outside of hooks or React classes.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ If you or the previous programmer doesn't document what the code is intended to do it’s bad code and it won’t be maintainable in the long term. High quality, maintainable code must include high quality code comments. In this episode we look at why that is and how to do it. We also investigate if you can store React state outside of hooks or React classes.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11586984
+ Fri, 28 Oct 2022 10:00:00 -0700
+
+ 2902
+
+ 1
+ 63
+ full
+ false
+
+ -
+
Your Boss Is Wrong and How Slow Is React?
+ Your Boss Is Wrong and How Slow Is React?
+ Are you more often correct than your boss? And what does that matter? Also, we have some fun experimenting with the performance of React compared to vanilla JavaScript and discuss why it does or does not matter.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you more often correct than your boss? And what does that matter? Also, we have some fun experimenting with the performance of React compared to vanilla JavaScript and discuss why it does or does not matter.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11533367
+ Fri, 21 Oct 2022 10:00:00 -0700
+
+ 2933
+
+ 1
+ 62
+ full
+ false
+
+ -
+
The Reality of Micro-Frontends and Why I Don't Recommend Them
+ The Reality of Micro-Frontends and Why I Don't Recommend Them
+ Micro-frontends have been gaining in popularity over the last few years. What actually are micro-frontends? Will they make your application better? Should you use them? We’ll do an analysis in this episode and answer those questions.Show Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Micro-frontends have been gaining in popularity over the last few years. What actually are micro-frontends? Will they make your application better? Should you use them? We’ll do an analysis in this episode and answer those questions.Show Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11500932
+ Fri, 14 Oct 2022 10:00:00 -0700
+
+ 3564
+
+ 1
+ 61
+ full
+ false
+
+ -
+
React FAQ
+ React FAQ
+ FAQ on React!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ FAQ on React!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11235167
+ Fri, 23 Sep 2022 10:00:00 -0700
+
+ 2825
+
+ 1
+ 60
+ full
+ false
+
+ -
+
Remix: As "Fast as Instant"?
+ Remix: As "Fast as Instant"?
+ We're finally going to dive into Remix and see what it's all about and if you should give it a try!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ We're finally going to dive into Remix and see what it's all about and if you should give it a try!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11235154
+ Fri, 09 Sep 2022 10:00:00 -0700
+
+ 3226
+
+ 1
+ 59
+ full
+ false
+
+ -
+
Noobs vs Experts; with Kyle VerHoef
+ Noobs vs Experts; with Kyle VerHoef
+ Are you the expert on your team and struggle to get things done with a constant barrage of questions lobbed at you? Or are you new and unsure what you should ask others and when? In this episode we try to solve those questions from both sides!Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Are you the expert on your team and struggle to get things done with a constant barrage of questions lobbed at you? Or are you new and unsure what you should ask others and when? In this episode we try to solve those questions from both sides!Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11193020
+ Fri, 26 Aug 2022 07:00:00 -0700
+
+ 3670
+
+ 1
+ 58
+ full
+ false
+
+ -
+
Oops I Built The Wrong Thing
+ Oops I Built The Wrong Thing
+ What do you do when you built the wrong feature or product? When your boss or client is upset? LinksWelcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What do you do when you built the wrong feature or product? When your boss or client is upset? LinksWelcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11130436
+ Sat, 13 Aug 2022 08:00:00 -0700
+
+ 2847
+
+ 1
+ 57
+ full
+ false
+
+ -
+
A New React Compiler!
+ A New React Compiler!
+ Twitter - The React Show Edited by: The Podcast Editor React Conf talk by Xuan HuangJoy UI TanStack Query 4
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Twitter - The React Show Edited by: The Podcast Editor React Conf talk by Xuan HuangJoy UI TanStack Query 4
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11086813
+ Fri, 05 Aug 2022 10:00:00 -0700
+
+ 2258
+
+ 1
+ 56
+ full
+ false
+
+ -
+
Popcorn Anyone? Or, How to Load Assets The Right Way
+ Popcorn Anyone? Or, How to Load Assets The Right Way
+ Nobody likes pages that jump around when loading or feel slow. How can we combat this in a measured fashion to create a smooth, enjoyable UX?News ZagJS : an exciting new library from the creator's of ChakraUI that could enable your components to be component-library agnostic!Next.js 12.2 : exciting new features in Next.js 12.2Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Nobody likes pages that jump around when loading or feel slow. How can we combat this in a measured fashion to create a smooth, enjoyable UX?News ZagJS : an exciting new library from the creator's of ChakraUI that could enable your components to be component-library agnostic!Next.js 12.2 : exciting new features in Next.js 12.2Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-11010316
+ Fri, 22 Jul 2022 10:00:00 -0700
+
+ 2030
+
+ 1
+ 55
+ full
+ false
+
+ -
+
Security From Unintentional Abusers
+ Security From Unintentional Abusers
+ What do you do when your users accidentally or even purposefully abuse your service or app? Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ What do you do when your users accidentally or even purposefully abuse your service or app? Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10966461
+ Fri, 15 Jul 2022 10:00:00 -0700
+
+ 2489
+
+ 1
+ 54
+ full
+ false
+
+ -
+
How to Start a New Project
+ How to Start a New Project
+ Or at least my method to starting and following through!Foundations of High Performance React Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Or at least my method to starting and following through!Foundations of High Performance React Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10889643
+ Fri, 01 Jul 2022 10:00:00 -0700
+
+ 2347
+
+ 1
+ 53
+ full
+ false
+
+ -
+
How I Became Good at React in a Month
+ How I Became Good at React in a Month
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10849241
+ Fri, 24 Jun 2022 10:00:00 -0700
+
+ 2905
+
+ 1
+ 52
+ full
+ false
+
+ -
+
Dan Abramov's Updated React Guide
+ Dan Abramov's Updated React Guide
+ Dan Abramov has an updated Beta React Effects Guide. In this episode we go through and see what the designers of React think about effects and how to correctly use them in React 18 and we take a look at user reactions.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Dan Abramov has an updated Beta React Effects Guide. In this episode we go through and see what the designers of React think about effects and how to correctly use them in React 18 and we take a look at user reactions.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10795014
+ Fri, 17 Jun 2022 10:00:00 -0700
+
+ 3312
+
+ 1
+ 51
+ full
+ false
+
+ -
+
Forms Still Suck, Can We Design Something Better?
+ Forms Still Suck, Can We Design Something Better?
+ The challenge: forms suck in React today, can we design a better way to work with forms in React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ The challenge: forms suck in React today, can we design a better way to work with forms in React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10735883
+ Sat, 04 Jun 2022 10:00:00 -0700
+
+ 3074
+
+ 1
+ 50
+ full
+ false
+
+ -
+
How To Become A React Engineer
+ How To Become A React Engineer
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10650446
+ Fri, 20 May 2022 10:00:00 -0700
+
+ 3660
+
+ 1
+ 49
+ full
+ false
+
+ -
+
The Secrets of React Routing
+ The Secrets of React Routing
+ Twitter: @TheReactShowFoundations of High Performance React 30% off with code REACTSHOW on Leanpub What actually is routing in React? In this episode we look at what React routing is, and how it can be used not only for the traditional tasks but for a whole lot more.
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Twitter: @TheReactShowFoundations of High Performance React 30% off with code REACTSHOW on Leanpub What actually is routing in React? In this episode we look at what React routing is, and how it can be used not only for the traditional tasks but for a whole lot more.
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10610563
+ Fri, 13 May 2022 10:00:00 -0700
+
+ 2385
+
+ 1
+ 48
+ full
+ false
+
+ -
+
How To Make Bad React Code Good
+ How To Make Bad React Code Good
+ Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10570193
+ Fri, 06 May 2022 10:00:00 -0700
+
+ 2894
+
+ 1
+ 47
+ full
+ false
+
+ -
+
React 18 Released! Everything you need to know
+ React 18 Released! Everything you need to know
+ Links Resources
Show Notes
Major New Features Concurrency! Mostly an implementation detail but powers many of the features. Interruptible renders! Better/smoother UI UX React can abandon and resume renders. Upcoming minor release will include Offscreen component for that allows restoring previous screens in the same state or even rendering a screen in the background. Breaking changes? Concurrent rendering is technically a breaking change Only enabled in parts of your app that use new features Benefits will take some time to realize, like waiting on library authors Suspense in Data Frameworks Server Components, still in development Automatic Batching Prioritized updates / AKA "transitions" Suspense On The Server Strict Mode developer features useTransition mark state updates as non-urgent useDeferredValue an upgrade over debouncing, an interruptible render that doesn't block user input useSyncExternalStore for libs, removes the needs to use useEffect when implementing subscriptions useInsertionEffect for libs, helps with CSS-in-JS lib performance issues How to upgrade: install React 18 via npm change ReactDOM.render to ReactDOM/client.createRoot (unmountComponentAtNode is also updated) callback is removed from render use useEffect or similar instead depending on use case If using SSR with hydration change hydrate to hydrateRoot State of React 18 & Reported issues: Should you upgrade? Or when should you upgrade? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Links Resources
Show Notes
Major New Features Concurrency! Mostly an implementation detail but powers many of the features. Interruptible renders! Better/smoother UI UX React can abandon and resume renders. Upcoming minor release will include Offscreen component for that allows restoring previous screens in the same state or even rendering a screen in the background. Breaking changes? Concurrent rendering is technically a breaking change Only enabled in parts of your app that use new features Benefits will take some time to realize, like waiting on library authors Suspense in Data Frameworks Server Components, still in development Automatic Batching Prioritized updates / AKA "transitions" Suspense On The Server Strict Mode developer features useTransition mark state updates as non-urgent useDeferredValue an upgrade over debouncing, an interruptible render that doesn't block user input useSyncExternalStore for libs, removes the needs to use useEffect when implementing subscriptions useInsertionEffect for libs, helps with CSS-in-JS lib performance issues How to upgrade: install React 18 via npm change ReactDOM.render to ReactDOM/client.createRoot (unmountComponentAtNode is also updated) callback is removed from render use useEffect or similar instead depending on use case If using SSR with hydration change hydrate to hydrateRoot State of React 18 & Reported issues: Should you upgrade? Or when should you upgrade? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10524868
+ Fri, 29 Apr 2022 10:00:00 -0700
+
+ 2618
+
+ 1
+ 46
+ full
+ false
+
+ -
+
How to Build React Features Right the First Time™
+ How to Build React Features Right the First Time™
+ Is it possible to build your React app right the first time? Or do you get annoyed with having to re-do things when it turns out we didn’t actually understand what users wanted? Or do you just want to make more money by creating happier users? On this episode we’ll work through methods to save time, effort, and actually build what the user wants.Links Resources
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is it possible to build your React app right the first time? Or do you get annoyed with having to re-do things when it turns out we didn’t actually understand what users wanted? Or do you just want to make more money by creating happier users? On this episode we’ll work through methods to save time, effort, and actually build what the user wants.Links Resources
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10402825
+ Fri, 08 Apr 2022 10:00:00 -0700
+
+ 4679
+
+ 1
+ 45
+ full
+ false
+
+ -
+
Why React Should Die
+ Why React Should Die
+ Is React the final answer? Is it possible today to take React’s shortcomings to create something better than React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Is React the final answer? Is it possible today to take React’s shortcomings to create something better than React?Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10365089
+ Sat, 02 Apr 2022 10:00:00 -0700
+
+ 4395
+
+ 1
+ 44
+ full
+ false
+
+ -
+
How JavaScript Actually Executes
+ How JavaScript Actually Executes
+ How does the JavaScript that powers your React app actually get run in the browser? How does React take advantage of the browser execution model? In this episode we talk about what actually happens when your JavaScript source code gets sent to a browser and it executes it going into detail about every step in the pipeline.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How does the JavaScript that powers your React app actually get run in the browser? How does React take advantage of the browser execution model? In this episode we talk about what actually happens when your JavaScript source code gets sent to a browser and it executes it going into detail about every step in the pipeline.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10317720
+ Fri, 25 Mar 2022 10:00:00 -0700
+
+ 4738
+
+ 1
+ 43
+ full
+ false
+
+ -
+
What's the Hype about Shopify Hydrogen?
+ What's the Hype about Shopify Hydrogen?
+ As new technology emerges in your technical stack, it’s important to not only learn them in theory, but to find practical ways to implement the knowledge you’re learning. You could either spend your time making another Todo List or Tic Tac Toe implementation, or dive into a rapidly expanding eCommerce market with the new Shopify Hydrogen Framework, built on upcoming React 18 Features like React Server Components.Links Show Notes
Keeping Ahead of the Hiring Curve Practice makes Perfect Story Time on “Practice” React Applications we Made Transition: Making the Practical even more Practical Capitalizing on the eCommerce Industry Shopify is Eating their Ecosystem Shopify Partners Program Shopify for DevelopersAPIs + Graphql App Bridge Polaris Component Library Liquid Hydrogen What is Hydrogen Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ As new technology emerges in your technical stack, it’s important to not only learn them in theory, but to find practical ways to implement the knowledge you’re learning. You could either spend your time making another Todo List or Tic Tac Toe implementation, or dive into a rapidly expanding eCommerce market with the new Shopify Hydrogen Framework, built on upcoming React 18 Features like React Server Components.Links Show Notes
Keeping Ahead of the Hiring Curve Practice makes Perfect Story Time on “Practice” React Applications we Made Transition: Making the Practical even more Practical Capitalizing on the eCommerce Industry Shopify is Eating their Ecosystem Shopify Partners Program Shopify for DevelopersAPIs + Graphql App Bridge Polaris Component Library Liquid Hydrogen What is Hydrogen Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10278986
+ Sat, 19 Mar 2022 10:00:00 -0700
+
+ 4870
+
+ 1
+ 42
+ full
+ false
+
+ -
+
Preventing Startup Burnout with Brian Wetzel (Part 2)
+ Preventing Startup Burnout with Brian Wetzel (Part 2)
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10229771
+ Fri, 11 Mar 2022 10:00:00 -0800
+
+ 4201
+
+ 1
+ 41
+ full
+ false
+
+ -
+
Preventing Startup Burnout with Brian Wetzel (Part 1)
+ Preventing Startup Burnout with Brian Wetzel (Part 1)
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever gotten burned out? Or do you want to learn how to prevent it from happening in the first place? In this two part series, Brian Wetzel, former CTO of Softgiving, discusses his own experiences with burnout and what we can do on a personal level as well as a engineering and process level to mitigate the chances of burnout.Links
Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10181548
+ Fri, 04 Mar 2022 10:00:00 -0800
+
+ 4564
+
+ 1
+ 40
+ full
+ false
+
+ -
+
Taking the Pain Out of Forms in React
+ Taking the Pain Out of Forms in React
+ In any application, not just Javascript based ones, user input is one of the foundational pieces for user interaction with the application, the server, and with others across the web. In order to capture user input, you need forms. In this episode, we’ll explore the box form support provided by React with the basic HTML form elements like input, textarea and select, as well as libraries that have been developed to enhance form creation, as well as to perform validation. Links Resources
Show Notes
HTML + CSS as a basis for creating websites Javascript leads to enabling more user input and interactivity options Gathering user input without forms is possible, but forms make things simpler What are forms? Forms are the typical method we user input required to interact with an ecosystemHighly opinionated Many ways to do them Security, validation, accessibility etc. Lots to consider, what is the best way to do this in React?Working with What We Have in React and Javascript/HTML Controlled vs Uncontrolled Validationpreventing server side hacking ensuring validity of data checking each field on submission regex Where vanilla react forms fail?large swathes of setStates or managing a large state object multiple types of validation, shared validation lots of vanilla code to cover existing and potentially future cases you end up just creating your own form framework, so why not use an existing one? Form FrameworksWhat are some options? Why d Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In any application, not just Javascript based ones, user input is one of the foundational pieces for user interaction with the application, the server, and with others across the web. In order to capture user input, you need forms. In this episode, we’ll explore the box form support provided by React with the basic HTML form elements like input, textarea and select, as well as libraries that have been developed to enhance form creation, as well as to perform validation. Links Resources
Show Notes
HTML + CSS as a basis for creating websites Javascript leads to enabling more user input and interactivity options Gathering user input without forms is possible, but forms make things simpler What are forms? Forms are the typical method we user input required to interact with an ecosystemHighly opinionated Many ways to do them Security, validation, accessibility etc. Lots to consider, what is the best way to do this in React?Working with What We Have in React and Javascript/HTML Controlled vs Uncontrolled Validationpreventing server side hacking ensuring validity of data checking each field on submission regex Where vanilla react forms fail?large swathes of setStates or managing a large state object multiple types of validation, shared validation lots of vanilla code to cover existing and potentially future cases you end up just creating your own form framework, so why not use an existing one? Form FrameworksWhat are some options? Why d Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10138345
+ Fri, 25 Feb 2022 10:00:00 -0800
+
+ 4099
+
+ 1
+ 39
+ full
+ false
+
+ -
+
What are React Server Components and Why They're Awesome!
+ What are React Server Components and Why They're Awesome!
+ Upcoming in a React release is React Server Components. No, they aren’t just Server-Side Rendering. In fact, they are quite different and quite powerful in their own way. In this episode we learn about React Server Components and discuss how they could be used in applications of the future.Links Resources
Show Notes
OverviewPerformance, Load Time, Etc Critical for success 53% of users abandon a website if it takes more than 3 seconds to load Users are not interested in using apps that have poor performance, don’t feel right So many ways to tackle the problem, what method to pick?Bundle Optimization with Webpack, etc. Performance Audits in App Server Side Rendering What are React Server Components?Before RSC, all components were rendered in the browser... With RSC, parts of the React Tree can be rendered by the browser, and other parts are rendered on the server. How is it different than Server Side Rendering? What are the main benefits of using React Server Components? How do React Server Components work?component.server.jsx, component.client.jsx , component.jsx Client Components cannot import Server Components, only regular or Server components can. Server Components can import Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Upcoming in a React release is React Server Components. No, they aren’t just Server-Side Rendering. In fact, they are quite different and quite powerful in their own way. In this episode we learn about React Server Components and discuss how they could be used in applications of the future.Links Resources
Show Notes
OverviewPerformance, Load Time, Etc Critical for success 53% of users abandon a website if it takes more than 3 seconds to load Users are not interested in using apps that have poor performance, don’t feel right So many ways to tackle the problem, what method to pick?Bundle Optimization with Webpack, etc. Performance Audits in App Server Side Rendering What are React Server Components?Before RSC, all components were rendered in the browser... With RSC, parts of the React Tree can be rendered by the browser, and other parts are rendered on the server. How is it different than Server Side Rendering? What are the main benefits of using React Server Components? How do React Server Components work?component.server.jsx, component.client.jsx , component.jsx Client Components cannot import Server Components, only regular or Server components can. Server Components can import Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10037837
+ Fri, 18 Feb 2022 10:00:00 -0800
+
+ 3549
+
+ 1
+ 38
+ full
+ false
+
+ -
+
React Fibers / How Your App Actually Executes
+ React Fibers / How Your App Actually Executes
+ In this episode we learn about the primary data structure underlying the React rendering process: React Fibers. With this knowledge we take a look at some of React’s design and how fibers impact development.Links Resources
Show Notes
What causes Jank? How do you get concurrency?Jank is when we need to update the UI but we can’t because we’re still processing some other work Breaking down “work” into small, discrete units of work How does React render?Phase one: reconciler phase Phase two: render to DOM/mobile/etc JavaScript execution modelJavaScript is single thread, no real concurrency Event Queue Stack frame React RendersThey can take a long time Updates could potentially be batched Some updates, like animations, keyboard events, should be prioritized Processing an API response is less priority What are fibers?A data-structure Breaking down reconciler phase in discrete units of work run in a loop Contain a priority level Contain state needed to pause and resume execution Fibers are used to allow React to create its own scheduler How does this help?React can control the execution model Prioritizing and batching updates Creating a “smooth” UX, less jank Things to watch for Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In this episode we learn about the primary data structure underlying the React rendering process: React Fibers. With this knowledge we take a look at some of React’s design and how fibers impact development.Links Resources
Show Notes
What causes Jank? How do you get concurrency?Jank is when we need to update the UI but we can’t because we’re still processing some other work Breaking down “work” into small, discrete units of work How does React render?Phase one: reconciler phase Phase two: render to DOM/mobile/etc JavaScript execution modelJavaScript is single thread, no real concurrency Event Queue Stack frame React RendersThey can take a long time Updates could potentially be batched Some updates, like animations, keyboard events, should be prioritized Processing an API response is less priority What are fibers?A data-structure Breaking down reconciler phase in discrete units of work run in a loop Contain a priority level Contain state needed to pause and resume execution Fibers are used to allow React to create its own scheduler How does this help?React can control the execution model Prioritizing and batching updates Creating a “smooth” UX, less jank Things to watch for Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10037718
+ Fri, 11 Feb 2022 10:00:00 -0800
+
+ 4914
+
+ 1
+ 37
+ full
+ false
+
+ -
+
How to successfully test React apps to speed up development / Using Cypress
+ How to successfully test React apps to speed up development / Using Cypress
+ Stop getting midnight calls because you broke the site on the last deploy: use Cypress for front-end testing! In this episode we talk about how we use the free, open-source testing framework Cypress to save time, catch bugs, and sleep better at night.Links Show Notes
What is integration testing? What are other types of testing? Story Time, life without good testsStories about poorly written tests Problem: new features get priority over testing Good tests with good coverage speeds up development!I always write tests before refactoring because you can go wild and know that all you have to do is get the tests to pass in the end Good tests give confidence: you can write new features/code a lot more quickly because you don’t have to think about breaking things, if somethings breaks you’ll know and you can fix it Infrastructure investment : it’s like investing in better roads and transportation networks, it has an upfront cost but you can move people and goods faster and more efficiently afterwards Solution: new features priority over testingEstimates include testing Don’t demo until you have tests if demoing puts on pressure to finish before you wrote tests What to test? / Testing priorities?Integration first (ensures things actually work for the end-user) Then unit What is Cypress used for?Integration Tests Unit Tests What makes Cypress best suitable for the task?Fast Consistent Screenshots, videos, logs Network request spies, spoofing CI Integration Dashboard What I don’t like about Cypress:Async APIMaybe necessary for this because of JS? Successfully Maintaining Tests? When to write tests? Cypress tips & tricksCustom commands Capturing valuesExample: capture a numeric value, do test, check t Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Stop getting midnight calls because you broke the site on the last deploy: use Cypress for front-end testing! In this episode we talk about how we use the free, open-source testing framework Cypress to save time, catch bugs, and sleep better at night.Links Show Notes
What is integration testing? What are other types of testing? Story Time, life without good testsStories about poorly written tests Problem: new features get priority over testing Good tests with good coverage speeds up development!I always write tests before refactoring because you can go wild and know that all you have to do is get the tests to pass in the end Good tests give confidence: you can write new features/code a lot more quickly because you don’t have to think about breaking things, if somethings breaks you’ll know and you can fix it Infrastructure investment : it’s like investing in better roads and transportation networks, it has an upfront cost but you can move people and goods faster and more efficiently afterwards Solution: new features priority over testingEstimates include testing Don’t demo until you have tests if demoing puts on pressure to finish before you wrote tests What to test? / Testing priorities?Integration first (ensures things actually work for the end-user) Then unit What is Cypress used for?Integration Tests Unit Tests What makes Cypress best suitable for the task?Fast Consistent Screenshots, videos, logs Network request spies, spoofing CI Integration Dashboard What I don’t like about Cypress:Async APIMaybe necessary for this because of JS? Successfully Maintaining Tests? When to write tests? Cypress tips & tricksCustom commands Capturing valuesExample: capture a numeric value, do test, check t Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-10011866
+ Fri, 04 Feb 2022 10:00:00 -0800
+
+ 5663
+
+ 1
+ 36
+ full
+ false
+
+ -
+
Chris Keen on Succeeding as a React Contractor
+ Chris Keen on Succeeding as a React Contractor
+ Join Chris Keen, of Keen Concepts, in learning about being and becoming a React contractor and how to succeed long term. Chris Keen has been a highly successful React consultant for over 7 years, a web contractor for nearly two decades, and is the founder of Keen Concepts. In this episode, we’ll learn from Chris how to become and stay a successful React contractor.Episode Page Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Join Chris Keen, of Keen Concepts, in learning about being and becoming a React contractor and how to succeed long term. Chris Keen has been a highly successful React consultant for over 7 years, a web contractor for nearly two decades, and is the founder of Keen Concepts. In this episode, we’ll learn from Chris how to become and stay a successful React contractor.Episode Page Links Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9935994
+ Fri, 28 Jan 2022 10:00:00 -0800
+
+ 5375
+
+ 1
+ 35
+ full
+ false
+
+ -
+
Query Caching, Why You Must Use It With React; Using React Query
+ Query Caching, Why You Must Use It With React; Using React Query
+ A great way to improve the UX of most React applications is to include a query caching layer. In this episode we talk about why it can be be so important and some techniques to implement it well.Show Notes
IssuesExample, data hooks based on another data hook; “location” hook used everywhere Issues with vanilla data fetching hooksEvery component/page refetches everything Everything re-renders Delays while waiting for parent hooks to return data Not triggering requests at the correct/ideal timeShould be when the user clicks the button to open the new page, not when the new page component is loaded How to structure dependent data flows and refetches? Could also use global state Update endpoints that return new data/object Scroll recovery Paged endpoints refresh intervals ️️️ResolutionQuery caching/fetching logic libSWR, React Query etc Tell lib what endpoint to hit and under which conditions, assigning that setup a keyLib stores result with a key Everything is done via that key, if the cache has a value for it it will return it Returns the same value every time the hook is used so it doesn’t cause a re-render, smoother app Stale-while Revalidate key/value store with fetching logic built in downsidessome places where it isn’t needed, appropriate Complicated RQ has good dev tools, use them! Triggering requests at the correct/ideal time Generally use endpoint paths as keys scroll recovery paged endpoints dependencies refresh intervals hook for creating RQ endpoints Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ A great way to improve the UX of most React applications is to include a query caching layer. In this episode we talk about why it can be be so important and some techniques to implement it well.Show Notes
IssuesExample, data hooks based on another data hook; “location” hook used everywhere Issues with vanilla data fetching hooksEvery component/page refetches everything Everything re-renders Delays while waiting for parent hooks to return data Not triggering requests at the correct/ideal timeShould be when the user clicks the button to open the new page, not when the new page component is loaded How to structure dependent data flows and refetches? Could also use global state Update endpoints that return new data/object Scroll recovery Paged endpoints refresh intervals ️️️ResolutionQuery caching/fetching logic libSWR, React Query etc Tell lib what endpoint to hit and under which conditions, assigning that setup a keyLib stores result with a key Everything is done via that key, if the cache has a value for it it will return it Returns the same value every time the hook is used so it doesn’t cause a re-render, smoother app Stale-while Revalidate key/value store with fetching logic built in downsidessome places where it isn’t needed, appropriate Complicated RQ has good dev tools, use them! Triggering requests at the correct/ideal time Generally use endpoint paths as keys scroll recovery paged endpoints dependencies refresh intervals hook for creating RQ endpoints Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9926848
+ Fri, 21 Jan 2022 10:00:00 -0800
+
+ 4932
+
+ 1
+ 34
+ full
+ false
+
+ -
+
Where and How to Store Data from Your React Application
+ Where and How to Store Data from Your React Application
+ As React Developers, we’ve definitely got the front-end under control, but what about the back-end? One of the core components of a successful application is your Database. What is a Database? How do you choose the right one? Where do you host it? We’ll answer all your questions and share some experiences on Where and How to Store Data from your React ApplicationShow Notes Intro Data is fundamental to solving every programming problemFirst thing I do, whether it is writing an app or designing an algorithm or creating a library is look at the data What is the structure and how I will interact with it From Hard Coded Values to Your First DatabaseParalysis by Analysis due to lack of knowing options Starting with something that you don’t know well and it takes up all your time Making the wrong choice and sticking with it even though it causes more problems Making wrong assumptions on how you write your front-end, and it doesn’t sync up well with the way you are receiving data Making the Right ChoiceWhat is the structure of the data? Who is the data for? How is the data accessed? How to choose the right type of data storage?Types of Data StorageRelational DatabasesGreat for CRUD Typically the best to start with Simple data models Need to know SQL Good enough to use for most things Key Value StoresFast access + updates to self contained datasets? Document Stores Good for specialized cases Graph DatabaseWhat is a graph?Network of Vertices and Edges Common AlgosShortest path between two verticies Allows relations via whole networks Find the path between two nodes Maintenance resources?Choosing librariesSQL LiteFile Based Relational Storage option for when Code changes every few years Running your own Database ServerCheck if it’s running User Accounts App logins, connection maintenance option for when Code changes frequently? How often does the code-base change? Where to Host Your DatabaseSelf HostedPrivacy More “maintenance” but not really if you do it right. Databases A Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ As React Developers, we’ve definitely got the front-end under control, but what about the back-end? One of the core components of a successful application is your Database. What is a Database? How do you choose the right one? Where do you host it? We’ll answer all your questions and share some experiences on Where and How to Store Data from your React ApplicationShow Notes Intro Data is fundamental to solving every programming problemFirst thing I do, whether it is writing an app or designing an algorithm or creating a library is look at the data What is the structure and how I will interact with it From Hard Coded Values to Your First DatabaseParalysis by Analysis due to lack of knowing options Starting with something that you don’t know well and it takes up all your time Making the wrong choice and sticking with it even though it causes more problems Making wrong assumptions on how you write your front-end, and it doesn’t sync up well with the way you are receiving data Making the Right ChoiceWhat is the structure of the data? Who is the data for? How is the data accessed? How to choose the right type of data storage?Types of Data StorageRelational DatabasesGreat for CRUD Typically the best to start with Simple data models Need to know SQL Good enough to use for most things Key Value StoresFast access + updates to self contained datasets? Document Stores Good for specialized cases Graph DatabaseWhat is a graph?Network of Vertices and Edges Common AlgosShortest path between two verticies Allows relations via whole networks Find the path between two nodes Maintenance resources?Choosing librariesSQL LiteFile Based Relational Storage option for when Code changes every few years Running your own Database ServerCheck if it’s running User Accounts App logins, connection maintenance option for when Code changes frequently? How often does the code-base change? Where to Host Your DatabaseSelf HostedPrivacy More “maintenance” but not really if you do it right. Databases A Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9886172
+ Fri, 14 Jan 2022 10:00:00 -0800
+
+ 4816
+
+ 1
+ 33
+ full
+ false
+
+ -
+
How To Stop Wasting Your Time
+ How To Stop Wasting Your Time
+ A lot of us end up wasting a lot of time doing repetitive tasks. But we also worry that learning a new scripting language or keyboard shortcuts will be more work than it’s worth. In this episode we discuss a method you can use to find the right things to optimize.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ A lot of us end up wasting a lot of time doing repetitive tasks. But we also worry that learning a new scripting language or keyboard shortcuts will be more work than it’s worth. In this episode we discuss a method you can use to find the right things to optimize.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9842114
+ Fri, 07 Jan 2022 10:00:00 -0800
+
+ 5431
+
+ 1
+ 32
+ full
+ false
+
+ -
+
React Component Lifecycle, What is a Component?
+ React Component Lifecycle, What is a Component?
+ We’re always working with components, but do we know when they mount or unmount or even what that actually means? Do we know how effects play into the lifecycle of a component? On this episode, we’re going to take a close look the lifecycle of a React component; what it is made up of and how it interacts with the rest of your program.Links Show Notes
Intro Overview BackgroundStory about defining a component inside of a component (starts with tests/cypress)React has to check if the definition of a component has changed What actually is a component? Nothing more than a function with bookkeeping LifecycleMounting UpdatingRuns function code but doesn’t use default state/props Updates the DOM when completeother than useLayoutEffects Post-Updating / EffectsuseLayoutEffect, synchronous, after DOM update but before paint Runs hook code sometime after component code completes running and DOM is updated, asynchronous Unmounting lexical scope SolutionsCreating lifecycle methods with useEffect properlyuseLayoutEffect vs useEffect Dependency array useOnce (similar to onMount)Similar to onMount but different because uses useEffect vs useLayoutEffect useRef - ref.current will be undefined on first run set ref.current to true after running hook code onUnmountAFAIK there is no way to on unmount in a function component But you shouldn’t need to, if you use cleanup effects properly Updating StatePrefer updating in event handlers vs useEffectEvent handler is more synchronous/easier to reason about Divisions between components/how to divide up your components/hooksShould this influence how we divide up our components?Generally no, abstractions should, not mechanics or performance Tangent: best practices Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ We’re always working with components, but do we know when they mount or unmount or even what that actually means? Do we know how effects play into the lifecycle of a component? On this episode, we’re going to take a close look the lifecycle of a React component; what it is made up of and how it interacts with the rest of your program.Links Show Notes
Intro Overview BackgroundStory about defining a component inside of a component (starts with tests/cypress)React has to check if the definition of a component has changed What actually is a component? Nothing more than a function with bookkeeping LifecycleMounting UpdatingRuns function code but doesn’t use default state/props Updates the DOM when completeother than useLayoutEffects Post-Updating / EffectsuseLayoutEffect, synchronous, after DOM update but before paint Runs hook code sometime after component code completes running and DOM is updated, asynchronous Unmounting lexical scope SolutionsCreating lifecycle methods with useEffect properlyuseLayoutEffect vs useEffect Dependency array useOnce (similar to onMount)Similar to onMount but different because uses useEffect vs useLayoutEffect useRef - ref.current will be undefined on first run set ref.current to true after running hook code onUnmountAFAIK there is no way to on unmount in a function component But you shouldn’t need to, if you use cleanup effects properly Updating StatePrefer updating in event handlers vs useEffectEvent handler is more synchronous/easier to reason about Divisions between components/how to divide up your components/hooksShould this influence how we divide up our components?Generally no, abstractions should, not mechanics or performance Tangent: best practices Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9811470
+ Fri, 31 Dec 2021 10:00:00 -0800
+
+ 4505
+
+ 1
+ 31
+ full
+ false
+
+ -
+
Why You Need To Check Software Licenses
+ Why You Need To Check Software Licenses
+ You probably know that software licenses exist, but do you know what implications they can have on your business or project? Did you know not paying attention to them can be extremely costly? In this episode we’ll talk about software licensing, how it can affect your business or project, how you can navigate it, and which license to choose for your project. LinksShow Notes
Intro Overview Consequences of using the wrong license What is software licensing?A legal contract between the party providing the software or source code and the end user Common typesFree Software (gives the recipient extensive rights to modify and redistribute)Copyleft / Free-Libre / FOSS (protective)GPL, AGPL Right to freely distribute and modify but derivative works must carry the same rights Opinion: Software end-user focused, attempts to protect end-user rights Permissive (can relicense, allows proprietization)Some BSDs, MIT, Apache, MPL Minimal restrictions, can be used, modified, redistributed Opinion: Software creator focused, attempts to make life easier on creator Public Domain & Equivalent (grants all rights)Very complicated, often depends on country of origin and use Proprietary (traditional copyright, no rights necessarily granted) License Compatibility React projects: make sure to include OSS licenses in builds/distributions Can you copy/paste code you find on stackoverflow, documentation, the internet? Trademarks Don’t add or modify licenses Distribution Analyzing Licenses for Inclusion in a Project Picking a Software License for a Project Attribution Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ You probably know that software licenses exist, but do you know what implications they can have on your business or project? Did you know not paying attention to them can be extremely costly? In this episode we’ll talk about software licensing, how it can affect your business or project, how you can navigate it, and which license to choose for your project. LinksShow Notes
Intro Overview Consequences of using the wrong license What is software licensing?A legal contract between the party providing the software or source code and the end user Common typesFree Software (gives the recipient extensive rights to modify and redistribute)Copyleft / Free-Libre / FOSS (protective)GPL, AGPL Right to freely distribute and modify but derivative works must carry the same rights Opinion: Software end-user focused, attempts to protect end-user rights Permissive (can relicense, allows proprietization)Some BSDs, MIT, Apache, MPL Minimal restrictions, can be used, modified, redistributed Opinion: Software creator focused, attempts to make life easier on creator Public Domain & Equivalent (grants all rights)Very complicated, often depends on country of origin and use Proprietary (traditional copyright, no rights necessarily granted) License Compatibility React projects: make sure to include OSS licenses in builds/distributions Can you copy/paste code you find on stackoverflow, documentation, the internet? Trademarks Don’t add or modify licenses Distribution Analyzing Licenses for Inclusion in a Project Picking a Software License for a Project Attribution Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9781457
+ Fri, 24 Dec 2021 10:00:00 -0800
+
+ 5350
+
+ 1
+ 30
+ full
+ false
+
+ -
+
Alternatives to the Software Interview / Getting a React Job
+ Alternatives to the Software Interview / Getting a React Job
+ Want to get a job as a React developer? What’s the best way to go about it? In this episode we discuss different paths to becoming a React developer and which one might be the best for you.Links Show Notes
Overview Thomas ExperienceCS degree, joke in a different way ran the gauntlet Austin Experience State of Software InterviewingWell known to be very broken Does not accurately gauge ability to do jobOne study found interviewers are primarily judging level of anxiety Obviously data-structures & algorithms are irrelevant to nearly all programming jobs (especially React)Blame Google One time Yelp was asking me about bits and bytes for a JS job Requires studying for weeks on stuff you don’t need to know even if you’re senior level Interviewing environment, like whiteboard, way different than real life Some people are great at this Why does this happen?Google High-risk for hiring company Very conservative decision making Many candidates, trying to filter without investing in more personnel Getting paid to interview How to gauge someone’s ability to do the job?Best way: see them do the job Contracting/ConsultingLower-risk for hiring company Generally leads to employment offers Much better gauge of how well you can actually do the job Generally doesn’t involve so much ds&a Either way, best thing to do is build Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Want to get a job as a React developer? What’s the best way to go about it? In this episode we discuss different paths to becoming a React developer and which one might be the best for you.Links Show Notes
Overview Thomas ExperienceCS degree, joke in a different way ran the gauntlet Austin Experience State of Software InterviewingWell known to be very broken Does not accurately gauge ability to do jobOne study found interviewers are primarily judging level of anxiety Obviously data-structures & algorithms are irrelevant to nearly all programming jobs (especially React)Blame Google One time Yelp was asking me about bits and bytes for a JS job Requires studying for weeks on stuff you don’t need to know even if you’re senior level Interviewing environment, like whiteboard, way different than real life Some people are great at this Why does this happen?Google High-risk for hiring company Very conservative decision making Many candidates, trying to filter without investing in more personnel Getting paid to interview How to gauge someone’s ability to do the job?Best way: see them do the job Contracting/ConsultingLower-risk for hiring company Generally leads to employment offers Much better gauge of how well you can actually do the job Generally doesn’t involve so much ds&a Either way, best thing to do is build Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9740045
+ Fri, 17 Dec 2021 10:00:00 -0800
+
+ 5893
+
+ 1
+ 29
+ full
+ false
+
+ -
+
What Do You Think of React? And other QA with Austin & Thomas
+ What Do You Think of React? And other QA with Austin & Thomas
+ Hot takes on React, async programming, and other topics in this special episode of the React Show where we join the hosts, Austin & Thomas, on a QA session.Episode page Show Notes Intro Announcements: Discord Overview What is your favorite program you’ve ever worked on or built?What makes it your favorite? What is your dream program to build? Have you ever considered a different career than programming?Have you ever thought about it after starting programming as a career? What do you think of React?Why React and not something else? If you could change anything about React, what would it be? What is your favorite aspect of programming? What is the most difficult part of programming for you? What programming languages do you know? How do you feel about web forms within React? Are you more interested in building apps or programming?Or something else related to programming? Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hot takes on React, async programming, and other topics in this special episode of the React Show where we join the hosts, Austin & Thomas, on a QA session.Episode page Show Notes Intro Announcements: Discord Overview What is your favorite program you’ve ever worked on or built?What makes it your favorite? What is your dream program to build? Have you ever considered a different career than programming?Have you ever thought about it after starting programming as a career? What do you think of React?Why React and not something else? If you could change anything about React, what would it be? What is your favorite aspect of programming? What is the most difficult part of programming for you? What programming languages do you know? How do you feel about web forms within React? Are you more interested in building apps or programming?Or something else related to programming? Summary Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9698201
+ Fri, 10 Dec 2021 10:00:00 -0800
+
+ 6020
+
+ 1
+ 28
+ full
+ false
+
+ -
+
Refactoring Quickly, Safely, and Easily
+ Refactoring Quickly, Safely, and Easily
+ Refactoring can be dangerous, to your program and to your health. In this episode we discuss techniques to enable safe and healthy refactoring methods.Show Notes Story time(Thomas) I used to have delusions of grandeur about my refactoring ability Austin recent project Purpose: to make the code better The challenge, how to do it so that:You don’t break things unintentionally You don’t get mired in the details and unable to move forward It doesn’t take forever MethodCode is the way it is for a reason IncrementalKeep a working version Develop in parallel ContractsDon’t break contracts until you have a working replacement Contracts are:between input and output functions components interfaces libraries Bottom-upDon’t worry about code duplication until the end Avoid “second-system” effect Try to understand why the original system was created the way it was, don’t assume you know better, even if you do Story timeI’m working on a large refactoring project involving the inventory system No down-time, must be 100% accurate I’m building it:In parallel with the existing system until it proves to be a worthy replacement Incremental, developing and deploying many smaller pieces along the way NOT as one large project that gets deployed all at once Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Refactoring can be dangerous, to your program and to your health. In this episode we discuss techniques to enable safe and healthy refactoring methods.Show Notes Story time(Thomas) I used to have delusions of grandeur about my refactoring ability Austin recent project Purpose: to make the code better The challenge, how to do it so that:You don’t break things unintentionally You don’t get mired in the details and unable to move forward It doesn’t take forever MethodCode is the way it is for a reason IncrementalKeep a working version Develop in parallel ContractsDon’t break contracts until you have a working replacement Contracts are:between input and output functions components interfaces libraries Bottom-upDon’t worry about code duplication until the end Avoid “second-system” effect Try to understand why the original system was created the way it was, don’t assume you know better, even if you do Story timeI’m working on a large refactoring project involving the inventory system No down-time, must be 100% accurate I’m building it:In parallel with the existing system until it proves to be a worthy replacement Incremental, developing and deploying many smaller pieces along the way NOT as one large project that gets deployed all at once Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9656919
+ Fri, 03 Dec 2021 10:00:00 -0800
+
+ 2975
+
+ 1
+ 27
+ full
+ false
+
+ -
+
How to Diagnose React App Bottlenecks with the Profiler
+ How to Diagnose React App Bottlenecks with the Profiler
+ Have you ever wondered why your app is slow sometimes? Or why a specific action takes so long to fully run? Or maybe why it takes so long for your initial render? The React Profiler is a great tool for diagnosing these issues. In this episode we take a look at profilers in general and then dive deep into the React profiler and how you can use it to diagnose performance issues.Show Notes Intro 0:00 Small Talk 1:20 Announcements 4:20 Overview 6:09 What is a CPU profiler? 7:18 Tracing vs Sampling 9:07 How to enable the React Profiler 15:21 Profiler dev tool 18:30 Profiler Settings 34:05 What can you do with the results? 37:26 Summary 55:35 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Have you ever wondered why your app is slow sometimes? Or why a specific action takes so long to fully run? Or maybe why it takes so long for your initial render? The React Profiler is a great tool for diagnosing these issues. In this episode we take a look at profilers in general and then dive deep into the React profiler and how you can use it to diagnose performance issues.Show Notes Intro 0:00 Small Talk 1:20 Announcements 4:20 Overview 6:09 What is a CPU profiler? 7:18 Tracing vs Sampling 9:07 How to enable the React Profiler 15:21 Profiler dev tool 18:30 Profiler Settings 34:05 What can you do with the results? 37:26 Summary 55:35 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9608790
+ Fri, 26 Nov 2021 10:00:00 -0800
+
+ 3586
+
+ 1
+ 26
+ full
+ false
+
+ -
+
So, Where Do You Host Your React App?
+ So, Where Do You Host Your React App?
+ Hosting can get overwhelming fast, because it isn’t just hosting anymore. You want something that is simple, fast, scalable, and reliable but you also want to spend your time coding and not fiddling with build failures, right? In this episode we’re going to take a look at the factors involved in making hosting, devops, and CI/CD decisions and a method for developing the right solution for you.Show Notes Overview 10:16 Austin Experience: Hosting on Raspi Thomas Experience: Geocities, Linux, PaaS, AWS/GCP Factors: Team, Orchestration, etc 20:49 Method: start simple, build incremental 25:40 Recent Past Experiences: Heroku, Beanstalk, Vercel, more 36:05 Self Hosting/Hosting PaaS 42:28 Containerization 1:00:05 Automation: GitHub/GitLab/etc 1:10:08 Summary 1:23:08 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hosting can get overwhelming fast, because it isn’t just hosting anymore. You want something that is simple, fast, scalable, and reliable but you also want to spend your time coding and not fiddling with build failures, right? In this episode we’re going to take a look at the factors involved in making hosting, devops, and CI/CD decisions and a method for developing the right solution for you.Show Notes Overview 10:16 Austin Experience: Hosting on Raspi Thomas Experience: Geocities, Linux, PaaS, AWS/GCP Factors: Team, Orchestration, etc 20:49 Method: start simple, build incremental 25:40 Recent Past Experiences: Heroku, Beanstalk, Vercel, more 36:05 Self Hosting/Hosting PaaS 42:28 Containerization 1:00:05 Automation: GitHub/GitLab/etc 1:10:08 Summary 1:23:08 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9545960
+ Fri, 19 Nov 2021 10:00:00 -0800
+
+ 5463
+
+ 1
+ 25
+ full
+ false
+
+ -
+
Is Your React App Killing The Planet?
+ Is Your React App Killing The Planet?
+ Usually we are focused on adding new features, fixing bugs, and meeting deadlines, but what if the software we are building was also killing the planet? In this episode we’re going to take a look at the ecological impact of React applications, how to measure it, and how to reduce the impact on the planet that sustains us all. Episodes now posted with show notes and links on https://www.owlcreek.studio/podcast Show Notes:Performance related to ecological impact Discussion on why ecological impact is not a high priority 10:32 React takes a ton more resources than a good vanilla JS app 14:49 Optimize common tasks / main render path 22:02 Different than normal performance optimization 22:16 CPU wakes / sleep states 22:32 Package size / network transmission / write less code 27:08 Reduce the minimum hardware requirements 34:24 Carbon Neutral / Negative 43:32 Much, much, much better to just generate less pollution to begin with Forced upgrades 49:31 Right to repair 50:21 Long-running server tasks / Data processing / AI training 53:24 Tools 1:08:30 JS browser dev tools React Profiler powertop (linux only?) Simple watt meter Announcement: Podcast with notes on owlcreek.studio 1:14:25 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Usually we are focused on adding new features, fixing bugs, and meeting deadlines, but what if the software we are building was also killing the planet? In this episode we’re going to take a look at the ecological impact of React applications, how to measure it, and how to reduce the impact on the planet that sustains us all. Episodes now posted with show notes and links on https://www.owlcreek.studio/podcast Show Notes:Performance related to ecological impact Discussion on why ecological impact is not a high priority 10:32 React takes a ton more resources than a good vanilla JS app 14:49 Optimize common tasks / main render path 22:02 Different than normal performance optimization 22:16 CPU wakes / sleep states 22:32 Package size / network transmission / write less code 27:08 Reduce the minimum hardware requirements 34:24 Carbon Neutral / Negative 43:32 Much, much, much better to just generate less pollution to begin with Forced upgrades 49:31 Right to repair 50:21 Long-running server tasks / Data processing / AI training 53:24 Tools 1:08:30 JS browser dev tools React Profiler powertop (linux only?) Simple watt meter Announcement: Podcast with notes on owlcreek.studio 1:14:25 Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9502941
+ Fri, 12 Nov 2021 10:00:00 -0800
+
+ 4741
+
+ 1
+ 24
+ full
+ false
+
+ -
+
Better Routing in React with NextJS
+ Better Routing in React with NextJS
+ Do you find React Router cumbersome or tedious to work with sometimes? Or are you just curious how routing could be done better? In this episode we take a look at how routing is done in NextJS. We discuss what it looks like and how to use it. And we also offer our opinions on the NextJS routing mechanism itself.Show Notes Intro Overview What is routing? What are routes?routing is choosing which component to render for a given path and in nextjs, or API routes relevant multi-page apps Before Nextjsvanilla react react router how to create routes With Nextjspages/routeName.js nesting Dynamic Routesblog using getServerSideProps to load slug [slug].js from sanity getServerSideProps Redirect example Opinions on: file based data-store / framework / NextJS Api Routes Summary Outro Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Do you find React Router cumbersome or tedious to work with sometimes? Or are you just curious how routing could be done better? In this episode we take a look at how routing is done in NextJS. We discuss what it looks like and how to use it. And we also offer our opinions on the NextJS routing mechanism itself.Show Notes Intro Overview What is routing? What are routes?routing is choosing which component to render for a given path and in nextjs, or API routes relevant multi-page apps Before Nextjsvanilla react react router how to create routes With Nextjspages/routeName.js nesting Dynamic Routesblog using getServerSideProps to load slug [slug].js from sanity getServerSideProps Redirect example Opinions on: file based data-store / framework / NextJS Api Routes Summary Outro Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9464470
+ Fri, 05 Nov 2021 10:00:00 -0700
+
+ 3725
+
+ 1
+ 23
+ full
+ false
+
+ -
+
Debug Smarter in your React Apps
+ Debug Smarter in your React Apps
+ It can be tempting to take the lazy approach to debugging and just start trying things, but I believe there is a much better way. In this episode we take a look at a method that works well for ensuring your debugging is productive, targeted, and successful.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ It can be tempting to take the lazy approach to debugging and just start trying things, but I believe there is a much better way. In this episode we take a look at a method that works well for ensuring your debugging is productive, targeted, and successful.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9451117
+ Fri, 29 Oct 2021 10:00:00 -0700
+
+ 3789
+
+ 1
+ 22
+ full
+ false
+
+ -
+
Your Boss Asks for an Estimate--What Do You Say?
+ Your Boss Asks for an Estimate--What Do You Say?
+ How long will that take? It’s the classic question from the boss or the client. How do you answer? Do you get stressed from trying to get things done within your answer? Or do you end up cutting corners? In this episode we’re going to discuss a method that I use to make estimates that has worked quite well and is designed to work with stakeholders to help them understand estimates and the effects of changes on estimates.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How long will that take? It’s the classic question from the boss or the client. How do you answer? Do you get stressed from trying to get things done within your answer? Or do you end up cutting corners? In this episode we’re going to discuss a method that I use to make estimates that has worked quite well and is designed to work with stakeholders to help them understand estimates and the effects of changes on estimates.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9402933
+ Fri, 22 Oct 2021 10:00:00 -0700
+
+ 6100
+
+ 1
+ 21
+ full
+ false
+
+ -
+
Discussing React Program Structure and Learning to Learn
+ Discussing React Program Structure and Learning to Learn
+ In this episode Austin and I discuss various aspects of React program structure, like component size and files. We also take a look at learning this material in general and how you can learn the best methods yourself.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ In this episode Austin and I discuss various aspects of React program structure, like component size and files. We also take a look at learning this material in general and how you can learn the best methods yourself.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9311649
+ Fri, 15 Oct 2021 10:00:00 -0700
+
+ 2083
+
+ 1
+ 20
+ full
+ false
+
+ -
+
How software teams should be structured
+ How software teams should be structured
+ Do you ever feel like you’re not being heard? Or everyone on the team is just making the code worse? Does everything feel sloppy? Is there a lot of miscommunication? In this episode we’re going to look at why you might have answered yes to those questions and what a better way to organize your team might be.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Do you ever feel like you’re not being heard? Or everyone on the team is just making the code worse? Does everything feel sloppy? Is there a lot of miscommunication? In this episode we’re going to look at why you might have answered yes to those questions and what a better way to organize your team might be.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9310587
+ Fri, 08 Oct 2021 10:00:00 -0700
+
+ 6132
+
+ 1
+ 19
+ full
+ false
+
+ -
+
How does React Render?
+ How does React Render?
+ How does React actually render your components? When is it going to invoke your component’s render code and when is it not? How intelligent is the fabled React tree diffing algorithm? We’re going to take an in-depth look at how React renders and talk about the internal algorithms and how that can and should influence the way you write React code.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ How does React actually render your components? When is it going to invoke your component’s render code and when is it not? How intelligent is the fabled React tree diffing algorithm? We’re going to take an in-depth look at how React renders and talk about the internal algorithms and how that can and should influence the way you write React code.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9277254
+ Fri, 01 Oct 2021 10:00:00 -0700
+
+ 5293
+
+ 1
+ 18
+ full
+ false
+
+ -
+
How to become a better programmer
+ How to become a better programmer
+ Ever feel like you aren’t as good as the programmer next to you? Or just curious and want to know how you can get better? And not just a little better, but to become really good at programming? In this episode we discuss some techniques that will make that happen for you based on our research and experience.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Ever feel like you aren’t as good as the programmer next to you? Or just curious and want to know how you can get better? And not just a little better, but to become really good at programming? In this episode we discuss some techniques that will make that happen for you based on our research and experience.Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9221145
+ Fri, 24 Sep 2021 10:00:00 -0700
+
+ 3804
+
+ 1
+ 17
+ full
+ false
+
+ -
+
Building Flows, Not Apps
+ Building Flows, Not Apps
+ The User Journey. A system used to define the interaction from acquisition to retention a user has with your web application. Our entire programming paradigm is built around discovering this journey, and then building an app around it. What if we instead built flows, extending further beyond our isolated use case amongst a fragmented collection of tools? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ The User Journey. A system used to define the interaction from acquisition to retention a user has with your web application. Our entire programming paradigm is built around discovering this journey, and then building an app around it. What if we instead built flows, extending further beyond our isolated use case amongst a fragmented collection of tools? Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9212081
+ Fri, 17 Sep 2021 10:00:00 -0700
+
+ 3510
+
+ 1
+ 16
+ full
+ false
+
+ -
+
Why Hooks Suck
+ Why Hooks Suck
+ Hooks are all the rage in React these days but they actually have a pretty bad API design that leads to bugs and frustration. In this episode we will take a look at the design, discuss what makes it bad, why it is that way, what the React team can do about it, and finally, what we as users of React can do about it in the meantime. So tune in and learn how to make hooks work better for you!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Hooks are all the rage in React these days but they actually have a pretty bad API design that leads to bugs and frustration. In this episode we will take a look at the design, discuss what makes it bad, why it is that way, what the React team can do about it, and finally, what we as users of React can do about it in the meantime. So tune in and learn how to make hooks work better for you!Welcome to CyrusOne Connects Join us to uncover the latest insights and advances in the data center sector and beyond.Listen on: Apple Podcasts Spotify
The Socialers Podcast - Stories Of Social Media Pros The podcast for social media professionals discussing the latest trends, tech, & news.Listen on: Apple Podcasts Spotify
Dive deep into the motivations and mechanics behind some very successful people. Risk takers, dreamers, business folk and believers discuss the journey toward their goals.Listen on: Apple Podcasts Spotify
Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9142117
+ Fri, 10 Sep 2021 10:00:00 -0700
+
+ 4113
+
+ 1
+ 15
+ full
+ false
+
+ -
+
Less Code, Better Code and Your Best Friend: DSL
+ Less Code, Better Code and Your Best Friend: DSL
+ Want to take your programs to the next level in quality and longevity? In this episode we learn about and discuss Domain Specific Languages and how you can use them in your React applications to write less code and higher quality applications that can be worked on by large teams without development slowing.Support the show ]]>
+ Want to take your programs to the next level in quality and longevity? In this episode we learn about and discuss Domain Specific Languages and how you can use them in your React applications to write less code and higher quality applications that can be worked on by large teams without development slowing.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9134714
+ Fri, 03 Sep 2021 10:00:00 -0700
+ 4525
+
+ 1
+ 14
+ full
+ false
+
+ -
+
Best Component Library: Chakra UI?
+ Best Component Library: Chakra UI?
+ There are many React component toolkits you can choose from, but one of the best is Chakra UI. In the words of Chakra UI: if you want to create accessible react apps with speed, choose Chakra UI. Chakra UI is a simple, modular, accessible component library that gives you the building blocks you need to create your React Applications.Support the show ]]>
+ There are many React component toolkits you can choose from, but one of the best is Chakra UI. In the words of Chakra UI: if you want to create accessible react apps with speed, choose Chakra UI. Chakra UI is a simple, modular, accessible component library that gives you the building blocks you need to create your React Applications.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9085485
+ Fri, 27 Aug 2021 10:00:00 -0700
+
+ 3062
+
+ 1
+ 13
+ full
+ false
+
+ -
+
Don't Get Blocked: A Better Way To Program
+ Don't Get Blocked: A Better Way To Program
+ Ever gotten a huge mental block when programming and can't figure out how to move forward? Or maybe you planned everything out nicely but it turned in to a big mess? There is a better way to program that helps mitigate these issues: bottom-up programming. In this episode we talk about what bottom-up programming is, how to do it, and what it can do to make you a better and happier programmer.Support the show ]]>
+ Ever gotten a huge mental block when programming and can't figure out how to move forward? Or maybe you planned everything out nicely but it turned in to a big mess? There is a better way to program that helps mitigate these issues: bottom-up programming. In this episode we talk about what bottom-up programming is, how to do it, and what it can do to make you a better and happier programmer.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-9031635
+ Fri, 20 Aug 2021 10:00:00 -0700
+ 3317
+
+ 1
+ 12
+ full
+ false
+
+ -
+
From Dream to React App Part One: Developing a Brand Identity
+ From Dream to React App Part One: Developing a Brand Identity
+ This is the start of our series on building a new React App! But we’re not starting with just the technical nitty-gritty, we’re going to talk about the whole process of building a React based product, starting with branding. We have developed a process that helps us and our clients quickly understand, define, and develop a brand identity. In this episode we’re going to discuss the process where you too can get started with branding the right way.Support the show ]]>
+ This is the start of our series on building a new React App! But we’re not starting with just the technical nitty-gritty, we’re going to talk about the whole process of building a React based product, starting with branding. We have developed a process that helps us and our clients quickly understand, define, and develop a brand identity. In this episode we’re going to discuss the process where you too can get started with branding the right way.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8956088
+ Fri, 13 Aug 2021 10:00:00 -0700
+ 2799
+
+ 1
+ 11
+ full
+ false
+
+ -
+
Ethical Dilemma
+ Ethical Dilemma
+ As programmers, what is our role in preventing unethical software from being developed? In this episode we discuss why it’s so important for programmers, especially, to formulate an ethical framework. Then we talk about how the framework can be utilized to make decisions about new features or products.Support the show ]]>
+ As programmers, what is our role in preventing unethical software from being developed? In this episode we discuss why it’s so important for programmers, especially, to formulate an ethical framework. Then we talk about how the framework can be utilized to make decisions about new features or products.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8955960
+ Fri, 06 Aug 2021 10:00:00 -0700
+ 2977
+
+ 1
+ 10
+ full
+ false
+
+ -
+
Don’t DRY & You’re Doing Code Reviews Wrong
+ Don’t DRY & You’re Doing Code Reviews Wrong
+ What’s the best way to write a React app, or a program in general? Are you trying to get it perfect the first time, following all the best practices? How should you do a code review? Write a comment every time someone has some code duplication? In this episode we’ll discuss why standard industry answers to those questions will actually lead to worse programs and we’ll talk about the right mentality for writing code and doing code reviews.Support the show ]]>
+ What’s the best way to write a React app, or a program in general? Are you trying to get it perfect the first time, following all the best practices? How should you do a code review? Write a comment every time someone has some code duplication? In this episode we’ll discuss why standard industry answers to those questions will actually lead to worse programs and we’ll talk about the right mentality for writing code and doing code reviews.Support the show ]]>
+ Owl Creek Studios
+
+ Buzzsprout-8906045
+ Fri, 30 Jul 2021 10:00:00 -0700
+ 2302
+
+ 1
+ 9
+ full
+ false
+
+ -
+
Next.js or create-react-app
+ Next.js or create-react-app
+ Just getting started with React? Or maybe you have built React apps for years but want to learn a better way of creating React projects? Next.js is a React based framework designed to improve the developer and user experience. In this episode we discuss Next.js, how it compares to Create-React-App, and when you might benefit from using Next.js instead.Support the show ]]>
+ Just getting started with React? Or maybe you have built React apps for years but want to learn a better way of creating React projects? Next.js is a React based framework designed to improve the developer and user experience. In this episode we discuss Next.js, how it compares to Create-React-App, and when you might benefit from using Next.js instead.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8870396
+ Fri, 23 Jul 2021 10:00:00 -0700
+ 2478
+
+ 1
+ 8
+ full
+ false
+
+ -
+
You’re using useEffect Wrong
+ You’re using useEffect Wrong
+ Yes, you are probably using useEffect wrong. useEffect is a powerful tool for hook based React components but it comes with many potential pitfalls and one widely abused feature that can lead to difficult to locate bugs. Tune in to this episode to learn how to use useEffect correctly.Support the show ]]>
+ Yes, you are probably using useEffect wrong. useEffect is a powerful tool for hook based React components but it comes with many potential pitfalls and one widely abused feature that can lead to difficult to locate bugs. Tune in to this episode to learn how to use useEffect correctly.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8870372
+ Fri, 16 Jul 2021 10:00:00 -0700
+ 2464
+
+ 1
+ 7
+ full
+ false
+
+ -
+
Driving React Forward
+ Driving React Forward
+ What will it take to drive React and the surrounding JavaScript ecosystem forward in a dramatic way? How much better can we make it in the next 20 years? In this episode we discuss major and fundamental improvements that should be made.Support the show ]]>
+ What will it take to drive React and the surrounding JavaScript ecosystem forward in a dramatic way? How much better can we make it in the next 20 years? In this episode we discuss major and fundamental improvements that should be made.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8838108
+ Fri, 09 Jul 2021 10:00:00 -0700
+ 3882
+
+ 1
+ 6
+ full
+ false
+
+ -
+
React 18: FINALLY concurrent execution!
+ React 18: FINALLY concurrent execution!
+ In this episode we talk about the upcoming React 18 release. This is a very exciting release, especially from a performance perspective, as it finally brings concurrent and interruptible rendering along with other exciting changes!Support the show ]]>
+ In this episode we talk about the upcoming React 18 release. This is a very exciting release, especially from a performance perspective, as it finally brings concurrent and interruptible rendering along with other exciting changes!Support the show ]]>
+ Thomas
+
+ Buzzsprout-8795702
+ Thu, 01 Jul 2021 08:00:00 -0700
+ 2409
+
+ 1
+ 5
+ full
+ false
+
+ -
+
Finding and Fixing React Bottlenecks
+ Finding and Fixing React Bottlenecks
+ Do you have a bottleneck in your React application? If so, we're going to discuss the best ways to find and solve it based on the principles I've outlined in my follow-up book to "Foundations of High Performance React" called "High Performance React." We're going to use an example bottleneck I solved recently for a client that was making their application unusable in some critical circumstances.Support the show ]]>
+ Do you have a bottleneck in your React application? If so, we're going to discuss the best ways to find and solve it based on the principles I've outlined in my follow-up book to "Foundations of High Performance React" called "High Performance React." We're going to use an example bottleneck I solved recently for a client that was making their application unusable in some critical circumstances.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8745645
+ Tue, 22 Jun 2021 09:00:00 -0700
+ 2228
+
+ 1
+ 4
+ full
+ false
+
+ -
+
High Quality at High Speed (bug free code?) - The React Show #3
+ High Quality at High Speed (bug free code?) - The React Show #3
+ How do you both write code quickly but also minimize the number of times your weekend will be ruined by nasty bug reports? In this episode we're going to talk about how to write and ship React applications quickly while also minimizing the number and extent of the bugs that make it into production!Support the show ]]>
+ How do you both write code quickly but also minimize the number of times your weekend will be ruined by nasty bug reports? In this episode we're going to talk about how to write and ship React applications quickly while also minimizing the number and extent of the bugs that make it into production!Support the show ]]>
+ Thomas
+
+ Buzzsprout-8546247
+ Tue, 18 May 2021 18:00:00 -0700
+ 2291
+
+ 1
+ 3
+ full
+ false
+
+ -
+
Debugging React Apps - The React Show #2
+ Debugging React Apps - The React Show #2
+ Debugging can be extremely frustrating and time consuming, but it doesn't have to be. In this Q & A session we will talk about techniques to more efficiently debug React applications and how to do it without wanting to tear your hair out.Support the show ]]>
+ Debugging can be extremely frustrating and time consuming, but it doesn't have to be. In this Q & A session we will talk about techniques to more efficiently debug React applications and how to do it without wanting to tear your hair out.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8478262
+ Fri, 07 May 2021 08:00:00 -0700
+ 2260
+
+ 1
+ 2
+ full
+ false
+
+ -
+
No MUI?? - The React Show #1
+ No MUI?? - The React Show #1
+ Should you use Material UI for your React component library or are there better alternatives? Join us as we discuss React component libraries for our first episode.Support the show ]]>
+ Should you use Material UI for your React component library or are there better alternatives? Join us as we discuss React component libraries for our first episode.Support the show ]]>
+ Thomas
+
+ Buzzsprout-8391451
+ Fri, 23 Apr 2021 09:00:00 -0700
+ 1743
+
+ 1
+ 1
+ full
+ false
+
+
+
diff --git a/src/images/foundations.png b/src/images/foundations.png
new file mode 100644
index 0000000..247dd1a
Binary files /dev/null and b/src/images/foundations.png differ
diff --git a/src/images/headshot.jpg b/src/images/headshot.jpg
new file mode 100644
index 0000000..226693b
Binary files /dev/null and b/src/images/headshot.jpg differ
diff --git a/src/images/poster.png b/src/images/poster.png
new file mode 100644
index 0000000..08f197c
Binary files /dev/null and b/src/images/poster.png differ
diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css
new file mode 100644
index 0000000..b5c61c9
--- /dev/null
+++ b/src/styles/tailwind.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/todo.org b/src/todo.org
new file mode 100644
index 0000000..50a7f7a
--- /dev/null
+++ b/src/todo.org
@@ -0,0 +1,5 @@
+* TODOs
+** TODO contact us email sending
+** TODO book stripe integration
+** TODO PDF download not working
+** TODO favicon
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..34df6eb
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,23 @@
+const defaultTheme = require('tailwindcss/defaultTheme')
+
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: ['./src/**/*.{js,jsx}'],
+ theme: {
+ extend: {
+ fontFamily: {
+ sans: ['Satoshi', ...defaultTheme.fontFamily.sans],
+ },
+ spacing: {
+ 18: '4.5rem',
+ 112: '28rem',
+ 120: '30rem',
+ },
+ },
+ },
+ plugins: [
+ require('@tailwindcss/line-clamp'),
+ require('@tailwindcss/typography'),
+ require('@tailwindcss/forms'),
+ ],
+}