heartwood every commit a ring

Migrate from styled-components to CSS Modules

24e506cf by Isaac Bythewood · 7 months ago

Migrate from styled-components to CSS Modules

- Removed styled-components and related Babel plugin from dependencies.
- Replaced ThemeProvider and global styles with CSS Modules in application code.
- Migrated styles for various components and pages to CSS Modules, including layout, animations, and typography.
- Established global CSS variables for theme colors and breakpoints.
- Cleaned up unused files and configurations related to styled-components.
deleted .babelrc
@@ -1,14 +0,0 @@{  "presets": ["next/babel"],  "plugins": [    [      "styled-components",      {        "ssr": true,        "minify": true,        "transpileTemplateLiterals": true,        "pure": true      }    ]  ]}
deleted .editorconfig
@@ -1,18 +0,0 @@# EditorConfig is awesome: https://EditorConfig.org# Top-most EditorConfig fileroot = true# Default configuration for all file types[*]charset = utf-8end_of_line = lfindent_style = spaceindent_size = 2insert_final_newline = truetrim_trailing_whitespace = true# Markdown files use trailing whitespace for line breaks[*.md]trim_trailing_whitespace = falseindent_size = 4
deleted .eslintrc.js
@@ -1,29 +0,0 @@module.exports = {  env: {    browser: true,    es6: true,    node: true  },  extends: [    "eslint:recommended",    "plugin:react/recommended",    "plugin:prettier/recommended"  ],  globals: {    Atomics: "readonly",    SharedArrayBuffer: "readonly"  },  parserOptions: {    ecmaFeatures: {      jsx: true    },    ecmaVersion: 2018,    sourceType: "module"  },  plugins: ["react", "prettier"],  rules: {    "prettier/prettier": "error",    "react/jsx-uses-react": "error",    "react/jsx-uses-vars": "error"  }};
added UPDATE.md
@@ -0,0 +1,67 @@# Update## Styled-components migrationWe are migrating from styled-components to CSS Modules. Use this checklist to track the remaining work and the cleanup tasks.### Current status- **Tooling & dependencies**   - [x] `package.json`: remove `styled-components` and `babel-plugin-styled-components` once no modules import them.   - [x] `.babelrc`: drop the `styled-components` plugin configuration after the runtime dependency is gone.- **Application code**   - [x] `pages/_app.js`: replace `ThemeProvider`, `createGlobalStyle`, and the `Transition` styled wrapper with CSS Modules or plain CSS. Introduce global CSS and CSS custom properties for the theme.   - [x] `pages/_document.js`: remove the `ServerStyleSheet` integration when styled-components is no longer used.   - [x] `pages/index.js`: migrate layout, animation keyframes, and background styling to a CSS Module.   - [x] `pages/about.js`: migrate layout, animation keyframes, and hero copy styling to a CSS Module.   - [x] `pages/log.js`: migrate log table layout and form controls to CSS Modules.   - [x] `pages/summary.js`: migrate summary cards, charts, and typography to CSS Modules.   - [x] `components/entry.js`: migrate log entry layout, state-based modifiers, and button styles to CSS Modules.   - [x] `components/l10n.js`: migrate button and chip styling to CSS Modules.   - [x] `components/page.js`: migrate the layout container margin handling to CSS Modules.   - [x] `components/sidebar.js`: migrate sidebar layout, responsive rules, and active state styling to CSS Modules.   - [x] `components/timer.js`: migrate timer layout, circular progress, and animation styling to CSS Modules.### Migration plan1. **Establish CSS Module baseline**   - Create a `styles/globals.css` (or equivalent) and import it from `pages/_app.js`.   - Move global typography, body background, and transition class selectors into this file.2. **Expose theme values via CSS variables**   - Translate the `theme.colors` palette and breakpoint in `site.config.js` into `:root` custom properties.   - Ensure components access colors using `var(--color-one)` instead of `props.theme`.3. **Component-by-component migration**   - For each page/component above, create a CSS Module named `<Component>.module.css` in the same directory.   - Move styled-component rules into the module, replacing dynamic logic with class names and modifier classes.   - Replace `styled` component usage with semantic HTML elements and `className` bindings.4. **Handle animations and keyframes**   - Move `keyframes` declarations into the relevant CSS Module using `@keyframes` and reference them via `animation-name`.   - Ensure animations previously using props keep their timing via explicit class variants.5. **Update transitions**   - Port the `.page-transition-*` selectors used by `CSSTransition` into global CSS so they remain globally accessible.   - Replace the styled `Transition` wrapper with a simple `div`/`main` using class names.6. **Cleanup**   - Delete unused styled-components files, remove `ThemeProvider`, and simplify `_document.js` once no styled-components remain.   - Remove dependencies and Babel plugin entries, then reinstall packages to verify the bundle no longer pulls styled-components.### Implementation notes- Audit each migration to ensure responsive behavior driven by `props.theme.breakpoint` is replicated with media queries using the new CSS custom property.- Minimize inline styles; prefer modifier classes (e.g., `.zoom`, `.empty`) in CSS Modules.- After each component migration, verify layouts through `npm run next:build` and the relevant page in development.- Document any CSS utilities or shared mixins in a follow-up section if patterns emerge during migration.### Cleanup backlog- [x] Delete `.babelrc` so Next.js can return to the default SWC pipeline.- [x] Remove the direct `@babel/core` dependency and refresh the lockfile.- [x] Remove unused `next-compose-plugins` dependency.- [x] Delete `site.config.js` now that theme tokens live in `styles/globals.css`.- [x] Remove `@next/bundle-analyzer` integration from dependencies and `next.config.js`.- [ ] Double-check for any Babel-specific npm scripts or config files left behind and simplify them if found.
modified components/entry.js
@@ -1,11 +1,12 @@import React, { useContext, useRef, useEffect } from "react";import styled from "styled-components";import { useForm } from "react-hook-form";import PropTypes from "prop-types";import { timeString } from "../utils/time";import { Context } from "../components/context";import styles from "./entry.module.css";const Entry = ({ entry, removeEntry, isSelected }) => {  const { state, dispatch } = useContext(Context);  const { register, handleSubmit } = useForm();
@@ -27,29 +28,35 @@ const Entry = ({ entry, removeEntry, isSelected }) => {    });    dispatch({ type: "TOGGLE_EDITION", edit: false, submited: true });  };  useEffect(() => {    if (isSelected == entry.id) {    if (isSelected == entry.id && focusedEntry.current) {      focusedEntry.current.focus();      focusedEntry.current.scrollIntoView({ behavior: "smooth" });    }  });  const highlight = isSelected == entry.id ? { filter: "invert(1)" } : {};  const containerClasses = [styles.entryContainer];  if (state.edit) containerClasses.push(styles.zoom);  return (    <EntryContainer    <div      style={highlight}      className={state.edit && "zoom"}      className={containerClasses.join(" ")}      ref={focusedEntry}      tabIndex={-1}    >      {state.edit && isSelected == entry.id ? (        <EntryForm onSubmit={handleSubmit(onSubmit)}>          <EntryTime>        <form className={styles.entryForm} onSubmit={handleSubmit(onSubmit)}>          <div className={styles.entryTime}>            {timeString(entry.end - entry.start)}            <span>{entry.start.toLocaleTimeString()}</span>          </EntryTime>          <EntryNote>            <EntryNoteInput          </div>          <div className={styles.entryNote}>            <input              {...register("note")}              className={styles.entryNoteInput}              name="note"              autoFocus              value={state.log.find((x) => x.id == entry.id).note || ""}
@@ -69,22 +76,30 @@ const Entry = ({ entry, removeEntry, isSelected }) => {                })              }            />          </EntryNote>          <EntrySubmit type="submit">✔</EntrySubmit>          <EntryRemove          </div>          <button            className={`${styles.entryButton} ${styles.entrySubmit}`}            type="submit"          >          </button>          <button            className={`${styles.entryButton} ${styles.entryRemove}`}            type="button"            onClick={() => dispatch({ type: "TOGGLE_EDITION", edit: false })}          >            x          </EntryRemove>        </EntryForm>          </button>        </form>      ) : (        <>          <EntryTime>          <div className={styles.entryTime}>            {timeString(entry.end - entry.start)}            <span>{entry.start.toLocaleTimeString()}</span>          </EntryTime>          <EntryNote className={entry.note.length === 0 && "empty"}>          </div>          <div            className={`${styles.entryNote} ${entry.note.length === 0 ? styles.entryNoteEmpty : ""}`.trim()}          >            {entry.note}            {entry.tags.length > 0 && (              <small>
@@ -95,26 +110,28 @@ const Entry = ({ entry, removeEntry, isSelected }) => {                  .join(", ")}              </small>            )}          </EntryNote>          <EntryEdit          </div>          <button            className={`${styles.entryButton} ${styles.entryEdit}`}            onClick={() => {              dispatch({ type: "SELECT_LOG_ITEM", id: entry.id });              dispatch({ type: "TOGGLE_EDITION", edit: true });            }}          >            _          </EntryEdit>          <EntryRemove          </button>          <button            className={`${styles.entryButton} ${styles.entryRemove}`}            onClick={() => {              dispatch({ type: "SELECT_LOG_ITEM", id: "" });              removeEntry(entry.id);            }}          >            x          </EntryRemove>          </button>        </>      )}    </EntryContainer>    </div>  );};
@@ -125,155 +142,3 @@ Entry.propTypes = {};export default Entry;const EntryContainer = styled.div`  background-color: #ffffff;  color: black;  margin-bottom: 15px;  display: grid;  grid-template-columns: 150px 1fr 50px 50px;  align-items: center;  border-bottom: 1px solid ${(props) => props.theme.colors.four};  transition-duration: 250ms;  transition-property: transform;  &.zoom {    transform: scale(1.05);  }  &.fade-appear,  &.fade-enter {    opacity: 0;    transform: translateX(-100px);  }  &.fade-appear-active,  &.fade-enter-active {    opacity: 1;    transform: translateX(0);    transition-duration: 250ms;    transition-property: opacity, transform;  }  &.fade-exit {    opacity: 1;    transform: translateX(0);  }  &.fade-exit-active {    opacity: 0;    transition-delay: 0ms !important;    transition-duration: 250ms;    transition-property: opacity, transform;    transform: translateX(100px);  }  @media (${(props) => props.theme.breakpoint}) {    grid-template-columns: 1fr 1fr;    grid-template-rows: auto auto auto;    text-align: center;  }`;const EntryForm = styled.form`  display: contents;`;const EntryNoteInput = styled.input`  border: none;  padding: 12px 0;  font-size: 1em;  width: 100%;  border-bottom: 2px solid ${(props) => props.theme.colors.three};`;const EntryTime = styled.div`  font-weight: bold;  font-size: 1.3em;  padding: 15px;  height: 100%;  background-color: ${(props) => props.theme.colors.four};  color: white;  text-align: center;  display: flex;  justify-content: center;  align-items: center;  box-sizing: border-box;  flex-direction: column;  @media (${(props) => props.theme.breakpoint}) {    grid-column: 1 / span 2;  }  span {    font-size: 0.7em;    opacity: 0.8;    font-weight: lighter;  }`;const EntryNote = styled.div`  padding: 15px;  &.empty {    padding: 0;  }  & small {    display: block;    color: gray;    margin-top: 5px;  }  @media (${(props) => props.theme.breakpoint}) {    grid-column: 1 / span 2;  }`;const EntryEdit = styled.button`  font-size: 1.3em;  font-weight: bolder;  color: white;  cursor: pointer;  border: 0;  background: ${(props) => props.theme.colors.four};  margin: 0;  padding: 15px;  height: 100%;  @media (${(props) => props.theme.breakpoint}) {    padding: 5px;  }`;const EntrySubmit = styled.button`  font-size: 1.3em;  font-weight: bolder;  color: white;  cursor: pointer;  border: 0;  background: ${(props) => props.theme.colors.four};  margin: 0;  padding: 15px;  height: 100%;  @media (${(props) => props.theme.breakpoint}) {    padding: 5px;  }`;const EntryRemove = styled.button`  font-size: 1.3em;  font-weight: bolder;  color: white;  cursor: pointer;  border: 0;  background: ${(props) => props.theme.colors.five};  margin: 0;  padding: 15px;  height: 100%;  @media (${(props) => props.theme.breakpoint}) {    padding: 5px;  }`;
added components/entry.module.css
@@ -0,0 +1,111 @@.entryContainer {  background-color: #ffffff;  color: #000000;  margin-bottom: 15px;  display: grid;  grid-template-columns: 150px 1fr 50px 50px;  align-items: center;  border-bottom: 1px solid var(--color-four);  transition-duration: 250ms;  transition-property: transform;}.zoom {  transform: scale(1.05);}@media (max-width: 1023.99px) {  .entryContainer {    grid-template-columns: 1fr 1fr;    grid-template-rows: auto auto auto;    text-align: center;  }}.entryForm {  display: contents;}.entryNoteInput {  border: none;  padding: 12px 0;  font-size: 1em;  width: 100%;  border-bottom: 2px solid var(--color-three);  background: transparent;  color: inherit;}.entryTime {  font-weight: bold;  font-size: 1.3em;  padding: 15px;  height: 100%;  background-color: var(--color-four);  color: #ffffff;  text-align: center;  display: flex;  justify-content: center;  align-items: center;  box-sizing: border-box;  flex-direction: column;}.entryTime span {  font-size: 0.7em;  opacity: 0.8;  font-weight: lighter;}@media (max-width: 1023.99px) {  .entryTime {    grid-column: 1 / span 2;  }}.entryNote {  padding: 15px;}.entryNoteEmpty {  padding: 0;}.entryNote small {  display: block;  color: gray;  margin-top: 5px;}@media (max-width: 1023.99px) {  .entryNote {    grid-column: 1 / span 2;  }}.entryButton {  font-size: 1.3em;  font-weight: bolder;  color: #ffffff;  cursor: pointer;  border: 0;  margin: 0;  padding: 15px;  height: 100%;  background: transparent;}@media (max-width: 1023.99px) {  .entryButton {    padding: 5px;  }}.entrySubmit,.entryEdit {  background: var(--color-four);}.entryRemove {  background: var(--color-five);}
modified components/l10n.js
@@ -1,15 +1,17 @@import React, { useContext } from "react";import styled from "styled-components";import PropTypes from "prop-types";import { Context } from "./context";import styles from "./l10n.module.css";const L10n = () => {  const { state } = useContext(Context);  const { dispatch } = useContext(Context);  return (    <Select    <select      className={styles.select}      onChange={(evt) => {        dispatch({ type: "SET_LANGUAGE", language: evt.target.value });      }}
@@ -18,7 +20,7 @@ const L10n = () => {      <option value="en">English</option>      <option value="jp">日本語</option>      <option value="pl">Polski</option>    </Select>    </select>  );};
@@ -27,21 +29,3 @@ L10n.propTypes = {};export default L10n;const Select = styled.select`  position: fixed;  bottom: 5px;  right: 5px;  z-index: 2;  background-color: ${(props) => props.theme.colors.two};  color: white;  padding: 5px;  border: none;  @media (${(props) => props.theme.breakpoint}) {    top: 5px;    right: 5px;    text-align: center;    bottom: auto;  }`;
added components/l10n.module.css
@@ -0,0 +1,19 @@.select {  position: fixed;  bottom: 5px;  right: 5px;  z-index: 2;  background-color: var(--color-two);  color: #ffffff;  padding: 5px;  border: none;}@media (max-width: 1023.99px) {  .select {    top: 5px;    right: 5px;    text-align: center;    bottom: auto;  }}
modified components/page.js
@@ -1,7 +1,8 @@import React from "react";import Head from "next/head";import PropTypes from "prop-types";import styled from "styled-components";import styles from "./page.module.css";const Page = (props) => {  const baseTitle = "Timelite";
@@ -13,7 +14,7 @@ const Page = (props) => {          {props.title ? `${props.title} — ${baseTitle}` : baseTitle}        </title>      </Head>      <Content>{props.children}</Content>      <div className={styles.content}>{props.children}</div>    </>  );};
@@ -27,11 +28,3 @@ Page.propTypes = {};export default Page;const Content = styled.div`  margin-left: 50px;  @media (${(props) => props.theme.breakpoint}) {    margin-left: 0;  }`;
added components/page.module.css
@@ -0,0 +1,9 @@.content {  margin-left: 50px;}@media (max-width: 1023.99px) {  .content {    margin-left: 0;  }}
modified components/sidebar.js
@@ -1,160 +1,57 @@import React, { useContext } from "react";import { withRouter } from "next/router";import Link from "next/link";import PropTypes from "prop-types";import styled from "styled-components";import { useRouter } from "next/router";import { Context } from "./context";import strings from "../l10n/sidebar";const Sidebar = ({ router }) => {import styles from "./sidebar.module.css";const Sidebar = () => {  const { state } = useContext(Context);  strings.setLanguage(state.language);  const router = useRouter();  return (    <Side>      <Title>{strings.name}</Title>      <Pages>        <Link href="/" passHref>          <Page $active={router.pathname === "/"} aria-label={strings.timer}>    <aside className={styles.side}>      <div className={styles.title}>{strings.name}</div>      <div className={styles.pages}>        <Link href="/" passHref legacyBehavior>          <a            className={`${styles.pageLink} ${router.pathname === "/" ? styles.pageLinkActive : ""}`.trim()}            aria-label={strings.timer}          >            <TimerIcon />          </Page>          </a>        </Link>        <Link href="/log" passHref>          <Page $active={router.pathname === "/log"} aria-label={strings.log}>        <Link href="/log" passHref legacyBehavior>          <a            className={`${styles.pageLink} ${router.pathname === "/log" ? styles.pageLinkActive : ""}`.trim()}            aria-label={strings.log}          >            <LogIcon />          </Page>          </a>        </Link>        <Link href="/summary" passHref>          <Page            $active={router.pathname === "/summary"}        <Link href="/summary" passHref legacyBehavior>          <a            className={`${styles.pageLink} ${router.pathname === "/summary" ? styles.pageLinkActive : ""}`.trim()}            aria-label={strings.summary}          >            <SummaryIcon />          </Page>          </a>        </Link>      </Pages>      <Link href="/about" passHref>        <About aria-label={strings.about}>      </div>      <Link href="/about" passHref legacyBehavior>        <a className={styles.about} aria-label={strings.about}>          <HelpIcon />        </About>        </a>      </Link>    </Side>    </aside>  );};Sidebar.propTypes = {  router: PropTypes.object,  language: PropTypes.string,};export default withRouter(Sidebar);const Side = styled.div`  position: fixed;  left: 0;  top: 0;  bottom: 0;  width: 50px;  background-color: #ffffff;  display: flex;  justify-content: space-between;  flex-direction: column;  @media (${(props) => props.theme.breakpoint}) {    width: 100%;    height: 50px;    bottom: 0;    left: 0;    top: auto;    flex-direction: row;    align-items: center;  }`;const Title = styled.div`  color: ${(props) => props.theme.colors.one};  text-transform: uppercase;  font-size: 1.7em;  font-weight: 900;  text-align: center;  padding: 15px 0px;  white-space: nowrap;  writing-mode: vertical-rl;  text-orientation: mixed;  line-height: 1.7em;  @media (${(props) => props.theme.breakpoint}) {    padding: 0px 15px;    font-size: 1.4em;    writing-mode: horizontal-tb;    text-orientation: mixed;  }`;const Pages = styled.div`  display: flex;  flex-direction: column;  padding: 15px;  @media (${(props) => props.theme.breakpoint}) {    flex-direction: row;    padding: 5px;  }`;const Page = styled.a`  text-decoration: none;  position: relative;  display: flex;  margin-bottom: 1rem;  transition:    color 300ms,    font-size 300ms,    transform 300ms;  font-size: 2em;  font-weight: 100;  ${(props) =>    props.$active ? "color: rgba(0, 0, 0, 1);" : "color: rgba(0, 0, 0, 0.5);"}  &:hover {    transform: scale(1.5);  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.4em;    margin-bottom: 0;    margin-right: 15px;    &:hover {      font-size: 1.5em;    }  }`;const About = styled.a`  text-align: center;  padding: 10px 0;  display: block;  text-decoration: none;  font-family: monospace;  background: ${(props) => props.theme.colors.two};  color: white;  line-height: 0;  transition: transform 300ms;  &:hover {    transform: scale(1.5);  }export default Sidebar;  @media (${(props) => props.theme.breakpoint}) {    padding: 0 15px;    display: flex;    justify-content: center;    align-items: center;    height: 50px;  }`;const HelpIcon = () => {  return (
added components/sidebar.module.css
@@ -0,0 +1,119 @@.side {  position: fixed;  left: 0;  top: 0;  bottom: 0;  width: 50px;  background-color: #ffffff;  display: flex;  justify-content: space-between;  flex-direction: column;}@media (max-width: 1023.99px) {  .side {    width: 100%;    height: 50px;    bottom: 0;    left: 0;    top: auto;    flex-direction: row;    align-items: center;  }}.title {  color: var(--color-one);  text-transform: uppercase;  font-size: 1.7em;  font-weight: 900;  text-align: center;  padding: 15px 0;  white-space: nowrap;  writing-mode: vertical-rl;  text-orientation: mixed;  line-height: 1.7em;}@media (max-width: 1023.99px) {  .title {    padding: 0 15px;    font-size: 1.4em;    writing-mode: horizontal-tb;    text-orientation: mixed;  }}.pages {  display: flex;  flex-direction: column;  padding: 15px;}@media (max-width: 1023.99px) {  .pages {    flex-direction: row;    padding: 5px;  }}.pageLink {  text-decoration: none;  position: relative;  display: flex;  margin-bottom: 1rem;  transition:    color 300ms,    font-size 300ms,    transform 300ms;  font-size: 2em;  font-weight: 100;  color: rgba(0, 0, 0, 0.5);}.pageLink:hover {  transform: scale(1.5);}.pageLinkActive {  color: rgba(0, 0, 0, 1);}@media (max-width: 1023.99px) {  .pageLink {    font-size: 1.4em;    margin-bottom: 0;    margin-right: 15px;  }  .pageLink:hover {    transform: none;    font-size: 1.5em;  }}.about {  text-align: center;  padding: 10px 0;  display: block;  text-decoration: none;  font-family: monospace;  background: var(--color-two);  color: #ffffff;  line-height: 0;  transition: transform 300ms;}.about:hover {  transform: scale(1.5);}@media (max-width: 1023.99px) {  .about {    padding: 0 15px;    display: flex;    justify-content: center;    align-items: center;    height: 50px;  }}
modified components/timer.js
@@ -1,5 +1,4 @@import React, { useState, useEffect, useContext, useRef } from "react";import styled from "styled-components";import { toast } from "react-toastify";import { Context } from "./context";
@@ -7,6 +6,8 @@ import strings from "../l10n/timer";import contextStrings from "../l10n/context";import { timeString, timeDiff } from "../utils/time";import styles from "./timer.module.css";const Timer = () => {  const { state, dispatch } = useContext(Context);  const [time, setTime] = useState(timeString(timeDiff(state.timer)));
@@ -28,7 +29,9 @@ const Timer = () => {  }, [state.timer]);  useEffect(() => {    refToMain.current.focus();    if (refToMain.current) {      refToMain.current.focus();    }  }, []);  const submitForm = (e) => {
@@ -43,10 +46,13 @@ const Timer = () => {  return (    <>      <Time suppressHydrationWarning>{time}</Time>      <div className={styles.time} suppressHydrationWarning>        {time}      </div>      <form onSubmit={submitForm}>        <Inputs>          <Note        <div className={styles.inputs}>          <input            className={styles.note}            type="text"            aria-label={strings.note}            placeholder={strings.note}
@@ -56,114 +62,25 @@ const Timer = () => {              dispatch({ type: "NOTE_UPDATED", note: e.target.value })            }          />        </Inputs>        <Buttons>          <ResetButton            className="timer__button"        </div>        <div className={styles.buttons}>          <button            className={`${styles.button} ${styles.resetButton} timer__button`}            type="reset"            onClick={() => dispatch({ type: "NEW_TIMER" })}          >            - {strings.reset}          </ResetButton>          <AddButton className="timer__button" type="submit">          </button>          <button            className={`${styles.button} ${styles.addButton} timer__button`}            type="submit"          >            {strings.add} +          </AddButton>        </Buttons>          </button>        </div>      </form>    </>  );};export default Timer;const Time = styled.div`  font-size: 10em;  text-align: center;  font-weight: lighter;  font-variant-numeric: tabular-nums;  @media (${(props) => props.theme.breakpoint}) {    font-size: 5em;  }`;const Inputs = styled.div`  text-align: center;`;const Note = styled.input`  width: 600px;  text-align: center;  margin-top: 40px;  border: 0;  background: rgba(255, 255, 255, 0.7);  color: black;  padding: 15px 30px;  font-size: 1.6em;  border: none;  transform: scale(1);  transition:    transform 250ms,    background 250ms;  &:hover,  &:focus {    transform: scale(1.1);    background: rgba(255, 255, 255, 1);    z-index: 3;    position: relative;  }  &::placeholder {    font-size: 0.7em;    text-transform: uppercase;    font-weight: 100;  }  @media (${(props) => props.theme.breakpoint}) {    padding: 10px 20px;    font-size: 1.2em;    width: 280px;    margin-top: 20px;  }`;const Buttons = styled.div`  text-align: center;  display: flex;`;const Button = styled.button`  color: white;  padding: 15px 30px;  font-size: 1em;  letter-spacing: 2px;  width: 100%;  cursor: pointer;  text-transform: uppercase;  font-weight: 700;  border: none;  transform: scale(1);  transition: transform 250ms;  &:hover,  &:focus {    transform: scale(1.1);    z-index: 3;    position: relative;  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 0.9em;    padding: 15px 25px;    width: 100%;  }`;const ResetButton = styled(Button)`  background: ${(props) => props.theme.colors.one};`;const AddButton = styled(Button)`  background: ${(props) => props.theme.colors.two};`;
added components/timer.module.css
@@ -0,0 +1,95 @@.time {  font-size: 10em;  text-align: center;  font-weight: lighter;  font-variant-numeric: tabular-nums;}@media (max-width: 1023.99px) {  .time {    font-size: 5em;  }}.inputs {  text-align: center;}.note {  width: 600px;  text-align: center;  margin-top: 40px;  border: 0;  background: rgba(255, 255, 255, 0.7);  color: #000000;  padding: 15px 30px;  font-size: 1.6em;  transform: scale(1);  transition:    transform 250ms,    background 250ms;}.note:hover,.note:focus {  transform: scale(1.1);  background: rgba(255, 255, 255, 1);  z-index: 3;  position: relative;}.note::placeholder {  font-size: 0.7em;  text-transform: uppercase;  font-weight: 100;}@media (max-width: 1023.99px) {  .note {    padding: 10px 20px;    font-size: 1.2em;    width: 280px;    margin-top: 20px;  }}.buttons {  text-align: center;  display: flex;}.button {  color: #ffffff;  padding: 15px 30px;  font-size: 1em;  letter-spacing: 2px;  width: 100%;  cursor: pointer;  text-transform: uppercase;  font-weight: 700;  border: none;  transform: scale(1);  transition: transform 250ms;}.button:hover,.button:focus {  transform: scale(1.1);  z-index: 3;  position: relative;}@media (max-width: 1023.99px) {  .button {    font-size: 0.9em;    padding: 15px 25px;  }}.resetButton {  background: var(--color-one);}.addButton {  background: var(--color-two);}
modified next.config.js
@@ -4,14 +4,10 @@ const withPWA = require("next-pwa")({  runtimeCaching: require("next-pwa/cache"),});const withBundleAnalyzer = require("@next/bundle-analyzer")({  enabled: process.env.NODE_ENV !== "development",});/** @type {import('next').NextConfig} */const nextConfig = {  reactStrictMode: true,  swcMinify: true,};module.exports = withBundleAnalyzer(withPWA(nextConfig));module.exports = withPWA(nextConfig);
modified package.json
@@ -6,12 +6,9 @@    "next:build": "next build"  },  "dependencies": {    "@babel/core": "^7.0.0",    "@next/bundle-analyzer": "^12.1.6",    "chart.js": "^3.0.2",    "localforage": "^1.9.0",    "next": "^12.1.6",    "next-compose-plugins": "^2.2.1",    "next-pwa": "^5.5.4",    "react": "^18.2.0",    "react-csv": "^2.0.3",
@@ -22,16 +19,6 @@    "react-localization": "^1.0.16",    "react-toastify": "^9.0.4",    "react-transition-group": "^4.2.1",    "styled-components": "^6.1.18",    "uuid": "^9.0.1"  },  "devDependencies": {    "babel-plugin-styled-components": "^2.1.4",    "eslint": "^8.57.1",    "eslint-config-prettier": "^9.1.0",    "eslint-plugin-prettier": "^5.4.1",    "eslint-plugin-react": "^7.37.5",    "prettier": "^3.5.3",    "webpack": "^5.76.0"  }}
modified pages/_app.js
@@ -1,6 +1,4 @@import React from "react";import App from "next/app";import styled, { ThemeProvider, createGlobalStyle } from "styled-components";import { TransitionGroup, CSSTransition } from "react-transition-group";import { ToastContainer, toast } from "react-toastify";import "react-toastify/dist/ReactToastify.css";
@@ -10,96 +8,35 @@ import { ContextProvider } from "../components/context";import HotKeysMapping from "../components/HotKeysMapping";import L10n from "../components/l10n";import Sidebar from "../components/sidebar";import { theme } from "../site.config";class MyApp extends App {  render() {    const { Component, pageProps } = this.props;    return (      <ThemeProvider theme={theme}>        <ContextProvider>          <HotKeysMapping>            <GlobalStyle />            <ToastContainer position={toast.POSITION.TOP_RIGHT} />            <L10n />            <TransitionGroup component={null}>              <CSSTransition                key={this.props.router.route}                appear                timeout={{                  appear: 500,                  enter: 500,                  exit: 250,                }}                classNames="page-transition"              >                <Transition>                  <Component {...pageProps} />                </Transition>              </CSSTransition>            </TransitionGroup>            <Sidebar />          </HotKeysMapping>        </ContextProvider>      </ThemeProvider>    );  }}import "../styles/globals.css";const MyApp = ({ Component, pageProps, router }) => {  return (    <ContextProvider>      <HotKeysMapping>        <ToastContainer position={toast.POSITION.TOP_RIGHT} />        <L10n />        <TransitionGroup component={null}>          <CSSTransition            key={router.route}            appear            timeout={{              appear: 500,              enter: 500,              exit: 250,            }}            classNames="page-transition"          >            <div className="page-transition">              <Component {...pageProps} />            </div>          </CSSTransition>        </TransitionGroup>        <Sidebar />      </HotKeysMapping>    </ContextProvider>  );};export default MyApp;const GlobalStyle = createGlobalStyle`  body {    font-family:      -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,      sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";    color: white;    background-color: ${(props) => props.theme.colors.one};    min-height: 100vh;    width: 100%;    padding: 0;    margin: 0;    overflow-x: hidden;    text-shadow: rgba(0, 0, 0, .01) 0 0 1px;    text-rendering: optimizeLegibility;  }  input {    font-family:      -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,      sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";  }`;const Transition = styled.div`  opacity: 0;  position: absolute;  top: 0;  left: 0;  right: 0;  &.page-transition-appear,  &.page-transition-enter {    opacity: 0;  }  &.page-transition-appear-active,  &.page-transition-enter-active {    opacity: 1;    transition-delay: 250ms;    transition-duration: 250ms;    transition-property: opacity;  }  &.page-transition-appear-done,  &.page-transition-enter-done {    opacity: 1;  }  &.page-transition-exit {    opacity: 1;  }  &.page-transition-exit-active {    opacity: 0;    transition-duration: 250ms;    transition-property: opacity;  }`;
modified pages/_document.js
@@ -1,34 +1,7 @@import React from "react";import Document, { Html, Head, Main, NextScript } from "next/document";import { ServerStyleSheet } from "styled-components";class MyDocument extends Document {  static async getInitialProps(ctx) {    // Setup styled-components for rendering server side    const sheet = new ServerStyleSheet();    const originalRenderPage = ctx.renderPage;    try {      ctx.renderPage = () =>        originalRenderPage({          enhanceApp: (App) => (props) =>            sheet.collectStyles(<App {...props} />),        });      const initialProps = await Document.getInitialProps(ctx);      return {        ...initialProps,        styles: (          <>            {initialProps.styles}            {sheet.getStyleElement()}          </>        ),      };    } finally {      sheet.seal();    }  }  render() {    return (      <Html lang="en">
modified pages/about.js
@@ -1,23 +1,25 @@import React, { useContext } from "react";import styled, { keyframes } from "styled-components";import Page from "../components/page";import { Context } from "../components/context";import strings from "../l10n/about";import styles from "./about.module.css";const About = () => {  const { state } = useContext(Context);  strings.setLanguage(state.language);  return (    <Page title="About">      <GitHubLink      <a        className={styles.githubLink}        href="https://github.com/overshard/timelite"        target="_blank"        rel="noopener noreferrer"        aria-label="GitHub"      >        <GitHubLogo>        <div className={styles.githubLogo}>          <svg            xmlns="http://www.w3.org/2000/svg"            width="50"
@@ -28,283 +30,63 @@ const About = () => {          >            <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />          </svg>        </GitHubLogo>      </GitHubLink>      <Grid>        <Main>          <Heading>{strings.title}</Heading>          <Blockquote>{strings.quote}</Blockquote>          <Creator        </div>      </a>      <div className={styles.grid}>        <main className={styles.main}>          <h1 className={styles.heading}>{strings.title}</h1>          <blockquote className={styles.blockquote}>{strings.quote}</blockquote>          <a            className={styles.creator}            href="https://www.isaacbythewood.com/"            target="_blank"            rel="noopener noreferrer"          >            {strings.name}          </Creator>          <DescriptionContainer>            <KeysColumn>              <SectionTitle>{strings.sectionTimer}</SectionTitle>              <KeysDescription>          </a>          <div className={styles.descriptionContainer}>            <div className={styles.keysColumn}>              <h2 className={styles.sectionTitle}>{strings.sectionTimer}</h2>              <div className={styles.keysDescription}>                <span>⎇+r</span> {strings.keyReset}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+a</span> {strings.keyAddLog}              </KeysDescription>              <SectionTitle>{strings.sectionNavigation}</SectionTitle>              <KeysDescription>              </div>              <h2 className={styles.sectionTitle}>{strings.sectionNavigation}</h2>              <div className={styles.keysDescription}>                <span>⎇+t</span> {strings.keyTimerPage}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+l</span> {strings.keyLogPage}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+o</span> {strings.keyAboutPage}              </KeysDescription>            </KeysColumn>            <KeysColumn>              <SectionTitle>{strings.sectionLog}</SectionTitle>              <KeysDescription>              </div>            </div>            <div className={styles.keysColumn}>              <h2 className={styles.sectionTitle}>{strings.sectionLog}</h2>              <div className={styles.keysDescription}>                <span>↓</span> {strings.keyNextLogEntry}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>↑</span> {strings.keyPreviousLogEntry}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+e</span> {strings.keyEditEntry}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+d</span> {strings.keyDeleteSingleEntry}              </KeysDescription>              <KeysDescription>              </div>              <div className={styles.keysDescription}>                <span>⎇+c</span> {strings.keyClearLog}              </KeysDescription>            </KeysColumn>          </DescriptionContainer>        </Main>      </Grid>              </div>            </div>          </div>        </main>      </div>    </Page>  );};export default About;const FadeRight = keyframes`  from {    opacity: 0;    transform: translateX(-100px);  }  to {    opacity: 1;    transform: translateX(0);  }`;const ScaleRight = keyframes`  from {    transform: scaleX(0);  }  to {    transform: scaleX(1);  }`;const ScaleLeft = keyframes`  from {    transform: scaleX(1);  }  to {    transform: scaleX(0);  }`;const GitHubLink = styled.a`  text-decoration: none;`;const GitHubLogo = styled.div`  position: absolute;  top: 20px;  right: 20px;  width: 50px;  height: 50px;  opacity: 0.5;  transition-property: opacity;  transition-duration: 250ms;  &:hover {    opacity: 1;  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 3em;    right: unset;    left: 20px;  }`;const Grid = styled.div`  display: grid;  grid-template-columns: 20% 1fr 20%;  grid-template-rows: repeat(3, 1fr);  width: 100%;  height: 100vh;  @media (${(props) => props.theme.breakpoint}) {    grid-template-columns: 5% 1fr 5%;  }`;const Main = styled.main`  grid-area: 2/2;  display: flex;  justify-content: space-between;  flex-direction: column;`;const Heading = styled.h1`  font-size: 4em;  font-weight: lighter;  margin-top: 0;  opacity: 0;  animation-name: ${FadeRight};  animation-fill-mode: forwards;  animation-duration: 1000ms;  animation-timing-function: ease-out;  @media (${(props) => props.theme.breakpoint}) {    font-size: 3em;  }`;const Blockquote = styled.blockquote`  font-size: 1.5em;  margin: 0 auto 40px auto;  position: relative;  max-width: 500px;  opacity: 0;  animation-name: ${FadeRight};  animation-fill-mode: forwards;  animation-duration: 1000ms;  animation-delay: 500ms;  animation-timing-function: ease-out;  &::before {    content: "”";    position: absolute;    top: 0;    right: 0;    font-size: 5em;    opacity: 0.1;    line-height: 0.5em;  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.2em;  }`;const Creator = styled.a`  font-size: 1.5em;  display: block;  margin-left: auto;  opacity: 0.7;  color: white;  text-decoration: none;  transition: opacity 250ms;  position: relative;  opacity: 0;  animation-name: ${FadeRight};  animation-fill-mode: forwards;  animation-duration: 1000ms;  animation-delay: 1000ms;  animation-timing-function: ease-out;  &::before {    content: "";    position: absolute;    left: 0;    right: 0;    bottom: -10px;    height: 2px;    background: ${(props) => props.theme.colors.three};    transform-origin: left;    animation: ${ScaleLeft} 300ms normal forwards;    pointer-events: none;  }  &::after {    content: "";    position: absolute;    left: 0;    right: 0;    bottom: -10px;    height: 2px;    background: ${(props) => props.theme.colors.three};    opacity: 0.2;    pointer-events: none;  }  &:hover {    &::before {      animation: ${ScaleRight} 300ms normal forwards;    }  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.2em;  }`;const DescriptionContainer = styled.div`  display: flex;  margin-top: 2em;  @media (${(props) => props.theme.breakpoint}) {    display: none;  }`;const KeysColumn = styled.div`  flex: 1;`;const SectionTitle = styled.h2`  font-size: 1.5em;  position: relative;  text-align: left;  max-width: 500px;  opacity: 0;  margin-bottom: 0;  animation-name: ${FadeRight};  animation-fill-mode: forwards;  animation-duration: 1000ms;  animation-delay: 1500ms;  animation-timing-function: ease-out;`;const KeysDescription = styled.div`  font-size: 1em;  position: relative;  opacity: 0;  animation-name: ${FadeRight};  animation-fill-mode: forwards;  animation-duration: 1000ms;  animation-delay: 2000ms;  animation-timing-function: ease-out;  margin-bottom: 0;  span {    width: 45px;    display: inline-block;    background: rgba(255, 255, 255, 0.3);    font-family: monospace;    text-align: center;    font-size: 1.1em;  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.2em;  }`;
added pages/about.module.css
@@ -0,0 +1,211 @@@keyframes fadeRight {  from {    opacity: 0;    transform: translateX(-100px);  }  to {    opacity: 1;    transform: translateX(0);  }}@keyframes scaleRight {  from {    transform: scaleX(0);  }  to {    transform: scaleX(1);  }}@keyframes scaleLeft {  from {    transform: scaleX(1);  }  to {    transform: scaleX(0);  }}.githubLink {  text-decoration: none;}.githubLogo {  position: absolute;  top: 20px;  right: 20px;  width: 50px;  height: 50px;  opacity: 0.5;  transition-property: opacity;  transition-duration: 250ms;}.githubLogo:hover {  opacity: 1;}@media (max-width: 1023.99px) {  .githubLogo {    font-size: 3em;    right: unset;    left: 20px;  }}.grid {  display: grid;  grid-template-columns: 20% 1fr 20%;  grid-template-rows: repeat(3, 1fr);  width: 100%;  height: 100vh;}@media (max-width: 1023.99px) {  .grid {    grid-template-columns: 5% 1fr 5%;  }}.main {  grid-area: 2 / 2;  display: flex;  justify-content: space-between;  flex-direction: column;}.heading {  font-size: 4em;  font-weight: lighter;  margin-top: 0;  opacity: 0;  animation: fadeRight 1000ms ease-out forwards;}@media (max-width: 1023.99px) {  .heading {    font-size: 3em;  }}.blockquote {  font-size: 1.5em;  margin: 0 auto 40px auto;  position: relative;  max-width: 500px;  opacity: 0;  animation: fadeRight 1000ms ease-out 500ms forwards;}.blockquote::before {  content: "”";  position: absolute;  top: 0;  right: 0;  font-size: 5em;  opacity: 0.1;  line-height: 0.5em;}@media (max-width: 1023.99px) {  .blockquote {    font-size: 1.2em;  }}.creator {  font-size: 1.5em;  display: block;  margin-left: auto;  opacity: 0.7;  color: #ffffff;  text-decoration: none;  transition: opacity 250ms;  position: relative;  opacity: 0;  animation: fadeRight 1000ms ease-out 1000ms forwards;}.creator::before {  content: "";  position: absolute;  left: 0;  right: 0;  bottom: -10px;  height: 2px;  background: var(--color-three);  transform-origin: left;  animation: scaleLeft 300ms forwards;  pointer-events: none;}.creator::after {  content: "";  position: absolute;  left: 0;  right: 0;  bottom: -10px;  height: 2px;  background: var(--color-three);  opacity: 0.2;  pointer-events: none;}.creator:hover::before {  animation: scaleRight 300ms forwards;}@media (max-width: 1023.99px) {  .creator {    font-size: 1.2em;  }}.descriptionContainer {  display: flex;  margin-top: 2em;}@media (max-width: 1023.99px) {  .descriptionContainer {    display: none;  }}.keysColumn {  flex: 1;}.sectionTitle {  font-size: 1.5em;  position: relative;  text-align: left;  max-width: 500px;  opacity: 0;  margin-bottom: 0;  animation: fadeRight 1000ms ease-out 1500ms forwards;}.keysDescription {  font-size: 1em;  position: relative;  opacity: 0;  animation: fadeRight 1000ms ease-out 2000ms forwards;  margin-bottom: 0;}.keysDescription span {  width: 45px;  display: inline-block;  background: rgba(255, 255, 255, 0.3);  font-family: monospace;  text-align: center;  font-size: 1.1em;}@media (max-width: 1023.99px) {  .keysDescription {    font-size: 1.2em;  }}
modified pages/index.js
@@ -1,69 +1,21 @@import React from "react";import styled, { keyframes } from "styled-components";import Page from "../components/page";import Timer from "../components/timer";import styles from "./index.module.css";const Index = () => {  return (    <Page title="Timer">      <Background />      <Grid>        <Main>      <div className={styles.background} />      <div className={styles.grid}>        <main className={styles.main}>          <Timer />        </Main>      </Grid>        </main>      </div>    </Page>  );};export default Index;const FadeUp = keyframes`  from {    opacity: 0;    transform: translateY(100px);  }  to {    opacity: 1;    transform: translateY(0);  }`;const Background = styled.div`  position: absolute;  z-index: -1;  top: 0;  right: 0;  bottom: 0;  left: 0;  background-image:    linear-gradient(#0d0221, transparent),    linear-gradient(to top left, #580215, transparent),    linear-gradient(to top right, #210d00, transparent);  background-blend-mode: screen;  background-size: cover;`;const Grid = styled.div`  display: grid;  grid-template-columns: 20% 1fr 20%;  grid-template-rows: repeat(3, 1fr);  width: 100%;  height: 100vh;  @media (${(props) => props.theme.breakpoint}) {    grid-template-columns: 5% 1fr 5%;  }`;const Main = styled.main`  grid-area: 2/2;  justify-content: center;  align-items: center;  display: flex;  flex-direction: column;  animation-name: ${FadeUp};  animation-direction: forwards;  animation-duration: 500ms;`;
added pages/index.module.css
@@ -0,0 +1,48 @@@keyframes fadeUp {  from {    opacity: 0;    transform: translateY(100px);  }  to {    opacity: 1;    transform: translateY(0);  }}.background {  position: absolute;  z-index: -1;  top: 0;  right: 0;  bottom: 0;  left: 0;  background-image:    linear-gradient(#0d0221, transparent),    linear-gradient(to top left, #580215, transparent),    linear-gradient(to top right, #210d00, transparent);  background-blend-mode: screen;  background-size: cover;}.grid {  display: grid;  grid-template-columns: 20% 1fr 20%;  grid-template-rows: repeat(3, 1fr);  width: 100%;  height: 100vh;}@media (max-width: 1023.99px) {  .grid {    grid-template-columns: 5% 1fr 5%;  }}.main {  grid-area: 2 / 2;  justify-content: center;  align-items: center;  display: flex;  flex-direction: column;  animation: fadeUp 500ms forwards;}
modified pages/log.js
@@ -1,6 +1,5 @@import React, { useContext, useState } from "react";import { TransitionGroup, CSSTransition } from "react-transition-group";import styled from "styled-components";import { CSVLink } from "react-csv";import { toast } from "react-toastify";
@@ -11,6 +10,8 @@ import strings from "../l10n/log";import contextStrings from "../l10n/context";import { timeString } from "../utils/time";import styles from "./log.module.css";const Log = () => {  const { state, dispatch } = useContext(Context);  const [filter, setFilter] = useState({ type: "SHOW_ALL" });
@@ -57,52 +58,63 @@ const Log = () => {  return (    <Page title="Log">      <Grid>      <div className={styles.grid}>        {state.log.length > 0 && (          <Details>            <Total>          <aside className={styles.details}>            <div className={styles.total}>              <span>{strings.start}</span>              {state.log[state.log.length - 1].start.toLocaleTimeString()}            </Total>            <Total>            </div>            <div className={styles.total}>              <span>{strings.subtotal}</span>              {timeString(getVisibleTotalMilliseconds())}            </Total>            <Total>            </div>            <div className={styles.total}>              <span>{strings.total}</span>              {timeString(getTotalMilliseconds())}            </Total>            <CSVButton data={state.log} filename={"timelite-export.csv"}>            </div>            <CSVLink              className={styles.csvButton}              data={state.log}              filename="timelite-export.csv"            >              {strings.export}            </CSVButton>          </Details>            </CSVLink>          </aside>        )}        <Main          className={            getVisibleEntries(state.log, filter).length === 0 && "empty"          }        <main          className={`${styles.main} ${            getVisibleEntries(state.log, filter).length === 0              ? styles.mainEmpty              : ""          }`.trim()}          tabIndex="1"        >          {getTags(state.log).length > 0 && (            <TopBar>              <Filters>            <div className={styles.topBar}>              <div className={styles.filters}>                <span>{strings.tags}</span>                {getTags(state.log).map((tag) => {                  return (                    <FilterButton                    <button                      className={styles.filterButton}                      key={tag}                      onClick={() => setFilter({ type: "SHOW_TAG", tag: tag })}                    >                      {tag}                    </FilterButton>                    </button>                  );                })}                <FilterButton onClick={() => setFilter({ type: "SHOW_ALL" })}>                <button                  className={styles.filterButton}                  onClick={() => setFilter({ type: "SHOW_ALL" })}                >                  {strings.show}                </FilterButton>              </Filters>                </button>              </div>              {filter.tag ? (                <Reset                <button                  className={styles.reset}                  onClick={() => {                    dispatch({ type: "CLEAR_TAG", tag: filter.tag });                    setFilter({ type: "SHOW_ALL" });
@@ -111,9 +123,10 @@ const Log = () => {                  }}                >                  {strings.clear} {filter.tag}                </Reset>                </button>              ) : (                <Reset                <button                  className={styles.reset}                  onClick={() => {                    dispatch({ type: "CLEAR_LOG" });                    contextStrings.setLanguage(state.language);
@@ -121,9 +134,9 @@ const Log = () => {                  }}                >                  {strings.clear}                </Reset>                </button>              )}            </TopBar>            </div>          )}          {getVisibleEntries(state.log, filter).length > 0 ? (            <>
@@ -150,175 +163,12 @@ const Log = () => {              </TransitionGroup>            </>          ) : (            <Nothing>{strings.nothing}</Nothing>            <div className={styles.nothing}>{strings.nothing}</div>          )}        </Main>      </Grid>        </main>      </div>    </Page>  );};export default Log;const Grid = styled.div`  display: grid;  grid-template-columns: 250px 1fr;  width: 100%;  min-height: 100vh;  @media (${(props) => props.theme.breakpoint}) {    grid-template-columns: 1fr;    grid-auto-rows: min-content;  }`;const Details = styled.div`  position: fixed;  display: flex;  flex-direction: column;  justify-content: center;  grid-column: 1;  width: 250px;  height: 100vh;  padding: 15px;  box-sizing: border-box;  background-color: #e2e2e2;  color: ${(props) => props.theme.colors.one};  @media (${(props) => props.theme.breakpoint}) {    position: relative;    grid-column: 1;    height: auto;    margin-bottom: 50px;    width: 100%;  }`;const Main = styled.main`  grid-column: 2;  min-height: 100vh;  padding: 50px;  box-sizing: border-box;  &.empty {    grid-column: 1 / span 2;    display: flex;    align-items: center;    justify-content: center;    flex-direction: column;  }  @media (${(props) => props.theme.breakpoint}) {    grid-column: 1;    padding-top: 0;    min-height: auto;    padding-bottom: 100px;    &.empty {      height: 100vh;    }  }`;const TopBar = styled.div`  display: flex;  justify-content: space-between;  margin-bottom: 40px;  @media (${(props) => props.theme.breakpoint}) {    flex-direction: column;  }`;const Filters = styled.div`  & span {    font-size: 0.8em;    text-transform: uppercase;    font-weight: lighter;    display: block;  }`;const FilterButton = styled.button`  background: ${(props) => props.theme.colors.three};  border-bottom: 1px solid ${(props) => props.theme.colors.four};  padding: 6px 9px;  color: white;  border: none;  margin-right: 10px;  margin-top: 10px;  cursor: pointer;`;const Reset = styled.button`  font-size: 1.1em;  border: 0;  background-color: ${(props) => props.theme.colors.five};  border-bottom: 1px solid ${(props) => props.theme.colors.four};  padding: 10px 25px;  letter-spacing: 1px;  text-transform: uppercase;  color: white;  font-weight: bolder;  cursor: pointer;  @media (${(props) => props.theme.breakpoint}) {    font-size: 0.8em;    padding: 8px 15px;    margin-top: 15px;  }`;const CSVButton = styled(CSVLink)`  text-align: center;  padding: 5px 0;  display: block;  text-decoration: none;  font-family: monospace;  background: ${(props) => props.theme.colors.one};  color: white;  margin: 5px;  @media (${(props) => props.theme.breakpoint}) {    padding: 10px 0;  }`;const Nothing = styled.div`  font-weight: 100;  font-size: 2.5em;  text-align: center;  position: relative;  &:after {    content: "";    position: absolute;    width: 100%;    left: 0;    bottom: -15px;    height: 3px;    background-color: ${(props) => props.theme.colors.three};  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.4em;  }`;const Total = styled.div`  font-weight: bolder;  font-size: 2em;  padding: 5px;  margin-bottom: 20px;  &:last-child {    margin-bottom: 0;  }  & span {    font-size: 0.4em;    text-transform: uppercase;    font-weight: lighter;    display: block;  }`;
added pages/log.module.css
@@ -0,0 +1,179 @@.grid {  display: grid;  grid-template-columns: 250px 1fr;  width: 100%;  min-height: 100vh;}@media (max-width: 1023.99px) {  .grid {    grid-template-columns: 1fr;    grid-auto-rows: min-content;  }}.details {  position: fixed;  display: flex;  flex-direction: column;  justify-content: center;  grid-column: 1;  width: 250px;  height: 100vh;  padding: 15px;  box-sizing: border-box;  background-color: #e2e2e2;  color: var(--color-one);}@media (max-width: 1023.99px) {  .details {    position: relative;    grid-column: 1;    height: auto;    margin-bottom: 50px;    width: 100%;  }}.main {  grid-column: 2;  min-height: 100vh;  padding: 50px;  box-sizing: border-box;}.mainEmpty {  grid-column: 1 / span 2;  display: flex;  align-items: center;  justify-content: center;  flex-direction: column;}@media (max-width: 1023.99px) {  .main {    grid-column: 1;    padding-top: 0;    min-height: auto;    padding-bottom: 100px;  }  .mainEmpty {    grid-column: 1;    height: 100vh;  }}.topBar {  display: flex;  justify-content: space-between;  margin-bottom: 40px;}@media (max-width: 1023.99px) {  .topBar {    flex-direction: column;  }}.filters {  display: block;}.filters span {  font-size: 0.8em;  text-transform: uppercase;  font-weight: lighter;  display: block;}.filterButton {  background: var(--color-three);  border-bottom: 1px solid var(--color-four);  padding: 6px 9px;  color: #ffffff;  border: none;  margin-right: 10px;  margin-top: 10px;  cursor: pointer;}.reset {  font-size: 1.1em;  border: 0;  background-color: var(--color-five);  border-bottom: 1px solid var(--color-four);  padding: 10px 25px;  letter-spacing: 1px;  text-transform: uppercase;  color: #ffffff;  font-weight: bolder;  cursor: pointer;}@media (max-width: 1023.99px) {  .reset {    font-size: 0.8em;    padding: 8px 15px;    margin-top: 15px;  }}.csvButton {  text-align: center;  padding: 5px 0;  display: block;  text-decoration: none;  font-family: monospace;  background: var(--color-one);  color: #ffffff;  margin: 5px;}@media (max-width: 1023.99px) {  .csvButton {    padding: 10px 0;  }}.nothing {  font-weight: 100;  font-size: 2.5em;  text-align: center;  position: relative;}.nothing::after {  content: "";  position: absolute;  width: 100%;  left: 0;  bottom: -15px;  height: 3px;  background-color: var(--color-three);}@media (max-width: 1023.99px) {  .nothing {    font-size: 1.4em;  }}.total {  font-weight: bolder;  font-size: 2em;  padding: 5px;  margin-bottom: 20px;}.total:last-child {  margin-bottom: 0;}.total span {  font-size: 0.4em;  text-transform: uppercase;  font-weight: lighter;  display: block;}
modified pages/summary.js
@@ -1,11 +1,12 @@import React, { useEffect, useRef, useContext } from "react";import styled from "styled-components";import Chart from "chart.js/auto";import Page from "../components/page";import { Context } from "../components/context";import strings from "../l10n/summary";import styles from "./summary.module.css";const Summary = () => {  const { state } = useContext(Context);  strings.setLanguage(state.language);
@@ -73,88 +74,32 @@ const Summary = () => {  return (    <Page title="Summary">      <Grid>        <Main className={state.log.length <= 0 ? "empty" : ""} tabIndex="1">      <div className={styles.grid}>        <main          className={`${styles.main} ${            state.log.length <= 0 ? styles.mainEmpty : ""          }`.trim()}          tabIndex="1"        >          {state.log.length > 0 ? (            <>              <Title>{strings.title}</Title>              <h1 className={styles.title}>{strings.title}</h1>              <p>{strings.totalHours}</p>              <TotalTime>{strings.varHours(getTotalTime(state.log))}</TotalTime>              <div className={styles.totalTime}>                {strings.varHours(getTotalTime(state.log))}              </div>              <p>{strings.tagHours}</p>              <CanvasWrapper>              <div className={styles.canvasWrapper}>                <canvas ref={canvasRef} />              </CanvasWrapper>              </div>            </>          ) : (            <Nothing>{strings.logEmpty}</Nothing>            <div className={styles.nothing}>{strings.logEmpty}</div>          )}        </Main>      </Grid>        </main>      </div>    </Page>  );};export default Summary;const Grid = styled.div`  display: grid;  grid-template-columns: 20% 1fr 20%;  width: 100%;  height: 100vh;  @media (${(props) => props.theme.breakpoint}) {    grid-template-columns: 5% 1fr 5%;  }`;const Main = styled.main`  grid-area: 1/2;  &.empty {    grid-area: 1/2;    display: flex;    align-items: center;    justify-content: center;    flex-direction: column;  }`;const Title = styled.h1`  font-weight: 300;  text-transform: uppercase;  font-size: 6em;  margin-bottom: 2rem;`;const CanvasWrapper = styled.div`  background-color: white;  padding: 0.25rem;  margin-bottom: 2rem;`;const TotalTime = styled.div`  font-size: 4em;  font-weight: 900;  margin-bottom: 3rem;`;const Nothing = styled.div`  font-weight: 100;  font-size: 2.5em;  text-align: center;  position: relative;  &:after {    content: "";    position: absolute;    width: 100%;    left: 0;    bottom: -15px;    height: 3px;    background-color: ${(props) => props.theme.colors.three};  }  @media (${(props) => props.theme.breakpoint}) {    font-size: 1.4em;  }`;
added pages/summary.module.css
@@ -0,0 +1,66 @@.grid {  display: grid;  grid-template-columns: 20% 1fr 20%;  width: 100%;  height: 100vh;}@media (max-width: 1023.99px) {  .grid {    grid-template-columns: 5% 1fr 5%;  }}.main {  grid-area: 1 / 2;}.mainEmpty {  grid-area: 1 / 2;  display: flex;  align-items: center;  justify-content: center;  flex-direction: column;}.title {  font-weight: 300;  text-transform: uppercase;  font-size: 6em;  margin-bottom: 2rem;}.canvasWrapper {  background-color: #ffffff;  padding: 0.25rem;  margin-bottom: 2rem;}.totalTime {  font-size: 4em;  font-weight: 900;  margin-bottom: 3rem;}.nothing {  font-weight: 100;  font-size: 2.5em;  text-align: center;  position: relative;}.nothing::after {  content: "";  position: absolute;  width: 100%;  left: 0;  bottom: -15px;  height: 3px;  background-color: var(--color-three);}@media (max-width: 1023.99px) {  .nothing {    font-size: 1.4em;  }}
added styles/globals.css
@@ -0,0 +1,121 @@:root {  --color-one: #0d0221;  --color-two: #261447;  --color-three: #d40078;  --color-four: #ff3864;  --color-five: #ff6c11;  --breakpoint-desktop-max: 1023.99px;}* {  box-sizing: border-box;}html,body {  padding: 0;  margin: 0;}body {  font-family:    -apple-system,    BlinkMacSystemFont,    "Segoe UI",    Helvetica,    Arial,    sans-serif,    "Apple Color Emoji",    "Segoe UI Emoji",    "Segoe UI Symbol";  color: #ffffff;  background-color: var(--color-one);  min-height: 100vh;  width: 100%;  overflow-x: hidden;  text-shadow: rgba(0, 0, 0, 0.01) 0 0 1px;  text-rendering: optimizeLegibility;}input,button,select,textarea {  font-family:    -apple-system,    BlinkMacSystemFont,    "Segoe UI",    Helvetica,    Arial,    sans-serif,    "Apple Color Emoji",    "Segoe UI Emoji",    "Segoe UI Symbol";}a {  color: inherit;}.page-transition {  opacity: 0;  position: absolute;  top: 0;  left: 0;  right: 0;}.page-transition-appear,.page-transition-enter {  opacity: 0;}.page-transition-appear-active,.page-transition-enter-active {  opacity: 1;  transition-delay: 250ms;  transition-duration: 250ms;  transition-property: opacity;}.page-transition-appear-done,.page-transition-enter-done {  opacity: 1;}.page-transition-exit {  opacity: 1;}.page-transition-exit-active {  opacity: 0;  transition-duration: 250ms;  transition-property: opacity;}.fade-appear,.fade-enter {  opacity: 0;  transform: translateX(-100px);}.fade-appear-active,.fade-enter-active {  opacity: 1;  transform: translateX(0);  transition-duration: 250ms;  transition-property: opacity, transform;}.fade-exit {  opacity: 1;  transform: translateX(0);}.fade-exit-active {  opacity: 0;  transform: translateX(100px);  transition-duration: 250ms;  transition-property: opacity, transform;  transition-delay: 0ms !important;}
modified yarn.lock
@@ -33,7 +33,7 @@  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.3.tgz#cc49c2ac222d69b889bf34c795f537c0c6311111"  integrity sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw=="@babel/core@^7.0.0", "@babel/core@^7.11.1":"@babel/core@^7.11.1":  version "7.27.4"  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce"  integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==
@@ -65,7 +65,7 @@    "@jridgewell/trace-mapping" "^0.3.25"    jsesc "^3.0.2""@babel/helper-annotate-as-pure@^7.22.5", "@babel/helper-annotate-as-pure@^7.27.1":"@babel/helper-annotate-as-pure@^7.27.1":  version "7.27.3"  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5"  integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==
@@ -124,7 +124,7 @@    "@babel/traverse" "^7.27.1"    "@babel/types" "^7.27.1""@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.5", "@babel/helper-module-imports@^7.27.1":"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.27.1":  version "7.27.1"  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"  integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
@@ -276,13 +276,6 @@  dependencies:    "@babel/helper-plugin-utils" "^7.27.1""@babel/plugin-syntax-jsx@^7.22.5":  version "7.27.1"  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c"  integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==  dependencies:    "@babel/helper-plugin-utils" "^7.27.1""@babel/plugin-syntax-unicode-sets-regex@^7.18.6":  version "7.18.6"  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
@@ -797,74 +790,6 @@    "@babel/helper-string-parser" "^7.27.1"    "@babel/helper-validator-identifier" "^7.27.1""@emotion/is-prop-valid@1.2.2":  version "1.2.2"  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337"  integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==  dependencies:    "@emotion/memoize" "^0.8.1""@emotion/memoize@^0.8.1":  version "0.8.1"  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"  integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="@emotion/unitless@0.8.1":  version "0.8.1"  resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"  integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="@eslint-community/eslint-utils@^4.2.0":  version "4.7.0"  resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a"  integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==  dependencies:    eslint-visitor-keys "^3.4.3""@eslint-community/regexpp@^4.6.1":  version "4.12.1"  resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"  integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="@eslint/eslintrc@^2.1.4":  version "2.1.4"  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"  integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==  dependencies:    ajv "^6.12.4"    debug "^4.3.2"    espree "^9.6.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""@eslint/js@8.57.1":  version "8.57.1"  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"  integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q=="@humanwhocodes/config-array@^0.13.0":  version "0.13.0"  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"  integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==  dependencies:    "@humanwhocodes/object-schema" "^2.0.3"    debug "^4.3.1"    minimatch "^3.0.5""@humanwhocodes/module-importer@^1.0.1":  version "1.0.1"  resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"  integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="@humanwhocodes/object-schema@^2.0.3":  version "2.0.3"  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"  integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="@jridgewell/gen-mapping@^0.3.5":  version "0.3.8"  resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
@@ -905,13 +830,6 @@    "@jridgewell/resolve-uri" "^3.1.0"    "@jridgewell/sourcemap-codec" "^1.4.14""@next/bundle-analyzer@^12.1.6":  version "12.3.7"  resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.3.7.tgz#e6bf87fc09c5e4929c4f7237849d4e6aa8ae8cb3"  integrity sha512-bUjEBnAtlHR+vorMbq8LJZTZryE0XmNDiVx96kgJjazyVx5+ogC17JEiBi1toNDiz21mfM4rAqDEiD8kgZEzSA==  dependencies:    webpack-bundle-analyzer "4.3.0""@next/env@12.3.7":  version "12.3.7"  resolved "https://registry.yarnpkg.com/@next/env/-/env-12.3.7.tgz#e706fbf66cdee012abe73aaa500d9df0b66a2db5"
@@ -995,7 +913,7 @@  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":"@nodelib/fs.walk@^1.2.3":  version "1.2.8"  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
@@ -1003,16 +921,6 @@    "@nodelib/fs.scandir" "2.1.5"    fastq "^1.6.0""@pkgr/core@^0.2.4":  version "0.2.4"  resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.4.tgz#d897170a2b0ba51f78a099edccd968f7b103387c"  integrity sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw=="@polka/url@^1.0.0-next.20":  version "1.0.0-next.29"  resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1"  integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="@rollup/plugin-babel@^5.2.0":  version "5.3.1"  resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@@ -1067,27 +975,6 @@  dependencies:    tslib "^2.4.0""@types/eslint-scope@^3.7.7":  version "3.7.7"  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5"  integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==  dependencies:    "@types/eslint" "*"    "@types/estree" "*""@types/eslint@*":  version "9.6.1"  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584"  integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==  dependencies:    "@types/estree" "*"    "@types/json-schema" "*""@types/estree@*", "@types/estree@^1.0.6":  version "1.0.7"  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8"  integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="@types/estree@0.0.39":  version "0.0.39"  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
@@ -1101,7 +988,7 @@    "@types/minimatch" "*"    "@types/node" "*""@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.9":"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.9":  version "7.0.15"  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"  integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -1125,165 +1012,12 @@  dependencies:    "@types/node" "*""@types/stylis@4.2.5":  version "4.2.5"  resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df"  integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="@types/trusted-types@^2.0.2":  version "2.0.7"  resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"  integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="@ungap/structured-clone@^1.2.0":  version "1.3.0"  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"  integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6"  integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==  dependencies:    "@webassemblyjs/helper-numbers" "1.13.2"    "@webassemblyjs/helper-wasm-bytecode" "1.13.2""@webassemblyjs/floating-point-hex-parser@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb"  integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="@webassemblyjs/helper-api-error@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7"  integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ=="@webassemblyjs/helper-buffer@1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b"  integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA=="@webassemblyjs/helper-numbers@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d"  integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==  dependencies:    "@webassemblyjs/floating-point-hex-parser" "1.13.2"    "@webassemblyjs/helper-api-error" "1.13.2"    "@xtuc/long" "4.2.2""@webassemblyjs/helper-wasm-bytecode@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b"  integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA=="@webassemblyjs/helper-wasm-section@1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348"  integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@webassemblyjs/helper-buffer" "1.14.1"    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"    "@webassemblyjs/wasm-gen" "1.14.1""@webassemblyjs/ieee754@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba"  integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==  dependencies:    "@xtuc/ieee754" "^1.2.0""@webassemblyjs/leb128@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0"  integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==  dependencies:    "@xtuc/long" "4.2.2""@webassemblyjs/utf8@1.13.2":  version "1.13.2"  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1"  integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ=="@webassemblyjs/wasm-edit@^1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597"  integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@webassemblyjs/helper-buffer" "1.14.1"    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"    "@webassemblyjs/helper-wasm-section" "1.14.1"    "@webassemblyjs/wasm-gen" "1.14.1"    "@webassemblyjs/wasm-opt" "1.14.1"    "@webassemblyjs/wasm-parser" "1.14.1"    "@webassemblyjs/wast-printer" "1.14.1""@webassemblyjs/wasm-gen@1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570"  integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"    "@webassemblyjs/ieee754" "1.13.2"    "@webassemblyjs/leb128" "1.13.2"    "@webassemblyjs/utf8" "1.13.2""@webassemblyjs/wasm-opt@1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b"  integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@webassemblyjs/helper-buffer" "1.14.1"    "@webassemblyjs/wasm-gen" "1.14.1"    "@webassemblyjs/wasm-parser" "1.14.1""@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb"  integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@webassemblyjs/helper-api-error" "1.13.2"    "@webassemblyjs/helper-wasm-bytecode" "1.13.2"    "@webassemblyjs/ieee754" "1.13.2"    "@webassemblyjs/leb128" "1.13.2"    "@webassemblyjs/utf8" "1.13.2""@webassemblyjs/wast-printer@1.14.1":  version "1.14.1"  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07"  integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==  dependencies:    "@webassemblyjs/ast" "1.14.1"    "@xtuc/long" "4.2.2""@xtuc/ieee754@^1.2.0":  version "1.2.0"  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="@xtuc/long@4.2.2":  version "4.2.2"  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==acorn-jsx@^5.3.2:  version "5.3.2"  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==acorn-walk@^8.0.0:  version "8.3.4"  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7"  integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==  dependencies:    acorn "^8.11.0"acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.9.0:acorn@^8.14.0:  version "8.14.1"  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb"  integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
@@ -1327,11 +1061,6 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0:    json-schema-traverse "^1.0.0"    require-from-string "^2.0.2"ansi-regex@^5.0.1:  version "5.0.1"  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==ansi-styles@^4.1.0:  version "4.3.0"  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
@@ -1339,11 +1068,6 @@ ansi-styles@^4.1.0:  dependencies:    color-convert "^2.0.1"argparse@^2.0.1:  version "2.0.1"  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:  version "1.0.2"  resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b"
@@ -1352,18 +1076,6 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:    call-bound "^1.0.3"    is-array-buffer "^3.0.5"array-includes@^3.1.6, array-includes@^3.1.8:  version "3.1.8"  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"  integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==  dependencies:    call-bind "^1.0.7"    define-properties "^1.2.1"    es-abstract "^1.23.2"    es-object-atoms "^1.0.0"    get-intrinsic "^1.2.4"    is-string "^1.0.7"array-union@^1.0.1:  version "1.0.2"  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -1381,49 +1093,6 @@ array-uniq@^1.0.1:  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"  integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==array.prototype.findlast@^1.2.5:  version "1.2.5"  resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904"  integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==  dependencies:    call-bind "^1.0.7"    define-properties "^1.2.1"    es-abstract "^1.23.2"    es-errors "^1.3.0"    es-object-atoms "^1.0.0"    es-shim-unscopables "^1.0.2"array.prototype.flat@^1.3.1:  version "1.3.3"  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5"  integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==  dependencies:    call-bind "^1.0.8"    define-properties "^1.2.1"    es-abstract "^1.23.5"    es-shim-unscopables "^1.0.2"array.prototype.flatmap@^1.3.3:  version "1.3.3"  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b"  integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==  dependencies:    call-bind "^1.0.8"    define-properties "^1.2.1"    es-abstract "^1.23.5"    es-shim-unscopables "^1.0.2"array.prototype.tosorted@^1.1.4:  version "1.1.4"  resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc"  integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==  dependencies:    call-bind "^1.0.7"    define-properties "^1.2.1"    es-abstract "^1.23.3"    es-errors "^1.3.0"    es-shim-unscopables "^1.0.2"arraybuffer.prototype.slice@^1.0.4:  version "1.0.4"  resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c"
@@ -1493,17 +1162,6 @@ babel-plugin-polyfill-regenerator@^0.6.1:  dependencies:    "@babel/helper-define-polyfill-provider" "^0.6.4"babel-plugin-styled-components@^2.1.4:  version "2.1.4"  resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz#9a1f37c7f32ef927b4b008b529feb4a2c82b1092"  integrity sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==  dependencies:    "@babel/helper-annotate-as-pure" "^7.22.5"    "@babel/helper-module-imports" "^7.22.5"    "@babel/plugin-syntax-jsx" "^7.22.5"    lodash "^4.17.21"    picomatch "^2.3.1"balanced-match@^1.0.0:  version "1.0.2"  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -1582,22 +1240,12 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4:    call-bind-apply-helpers "^1.0.2"    get-intrinsic "^1.3.0"callsites@^3.0.0:  version "3.1.0"  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==camelize@^1.0.0:  version "1.0.1"  resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"  integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001718:  version "1.0.30001720"  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz#c138cb6026d362be9d8d7b0e4bcd0183a850edfd"  integrity sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0:chalk@^4.0.2:  version "4.1.2"  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1610,11 +1258,6 @@ chart.js@^3.0.2:  resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8"  integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==chrome-trace-event@^1.0.2:  version "1.0.4"  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b"  integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==clean-webpack-plugin@^4.0.0:  version "4.0.0"  resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729"
@@ -1644,11 +1287,6 @@ commander@^2.20.0:  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==commander@^6.2.0:  version "6.2.1"  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"  integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==common-tags@^1.8.0:  version "1.8.2"  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6"
@@ -1676,35 +1314,12 @@ core-js-compat@^3.40.0:  dependencies:    browserslist "^4.24.4"cross-spawn@^7.0.2:  version "7.0.6"  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"  integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==  dependencies:    path-key "^3.1.0"    shebang-command "^2.0.0"    which "^2.0.1"crypto-random-string@^2.0.0:  version "2.0.0"  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"  integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==css-color-keywords@^1.0.0:  version "1.0.0"  resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"  integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==css-to-react-native@3.2.0:  version "3.2.0"  resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"  integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==  dependencies:    camelize "^1.0.0"    css-color-keywords "^1.0.0"    postcss-value-parser "^4.0.2"csstype@3.1.3, csstype@^3.0.2:csstype@^3.0.2:  version "3.1.3"  resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
@@ -1736,18 +1351,13 @@ data-view-byte-offset@^1.0.1:    es-errors "^1.3.0"    is-data-view "^1.0.1"debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:  version "4.4.1"  resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"  integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==  dependencies:    ms "^2.1.3"deep-is@^0.1.3:  version "0.1.4"  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==deepmerge@^4.2.2:  version "4.3.1"  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
@@ -1762,7 +1372,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:    es-errors "^1.3.0"    gopd "^1.0.1"define-properties@^1.1.3, define-properties@^1.2.1:define-properties@^1.2.1:  version "1.2.1"  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"  integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
@@ -1791,20 +1401,6 @@ dir-glob@^3.0.1:  dependencies:    path-type "^4.0.0"doctrine@^2.1.0:  version "2.1.0"  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==  dependencies:    esutils "^2.0.2"doctrine@^3.0.0:  version "3.0.0"  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==  dependencies:    esutils "^2.0.2"dom-helpers@^5.0.1:  version "5.2.1"  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
@@ -1822,11 +1418,6 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1:    es-errors "^1.3.0"    gopd "^1.2.0"duplexer@^0.1.2:  version "0.1.2"  resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"  integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==ejs@^3.1.6:  version "3.1.10"  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b"
@@ -1844,15 +1435,7 @@ emojis-list@^3.0.0:  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==enhanced-resolve@^5.17.1:  version "5.18.1"  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf"  integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==  dependencies:    graceful-fs "^4.2.4"    tapable "^2.2.0"es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9:es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9:  version "1.24.0"  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328"  integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==
@@ -1922,33 +1505,6 @@ es-errors@^1.3.0:  resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"  integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==es-iterator-helpers@^1.2.1:  version "1.2.1"  resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75"  integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==  dependencies:    call-bind "^1.0.8"    call-bound "^1.0.3"    define-properties "^1.2.1"    es-abstract "^1.23.6"    es-errors "^1.3.0"    es-set-tostringtag "^2.0.3"    function-bind "^1.1.2"    get-intrinsic "^1.2.6"    globalthis "^1.0.4"    gopd "^1.2.0"    has-property-descriptors "^1.0.2"    has-proto "^1.2.0"    has-symbols "^1.1.0"    internal-slot "^1.1.0"    iterator.prototype "^1.1.4"    safe-array-concat "^1.1.3"es-module-lexer@^1.2.1:  version "1.7.0"  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a"  integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:  version "1.1.1"  resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
@@ -1956,7 +1512,7 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:  dependencies:    es-errors "^1.3.0"es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0:es-set-tostringtag@^2.1.0:  version "2.1.0"  resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"  integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
@@ -1966,13 +1522,6 @@ es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0:    has-tostringtag "^1.0.2"    hasown "^2.0.2"es-shim-unscopables@^1.0.2:  version "1.1.0"  resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5"  integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==  dependencies:    hasown "^2.0.2"es-to-primitive@^1.3.0:  version "1.3.0"  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18"
@@ -1987,146 +1536,6 @@ escalade@^3.2.0:  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"  integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==escape-string-regexp@^4.0.0:  version "4.0.0"  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==eslint-config-prettier@^9.1.0:  version "9.1.0"  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"  integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==eslint-plugin-prettier@^5.4.1:  version "5.4.1"  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz#99b55d7dd70047886b2222fdd853665f180b36af"  integrity sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==  dependencies:    prettier-linter-helpers "^1.0.0"    synckit "^0.11.7"eslint-plugin-react@^7.37.5:  version "7.37.5"  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065"  integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==  dependencies:    array-includes "^3.1.8"    array.prototype.findlast "^1.2.5"    array.prototype.flatmap "^1.3.3"    array.prototype.tosorted "^1.1.4"    doctrine "^2.1.0"    es-iterator-helpers "^1.2.1"    estraverse "^5.3.0"    hasown "^2.0.2"    jsx-ast-utils "^2.4.1 || ^3.0.0"    minimatch "^3.1.2"    object.entries "^1.1.9"    object.fromentries "^2.0.8"    object.values "^1.2.1"    prop-types "^15.8.1"    resolve "^2.0.0-next.5"    semver "^6.3.1"    string.prototype.matchall "^4.0.12"    string.prototype.repeat "^1.0.0"eslint-scope@5.1.1:  version "5.1.1"  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==  dependencies:    esrecurse "^4.3.0"    estraverse "^4.1.1"eslint-scope@^7.2.2:  version "7.2.2"  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"  integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==  dependencies:    esrecurse "^4.3.0"    estraverse "^5.2.0"eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:  version "3.4.3"  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"  integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==eslint@^8.57.1:  version "8.57.1"  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9"  integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==  dependencies:    "@eslint-community/eslint-utils" "^4.2.0"    "@eslint-community/regexpp" "^4.6.1"    "@eslint/eslintrc" "^2.1.4"    "@eslint/js" "8.57.1"    "@humanwhocodes/config-array" "^0.13.0"    "@humanwhocodes/module-importer" "^1.0.1"    "@nodelib/fs.walk" "^1.2.8"    "@ungap/structured-clone" "^1.2.0"    ajv "^6.12.4"    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.2.2"    eslint-visitor-keys "^3.4.3"    espree "^9.6.1"    esquery "^1.4.2"    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"    graphemer "^1.4.0"    ignore "^5.2.0"    imurmurhash "^0.1.4"    is-glob "^4.0.0"    is-path-inside "^3.0.3"    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.3"    strip-ansi "^6.0.1"    text-table "^0.2.0"espree@^9.6.0, espree@^9.6.1:  version "9.6.1"  resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"  integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==  dependencies:    acorn "^8.9.0"    acorn-jsx "^5.3.2"    eslint-visitor-keys "^3.4.1"esquery@^1.4.2:  version "1.6.0"  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"  integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==  dependencies:    estraverse "^5.1.0"esrecurse@^4.3.0:  version "4.3.0"  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==  dependencies:    estraverse "^5.2.0"estraverse@^4.1.1:  version "4.3.0"  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:  version "5.3.0"  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==estree-walker@^1.0.1:  version "1.0.1"  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
@@ -2137,21 +1546,11 @@ esutils@^2.0.2:  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==events@^3.2.0:  version "3.3.0"  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:  version "3.1.3"  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==fast-diff@^1.1.2:  version "1.3.0"  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"  integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==fast-glob@^3.2.9:  version "3.3.3"  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
@@ -2168,11 +1567,6 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==fast-levenshtein@^2.0.6:  version "2.0.6"  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==fast-uri@^3.0.1:  version "3.0.6"  resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
@@ -2185,13 +1579,6 @@ fastq@^1.6.0:  dependencies:    reusify "^1.0.4"file-entry-cache@^6.0.1:  version "6.0.1"  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==  dependencies:    flat-cache "^3.0.4"filelist@^1.0.4:  version "1.0.4"  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
@@ -2223,28 +1610,6 @@ find-up@^4.0.0:    locate-path "^5.0.0"    path-exists "^4.0.0"find-up@^5.0.0:  version "5.0.0"  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==  dependencies:    locate-path "^6.0.0"    path-exists "^4.0.0"flat-cache@^3.0.4:  version "3.2.0"  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"  integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==  dependencies:    flatted "^3.2.9"    keyv "^4.5.3"    rimraf "^3.0.2"flatted@^3.2.9:  version "3.3.3"  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"  integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==for-each@^0.3.3, for-each@^0.3.5:  version "0.3.5"  resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47"
@@ -2344,18 +1709,6 @@ glob-parent@^5.1.2:  dependencies:    is-glob "^4.0.1"glob-parent@^6.0.2:  version "6.0.2"  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==  dependencies:    is-glob "^4.0.3"glob-to-regexp@^0.4.1:  version "0.4.1"  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==glob@^7.0.3, glob@^7.1.3, glob@^7.1.6:  version "7.2.3"  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -2373,13 +1726,6 @@ globals@^11.1.0:  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==globals@^13.19.0:  version "13.24.0"  resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"  integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==  dependencies:    type-fest "^0.20.2"globalthis@^1.0.4:  version "1.0.4"  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
@@ -2416,23 +1762,11 @@ gopd@^1.0.1, gopd@^1.2.0:  resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"  integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4:graceful-fs@^4.1.6, graceful-fs@^4.2.0:  version "4.2.11"  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==graphemer@^1.4.0:  version "1.4.0"  resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"  integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==gzip-size@^6.0.0:  version "6.0.0"  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"  integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==  dependencies:    duplexer "^0.1.2"has-bigints@^1.0.2:  version "1.1.0"  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe"
@@ -2491,19 +1825,6 @@ immediate@~3.0.5:  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"  integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==import-fresh@^3.2.1:  version "3.3.1"  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"  integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==  dependencies:    parent-module "^1.0.0"    resolve-from "^4.0.0"imurmurhash@^0.1.4:  version "0.1.4"  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==inflight@^1.0.4:  version "1.0.6"  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -2566,7 +1887,7 @@ is-callable@^1.2.7:  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"  integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==is-core-module@^2.13.0, is-core-module@^2.16.0:is-core-module@^2.16.0:  version "2.16.1"  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"  integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
@@ -2612,7 +1933,7 @@ is-generator-function@^1.0.10:    has-tostringtag "^1.0.2"    safe-regex-test "^1.1.0"is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:is-glob@^4.0.1:  version "4.0.3"  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -2671,11 +1992,6 @@ is-path-inside@^2.1.0:  dependencies:    path-is-inside "^1.0.2"is-path-inside@^3.0.3:  version "3.0.3"  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==is-regex@^1.2.1:  version "1.2.1"  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22"
@@ -2708,7 +2024,7 @@ is-stream@^2.0.0:  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==is-string@^1.0.7, is-string@^1.1.1:is-string@^1.1.1:  version "1.1.1"  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9"  integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==
@@ -2757,23 +2073,6 @@ isarray@^2.0.5:  resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"  integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==isexe@^2.0.0:  version "2.0.0"  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==iterator.prototype@^1.1.4:  version "1.1.5"  resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39"  integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==  dependencies:    define-data-property "^1.1.4"    es-object-atoms "^1.0.0"    get-intrinsic "^1.2.6"    get-proto "^1.0.0"    has-symbols "^1.1.0"    set-function-name "^2.0.2"jake@^10.8.5:  version "10.9.2"  resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f"
@@ -2807,13 +2106,6 @@ jest-worker@^27.4.5:  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==js-yaml@^4.1.0:  version "4.1.0"  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==  dependencies:    argparse "^2.0.1"jsesc@^3.0.2:  version "3.1.0"  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
@@ -2824,16 +2116,6 @@ jsesc@~3.0.2:  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"  integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==json-buffer@3.0.1:  version "3.0.1"  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==json-parse-even-better-errors@^2.3.1:  version "2.3.1"  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==json-schema-traverse@^0.4.1:  version "0.4.1"  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -2849,11 +2131,6 @@ json-schema@^0.4.0:  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"  integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==json-stable-stringify-without-jsonify@^1.0.1:  version "1.0.1"  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"  integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==json5@^2.1.2, json5@^2.2.0, json5@^2.2.3:  version "2.2.3"  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
@@ -2873,36 +2150,11 @@ jsonpointer@^5.0.0:  resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"  integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="jsx-ast-utils@^2.4.1 || ^3.0.0":  version "3.3.5"  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"  integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==  dependencies:    array-includes "^3.1.6"    array.prototype.flat "^1.3.1"    object.assign "^4.1.4"    object.values "^1.1.6"keyv@^4.5.3:  version "4.5.4"  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"  integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==  dependencies:    json-buffer "3.0.1"leven@^3.1.0:  version "3.1.0"  resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==levn@^0.4.1:  version "0.4.1"  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==  dependencies:    prelude-ls "^1.2.1"    type-check "~0.4.0"lie@3.1.1:  version "3.1.1"  resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
@@ -2910,11 +2162,6 @@ lie@3.1.1:  dependencies:    immediate "~3.0.5"loader-runner@^4.2.0:  version "4.3.0"  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"  integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==loader-utils@^2.0.4:  version "2.0.4"  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
@@ -2943,29 +2190,17 @@ locate-path@^5.0.0:  dependencies:    p-locate "^4.1.0"locate-path@^6.0.0:  version "6.0.0"  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==  dependencies:    p-locate "^5.0.0"lodash.debounce@^4.0.8:  version "4.0.8"  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==lodash.merge@^4.6.2:  version "4.6.2"  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==lodash.sortby@^4.7.0:  version "4.7.0"  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"  integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==lodash@^4.17.20, lodash@^4.17.21:lodash@^4.17.20:  version "4.17.21"  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -3021,19 +2256,7 @@ micromatch@^4.0.8:    braces "^3.0.3"    picomatch "^2.3.1"mime-db@1.52.0:  version "1.52.0"  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==mime-types@^2.1.27:  version "2.1.35"  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==  dependencies:    mime-db "1.52.0"minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:minimatch@^3.1.1, minimatch@^3.1.2:  version "3.1.2"  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -3047,36 +2270,16 @@ minimatch@^5.0.1:  dependencies:    brace-expansion "^2.0.1"mrmime@^1.0.0:  version "1.0.1"  resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"  integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==ms@^2.1.3:  version "2.1.3"  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==nanoid@^3.3.4, nanoid@^3.3.7:nanoid@^3.3.4:  version "3.3.11"  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"  integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==natural-compare@^1.4.0:  version "1.4.0"  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"  integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==neo-async@^2.6.2:  version "2.6.2"  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==next-compose-plugins@^2.2.1:  version "2.2.1"  resolved "https://registry.yarnpkg.com/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz#020fc53f275a7e719d62521bef4300fbb6fde5ab"  integrity sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==next-pwa@^5.5.4:  version "5.6.0"  resolved "https://registry.yarnpkg.com/next-pwa/-/next-pwa-5.6.0.tgz#f7b1960c4fdd7be4253eb9b41b612ac773392bf4"
@@ -3135,7 +2338,7 @@ object-keys@^1.1.1:  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==object.assign@^4.1.4, object.assign@^4.1.7:object.assign@^4.1.7:  version "4.1.7"  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d"  integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==
@@ -3147,36 +2350,6 @@ object.assign@^4.1.4, object.assign@^4.1.7:    has-symbols "^1.1.0"    object-keys "^1.1.1"object.entries@^1.1.9:  version "1.1.9"  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3"  integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==  dependencies:    call-bind "^1.0.8"    call-bound "^1.0.4"    define-properties "^1.2.1"    es-object-atoms "^1.1.1"object.fromentries@^2.0.8:  version "2.0.8"  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"  integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==  dependencies:    call-bind "^1.0.7"    define-properties "^1.2.1"    es-abstract "^1.23.2"    es-object-atoms "^1.0.0"object.values@^1.1.6, object.values@^1.2.1:  version "1.2.1"  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216"  integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==  dependencies:    call-bind "^1.0.8"    call-bound "^1.0.3"    define-properties "^1.2.1"    es-object-atoms "^1.0.0"once@^1.3.0:  version "1.4.0"  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -3184,23 +2357,6 @@ once@^1.3.0:  dependencies:    wrappy "1"opener@^1.5.2:  version "1.5.2"  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==optionator@^0.9.3:  version "0.9.4"  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"  integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==  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.5"own-keys@^1.0.1:  version "1.0.1"  resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358"
@@ -3217,13 +2373,6 @@ p-limit@^2.2.0:  dependencies:    p-try "^2.0.0"p-limit@^3.0.2:  version "3.1.0"  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==  dependencies:    yocto-queue "^0.1.0"p-locate@^4.1.0:  version "4.1.0"  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
@@ -3231,13 +2380,6 @@ p-locate@^4.1.0:  dependencies:    p-limit "^2.2.0"p-locate@^5.0.0:  version "5.0.0"  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==  dependencies:    p-limit "^3.0.2"p-map@^2.0.0:  version "2.1.0"  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
@@ -3248,13 +2390,6 @@ p-try@^2.0.0:  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==parent-module@^1.0.0:  version "1.0.1"  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==  dependencies:    callsites "^3.0.0"path-exists@^4.0.0:  version "4.0.0"  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -3270,11 +2405,6 @@ path-is-inside@^1.0.2:  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"  integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==path-key@^3.1.0:  version "3.1.1"  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==path-parse@^1.0.7:  version "1.0.7"  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
@@ -3329,11 +2459,6 @@ possible-typed-array-names@^1.0.0:  resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae"  integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==postcss-value-parser@^4.0.2:  version "4.2.0"  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==postcss@8.4.14:  version "8.4.14"  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
@@ -3343,38 +2468,12 @@ postcss@8.4.14:    picocolors "^1.0.0"    source-map-js "^1.0.2"postcss@8.4.49:  version "8.4.49"  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"  integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==  dependencies:    nanoid "^3.3.7"    picocolors "^1.1.1"    source-map-js "^1.2.1"prelude-ls@^1.2.1:  version "1.2.1"  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==prettier-linter-helpers@^1.0.0:  version "1.0.0"  resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"  integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==  dependencies:    fast-diff "^1.1.2"prettier@^3.5.3:  version "3.5.3"  resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5"  integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:  version "5.6.0"  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"  integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.8.1:prop-types@^15.6.1, prop-types@^15.6.2:  version "15.8.1"  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -3533,11 +2632,6 @@ require-from-string@^2.0.2:  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==resolve-from@^4.0.0:  version "4.0.0"  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==resolve@^1.14.2, resolve@^1.19.0:  version "1.22.10"  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
@@ -3547,15 +2641,6 @@ resolve@^1.14.2, resolve@^1.19.0:    path-parse "^1.0.7"    supports-preserve-symlinks-flag "^1.0.0"resolve@^2.0.0-next.5:  version "2.0.0-next.5"  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"  integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==  dependencies:    is-core-module "^2.13.0"    path-parse "^1.0.7"    supports-preserve-symlinks-flag "^1.0.0"reusify@^1.0.4:  version "1.1.0"  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
@@ -3568,13 +2653,6 @@ rimraf@^2.6.3:  dependencies:    glob "^7.1.3"rimraf@^3.0.2:  version "3.0.2"  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==  dependencies:    glob "^7.1.3"rollup-plugin-terser@^7.0.0:  version "7.0.2"  resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
@@ -3648,7 +2726,7 @@ schema-utils@^2.6.5:    ajv "^6.12.4"    ajv-keywords "^3.5.2"schema-utils@^4.3.0, schema-utils@^4.3.2:schema-utils@^4.3.0:  version "4.3.2"  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae"  integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
@@ -3708,23 +2786,6 @@ set-proto@^1.0.0:    es-errors "^1.3.0"    es-object-atoms "^1.0.0"shallowequal@1.1.0:  version "1.1.0"  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==shebang-command@^2.0.0:  version "2.0.0"  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==  dependencies:    shebang-regex "^3.0.0"shebang-regex@^3.0.0:  version "3.0.0"  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==side-channel-list@^1.0.0:  version "1.0.0"  resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
@@ -3765,15 +2826,6 @@ side-channel@^1.1.0:    side-channel-map "^1.0.1"    side-channel-weakmap "^1.0.2"sirv@^1.0.7:  version "1.0.19"  resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"  integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==  dependencies:    "@polka/url" "^1.0.0-next.20"    mrmime "^1.0.0"    totalist "^1.0.0"slash@^3.0.0:  version "3.0.0"  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -3784,7 +2836,7 @@ source-list-map@^2.0.0:  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==source-map-js@^1.0.2, source-map-js@^1.2.1:source-map-js@^1.0.2:  version "1.2.1"  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"  integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -3822,7 +2874,7 @@ stop-iteration-iterator@^1.1.0:    es-errors "^1.3.0"    internal-slot "^1.1.0"string.prototype.matchall@^4.0.12, string.prototype.matchall@^4.0.6:string.prototype.matchall@^4.0.6:  version "4.0.12"  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0"  integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==
@@ -3841,14 +2893,6 @@ string.prototype.matchall@^4.0.12, string.prototype.matchall@^4.0.6:    set-function-name "^2.0.2"    side-channel "^1.1.0"string.prototype.repeat@^1.0.0:  version "1.0.0"  resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a"  integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==  dependencies:    define-properties "^1.1.3"    es-abstract "^1.17.5"string.prototype.trim@^1.2.10:  version "1.2.10"  resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81"
@@ -3890,48 +2934,16 @@ stringify-object@^3.3.0:    is-obj "^1.0.1"    is-regexp "^1.0.0"strip-ansi@^6.0.1:  version "6.0.1"  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==  dependencies:    ansi-regex "^5.0.1"strip-comments@^2.0.1:  version "2.0.1"  resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"  integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==strip-json-comments@^3.1.1:  version "3.1.1"  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==styled-components@^6.1.18:  version "6.1.18"  resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.18.tgz#9647497a92326ba9d758051c914f15004d524bb9"  integrity sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==  dependencies:    "@emotion/is-prop-valid" "1.2.2"    "@emotion/unitless" "0.8.1"    "@types/stylis" "4.2.5"    css-to-react-native "3.2.0"    csstype "3.1.3"    postcss "8.4.49"    shallowequal "1.1.0"    stylis "4.3.2"    tslib "2.6.2"styled-jsx@5.0.7:  version "5.0.7"  resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.7.tgz#be44afc53771b983769ac654d355ca8d019dff48"  integrity sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==stylis@4.3.2:  version "4.3.2"  resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444"  integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==supports-color@^7.0.0, supports-color@^7.1.0:  version "7.2.0"  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -3951,18 +2963,6 @@ supports-preserve-symlinks-flag@^1.0.0:  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==synckit@^0.11.7:  version "0.11.8"  resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.8.tgz#b2aaae998a4ef47ded60773ad06e7cb821f55457"  integrity sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==  dependencies:    "@pkgr/core" "^0.2.4"tapable@^2.1.1, tapable@^2.2.0:  version "2.2.2"  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872"  integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==temp-dir@^2.0.0:  version "2.0.0"  resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e"
@@ -3978,7 +2978,7 @@ tempy@^0.6.0:    type-fest "^0.16.0"    unique-string "^2.0.0"terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.3:terser-webpack-plugin@^5.3.3:  version "5.3.14"  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06"  integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==
@@ -3999,11 +2999,6 @@ terser@^5.0.0, terser@^5.31.1:    commander "^2.20.0"    source-map-support "~0.5.20"text-table@^0.2.0:  version "0.2.0"  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==to-regex-range@^5.0.1:  version "5.0.1"  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -4011,11 +3006,6 @@ to-regex-range@^5.0.1:  dependencies:    is-number "^7.0.0"totalist@^1.0.0:  version "1.1.0"  resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df"  integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==tr46@^1.0.1:  version "1.0.1"  resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@@ -4023,33 +3013,16 @@ tr46@^1.0.1:  dependencies:    punycode "^2.1.0"tslib@2.6.2:  version "2.6.2"  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==tslib@^2.4.0:  version "2.8.1"  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==type-check@^0.4.0, type-check@~0.4.0:  version "0.4.0"  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==  dependencies:    prelude-ls "^1.2.1"type-fest@^0.16.0:  version "0.16.0"  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"  integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==type-fest@^0.20.2:  version "0.20.2"  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==typed-array-buffer@^1.0.3:  version "1.0.3"  resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536"
@@ -4175,34 +3148,11 @@ uuid@^9.0.1:  resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"  integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==watchpack@^2.4.1:  version "2.4.4"  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947"  integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==  dependencies:    glob-to-regexp "^0.4.1"    graceful-fs "^4.1.2"webidl-conversions@^4.0.2:  version "4.0.2"  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==webpack-bundle-analyzer@4.3.0:  version "4.3.0"  resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz#2f3c0ca9041d5ee47fa418693cf56b4a518b578b"  integrity sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==  dependencies:    acorn "^8.0.4"    acorn-walk "^8.0.0"    chalk "^4.1.0"    commander "^6.2.0"    gzip-size "^6.0.0"    lodash "^4.17.20"    opener "^1.5.2"    sirv "^1.0.7"    ws "^7.3.1"webpack-sources@^1.4.3:  version "1.4.3"  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
@@ -4211,41 +3161,6 @@ webpack-sources@^1.4.3:    source-list-map "^2.0.0"    source-map "~0.6.1"webpack-sources@^3.2.3:  version "3.3.0"  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.0.tgz#8d3449f1ed3f254e722a529a0a344a37d2d17048"  integrity sha512-77R0RDmJfj9dyv5p3bM5pOHa+X8/ZkO9c7kpDstigkC4nIDobadsfSGCwB4bKhMVxqAok8tajaoR8rirM7+VFQ==webpack@^5.76.0:  version "5.99.9"  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.9.tgz#d7de799ec17d0cce3c83b70744b4aedb537d8247"  integrity sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==  dependencies:    "@types/eslint-scope" "^3.7.7"    "@types/estree" "^1.0.6"    "@types/json-schema" "^7.0.15"    "@webassemblyjs/ast" "^1.14.1"    "@webassemblyjs/wasm-edit" "^1.14.1"    "@webassemblyjs/wasm-parser" "^1.14.1"    acorn "^8.14.0"    browserslist "^4.24.0"    chrome-trace-event "^1.0.2"    enhanced-resolve "^5.17.1"    es-module-lexer "^1.2.1"    eslint-scope "5.1.1"    events "^3.2.0"    glob-to-regexp "^0.4.1"    graceful-fs "^4.2.11"    json-parse-even-better-errors "^2.3.1"    loader-runner "^4.2.0"    mime-types "^2.1.27"    neo-async "^2.6.2"    schema-utils "^4.3.2"    tapable "^2.1.1"    terser-webpack-plugin "^5.3.11"    watchpack "^2.4.1"    webpack-sources "^3.2.3"whatwg-url@^7.0.0:  version "7.1.0"  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
@@ -4308,18 +3223,6 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.19:    gopd "^1.2.0"    has-tostringtag "^1.0.2"which@^2.0.1:  version "2.0.2"  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==  dependencies:    isexe "^2.0.0"word-wrap@^1.2.5:  version "1.2.5"  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"  integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==workbox-background-sync@6.6.1:  version "6.6.1"  resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f"
@@ -4494,17 +3397,7 @@ wrappy@1:  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==ws@^7.3.1:  version "7.5.10"  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"  integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==yallist@^3.0.2:  version "3.1.1"  resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==yocto-queue@^0.1.0:  version "0.1.0"  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==