diff --git a/README.md b/README.md index 69e6403a5..1c26cad0e 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,192 @@ Chronos +
![Build Passing](https://img.shields.io/badge/build-awesome-brightgreen) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/open-source-labs/Chronos) ![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg) -![Release: 12.0](https://img.shields.io/badge/Release-12.0-brightgreen) +![Release: 13.0](https://img.shields.io/badge/Release-12.0-brightgreen) +
# Chronos - ### ⭐️ Star us on GitHub! ⭐️ + **Visit our website at [chronoslany.com](https://chronoslany.com/).** Chronos is a comprehensive developer tool that monitors the health and web traffic for containerized (Docker & Kubernetes) and non-containerized microservices communicated via REST APIs or gRPC, whether hosted locally or on Amazon Web Services (AWS). Use Chronos to see real-time data monitoring and receive automated notifications over Slack or email. - ## What's New? -### With Chronos 12.0: - -- Enhanced metrics visualization by integrating more interactive and adaptable Grafana charts for Docker and Kubernetes use cases. -- Achieved an 80% boost in test coverage by formulating comprehensive unit, integration, and end-to-end tests employing Jest and Selenium. -- Implemented Prometheus data scraping functionality for Docker containers, facilitating seamless metric collection and monitoring. -- Devised an immersive 3D visualization that effectively illustrates the Kubernetes cluster infrastructure, encompassing Namespace, Service, and Pod entities. This dynamic visualization provides developers and users with heightened insights into intricate resource allocation and configuration within the cluster. -- Streamlined operational effectiveness by coordinating CI/CD pipelines, automating testing workflows, and establishing deployment protocols, ultimately leading to accelerated development cycles and heightened dependability. -- Expanded Typescript coverage to enhance code quality and bolster application resilience. -- Updated the Docker and Kubernetes example READMEs with detailed instructions on configuring Prometheus and Grafana seamlessly. -- Enhanced clarity of instructions in the `@chronosmicro/tracker` NPM package's README, offering comprehensive guidance on utilizing the package to monitor individual applications effectively. - +### Chronos 13.0 + +
+ +Contributors: +[Elsa Holmgren](https://github.com/ekh88), +[Mckenzie Morris](https://github.com/mckenzie-morris), +[Kelly Chandler](https://github.com/kchandler44), +[Sean Simpson](https://github.com/seantokuzo), +[Zhongyan Liang](https://github.com/ZhongyanLiang) + +
+Updates: +
  • Created new and improved microservices application with updated syntax to better demonstrate Chronos' capabilities
  • +
  • Dockerized microservices application to demonstrate Chronos within a containerized environment
  • +
  • Added visulization of Chronos' codebase to illustrate overall structure
  • +
  • Simplified installation and startup instructions in the root directory README file
  • +
  • Improved documentation in chronos_npm_package README file for easier on-boarding
  • + +Version 13.0 Medium Article + +### **Iteration Log** + +
    Chronos 12.0 + +
    + +
    Chronos 11.0 + +
    + +
    Chronos 10.0 + +
    + +
    Chronos 9.0 + +
    + +
    Chronos 8.0 + +
    + +
    Chronos 7.0 + +
    + +### With Chronos 13.0 Chronos @@ -37,31 +194,27 @@ Chronos is a comprehensive developer tool that monitors the health and web traff
    -**Previously implemented updates:** -- Added interactive charting to better visualize metrics and increase user engagement with their data -- Followed best test-driven development practices and increased testing with React Testing and Jest for the front end -- Overhauled user database security, mitigating database breaches and providing a safer experience -- Bug fixes and UI tweaks, creating a more pleasant user experience -- Updated outdated README instructions within the provided Docker, gRPC, Kubernetes, and microservices examples -- Revised README instructions for the `@chronosmicro/tracker` NPM package +## Overview of the CodeBase + +- Instead of the typical folders & files view, a visual representation of the code is created. Below, it's showing the same repository, but instead of a directory structure, each file and folder as a circle: the circle’s color is the type of file, and the circle’s size represents the size of the file. See live demo
    here. + codebase visulization ## Features - Cloud-Based Instances: - - Option to choose between cloud hosted services and local services, giving Chronos the ability to monitor instances and clusters on AWS EC2, ECS, and EKS platforms AWS + - Option to choose between cloud hosted services and local services, giving Chronos the ability to monitor instances and clusters on AWS EC2, ECS, and EKS platforms AWS - Local instances utilitizing `@chronosmicro/tracker` NPM package: - - Enables distributed tracing enabled across microservices applications - - Displays real-time temperature, speed, latency, and memory statistics for local services - - Displays and compares multiple microservice metrics in a single graph - - Allow Kubernetes and Docker monitoring via Prometheus server and Grafana visualization. - - Compatible with GraphQL - - Monitor an Apache Kafka cluster via the JMX Prometheus Exporter - - Supports PostgreSQL and MongoDB databases - + - Enables distributed tracing enabled across microservices applications + - Displays real-time temperature, speed, latency, and memory statistics for local services + - Displays and compares multiple microservice metrics in a single graph + - Allow Kubernetes and Docker monitoring via Prometheus server and Grafana visualization. + - Compatible with GraphQL + - Monitor an Apache Kafka cluster via the JMX Prometheus Exporter + - Supports PostgreSQL and MongoDB databases # Installation -This is for the latest Chronos **version 12.0 release**. +This is for the latest Chronos **version 13.0 release**. ## NPM Package @@ -83,7 +236,9 @@ For more details on the NPM package and instructions for how to use it, please v ## Chronos Desktop Application -### WSL2 Environment + + + -**NOTE: You must create your own user database** - -1. Create a MongoDB database in which to store user information and insert it on line 2 within the [UserModel.ts](./electron/models/UserModel.ts) (_electron/models/UserModel.ts_) file. - - This database will privately store user information. -3. Once this is set up, you can create new users, log in, and have your data persist between sessions. -# -### Running the Chronos desktop app in development mode +### Running the Chronos desktop app in development mode (WSL Incompatible) 1. From the root directory, run `npm install` 2. Run `npm run build` -3. Open a new terminal and run `npm run dev:app` to start the Webpack development server -4. Open a new terminal and run `npm run dev:electron` to start the Electron UI in development mode -. +3. For Windows users, run `npm audit fix` or `npm audit fix --force` if prompted +4. Open a new terminal and run `npm run dev:app` to start the Webpack development server +5. Open a new terminal and run `npm run dev:electron` to start the Electron UI in development mode. +6. Refer to `Examples` sections below to spin up example applications. + # + ### Packing the Chronos desktop app into an executable 1. From the root directory, run `npm run build` @@ -124,22 +274,33 @@ export DISPLAY="`sed -n 's/nameserver //p' /etc/resolv.conf`:0" 3. Find the `chronos.app` executable inside the newly created `release-builds` folder in the root directory. # + +### Creating User Database + +**NOTE: You must create your own user database for extended features** + +1. Create a MongoDB database in which to store user information and insert it on line 2 within the [UserModel.ts](./electron/models/UserModel.ts) (_electron/models/UserModel.ts_) file. + - This database will privately store user information. +2. Once this is set up, you can create new users, log in, and have your data persist between sessions. + +# + # Examples We provide eight example applications for you to test out both the Chronos NPM package and the Chronos desktop application: - AWS - - [EC2 README](./examples/AWS/AWS-EC2/README.md) - - [ECS README](./examples/AWS/AWS-ECS/README.md) - - [EKS README](./examples/AWS/AWS-EKS/README.md) + - [EC2 README](./examples/AWS/AWS-EC2/README.md) + - [ECS README](./examples/AWS/AWS-ECS/README.md) + - [EKS README](./examples/AWS/AWS-EKS/README.md) - Docker - - [Docker README](./examples/docker/README.md) + - [Docker README](./examples/docker/README.md) - gRPC - - [gRPC README](./examples/gRPC/README.md) + - [gRPC README](./examples/gRPC/README.md) - Kubernetes - - [Kubernetes README](./examples/kubernetes/README.md) + - [Kubernetes README](./examples/kubernetes/README.md) - Microservices - - [Microservices README](./examples/microservices/README.md) + - [Microservices README](./examples/microservices/README.md) Additional documentation on how Chronos is used **in each example** can be found in the [Chronos NPM Package README](./chronos_npm_package/README.md). @@ -149,11 +310,12 @@ The `AWS` folder includes 3 example applications with instructions on how to dep - The ECS folder includes an web application ready to be containerized using Docker. The instruction shows how to deploy application to ECS using Docker CLI command, and it will be managed by Fargate services. - The EC2 folder includes a React/Redux/SQL web application ready to be containerized using Docker. The instruction shows how to deploy application using AWS Beanstalk and connect application to RDS database. Beanstalk service will generate EC2 instance. -- The EKS folder includes a containerized note taking app that uses a Mongo database as its persistent volume. The instructions show how to deploy this application on EKS, how to monitor with Prometheus & Opencost, and how to use Grafana to grab visualizations. +- The EKS folder includes a containerized note taking app that uses a Mongo database as its persistent volume. The instructions show how to deploy this application on EKS, how to monitor with Prometheus & Opencost, and how to use Grafana to grab visualizations. Refer to the [EC2 README](./examples/AWS/AWS-EC2/README.md), [ECS README](./examples/AWS/AWS-ECS/README.md), and [EKS README](./examples/AWS/AWS-EKS/README.md) example in the _AWS_ folder for more details. # + #### _Docker_ In the Docker folder within the `master` branch, we provide a sample _dockerized_ microservices application to test out Chronos and to apply distributed tracing across different containers for your testing convenience. @@ -161,14 +323,15 @@ In the DockerDocker files in their respective directories. A docker-compose.yml is in the root directory in case you'd like to deploy all services together. Refer to the [Docker README](./examples/docker/README.md) in the `docker` folder for more details. -# +# #### _gRPC_ The `gRPC` folder includes an HTML frontend and an Express server backend, as well as proto files necessary to build package definitions and make gRPC calls. The _reverse_proxy_ folder contains the server that requires in the clients, which contain methods and services defined by proto files. Refer to the [gRPC README](./examples/gRPC/README.md) in the `gRPC` folder for more details. + # #### _Kubernetes_ @@ -184,63 +347,58 @@ Refer to the [Kubernetes README](./examples/kubernetes/README.md) in the `kubern In the `microservices` folder, we provide a sample microservice application that successfully utilizes Chronos to apply all the powerful, built-in features of our monitoring tool. You can then visualize the data with the Electron app. Refer to the [microservices README](./examples/microservices/README.md) in the `microservices` folder for more details. + # # Testing We've created testing suites for Chronos with React Testing, Jest, and Selenium for unit, integration, and end-to-end tests - instructions on running them can be found in the [testing README](./__tests__/README.md). -# -## Contributing - -Development of Chronos is open source on GitHub through the tech accelerator OS Labs, and we are grateful to the community for contributing bug fixes and improvements. -Read our [contributing README](../../CONTRIBUTING.md) to learn how you can take part in improving Chronos. +# -### **Last Iterating Team** +## Contributing -#### Chronos 12.0 -- [Tyler Coryell](https://github.com/Tcoryell) -- [Edwin Leong](https://github.com/edwinlny) -- [Eisha Kaushal](https://github.com/eishakaushal) -- [Haoyu Liu](https://github.com/HaoyL666) +Development of Chronos is open source on GitHub through the tech accelerator OS Labs, and we are grateful to the community for contributing bug fixes and improvements. +Read our [contributing README](CONTRIBUTING.md) to learn how you can take part in improving Chronos. #### Past [Contributors](contributors.md) -# -## Technologies - -- Electron -- React -- JavaScript -- TypeScript -- PostgreSQL -- MongoDB -- Node -- Express -- HTTP -- gRPC -- GraphQL -- Docker -- AWS -- Jest -- Webpack -- Material-UI -- Vis.js -- Plotly.js -- Apache Kafka -- Grafana -- Selenium -- Prometheus -- Github Action -- Github Action -- Kubernetes +# +## Technologies +![Electron.js](https://img.shields.io/badge/Electron-191970?style=for-the-badge&logo=Electron&logoColor=white) +![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB) +![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E) +![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white) +![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white) +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) +![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +![Express.js](https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge&logo=express&logoColor=%2361DAFB) +![HTTP](https://img.shields.io/badge/HTTP-394EFF?style=for-the-badge) +![gRPC](https://img.shields.io/badge/gRPC-394EFF?style=for-the-badge) +![GraphQL](https://img.shields.io/badge/-GraphQL-E10098?style=for-the-badge&logo=graphql&logoColor=white) +![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) +![AWS](https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge&logo=amazon-aws&logoColor=white) +![Jest](https://img.shields.io/badge/-jest-%23C21325?style=for-the-badge&logo=jest&logoColor=white) +![Webpack](https://img.shields.io/badge/webpack-%238DD6F9.svg?style=for-the-badge&logo=webpack&logoColor=black) +![MUI](https://img.shields.io/badge/MUI-%230081CB.svg?style=for-the-badge&logo=mui&logoColor=white) +![vis.js](https://img.shields.io/badge/vis.js-3578E5?style=for-the-badge) +![Plotly](https://img.shields.io/badge/Plotly-%233F4F75.svg?style=for-the-badge&logo=plotly&logoColor=white) +![Apache Kafka](https://img.shields.io/badge/Apache%20Kafka-000?style=for-the-badge&logo=apachekafka) +![Grafana](https://img.shields.io/badge/grafana-%23F46800.svg?style=for-the-badge&logo=grafana&logoColor=white) +![Selenium](https://img.shields.io/badge/-selenium-%43B02A?style=for-the-badge&logo=selenium&logoColor=white) +![Prometheus](https://img.shields.io/badge/Prometheus-E6522C?style=for-the-badge&logo=Prometheus&logoColor=white) +![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white) +![Threejs](https://img.shields.io/badge/threejs-black?style=for-the-badge&logo=three.js&logoColor=white) +![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white) +![TailwindCSS](https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white) ## License [MIT](https://github.com/oslabs-beta/Chronos/blob/master/LICENSE.md) + # ###### Return to [Top](#chronos) diff --git a/assets/codebase_visulization.png b/assets/codebase_visulization.png new file mode 100644 index 000000000..d615a7509 Binary files /dev/null and b/assets/codebase_visulization.png differ diff --git a/chronos_npm_package/README.md b/chronos_npm_package/README.md index 381f92355..779c893fb 100644 --- a/chronos_npm_package/README.md +++ b/chronos_npm_package/README.md @@ -20,7 +20,7 @@ ## Using Chronos The following steps should be performed in each microservice you want to track unless otherwise noted. -### Install Chronos Tracker +### 1. Install Chronos Tracker Install the package as a dependency in each of the microservices you want to track: ``` @@ -28,76 +28,56 @@ npm install @chronosmicro/tracker ``` -### Configuring Chronos Tracker -Create a `.js` Chronos configuration file (hereby referred to as `chronos-config.js`), which exports a JavaScript object with required Chronos configuration parameters. This object will be used as the sole Chronos class constructor argument. Feel free to use a `.env` file to hold sensitive parameters like the database URI, for example. +### 2. Configuring Chronos Tracker +Create a `chronos-config.js` file, which exports a JavaScript object with required Chronos configuration parameters. Use this configuration to customize Chronos for your specific microservice environment. ```js // A sample `chronos-config.js` file +//replace the values with your specific configuration module.exports = { // General Configuration - microservice: 'my-service', - interval: 10000, + microservice: 'my-service', //Name of your microservice. For **Dockerized** microservices, this field **must** match the container_name of the corresponding Docker container. + interval: 10000, //monitoring interval in milliseconds, if ommitted, Chronos will default to recording server health every 60000 ms. // Database Information database: { - connection: 'REST', // 'REST' or 'gRPC' - type: 'MongoDB', // 'MongoDB' or 'PostgreSQL' - URI: '', // + connection: 'REST', // Choose 'REST' or 'gRPC' for your connection type + type: 'MongoDB', // Choose 'MongoDB' or 'PostgreSQL' + URI: '', // should be a connection string to the database where you intend Chronos to write and record data regarding health, HTTP route tracing, and container infomation }, - /* USE ONE OF THE MODE-SPECIFIC CONFIGURATIONS BELOW */ - // (a) Microservices + /* USE ONLY ONE OF THE CONFIGURATIONS BELOW: */ + // (a) Microservices Mode mode: 'microservices', - dockerized: false, // false or true + dockerized: false, // set to true if your service is Dockerized // (b) Kubernetes mode: 'kubernetes', - promService: 'prometheus-service', - promPort: 8080, - grafanaAPIKey: process.env.CHRONOS_GRAFANA_API_KEY, + promService: 'prometheus-service', // Prometheus service name + promPort: 8080, //Prometheus service port + grafanaAPIKey: process.env.CHRONOS_GRAFANA_API_KEY,//API for Grafana // (c) Apache Kafka mode: 'kafka', - jmxuri: '', + jmxuri: '', //URI for JMX to Prometheus Exporter // (d) Docker mode: 'docker', - promService: 'docker.for.mac.localhost', - promPort: 9090, - grafanaAPIKey: process.env.CHRONOS_GRAFANA_API_KEY, + promService: 'docker.for.mac.localhost', //Prometheus service for Docker + promPort: 9090, //Prometheus service port + grafanaAPIKey: process.env.CHRONOS_GRAFANA_API_KEY, //API key for Grafana + - /* USE ONE OF THE MODE-SPECIFIC CONFIGURATIONS ABOVE */ // Notifications + //Add notification configurations here notifications: [], } ``` +Note: Consider using a `.env` file to securely store sensitive parameters like database URIs. -Then utilize the `chronos-config.js` file into your application by importing it and using it as the Chronos class constructor argument: -```js -const chronosConfig = require('./chronos-config.js'); -const Chronos = require('@chronosmicro/tracker'); -const chronos = new Chronos(chronosConfig); -``` - - -#### Chronos Configuration Parameters -_See mode-specific configuration descriptions in the "Chronos Tracker for Microservices" section_ - -The `microservice` property takes in a string. This should be a descriptive name for your microservice. - -- Important For **Dockerized** microservices, this field **must** match the _container_name_ of the corresponding Docker container. - -The `interval` property is optional and takes in an integer. This controls the Chronos monitoring frequency. If this is omitted, Chronos will default to recording server health every 60000 ms or 60 seconds. - -The `database` property is required and takes in the following: -- `connection` is a string that should should be either 'REST' or 'gRPC' -- `type` should be a string and only supports 'MongoDB' and 'PostgreSQL' at this time -- `URI` should be a connection string to the database where you intend Chronos to write and record data regarding health, HTTP route tracing, and container infomation - -The `mode` property accepts a string that can either be 'microservices', 'kubernetes', 'kafka', or 'docker'. There are other settings that depend on the mode choice, so these are broken down in the "Chronos Tracker for Microservices" section. - +### 3. Configuring notifications The `notifications` property is an array that can be optionally left empty. It allows developers to be alerted when the server responds to requests with status codes >= 400. To set up notifications, set the value of the `notifications` property to an array of objects, each with a `type` and `settings` property. Chronos only supports **Slack** and **email** notifications at this time. @@ -124,32 +104,48 @@ notifications: [ { type: 'email', settings: { - emails: 'foobar@email.com, bizbaz@email.edu', - emailHost: 'smpt@gmail.com', - emailPort: 465, - user: process.env.SENDER_EMAIL, - password: process.env.SENDER_PASSWORD + emails: 'foobar@email.com, bizbaz@email.edu', //can be single or multiple, separated by a comma + emailHost: 'smpt@gmail.com',// the smtp host of your email server + emailPort: 465, // the email port is either **465** or **587** depending on the sender email security settings. Learn more about email ports by reading the [nodemailer docs](https://nodemailer.com/smtp/) + user: process.env.SENDER_EMAIL, //email address of the sender + password: process.env.SENDER_PASSWORD //password of the sender's email } } ] -// ... ``` -Chronos provides the option to send emails. The properties that should be provided are the following -- `emails` - The recipient list (string) can be a single email address or multiple as comma seprated values. -- `emailHost` - The smtp host (string) of your email server -- `emailPort` - The email port (integer) is either **465** or **587** depending on the sender email security settings. Learn more about email ports by reading the [nodemailer docs](https://nodemailer.com/smtp/) -- `user` - The email address (string) of the sender -- `password` - The password (string) of the sender email -**NOTE: Email notification settings may require alternative security settings to work** +### 4. Utilize `chronos-config.js` in your application +To integrate the `chronos-config.js` file into your application, follow these steps: + 1. importing the `chronos-config.js` file +```js +const chronosConfig = require('./chronos-config.js'); +``` + 2. importing the Chronos class +```js +const Chronos = require('@chronosmicro/tracker'); +``` + 3. creating a new instance of the Chronos class +```js +const chronos = new Chronos(chronosConfig); +``` + # +### Mode Specific Configurations + + + +### A. Chronos Tracker for "Microservices" Mode +In the `microservices` mode, Chronos employs the `dockerized` setting to determine the operational environment of the microservice. + + * `dockerized`: This setting is crucial for specifying the nature of the service deployment. + * Default Setting: If `dockerized` is not explicitly set to true, Chronos defaults to assuming that the service is not operating in a Docker container environment. Hence, the default value of `dockerized` is false. + * When `dockerized` is `false`: This configuration tells Chronos to collect metrics directly from the host system. It's applicable for services running outside of Docker containers. + * When `dockerized` is `true`: This configuration directs Chronos to retrieve metrics from the Docker daemon, aligning with services deployed within Docker containers for accurate monitoring. + -### Chronos Tracker for "Microservices" Mode -The mode `microservices` uses the additional setting `dockerized`, which indicates whether or not the microservice has been containerized with Docker. If omitted, Chronos will assume this server is not running in a container, i.e. `dockerized` will default to _false_. -Setting the flag to `false` will collect metrics from the host computer directly, while `true` indicates for Chronos to pull metrics from the Docker daemon. ```js // Excerpt from a chronos-config.js @@ -173,7 +169,7 @@ const chronos = new Chronos(chronosConfig); chronos.track() ``` -If you are using an Express.js REST API, calling `Chronos.track()` returns middleware that allows users to track incoming network requests and outgoing their corresponding outgoing responses by marking them with unique IDs using `Chronos.propagate`. +If you are using an Express.js REST API, calling `Chronos.track()` returns middleware that allows users to track incoming network requests and their corresponding outgoing responses by marking them with unique IDs using `Chronos.propagate`. If you want to utilize this feature, setup a catchall route that will serve as a pass through for tracking and chain in the middleware from `Chronos.track`. @@ -212,8 +208,11 @@ volumes: - "/var/run/docker.sock:/var/run/docker.sock" ``` -### Chronos Tracker for "Kubernetes" Mode -Chronos can monitor an Kubernetes clusters by saving metric data from instant queries to a Prometheus server in your Kubernetes cluster, and then display all metrics data through Grafana dashboards. +Check out the [**Microservices Readme**](../examples_new/README.md). +# + +### B. Chronos Tracker for "Kubernetes" Mode +Chronos monitors Kubernetes clusters in two steps. First, it saves metric data from instant queries to a Prometheus server in your Kubernetes cluster. Then, it displays all metrics data through Grafana dashboards. In `chronos-config.js`, set the `mode` to `kubernetes` and pass it both the name of the port the Prometheus server is listening on INSIDE the cluster, and the name of the Prometheus service so that its IP address can be resolved using KubeDNS. @@ -245,9 +244,10 @@ const chronos = new Chronos(chronosConfig); chronos.kubernetes(); ``` +Check out the [**Kubernetes Readme**](../examples/kubernetes/README.md). +# - -### Chronos Tracker for "Kafka" Mode +### C. Chronos Tracker for "Kafka" Mode Chronos can monitor an Apache Kafka cluster via JMX to Prometheus Exporter. In order for this feature to work you must be running [JMX to Prometheus Exporter](https://github.com/prometheus/jmx_exporter) either as a Java Agent with your cluster or as a standalone HTTP server. Then, use `chronos-config.js` to specifiy where to retrieve the metrics. @@ -280,7 +280,7 @@ When viewing your information in the Chronos Electron application the data will **NOTE:** We provide a jmx_config.yaml file in the Chronos root folder for use with JMX prometheus that provides some useful baseline metrics to monitor. # -### Chronos Tracker for "Docker" Mode +### D. Chronos Tracker for "Docker" Mode Chronos monitors Docker containers by storing metric data through instant Prometheus queries within your Docker container environment. In `chronos-config.js`, configure the `mode` parameter to `docker`. Additionally, provide the name of the port where the Prometheus server is actively listening inside the container, and specify the name of the Prometheus service to enable DNS-based resolution of its IP address. @@ -313,8 +313,8 @@ const chronos = new Chronos(chronosConfig); chronos.docker(); ``` - - +Check out the [**Docker Readme**](../examples/docker/README.md). +# ### Chronos Tracker for gRPC To monitor your gRPC server, setup `chronos-config.js` as if it was a standard microservices example, but be sure to set the `connection` type to `gRPC`. @@ -432,17 +432,18 @@ Finally, on all servers that will be involved in the request path, invoke `chron ```js chronos.link(client, ServerWrapper); ``` +Check out the [**gRPC README**](../examples/gRPC/README.md). # ### Viewing Chronos Data Once you have configured and intialized Chronos Tracker, it will automatically record monitoring data when your servers are running. The data will be saved into your database of choice, and then start the Chronos desktop app to view by cloning our [GitHub repo](https://github.com/open-source-labs/Chronos). Folow the ReadMe in that repo to setup the Chronos desktop app. - +# ## Examples We provide working example microservice applications in Chronos desktop app repo in the [**examples**](../chronos_npm_package/README.md) folder. - +# ## Technologies - Electron - JavaScript @@ -458,16 +459,16 @@ We provide working example microservice applications in Chronos desktop app repo - Docker - Kubernetes - +# ## Contributing Chronos hopes to inspire an active community of both users and developers. For questions, comments, or contributions, please submit a pull request. Read our [contributing README](../../CONTRIBUTING.md) to further learn how you can take part in improving Chronos. - +# ## License [MIT](https://github.com/oslabs-beta/Chronos/blob/master/LICENSE.md) # -###### Return to [Top](#chronos) +###### Return to [Top](#whats-new) diff --git a/contributors.md b/contributors.md index 5bef518d9..5ce25dbe1 100644 --- a/contributors.md +++ b/contributors.md @@ -1,4 +1,10 @@ ## People + +[Elsa Holmgren](https://github.com/ekh88), +[Mckenzie Morris](https://github.com/mckenzie-morris), +[Kelly Chandler](https://github.com/kchandler44), +[Sean Simpson](https://github.com/seantokuzo), +[Zhongyan Liang](https://github.com/ZhongyanLiang), [Tyler Coryell](https://github.com/Tcoryell), [Edwin Leong](https://github.com/edwinlny), [Eisha Kaushal](https://github.com/eishakaushal), @@ -36,4 +42,4 @@ [Jeffrey Na](https://github.com/jeffreyNa), [Brisa Zhu](https://github.com/beezoo10), [Kelsi Webb](https://github.com/kelsicw), -[Justin Poirier](https://github.com/jcpoirier20) \ No newline at end of file +[Justin Poirier](https://github.com/jcpoirier20) diff --git a/examples_new/docker/client/dist/assets/index-GXx520xc.css b/examples_new/docker/client/dist/assets/index-GXx520xc.css new file mode 100644 index 000000000..01a7b109c --- /dev/null +++ b/examples_new/docker/client/dist/assets/index-GXx520xc.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-\[-50px\]{bottom:-50px}.left-0{left:0}.left-\[-50px\]{left:-50px}.right-4{right:1rem}.right-\[-50px\]{right:-50px}.top-0{top:0}.top-14{top:3.5rem}.top-\[-50px\]{top:-50px}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-2{margin-bottom:.5rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.flex{display:flex}.h-\[100px\]{height:100px}.h-screen{height:100vh}.max-h-\[100vh\]{max-height:100vh}.w-\[100px\]{width:100px}.w-\[85\%\]{width:85%}.w-full{width:100%}.min-w-\[150px\]{min-width:150px}.min-w-\[250px\]{min-width:250px}@keyframes rotate1{0%{transform:translate(0) rotate(0)}25%{transform:translateY(285%) rotate(.25turn)}50%{transform:translate(-410%,285%) rotate(.5turn)}75%{transform:translate(-410%) rotate(.75turn)}to{transform:translate(0) rotate(1turn)}}.animate-rotate1{animation:rotate1 8s linear infinite}@keyframes rotate2{0%{transform:translate(0) rotate(-0turn)}25%{transform:translateY(-285%) rotate(-.25turn)}50%{transform:translate(410%,-285%) rotate(-.5turn)}75%{transform:translate(410%) rotate(-.75turn)}to{transform:translate(0) rotate(-1turn)}}.animate-rotate2{animation:rotate2 8s linear infinite}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-bl-\[130px\]{border-bottom-left-radius:130px}.rounded-bl-\[500px\]{border-bottom-left-radius:500px}.rounded-br-\[200px\]{border-bottom-right-radius:200px}.rounded-br-\[530px\]{border-bottom-right-radius:530px}.rounded-tl-\[150px\]{border-top-left-radius:150px}.rounded-tl-\[620px\]{border-top-left-radius:620px}.rounded-tr-\[120px\]{border-top-right-radius:120px}.rounded-tr-\[420px\]{border-top-right-radius:420px}.border-2{border-width:2px}.border-\[1px\]{border-width:1px}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-dark{--tw-border-opacity: 1;border-color:rgb(14 14 14 / var(--tw-border-opacity))}.border-light{--tw-border-opacity: 1;border-color:rgb(253 253 253 / var(--tw-border-opacity))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity))}.bg-blue-400\/50{background-color:#60a5fa80}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.bg-dark{--tw-bg-opacity: 1;background-color:rgb(14 14 14 / var(--tw-bg-opacity))}.bg-light{--tw-bg-opacity: 1;background-color:rgb(253 253 253 / var(--tw-bg-opacity))}.bg-lime-600{--tw-bg-opacity: 1;background-color:rgb(101 163 13 / var(--tw-bg-opacity))}.bg-white\/20{background-color:#fff3}.bg-white\/40{background-color:#fff6}.bg-white\/70{background-color:#ffffffb3}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-20{padding-left:5rem;padding-right:5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.text-dark{--tw-text-opacity: 1;color:rgb(14 14 14 / var(--tw-text-opacity))}.text-light{--tw-text-opacity: 1;color:rgb(253 253 253 / var(--tw-text-opacity))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity))}.shadow-blkSm{--tw-shadow: 2px 2px 6px rgba(0, 0, 0, .35), 3px 3px 6px rgba(0, 0, 0, .25);--tw-shadow-colored: 2px 2px 6px var(--tw-shadow-color), 3px 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-insetLight{--tw-shadow: inset 3px 3px 6px #ffffff, inset -3px -3px 3px #aeaeae;--tw-shadow-colored: inset 3px 3px 6px var(--tw-shadow-color), inset -3px -3px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.backdrop-blur-lg{--tw-backdrop-blur: blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}*{box-sizing:border-box}:root{font-family:Rubik,Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{width:100%;margin:0}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:shadow-blkSm:hover{--tw-shadow: 2px 2px 6px rgba(0, 0, 0, .35), 3px 3px 6px rgba(0, 0, 0, .25);--tw-shadow-colored: 2px 2px 6px var(--tw-shadow-color), 3px 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)} diff --git a/examples_new/docker/client/dist/assets/index-hI43WCOc.js b/examples_new/docker/client/dist/assets/index-hI43WCOc.js new file mode 100644 index 000000000..640f108a6 --- /dev/null +++ b/examples_new/docker/client/dist/assets/index-hI43WCOc.js @@ -0,0 +1,91 @@ +function Nd(e,t){for(var n=0;nr[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function _d(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Na={exports:{}},Dl={},_a={exports:{}},j={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var wr=Symbol.for("react.element"),Pd=Symbol.for("react.portal"),Rd=Symbol.for("react.fragment"),Od=Symbol.for("react.strict_mode"),Td=Symbol.for("react.profiler"),Ld=Symbol.for("react.provider"),zd=Symbol.for("react.context"),jd=Symbol.for("react.forward_ref"),Id=Symbol.for("react.suspense"),Fd=Symbol.for("react.memo"),Dd=Symbol.for("react.lazy"),Ju=Symbol.iterator;function Ud(e){return e===null||typeof e!="object"?null:(e=Ju&&e[Ju]||e["@@iterator"],typeof e=="function"?e:null)}var Pa={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ra=Object.assign,Oa={};function kn(e,t,n){this.props=e,this.context=t,this.refs=Oa,this.updater=n||Pa}kn.prototype.isReactComponent={};kn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};kn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Ta(){}Ta.prototype=kn.prototype;function Hi(e,t,n){this.props=e,this.context=t,this.refs=Oa,this.updater=n||Pa}var Vi=Hi.prototype=new Ta;Vi.constructor=Hi;Ra(Vi,kn.prototype);Vi.isPureReactComponent=!0;var Xu=Array.isArray,La=Object.prototype.hasOwnProperty,Wi={current:null},za={key:!0,ref:!0,__self:!0,__source:!0};function ja(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)La.call(t,r)&&!za.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,ee=P[G];if(0>>1;Gl(io,z))ztl(Tr,io)?(P[G]=Tr,P[zt]=z,G=zt):(P[G]=io,P[Lt]=z,G=Lt);else if(ztl(Tr,z))P[G]=Tr,P[zt]=z,G=zt;else break e}}return L}function l(P,L){var z=P.sortIndex-L.sortIndex;return z!==0?z:P.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var s=[],a=[],f=1,c=null,m=3,S=!1,v=!1,y=!1,E=typeof setTimeout=="function"?setTimeout:null,p=typeof clearTimeout=="function"?clearTimeout:null,d=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(P){for(var L=n(a);L!==null;){if(L.callback===null)r(a);else if(L.startTime<=P)r(a),L.sortIndex=L.expirationTime,t(s,L);else break;L=n(a)}}function w(P){if(y=!1,h(P),!v)if(n(s)!==null)v=!0,lo(N);else{var L=n(a);L!==null&&oo(w,L.startTime-P)}}function N(P,L){v=!1,y&&(y=!1,p(T),T=-1),S=!0;var z=m;try{for(h(L),c=n(s);c!==null&&(!(c.expirationTime>L)||P&&!je());){var G=c.callback;if(typeof G=="function"){c.callback=null,m=c.priorityLevel;var ee=G(c.expirationTime<=L);L=e.unstable_now(),typeof ee=="function"?c.callback=ee:c===n(s)&&r(s),h(L)}else r(s);c=n(s)}if(c!==null)var Or=!0;else{var Lt=n(a);Lt!==null&&oo(w,Lt.startTime-L),Or=!1}return Or}finally{c=null,m=z,S=!1}}var R=!1,O=null,T=-1,K=5,I=-1;function je(){return!(e.unstable_now()-IP||125G?(P.sortIndex=z,t(a,P),n(s)===null&&P===n(a)&&(y?(p(T),T=-1):y=!0,oo(w,z-G))):(P.sortIndex=ee,t(s,P),v||S||(v=!0,lo(N))),P},e.unstable_shouldYield=je,e.unstable_wrapCallback=function(P){var L=m;return function(){var z=m;m=L;try{return P.apply(this,arguments)}finally{m=z}}}})(Ua);Da.exports=Ua;var Xd=Da.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Aa=C,ke=Xd;function x(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ho=Object.prototype.hasOwnProperty,Yd=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,qu={},Zu={};function qd(e){return Ho.call(Zu,e)?!0:Ho.call(qu,e)?!1:Yd.test(e)?Zu[e]=!0:(qu[e]=!0,!1)}function Zd(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function bd(e,t,n,r){if(t===null||typeof t>"u"||Zd(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function pe(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var oe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){oe[e]=new pe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];oe[t]=new pe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){oe[e]=new pe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){oe[e]=new pe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){oe[e]=new pe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){oe[e]=new pe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){oe[e]=new pe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){oe[e]=new pe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){oe[e]=new pe(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ki=/[\-:]([a-z])/g;function Gi(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ki,Gi);oe[t]=new pe(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ki,Gi);oe[t]=new pe(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ki,Gi);oe[t]=new pe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){oe[e]=new pe(e,1,!1,e.toLowerCase(),null,!1,!1)});oe.xlinkHref=new pe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){oe[e]=new pe(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ji(e,t,n,r){var l=oe.hasOwnProperty(t)?oe[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` +`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{ao=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Bn(e):""}function ep(e){switch(e.tag){case 5:return Bn(e.type);case 16:return Bn("Lazy");case 13:return Bn("Suspense");case 19:return Bn("SuspenseList");case 0:case 2:case 15:return e=co(e.type,!1),e;case 11:return e=co(e.type.render,!1),e;case 1:return e=co(e.type,!0),e;default:return""}}function Ko(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case qt:return"Fragment";case Yt:return"Portal";case Vo:return"Profiler";case Xi:return"StrictMode";case Wo:return"Suspense";case Qo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $a:return(e.displayName||"Context")+".Consumer";case Ba:return(e._context.displayName||"Context")+".Provider";case Yi:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case qi:return t=e.displayName||null,t!==null?t:Ko(e.type)||"Memo";case ut:t=e._payload,e=e._init;try{return Ko(e(t))}catch{}}return null}function tp(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ko(t);case 8:return t===Xi?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Nt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Va(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function np(e){var t=Va(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function jr(e){e._valueTracker||(e._valueTracker=np(e))}function Wa(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Va(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function al(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Go(e,t){var n=t.checked;return W({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function es(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Nt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Qa(e,t){t=t.checked,t!=null&&Ji(e,"checked",t,!1)}function Jo(e,t){Qa(e,t);var n=Nt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Xo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Xo(e,t.type,Nt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ts(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Xo(e,t,n){(t!=="number"||al(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function an(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=Ir.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function er(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Wn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rp=["Webkit","ms","Moz","O"];Object.keys(Wn).forEach(function(e){rp.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Wn[t]=Wn[e]})});function Xa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Wn.hasOwnProperty(e)&&Wn[e]?(""+t).trim():t+"px"}function Ya(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Xa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var lp=W({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Zo(e,t){if(t){if(lp[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(x(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(x(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(x(61))}if(t.style!=null&&typeof t.style!="object")throw Error(x(62))}}function bo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ei=null;function Zi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ti=null,cn=null,fn=null;function ls(e){if(e=Er(e)){if(typeof ti!="function")throw Error(x(280));var t=e.stateNode;t&&(t=$l(t),ti(e.stateNode,e.type,t))}}function qa(e){cn?fn?fn.push(e):fn=[e]:cn=e}function Za(){if(cn){var e=cn,t=fn;if(fn=cn=null,ls(e),t)for(e=0;e>>=0,e===0?32:31-(mp(e)/yp|0)|0}var Fr=64,Dr=4194304;function Hn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Hn(u):(o&=i,o!==0&&(r=Hn(o)))}else i=n&~l,i!==0?r=Hn(i):o!==0&&(r=Hn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Sr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ae(t),e[t]=n}function Sp(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Kn),ps=" ",hs=!1;function gc(e,t){switch(e){case"keyup":return Jp.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function wc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Zt=!1;function Yp(e,t){switch(e){case"compositionend":return wc(t);case"keypress":return t.which!==32?null:(hs=!0,ps);case"textInput":return e=t.data,e===ps&&hs?null:e;default:return null}}function qp(e,t){if(Zt)return e==="compositionend"||!iu&&gc(e,t)?(e=yc(),qr=ru=ft=null,Zt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=gs(n)}}function kc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?kc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Cc(){for(var e=window,t=al();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=al(e.document)}return t}function uu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function i1(e){var t=Cc(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&kc(n.ownerDocument.documentElement,n)){if(r!==null&&uu(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=ws(n,o);var i=ws(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,bt=null,ui=null,Jn=null,si=!1;function Ss(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;si||bt==null||bt!==al(r)||(r=bt,"selectionStart"in r&&uu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Jn&&ir(Jn,r)||(Jn=r,r=yl(ui,"onSelect"),0nn||(e.current=hi[nn],hi[nn]=null,nn--)}function A(e,t){nn++,hi[nn]=e.current,e.current=t}var _t={},ae=Rt(_t),ye=Rt(!1),Bt=_t;function yn(e,t){var n=e.type.contextTypes;if(!n)return _t;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ve(e){return e=e.childContextTypes,e!=null}function gl(){B(ye),B(ae)}function Ps(e,t,n){if(ae.current!==_t)throw Error(x(168));A(ae,t),A(ye,n)}function jc(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(x(108,tp(e)||"Unknown",l));return W({},n,r)}function wl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||_t,Bt=ae.current,A(ae,e),A(ye,ye.current),!0}function Rs(e,t,n){var r=e.stateNode;if(!r)throw Error(x(169));n?(e=jc(e,t,Bt),r.__reactInternalMemoizedMergedChildContext=e,B(ye),B(ae),A(ae,e)):B(ye),A(ye,n)}var Xe=null,Hl=!1,No=!1;function Ic(e){Xe===null?Xe=[e]:Xe.push(e)}function g1(e){Hl=!0,Ic(e)}function Ot(){if(!No&&Xe!==null){No=!0;var e=0,t=U;try{var n=Xe;for(U=1;e>=i,l-=i,Ye=1<<32-Ae(t)+l|n<T?(K=O,O=null):K=O.sibling;var I=m(p,O,h[T],w);if(I===null){O===null&&(O=K);break}e&&O&&I.alternate===null&&t(p,O),d=o(I,d,T),R===null?N=I:R.sibling=I,R=I,O=K}if(T===h.length)return n(p,O),$&&jt(p,T),N;if(O===null){for(;TT?(K=O,O=null):K=O.sibling;var je=m(p,O,I.value,w);if(je===null){O===null&&(O=K);break}e&&O&&je.alternate===null&&t(p,O),d=o(je,d,T),R===null?N=je:R.sibling=je,R=je,O=K}if(I.done)return n(p,O),$&&jt(p,T),N;if(O===null){for(;!I.done;T++,I=h.next())I=c(p,I.value,w),I!==null&&(d=o(I,d,T),R===null?N=I:R.sibling=I,R=I);return $&&jt(p,T),N}for(O=r(p,O);!I.done;T++,I=h.next())I=S(O,p,T,I.value,w),I!==null&&(e&&I.alternate!==null&&O.delete(I.key===null?T:I.key),d=o(I,d,T),R===null?N=I:R.sibling=I,R=I);return e&&O.forEach(function(On){return t(p,On)}),$&&jt(p,T),N}function E(p,d,h,w){if(typeof h=="object"&&h!==null&&h.type===qt&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case zr:e:{for(var N=h.key,R=d;R!==null;){if(R.key===N){if(N=h.type,N===qt){if(R.tag===7){n(p,R.sibling),d=l(R,h.props.children),d.return=p,p=d;break e}}else if(R.elementType===N||typeof N=="object"&&N!==null&&N.$$typeof===ut&&Fs(N)===R.type){n(p,R.sibling),d=l(R,h.props),d.ref=Dn(p,R,h),d.return=p,p=d;break e}n(p,R);break}else t(p,R);R=R.sibling}h.type===qt?(d=Mt(h.props.children,p.mode,w,h.key),d.return=p,p=d):(w=ol(h.type,h.key,h.props,null,p.mode,w),w.ref=Dn(p,d,h),w.return=p,p=w)}return i(p);case Yt:e:{for(R=h.key;d!==null;){if(d.key===R)if(d.tag===4&&d.stateNode.containerInfo===h.containerInfo&&d.stateNode.implementation===h.implementation){n(p,d.sibling),d=l(d,h.children||[]),d.return=p,p=d;break e}else{n(p,d);break}else t(p,d);d=d.sibling}d=jo(h,p.mode,w),d.return=p,p=d}return i(p);case ut:return R=h._init,E(p,d,R(h._payload),w)}if($n(h))return v(p,d,h,w);if(Ln(h))return y(p,d,h,w);Vr(p,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,d!==null&&d.tag===6?(n(p,d.sibling),d=l(d,h),d.return=p,p=d):(n(p,d),d=zo(h,p.mode,w),d.return=p,p=d),i(p)):n(p,d)}return E}var gn=Hc(!0),Vc=Hc(!1),kr={},Ke=Rt(kr),cr=Rt(kr),fr=Rt(kr);function Ut(e){if(e===kr)throw Error(x(174));return e}function yu(e,t){switch(A(fr,t),A(cr,e),A(Ke,kr),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:qo(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=qo(t,e)}B(Ke),A(Ke,t)}function wn(){B(Ke),B(cr),B(fr)}function Wc(e){Ut(fr.current);var t=Ut(Ke.current),n=qo(t,e.type);t!==n&&(A(cr,e),A(Ke,n))}function vu(e){cr.current===e&&(B(Ke),B(cr))}var H=Rt(0);function Nl(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var _o=[];function gu(){for(var e=0;e<_o.length;e++)_o[e]._workInProgressVersionPrimary=null;_o.length=0}var el=lt.ReactCurrentDispatcher,Po=lt.ReactCurrentBatchConfig,Ht=0,V=null,Z=null,te=null,_l=!1,Xn=!1,dr=0,S1=0;function ie(){throw Error(x(321))}function wu(e,t){if(t===null)return!1;for(var n=0;nn?n:4,e(!0);var r=Po.transition;Po.transition={};try{e(!1),t()}finally{U=n,Po.transition=r}}function uf(){return ze().memoizedState}function E1(e,t,n){var r=xt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},sf(e))af(t,n);else if(n=Ac(e,t,n,r),n!==null){var l=fe();Me(n,e,r,l),cf(n,t,r)}}function k1(e,t,n){var r=xt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(sf(e))af(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Be(u,i)){var s=t.interleaved;s===null?(l.next=l,hu(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=Ac(e,t,l,r),n!==null&&(l=fe(),Me(n,e,r,l),cf(n,t,r))}}function sf(e){var t=e.alternate;return e===V||t!==null&&t===V}function af(e,t){Xn=_l=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function cf(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,eu(e,n)}}var Pl={readContext:Le,useCallback:ie,useContext:ie,useEffect:ie,useImperativeHandle:ie,useInsertionEffect:ie,useLayoutEffect:ie,useMemo:ie,useReducer:ie,useRef:ie,useState:ie,useDebugValue:ie,useDeferredValue:ie,useTransition:ie,useMutableSource:ie,useSyncExternalStore:ie,useId:ie,unstable_isNewReconciler:!1},C1={readContext:Le,useCallback:function(e,t){return He().memoizedState=[e,t===void 0?null:t],e},useContext:Le,useEffect:Us,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,tl(4194308,4,tf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return tl(4194308,4,e,t)},useInsertionEffect:function(e,t){return tl(4,2,e,t)},useMemo:function(e,t){var n=He();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=He();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=E1.bind(null,V,e),[r.memoizedState,e]},useRef:function(e){var t=He();return e={current:e},t.memoizedState=e},useState:Ds,useDebugValue:ku,useDeferredValue:function(e){return He().memoizedState=e},useTransition:function(){var e=Ds(!1),t=e[0];return e=x1.bind(null,e[1]),He().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=V,l=He();if($){if(n===void 0)throw Error(x(407));n=n()}else{if(n=t(),ne===null)throw Error(x(349));Ht&30||Gc(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Us(Xc.bind(null,r,o,e),[e]),r.flags|=2048,hr(9,Jc.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=He(),t=ne.identifierPrefix;if($){var n=qe,r=Ye;n=(r&~(1<<32-Ae(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=dr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ve]=t,e[ar]=r,wf(e,t,!1,!1),t.stateNode=e;e:{switch(i=bo(n,r),n){case"dialog":M("cancel",e),M("close",e),l=r;break;case"iframe":case"object":case"embed":M("load",e),l=r;break;case"video":case"audio":for(l=0;lxn&&(t.flags|=128,r=!0,Un(o,!1),t.lanes=4194304)}else{if(!r)if(e=Nl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Un(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!$)return ue(t),null}else 2*J()-o.renderingStartTime>xn&&n!==1073741824&&(t.flags|=128,r=!0,Un(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=J(),t.sibling=null,n=H.current,A(H,r?n&1|2:n&1),t):(ue(t),null);case 22:case 23:return Ou(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?we&1073741824&&(ue(t),t.subtreeFlags&6&&(t.flags|=8192)):ue(t),null;case 24:return null;case 25:return null}throw Error(x(156,t.tag))}function z1(e,t){switch(au(t),t.tag){case 1:return ve(t.type)&&gl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wn(),B(ye),B(ae),gu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return vu(t),null;case 13:if(B(H),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(x(340));vn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(H),null;case 4:return wn(),null;case 10:return pu(t.type._context),null;case 22:case 23:return Ou(),null;case 24:return null;default:return null}}var Qr=!1,se=!1,j1=typeof WeakSet=="function"?WeakSet:Set,_=null;function un(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Q(e,t,r)}else n.current=null}function _i(e,t,n){try{n()}catch(r){Q(e,t,r)}}var Ks=!1;function I1(e,t){if(ai=hl,e=Cc(),uu(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,a=0,f=0,c=e,m=null;t:for(;;){for(var S;c!==n||l!==0&&c.nodeType!==3||(u=i+l),c!==o||r!==0&&c.nodeType!==3||(s=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(S=c.firstChild)!==null;)m=c,c=S;for(;;){if(c===e)break t;if(m===n&&++a===l&&(u=i),m===o&&++f===r&&(s=i),(S=c.nextSibling)!==null)break;c=m,m=c.parentNode}c=S}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(ci={focusedElem:e,selectionRange:n},hl=!1,_=t;_!==null;)if(t=_,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,_=e;else for(;_!==null;){t=_;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var y=v.memoizedProps,E=v.memoizedState,p=t.stateNode,d=p.getSnapshotBeforeUpdate(t.elementType===t.type?y:Fe(t.type,y),E);p.__reactInternalSnapshotBeforeUpdate=d}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(x(163))}}catch(w){Q(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,_=e;break}_=t.return}return v=Ks,Ks=!1,v}function Yn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&_i(t,n,o)}l=l.next}while(l!==r)}}function Ql(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Pi(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ef(e){var t=e.alternate;t!==null&&(e.alternate=null,Ef(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ve],delete t[ar],delete t[pi],delete t[y1],delete t[v1])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function kf(e){return e.tag===5||e.tag===3||e.tag===4}function Gs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||kf(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ri(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=vl));else if(r!==4&&(e=e.child,e!==null))for(Ri(e,t,n),e=e.sibling;e!==null;)Ri(e,t,n),e=e.sibling}function Oi(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Oi(e,t,n),e=e.sibling;e!==null;)Oi(e,t,n),e=e.sibling}var re=null,De=!1;function ot(e,t,n){for(n=n.child;n!==null;)Cf(e,t,n),n=n.sibling}function Cf(e,t,n){if(Qe&&typeof Qe.onCommitFiberUnmount=="function")try{Qe.onCommitFiberUnmount(Ul,n)}catch{}switch(n.tag){case 5:se||un(n,t);case 6:var r=re,l=De;re=null,ot(e,t,n),re=r,De=l,re!==null&&(De?(e=re,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):re.removeChild(n.stateNode));break;case 18:re!==null&&(De?(e=re,n=n.stateNode,e.nodeType===8?Co(e.parentNode,n):e.nodeType===1&&Co(e,n),lr(e)):Co(re,n.stateNode));break;case 4:r=re,l=De,re=n.stateNode.containerInfo,De=!0,ot(e,t,n),re=r,De=l;break;case 0:case 11:case 14:case 15:if(!se&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&_i(n,t,i),l=l.next}while(l!==r)}ot(e,t,n);break;case 1:if(!se&&(un(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Q(n,t,u)}ot(e,t,n);break;case 21:ot(e,t,n);break;case 22:n.mode&1?(se=(r=se)||n.memoizedState!==null,ot(e,t,n),se=r):ot(e,t,n);break;default:ot(e,t,n)}}function Js(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new j1),t.forEach(function(r){var l=V1.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Ie(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=J()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*D1(r/1960))-r,10e?16:e,dt===null)var r=!1;else{if(e=dt,dt=null,Tl=0,D&6)throw Error(x(331));var l=D;for(D|=4,_=e.current;_!==null;){var o=_,i=o.child;if(_.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sJ()-Pu?At(e,0):_u|=n),ge(e,t)}function zf(e,t){t===0&&(e.mode&1?(t=Dr,Dr<<=1,!(Dr&130023424)&&(Dr=4194304)):t=1);var n=fe();e=nt(e,t),e!==null&&(Sr(e,t,n),ge(e,n))}function H1(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),zf(e,n)}function V1(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(x(314))}r!==null&&r.delete(t),zf(e,n)}var jf;jf=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ye.current)me=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return me=!1,T1(e,t,n);me=!!(e.flags&131072)}else me=!1,$&&t.flags&1048576&&Fc(t,xl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;nl(e,t),e=t.pendingProps;var l=yn(t,ae.current);pn(t,n),l=Su(null,t,r,e,l,n);var o=xu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ve(r)?(o=!0,wl(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,mu(t),l.updater=Vl,t.stateNode=l,l._reactInternals=t,wi(t,r,e,n),t=Ei(null,t,r,!0,o,n)):(t.tag=0,$&&o&&su(t),ce(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(nl(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Q1(r),e=Fe(r,e),l){case 0:t=xi(null,t,r,e,n);break e;case 1:t=Vs(null,t,r,e,n);break e;case 11:t=$s(null,t,r,e,n);break e;case 14:t=Hs(null,t,r,Fe(r.type,e),n);break e}throw Error(x(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Fe(r,l),xi(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Fe(r,l),Vs(e,t,r,l,n);case 3:e:{if(yf(t),e===null)throw Error(x(387));r=t.pendingProps,o=t.memoizedState,l=o.element,Mc(e,t),Cl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=Sn(Error(x(423)),t),t=Ws(e,t,r,n,l);break e}else if(r!==l){l=Sn(Error(x(424)),t),t=Ws(e,t,r,n,l);break e}else for(xe=gt(t.stateNode.containerInfo.firstChild),Ee=t,$=!0,Ue=null,n=Vc(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(vn(),r===l){t=rt(e,t,n);break e}ce(e,t,r,n)}t=t.child}return t;case 5:return Wc(t),e===null&&yi(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,fi(r,l)?i=null:o!==null&&fi(r,o)&&(t.flags|=32),mf(e,t),ce(e,t,i,n),t.child;case 6:return e===null&&yi(t),null;case 13:return vf(e,t,n);case 4:return yu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=gn(t,null,r,n):ce(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Fe(r,l),$s(e,t,r,l,n);case 7:return ce(e,t,t.pendingProps,n),t.child;case 8:return ce(e,t,t.pendingProps.children,n),t.child;case 12:return ce(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,A(El,r._currentValue),r._currentValue=i,o!==null)if(Be(o.value,i)){if(o.children===l.children&&!ye.current){t=rt(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Ze(-1,n&-n),s.tag=2;var a=o.updateQueue;if(a!==null){a=a.shared;var f=a.pending;f===null?s.next=s:(s.next=f.next,f.next=s),a.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),vi(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(x(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),vi(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}ce(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,pn(t,n),l=Le(l),r=r(l),t.flags|=1,ce(e,t,r,n),t.child;case 14:return r=t.type,l=Fe(r,t.pendingProps),l=Fe(r.type,l),Hs(e,t,r,l,n);case 15:return pf(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Fe(r,l),nl(e,t),t.tag=1,ve(r)?(e=!0,wl(t)):e=!1,pn(t,n),$c(t,r,l),wi(t,r,l,n),Ei(null,t,r,!0,e,n);case 19:return gf(e,t,n);case 22:return hf(e,t,n)}throw Error(x(156,t.tag))};function If(e,t){return oc(e,t)}function W1(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Re(e,t,n,r){return new W1(e,t,n,r)}function Lu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Q1(e){if(typeof e=="function")return Lu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Yi)return 11;if(e===qi)return 14}return 2}function Et(e,t){var n=e.alternate;return n===null?(n=Re(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ol(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Lu(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case qt:return Mt(n.children,l,o,t);case Xi:i=8,l|=8;break;case Vo:return e=Re(12,n,t,l|2),e.elementType=Vo,e.lanes=o,e;case Wo:return e=Re(13,n,t,l),e.elementType=Wo,e.lanes=o,e;case Qo:return e=Re(19,n,t,l),e.elementType=Qo,e.lanes=o,e;case Ha:return Gl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ba:i=10;break e;case $a:i=9;break e;case Yi:i=11;break e;case qi:i=14;break e;case ut:i=16,r=null;break e}throw Error(x(130,e==null?e:typeof e,""))}return t=Re(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Mt(e,t,n,r){return e=Re(7,e,r,t),e.lanes=n,e}function Gl(e,t,n,r){return e=Re(22,e,r,t),e.elementType=Ha,e.lanes=n,e.stateNode={isHidden:!1},e}function zo(e,t,n){return e=Re(6,e,null,t),e.lanes=n,e}function jo(e,t,n){return t=Re(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function K1(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=po(0),this.expirationTimes=po(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=po(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function zu(e,t,n,r,l,o,i,u,s){return e=new K1(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Re(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},mu(o),e}function G1(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Af)}catch(e){console.error(e)}}Af(),Fa.exports=Ce;var Z1=Fa.exports,na=Z1;$o.createRoot=na.createRoot,$o.hydrateRoot=na.hydrateRoot;/** + * @remix-run/router v1.14.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function yr(){return yr=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function Du(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function eh(){return Math.random().toString(36).substr(2,8)}function la(e,t){return{usr:e.state,key:e.key,idx:t}}function Ii(e,t,n,r){return n===void 0&&(n=null),yr({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?_n(t):t,{state:n,key:t&&t.key||r||eh()})}function jl(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function _n(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function th(e,t,n,r){r===void 0&&(r={});let{window:l=document.defaultView,v5Compat:o=!1}=r,i=l.history,u=pt.Pop,s=null,a=f();a==null&&(a=0,i.replaceState(yr({},i.state,{idx:a}),""));function f(){return(i.state||{idx:null}).idx}function c(){u=pt.Pop;let E=f(),p=E==null?null:E-a;a=E,s&&s({action:u,location:y.location,delta:p})}function m(E,p){u=pt.Push;let d=Ii(y.location,E,p);n&&n(d,E),a=f()+1;let h=la(d,a),w=y.createHref(d);try{i.pushState(h,"",w)}catch(N){if(N instanceof DOMException&&N.name==="DataCloneError")throw N;l.location.assign(w)}o&&s&&s({action:u,location:y.location,delta:1})}function S(E,p){u=pt.Replace;let d=Ii(y.location,E,p);n&&n(d,E),a=f();let h=la(d,a),w=y.createHref(d);i.replaceState(h,"",w),o&&s&&s({action:u,location:y.location,delta:0})}function v(E){let p=l.location.origin!=="null"?l.location.origin:l.location.href,d=typeof E=="string"?E:jl(E);return Y(p,"No window.location.(origin|href) available to create URL for href: "+d),new URL(d,p)}let y={get action(){return u},get location(){return e(l,i)},listen(E){if(s)throw new Error("A history only accepts one active listener");return l.addEventListener(ra,c),s=E,()=>{l.removeEventListener(ra,c),s=null}},createHref(E){return t(l,E)},createURL:v,encodeLocation(E){let p=v(E);return{pathname:p.pathname,search:p.search,hash:p.hash}},push:m,replace:S,go(E){return i.go(E)}};return y}var oa;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(oa||(oa={}));function nh(e,t,n){n===void 0&&(n="/");let r=typeof t=="string"?_n(t):t,l=Uu(r.pathname||"/",n);if(l==null)return null;let o=Mf(e);rh(o);let i=null;for(let u=0;i==null&&u{let s={relativePath:u===void 0?o.path||"":u,caseSensitive:o.caseSensitive===!0,childrenIndex:i,route:o};s.relativePath.startsWith("/")&&(Y(s.relativePath.startsWith(r),'Absolute route path "'+s.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),s.relativePath=s.relativePath.slice(r.length));let a=kt([r,s.relativePath]),f=n.concat(s);o.children&&o.children.length>0&&(Y(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+a+'".')),Mf(o.children,t,f,a)),!(o.path==null&&!o.index)&&t.push({path:a,score:ch(a,o.index),routesMeta:f})};return e.forEach((o,i)=>{var u;if(o.path===""||!((u=o.path)!=null&&u.includes("?")))l(o,i);else for(let s of Bf(o.path))l(o,i,s)}),t}function Bf(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,l=n.endsWith("?"),o=n.replace(/\?$/,"");if(r.length===0)return l?[o,""]:[o];let i=Bf(r.join("/")),u=[];return u.push(...i.map(s=>s===""?o:[o,s].join("/"))),l&&u.push(...i),u.map(s=>e.startsWith("/")&&s===""?"/":s)}function rh(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:fh(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const lh=/^:\w+$/,oh=3,ih=2,uh=1,sh=10,ah=-2,ia=e=>e==="*";function ch(e,t){let n=e.split("/"),r=n.length;return n.some(ia)&&(r+=ah),t&&(r+=ih),n.filter(l=>!ia(l)).reduce((l,o)=>l+(lh.test(o)?oh:o===""?uh:sh),r)}function fh(e,t){return e.length===t.length&&e.slice(0,-1).every((r,l)=>r===t[l])?e[e.length-1]-t[t.length-1]:0}function dh(e,t){let{routesMeta:n}=e,r={},l="/",o=[];for(let i=0;i{let{paramName:m,isOptional:S}=f;if(m==="*"){let y=u[c]||"";i=o.slice(0,o.length-y.length).replace(/(.)\/+$/,"$1")}const v=u[c];return S&&!v?a[m]=void 0:a[m]=yh(v||"",m),a},{}),pathname:o,pathnameBase:i,pattern:e}}function hh(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),Du(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:(\w+)(\?)?/g,(i,u,s)=>(r.push({paramName:u,isOptional:s!=null}),s?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,t?void 0:"i"),r]}function mh(e){try{return decodeURI(e)}catch(t){return Du(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function yh(e,t){try{return decodeURIComponent(e)}catch(n){return Du(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+n+").")),e}}function Uu(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function vh(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:l=""}=typeof e=="string"?_n(e):e;return{pathname:n?n.startsWith("/")?n:gh(n,t):t,search:xh(r),hash:Eh(l)}}function gh(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(l=>{l===".."?n.length>1&&n.pop():l!=="."&&n.push(l)}),n.length>1?n.join("/"):"/"}function Io(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function wh(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function $f(e,t){let n=wh(e);return t?n.map((r,l)=>l===e.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function Hf(e,t,n,r){r===void 0&&(r=!1);let l;typeof e=="string"?l=_n(e):(l=yr({},e),Y(!l.pathname||!l.pathname.includes("?"),Io("?","pathname","search",l)),Y(!l.pathname||!l.pathname.includes("#"),Io("#","pathname","hash",l)),Y(!l.search||!l.search.includes("#"),Io("#","search","hash",l)));let o=e===""||l.pathname==="",i=o?"/":l.pathname,u;if(i==null)u=n;else if(r){let c=t.length===0?[]:t[t.length-1].replace(/^\//,"").split("/");if(i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),c.pop();l.pathname=m.join("/")}u="/"+c.join("/")}else{let c=t.length-1;if(i.startsWith("..")){let m=i.split("/");for(;m[0]==="..";)m.shift(),c-=1;l.pathname=m.join("/")}u=c>=0?t[c]:"/"}let s=vh(l,u),a=i&&i!=="/"&&i.endsWith("/"),f=(o||i===".")&&n.endsWith("/");return!s.pathname.endsWith("/")&&(a||f)&&(s.pathname+="/"),s}const kt=e=>e.join("/").replace(/\/\/+/g,"/"),Sh=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),xh=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Eh=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function kh(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const Vf=["post","put","patch","delete"];new Set(Vf);const Ch=["get",...Vf];new Set(Ch);/** + * React Router v6.21.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function vr(){return vr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{u.current=!0}),C.useCallback(function(a,f){if(f===void 0&&(f={}),!u.current)return;if(typeof a=="number"){r.go(a);return}let c=Hf(a,JSON.parse(i),o,f.relative==="path");e==null&&t!=="/"&&(c.pathname=c.pathname==="/"?t:kt([t,c.pathname])),(f.replace?r.replace:r.push)(c,f.state,f)},[t,r,i,o,e])}const Rh=C.createContext(null);function Oh(e){let t=C.useContext(Tt).outlet;return t&&C.createElement(Rh.Provider,{value:e},t)}function Kf(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=C.useContext(Gt),{matches:l}=C.useContext(Tt),{pathname:o}=Nr(),i=JSON.stringify($f(l,r.v7_relativeSplatPath));return C.useMemo(()=>Hf(e,JSON.parse(i),o,n==="path"),[e,i,o,n])}function Th(e,t){return Lh(e,t)}function Lh(e,t,n,r){Cr()||Y(!1);let{navigator:l}=C.useContext(Gt),{matches:o}=C.useContext(Tt),i=o[o.length-1],u=i?i.params:{};i&&i.pathname;let s=i?i.pathnameBase:"/";i&&i.route;let a=Nr(),f;if(t){var c;let E=typeof t=="string"?_n(t):t;s==="/"||(c=E.pathname)!=null&&c.startsWith(s)||Y(!1),f=E}else f=a;let m=f.pathname||"/",S=s==="/"?m:m.slice(s.length)||"/",v=nh(e,{pathname:S}),y=Dh(v&&v.map(E=>Object.assign({},E,{params:Object.assign({},u,E.params),pathname:kt([s,l.encodeLocation?l.encodeLocation(E.pathname).pathname:E.pathname]),pathnameBase:E.pathnameBase==="/"?s:kt([s,l.encodeLocation?l.encodeLocation(E.pathnameBase).pathname:E.pathnameBase])})),o,n,r);return t&&y?C.createElement(Zl.Provider,{value:{location:vr({pathname:"/",search:"",hash:"",state:null,key:"default"},f),navigationType:pt.Pop}},y):y}function zh(){let e=Bh(),t=kh(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,l={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},o=null;return C.createElement(C.Fragment,null,C.createElement("h2",null,"Unexpected Application Error!"),C.createElement("h3",{style:{fontStyle:"italic"}},t),n?C.createElement("pre",{style:l},n):null,o)}const jh=C.createElement(zh,null);class Ih extends C.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?C.createElement(Tt.Provider,{value:this.props.routeContext},C.createElement(Wf.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Fh(e){let{routeContext:t,match:n,children:r}=e,l=C.useContext(Au);return l&&l.static&&l.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=n.route.id),C.createElement(Tt.Provider,{value:t},r)}function Dh(e,t,n,r){var l;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var o;if((o=n)!=null&&o.errors)e=n.matches;else return null}let i=e,u=(l=n)==null?void 0:l.errors;if(u!=null){let f=i.findIndex(c=>c.route.id&&(u==null?void 0:u[c.route.id]));f>=0||Y(!1),i=i.slice(0,Math.min(i.length,f+1))}let s=!1,a=-1;if(n&&r&&r.v7_partialHydration)for(let f=0;f=0?i=i.slice(0,a+1):i=[i[0]];break}}return i.reduceRight((f,c,m)=>{let S,v=!1,y=null,E=null;n&&(S=u&&c.route.id?u[c.route.id]:void 0,y=c.route.errorElement||jh,s&&(a<0&&m===0?(Hh("route-fallback",!1),v=!0,E=null):a===m&&(v=!0,E=c.route.hydrateFallbackElement||null)));let p=t.concat(i.slice(0,m+1)),d=()=>{let h;return S?h=y:v?h=E:c.route.Component?h=C.createElement(c.route.Component,null):c.route.element?h=c.route.element:h=f,C.createElement(Fh,{match:c,routeContext:{outlet:f,matches:p,isDataRoute:n!=null},children:h})};return n&&(c.route.ErrorBoundary||c.route.errorElement||m===0)?C.createElement(Ih,{location:n.location,revalidation:n.revalidation,component:y,error:S,children:d(),routeContext:{outlet:null,matches:p,isDataRoute:!0}}):d()},null)}var Gf=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Gf||{}),Il=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Il||{});function Uh(e){let t=C.useContext(Au);return t||Y(!1),t}function Ah(e){let t=C.useContext(Nh);return t||Y(!1),t}function Mh(e){let t=C.useContext(Tt);return t||Y(!1),t}function Jf(e){let t=Mh(),n=t.matches[t.matches.length-1];return n.route.id||Y(!1),n.route.id}function Bh(){var e;let t=C.useContext(Wf),n=Ah(Il.UseRouteError),r=Jf(Il.UseRouteError);return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function $h(){let{router:e}=Uh(Gf.UseNavigateStable),t=Jf(Il.UseNavigateStable),n=C.useRef(!1);return Qf(()=>{n.current=!0}),C.useCallback(function(l,o){o===void 0&&(o={}),n.current&&(typeof l=="number"?e.navigate(l):e.navigate(l,vr({fromRouteId:t},o)))},[e,t])}const ua={};function Hh(e,t,n){!t&&!ua[e]&&(ua[e]=!0)}function Vh(e){return Oh(e.context)}function Xt(e){Y(!1)}function Wh(e){let{basename:t="/",children:n=null,location:r,navigationType:l=pt.Pop,navigator:o,static:i=!1,future:u}=e;Cr()&&Y(!1);let s=t.replace(/^\/*/,"/"),a=C.useMemo(()=>({basename:s,navigator:o,static:i,future:vr({v7_relativeSplatPath:!1},u)}),[s,u,o,i]);typeof r=="string"&&(r=_n(r));let{pathname:f="/",search:c="",hash:m="",state:S=null,key:v="default"}=r,y=C.useMemo(()=>{let E=Uu(f,s);return E==null?null:{location:{pathname:E,search:c,hash:m,state:S,key:v},navigationType:l}},[s,f,c,m,S,v,l]);return y==null?null:C.createElement(Gt.Provider,{value:a},C.createElement(Zl.Provider,{children:n,value:y}))}function Qh(e){let{children:t,location:n}=e;return Th(Fi(t),n)}new Promise(()=>{});function Fi(e,t){t===void 0&&(t=[]);let n=[];return C.Children.forEach(e,(r,l)=>{if(!C.isValidElement(r))return;let o=[...t,l];if(r.type===C.Fragment){n.push.apply(n,Fi(r.props.children,o));return}r.type!==Xt&&Y(!1),!r.props.index||!r.props.children||Y(!1);let i={id:r.props.id||o.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(i.children=Fi(r.props.children,o)),n.push(i)}),n}/** + * React Router DOM v6.21.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Di(){return Di=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[l]=e[l]);return n}function Gh(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Jh(e,t){return e.button===0&&(!t||t==="_self")&&!Gh(e)}const Xh=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],Yh="startTransition",sa=Hd[Yh];function qh(e){let{basename:t,children:n,future:r,window:l}=e,o=C.useRef();o.current==null&&(o.current=b1({window:l,v5Compat:!0}));let i=o.current,[u,s]=C.useState({action:i.action,location:i.location}),{v7_startTransition:a}=r||{},f=C.useCallback(c=>{a&&sa?sa(()=>s(c)):s(c)},[s,a]);return C.useLayoutEffect(()=>i.listen(f),[i,f]),C.createElement(Wh,{basename:t,children:n,location:u.location,navigationType:u.action,navigator:i,future:r})}const Zh=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",bh=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Fo=C.forwardRef(function(t,n){let{onClick:r,relative:l,reloadDocument:o,replace:i,state:u,target:s,to:a,preventScrollReset:f,unstable_viewTransition:c}=t,m=Kh(t,Xh),{basename:S}=C.useContext(Gt),v,y=!1;if(typeof a=="string"&&bh.test(a)&&(v=a,Zh))try{let h=new URL(window.location.href),w=a.startsWith("//")?new URL(h.protocol+a):new URL(a),N=Uu(w.pathname,S);w.origin===h.origin&&N!=null?a=N+w.search+w.hash:y=!0}catch{}let E=_h(a,{relative:l}),p=em(a,{replace:i,state:u,target:s,preventScrollReset:f,relative:l,unstable_viewTransition:c});function d(h){r&&r(h),h.defaultPrevented||p(h)}return C.createElement("a",Di({},m,{href:v||E,onClick:y||o?r:d,ref:n,target:s}))});var aa;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(aa||(aa={}));var ca;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(ca||(ca={}));function em(e,t){let{target:n,replace:r,state:l,preventScrollReset:o,relative:i,unstable_viewTransition:u}=t===void 0?{}:t,s=Mu(),a=Nr(),f=Kf(e,{relative:i});return C.useCallback(c=>{if(Jh(c,n)){c.preventDefault();let m=r!==void 0?r:jl(a)===jl(f);s(e,{replace:m,state:l,preventScrollReset:o,relative:i,unstable_viewTransition:u})}},[a,s,f,r,l,n,e,o,i,u])}var Se=(e=>(e.START_LOADING="START_LOADING",e.STOP_LOADING="STOP_LOADING",e.LOGIN_USER="LOGIN_USER",e.LOGOUT_USER="LOGOUT_USER",e.RETRIEVED_ITEMS="RETRIEVED_ITEMS",e))(Se||{});const tm=(e,t)=>{switch(t.type){case Se.START_LOADING:return{...e,isLoading:!0};case Se.STOP_LOADING:return{...e,isLoading:!1};case Se.LOGIN_USER:return{...e,user:t.payload.user,isLoading:!1};case Se.LOGOUT_USER:return{...e,user:"",isLoading:!1};case Se.RETRIEVED_ITEMS:return{...e,items:t.payload.items,isLoading:!1};default:return e}};function Xf(e,t){return function(){return e.apply(t,arguments)}}const{toString:nm}=Object.prototype,{getPrototypeOf:Bu}=Object,bl=(e=>t=>{const n=nm.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Ge=e=>(e=e.toLowerCase(),t=>bl(t)===e),eo=e=>t=>typeof t===e,{isArray:Pn}=Array,gr=eo("undefined");function rm(e){return e!==null&&!gr(e)&&e.constructor!==null&&!gr(e.constructor)&&Te(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Yf=Ge("ArrayBuffer");function lm(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Yf(e.buffer),t}const om=eo("string"),Te=eo("function"),qf=eo("number"),to=e=>e!==null&&typeof e=="object",im=e=>e===!0||e===!1,il=e=>{if(bl(e)!=="object")return!1;const t=Bu(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},um=Ge("Date"),sm=Ge("File"),am=Ge("Blob"),cm=Ge("FileList"),fm=e=>to(e)&&Te(e.pipe),dm=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Te(e.append)&&((t=bl(e))==="formdata"||t==="object"&&Te(e.toString)&&e.toString()==="[object FormData]"))},pm=Ge("URLSearchParams"),hm=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function _r(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,l;if(typeof e!="object"&&(e=[e]),Pn(e))for(r=0,l=e.length;r0;)if(l=n[r],t===l.toLowerCase())return l;return null}const bf=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ed=e=>!gr(e)&&e!==bf;function Ui(){const{caseless:e}=ed(this)&&this||{},t={},n=(r,l)=>{const o=e&&Zf(t,l)||l;il(t[o])&&il(r)?t[o]=Ui(t[o],r):il(r)?t[o]=Ui({},r):Pn(r)?t[o]=r.slice():t[o]=r};for(let r=0,l=arguments.length;r(_r(t,(l,o)=>{n&&Te(l)?e[o]=Xf(l,n):e[o]=l},{allOwnKeys:r}),e),ym=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),vm=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},gm=(e,t,n,r)=>{let l,o,i;const u={};if(t=t||{},e==null)return t;do{for(l=Object.getOwnPropertyNames(e),o=l.length;o-- >0;)i=l[o],(!r||r(i,e,t))&&!u[i]&&(t[i]=e[i],u[i]=!0);e=n!==!1&&Bu(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},wm=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},Sm=e=>{if(!e)return null;if(Pn(e))return e;let t=e.length;if(!qf(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},xm=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Bu(Uint8Array)),Em=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let l;for(;(l=r.next())&&!l.done;){const o=l.value;t.call(e,o[0],o[1])}},km=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},Cm=Ge("HTMLFormElement"),Nm=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,l){return r.toUpperCase()+l}),fa=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),_m=Ge("RegExp"),td=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};_r(n,(l,o)=>{let i;(i=t(l,o,e))!==!1&&(r[o]=i||l)}),Object.defineProperties(e,r)},Pm=e=>{td(e,(t,n)=>{if(Te(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(Te(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Rm=(e,t)=>{const n={},r=l=>{l.forEach(o=>{n[o]=!0})};return Pn(e)?r(e):r(String(e).split(t)),n},Om=()=>{},Tm=(e,t)=>(e=+e,Number.isFinite(e)?e:t),Do="abcdefghijklmnopqrstuvwxyz",da="0123456789",nd={DIGIT:da,ALPHA:Do,ALPHA_DIGIT:Do+Do.toUpperCase()+da},Lm=(e=16,t=nd.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function zm(e){return!!(e&&Te(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const jm=e=>{const t=new Array(10),n=(r,l)=>{if(to(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[l]=r;const o=Pn(r)?[]:{};return _r(r,(i,u)=>{const s=n(i,l+1);!gr(s)&&(o[u]=s)}),t[l]=void 0,o}}return r};return n(e,0)},Im=Ge("AsyncFunction"),Fm=e=>e&&(to(e)||Te(e))&&Te(e.then)&&Te(e.catch),g={isArray:Pn,isArrayBuffer:Yf,isBuffer:rm,isFormData:dm,isArrayBufferView:lm,isString:om,isNumber:qf,isBoolean:im,isObject:to,isPlainObject:il,isUndefined:gr,isDate:um,isFile:sm,isBlob:am,isRegExp:_m,isFunction:Te,isStream:fm,isURLSearchParams:pm,isTypedArray:xm,isFileList:cm,forEach:_r,merge:Ui,extend:mm,trim:hm,stripBOM:ym,inherits:vm,toFlatObject:gm,kindOf:bl,kindOfTest:Ge,endsWith:wm,toArray:Sm,forEachEntry:Em,matchAll:km,isHTMLForm:Cm,hasOwnProperty:fa,hasOwnProp:fa,reduceDescriptors:td,freezeMethods:Pm,toObjectSet:Rm,toCamelCase:Nm,noop:Om,toFiniteNumber:Tm,findKey:Zf,global:bf,isContextDefined:ed,ALPHABET:nd,generateString:Lm,isSpecCompliantForm:zm,toJSONObject:jm,isAsyncFn:Im,isThenable:Fm};function F(e,t,n,r,l){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),l&&(this.response=l)}g.inherits(F,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:g.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const rd=F.prototype,ld={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ld[e]={value:e}});Object.defineProperties(F,ld);Object.defineProperty(rd,"isAxiosError",{value:!0});F.from=(e,t,n,r,l,o)=>{const i=Object.create(rd);return g.toFlatObject(e,i,function(s){return s!==Error.prototype},u=>u!=="isAxiosError"),F.call(i,e.message,t,n,r,l),i.cause=e,i.name=e.name,o&&Object.assign(i,o),i};const Dm=null;function Ai(e){return g.isPlainObject(e)||g.isArray(e)}function od(e){return g.endsWith(e,"[]")?e.slice(0,-2):e}function pa(e,t,n){return e?e.concat(t).map(function(l,o){return l=od(l),!n&&o?"["+l+"]":l}).join(n?".":""):t}function Um(e){return g.isArray(e)&&!e.some(Ai)}const Am=g.toFlatObject(g,{},null,function(t){return/^is[A-Z]/.test(t)});function no(e,t,n){if(!g.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=g.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,E){return!g.isUndefined(E[y])});const r=n.metaTokens,l=n.visitor||f,o=n.dots,i=n.indexes,s=(n.Blob||typeof Blob<"u"&&Blob)&&g.isSpecCompliantForm(t);if(!g.isFunction(l))throw new TypeError("visitor must be a function");function a(v){if(v===null)return"";if(g.isDate(v))return v.toISOString();if(!s&&g.isBlob(v))throw new F("Blob is not supported. Use a Buffer instead.");return g.isArrayBuffer(v)||g.isTypedArray(v)?s&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function f(v,y,E){let p=v;if(v&&!E&&typeof v=="object"){if(g.endsWith(y,"{}"))y=r?y:y.slice(0,-2),v=JSON.stringify(v);else if(g.isArray(v)&&Um(v)||(g.isFileList(v)||g.endsWith(y,"[]"))&&(p=g.toArray(v)))return y=od(y),p.forEach(function(h,w){!(g.isUndefined(h)||h===null)&&t.append(i===!0?pa([y],w,o):i===null?y:y+"[]",a(h))}),!1}return Ai(v)?!0:(t.append(pa(E,y,o),a(v)),!1)}const c=[],m=Object.assign(Am,{defaultVisitor:f,convertValue:a,isVisitable:Ai});function S(v,y){if(!g.isUndefined(v)){if(c.indexOf(v)!==-1)throw Error("Circular reference detected in "+y.join("."));c.push(v),g.forEach(v,function(p,d){(!(g.isUndefined(p)||p===null)&&l.call(t,p,g.isString(d)?d.trim():d,y,m))===!0&&S(p,y?y.concat(d):[d])}),c.pop()}}if(!g.isObject(e))throw new TypeError("data must be an object");return S(e),t}function ha(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function $u(e,t){this._pairs=[],e&&no(e,this,t)}const id=$u.prototype;id.append=function(t,n){this._pairs.push([t,n])};id.toString=function(t){const n=t?function(r){return t.call(this,r,ha)}:ha;return this._pairs.map(function(l){return n(l[0])+"="+n(l[1])},"").join("&")};function Mm(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ud(e,t,n){if(!t)return e;const r=n&&n.encode||Mm,l=n&&n.serialize;let o;if(l?o=l(t,n):o=g.isURLSearchParams(t)?t.toString():new $u(t,n).toString(r),o){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class Bm{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){g.forEach(this.handlers,function(r){r!==null&&t(r)})}}const ma=Bm,sd={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},$m=typeof URLSearchParams<"u"?URLSearchParams:$u,Hm=typeof FormData<"u"?FormData:null,Vm=typeof Blob<"u"?Blob:null,Wm={isBrowser:!0,classes:{URLSearchParams:$m,FormData:Hm,Blob:Vm},protocols:["http","https","file","blob","url","data"]},ad=typeof window<"u"&&typeof document<"u",Qm=(e=>ad&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),Km=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Gm=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:ad,hasStandardBrowserEnv:Qm,hasStandardBrowserWebWorkerEnv:Km},Symbol.toStringTag,{value:"Module"})),We={...Gm,...Wm};function Jm(e,t){return no(e,new We.classes.URLSearchParams,Object.assign({visitor:function(n,r,l,o){return We.isNode&&g.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function Xm(e){return g.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Ym(e){const t={},n=Object.keys(e);let r;const l=n.length;let o;for(r=0;r=n.length;return i=!i&&g.isArray(l)?l.length:i,s?(g.hasOwnProp(l,i)?l[i]=[l[i],r]:l[i]=r,!u):((!l[i]||!g.isObject(l[i]))&&(l[i]=[]),t(n,r,l[i],o)&&g.isArray(l[i])&&(l[i]=Ym(l[i])),!u)}if(g.isFormData(e)&&g.isFunction(e.entries)){const n={};return g.forEachEntry(e,(r,l)=>{t(Xm(r),l,n,0)}),n}return null}function qm(e,t,n){if(g.isString(e))try{return(t||JSON.parse)(e),g.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const Hu={transitional:sd,adapter:["xhr","http"],transformRequest:[function(t,n){const r=n.getContentType()||"",l=r.indexOf("application/json")>-1,o=g.isObject(t);if(o&&g.isHTMLForm(t)&&(t=new FormData(t)),g.isFormData(t))return l&&l?JSON.stringify(cd(t)):t;if(g.isArrayBuffer(t)||g.isBuffer(t)||g.isStream(t)||g.isFile(t)||g.isBlob(t))return t;if(g.isArrayBufferView(t))return t.buffer;if(g.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let u;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return Jm(t,this.formSerializer).toString();if((u=g.isFileList(t))||r.indexOf("multipart/form-data")>-1){const s=this.env&&this.env.FormData;return no(u?{"files[]":t}:t,s&&new s,this.formSerializer)}}return o||l?(n.setContentType("application/json",!1),qm(t)):t}],transformResponse:[function(t){const n=this.transitional||Hu.transitional,r=n&&n.forcedJSONParsing,l=this.responseType==="json";if(t&&g.isString(t)&&(r&&!this.responseType||l)){const i=!(n&&n.silentJSONParsing)&&l;try{return JSON.parse(t)}catch(u){if(i)throw u.name==="SyntaxError"?F.from(u,F.ERR_BAD_RESPONSE,this,null,this.response):u}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:We.classes.FormData,Blob:We.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};g.forEach(["delete","get","head","post","put","patch"],e=>{Hu.headers[e]={}});const Vu=Hu,Zm=g.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),bm=e=>{const t={};let n,r,l;return e&&e.split(` +`).forEach(function(i){l=i.indexOf(":"),n=i.substring(0,l).trim().toLowerCase(),r=i.substring(l+1).trim(),!(!n||t[n]&&Zm[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},ya=Symbol("internals");function Mn(e){return e&&String(e).trim().toLowerCase()}function ul(e){return e===!1||e==null?e:g.isArray(e)?e.map(ul):String(e)}function e0(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const t0=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Uo(e,t,n,r,l){if(g.isFunction(r))return r.call(this,t,n);if(l&&(t=n),!!g.isString(t)){if(g.isString(r))return t.indexOf(r)!==-1;if(g.isRegExp(r))return r.test(t)}}function n0(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function r0(e,t){const n=g.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(l,o,i){return this[r].call(this,t,l,o,i)},configurable:!0})})}let ro=class{constructor(t){t&&this.set(t)}set(t,n,r){const l=this;function o(u,s,a){const f=Mn(s);if(!f)throw new Error("header name must be a non-empty string");const c=g.findKey(l,f);(!c||l[c]===void 0||a===!0||a===void 0&&l[c]!==!1)&&(l[c||s]=ul(u))}const i=(u,s)=>g.forEach(u,(a,f)=>o(a,f,s));return g.isPlainObject(t)||t instanceof this.constructor?i(t,n):g.isString(t)&&(t=t.trim())&&!t0(t)?i(bm(t),n):t!=null&&o(n,t,r),this}get(t,n){if(t=Mn(t),t){const r=g.findKey(this,t);if(r){const l=this[r];if(!n)return l;if(n===!0)return e0(l);if(g.isFunction(n))return n.call(this,l,r);if(g.isRegExp(n))return n.exec(l);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Mn(t),t){const r=g.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||Uo(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let l=!1;function o(i){if(i=Mn(i),i){const u=g.findKey(r,i);u&&(!n||Uo(r,r[u],u,n))&&(delete r[u],l=!0)}}return g.isArray(t)?t.forEach(o):o(t),l}clear(t){const n=Object.keys(this);let r=n.length,l=!1;for(;r--;){const o=n[r];(!t||Uo(this,this[o],o,t,!0))&&(delete this[o],l=!0)}return l}normalize(t){const n=this,r={};return g.forEach(this,(l,o)=>{const i=g.findKey(r,o);if(i){n[i]=ul(l),delete n[o];return}const u=t?n0(o):String(o).trim();u!==o&&delete n[o],n[u]=ul(l),r[u]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return g.forEach(this,(r,l)=>{r!=null&&r!==!1&&(n[l]=t&&g.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(l=>r.set(l)),r}static accessor(t){const r=(this[ya]=this[ya]={accessors:{}}).accessors,l=this.prototype;function o(i){const u=Mn(i);r[u]||(r0(l,i),r[u]=!0)}return g.isArray(t)?t.forEach(o):o(t),this}};ro.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);g.reduceDescriptors(ro.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});g.freezeMethods(ro);const be=ro;function Ao(e,t){const n=this||Vu,r=t||n,l=be.from(r.headers);let o=r.data;return g.forEach(e,function(u){o=u.call(n,o,l.normalize(),t?t.status:void 0)}),l.normalize(),o}function fd(e){return!!(e&&e.__CANCEL__)}function Pr(e,t,n){F.call(this,e??"canceled",F.ERR_CANCELED,t,n),this.name="CanceledError"}g.inherits(Pr,F,{__CANCEL__:!0});function l0(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new F("Request failed with status code "+n.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const o0=We.hasStandardBrowserEnv?{write(e,t,n,r,l,o){const i=[e+"="+encodeURIComponent(t)];g.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),g.isString(r)&&i.push("path="+r),g.isString(l)&&i.push("domain="+l),o===!0&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function i0(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function u0(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function dd(e,t){return e&&!i0(t)?u0(e,t):t}const s0=We.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let r;function l(o){let i=o;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=l(window.location.href),function(i){const u=g.isString(i)?l(i):i;return u.protocol===r.protocol&&u.host===r.host}}():function(){return function(){return!0}}();function a0(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function c0(e,t){e=e||10;const n=new Array(e),r=new Array(e);let l=0,o=0,i;return t=t!==void 0?t:1e3,function(s){const a=Date.now(),f=r[o];i||(i=a),n[l]=s,r[l]=a;let c=o,m=0;for(;c!==l;)m+=n[c++],c=c%e;if(l=(l+1)%e,l===o&&(o=(o+1)%e),a-i{const o=l.loaded,i=l.lengthComputable?l.total:void 0,u=o-n,s=r(u),a=o<=i;n=o;const f={loaded:o,total:i,progress:i?o/i:void 0,bytes:u,rate:s||void 0,estimated:s&&i&&a?(i-o)/s:void 0,event:l};f[t?"download":"upload"]=!0,e(f)}}const f0=typeof XMLHttpRequest<"u",d0=f0&&function(e){return new Promise(function(n,r){let l=e.data;const o=be.from(e.headers).normalize();let{responseType:i,withXSRFToken:u}=e,s;function a(){e.cancelToken&&e.cancelToken.unsubscribe(s),e.signal&&e.signal.removeEventListener("abort",s)}let f;if(g.isFormData(l)){if(We.hasStandardBrowserEnv||We.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if((f=o.getContentType())!==!1){const[y,...E]=f?f.split(";").map(p=>p.trim()).filter(Boolean):[];o.setContentType([y||"multipart/form-data",...E].join("; "))}}let c=new XMLHttpRequest;if(e.auth){const y=e.auth.username||"",E=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(y+":"+E))}const m=dd(e.baseURL,e.url);c.open(e.method.toUpperCase(),ud(m,e.params,e.paramsSerializer),!0),c.timeout=e.timeout;function S(){if(!c)return;const y=be.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),p={data:!i||i==="text"||i==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:y,config:e,request:c};l0(function(h){n(h),a()},function(h){r(h),a()},p),c=null}if("onloadend"in c?c.onloadend=S:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(S)},c.onabort=function(){c&&(r(new F("Request aborted",F.ECONNABORTED,e,c)),c=null)},c.onerror=function(){r(new F("Network Error",F.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let E=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const p=e.transitional||sd;e.timeoutErrorMessage&&(E=e.timeoutErrorMessage),r(new F(E,p.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,c)),c=null},We.hasStandardBrowserEnv&&(u&&g.isFunction(u)&&(u=u(e)),u||u!==!1&&s0(m))){const y=e.xsrfHeaderName&&e.xsrfCookieName&&o0.read(e.xsrfCookieName);y&&o.set(e.xsrfHeaderName,y)}l===void 0&&o.setContentType(null),"setRequestHeader"in c&&g.forEach(o.toJSON(),function(E,p){c.setRequestHeader(p,E)}),g.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),i&&i!=="json"&&(c.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&c.addEventListener("progress",va(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&c.upload&&c.upload.addEventListener("progress",va(e.onUploadProgress)),(e.cancelToken||e.signal)&&(s=y=>{c&&(r(!y||y.type?new Pr(null,e,c):y),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(s),e.signal&&(e.signal.aborted?s():e.signal.addEventListener("abort",s)));const v=a0(m);if(v&&We.protocols.indexOf(v)===-1){r(new F("Unsupported protocol "+v+":",F.ERR_BAD_REQUEST,e));return}c.send(l||null)})},Mi={http:Dm,xhr:d0};g.forEach(Mi,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const ga=e=>`- ${e}`,p0=e=>g.isFunction(e)||e===null||e===!1,pd={getAdapter:e=>{e=g.isArray(e)?e:[e];const{length:t}=e;let n,r;const l={};for(let o=0;o`adapter ${u} `+(s===!1?"is not supported by the environment":"is not available in the build"));let i=t?o.length>1?`since : +`+o.map(ga).join(` +`):" "+ga(o[0]):"as no adapter specified";throw new F("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return r},adapters:Mi};function Mo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Pr(null,e)}function wa(e){return Mo(e),e.headers=be.from(e.headers),e.data=Ao.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),pd.getAdapter(e.adapter||Vu.adapter)(e).then(function(r){return Mo(e),r.data=Ao.call(e,e.transformResponse,r),r.headers=be.from(r.headers),r},function(r){return fd(r)||(Mo(e),r&&r.response&&(r.response.data=Ao.call(e,e.transformResponse,r.response),r.response.headers=be.from(r.response.headers))),Promise.reject(r)})}const Sa=e=>e instanceof be?e.toJSON():e;function En(e,t){t=t||{};const n={};function r(a,f,c){return g.isPlainObject(a)&&g.isPlainObject(f)?g.merge.call({caseless:c},a,f):g.isPlainObject(f)?g.merge({},f):g.isArray(f)?f.slice():f}function l(a,f,c){if(g.isUndefined(f)){if(!g.isUndefined(a))return r(void 0,a,c)}else return r(a,f,c)}function o(a,f){if(!g.isUndefined(f))return r(void 0,f)}function i(a,f){if(g.isUndefined(f)){if(!g.isUndefined(a))return r(void 0,a)}else return r(void 0,f)}function u(a,f,c){if(c in t)return r(a,f);if(c in e)return r(void 0,a)}const s={url:o,method:o,data:o,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:u,headers:(a,f)=>l(Sa(a),Sa(f),!0)};return g.forEach(Object.keys(Object.assign({},e,t)),function(f){const c=s[f]||l,m=c(e[f],t[f],f);g.isUndefined(m)&&c!==u||(n[f]=m)}),n}const hd="1.6.2",Wu={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Wu[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const xa={};Wu.transitional=function(t,n,r){function l(o,i){return"[Axios v"+hd+"] Transitional option '"+o+"'"+i+(r?". "+r:"")}return(o,i,u)=>{if(t===!1)throw new F(l(i," has been removed"+(n?" in "+n:"")),F.ERR_DEPRECATED);return n&&!xa[i]&&(xa[i]=!0,console.warn(l(i," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,i,u):!0}};function h0(e,t,n){if(typeof e!="object")throw new F("options must be an object",F.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let l=r.length;for(;l-- >0;){const o=r[l],i=t[o];if(i){const u=e[o],s=u===void 0||i(u,o,e);if(s!==!0)throw new F("option "+o+" must be "+s,F.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new F("Unknown option "+o,F.ERR_BAD_OPTION)}}const Bi={assertOptions:h0,validators:Wu},it=Bi.validators;let Fl=class{constructor(t){this.defaults=t,this.interceptors={request:new ma,response:new ma}}request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=En(this.defaults,n);const{transitional:r,paramsSerializer:l,headers:o}=n;r!==void 0&&Bi.assertOptions(r,{silentJSONParsing:it.transitional(it.boolean),forcedJSONParsing:it.transitional(it.boolean),clarifyTimeoutError:it.transitional(it.boolean)},!1),l!=null&&(g.isFunction(l)?n.paramsSerializer={serialize:l}:Bi.assertOptions(l,{encode:it.function,serialize:it.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let i=o&&g.merge(o.common,o[n.method]);o&&g.forEach(["delete","get","head","post","put","patch","common"],v=>{delete o[v]}),n.headers=be.concat(i,o);const u=[];let s=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(n)===!1||(s=s&&y.synchronous,u.unshift(y.fulfilled,y.rejected))});const a=[];this.interceptors.response.forEach(function(y){a.push(y.fulfilled,y.rejected)});let f,c=0,m;if(!s){const v=[wa.bind(this),void 0];for(v.unshift.apply(v,u),v.push.apply(v,a),m=v.length,f=Promise.resolve(n);c{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](l);r._listeners=null}),this.promise.then=l=>{let o;const i=new Promise(u=>{r.subscribe(u),o=u}).then(l);return i.cancel=function(){r.unsubscribe(o)},i},t(function(o,i,u){r.reason||(r.reason=new Pr(o,i,u),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new md(function(l){t=l}),cancel:t}}};const y0=m0;function v0(e){return function(n){return e.apply(null,n)}}function g0(e){return g.isObject(e)&&e.isAxiosError===!0}const $i={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries($i).forEach(([e,t])=>{$i[t]=e});const w0=$i;function yd(e){const t=new sl(e),n=Xf(sl.prototype.request,t);return g.extend(n,sl.prototype,t,{allOwnKeys:!0}),g.extend(n,t,null,{allOwnKeys:!0}),n.create=function(l){return yd(En(e,l))},n}const q=yd(Vu);q.Axios=sl;q.CanceledError=Pr;q.CancelToken=y0;q.isCancel=fd;q.VERSION=hd;q.toFormData=no;q.AxiosError=F;q.Cancel=q.CanceledError;q.all=function(t){return Promise.all(t)};q.spread=v0;q.isAxiosError=g0;q.mergeConfig=En;q.AxiosHeaders=be;q.formToJSON=e=>cd(g.isHTMLForm(e)?new FormData(e):e);q.getAdapter=pd.getAdapter;q.HttpStatusCode=w0;q.default=q;const vd=q,{Axios:V0,AxiosError:S0,CanceledError:W0,isCancel:Q0,CancelToken:K0,VERSION:G0,all:J0,Cancel:X0,isAxiosError:Y0,spread:q0,toFormData:Z0,AxiosHeaders:b0,HttpStatusCode:ey,formToJSON:ty,getAdapter:ny,mergeConfig:ry}=vd,Qu=e=>{const t=vd.create({baseURL:`http://localhost:${e}/api/`,withCredentials:!0});return t.interceptors.response.use(n=>n,n=>(console.log(n),n.response.status,Promise.reject(n))),t},Bo=Qu(3e3),x0=Qu(3001),Ea=Qu(3002),gd={isLoading:!1,user:"",items:[]},wd=C.createContext({...gd,startLoading:()=>null,stopLoading:()=>null,loginUser:()=>null,logoutUser:()=>null,createItem:()=>null,adjustInventory:()=>null}),E0=({children:e})=>{const[t,n]=C.useReducer(tm,gd);C.useEffect(()=>{u()},[]);const r=()=>{n({type:Se.START_LOADING})},l=()=>{n({type:Se.STOP_LOADING})},o=async(f,c)=>{r();try{const m=await Bo.post("/auth/login",{username:f,password:c});n({type:Se.LOGIN_USER,payload:{user:m.data.username}})}catch(m){console.log(m)}l()},i=async()=>{r();try{const f=await Bo.post("/auth/logout");console.log(f),n({type:Se.LOGOUT_USER})}catch(f){console.log(f)}l()},u=async()=>{r();try{const f=await Bo("/auth/current-user"),{currentUser:c}=f.data;c&&n({type:Se.LOGIN_USER,payload:{user:c}})}catch(f){console.log(f)}l()},s=async f=>{if(!(f!=="bananas"&&f!=="strawberries"&&f!=="grapes")){try{r();const c=await x0.post("/items/createItem",{itemName:f});console.log(c.data),setTimeout(async()=>{const m=await Ea("/inventory/getAllItems");n({type:Se.RETRIEVED_ITEMS,payload:{items:m.data}})},1500)}catch(c){c instanceof S0&&window.alert(c.message),console.log(c)}l()}},a=async(f,c)=>{console.log("💥 Adjust Inventory");try{const m=await Ea.patch("/inventory/updateItemInventory",{id:f,units:c});n({type:Se.RETRIEVED_ITEMS,payload:{items:m.data}})}catch(m){console.log(m)}};return k.jsxs(wd.Provider,{value:{...t,startLoading:r,stopLoading:l,loginUser:o,logoutUser:i,createItem:s,adjustInventory:a},children:[e," "]})},Rn=()=>C.useContext(wd),Sd=()=>{const[e,t]=C.useState("");return C.useEffect(()=>{setTimeout(()=>{e.length>=4?t(""):t(n=>n+".")},500)},[e]),k.jsxs("div",{className:"w-full h-screen flex flex-col justify-center items-center text-light bg-dark",children:["Loading",e]})},k0=()=>{const{isLoading:e,user:t,loginUser:n}=Rn(),r="ScrumLord",l="McKenzie",o=Mu();if(C.useEffect(()=>{t&&o("/")},[t]),e)return k.jsx(Sd,{});const i=a=>{a.preventDefault(),n(r,l)},u=(a,f)=>k.jsx("label",{className:"text-xl capitalize",htmlFor:f,children:a}),s=(a,f,c)=>k.jsx("input",{value:c,readOnly:!0,className:"text-dark mb-2 min-w-[250px] p-1 border-2 border-black text-center",type:a,id:f});return k.jsx("div",{className:`w-full h-screen flex flex-col justify-center items-center\r + bg-dark text-light`,children:k.jsxs("div",{className:"relative",children:[k.jsx("div",{className:`absolute top-[-50px] right-[-50px]\r + w-[100px] h-[100px]\r + rounded-tl-[150px] rounded-tr-[120px]\r + rounded-bl-[130px] rounded-br-[200px]\r + shadow-blkSm animate-rotate1\r + bg-amber-500`}),k.jsx("div",{className:`absolute bottom-[-50px] left-[-50px]\r + w-[100px] h-[100px]\r + rounded-tl-[620px] rounded-tr-[420px]\r + rounded-bl-[500px] rounded-br-[530px]\r + shadow-blkSm animate-rotate2\r + bg-lime-600`}),k.jsxs("form",{onSubmit:a=>i(a),className:`flex flex-col justify-center items-center relative\r + px-20 py-10 ring-1 ring-black/5 bg-white/20 backdrop-blur-lg\r + rounded-md\r + shadow-blkSm`,children:[k.jsx("div",{}),u("username","username"),s("text","username","ScrumLord"),u("password","password"),s("password","password","McKenzie"),k.jsx("button",{className:`my-4 px-8 py-2\r + rounded-md shadow-blkSm\r + bg-blue-400/50 font-bold`,children:"Login"})]})]})})};let Ku=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((t,n)=>(n&=63,n<36?t+=n.toString(36):n<62?t+=(n-26).toString(36).toUpperCase():n>62?t+="-":t+="_",t),"");var xd={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},ka=ht.createContext&&ht.createContext(xd),Ct=function(){return Ct=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{const t=n=>{const r="text-6xl";switch(n){case"bananas":return k.jsx(Ca,{className:`text-yellow-300 ${r}`});case"strawberries":return k.jsx(P0,{className:`text-red-300 ${r}`});case"grapes":return k.jsx(_0,{className:`text-purple-400 ${r}`});default:return k.jsx(Ca,{className:`text-yellow-300 ${r}`})}};return k.jsx(k.Fragment,{children:t(e)})},R0=["bananas","strawberries","grapes"],O0=()=>{const{items:e,createItem:t}=Rn(),[n,r]=C.useState("bananas");console.log(e);const l=o=>{o.preventDefault(),t(n)};return k.jsxs("form",{className:"flex flex-col justify-center items-center bg-white/70 text-dark py-4 px-8 rounded-md",onSubmit:o=>l(o),children:[k.jsx("h1",{className:"text-2xl font-bold",children:"Create an Item"}),k.jsx("div",{className:"bg-dark rounded-md p-2 mt-4 shadow-blkSm",children:k.jsx(kd,{fruit:n})}),k.jsx("select",{className:"text-dark mt-4 p-1 w-full text-center rounded-md",value:n,onChange:o=>{r(o.target.value)},children:R0.map(o=>k.jsx("option",{value:o,className:"capitalize",children:o},Ku()))}),k.jsx("button",{className:"bg-blue-400 py-2 px-4 rounded-md hover:shadow-blkSm hover:scale-110 mt-4 w-full",children:"Create Item"})]})},T0=()=>{const{items:e,adjustInventory:t}=Rn(),n=(r,l,o)=>{!r&&o===1||t(l,r?o+1:o-1)};return k.jsxs("div",{className:"w-full flex flex-col justify-center items-center mt-4",children:[k.jsx("h1",{className:"text-3xl font-bold",children:"Created Items"}),k.jsx("div",{className:"flex flex-wrap justify-center w-[85%]",children:e.map(r=>k.jsxs("div",{className:"bg-white/70 rounded-md m-2 p-4 min-w-[150px] flex flex-col justify-center items-center text-center",children:[k.jsx(kd,{fruit:r.itemName}),k.jsx("p",{className:"capitalize",children:r.itemName}),k.jsx("div",{className:"my-2 border-[1px] w-full border-dark"}),k.jsxs("div",{children:[k.jsxs("p",{className:"my-2",children:["In stock:"," ",k.jsx("span",{className:"text-light bg-dark p-2 rounded-md text-center",children:r.units})]}),k.jsxs("div",{className:"flex justify-center items-center",children:[k.jsx("button",{className:"bg-blue-400 p-2 rounded-md shadow-blkSm",onClick:()=>n(!1,r.id,r.units),children:"-"}),k.jsx("p",{className:"mx-2",children:" Adjust Stock"}),k.jsx("button",{className:"bg-blue-400 p-2 rounded-md shadow-blkSm",onClick:()=>n(!0,r.id,r.units),children:"+"})]})]})]},Ku()))})]})},L0=()=>{const{items:e}=Rn();return k.jsxs("div",{className:"flex flex-col justify-center items-center",children:[k.jsx(O0,{}),e.length>0&&k.jsx(T0,{})]})},z0=({children:e})=>{const{user:t,isLoading:n}=Rn(),r=Mu();return C.useEffect(()=>{t||r("/login")},[t]),n?k.jsx(Sd,{}):e};function j0(e){return Rr({tag:"svg",attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M946.5 505L534.6 93.4a31.93 31.93 0 0 0-45.2 0L77.5 505c-12 12-18.8 28.3-18.8 45.3 0 35.3 28.7 64 64 64h43.4V908c0 17.7 14.3 32 32 32H448V716h112v224h265.9c17.7 0 32-14.3 32-32V614.3h43.4c17 0 33.3-6.7 45.3-18.8 24.9-25 24.9-65.5-.1-90.5z"}}]})(e)}function I0(e){return Rr({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"line",attr:{x1:"3",y1:"12",x2:"21",y2:"12"}},{tag:"line",attr:{x1:"3",y1:"6",x2:"21",y2:"6"}},{tag:"line",attr:{x1:"3",y1:"18",x2:"21",y2:"18"}}]})(e)}const F0=()=>{const[e,t]=C.useState(!1),{pathname:n}=Nr(),{logoutUser:r}=Rn();return k.jsxs("div",{className:"fixed top-0 left-0 w-full flex justify-between items-center px-4 py-2",children:[k.jsx(Fo,{to:"/",className:`rounded-full p-2 text-2xl border-2 + ${n==="/"?"border-light":"bg-light text-dark shadow-insetLight border-dark"}`,children:k.jsx(j0,{})}),k.jsxs("div",{children:[k.jsx("div",{className:`text-2xl rounded-sm ${e?"bg-light text-dark border-2 border-light":""}`,onClick:()=>t(!e),children:k.jsx(I0,{})}),e&&k.jsxs("div",{className:`bg-white/40 rounded-md p-6 absolute top-14 right-4\r + flex flex-col justify-center items-center text-center min-w-[150px]`,children:[n!=="/about"?k.jsx(Fo,{className:"w-full px-4 py-2 bg-blue-400 rounded-md",to:"/about",onClick:()=>t(!1),children:"About"}):k.jsx(Fo,{className:"w-full px-4 py-2 bg-blue-400 rounded-md",to:"/",onClick:()=>t(!1),children:"Home"}),k.jsx("button",{className:"w-full px-4 py-2 bg-blue-400 rounded-md mt-4",onClick:r,children:"Logout"})]})]})]})},D0=()=>k.jsxs("main",{className:`w-full h-screen max-h-[100vh]\r + flex flex-col justify-center items-center\r + bg-dark text-light`,children:[k.jsx(F0,{}),k.jsx(Vh,{})]}),U0=()=>k.jsx("div",{className:"flex flex-col justify-center items-center",children:k.jsx("h1",{className:"text-4xl font-bold",children:"The page you're looking for doesn't exist. We respect you're commitment to testing"})}),A0=["Elsa the Tech Talk Extraordinaire","Kelly el Shuffler del Cards","McKenzie aka ScrumLord","TripleDDDaniel","Seanica Patrick"],M0=()=>k.jsxs("div",{className:"bg-blue-700 p-8 rounded-md flex flex-col justify-center items-center",children:[k.jsx("h1",{className:"text-3xl font-semibold",children:"ChronosRx Team"}),A0.map(e=>k.jsxs("h1",{className:"mt-2",children:["👑 ",e]},Ku()))]});function B0(){return k.jsxs(Qh,{children:[k.jsx(Xt,{path:"/login",element:k.jsx(k0,{})}),k.jsxs(Xt,{path:"/",element:k.jsx(z0,{children:k.jsx(D0,{})}),children:[k.jsx(Xt,{index:!0,element:k.jsx(L0,{})}),k.jsx(Xt,{path:"/about",element:k.jsx(M0,{})})]}),k.jsx(Xt,{path:"*",element:k.jsx(U0,{})})]})}$o.createRoot(document.getElementById("root")).render(k.jsx(qh,{children:k.jsx(E0,{children:k.jsx(B0,{})})})); diff --git a/examples_new/docker/client/dist/index.html b/examples_new/docker/client/dist/index.html new file mode 100644 index 000000000..ead84e7dc --- /dev/null +++ b/examples_new/docker/client/dist/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + Chronos Microservices + + + + +
    + + diff --git a/examples_new/microservices/orders/tsconfig.json b/examples_new/microservices/orders/tsconfig.json new file mode 100644 index 000000000..8e2f9e351 --- /dev/null +++ b/examples_new/microservices/orders/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}