diff --git a/content/micropython/01.basics/01.overview/hero-banner.png b/content/micropython/01.basics/01.overview/hero-banner.png new file mode 100644 index 0000000000..b12389df28 Binary files /dev/null and b/content/micropython/01.basics/01.overview/hero-banner.png differ diff --git a/content/micropython/01.basics/01.overview/overview.md b/content/micropython/01.basics/01.overview/overview.md new file mode 100644 index 0000000000..be1db2d232 --- /dev/null +++ b/content/micropython/01.basics/01.overview/overview.md @@ -0,0 +1,30 @@ +--- +title: Overview +description: An introduction to Arduino and MicroPython +author: Francesca Sanfilippo +micropython_type: basics +--- + +MicroPython is an implementation of the Python programming language, and includes some of the standard Python libraries. It is designed to run on microcontrollers with constrained environments. + +In this sequence of guides, you will among other things, learn how to: +- Install MicroPython on your Arduino board, +- Install an editor with support for MicroPython, +- How to make basic scripts that can for example blink an LED, read an analog pin and print things to the terminal (REPL). + +You do not need any prior knowledge in either programming with Arduino or MicroPython, but it is recommended to know the basics of Python. + +What you need to do it is have a Compatible Board and a Code Editor. You can choose between two alternatives: +- **Arduino Lab for MicroPython:** an experimental editor from Arduino, designed for simpler projects. +- **OpenMV:** an editor for more complex projects, such as computer vision. + +## Python vs C/C++. + +If you are experienced with Arduino programming in C and C++ a lot of the presented topics will look familiar to you. +There's a big difference between how we program an Arduino board with the Arduino IDE, using the Arduino programming language (based on C++), and how we program it using MicroPython. +- The “Arduino way” requires compiling the sketch before uploading it to your board. The previous code running is replaced by the new one. +- The “MicroPython way” does not require compiling, as you will have MicroPython installed on the actual board. Code is instead run through an interpreter, line by line. + +## Python vs MicroPython + +MicroPython was created to work under constrained conditions, like a small environment. The main difference between Python and MicroPython is that MicroPython does not have the full standard Python language, it is only a subset of it. \ No newline at end of file diff --git a/content/micropython/01.basics/02.board-installation/assets/ble-sense.png b/content/micropython/01.basics/02.board-installation/assets/ble-sense.png new file mode 100644 index 0000000000..52908dbc5e Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/ble-sense.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/ble.png b/content/micropython/01.basics/02.board-installation/assets/ble.png new file mode 100644 index 0000000000..e63994064d Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/ble.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/boardmanager-portenta.png b/content/micropython/01.basics/02.board-installation/assets/boardmanager-portenta.png new file mode 100644 index 0000000000..8611774cc0 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/boardmanager-portenta.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/boardmanager.png b/content/micropython/01.basics/02.board-installation/assets/boardmanager.png new file mode 100644 index 0000000000..c6045bb130 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/boardmanager.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/examplesketch.png b/content/micropython/01.basics/02.board-installation/assets/examplesketch.png new file mode 100644 index 0000000000..4de4d978ac Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/examplesketch.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/giga-r1-wifi.png b/content/micropython/01.basics/02.board-installation/assets/giga-r1-wifi.png new file mode 100644 index 0000000000..45c29be8a9 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/giga-r1-wifi.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/nano-rp2040.png b/content/micropython/01.basics/02.board-installation/assets/nano-rp2040.png new file mode 100644 index 0000000000..d38a07ea22 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/nano-rp2040.png differ diff --git a/content/micropython/01.basics/02.board-installation/assets/portenta.png b/content/micropython/01.basics/02.board-installation/assets/portenta.png new file mode 100644 index 0000000000..b696c79a88 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/assets/portenta.png differ diff --git a/content/micropython/01.basics/02.board-installation/board-installation.md b/content/micropython/01.basics/02.board-installation/board-installation.md new file mode 100644 index 0000000000..769660bb0d --- /dev/null +++ b/content/micropython/01.basics/02.board-installation/board-installation.md @@ -0,0 +1,220 @@ +--- +title: Board Installation +description: A list of Arduino boards compatible with MicroPython and how to install them. +author: Francesca Sanfilippo, Karl Söderby & Jacob Hylén +micropython_type: basics +featured: micropython +hero_image: "./hero-banner.png" +--- + +So what do you need to start your first project with MicroPython and Arduino? First, you will need a compatible board. In this page, you will find the compatible boards, with instructions on how to install them. + +In order to understand which board is more suitable to your project, you can visit the documentation of each board. + +## Nano 33 BLE & Nano 33 BLE Sense + +- [Nano 33 BLE documentation](/hardware/nano-ble). +- [Nano 33 BLE Sense documentation.](/hardware/nano-ble-sense) +- [Nano 33 BLE Sense Rev2 documentation.](/hardware/nano-ble-sense-rev2) + +![Nano 33 BLE.](assets/ble.png) + +The process for flashing the firmware on the Nano 33 BLE requires to first update the bootloader and SoftDevice. Once this is done you can flash the MicroPython firmware to your board. + +This process requires a version of the [Arduino IDE](https://www.arduino.cc/en/main/software) installed, which is explained in the next step. + +**Step 1: Installing the Core** + +Start by making sure that you have the respective core installed. Open the **Arduino IDE** (not Arduino Lab for MicroPython) and navigate to the boards manager. Search for your board (Nano 33 BLE), and make sure you have the latest version of the core installed. More detailed information about this step can be found [here](/software/ide-v2/tutorials/ide-v2-board-manager). + +![Board manager](assets/boardmanager.png) + +This is not only needed to upload the next sketch, but you're also going to dive into the core files themselves to find a specific tool in an upcoming step. + +**Step 2: Update Bootloader** + +In the Nano 33 BLE core is an example sketch that you will use to update the bootloader and SoftDevice of your board. Go back to the Arduino IDE and navigate to `File > Examples > Nano33BLE_System > Nano33_updateBLandSoftDevice` and open the sketch. + +![Example sketch](assets/examplesketch.png) + +Upload the sketch to your board. Beware! the bootloader is not updated just yet! Once the sketch is uploaded, you can interface with your board through the serial monitor to actually update the bootloader. + +In the Serial monitor, you are asked to confirm that you want to update the bootloader. In the message text box in the top of the serial monitor, write a **"y"** and press enter to send it to your board. + +You can now watch as the bootloader update process progresses, **do not disconnect or reset your board during this process** or you could brick your board. + +Once this bar completes, you will be prompted with another choice. This time it asks if you want to update the SoftDevice on your board. Repeat the process of sending a **"y"** to the board, and watch the progress of this too. + +When this bar fills and the SoftDevice update completes, the board will restart, and you've successfully made it through the procedure. + +***Note: An important thing to do at this point which is easily forgotten is to close the serial monitor, we will need to use the serial port for other things very soon and if you leave the monitor open it will be busy and won't be able to receive any new interactions.*** + +**Step 3: Download Firmware** + +Now you will need to find the specific firmware that you need to flash to your board. You can find the available firmware on the [MicroPython](/micropython) Documentation site. + +Download the `.bin` file that corresponds to the board you have. + +Now you will need to dive into the core files you downloaded in the first step to find a command line tool that is included called BOSSAC. This process will be different for you depending on if you're on a Windows or MacOS computer. + + +**Step 4a: Flash Firmware (Windows)** + +>Instructions for MacOS are available just below this section. + +The file you will is named `bossac.exe` and can be found in the following directory: + +``` +C:\Users\[your-username]\AppData\Local\Arduino15\staging\packages\bossac-1.9.1-arduino2-windows.tar.gz\bossac-1.9.1-arduino2-windows.tar\bin\` +``` + +One you've found the file, extract it from the `.tar` archive and copy it somewhere else, your desktop for example. + +Open a command terminal and start typing in `start`, now drag and drop the bossac.exe file you've found into the terminal, and press enter. + +If successful, another command terminal window should open in which you are able to execute the command that will flash your board with the MicroPython firmware. + +Execute the following command, but replace the port with the name of the port where your board is connected, and the firmware file with the directory where you have placed the firmware you downloaded previously: + +``` +bossac -e -w --offset=0x16000 --port=[port] -i -d -U -R [firmware] +``` + +Don't disconnect or power off your board during this part of the process, watch the progress of flashing the firmware to your board. Once complete, you're all set and you're ready to start programming the board in MicroPython. + +Go to the Arduino Lab MicroPython IDE and press connect in the top left, choose the port, and you are now ready to program your Nano 33 BLE. + +**Step 4b: Flash Firmware (MacOS)** + +The file you will need to access is called `bossac` and can be found in the following directory: + +``` +Users/[your-user]/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino2 +``` + +***Note: The `"Library"` directory is hidden, press `Shift + Command + . ` to reveal hidden directories.*** + +Open a terminal window and drag and drop the `bossac` file into the terminal window. + +Now, you should be able to execute the command that will flash your board with the MicroPython firmware. + +Execute the following command, but replace the port with the name of the port where your board is connected, and the firmware file with the directory where you have placed the firmware you downloaded previously: + +``` +bossac -e -w --offset=0x16000 --port=[port] -i -d -U -R [firmware] +``` + +Again, don't disconnect or power off your board during this part of the process, watch the progress of flashing the firmware to your board. Once complete, you're all set and you're ready to start programming the board in MicroPython. + +Go to the Arduino Lab MicroPython IDE and press connect in the top left, choose the port, and you are now ready to program your Nano 33 BLE! + +## Nano RP2040 Connect + +- [Arduino Nano RP2040 Documentation](https://docs.arduino.cc/hardware/nano-rp2040-connect) + +![Nano RP2040 Connect.](assets/nano-rp2040.png) + +To program your Nano RP2040 Connect board with MicroPython, follow the instructions below. The installation for Nano RP2040 Connect requires no additional software tools for installation. + +Follow the steps below to install MicroPython on the Nano RP2040 Connect board. + +1. Download the `.uf2` firmware file from the [MicroPython](/micropython) page. +2. Connect the `REC` pin to `GND` (they are placed next to each other) and press the reset button. This exposes the board's file system to your computer. +3. Drag and drop the firmware file onto the boards flash storage which shows up as an external storage device on your computer +4. Go to the Arduino Lab MicroPython IDE and press connect in the top left, choose the port. + +Congratulations, you are now ready to program your Nano RP2040 Connect with MicroPython. + +## GIGA R1 WiFi + +- [Arduino GIGA R1 WiFi documentation](/hardware/giga-r1-wifi) + +![GIGA R1 WiFi.](assets/giga-r1-wifi.png) + +The installation instructions for the **GIGA R1 WiFi** is identical to the **Portenta H7** instructions found just below. + +You will however need a different firmware, which you can download from the link below: + +- [Download GIGA R1 WiFi MicroPython firmware (dfu)](/resources/firmware/GIGAR1_MP_FW.dfu) + +***The GIGA R1 WiFi and Portenta H7 boards are based on the same microcontroller, [STM32H747XI](static/resources/datasheets/stm32h747xi.pdf) and therefore share the same installation instructions.*** + +## Portenta H7 + +- [Arduino Portenta H7 Documentation](https://docs.arduino.cc/hardware/portenta-h7) + +![Portenta H7.](assets/portenta.png) + +To install MicroPython on the Portenta H7 you will first need to install the corresponding core which also installs the required command line tool, called `dfu-util`. + +This tool can be used to directly flash a binary to your board, in this case, a MicroPython build. + +***The instructions below uses the `dfu-util` that is bundled with the Arduino IDE. You can also obtain the `dfu-util` directly, through the [dfu-util home page](https://dfu-util.sourceforge.net/) or via package management systems such as [Homebrew](https://formulae.brew.sh/formula/dfu-util) (MacOS / Linux).*** + +**Step 1: Install Arduino IDE** + +First, download and install the [Arduino IDE](https://arduino.cc/en/software) for your operating system. + +Open the Arduino IDE (not Arduino Lab for MicroPython) and navigate to the boards manager. Search for "Portenta H7", and make sure you have the latest version of the core installed. + +![Installing the Portenta core](assets/boardmanager-portenta.png) + +**Step 2: Download Firmware** + +Now you will need to find the specific firmware that you need to flash to your board. You can find the available firmware on the [MicroPython with Arduino](https://docs.arduino.cc/micropython/) home page. The firmware is available as a `.dfu` file for the Portenta H7. + +In the next step you will be diving into the core files you downloaded in the first step to find a command line tool called **dfu-util**. This process is differs depending on if you're on a Windows or MacOS computer. MacOS instructions are available further below. + +**Step 3a: Install Firmware (Windows)** + +To flash your board, you will need a file named `dfu-util.exe`. This is found in your following directory: + +``` +C:\Users\\AppData\Local\Arduino15\staging\packages\dfu-util-0.10.0-arduino1-windows.tar.bz2\dfu-util-0.10.0-arduino1-windows.tar\windows\ +``` + +One you've found the file, extract it from the .tar archive and copy it somewhere else, your desktop for example. + +Open a command terminal and start typing in `start`, now drag and drop the dfu-util.exe file you've found into the terminal, and press enter. + +If successful, another command terminal window should open in which you are able to execute the command that will flash your board with the MicroPython firmware. + +Double tap the reset button on your board to put it in DFU mode, and execute the following command, but replace the path of the firmware file with the directory where you have placed the firmware you downloaded previously: + +``` +dfu-util -a 0 -d 0x2341:0x035b -D .dfu +``` + +Again, don't disconnect or power off your board during this part of the process, watch the progress of flashing the firmware to your board. + +You should now see **two** progress bars appear in one after the other. The first one is showing the progress of erasing the firmware that was previously on the board, and the second one is showing the progress of flashing the new firmware. + +Once complete, you're all set and you're ready to start programming the board in MicroPython. + +Go to the Arduino Lab MicroPython IDE and press connect in the top left, choose the port, and code away! + +**Step 3b: Install Firmware (MacOS)** + +The file you will need to access is named `dfu-util` and can be found in the following directory: + +``` +Users/[your-username]/Library/Arduino15/packages/arduino/tools/dfu-util/0.10.0-arduino1/dfu-util +``` + +***Note: The `"Library"` directory is hidden, press `Shift + Command + . ` to reveal hidden directories.*** + +Open a terminal window and drag and drop the dfu-util file into the terminal window. + +Now, you should be able to execute the command that will flash your board with the MicroPython firmware. + +Double tap the reset button on your board to put it in DFU mode, and execute the following command, but replace the path of the firmware file with the directory where you have placed the firmware you downloaded previously: + +``` +dfu-util -a 0 -d 0x2341:0x035b -D .dfu +``` + +Do not disconnect your board during this part of the process, watch the progress of flashing the firmware to your board. + +Once complete, you're all set and you're ready to start programming the board in MicroPython. + +Go to the Arduino Lab MicroPython IDE and press connect in the top left corner, choose the port and you are ready to load scripts to your board. \ No newline at end of file diff --git a/content/micropython/01.basics/02.board-installation/hero-banner.png b/content/micropython/01.basics/02.board-installation/hero-banner.png new file mode 100644 index 0000000000..ab9aaa3ae3 Binary files /dev/null and b/content/micropython/01.basics/02.board-installation/hero-banner.png differ diff --git a/content/micropython/01.basics/03.code-editors/assets/mpylabs-ss.png b/content/micropython/01.basics/03.code-editors/assets/mpylabs-ss.png new file mode 100644 index 0000000000..b56c8a1a7e Binary files /dev/null and b/content/micropython/01.basics/03.code-editors/assets/mpylabs-ss.png differ diff --git a/content/micropython/01.basics/03.code-editors/assets/openmv-ss.png b/content/micropython/01.basics/03.code-editors/assets/openmv-ss.png new file mode 100644 index 0000000000..ede5900ed6 Binary files /dev/null and b/content/micropython/01.basics/03.code-editors/assets/openmv-ss.png differ diff --git a/content/micropython/01.basics/03.code-editors/code-editors.md b/content/micropython/01.basics/03.code-editors/code-editors.md new file mode 100644 index 0000000000..cfbdf5970b --- /dev/null +++ b/content/micropython/01.basics/03.code-editors/code-editors.md @@ -0,0 +1,30 @@ +--- +title: Code Editors +description: Explore the available code editors for programming your Arduino board with MicroPython +author: Francesca Sanfilippo & Karl Söderby +micropython_type: basics +featured: micropython +hero_image: "./hero-banner.png" +--- + +To write and load scripts to your board, you will also need a Code Editor. In this page, you will find two alternatives: +- **Arduino Lab for MicroPython:** an experimental editor from Arduino, designed for simpler projects. +- **OpenMV:** an editor for more complex projects, such as computer vision. + +## Arduino Lab for MicroPython + +Arduino Lab for MicroPython is a software that supports programming Arduino boards with MicroPython. Through the customized editor, we can install MicroPython, and upload scripts directly to the board. The editor is able to manage the files and you can see what is uploaded on the board and vice versa. + +![Arduino Lab for MicroPython](assets/mpylabs-ss.png) + +- [Download Arduino Lab for MicroPython](https://labs.arduino.cc/en/labs/micropython). + +## OpenMV Editor + +OpenMV is a platform that supports programming Arduino boards with MicroPython. Through the OpenMV editor, we can install MicroPython and upload scripts directly to the board. There's also a number of examples available directly in the editor. + +![OpenMV editor.](assets/openmv-ss.png) + +- [Download OpenMV](https://openmv.io/pages/download). + +***You can also check out the full list of examples in the [OpenMV's GitHub repository](https://github.com/openmv/openmv/tree/master/scripts/examples/10-Arduino-Boards).*** \ No newline at end of file diff --git a/content/micropython/01.basics/03.code-editors/hero-banner.png b/content/micropython/01.basics/03.code-editors/hero-banner.png new file mode 100644 index 0000000000..dacf4f5708 Binary files /dev/null and b/content/micropython/01.basics/03.code-editors/hero-banner.png differ diff --git a/content/micropython/01.basics/04.micropython-basics/assets/labs-connect.png b/content/micropython/01.basics/04.micropython-basics/assets/labs-connect.png new file mode 100644 index 0000000000..53d4b1d934 Binary files /dev/null and b/content/micropython/01.basics/04.micropython-basics/assets/labs-connect.png differ diff --git a/content/micropython/01.basics/04.micropython-basics/hero-banner.png b/content/micropython/01.basics/04.micropython-basics/hero-banner.png new file mode 100644 index 0000000000..b97b8f8bb3 Binary files /dev/null and b/content/micropython/01.basics/04.micropython-basics/hero-banner.png differ diff --git a/content/micropython/01.basics/04.micropython-basics/micropython-basics.md b/content/micropython/01.basics/04.micropython-basics/micropython-basics.md new file mode 100644 index 0000000000..af91c68cf9 --- /dev/null +++ b/content/micropython/01.basics/04.micropython-basics/micropython-basics.md @@ -0,0 +1,158 @@ +--- +title: MicroPython Basics +description: An introduction to MicroPython +author: Francesca Sanfilippo & Karl Söderby +micropython_type: basics +--- + +As you read in the Overview, MicroPython is an implementation of Python. In this page, you will find some basic and intermediate MicroPython scripts that can be used by any Arduino board. This includes some very common concepts such as variables, loops, delays, how to print and more. + +***There are some differences between MicroPython and Python, which mostly concern standard library and types, but also some language-level features.*** + +After you download [Arduino Lab for MicroPython](https://labs.arduino.cc/en/labs/micropython), click the file for your system, extract and run the application. The interface is similar to Arduino IDE. + +First of all, we need to connect our board to the computer via USB. + +After connecting the board, click on the connect button, and select the port. + +![Connect and select the port.](assets/labs-connect.png) + +Now that you have connected your board, let’s create a file that will contain the script that will run on your board. Click on New button to create your file. The editor automatically creates the main file in the board. + +If you are not working with the editor, the file should be named main.py and should be saved to your board manually. The board will recognize this as the main program. + +## First MicroPython Script + +Our first example is a basic script that will print `Hello world!` every second in the terminal. Paste the below script in the editor, and press the **"Play"** button. + +```python +print('Hello world!') +``` + +## Program Constructs + +There are three basic programming constructs which are Sequential, Looping and Branching. +- Sequential: a sequence of instructions. +- Looping: the program is executed according to the condition being used. There are two functions: while loop and for loop. +- Branching: it is a programming construct where a section of code is run only if a condition is met. + +In this section we’ll see some of program constructs. + +## Variables, While Loop and Sleep + +In this second example we introduce the module time using import in order to pause the execution for a specific time. The module help us control the board with MicroPython. + +```python +import time +content = "Hello world!" + +while True: + print(content) + time.sleep(1) +``` + +By definition a variable is a string of characters and numbers associated with a piece of information. We define the variable content `Hello World!`. + +Then with the `while` loop we execute the statements as long as the condition is true. In the code we use the `sleep` function to pause the execution of the script for a second before it continues to print. This is imported from the `time` module. + +## Functions + +A function is a block of code, a sequence of instructions composed by several statements, which runs only when it is called. +You can pass the information as parameters into a function. A function can have input arguments, and can also have output parameters. + +We can define our own functions, the most common way can be specified using the def keyword, inside the parentheses you can find the arguments if there are. Take a look to the example below: + +```python +def my_function(): + print("Hello world!") +``` + +Then you can call your function using the function name followed by parentheses: + +```python +my_function() +``` + +The function need two components: the header, starting with keyword def, followed by parentheses with inside the arguments and ending by colon (:) and the indented body is composed by descriptive string, function statements, return statements. + +This script prints "Hello world!" every second. In addition, the function counter_function() increases the number every second and will be printed next to. + +```python +import time + +content = "Hello world!" +count = 0 + +def counter_function(): + global count + count = count + 1 + +while True: + counter_function() + print(content, count) + time.sleep(1) +``` + +## Conditionals and Loops + +MicroPython supports logical conditions from mathematics, that can be used in several ways, the most common is an "if conditional" and “for loop”. The if statements is written by if keyword and it needs the indentation, otherwise you will get an error. + +### If/Else Statement + +A if/else statement is used to handle conditions in your program. These statements guide the program while making decisions based on the conditions encountered by the program. + +You can try the code below: + +```python +a = 42 +b = 23 +if a > b : + print("a is greater than b") +else : + print("a is not greater than b") +``` + +The result in this case is always going to be: `a is greater than b`, because `42` is larger than `23`. + +### For Loop + +Simple use of a for loop and functions. This script counts to 10, and then back to 0. + +```python +import time + +count = 0 + +def function_increase(): + global count + count = count +1 + print(count) + +def function_decrease(): + global count + count = count -1 + print(count) + +while True: + for x in range(10): + function_increase() + time.sleep(1) + + for x in range(10): + function_decrease() + time.sleep(1) +``` + +## Arrays + +An array is one of the most known and used construct in programming. In MicroPython an array by definition is a collection of elements (values or variables), selected by one or more indices computed at run-time, you refer to an array element by referring to the index number. + +```python +myFruit = ['orange', 'persimon', 'apple', 'kiwi', 'lemon'] + +def printFruitNames(): + for fruit in myFruit: + print(fruit) + +printFruitNames() +``` \ No newline at end of file diff --git a/content/micropython/01.basics/05.digital-analog-pins/digital-analog-pins.md b/content/micropython/01.basics/05.digital-analog-pins/digital-analog-pins.md new file mode 100644 index 0000000000..28a3af518a --- /dev/null +++ b/content/micropython/01.basics/05.digital-analog-pins/digital-analog-pins.md @@ -0,0 +1,134 @@ +--- +title: Digital and Analog Pins +description: Learn how to use digital and analog Pins with Micropython +author: Francesca Sanfilippo & Karl Söderby +micropython_type: basics +--- + +In this chapter we will learn about managing digital and analog pins. + +All the compatibles boards have a series of pins, most of these pins work as a general-purpose input/output (GPIO) pin. There are Digital Pins and Analog Pins depending by the signal. We will learn how to use the inputs and outputs. + +There are essentially two types of pins, analog and digital pins. Digital pins can be set to either HIGH (usually 5V or 3.3V) or LOW (0V). You can use that to e.g. read a button state or to toggle an LED. + +***Important: unfortunately, the MicroPython implementation does not match the regular pinout of your board. This means, that if you want to use for example, digital pin (5), it might be digital pin (27) on one board, or digital pin (14) on another. Please visit the [Board API article](/micropython/basics/board-api) to see what the pin map for your board is.*** + +## Digital Pins + +Digital signals have two distinct values: HIGH (1) or LOW (0). You use digital signals in situations where the input or output will have one of those two values. For example you can use a digital signal to turn an LED on or off. + +### Digital Write + +In this section we will introduce the `machine` module to control the state of a pin. In this example, we will name the pin `myLED`. + +In MicroPython we can declare a `Pin` with two arguments: Pin number, such as `25`, which defines the number of the pin that you would like to control, and `Pin.OUT`, to declare a pin as output. + +Finally, to turn set the pin to a high or low state, we set the `value` to either `1` or `0`. + +```python +from machine import Pin #import pin function + +myLED = Pin(25, Pin.OUT) #declare pin 25 as an output + +myLED.value(1) #set pin to a high state (1) / ON +myLED.value(0) #set pin to a low state (0) / OFF +``` + +To create the classic "blink" example, we can also import the `time` module, and create a `while` loop. + +The following examples blinks the onboard LED every second. + +```python +from machine import Pin +import time + +myLED = Pin(25, Pin.OUT) #Nano RP2040 Connect +#myLED = Pin(10, Pin.OUT) #Nano 33 BLE / Nano 33 BLE Sense +#myLED = Pin(2, Pin.OUT) #Portenta H7 + + +while True: + myLED.value(0) + time.sleep(1) + myLED.value(1) + time.sleep(1) +``` + +### Digital Read (Pull Up) + +In this example we read a digital value from a digital pin, using the `PULL_UP` mode. Here, we declare the pin an input through the `Pin.IN` command. + +Then, we use `p2.value()` to read the state, which returns either 0 (low) or 1 (high). + +```python +from machine import Pin +import utime + +p2 = Pin(25, Pin.IN, Pin.PULL_UP) + +while True: + print(p2.value()) + utime.sleep(1) +``` + +### Digital Read (Pull Down) + +In this example we read a digital value from a digital pin, using the `PULL_DOWN` mode. Here, we declare the pin an input through the `Pin.IN` command. + +Then, we use `p2.value()` to read the state, which returns either 0 (low) or 1 (high). + +```python +from machine import Pin +import utime + +p2 = Pin(25, Pin.IN, Pin.PULL_DOWN) + +while True: + print(p2.value()) + utime.sleep(1) +``` + +## Analog Pins + +An example of analog pin is the ADC class, that supplies an interface to analog-to-digital convertors, and figures a single endpoint that can sample a continuous voltage and convert it to a discretised value. + +There are four methods to use inside the ADC class: `ADC.init`, `ADC.block()`, `ADC.read_16()` and `ADC.read_uv()`. + +### Analog Read + +To read an analog pin, we can use the `ADC.read_u16` command. This reads the specified analog pin, and return an integer in the range 0 - 65535. For this, we need to import `ADC` and `Pin` from the `machine` module. + +```python +import machine +import time + +# Make sure to follow the GPIO map for the board you are using. +# Pin 29 in this case is the "A3" pin on the Nano 33 BLE / BLE Sense +adc_pin = machine.Pin(29) +adc = machine.ADC(adc_pin) + +while True: + reading = adc.read_u16() + print("ADC: ",reading) + time.sleep_ms(500) +``` + +## PWM (Pulse Width Modulation) + +[PWM](/learn/microcontrollers/analog-output) is used to produce analog results with digital means, by switching ON/OFF a signal rapidly. + +As a result, you can simulate a specific voltage written to a pin. In the example below, we write `30000` in a range between 0 - 65535 (16 bits), which if you connect an LED to the pin, it will be on at about "half" capacity. + +For this, we need to import `PWM` and `Pin` from the `machine` module. + +```python +from machine import Pin, PWM, ADC + +pwm = PWM(Pin(15)) +duty = 30000 #between 0-65000 + +pwm.freq(1000) + +while True: + pwm.duty_u16(duty) +``` diff --git a/content/micropython/01.basics/05.digital-analog-pins/hero-banner.png b/content/micropython/01.basics/05.digital-analog-pins/hero-banner.png new file mode 100644 index 0000000000..b3813082cc Binary files /dev/null and b/content/micropython/01.basics/05.digital-analog-pins/hero-banner.png differ diff --git a/content/micropython/01.basics/06.board-examples/assets/ble-sense.png b/content/micropython/01.basics/06.board-examples/assets/ble-sense.png new file mode 100644 index 0000000000..52908dbc5e Binary files /dev/null and b/content/micropython/01.basics/06.board-examples/assets/ble-sense.png differ diff --git a/content/micropython/01.basics/06.board-examples/assets/ble.png b/content/micropython/01.basics/06.board-examples/assets/ble.png new file mode 100644 index 0000000000..e63994064d Binary files /dev/null and b/content/micropython/01.basics/06.board-examples/assets/ble.png differ diff --git a/content/micropython/01.basics/06.board-examples/assets/nano-rp2040.png b/content/micropython/01.basics/06.board-examples/assets/nano-rp2040.png new file mode 100644 index 0000000000..d38a07ea22 Binary files /dev/null and b/content/micropython/01.basics/06.board-examples/assets/nano-rp2040.png differ diff --git a/content/micropython/01.basics/06.board-examples/assets/portenta.png b/content/micropython/01.basics/06.board-examples/assets/portenta.png new file mode 100644 index 0000000000..b696c79a88 Binary files /dev/null and b/content/micropython/01.basics/06.board-examples/assets/portenta.png differ diff --git a/content/micropython/01.basics/06.board-examples/board-examples.md b/content/micropython/01.basics/06.board-examples/board-examples.md new file mode 100644 index 0000000000..4f598d0305 --- /dev/null +++ b/content/micropython/01.basics/06.board-examples/board-examples.md @@ -0,0 +1,1531 @@ +--- +title: Examples by Board +description: Find examples that work only with specific boards, such as reading built-in sensors. +author: Karl Söderby +micropython_type: basics +featured: micropython +hero_image: "./hero-banner.png" +--- + +In this article, you will find examples that works only with specific boards. Each board also has a GPIO map that explains how each pin can be addressed. + +## Nano RP2040 Connect + +![Nano RP2040 Connect.](assets/nano-rp2040.png) + +### GPIO Map + +The pinout for the **Nano RP2040 Connect** and the **RP2040 microcontroller** varies greatly. For example, if we are to use `D2` according to the Arduino pinout, we would actually need to use **pin 25**. + +```python +# Defining "D2" on the Arduino Nano RP2040 Connect +p0 = Pin(25, Pin.OUT) +``` + +Before you start using the board's pins, it might be a good idea to check out the table below to understand the relationship between Arduino's pinout and the RP2040's pinout. + +| Arduino | RP2040 | Usage | +| ------- | ------ | ------------- | +| TX | GPIO0 | UART/TX | +| RX | GPIO1 | UART/RX | +| D2 | GPIO25 | GPIO | +| D3 | GPIO15 | GPIO | +| D4 | GPIO16 | GPIO | +| D5 | GPIO17 | GPIO | +| D6 | GPIO18 | GPIO | +| D7 | GPIO19 | GPIO | +| D8 | GPIO20 | GPIO | +| D9 | GPIO21 | GPIO | +| D10 | GPIO5 | GPIO | +| D11 | GPIO7 | SPI/COPI | +| D12 | GPIO4 | SPI/CIPO | +| D13 | GPIO6 | SPI/SCK | +| D14/A0 | GPIO26 | ADC/RP2040 | +| D15/A1 | GPIO27 | ADC/RP2040 | +| D16/A2 | GPIO28 | ADC/RP2040 | +| D17/A3 | GPIO29 | ADC/RP2040 | +| D18/A4 | GPIO12 | I2C | +| D19/A5 | GPIO13 | I2C | +| D20/A6 | GPIO36 | ADC/NINA-W102 | +| D21/A7 | GPIO35 | ADC/NINA-W102 | + +### Sensors + +#### IMU (LSM6DSOX) + +Prints the accelerometer and gyroscope values in the Serial Monitor. + +```python +import time +from lsm6dsox import LSM6DSOX + +from machine import Pin, I2C +lsm = LSM6DSOX(I2C(0, scl=Pin(13), sda=Pin(12))) + +while (True): + print('Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_accel())) + print('Gyroscope: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_gyro())) + print("") + time.sleep_ms(100) +``` + +### Microphone (MP34DT05) + +Below example can be used with OpenMV's frame buffer window (top right corner). + +```python +import image, audio, time +from ulab import numpy as np +from ulab import scipy as sp + +CHANNELS = 1 +FREQUENCY = 32000 +N_SAMPLES = 32 if FREQUENCY == 16000 else 64 +SCALE = 2 +SIZE = (N_SAMPLES * SCALE) // CHANNELS + +raw_buf = None +fb = image.Image(SIZE+(50*SCALE), SIZE, image.RGB565, copy_to_fb=True) +audio.init(channels=CHANNELS, frequency=FREQUENCY, gain_db=16) + +def audio_callback(buf): + # NOTE: do Not call any function that allocates memory. + global raw_buf + if (raw_buf == None): + raw_buf = buf + +# Start audio streaming +audio.start_streaming(audio_callback) + +def draw_fft(img, fft_buf): + fft_buf = (fft_buf / max(fft_buf)) * SIZE + fft_buf = np.log10(fft_buf + 1) * 20 + color = (0xFF, 0x0F, 0x00) + for i in range(0, len(fft_buf)): + img.draw_line(i*SCALE, SIZE, i*SCALE, SIZE-int(fft_buf[i]) * SCALE, color, SCALE) + +def draw_audio_bar(img, level, offset): + blk_size = (SIZE//10) + color = (0xFF, 0x00, 0xF0) + blk_space = (blk_size//4) + for i in range(0, int(round(level/10))): + fb.draw_rectangle(SIZE+offset, SIZE - ((i+1)*blk_size) + blk_space, 20 * SCALE, blk_size - blk_space, color, 1, True) + +while (True): + if (raw_buf != None): + pcm_buf = np.frombuffer(raw_buf, dtype=np.int16) + raw_buf = None + + if CHANNELS == 1: + fft_buf = sp.signal.spectrogram(pcm_buf) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + else: + fft_buf = sp.signal.spectrogram(pcm_buf[0::2]) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + r_lvl = int((np.mean(abs(pcm_buf[0::2])) / 32768)*100) + + fb.clear() + draw_fft(fb, fft_buf) + draw_audio_bar(fb, l_lvl, 0) + draw_audio_bar(fb, l_lvl, 25*SCALE) + if CHANNELS == 2: + draw_audio_bar(fb, r_lvl, 25 * SCALE) + fb.flush() + +# Stop streaming +audio.stop_streaming() +``` + +### Communication + +#### I2C + +Scans for devices connected to the I2C buses: + +```python +import time +from machine import Pin, I2C + +i2c_list = [None, None] +i2c_list[0] = I2C(0, scl=Pin(13), sda=Pin(12), freq=100_000) +i2c_list[1] = I2C(1, scl=Pin(7), sda=Pin(6), freq=100_000) + +for bus in range(0, 2): + print("\nScanning bus %d..."%(bus)) + for addr in i2c_list[bus].scan(): + print("Found device at address %d:0x%x" %(bus, addr)) +``` + +#### UART + +To read data and write data through TX and RX pins, you can use `uart.write()` and `uart.read()`. + +```python +from machine import UART, Pin +import time + +uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) + +while True: + uart.write('hello') # writes 5 bytes + val = uart.read(5) # reads up to 5 bytes + print(val) # prints data + time.sleep(1) +``` + +### Wireless + +Below are examples on wireless connectivity, using the NINA-W102 module onboard the Nano RP2040 Connect. + +***In order to use these examples, you may have to upgrade your firmware. You can find instructions on how to in [Upgrading Nano RP2040 Connect NINA firmware](/tutorials/nano-rp2040-connect/rp2040-upgrading-nina-firmware).*** + +#### Wi-Fi AP Mode + +Turn your board into an access point: + +```python +# Wi-Fi AP Mode Example +# +# This example shows how to use Wi-Fi in Access Point mode. +import network, socket, sys, time, gc + +SSID ='My_Nano_RP2040_Connect' # Network SSID +KEY ='1234567890' # Network key (must be 10 chars) +HOST = '' # Use first available interface +PORT = 8080 # Arbitrary non-privileged port + +# Init wlan module and connect to network +wlan = network.WLAN(network.AP_IF) +wlan.active(True) +wlan.config(essid=SSID, key=KEY, security=wlan.WEP, channel=2) +print("AP mode started. SSID: {} IP: {}".format(SSID, wlan.ifconfig()[0])) + +def recvall(sock, n): + # Helper function to recv n bytes or return None if EOF is hit + data = bytearray() + while len(data) < n: + packet = sock.recv(n - len(data)) + if not packet: + raise OSError("Timeout") + data.extend(packet) + return data + +def start_streaming(server): + print ('Waiting for connections..') + client, addr = server.accept() + + # set client socket timeout to 5s + client.settimeout(5.0) + print ('Connected to ' + addr[0] + ':' + str(addr[1])) + + # FPS clock + clock = time.clock() + while (True): + try: + # Read data from client + data = recvall(client, 1024) + # Send it back + client.send(data) + except OSError as e: + print("start_streaming(): socket error: ", e) + client.close() + break + +while (True): + try: + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # Bind and listen + server.bind([HOST, PORT]) + server.listen(1) + + # Set server socket to blocking + server.setblocking(True) + while (True): + start_streaming(server) + except OSError as e: + server.close() + print("Server socket error: ", e) +``` + +#### Wi-Fi® Scan + +To scan available networks: + +```python +# Scan Example + +# This example shows how to scan for Wi-Fi networks. + +import time, network + +wlan = network.WLAN(network.STA_IF) +wlan.active(True) + +print("Scanning...") +while (True): + scan_result = wlan.scan() + for ap in scan_result: + print("Channel:%d RSSI:%d Auth:%d BSSID:%s SSID:%s"%(ap)) + print() + time.sleep_ms(1000) +``` + +#### HTTP Request + +Making an HTTP request (in this case to google): + +***Remember to enter your network name and password inside the SSID and KEY variables.*** + +```python +import network, socket + +# AP info +SSID='' # Network SSID +KEY='' # Network key + +PORT = 80 +HOST = "www.google.com" + +# Init wlan module and connect to network +print("Trying to connect. Note this may take a while...") + +wlan = network.WLAN(network.STA_IF) +wlan.active(True) +wlan.connect(SSID, KEY) + +# We should have a valid IP now via DHCP +print("Wi-Fi Connected ", wlan.ifconfig()) + +# Get addr info via DNS +addr = socket.getaddrinfo(HOST, PORT)[0][4] +print(addr) + +# Create a new socket and connect to addr +client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +client.connect(addr) + +# Set timeout +client.settimeout(3.0) + +# Send HTTP request and recv response +client.send("GET / HTTP/1.1\r\nHost: %s\r\n\r\n"%(HOST)) +print(client.recv(1024)) + +# Close socket +client.close() +``` + +#### NTP (Network Time Protocol) + +***Remember to enter your network name and password inside the SSID and KEY variables.*** + +Obtain accurate time and date from the Internet: + +```python +# NTP Example +# +# This example shows how to get the current time using NTP + +import network, usocket, ustruct, utime + +# AP info +SSID='' # Network SSID +KEY='' # Network key + +TIMESTAMP = 2208988800 + +# Init wlan module and connect to network +print("Trying to connect... (may take a while)...") + +wlan = network.WLAN() +wlan.active(True) +wlan.connect(SSID, key=KEY, security=wlan.WPA_PSK) + +# We should have a valid IP now via DHCP +print(wlan.ifconfig()) + +# Create new socket +client = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM) +client.bind(("", 8080)) +#client.settimeout(3.0) + +# Get addr info via DNS +addr = usocket.getaddrinfo("pool.ntp.org", 123)[0][4] + +# Send query +client.sendto('\x1b' + 47 * '\0', addr) +data, address = client.recvfrom(1024) + +# Print time +t = ustruct.unpack(">IIIIIIIIIIII", data)[10] - TIMESTAMP +print ("Year:%d Month:%d Day:%d Time: %d:%d:%d" % (utime.localtime(t)[0:6])) +``` + +In the terminal, we should see it in this format: + +``` +Year:2021 Month:8 Day:10 Time: 7:56:30 +``` + +#### Bluetooth® Low Energy + +This example allows us to connect to our board via our phone, and control the built-in LED. We recommend using the **nRF Connect** applications. + +- [nRF desktop](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop) +- [nRF mobile](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-mobile) + +***After loading the script below, your board should be listed as "Nano RP2040 Connect" in the list of available devices. You need to pair in order to control the built-in LED.*** + +```python +import bluetooth +import random +import struct +import time +from ble_advertising import advertising_payload +from machine import Pin +from micropython import const + +LED_PIN = 6 + +_IRQ_CENTRAL_CONNECT = const(1) +_IRQ_CENTRAL_DISCONNECT = const(2) +_IRQ_GATTS_WRITE = const(3) + +_FLAG_READ = const(0x0002) +_FLAG_WRITE = const(0x0008) +_FLAG_NOTIFY = const(0x0010) +_FLAG_INDICATE = const(0x0020) + +_SERVICE_UUID = bluetooth.UUID(0x1523) +_LED_CHAR_UUID = (bluetooth.UUID(0x1525), _FLAG_WRITE) +_LED_SERVICE = (_SERVICE_UUID, (_LED_CHAR_UUID,),) + +class BLETemperature: + def __init__(self, ble, name="NANO RP2040"): + self._ble = ble + self._ble.active(True) + self._ble.irq(self._irq) + ((self._handle,),) = self._ble.gatts_register_services((_LED_SERVICE,)) + self._connections = set() + self._payload = advertising_payload(name=name, services=[_SERVICE_UUID]) + self._advertise() + + def _irq(self, event, data): + # Track connections so we can send notifications. + if event == _IRQ_CENTRAL_CONNECT: + conn_handle, _, _ = data + self._connections.add(conn_handle) + elif event == _IRQ_CENTRAL_DISCONNECT: + conn_handle, _, _ = data + self._connections.remove(conn_handle) + # Start advertising again to allow a new connection. + self._advertise() + elif event == _IRQ_GATTS_WRITE: + Pin(LED_PIN, Pin.OUT).value(int(self._ble.gatts_read(data[-1])[0])) + + def _advertise(self, interval_us=500000): + self._ble.gap_advertise(interval_us, adv_data=self._payload) + +if __name__ == "__main__": + ble = bluetooth.BLE() + temp = BLETemperature(ble) + + while True: + time.sleep_ms(1000) +``` + +## Nano 33 BLE + +![Nano 33 BLE.](assets/ble.png) + +### GPIO Map + +The pinout for the **Nano 33 BLE** and the **NRF52840 microcontroller** varies greatly. For example, if we are to use `D2` according to the Arduino pinout, we would actually need to use **pin 43**. + +```python +# Defining "D2" on the Nano 33 BLE +p0 = Pin(43, Pin.OUT) +``` + +In the MicroPython port of the Nano 33 BLE board, the pinout is the same as the Nordic NRF52840 (the microcontroller). You will find a GPIO Map below that explains how to address the different pins. + +| Arduino | nRF52840 | +| ------- | -------- | +| TX | 35 | +| RX | 42 | +| D2 | 43 | +| D3 | 44 | +| D4 | 47 | +| D5 | 45 | +| D6 | 46 | +| D7 | 23 | +| D8 | 21 | +| D9 | 27 | +| D10 | 34 | +| D11 | 33 | +| D12 | 40 | +| D13 | 13 | +| D14/A0 | 4 | +| D15/A1 | 5 | +| D16/A2 | 30 | +| D17/A3 | 29 | +| D18/A4 | 31 | +| D19/A5 | 2 | +| D20/A6 | 28 | +| D21/A7 | 3 | + +### LED Control + +There are 3 different LEDs that can be accessed on the Nano 33 BLE: **RGB, the built-in LED** and the **power LED**. + +They can be accessed by importing the `LED` module, where the RGB and built-in LED can be accessed. + +```python +from board import LED + +led_red = LED(1) # red LED +led_green = LED(2) # green LED +led_blue = LED(3) # blue LED +led_builtin = LED(4) # classic built-in LED (also accessible through pin 13) +``` + +To access the **power LED** we need to import the `Pin` module. + +```python +from machine import Pin + +led_pwr = Pin(41, Pin.OUT) +``` + +#### RGB + +Blink all RGB lights every 0.25 seconds. + +```python +from board import LED +import time + +led_red = LED(1) +led_green = LED(2) +led_blue = LED(3) + +while (True): + + # Turn on LEDs + led_red.on() + led_green.on() + led_blue.on() + + # Wait 0.25 seconds + time.sleep_ms(250) + + # Turn off LEDs + led_red.off() + led_green.off() + led_blue.off() + + # Wait 0.25 seconds + time.sleep_ms(250) +``` + +#### Built-in LED + +The classic blink example! Blink the built-in LED every 0.25 seconds. + +```python +from board import LED +import time + +led_builtin = LED(4) + +while (True): + + # Turn on LED + led_builtin.on() + + # Wait 0.25 seconds + time.sleep_ms(250) + + # Turn off LED + led_builtin.off() + + # Wait 0.25 seconds + time.sleep_ms(250) + +``` + +### Sensors + +#### IMU (LSM9DS1) + +Access the `accelerometer`, `magnetometer`, and `gyroscope` data from the LSM9DS1 IMU module. + +```python +import time +import lsm9ds1 +from machine import Pin, I2C + +bus = I2C(1, scl=Pin(15), sda=Pin(14)) +lsm = lsm9ds1.LSM9DS1(bus) + +while (True): + #for g,a in lsm.iter_accel_gyro(): print(g,a) # using fifo + print('Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_accel())) + print('Magnetometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_magnet())) + print('Gyroscope: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_gyro())) + print("") + time.sleep_ms(500) +``` + +### Wireless + +#### Bluetooth® Low Energy + +This example allows us to connect to our board via our phone, and control the built-in LED. We recommend using the **nRF Connect** applications. + +- [nRF desktop](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop) +- [nRF mobile](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-mobile) + +***After loading the script below, your board should be listed as "Nano 33 BLE" in the list of available devices. You need to pair in order to control the built-in LED.*** + +```python +# Use nRF Connect from App store, connect to the Nano and write 1/0 to control the LED. + +import time +from board import LED +from ubluepy import Service, Characteristic, UUID, Peripheral, constants + +def event_handler(id, handle, data): + global periph + global service + if id == constants.EVT_GAP_CONNECTED: + pass + elif id == constants.EVT_GAP_DISCONNECTED: + # restart advertisement + periph.advertise(device_name="Nano 33 BLE", services=[service]) + elif id == constants.EVT_GATTS_WRITE: + LED(1).on() if int(data[0]) else LED(1).off() + +# start off with LED(1) off +LED(1).off() + +notif_enabled = False +uuid_service = UUID("0x1523") +uuid_led = UUID("0x1525") + +service = Service(uuid_service) +char_led = Characteristic(uuid_led, props=Characteristic.PROP_WRITE) +service.addCharacteristic(char_led) + +periph = Peripheral() +periph.addService(service) +periph.setConnectionHandler(event_handler) +periph.advertise(device_name="Nano 33 BLE", services=[service]) + +while (True): + time.sleep_ms(500) +``` + +## Nano 33 BLE Sense + +![Nano 33 BLE Sense.](assets/ble-sense.png) + +### Pin Map + +The pinout for the **Nano 33 BLE Sense** and the **NRF52840 microcontroller** varies greatly. For example, if we are to use `D2` according to the Arduino pinout, we would actually need to use **pin 43**. + +```python +# Defining "D2" on the Nano 33 BLE Sense +p0 = Pin(43, Pin.OUT) +``` + +In the MicroPython port of the Nano 33 BLE Sense board, the pinout is the same as the Nordic NRF52840 (the microcontroller). You will find a pin map below this section that explains how to address the different pins. + +| Arduino | nRF52840 | +| ------- | -------- | +| TX | 35 | +| RX | 42 | +| D2 | 43 | +| D3 | 44 | +| D4 | 47 | +| D5 | 45 | +| D6 | 46 | +| D7 | 23 | +| D8 | 21 | +| D9 | 27 | +| D10 | 34 | +| D11 | 33 | +| D12 | 40 | +| D13 | 13 | +| D14/A0 | 4 | +| D15/A1 | 5 | +| D16/A2 | 30 | +| D17/A3 | 29 | +| D18/A4 | 31 | +| D19/A5 | 2 | +| D20/A6 | 28 | +| D21/A7 | 3 | + + +### LED Control + +There are 3 different LEDs that can be accessed on the Nano 33 BLE Sense: **RGB, the built-in LED** and the **power LED**. + +They can be accessed by importing the `LED` module, where the RGB and built-in LED can be accessed. + +```python +from board import LED + +led_red = LED(1) # red LED +led_green = LED(2) # green LED +led_blue = LED(3) # blue LED +led_builtin = LED(4) # classic built-in LED (also accessible through pin 13) +``` + +To access the **power LED** we need to import the `Pin` module. + +```python +from machine import Pin + +led_pwr = Pin(41, Pin.OUT) +``` + +#### RGB + +Blink all RGB lights every 0.25 seconds. + +```python +from board import LED +import time + +led_red = LED(1) +led_green = LED(2) +led_blue = LED(3) + +while (True): + + # Turn on LEDs + led_red.on() + led_green.on() + led_blue.on() + + # Wait 0.25 seconds + time.sleep_ms(250) + + # Turn off LEDs + led_red.off() + led_green.off() + led_blue.off() + + # Wait 0.25 seconds + time.sleep_ms(250) +``` + +#### Built-in LED + +The classic blink example! Blink the built-in LED every 0.25 seconds. + +```python +from board import LED +import time + +led_builtin = LED(4) + +while (True): + + # Turn on LED + led_builtin.on() + + # Wait 0.25 seconds + time.sleep_ms(250) + + # Turn off LED + led_builtin.off() + + # Wait 0.25 seconds + time.sleep_ms(250) + +``` + +### Sensors + +There are several sensors onboard the Nano 33 BLE Sense. The scripts below can be used to access the data from each of them. + +#### IMU (LSM9DS1) + +Access the `accelerometer`, `magnetometer`, and `gyroscope` data from the LSM9DS1 IMU module. + +```python +import time +import lsm9ds1 +from machine import Pin, I2C + +bus = I2C(1, scl=Pin(15), sda=Pin(14)) +lsm = lsm9ds1.LSM9DS1(bus) + +while (True): + #for g,a in lsm.iter_accel_gyro(): print(g,a) # using fifo + print('Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_accel())) + print('Magnetometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_magnet())) + print('Gyroscope: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*lsm.read_gyro())) + print("") + time.sleep_ms(500) +``` + + +#### Temperature & Humidity (HTS221) + +Access the `temperature` & `humidity` values from the HTS221 sensor. + +```python +import time +import hts221 +from machine import Pin, I2C + +bus = I2C(1, scl=Pin(15), sda=Pin(14)) +hts = hts221.HTS221(bus) + +while (True): + rH = hts.humidity() + temp = hts.temperature() + print ("rH: %.2f%% T: %.2fC" %(rH, temp)) + time.sleep_ms(100) +``` + +#### Pressure (LPS22) + +Access the `pressure` values from the LPS22 sensor. + +```python +import time +import lps22h +from machine import Pin, I2C + +bus = I2C(1, scl=Pin(15), sda=Pin(14)) +lps = lps22h.LPS22H(bus) + +while (True): + pressure = lps.pressure() + temperature = lps.temperature() + print("Pressure: %.2f hPa Temperature: %.2f C"%(pressure, temperature)) + time.sleep_ms(100) +``` + +#### Ambient Light (APDS9960) + +Access the `Ambient Light` values from the APDS9960 sensor. + +```python +from time import sleep_ms +from machine import Pin, I2C +from apds9960.const import * +from apds9960 import uAPDS9960 as APDS9960 + +bus = I2C(1, sda=Pin(13), scl=Pin(14)) +apds = APDS9960(bus) + +print("Light Sensor Test") +print("=================") +apds.enableLightSensor() + +while True: + sleep_ms(250) + val = apds.readAmbientLight() + print("AmbientLight={}".format(val)) +``` + +#### Proximity (APDS9960) + +Access the `Proximity values` from the APDS9960 sensor. + +```python +from time import sleep_ms +from machine import Pin, I2C + +from apds9960.const import * +from apds9960 import uAPDS9960 as APDS9960 + +bus = I2C(1, sda=Pin(13), scl=Pin(14)) +apds = APDS9960(bus) + +apds.setProximityIntLowThreshold(50) + +print("Proximity Sensor Test") +print("=====================") +apds.enableProximitySensor() + +while True: + sleep_ms(250) + val = apds.readProximity() + print("proximity={}".format(val)) +``` + +#### Microphone (MP34DT05) + +Below example can be used with OpenMV's frame buffer window (top right corner). + +```python +import image, audio, time +from ulab import numpy as np +from ulab import scipy as sp + +CHANNELS = 1 +SIZE = 256//(2*CHANNELS) + +raw_buf = None +fb = image.Image(SIZE+50, SIZE, image.RGB565, copy_to_fb=True) +audio.init(channels=CHANNELS, frequency=16000, gain_db=80, highpass=0.9883) + +def audio_callback(buf): + # NOTE: do Not call any function that allocates memory. + global raw_buf + if (raw_buf == None): + raw_buf = buf + +# Start audio streaming +audio.start_streaming(audio_callback) + +def draw_fft(img, fft_buf): + fft_buf = (fft_buf / max(fft_buf)) * SIZE + fft_buf = np.log10(fft_buf + 1) * 20 + color = (0xFF, 0x0F, 0x00) + for i in range(0, SIZE): + img.draw_line(i, SIZE, i, SIZE-int(fft_buf[i]), color, 1) + +def draw_audio_bar(img, level, offset): + blk_size = SIZE//10 + color = (0xFF, 0x00, 0xF0) + blk_space = (blk_size//4) + for i in range(0, int(round(level/10))): + fb.draw_rectangle(SIZE+offset, SIZE - ((i+1)*blk_size) + blk_space, 20, blk_size - blk_space, color, 1, True) + +while (True): + if (raw_buf != None): + pcm_buf = np.frombuffer(raw_buf, dtype=np.int16) + raw_buf = None + + if CHANNELS == 1: + fft_buf = sp.signal.spectrogram(pcm_buf) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + else: + fft_buf = sp.signal.spectrogram(pcm_buf[0::2]) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + r_lvl = int((np.mean(abs(pcm_buf[0::2])) / 32768)*100) + + fb.clear() + draw_fft(fb, fft_buf) + draw_audio_bar(fb, l_lvl, 0) + if CHANNELS == 2: + draw_audio_bar(fb, r_lvl, 25) + fb.flush() + +# Stop streaming +audio.stop_streaming() +``` + +### Wireless + +#### Bluetooth® Low Energy + +This example allows us to connect to our board via our phone, and control the built-in LED. We recommend using the **nRF Connect** applications. + +- [nRF desktop](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop) +- [nRF mobile](https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-mobile) + +***After loading the script below, your board should be listed as "Nano 33 BLE Sense" in the list of available devices. You need to pair in order to control the built-in LED.*** + +```python +# Use nRF Connect from App store, connect to the Nano and write 1/0 to control the LED. + +import time +from board import LED +from ubluepy import Service, Characteristic, UUID, Peripheral, constants + +def event_handler(id, handle, data): + global periph + global service + if id == constants.EVT_GAP_CONNECTED: + pass + elif id == constants.EVT_GAP_DISCONNECTED: + # restart advertisement + periph.advertise(device_name="Nano 33 BLE Sense", services=[service]) + elif id == constants.EVT_GATTS_WRITE: + LED(1).on() if int(data[0]) else LED(1).off() + +# start off with LED(1) off +LED(1).off() + +notif_enabled = False +uuid_service = UUID("0x1523") +uuid_led = UUID("0x1525") + +service = Service(uuid_service) +char_led = Characteristic(uuid_led, props=Characteristic.PROP_WRITE) +service.addCharacteristic(char_led) + +periph = Peripheral() +periph.addService(service) +periph.setConnectionHandler(event_handler) +periph.advertise(device_name="Nano 33 BLE Sense", services=[service]) + +while (True): + time.sleep_ms(500) +``` + +## Portenta H7 + +![Portenta H7.](assets/portenta.png) + +***Note that the [Portenta H7 Lite](/hardware/portenta-h7-lite) and [Portenta H7 Lite Connected](/hardware/portenta-h7-lite-connected) boards are compatible with most examples listed here, as they are variations of the Portenta H7.*** + +### GPIO Map + +Most of the pins are referred to via their port name or their function. Please refer to the list below to see which function corresponds to which port on the Portenta H7. + +| Arduino | STM32H747 | +| ---------------- | --------- | +| PA0 | PA0 | +| PA1 | PA1 | +| PA2 | PA2 | +| PA3 | PA3 | +| PA4 | PA4 | +| PA5 | PA5 | +| PA6 | PA6 | +| PA7 | PA7 | +| PA8 | PA8 | +| PA9 | PA9 | +| PA10 | PA10 | +| PA11 | PA11 | +| PA12 | PA12 | +| PA13 | PA13 | +| PA14 | PA14 | +| PA15 | PA15 | +| PB0 | PB0 | +| PB1 | PB1 | +| PB2 | PB2 | +| PB3 | PB3 | +| PB4 | PB4 | +| PB5 | PB5 | +| PB6 | PB6 | +| PB7 | PB7 | +| PB8 | PB8 | +| PB9 | PB9 | +| PB10 | PB10 | +| PB11 | PB11 | +| PB12 | PB12 | +| PB13 | PB13 | +| PB14 | PB14 | +| PB15 | PB15 | +| PC0 | PC0 | +| PC1 | PC1 | +| PC2 | PC2 | +| PC3 | PC3 | +| PC4 | PC4 | +| PC5 | PC5 | +| PC6 | PC6 | +| PC7 | PC7 | +| PC8 | PC8 | +| PC9 | PC9 | +| PC10 | PC10 | +| PC11 | PC11 | +| PC12 | PC12 | +| PC13 | PC13 | +| PC14 | PC14 | +| PC15 | PC15 | +| PD0 | PD0 | +| PD1 | PD1 | +| PD2 | PD2 | +| PD3 | PD3 | +| PD4 | PD4 | +| PD5 | PD5 | +| PD6 | PD6 | +| PD7 | PD7 | +| PD8 | PD8 | +| PD9 | PD9 | +| PD10 | PD10 | +| PD11 | PD11 | +| PD12 | PD12 | +| PD13 | PD13 | +| PD14 | PD14 | +| PD15 | PD15 | +| PE0 | PE0 | +| PE1 | PE1 | +| PE2 | PE2 | +| PE3 | PE3 | +| PE4 | PE4 | +| PE5 | PE5 | +| PE6 | PE6 | +| PE7 | PE7 | +| PE8 | PE8 | +| PE9 | PE9 | +| PE10 | PE10 | +| PE11 | PE11 | +| PE12 | PE12 | +| PE13 | PE13 | +| PE14 | PE14 | +| PE15 | PE15 | +| PF0 | PF0 | +| PF1 | PF1 | +| PF2 | PF2 | +| PF3 | PF3 | +| PF4 | PF4 | +| PF5 | PF5 | +| PF6 | PF6 | +| PF7 | PF7 | +| PF8 | PF8 | +| PF9 | PF9 | +| PF10 | PF10 | +| PF11 | PF11 | +| PF12 | PF12 | +| PF13 | PF13 | +| PF14 | PF14 | +| PF15 | PF15 | +| PG0 | PG0 | +| PG1 | PG1 | +| PG2 | PG2 | +| PG3 | PG3 | +| PG4 | PG4 | +| PG5 | PG5 | +| PG6 | PG6 | +| PG7 | PG7 | +| PG8 | PG8 | +| PG9 | PG9 | +| PG10 | PG10 | +| PG11 | PG11 | +| PG12 | PG12 | +| PG13 | PG13 | +| PG14 | PG14 | +| PG15 | PG15 | +| PH0 | PH0 | +| PH1 | PH1 | +| PH2 | PH2 | +| PH3 | PH3 | +| PH4 | PH4 | +| PH5 | PH5 | +| PH6 | PH6 | +| PH7 | PH7 | +| PH8 | PH8 | +| PH9 | PH9 | +| PH10 | PH10 | +| PH11 | PH11 | +| PH12 | PH12 | +| PH13 | PH13 | +| PH14 | PH14 | +| PH15 | PH15 | +| PI0 | PI0 | +| PI1 | PI1 | +| PI2 | PI2 | +| PI3 | PI3 | +| PI4 | PI4 | +| PI5 | PI5 | +| PI6 | PI6 | +| PI7 | PI7 | +| PI8 | PI8 | +| PI9 | PI9 | +| PI10 | PI10 | +| PI11 | PI11 | +| PI12 | PI12 | +| PI13 | PI13 | +| PI14 | PI14 | +| PI15 | PI15 | +| PJ0 | PJ0 | +| PJ1 | PJ1 | +| PJ2 | PJ2 | +| PJ3 | PJ3 | +| PJ4 | PJ4 | +| PJ5 | PJ5 | +| PJ6 | PJ6 | +| PJ7 | PJ7 | +| PJ8 | PJ8 | +| PJ9 | PJ9 | +| PJ10 | PJ10 | +| PJ11 | PJ11 | +| PJ12 | PJ12 | +| PJ13 | PJ13 | +| PJ14 | PJ14 | +| PJ15 | PJ15 | +| PK0 | PK0 | +| PK1 | PK1 | +| PK2 | PK2 | +| PK3 | PK3 | +| PK4 | PK4 | +| PK5 | PK5 | +| PK6 | PK6 | +| PK7 | PK7 | +| UART1_TX | PA9 | +| UART1_RX | PA10 | +| UART4_TX | PA0 | +| UART4_RX | PI9 | +| UART6_TX | PG14 | +| UART6_RX | PG9 | +| UART8_TX | PJ8 | +| UART8_RX | PJ9 | +| ETH_RMII_REF_CLK | PA1 | +| ETH_MDIO | PA2 | +| ETH_RMII_CRS_DV | PA7 | +| ETH_MDC | PC1 | +| ETH_RMII_RXD0 | PC4 | +| ETH_RMII_RXD1 | PC5 | +| ETH_RMII_TX_EN | PG11 | +| ETH_RMII_TXD0 | PG13 | +| ETH_RMII_TXD1 | PG12 | +| USB_HS_CLK | PA5 | +| USB_HS_STP | PC0 | +| USB_HS_NXT | PH4 | +| USB_HS_DIR | PI11 | +| USB_HS_D0 | PA3 | +| USB_HS_D1 | PB0 | +| USB_HS_D2 | PB1 | +| USB_HS_D3 | PB10 | +| USB_HS_D4 | PB11 | +| USB_HS_D5 | PB12 | +| USB_HS_D6 | PB13 | +| USB_HS_D7 | PB5 | +| USB_HS_RST | PJ4 | +| USB_DM | PA11 | +| USB_DP | PA12 | +| BOOT0 | BOOT0 | +| DAC1 | PA4 | +| DAC2 | PA5 | +| LEDR | PK5 | +| LEDG | PK6 | +| LEDB | PK7 | +| I2C1_SDA | PB7 | +| I2C1_SCL | PB6 | +| I2C3_SDA | PH8 | +| I2C3_SCL | PH7 | +| -WL_REG_ON | PJ1 | +| -WL_HOST_WAKE | PJ5 | +| -WL_SDIO_0 | PC8 | +| -WL_SDIO_1 | PC9 | +| -WL_SDIO_2 | PC10 | +| -WL_SDIO_3 | PC11 | +| -WL_SDIO_CMD | PD2 | +| -WL_SDIO_CLK | PC12 | +| -BT_RXD | PF6 | +| -BT_TXD | PA15 | +| -BT_CTS | PF9 | +| -BT_RTS | PF8 | +| -BT_REG_ON | PJ12 | +| -BT_HOST_WAKE | PJ13 | +| -BT_DEV_WAKE | PJ14 | +| -QSPI2_CS | PG6 | +| -QSPI2_CLK | PF10 | +| -QSPI2_D0 | PD11 | +| -QSPI2_D1 | PD12 | +| -QSPI2_D2 | PF7 | +| -QSPI2_D3 | PD13 | + + +### I/O Pins + +To access the I/O pins, you can use the `Pin` module from the `pyb` library. + +```python +from pyb import Pin +``` + +To reference a pin on the Portenta, you can use the `Pin()` constructor. The first argument you have to provide is the pin you want to use. The second parameter, `mode`, can be set as: `Pin.IN`, `Pin.OUT_PP`, `Pin.OUT_OD`, `Pin.AF_PP`, `Pin.AF_OD` or `Pin.ANALOG`. An explanation of the pin modes can be found [here](https://docs.openmv.io/library/pyb.Pin.html#methods). The third parameter, `pull`, represents the pull mode. It can be set to: `Pin.PULL_NONE`, `Pin.PULL_UP` or `Pin.PULL_DOWN`. E.g.: + +```python +pin0 = Pin('P0', mode, pull) +``` + +To get the logic level of a pin, call `.value()`. It will return a 0 or a 1. This corresponds to `LOW` and `HIGH` in Arduino terminology. + +```python +pin0.value() +``` + +### PWM + +To use PWM, you import the `pyb`, `time`, `Pin`, `Timer` modules. + +```python +import pyb +import time +from pyb import Pin, Timer +``` + +First you need to choose the pin you want to use PWM with. + +```python +pin1 = Pin("PC6", Pin.OUT_PP, Pin.PULL_NONE) +``` + +Create a timer for the PWM, where you set the ID and the frequency. + +```python +timer1 = Timer(3, freq=1000) +``` + +Then you need to start a PWM channel with the timer object. + +```python +channel1 = timer1.channel(1, Timer.PWM, pin=pin1, pulse_width=0) +``` + +Get or set the pulse width value on a channel. To get, pass no arguments. To set, give a value as an argument. + +```python +channel1.pulse_width(Width) +``` + +### RGB LED + +The Portenta H7 has built-in RGB that can be used as feedback for applications. Using the `pyb` library, you can easily define the different LED colors on the Portenta. + +For this you will use the `pyb` library. + +```python +import pyb +``` + +Now you can easily define the different colors of the built in LED. + +```python +redLED = pyb.LED(1) +greenLED = pyb.LED(2) +blueLED = pyb.LED(3) +``` + +And then control them in our script. + +```python +redLED.on() +redLED.off() + +greenLED.on() +greenLED.off() + +blueLED.on() +blueLED.off() +``` + +You could also set a custom intensity for our LED lights. This ranges between the values 0 (off) and 255 (full on). Below you can see an example of how to set the intensity on our different LED lights. + +```python +redLED.intensity(128) +greenLED.intensity(64) +blueLED.intensity(50) +``` + +If no argument is given in the `.intensity()` function, it will return the LED intensity. + +### Communication + +Like other Arduino® products, the Portenta H7 features dedicated pins for different protocols. + +#### SPI + +The pins used for SPI on the Portenta H7 are the following: + + +| Pin | Function | +| :---: | :------: | +| PI0 | CS | +| PC3 | COPI | +| PI1 | CK | +| PC2 | CIPO | + +You can refer to the [pinout](#pins) above to find them on the board. + +First, you have to import the relevant module from `pyb`. + +```python +from pyb import SPI +``` + +When you initialize SPI, the only thing you need to state is the bus, which will always be `2` on the Portenta H7; this is the only available bus. The rest of the arguments are optional. But if it is needed, you can state the mode of the SPI device as either `SPI.MASTER` or `SPI.SLAVE`, you can also manually set the `baudrate` of the device. `Polarity` can be set to 0 or 1, and is the logic level the idle clock line sits at (HIGH or LOW). `Phase` can be 0 or 1 to sample data on the first (0) or second (1) clock edge. + +```python +spi = SPI(2, SPI.MASTER, baudrate=100000, polarity=0, phase=0) +``` + +Now, if you want to send data over SPI, you simply call `.send()` inside the arguments you want to send. `data` is the data to send, which could be an integer (dataInt) or a buffer object (dataBuffer). It is optional to set the `timeout`, it indicates the timeout in milliseconds to wait for the send. + +```python +dataInt = 21 +dataBuffer = bytearray(4) +spi.send(data, timeout=5000) +``` + +Similarly, if you want to receive data over SPI, you call `.recv()`. `data` indicates the number of bytes to receive, this can be an integer (dataInt) or a buffer (dataBuffer), which will be filled with received bytes. It is optional to set the `timeout`, which is the time in milliseconds to wait for the receive. + +```python +dataInt = 0 +dataBuffer = bytearray(4) +SPI.recv(data, timeout=5000) +``` + +#### I2C + +The pins used for I2C (Inter-Integrated Circuit) on the Portenta H7 are the following: + +| Pin | Function | +| :---: | :------: | +| PH8 | SDA | +| PH7 | SCL | + +You can refer to the [pinout](#pins) above to find them on the board. + +To use the I2C, you import the relevant module. + +```python +from pyb import I2C +``` + +You can now create the I2C object. To create an I2C object you need to state the bus, this indicates what pins you will use for I2C. Giving bus a value of `3` starts I2C on the SCL and SDA pins on the Portenta H7. There are 4 I2C buses on the Portenta H7. + +```python +i2c = I2C(3) +``` + +Now that the object is created, you can initialize it. You need to decide if your device is going to be a controller (I2C.MASTER) or a reader (I2C.SLAVE). If it is a reader device, you also need to set the `address`. You can then set a baudrate if you need to. + +```python +i2c.init(I2C.MASTER, addr=address, baudrate=100000) +``` + +To receive data on the bus, you call the `.recv()` function. In the functions arguments `data` is the number of bytes to receive, it can be an integer (dataInt) or a buffer (dataBuffer), which will be filled with received bytes. `addr` is the address to receive from, this is only required in controller mode. `timeout` indicates how many milliseconds to wait for the receive. The code below shows how to receive and print your data in the OpenMV serial terminal. + +```python +dataInt = 0 +dataBuffer = bytearray(4) +receivedData = i2c.recv(data, addr=0, timeout=5000) +Print(receivedData) +``` + +To send data on the bus, you can call the `.send()` function. In the functions arguments `data` is the data to send, an integer (dataInt) or a buffer object (dataBuffer). `addr` is the address to send to, this is only required in controller mode. `timeout` indicates how many milliseconds to wait for the send. + +```python +dataInt = 412 +dataBuffer = bytearray(4) +i2c.send(data, addr=0, timeout=5000) +``` + +If you need to make sure that devices are connected to the I2C bus, you can use the `.scan()` function. It will scan all I2C addresses from 0x01 to 0x7f and return a list of those that respond. It only works when in controller mode. + +```python +i2c.scan() +``` + +#### UART + +The pins used for UART on the Portenta H7 are the following: + +| Pin | Function | +| :---: | :------: | +| PA10 | RX | +| PA9 | TX | + +You can refer to the [pinout](#pins) above to find them on the board. + +To use the UART, you need to import the relevant module. + +```python +from pyb import UART +``` + +To create the UART object, you need to indicate the UART bus, the Portenta has 3 UART buses, but there is only on UART bus available to use with OpenMV through the boards pins. + +```python +uart = UART(1) +``` + +With the object created, you can initialize it with `init`. When initilazing, you can set the `baudrate`. `bits` is the number of bits per character (7, 8 or 9). `parity` can be set to `None`, `0` (even) or `1` (odd). `stop` is the number of stop bits, 1 or 2. `flow` sets the flow control type, can be 0, UART.RTS, UART.CTS or UART.RTS | UART.CTS. More information on this can be found [here](https://docs.openmv.io/library/pyb.UART.html#flow-control). `timeout` is the time in milliseconds to wait for writing/reading the first character. `timeout_char` is the timeout in milliseconds to wait between characters while writing or reading. `read_buf_len` is the character length of the read buffer (0 to disable). + +```python +uart.init(baudrate, bits=8, parity=None, stop=1, timeout=0, flow=0, timeout_char=0, read_buf_len=64) +``` + +To read from UART, you can call `.read()`. If `bytes` is specified then read at most that many bytes. If `bytes` is not given then the method reads as much data as possible. It returns after the timeout has elapsed. The example code below will read bytes received through uart into an array and then print it in the serial terminal. + +```python +array = bytearray(5) +uart.read(array) +print(array) +``` + +If you intend to write over UART, you can call `.write()`. The function writes `buffer` of bytes to the bus. If characters are 7 or 8 bits wide then each byte is one character. If characters are 9 bits wide then two bytes are used for each character and `buffer` must contain an even number of bytes. + +```python +uart.write(buffer) +``` + +#### Wi-Fi® + +To use Wi-Fi® you first need to import the relevant library. + +```python +import network +``` + +Then you need to define the Wi-Fi® networks SSID and put that in a variable. You must do the same for the networks password. + +```python +SSID='' +PASSWORD='' +``` + +Next, you can create a WLAN network interface object. In the argument you can enter `network.STA_IF`, which indicates that your device will be a client and connect to a Wi-Fi® access point. + +```python +wlan = network.WLAN(network.STA_IF) +``` + +To activate the network interface, you can simply call `.activate` with the argument `True`. + +```python +wlan.active(True) +``` + +Now you can decide which network to connect to. Here it is where the `SSID` and `PASSWORD` variables come in handy. + +```python +wlan.connect(SSID, PASSWORD, timeout=30000) +``` + +If you need to troubleshoot, the connection `.status()` can be used. This function will return a value that describes the connection status. It will also let you know what went wrong with the connection in case it failed. + +```python +wlan.status() +``` + +### Audio + +If you want to use audio with the Portenta H7, you first need to include the `audio` module. Another helpful module is `micro_speech`, this runs Google's TensorFlow Lite for Microcontrollers Micro Speech framework for voice recognition. + +```python +import audio, micro_speech +``` + +Next you need to initialize the audio object. In the initialization you can decide how many `channels` to use, it is possible to use either 1 or 2 channels. Frequency decides the sample frequency. Using a higher sample frequency results in a higher noise flow, meaning less effective bits per sample. By default audio samples are 8-bits with 7-bits of effective dynamic range. `gain_db` sets the microphone gain to use. `highpass` is the high pass filter cut off given the target sample frequency. + +```python +audio.init(channels=2, frequency=16000, gain_db=24, highpass=0.9883) +``` + +If you need to deinitialize the audio object, you can simply call `deint()`. + +```python +audio.deint() +``` + +To use micro_speech, you first need to create a micro_speech object. You can create this object in the variable `speech`. + +```python +speech = micro_speech.MicroSpeech() +``` + +Next you can start streaming audio into the `micro_speech` object, to do this you can call `audio.start_streaming()`. Here you can pass the `micro_speech` object as the argument, this will fill the object with audio samples. The MicroSpeech module will compute the FFT of the audio samples and keep a sliding window internally of the FFT the last 100ms or so of audio samples received as features for voice recognition. + +```python +audio.start_streaming(speech.audio_callback) +``` + +If you need to stop the audio streaming, you can call `.stop_streaming()`. + +```python +audio.stop_streaming() +``` \ No newline at end of file diff --git a/content/micropython/01.basics/06.board-examples/hero-banner.png b/content/micropython/01.basics/06.board-examples/hero-banner.png new file mode 100644 index 0000000000..361d13ae7b Binary files /dev/null and b/content/micropython/01.basics/06.board-examples/hero-banner.png differ diff --git a/content/micropython/01.basics/basics.md b/content/micropython/01.basics/basics.md new file mode 100644 index 0000000000..c2556bad89 --- /dev/null +++ b/content/micropython/01.basics/basics.md @@ -0,0 +1,3 @@ +--- +title: Basics +--- \ No newline at end of file diff --git a/content/micropython/micropython.md b/content/micropython/micropython.md new file mode 100644 index 0000000000..b7ed928518 --- /dev/null +++ b/content/micropython/micropython.md @@ -0,0 +1,3 @@ +--- +title: MicroPython +--- \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 485d9d123f..324cfc3b4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,95 +5,95 @@ "requires": true, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.8.3.tgz", + "integrity": "sha512-DpNL4PZTes+6pg2ysJQzZZBQUvHSYP1q8IkiJA7UoNqFMf0pdq2bSIehuiMTxNegpMjSszaB7G+o5UgxavKhWA==", "requires": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.8.3" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.3.tgz", + "integrity": "sha512-M5B9VZtMtBFS8KSIzv8m0gtwVYtFBBjCvr8boBi+orbQUqzdoj5f70CqhQxUtnNcFGizHUaShUDV571F33/m7g==", "requires": { - "@algolia/autocomplete-shared": "1.7.4" + "@algolia/autocomplete-shared": "1.8.3" } }, "@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.3.tgz", + "integrity": "sha512-llwPEemKzVhOjL9AsoZPejkaTTAsCB/2HHBQapC8LgQ2E/ipD5M1kTT6oSJskSVO5zI0YbBOCxAigZhgpPJ3eA==" }, "@algolia/cache-browser-local-storage": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", - "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.15.0.tgz", + "integrity": "sha512-uxxFhTWh4JJDb2+FFSmNMfEQ8p9o2vjSpU7iW007QX3OvqljPPN68lk3bpZVaG8pwr5MU1DqpkZ71FcQdVTjgQ==", "requires": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.15.0" } }, "@algolia/cache-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.3.tgz", - "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.15.0.tgz", + "integrity": "sha512-Me3PbI4QurAM+3D+htIE0l1xt6+bl/18SG6Wc7bPQEZAtN7DTGz22HqhKNyLF2lR/cOfpaH7umXZlZEhIHf7gQ==" }, "@algolia/cache-in-memory": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", - "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.15.0.tgz", + "integrity": "sha512-B9mg1wd7CKMfpkbiTQ8KlcKkH6ut/goVaI6XmDCUczOOqeuZlV34tuEi7o3Xo1j66KWr/d9pMjjGYcoVPCVeOA==", "requires": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.15.0" } }, "@algolia/client-account": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.3.tgz", - "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.15.0.tgz", + "integrity": "sha512-8wqI33HRZy5ydfFt6F5vMhtkOiAUhVfSCYXx4U3Go5RALqWLgVUp6wzOo0mr1z08POCkHDpbQMQvyayb1CZ/kw==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.15.0", + "@algolia/client-search": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "@algolia/client-analytics": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", - "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.15.0.tgz", + "integrity": "sha512-jrPjEeNEIIQKeA1XCZXx3f3aybtwF7wjYlnfHbLARuZ9AuHzimOKjX0ZwqvMmvTsHivpcZ2rqY+j1E8HoH1ELA==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.15.0", + "@algolia/client-search": "4.15.0", + "@algolia/requester-common": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "@algolia/client-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.3.tgz", - "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.15.0.tgz", + "integrity": "sha512-PlsJMObZuYw4JlG5EhYv1PHDOv7n5mD5PzqFyoNfSOYaEPRZepa3W579ya29yOu3FZ0VGMNJmB7Q5v/+/fwvIw==", "requires": { - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/requester-common": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "@algolia/client-personalization": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", - "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.15.0.tgz", + "integrity": "sha512-Bf0bhRAiNL9LWurzyHRH8UBi4fDt3VbCNkInxVngKQT1uCZWXecwoPWGhcSSpdanBqFJA/1WBt+BWx7a50Bhlg==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.15.0", + "@algolia/requester-common": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "@algolia/client-search": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.3.tgz", - "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.15.0.tgz", + "integrity": "sha512-dTwZD4u53WdmexnMcoO2Qd/+YCP3ESXKOtD2MryQ1a9dHwB2Y3Qob0kyS1PG82idwM3enbznvscI9Sf4o9PUWQ==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.15.0", + "@algolia/requester-common": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "@algolia/events": { @@ -102,47 +102,47 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "@algolia/logger-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.3.tgz", - "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.15.0.tgz", + "integrity": "sha512-D8OFwn/HpvQz66goIcjxOKsYBMuxiruxJ3cA/bnc0EiDvSA2P2z6bNQWgS5gbstuTZIJmbhr+53NyOxFkmMNAA==" }, "@algolia/logger-console": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.3.tgz", - "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.15.0.tgz", + "integrity": "sha512-pQOvVaRSEJQJRXKTnxEA6nN1hipSQadJJ4einw0nIlfMOGZh/kps1ybh8vRUlUGyfEuN/3dyFs0W3Ac7hIItlg==", "requires": { - "@algolia/logger-common": "4.14.3" + "@algolia/logger-common": "4.15.0" } }, "@algolia/requester-browser-xhr": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", - "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.15.0.tgz", + "integrity": "sha512-va186EfALF+6msYZXaoBSxcnFCg3SoWJ+uv1yMyhQRJRe7cZSHWSVT3s40vmar90gxlBu80KMVwVlsvJhJv6ew==", "requires": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.15.0" } }, "@algolia/requester-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.3.tgz", - "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.15.0.tgz", + "integrity": "sha512-w0UUzxElbo4hrKg4QP/jiXDNbIJuAthxdlkos9nS8KAPK2XI3R9BlUjLz/ZVs4F9TDGI0mhjrNHhZ12KXcoyhg==" }, "@algolia/requester-node-http": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", - "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.15.0.tgz", + "integrity": "sha512-eeEOhFtgwKcgAlKAZpgBRZJ0ILSEBCXxZ9uwfVWPD24W1b6z08gVoTJ6J7lCeCnJmudg+tMElDnGzHkjup9CJA==", "requires": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.15.0" } }, "@algolia/transporter": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.3.tgz", - "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.15.0.tgz", + "integrity": "sha512-JoWR+ixG3EmA0UPntQFN/FV5TasYcYu93d5+oKzHFeZ6Z7rtW5Im9iy/Oh/ggk1AAN5fTdqKewtbBpdaYDbKsQ==", "requires": { - "@algolia/cache-common": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/requester-common": "4.14.3" + "@algolia/cache-common": "4.15.0", + "@algolia/logger-common": "4.15.0", + "@algolia/requester-common": "4.15.0" } }, "@ampproject/remapping": { @@ -267,9 +267,9 @@ } }, "@arduino/docs-arduino-cc": { - "version": "1.7.85", - "resolved": "https://npm.pkg.github.com/download/@arduino/docs-arduino-cc/1.7.85/012010b131cf5353e0a7e88294112df240da785e", - "integrity": "sha512-jS1PJS3RWFoYEnlytidJ4Uheo6+4GLBObYDo2QHzhDJweakhneWc87DYnjtTbt4J8B/l7SKG7JkGz/cYLRsJ+w==", + "version": "1.8.2", + "resolved": "https://npm.pkg.github.com/download/@arduino/docs-arduino-cc/1.8.2/61c33be22adb22443a823b1e0a10c3efc026b8a3", + "integrity": "sha512-hH18us13kEf+EfevHX9jJ/Fi/6LMLoaVEvUQjasI7sAgV766b8mSqfovrhouXsTZ/L1Z/t0l52THyIh1QTSXMw==", "requires": { "@algolia/autocomplete-core": "^1.5.3", "@algolia/autocomplete-preset-algolia": "^1.5.3", @@ -1713,9 +1713,9 @@ } }, "@formatjs/icu-messageformat-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.2.0.tgz", - "integrity": "sha512-NT/jKI9nvqNIsosTm+Cxv3BHutB1RIDFa4rAa2b664Od4sBnXtK7afXvAqNa3XDFxljKTij9Cp+kRMJbXozUww==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.3.0.tgz", + "integrity": "sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ==", "requires": { "@formatjs/ecma402-abstract": "1.14.3", "@formatjs/icu-skeleton-parser": "1.3.18", @@ -2162,9 +2162,9 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@internationalized/date": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.0.2.tgz", - "integrity": "sha512-9V1IxesP6ASZj/hYyOXOC4yPJvidbbStyWQKLCQSqhhKACMOXoo+BddXZJy47ju9mqOMpWdrJ2rTx4yTxK9oag==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.1.0.tgz", + "integrity": "sha512-wjeur7K4AecT+YwoBmBXQ/+n5lP69tuZc34hw09s44EozZK7FZHSyfPvRp5/xEb2D6abLboskDY4jG+Nt0TNUQ==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -2185,9 +2185,9 @@ } }, "@internationalized/message": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.0.10.tgz", - "integrity": "sha512-vfLqEop/NH68IgqMcXJNSDqZ5Leg3EEgCxhuuSefU7vvdbptD3pwpUWXaK9igYPa+aZfUU0eqv86yqm76obtsw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.0.tgz", + "integrity": "sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ==", "requires": { "@swc/helpers": "^0.4.14", "intl-messageformat": "^10.1.0" @@ -2209,9 +2209,9 @@ } }, "@internationalized/number": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.1.2.tgz", - "integrity": "sha512-Mbys8SGsn0ApXz3hJLNU+d95B8luoUbwnmCpBwl7d63UmYAlcT6TRDyvaS/vwdbElXLcsQJjQCu0gox2cv/Tig==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.2.0.tgz", + "integrity": "sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -2232,9 +2232,9 @@ } }, "@internationalized/string": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.0.1.tgz", - "integrity": "sha512-2+rHfXZ56YgsC6i3fKvBue/xatnSm0Jv+C/x4+n3wg5xAcLh4LPW3GvZ/9ifxNAz9+IWplgZHa1FRIbSuUvNWg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.0.tgz", + "integrity": "sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -3054,16 +3054,16 @@ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@react-aria/breadcrumbs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.4.1.tgz", - "integrity": "sha512-3dotDXcXX5IbES9tS9gK5m/2inlZH1ZESi61aBUoD/kQbUcf4CJ3TniVqzBKjNqQN8yIBH/LjwkAoGmuvtPVRQ==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/link": "^3.3.6", - "@react-aria/utils": "^3.14.2", - "@react-types/breadcrumbs": "^3.4.6", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.0.tgz", + "integrity": "sha512-WiNMlk8COR+4zpJ8mFgTgWQqCxoFE6OMJ16anJzR8IgP1xMzUmIQ7l0s0Dv4D5qE+xVlgNF0ccDdw1x6A+WzPw==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/link": "^3.4.0", + "@react-aria/utils": "^3.15.0", + "@react-types/breadcrumbs": "^3.5.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3083,16 +3083,16 @@ } }, "@react-aria/button": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.6.4.tgz", - "integrity": "sha512-OEs5fNGiuZzyC5y0cNl96+6pRf/3ZhI1i2m6LlRYhJLsWXPhHt21UHEnlSchE/XGtgKojJEeTsXottoBFTBi5w==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/toggle": "^3.4.4", - "@react-types/button": "^3.7.0", - "@react-types/shared": "^3.16.0", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.7.0.tgz", + "integrity": "sha512-4DSGXrAWflzT4cQe/x0KdrPzz7hv9vZgqYJuNXQkpmeIMs1EmUKuby2xC+W9GHuZ+8dMxjTWKy3XdwX2tCM42A==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/toggle": "^3.5.0", + "@react-types/button": "^3.7.1", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3112,19 +3112,19 @@ } }, "@react-aria/calendar": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.0.5.tgz", - "integrity": "sha512-RIOwGYIwMizN/MAF5RkTb2ic9OJ0rJyR2VqqgtV3c7ADHNejzyLYMQmaalEFDUHS+AbvaXM1LCXdFBhSB8nf5w==", - "requires": { - "@internationalized/date": "^3.0.2", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/utils": "^3.14.2", - "@react-stately/calendar": "^3.0.5", - "@react-types/button": "^3.7.0", - "@react-types/calendar": "^3.0.5", - "@react-types/shared": "^3.16.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.1.0.tgz", + "integrity": "sha512-XWtoGMBTYpj5De2yfboAv60SMXa/T2BjPd0uSkiaPXAC0vPjdB0VPhGbSi6LKCYIiTAMs98mMP0P4WYhWyW4jA==", + "requires": { + "@internationalized/date": "^3.1.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/calendar": "^3.1.0", + "@react-types/button": "^3.7.1", + "@react-types/calendar": "^3.1.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3144,17 +3144,17 @@ } }, "@react-aria/checkbox": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.7.1.tgz", - "integrity": "sha512-3KRg/KrTRwQdw5Yg7gpbIKWWVt57PbGSEXAS/diQvRf9pTXbOuChTES8uVlcwF8q+3mKXc4ppzE3gsNQ5jOMqg==", - "requires": { - "@react-aria/label": "^3.4.4", - "@react-aria/toggle": "^3.4.2", - "@react-aria/utils": "^3.14.2", - "@react-stately/checkbox": "^3.3.2", - "@react-stately/toggle": "^3.4.4", - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.8.0.tgz", + "integrity": "sha512-VjezmSfDx1/A+Yz5naZ9xCxkasmtsO7uK+Ur+Z6bKmHwvoazRK5cATdRG4mj++0JUBYn6bvBGBEXFZHTkkGahw==", + "requires": { + "@react-aria/label": "^3.5.0", + "@react-aria/toggle": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/checkbox": "^3.4.0", + "@react-stately/toggle": "^3.5.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3174,25 +3174,25 @@ } }, "@react-aria/combobox": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.4.4.tgz", - "integrity": "sha512-aviSDt4JkYZC1Ww83gvrNB4cHetXu73n5NuEfMNBC3B6fiL0MP5Av5+lMgf8FzpQks39QkZNxBtQ/h4I3D7SBA==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/listbox": "^3.7.2", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/menu": "^3.7.1", - "@react-aria/overlays": "^3.12.1", - "@react-aria/selection": "^3.12.1", - "@react-aria/textfield": "^3.8.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/collections": "^3.5.1", - "@react-stately/combobox": "^3.3.1", - "@react-stately/layout": "^3.10.0", - "@react-types/button": "^3.7.0", - "@react-types/combobox": "^3.5.5", - "@react-types/shared": "^3.16.0", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.5.1.tgz", + "integrity": "sha512-HyBX98TvQe8IscJlRz6TxgvMlYcwy9iTA/GWjy3bMNjUfxPaRZh5r69aG8JlTRvVDLE13cUSh0mKsTSjo8evvQ==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/listbox": "^3.8.1", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/menu": "^3.8.1", + "@react-aria/overlays": "^3.13.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/textfield": "^3.9.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/combobox": "^3.4.0", + "@react-stately/layout": "^3.11.0", + "@react-types/button": "^3.7.1", + "@react-types/combobox": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3212,25 +3212,25 @@ } }, "@react-aria/datepicker": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.2.1.tgz", - "integrity": "sha512-NnW9VgX/YjxkgjcIaxmOhzpfiQmTQpCXjpPJ1+3nPhKzPKpcjtPxIYTDMkm/R+6i5FRukEGtjhg3QY9amLK6hQ==", - "requires": { - "@internationalized/date": "^3.0.2", - "@internationalized/number": "^3.1.2", - "@internationalized/string": "^3.0.1", - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/spinbutton": "^3.2.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/datepicker": "^3.2.1", - "@react-types/button": "^3.7.0", - "@react-types/calendar": "^3.0.5", - "@react-types/datepicker": "^3.1.4", - "@react-types/dialog": "^3.4.5", - "@react-types/shared": "^3.16.0", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.3.0.tgz", + "integrity": "sha512-76/5a2Dfe/SCcW0j4hqeSTnlh6SSW/AYPKPr5fNaiGnLFJ3oLsc9SAuUgTsOBglR/J3N/hqtH+UO2U8X1QC6Ng==", + "requires": { + "@internationalized/date": "^3.1.0", + "@internationalized/number": "^3.2.0", + "@internationalized/string": "^3.1.0", + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/spinbutton": "^3.3.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/datepicker": "^3.3.0", + "@react-types/button": "^3.7.1", + "@react-types/calendar": "^3.1.0", + "@react-types/datepicker": "^3.2.0", + "@react-types/dialog": "^3.5.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3250,16 +3250,16 @@ } }, "@react-aria/dialog": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.4.2.tgz", - "integrity": "sha512-Z6YZYXtwwmC5ZHjJldF3zuTjHnli7fXe/sM1ts3bw6jvU2L0kzhV/DRbPXYg8h695Oj9t+OIi4qxjEyKVH7SEA==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/overlays": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/overlays": "^3.4.4", - "@react-types/dialog": "^3.4.5", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.0.tgz", + "integrity": "sha512-QcGwrNSn7hya6tcs0CTuYEMYBPk6YT1vaO6xMTfsSyRhJNCRvvtx/NJ3Bg26M7WvzbuC2aKaSDBw2c14ZeXr5g==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/overlays": "^3.5.0", + "@react-types/dialog": "^3.5.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3279,20 +3279,20 @@ } }, "@react-aria/dnd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.0.1.tgz", - "integrity": "sha512-z/T59Jc+6mj3OMcLjfA6MYd0zD6K3DYw+kB2CZ0EPte7BRN8wtU4+q/bx1iX+If97X6bTcHjMGX6nrQJ5vX/fw==", - "requires": { - "@internationalized/string": "^3.0.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/overlays": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-aria/visually-hidden": "^3.6.1", - "@react-stately/dnd": "^3.0.1", - "@react-types/button": "^3.7.0", - "@react-types/shared": "^3.16.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.1.0.tgz", + "integrity": "sha512-SSkz9i7EcsoTrafDPpzlx+laYNfsUrCM7xX6yu68l9zO96kdoemZuv9OqbDBw2D1peqHT7kMoLreTLWsubb5bg==", + "requires": { + "@internationalized/string": "^3.1.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0", + "@react-stately/dnd": "^3.1.0", + "@react-types/button": "^3.7.1", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3312,13 +3312,13 @@ } }, "@react-aria/focus": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.10.1.tgz", - "integrity": "sha512-HjgFUC1CznuYC7CxtBIFML6bOBxW3M3cSNtvmXU9QWlrPSwwOLkXCnfY6+UkjCc5huP4v7co4PoRDX8Vbe/cVQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.11.0.tgz", + "integrity": "sha512-yPuWs9bAR9CMfIwyOPm2oXLPF19gNkUqW+ozSPhWbLMTEa8Ma09eHW1br4xbN+4ONOm/dCJsIkxTNPUkiLdQoA==", "requires": { - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14", "clsx": "^1.1.1" }, @@ -3339,22 +3339,22 @@ } }, "@react-aria/grid": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.5.2.tgz", - "integrity": "sha512-+cDtTvTT0YF4jgy1pv0omcweub6z1N+GdkpHC6L6/jtH2gFRVns3IC6pf5ihLDIpLloylthaMMR8C3lus7035g==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/grid": "^3.4.2", - "@react-stately/selection": "^3.11.2", - "@react-stately/virtualizer": "^3.4.1", - "@react-types/checkbox": "^3.4.1", - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.6.1.tgz", + "integrity": "sha512-8u5oSqHrMNg4GVoOE21CEDcoAbTVpDUNg1mpJqM/ww2LrPZdEMQlU0Ro7Uq+zNg2tzVcdAtgPkh7EEErESIb4Q==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/grid": "^3.5.0", + "@react-stately/selection": "^3.12.0", + "@react-stately/virtualizer": "^3.5.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3374,19 +3374,19 @@ } }, "@react-aria/gridlist": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.1.2.tgz", - "integrity": "sha512-3HI/e8HzyBRWdEbDH+3Hvj9U5fD/1TYaqA0f4XnBdSEDd7LHPOzZyNzbZMdlMmaq2W0Dmm1YRCMELacFVUehUA==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/grid": "^3.5.2", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/list": "^3.6.1", - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.2.1.tgz", + "integrity": "sha512-EQxtKs2c3+kzy6q4nbJoYF7sP33yTsP9NitneRLHNWuT9rdTqKCDps+e0VyXa9ynZkW9Dm5mek0n36mS8NW1zw==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/grid": "^3.6.1", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/list": "^3.7.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3406,17 +3406,17 @@ } }, "@react-aria/i18n": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.6.3.tgz", - "integrity": "sha512-cDWl8FXJIXsw/raWcThywBueCJ5ncoogq81wYVS6hfZVmSyncONIB3bwUL12cojmjX1VEP31sN0ujT/83QP95Q==", - "requires": { - "@internationalized/date": "^3.0.2", - "@internationalized/message": "^3.0.10", - "@internationalized/number": "^3.1.2", - "@internationalized/string": "^3.0.1", - "@react-aria/ssr": "^3.4.1", - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.7.0.tgz", + "integrity": "sha512-PZCWmhO9mJvelwiYlsXLY6W4L2o+oza3xnDx0cZDVqp/Hf+OwMAPHWtZsFRTKdjk4TaOPB/ISc9HknWn6UpY4w==", + "requires": { + "@internationalized/date": "^3.1.0", + "@internationalized/message": "^3.1.0", + "@internationalized/number": "^3.2.0", + "@internationalized/string": "^3.1.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3436,12 +3436,12 @@ } }, "@react-aria/interactions": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.13.1.tgz", - "integrity": "sha512-WCvfZOi1hhussVTHxVq76OR48ry13Zvp9U5hmuQufyxIUlf4hOvDk4/cbK4o4JiCs8X7C7SRzcwFM34M4NHzmg==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.14.0.tgz", + "integrity": "sha512-e1Tkr0UTuYFpV21PJrXy7jEY542Vl+C2Fo70oukZ1fN+wtfQkzodsTIzyepXb7kVMGmC34wDisMJUrksVkfY2w==", "requires": { - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3461,13 +3461,13 @@ } }, "@react-aria/label": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.4.4.tgz", - "integrity": "sha512-1fuYf2UctNhBy31uYN7OhdcrwzlB5GS0+C49gDkwWzccB7yr+CoOJ5UQUoVB7WBmzrc+CuzwWxSDd4OupSYIZQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.5.0.tgz", + "integrity": "sha512-sNiPYiFg06s1zGuifEUeUqRiYje0lfHem+GIUh0Y5ZxfpqIyxEmyV9Aw+C7TTjjo8BAG4NZ4bR7iF9ujf9QvKQ==", "requires": { - "@react-aria/utils": "^3.14.2", - "@react-types/label": "^3.7.1", - "@react-types/shared": "^3.16.0", + "@react-aria/utils": "^3.15.0", + "@react-types/label": "^3.7.2", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3487,15 +3487,15 @@ } }, "@react-aria/link": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.3.6.tgz", - "integrity": "sha512-UjbdBJ8EB+jCC3mPZD6cYykHqZKTy6/VvI5RGJoKtF8cg9639tRy6g102pd4ncFTdD4DfU5PPWtthC24nQRCyQ==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-types/link": "^3.3.6", - "@react-types/shared": "^3.16.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.4.0.tgz", + "integrity": "sha512-d/h4y7SFO+KweMX5IRU99L1jz9AAwp6mNStkBjYGxCD29QYTVWClpZHjRlO1s6a9e2QTpk/LzsvjiytowzfHyA==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/link": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3515,19 +3515,19 @@ } }, "@react-aria/listbox": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.7.2.tgz", - "integrity": "sha512-e3O/u2T3TccinmfS/UvHywxLbASmh28U4020WTpZnIrsaoriVCkGZvG1AYNNPDIESz2WO0oRF6vDrmGunglJ2A==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/collections": "^3.5.1", - "@react-stately/list": "^3.6.1", - "@react-types/listbox": "^3.3.5", - "@react-types/shared": "^3.16.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.8.1.tgz", + "integrity": "sha512-kTIQWms6nS//GWr63gSVcNgZv7uf5RULLTKH3DIpmaftS3Kf4Sds6rspWGYQ9PAeS1EqcuHozsXXlKBo1upYgg==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/list": "^3.7.0", + "@react-types/listbox": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3547,9 +3547,9 @@ } }, "@react-aria/live-announcer": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.1.2.tgz", - "integrity": "sha512-BqtVLPWU10sZssoOJF1lJiRvZe5zqZ5BM39PsFyO7dWhVkR/9O9bZviqvKXnC1oXCnypfa+85gUshbK9unFcWA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.2.0.tgz", + "integrity": "sha512-uSqDDy+9CbmNTZh0Roi4dvWKWcbuMTYKh3RnUw3XBPw0aYxSkcFQeWGfxFoOwXCDcXez02cFJtAxpR2bShkrsw==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -3570,21 +3570,21 @@ } }, "@react-aria/menu": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.7.1.tgz", - "integrity": "sha512-5KIUTs3xYSmERB8qzofFghznMVLcG3RWDnJcQjpRtrrYjm6Oc39TJeodDH874fiEr6o3i5WwMrEYVp7NSxz/TQ==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/overlays": "^3.12.1", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/collections": "^3.5.1", - "@react-stately/menu": "^3.4.4", - "@react-stately/tree": "^3.4.1", - "@react-types/button": "^3.7.0", - "@react-types/menu": "^3.7.3", - "@react-types/shared": "^3.16.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.8.1.tgz", + "integrity": "sha512-p8DF/muxbTr/SOZh3FDFPcWUcnXvpwMKyR+xKXQQPbCV/LAiSjVtwxbNVvubqvzR0Qk6/XV4/HUY2r+4tnT8tQ==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/menu": "^3.5.0", + "@react-stately/tree": "^3.5.0", + "@react-types/button": "^3.7.1", + "@react-types/menu": "^3.8.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3604,13 +3604,13 @@ } }, "@react-aria/meter": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.3.4.tgz", - "integrity": "sha512-RdVd5vlb6//HI8G1hhH4G+E0Y387GYFKjmewSUKK0Lzp9PFLili26s+xLvgigUX9ald7HiPmfPdAlXzotvo54Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.0.tgz", + "integrity": "sha512-2CqpTwkZ1Vnblqd+z+mP+3ZhQRg3oNkz7GxN9nRLTDrpxVLY+WtSeIGDK7x8EwmYrVo4q4wHl3DGa2VOLNNgVA==", "requires": { - "@react-aria/progress": "^3.3.4", - "@react-types/meter": "^3.2.5", - "@react-types/shared": "^3.16.0", + "@react-aria/progress": "^3.4.0", + "@react-types/meter": "^3.3.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3630,21 +3630,21 @@ } }, "@react-aria/numberfield": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.3.4.tgz", - "integrity": "sha512-yoYeYaEW5v84Ff0x+oSN0h3uzqrSOBEgjtv8ZMaFVsZfm9yMjsVLu+QWGBYCEOPcASMkNZpNR3o91nBPK3XTDw==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/spinbutton": "^3.2.1", - "@react-aria/textfield": "^3.8.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/numberfield": "^3.3.1", - "@react-types/button": "^3.7.0", - "@react-types/numberfield": "^3.3.5", - "@react-types/shared": "^3.16.0", - "@react-types/textfield": "^3.6.2", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.4.0.tgz", + "integrity": "sha512-gZMZAjE+tcwtdDW5X5rlot7ihir1OCCEyzbIDFztte2h+I57b45ET9P4AmgrmqfOnyscPXI3kJn9eILNYHdZVw==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/spinbutton": "^3.3.0", + "@react-aria/textfield": "^3.9.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/numberfield": "^3.4.0", + "@react-types/button": "^3.7.1", + "@react-types/numberfield": "^3.4.0", + "@react-types/shared": "^3.17.0", + "@react-types/textfield": "^3.7.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3664,20 +3664,20 @@ } }, "@react-aria/overlays": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.12.1.tgz", - "integrity": "sha512-OSgSopk2uQI5unvC3+fUyngbRFFe4GnF0iopCmrsI7qSQEusJUd4M2SuPVXUBBwWFt5TsiH7TnxmIPWeh5LSoA==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/ssr": "^3.4.1", - "@react-aria/utils": "^3.14.2", - "@react-aria/visually-hidden": "^3.6.1", - "@react-stately/overlays": "^3.4.4", - "@react-types/button": "^3.7.0", - "@react-types/overlays": "^3.6.5", - "@react-types/shared": "^3.16.0", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.13.0.tgz", + "integrity": "sha512-hRZyhAYzrlCcEWQ2k2jP24b0wc5/355Xl5w5FZHRmPeU1U4XlFwKX/eFlBs/li9Sprm1bTDXrCY480Kl6UsKDA==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0", + "@react-stately/overlays": "^3.5.0", + "@react-types/button": "^3.7.1", + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3697,15 +3697,15 @@ } }, "@react-aria/progress": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.3.4.tgz", - "integrity": "sha512-MVlWdH7L2e0u1SvkVk+C6/onS8opex9rIKUKHM08s++y80Xe3BIAh8jd5tgdlutDtcZ1kKgfb4bet9dvjymo4A==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/label": "^3.4.4", - "@react-aria/utils": "^3.14.2", - "@react-types/progress": "^3.2.5", - "@react-types/shared": "^3.16.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.0.tgz", + "integrity": "sha512-G8Wew/EjgzoBM6OOAtVinA0hEng/DXWZF7luCoMPuqSKOakFzzazHBMpmjcXku0GGoTGzLsqqOK1M5o3kDn4FA==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/label": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/progress": "^3.3.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3725,18 +3725,18 @@ } }, "@react-aria/radio": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.4.2.tgz", - "integrity": "sha512-PpEsQjwkYOkSfKfnqXpBzf0FM/V2GSC0g/NG2ZAI5atDIACeic+kHCcs8fm2QzXtUDaRltNurvYdDJ+XzZ8g1g==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/utils": "^3.14.2", - "@react-stately/radio": "^3.6.2", - "@react-types/radio": "^3.3.1", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.5.0.tgz", + "integrity": "sha512-d/Hxdu+jUdi3wmyaWYRLTyN16vZxr2MOdkmw8tojTOIMLQj7zTaCFc0D4LR4KZEn3E0F5buGCUHL6o4CTqBeBA==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/radio": "^3.7.0", + "@react-types/radio": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3756,18 +3756,18 @@ } }, "@react-aria/searchfield": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.4.4.tgz", - "integrity": "sha512-Z3nZI2FXrWLPNUeJ3QV2ruTKBR9eHhPoHi+Iiuq4n+e02ib5s0Jlbam29FFiOxmf6vUMhScNcEYP9p2BNANmQA==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/textfield": "^3.8.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/searchfield": "^3.3.4", - "@react-types/button": "^3.7.0", - "@react-types/searchfield": "^3.3.6", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.5.0.tgz", + "integrity": "sha512-eAsOiTBUeD8OiRyXUbU6fWzkEO5ERAODZJtv4yGcMdTjtKJW4jxeRwc6GXMKF3hDvdz7Y9NV6YfMCICSiVSFYg==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/textfield": "^3.9.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/searchfield": "^3.4.0", + "@react-types/button": "^3.7.1", + "@react-types/searchfield": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3787,22 +3787,22 @@ } }, "@react-aria/select": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.8.4.tgz", - "integrity": "sha512-d2JOe11lUoGLvsE32bZRMq32SzXuyLNczyTOLrWM0e9fsOr49A8p6L6bFm3symU/KpwjjnO+pf5IkvgEq+GoJg==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/listbox": "^3.7.2", - "@react-aria/menu": "^3.7.1", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-aria/visually-hidden": "^3.6.1", - "@react-stately/select": "^3.3.4", - "@react-types/button": "^3.7.0", - "@react-types/select": "^3.6.5", - "@react-types/shared": "^3.16.0", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.9.1.tgz", + "integrity": "sha512-SL+OZHhNLXAyX4FPP2uYj1+igB7t+pxoccO4qfrewbwPG8ext3bYx/gRQKc5A+chCY1ERIG9EQQo1vU/bZRQVA==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/listbox": "^3.8.1", + "@react-aria/menu": "^3.8.1", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0", + "@react-stately/select": "^3.4.0", + "@react-types/button": "^3.7.1", + "@react-types/select": "^3.7.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3822,17 +3822,17 @@ } }, "@react-aria/selection": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.12.1.tgz", - "integrity": "sha512-UX1vSY+iUdHe0itFZIOizX1BCI8SAeFnEh5VIQ1bYRt93+kAxeC914fsxFPPgrodJyqWRCX1dblPyRUIWAzQiw==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/collections": "^3.5.1", - "@react-stately/selection": "^3.11.2", - "@react-types/shared": "^3.16.0", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.13.1.tgz", + "integrity": "sha512-YI5mFkk3JI3Ec01SzyBFGrdPInkoW5B0AavwLkN5QtehBUgdw9A1gPKADW4tiLfKUOl0rkqstP13n+v/GcBoTg==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/selection": "^3.12.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3852,12 +3852,12 @@ } }, "@react-aria/separator": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.2.6.tgz", - "integrity": "sha512-QhYqoLfu+4T3ASCs5Q8ZWfBbRKBUmqquVdREWvHyvVyOBk9kRN9nxsoIxlkss1RJlJJx59AYF9T9CwgL80/bvw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.3.0.tgz", + "integrity": "sha512-AR3Pbik83dygOvmfBiCTRAHz+B13yyGz8nKyw521toT69RMtJTi8ha8qB6Iw1QP3YZWRv+Fn6WWrfGIvR+f2XQ==", "requires": { - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3877,20 +3877,20 @@ } }, "@react-aria/slider": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.2.4.tgz", - "integrity": "sha512-+BDPFaCgm0gtGewO33ZDNZz1b3Fc1p5Y/HSuwCcru+jHetODJXy23IIVpWsDri1vG3fHECRnWcDZAjLZgkVnAw==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/utils": "^3.14.2", - "@react-stately/radio": "^3.6.2", - "@react-stately/slider": "^3.2.4", - "@react-types/radio": "^3.3.1", - "@react-types/shared": "^3.16.0", - "@react-types/slider": "^3.3.1", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.3.0.tgz", + "integrity": "sha512-UgR2XEI3vrJAQU1RVC+1uHVr/vFcVh+Cjt/kaFUO7fdj8usqa4JOnIuX+QKCysiVLJc7IEXw4RCJBJYBSUYK6A==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/radio": "^3.7.0", + "@react-stately/slider": "^3.3.0", + "@react-types/radio": "^3.4.0", + "@react-types/shared": "^3.17.0", + "@react-types/slider": "^3.4.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3910,15 +3910,15 @@ } }, "@react-aria/spinbutton": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.2.1.tgz", - "integrity": "sha512-y9QZ0VzWL7qzbWSPOCsAdvZhVlQrnHLRGc8bkRa2jmWrnCqS0iua/TRuLGgazIf2Rb7GmdbKBJJuPSScytVDUw==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/utils": "^3.14.2", - "@react-types/button": "^3.7.0", - "@react-types/shared": "^3.16.0", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.3.0.tgz", + "integrity": "sha512-FXTFNz2RFClqGxQzMIHYdsjkm6fcWRObqelY+lXP5udk7Q8T9aQn+28QhqVpbOFXotLE2PltElbziJeuhkVgNA==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/utils": "^3.15.0", + "@react-types/button": "^3.7.1", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3938,9 +3938,9 @@ } }, "@react-aria/ssr": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.4.1.tgz", - "integrity": "sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.5.0.tgz", + "integrity": "sha512-h0MJdSWOd1qObLnJ8mprU31wI8tmKFJMuwT22MpWq6psisOOZaga6Ml4u6Ee6M6duWWISjXvqO4Sb/J0PBA+nQ==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -3961,13 +3961,13 @@ } }, "@react-aria/switch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.3.1.tgz", - "integrity": "sha512-o9MvXiSK9c7rUZjA6oQ0PNlVCnHEctue6v6W8Vn4HNbQMfhJiWqiSSff4RFcgRgs8WsPsEqbT+vHi2kXykQzdA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.4.0.tgz", + "integrity": "sha512-FWbjqNcY+fAjRNXVQTvOx93udhaySgXLsMNLRAVUcFm45FqTaxAhHhNGtRnVhDvzHTJY/Y+kpcGzCcW2rXzPxg==", "requires": { - "@react-aria/toggle": "^3.4.2", - "@react-stately/toggle": "^3.4.4", - "@react-types/switch": "^3.2.5", + "@react-aria/toggle": "^3.5.0", + "@react-stately/toggle": "^3.5.0", + "@react-types/switch": "^3.3.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -3987,23 +3987,23 @@ } }, "@react-aria/table": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.7.0.tgz", - "integrity": "sha512-1YqOeb8r8pxIYyfa5qNdCoM3fNQELM4d+9DanoNJhgnehoq9QDI9A1pGC2pvK2PN2y9IuTJM+U/ITjSpPBoGjQ==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/grid": "^3.5.2", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/live-announcer": "^3.1.2", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/table": "^3.7.0", - "@react-stately/virtualizer": "^3.4.1", - "@react-types/checkbox": "^3.4.1", - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0", - "@react-types/table": "^3.4.0", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.8.1.tgz", + "integrity": "sha512-21cewiqA7Wmco6baAZKHEIXTmmtwAAPkmdXnua+Ysc+18ry3Sd1GaIvFkDRSwqIH43xWtXJhlHkWhJcKxle+Xg==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/grid": "^3.6.1", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/live-announcer": "^3.2.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/table": "^3.8.0", + "@react-stately/virtualizer": "^3.5.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0", + "@react-types/table": "^3.5.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4023,19 +4023,19 @@ } }, "@react-aria/tabs": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.3.4.tgz", - "integrity": "sha512-SqlgfPvpRHlWelFk/lF9Ziu/8881NVErhKcpyyi+A9jASv5tvILWiwK8na82oI22UXXzyp0Y1EojLB25HnCB+w==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/selection": "^3.12.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/list": "^3.6.1", - "@react-stately/tabs": "^3.2.4", - "@react-types/shared": "^3.16.0", - "@react-types/tabs": "^3.1.5", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.4.1.tgz", + "integrity": "sha512-0dS26zcmNq1ERKy3kHOD465UegOBCZEHsM3+jxrMBONyG76tACyNNRyMOm0sk5h3XLravBJR/uySRhAtvBEi0w==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/selection": "^3.13.1", + "@react-aria/utils": "^3.15.0", + "@react-stately/list": "^3.7.0", + "@react-stately/tabs": "^3.3.0", + "@react-types/shared": "^3.17.0", + "@react-types/tabs": "^3.2.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4055,15 +4055,15 @@ } }, "@react-aria/textfield": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.8.1.tgz", - "integrity": "sha512-jgun/B9ecuRCfBSJLX2xDuNwfuj1lL0oibMWoSv6Y++W+CSS8a7LjR1f9Kll5TDVkQiRRUm9qHwI0og9xTJrNw==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/label": "^3.4.4", - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", - "@react-types/textfield": "^3.6.2", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.9.0.tgz", + "integrity": "sha512-plX+/RDidTpz4kfQni2mnH10g9iARC5P7oi4XBXqwrVCIqpTUNoyGLUH952wObYOI9k7lG2QG0+b+3GyrV159g==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/label": "^3.5.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", + "@react-types/textfield": "^3.7.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4083,17 +4083,17 @@ } }, "@react-aria/toggle": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.4.2.tgz", - "integrity": "sha512-xokCGf0fn96mOMqQku5QW672iQoMsN9RMpFbKvvgg2seceh8ifblyAXElWf/6YmluOZSgUSZljDkFrbMMYlzVA==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/toggle": "^3.4.4", - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0", - "@react-types/switch": "^3.2.5", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.5.0.tgz", + "integrity": "sha512-K49OmHBmYW8pk0rXJU1TNRzR+PxLVvfL/ni6ifV5gcxoxV6DmFsNFj+5B/U3AMnCEQeyKQeiY6z9X7EBVX6j9Q==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/toggle": "^3.5.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0", + "@react-types/switch": "^3.3.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4113,16 +4113,16 @@ } }, "@react-aria/tooltip": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.3.4.tgz", - "integrity": "sha512-KPDkDu7fquuUOOnNh9S7KfhPMwB1w9K+yLIFrYaj4iYSOLk/HH5TDkyiUQ7j5+B963D1fWlQjYFEGQ9o2KwO/Q==", - "requires": { - "@react-aria/focus": "^3.10.1", - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-stately/tooltip": "^3.2.4", - "@react-types/shared": "^3.16.0", - "@react-types/tooltip": "^3.2.5", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.4.0.tgz", + "integrity": "sha512-b1E9m6WIPNV0TNRn9VNBnDn1FFt/pwKGtIGDDablLArEmSkkz0HJjwlUqC4+vL0U2dCaQA4TxWl9GDQE7Wzl8w==", + "requires": { + "@react-aria/focus": "^3.11.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/tooltip": "^3.3.0", + "@react-types/shared": "^3.17.0", + "@react-types/tooltip": "^3.3.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4142,13 +4142,13 @@ } }, "@react-aria/utils": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.14.2.tgz", - "integrity": "sha512-3nr5gsAf/J/W+6Tu4NF3Q7m+1mXjfpXESh7TPa6UR6v3tVDTsJVMrITg2BkHN1jM8xELcl2ZxyUffOWqOXzWuA==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.15.0.tgz", + "integrity": "sha512-aJZBG++iz1UwTW5gXFaHicKju4p0MPhAyBTcf2awHYWeTUUslDjJcEnNg7kjBYZBOrOSlA2rAt7/7C5CCURQPg==", "requires": { - "@react-aria/ssr": "^3.4.1", - "@react-stately/utils": "^3.5.2", - "@react-types/shared": "^3.16.0", + "@react-aria/ssr": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14", "clsx": "^1.1.1" }, @@ -4169,13 +4169,13 @@ } }, "@react-aria/visually-hidden": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.6.1.tgz", - "integrity": "sha512-7rUbiaIiR1nok9HAHPn/WcyQlvuldUqxnvh81V4dlI3NtXOgMw7/QaNc5Xo5FFWlsSVpbyK3UVJgzIui0Ns0Xg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.7.0.tgz", + "integrity": "sha512-v/0ujJ67H6LjwY8J7mIGPVB1K8suBArLV+w8UGdX/wFXRL7H4r2fiqlrwAElWSmNbhDQl5BDm/Zh/ub9jB9yzA==", "requires": { - "@react-aria/interactions": "^3.13.1", - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14", "clsx": "^1.1.1" }, @@ -4196,15 +4196,15 @@ } }, "@react-stately/calendar": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.0.5.tgz", - "integrity": "sha512-vu5hKsiA8edqNtsqBTGi8QR38qZ+uHDjuq3vp2m0f6TZSnp0kg8fkPNHEOuBTQ8ZXFFbGUZKhL/1B+ZWwLHwMQ==", - "requires": { - "@internationalized/date": "^3.0.2", - "@react-stately/utils": "^3.5.2", - "@react-types/calendar": "^3.0.5", - "@react-types/datepicker": "^3.1.4", - "@react-types/shared": "^3.16.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.1.0.tgz", + "integrity": "sha512-PZXXHyrLoYEUAUL8oFoxHNc7mKrQXLxnYQkY9v3a6SxgST3J4tYoqIXrie0uqpm1LI+1JfKb2lyRGlVPRTBuNQ==", + "requires": { + "@internationalized/date": "^3.1.0", + "@react-stately/utils": "^3.6.0", + "@react-types/calendar": "^3.1.0", + "@react-types/datepicker": "^3.2.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4224,14 +4224,14 @@ } }, "@react-stately/checkbox": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.3.2.tgz", - "integrity": "sha512-eU3zvWgQrcqS8UK8ZVkb3fMP816PeuN9N0/dOJKuOXXhkoLPuxtuja1oEqKU3sFMa5+bx3czZhhNIRpr60NAdw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.4.0.tgz", + "integrity": "sha512-zqwHMmlzza1exS6Bbqj4Mom3ygtG8pLguHweZ9OO7BFQLwBmzJsrFNqDcj7xh8iEWxXKQfZ2YOuhkaGvu4GRjA==", "requires": { - "@react-stately/toggle": "^3.4.4", - "@react-stately/utils": "^3.5.2", - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0", + "@react-stately/toggle": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4251,11 +4251,11 @@ } }, "@react-stately/collections": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.5.1.tgz", - "integrity": "sha512-egzVrZC5eFc5RJBpqUkzxd2aJOHZ2T1o7horEi8tAWZkg4YI+AmKrqela4ijVrrB9l1GO9z06qPT1UoPkFrC1w==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.6.0.tgz", + "integrity": "sha512-znkaqCPo7F1yyzEKDAB5MpX1Vw5UHcUQhDNrys5YOqAkX6/G/AChnBz0B63UxS3fjyqgnuJylRRmUp9nTqO21w==", "requires": { - "@react-types/shared": "^3.16.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4275,16 +4275,16 @@ } }, "@react-stately/combobox": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.3.1.tgz", - "integrity": "sha512-DgYn0MyfbDySf54o7ofXRd29TWznqtRRRbMG8TWgi/RaB0piDckT/TYWWSYOH3iMgnOEhReJhUUdMiQG4QLpIg==", - "requires": { - "@react-stately/list": "^3.6.1", - "@react-stately/menu": "^3.4.4", - "@react-stately/select": "^3.3.4", - "@react-stately/utils": "^3.5.2", - "@react-types/combobox": "^3.5.5", - "@react-types/shared": "^3.16.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.4.0.tgz", + "integrity": "sha512-QVKNosNqSS7PnjrNVrGat9KKlCcv7e3nTehQuIu18ZE2JVH7Jdf/73zkSMurrnQfbPVeiHkGK1deWqrzoNzYQQ==", + "requires": { + "@react-stately/list": "^3.7.0", + "@react-stately/menu": "^3.5.0", + "@react-stately/select": "^3.4.0", + "@react-stately/utils": "^3.6.0", + "@react-types/combobox": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4304,11 +4304,11 @@ } }, "@react-stately/data": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.8.1.tgz", - "integrity": "sha512-YSc45qfmt8uhg9KTGGDQ/xbAPPP6ty5itzWoWORYLEsorBNUj7mLF+q126nYcYX4B5Xf84w8EexqP8Y8nh2Gdg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.9.0.tgz", + "integrity": "sha512-67zP/QkVInsU9wtKVj1b0MwaogDCC15eEe9/ULRf6xmaw0m6VOfm/Rz4Y9OvR8cQd5o+ImuAeRYEorRJ59yK5w==", "requires": { - "@react-types/shared": "^3.16.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4328,16 +4328,16 @@ } }, "@react-stately/datepicker": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.2.1.tgz", - "integrity": "sha512-nd6thX2Z+rOLDHduB3EgMKA0n5U83lrwn3IUfjRGrcE21zFaFmhTPsHyvol5jHy3eSyjWSN9kGpKFzOxES+uoA==", - "requires": { - "@internationalized/date": "^3.0.2", - "@internationalized/string": "^3.0.1", - "@react-stately/overlays": "^3.4.4", - "@react-stately/utils": "^3.5.2", - "@react-types/datepicker": "^3.1.4", - "@react-types/shared": "^3.16.0", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.3.0.tgz", + "integrity": "sha512-HH/WPAMXwULyBKHICxTLGDk3cPGf9Yhf8sX2DES935aupd+6YqzQrh97buOedKsF5WKZfzMMtUVqy8uepo6S6g==", + "requires": { + "@internationalized/date": "^3.1.0", + "@internationalized/string": "^3.1.0", + "@react-stately/overlays": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/datepicker": "^3.2.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4357,12 +4357,12 @@ } }, "@react-stately/dnd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.0.1.tgz", - "integrity": "sha512-pwtyY/TR6Rdk33lFdF6dztQTV9gPujFmTqJG31NSSs6ei1FfUW9ZMq+311Zb8OhZ0TFiwZqAutVmmaaUrtl5+A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.1.0.tgz", + "integrity": "sha512-PctHJqRm37vdKs91vB18lfdas4CypStbgj6ENApUXSDLd8XrVgthH4sYrX1BX/RbZyCr7u+TG7qVKGcRfsvbTw==", "requires": { - "@react-stately/selection": "^3.11.2", - "@react-types/shared": "^3.16.0", + "@react-stately/selection": "^3.12.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4382,13 +4382,13 @@ } }, "@react-stately/grid": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.4.2.tgz", - "integrity": "sha512-NeIUykQeA7Hen+dV4771ARW5SRrHYNn5VTOsQwn3KBUd2Z2gZ01OwUl3gETl5u0e3/tzMUdJ1LUoSPhDMwcmKw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.5.0.tgz", + "integrity": "sha512-kCmO2KyHoIJWiCqUXJTD0I/4q/6h3pXGdyD4tWmqWdysxf+x09K/Mx/JwwFqee5LICZgt8MtBrfV+ijLZ8mQAg==", "requires": { - "@react-stately/selection": "^3.11.2", - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0", + "@react-stately/selection": "^3.12.0", + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4408,15 +4408,15 @@ } }, "@react-stately/layout": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.10.0.tgz", - "integrity": "sha512-ThFgivQSD5ksLMX7tbu0HqIxbxac/E8a/0vA21wB9QF9IQnUKO796QAQqwfA5rwPvTT41LL2Xn00GkrwQ9g/zg==", - "requires": { - "@react-stately/table": "^3.7.0", - "@react-stately/virtualizer": "^3.4.1", - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0", - "@react-types/table": "^3.4.0", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.11.0.tgz", + "integrity": "sha512-QNupEFgIv5hqYEbLxDQfHgBkfk6t1VTTxWftBZMXXJEVCC1GH8vUJ35BJGO7hQNhPoTp3xc3X7yEcBlXy1ZmlA==", + "requires": { + "@react-stately/table": "^3.8.0", + "@react-stately/virtualizer": "^3.5.0", + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0", + "@react-types/table": "^3.5.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4436,14 +4436,14 @@ } }, "@react-stately/list": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.6.1.tgz", - "integrity": "sha512-+/fVkK3UO+N2NoUGpe57k9gcnfIsyEgWP8SD6CXZUkJho7BTp6mwrH0Wm8tcOclT3uBk+fZaQrk8mR3uWsPZGw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.7.0.tgz", + "integrity": "sha512-/BxCqXFjX9P+OJWjIYmUWaOGJ2hlZHUdymVwZPkIWdO9K7069LWckdYFXRqLFMwIGLUcXVfw4jR0BIQqWlR4eA==", "requires": { - "@react-stately/collections": "^3.5.1", - "@react-stately/selection": "^3.11.2", - "@react-stately/utils": "^3.5.2", - "@react-types/shared": "^3.16.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/selection": "^3.12.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4463,14 +4463,14 @@ } }, "@react-stately/menu": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.4.4.tgz", - "integrity": "sha512-WKak1NSV9yDY0tDB4mzsbj0FboTtR06gekio0VmKb1+FmnrC07mef8eGKUn974F0WhTNUy5A1iI5eM0W2YNynA==", - "requires": { - "@react-stately/overlays": "^3.4.4", - "@react-stately/utils": "^3.5.2", - "@react-types/menu": "^3.7.3", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.5.0.tgz", + "integrity": "sha512-JL6TcT+SbYdlxNLOS84SXp6njDNZuXfkt05o4rS51evmjM2+hlYaB9+yUMqrCb/J2nW7vVAg51TDAhLgmGTYKg==", + "requires": { + "@react-stately/overlays": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/menu": "^3.8.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4490,14 +4490,14 @@ } }, "@react-stately/numberfield": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.3.1.tgz", - "integrity": "sha512-GOu6wE2L2eal4AOL+rJQ4wQnFRgRkwiS9xdAFPu9B4qfP0DVfEIUC3XV4jws9nBhANxEf5LyilUv400nG881wg==", - "requires": { - "@internationalized/number": "^3.1.2", - "@react-stately/utils": "^3.5.2", - "@react-types/numberfield": "^3.3.5", - "@react-types/shared": "^3.16.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.4.0.tgz", + "integrity": "sha512-R+LjwRpspttiO0tZ8KikXu184D3HZJG37jVcp/yM1jyMURmQHWfjjR6PHuD66PSV5PtM2KQlBj6PGvDLg1UwlQ==", + "requires": { + "@internationalized/number": "^3.2.0", + "@react-stately/utils": "^3.6.0", + "@react-types/numberfield": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4517,12 +4517,12 @@ } }, "@react-stately/overlays": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.4.4.tgz", - "integrity": "sha512-IIlx+VXtXS4snDXrocUOls8QZ5XBQ4SNonaz1ox8/5W7Nsvq4VtdKsIaXsUP4agOudswaimlpj3pTDO/KuF5tQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.5.0.tgz", + "integrity": "sha512-r+U/G0Y4tCfI5wyBeIu+hmcZVRN8ChoK2zM1srPH9nDKsijQard2goX+9YmKng2LJ01Re/P6F8S8jYbpfEdLfQ==", "requires": { - "@react-stately/utils": "^3.5.2", - "@react-types/overlays": "^3.6.5", + "@react-stately/utils": "^3.6.0", + "@react-types/overlays": "^3.7.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4542,13 +4542,13 @@ } }, "@react-stately/radio": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.6.2.tgz", - "integrity": "sha512-qjbebR0YSkdEocLsPSzNnCsUYllWY938/5Z8mETxk4+74PJLxC3z0qjqVRq+aDO8hOgIfqSgrRRp3cJz9vIsBg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.7.0.tgz", + "integrity": "sha512-TKyR6RfX1qZRPAxVWIKMTt2s3J+IlxFZHykiEl85gHBmABSWW4JO4RjkgcmbaAGLAhu1pJU8ktJOyi+MyndpHA==", "requires": { - "@react-stately/utils": "^3.5.2", - "@react-types/radio": "^3.3.1", - "@react-types/shared": "^3.16.0", + "@react-stately/utils": "^3.6.0", + "@react-types/radio": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4568,13 +4568,13 @@ } }, "@react-stately/searchfield": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.3.4.tgz", - "integrity": "sha512-H/1evv7lsJl6PlD7/Sv7VgbCe0Yd2E2eKFihD6/tXPWO6L/ngYp5siqqhdwazjWTK2Hgw4TL0eviHGOGXKItzQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.4.0.tgz", + "integrity": "sha512-aaQLczPUIJwTGlllALT49RSvWY55oqmJWhLL7j3hnL1cNV0WmkmoSdAo7drDaux5vkgkurxuwMEZ8ymFYeZ+Nw==", "requires": { - "@react-stately/utils": "^3.5.2", - "@react-types/searchfield": "^3.3.6", - "@react-types/shared": "^3.16.0", + "@react-stately/utils": "^3.6.0", + "@react-types/searchfield": "^3.4.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4594,17 +4594,17 @@ } }, "@react-stately/select": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.3.4.tgz", - "integrity": "sha512-gD4JnF9/OIrQNdA4VqPIbifqpBC84BXHR5N7KmG7Ef06K9WGGVNB4FS538wno/znKg7lR6A45CPlaV53qfvWHg==", - "requires": { - "@react-stately/collections": "^3.5.1", - "@react-stately/list": "^3.6.1", - "@react-stately/menu": "^3.4.4", - "@react-stately/selection": "^3.11.2", - "@react-stately/utils": "^3.5.2", - "@react-types/select": "^3.6.5", - "@react-types/shared": "^3.16.0", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.4.0.tgz", + "integrity": "sha512-thSqD3apMCSgZgKtqHKGVIQRyvG8l0supIuzJicBwq6xg+J8X5muPCZgchCSNmU6im/l81XXE8LGuHGgMilORA==", + "requires": { + "@react-stately/collections": "^3.6.0", + "@react-stately/list": "^3.7.0", + "@react-stately/menu": "^3.5.0", + "@react-stately/selection": "^3.12.0", + "@react-stately/utils": "^3.6.0", + "@react-types/select": "^3.7.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4624,13 +4624,13 @@ } }, "@react-stately/selection": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.11.2.tgz", - "integrity": "sha512-g21Y36xhYkXO3yzz0BYSBqnD38olvEwsJUqBXGZfx//bshMC2FNmI5sRYMAi36stxWbwzBvB01OytxfLLxCXCA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.12.0.tgz", + "integrity": "sha512-qgUaPwqtAl7YaZxxGdb55ZaVuMB1rG+Vr+9fgG8dPtDYCNaPeIlg7ndC4ylzDhCWIx8D5qZotcrqCA4+93TwdA==", "requires": { - "@react-stately/collections": "^3.5.1", - "@react-stately/utils": "^3.5.2", - "@react-types/shared": "^3.16.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4650,15 +4650,15 @@ } }, "@react-stately/slider": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.2.4.tgz", - "integrity": "sha512-J97lTLqQKsrVSovYr4dTz7IJO/+j9OStT78N6bumDklnIKT7bsH3g857zITUFjs8yCcq0Jt3sfOvEU0ts6vyww==", - "requires": { - "@react-aria/i18n": "^3.6.3", - "@react-aria/utils": "^3.14.2", - "@react-stately/utils": "^3.5.2", - "@react-types/shared": "^3.16.0", - "@react-types/slider": "^3.3.1", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.3.0.tgz", + "integrity": "sha512-17aGJYHBRY3g4ZeiIgCNOvYl3HBARvSJhUKoNxZMRa2pqREW+WmBRRAXv5KTymW/KfcGb0RCq1ytYsderEgZAQ==", + "requires": { + "@react-aria/i18n": "^3.7.0", + "@react-aria/utils": "^3.15.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", + "@react-types/slider": "^3.4.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4678,16 +4678,16 @@ } }, "@react-stately/table": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.7.0.tgz", - "integrity": "sha512-oPvMEabRUD4LSJ/NZsal3TT2YjoRmpEK8t2pqG20+Vapxy5tC6QKEZQvrDxJwF4Z8fqQnX/GvnqmfypvqWDUSA==", - "requires": { - "@react-stately/collections": "^3.5.1", - "@react-stately/grid": "^3.4.2", - "@react-stately/selection": "^3.11.2", - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0", - "@react-types/table": "^3.4.0", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.8.0.tgz", + "integrity": "sha512-WmOcW9+4zm6MQZxYEC77u5HMxTcvcotkFptohHd0YtHXx+z5iwClCVKKFG2mc5lE+K4iQE41Q56nVKLjAu+TsA==", + "requires": { + "@react-stately/collections": "^3.6.0", + "@react-stately/grid": "^3.5.0", + "@react-stately/selection": "^3.12.0", + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0", + "@react-types/table": "^3.5.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4707,13 +4707,13 @@ } }, "@react-stately/tabs": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.2.4.tgz", - "integrity": "sha512-qSnkoxzbC21KXZYGtg6TEDaex34WSNmPN4sJzXc9Xe39L6+wXNCA2tqZxWCfpIcWQklFm+BmnnNNCO8/PDDrMA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.3.0.tgz", + "integrity": "sha512-Kf47+aXGf4NvnREMDqH+uuTa0QsYCxOp0poywR8lRPmYsL7V8yrTS2wXQnDL7cq8PXbL5v+ew0xmrV+BiUlNRg==", "requires": { - "@react-stately/list": "^3.6.1", - "@react-stately/utils": "^3.5.2", - "@react-types/tabs": "^3.1.5", + "@react-stately/list": "^3.7.0", + "@react-stately/utils": "^3.6.0", + "@react-types/tabs": "^3.2.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4733,13 +4733,13 @@ } }, "@react-stately/toggle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.4.4.tgz", - "integrity": "sha512-OwVJpd2M7P7fekTWpl3TUdD3Brq+Z/xElOCJYP5QuVytXCa5seKsk40YPld8JQnA5dRKojpbUxMDOJpb6hOOfw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.5.0.tgz", + "integrity": "sha512-vKwLLkFsiIve4pXIQC/dqLAz7Z+qtzJ8+D00EXXO1Nf8YHcyIMDkTmi3NTM8Qtvmt4xX2hbJFiPDF6WvF6mBIg==", "requires": { - "@react-stately/utils": "^3.5.2", - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0", + "@react-stately/utils": "^3.6.0", + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4759,13 +4759,13 @@ } }, "@react-stately/tooltip": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.2.4.tgz", - "integrity": "sha512-t7ksDRs9jKcOS25BVLM5cNCyzSCnzrin8OZ3AEmgeNxfiS58HhHbNxYk725hyGrbdpugQ03cRcJG70EZ6VgwDQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.3.0.tgz", + "integrity": "sha512-cYg4zKUc0y71L5OO5DyaCoh248A7wvXAU6VGMhppPGx+iPoWJMLBBdEJjf8Oa12NGxNv9SC5lTcv6js2k4+WwQ==", "requires": { - "@react-stately/overlays": "^3.4.4", - "@react-stately/utils": "^3.5.2", - "@react-types/tooltip": "^3.2.5", + "@react-stately/overlays": "^3.5.0", + "@react-stately/utils": "^3.6.0", + "@react-types/tooltip": "^3.3.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4785,14 +4785,14 @@ } }, "@react-stately/tree": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.4.1.tgz", - "integrity": "sha512-kIXeJOHgGGaUFnAD2wyRIiOwOw/+PN1OXo46n8+dPTFIYwR4+IWFNG8OMjVlIiSLPYWMCzzxZBE9a5grmbmNWQ==", - "requires": { - "@react-stately/collections": "^3.5.1", - "@react-stately/selection": "^3.11.2", - "@react-stately/utils": "^3.5.2", - "@react-types/shared": "^3.16.0", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.5.0.tgz", + "integrity": "sha512-5+MzMQUFq3+lbGkZC0SlcIDrYmPvxBKuC8xL5W6SuFekbrrxrS6IJexRe4QulaaAliDpX2/9DVZTt38eVfyf0A==", + "requires": { + "@react-stately/collections": "^3.6.0", + "@react-stately/selection": "^3.12.0", + "@react-stately/utils": "^3.6.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4812,9 +4812,9 @@ } }, "@react-stately/utils": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.5.2.tgz", - "integrity": "sha512-639gSKqamPHIEPaApb9ahVJS0HgAqNdVF3tQRoh+Ky6759Mbk6i3HqG4zk4IGQ1tVlYSYZvCckwehF7b2zndMg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.6.0.tgz", + "integrity": "sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q==", "requires": { "@swc/helpers": "^0.4.14" }, @@ -4835,12 +4835,12 @@ } }, "@react-stately/virtualizer": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.4.1.tgz", - "integrity": "sha512-2S7GARkZl41X7fN0Xa94TkN8ELAUbA89zn1xH59d02NOvAKLAFXHkCe69AivvVvbhXo8/nONzO8NXqqgBS/XQw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.5.0.tgz", + "integrity": "sha512-Jjk7V2T9uJ2+1EaVY+v1SJYeKb9dvZKayP35bcUq8/y9+I41kNE+qmgnkr5/SVzkExu4YeZTFxtuOm4l8UX5jg==", "requires": { - "@react-aria/utils": "^3.14.2", - "@react-types/shared": "^3.16.0", + "@react-aria/utils": "^3.15.0", + "@react-types/shared": "^3.17.0", "@swc/helpers": "^0.4.14" }, "dependencies": { @@ -4860,220 +4860,220 @@ } }, "@react-types/breadcrumbs": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.4.6.tgz", - "integrity": "sha512-hvGUI4mKHvOl3QyKFHk1qT/UkG+C4iJsRTlk6pbQgwk4lb7rplEm1CEa7fxzRdI8Gh4Id+C9+WyKCxZf9GNWUw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.5.0.tgz", + "integrity": "sha512-Nd95NnLhrSw8Eaf2nsgAz23BT/ww6m2d2GS/gT7NxkCcqWK8Dpv8+e+JSbO7CUkHJApm76FtRz16JCdltj4CeQ==", "requires": { - "@react-types/link": "^3.3.6", - "@react-types/shared": "^3.16.0" + "@react-types/link": "^3.4.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/button": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.0.tgz", - "integrity": "sha512-81BQO3QxSgF9PTXsVozNdNCKxBOB1lpbCWocV99dN1ws9s8uaYw8pmJJZ0LJKLiOsIECQ/3QrhQjmWTDW/qTug==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.1.tgz", + "integrity": "sha512-c+8xjmqWSjI5/mEHVLbVSp0eh/z2UU8Ga+wqjbEUZUjm8uopYj1PaCAwZ7YgcAebyQrL/21GyjK6tFHKzuUdJQ==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/calendar": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.0.5.tgz", - "integrity": "sha512-Kx00132hFEVvqay/Ub7q2oZEA1AzksirAuCsjakamn4LAXvitlo3PZxqBdEsyRc3nP5NR48KJj8yo276mXY8kQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.1.0.tgz", + "integrity": "sha512-6VKBxG27cLKti8Ik+T2N1y6FqJSgIXuQPMehOA1ASqPQLtnRBEoSgLjuN5qj7RTWgmdTvQmofqVznVFoUe5ozQ==", "requires": { - "@internationalized/date": "^3.0.2", - "@react-types/shared": "^3.16.0" + "@internationalized/date": "^3.1.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/checkbox": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.1.tgz", - "integrity": "sha512-kDMpy9SntjGQ7x00m5zmW8GENPouOtyiDgiEDKsPXUr2iYqHsNtricqVyG9S9+6hqpzuu8BzTcvZamc/xYjzlg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.2.tgz", + "integrity": "sha512-/NWFCEQLvVgo25afPt2jv4syxYvZeY/D/n2Y92IGtoNV4akdz4AuQ65+1X+JOhQc/ZbAblWw5fFWUZoQs3CLZg==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/combobox": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.5.5.tgz", - "integrity": "sha512-gpDo/NTQFd5IfCZoNnG16N4/JfvwXpZBNc15Kn7bF+NcpSDhDpI26BZN4mvK4lljKCheD4VrEl9/3PtImCg7cA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.6.0.tgz", + "integrity": "sha512-tfZtZ12Kf2bKt3EcFKWcUxrLNc61Y1CGynsOQ/KvHTFwlLTTtKnt/wWuf4kxdqlTK7dDqJzWRGWKlWx6eKlx3w==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/datepicker": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.1.4.tgz", - "integrity": "sha512-NBCXBCe3YZqeA/JrVKy0IAvJ2XSnXaVpR9iAlUwKu7V8P81CtnXHsVCrd/0HSH8QZWsGdIV5E23z0TctvW8trA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.2.0.tgz", + "integrity": "sha512-wcxLI6aW+r6nO2bsypxMIaWJHG5YYAD7WtJmhR5n5GK5juUCu/hzKBhdwxE1qtD3kMvIKTDJkMXLVNGmJP0mFw==", "requires": { - "@internationalized/date": "^3.0.2", - "@react-types/overlays": "^3.6.5", - "@react-types/shared": "^3.16.0" + "@internationalized/date": "^3.1.0", + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/dialog": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.4.5.tgz", - "integrity": "sha512-FkxZAYNRWkZVH5rjlw6qyQ/SpoGcYtNI/JQvn1H/xtZy/OJh2b2ERxGWv5x0RItGSeyATdSwFO1Qnf1Kl2K02A==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.0.tgz", + "integrity": "sha512-QsHqAK8zE4QSCQTJcRm/e6vweSE8S62o4GGvm+e+crMro/doA4it1Y4udE94Yy3WyDQEMFxyfd2P1Q6bI9JuyQ==", "requires": { - "@react-types/overlays": "^3.6.5", - "@react-types/shared": "^3.16.0" + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/grid": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.1.5.tgz", - "integrity": "sha512-KiEywsOJ+wdzLmJerAKEMADdvdItaLfhdo3bFfn1lgNUaKiNDJctDYWlhOYsRePf7MIrzoZuXEFnJj45jfpiOQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.1.6.tgz", + "integrity": "sha512-j6dO5KgkuIbIhEZYSxd86ZomohCyv3VNQhY2qBHlRoxZs0976komauEOjOpMOu0PxwsFGUgUFqlKOtc34f1SHQ==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/label": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.7.1.tgz", - "integrity": "sha512-wFpdtjSDBWO4xQQGF57V3PqvVVyE9TPj9ELWLs1yzL09fpXosycuEl5d79RywVlC9aF9dQYUfES09q/DZhRhMQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.7.2.tgz", + "integrity": "sha512-UlsIvxQjBMl9WwJw1bYoJMwiPvYwRsSLl2yoeeGfGr6IaYn5T/2kzBhDLwe5cpKrmi4Mehn1rbReFLGITOy8+g==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/link": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.3.6.tgz", - "integrity": "sha512-HMFd94CW8WrHbwXeTtCP/WOZmGugrEkN8f16R0i7T9xlTumk5GxubDMjA41ND/ehH72Xq7lP9VX8qezHWCGSoQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.4.0.tgz", + "integrity": "sha512-eImWLzxwzSmjOLa0Ow3HJaguyDCz98191v2pb7nT/zPzGDnhHhDjxB023hrXVUoCbsWrCb5QLp91Ts+VjiCyTA==", "requires": { - "@react-aria/interactions": "^3.13.1", - "@react-types/shared": "^3.16.0" + "@react-aria/interactions": "^3.14.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/listbox": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.3.5.tgz", - "integrity": "sha512-7SMRJWUi7ayzQ7SUPCXXwgI/Ua3vg0PPQOZFsmJ4/E8VG/xK82IV7BYSZiNjUQuGpVZJL0VPndt/RwIrQO4S3w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.0.tgz", + "integrity": "sha512-OvHaX4EBRHxKrfFItdJXjY7dYomzejqJ87P5fTL1l1TbDX8gvEP014S3cI+VLQq+EsXeTZ8E/sx0tFUo7ilchA==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/menu": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.7.3.tgz", - "integrity": "sha512-3Pax24I/FyNKBjKyNR4ePD8eZs35Th57HzJAVjamQg2fHEDRomg9GQ7fdmfGj72Dv3x3JRCoPYqhJ3L5R3kbzg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.8.0.tgz", + "integrity": "sha512-1nwGUwKNHJf60vOsg7p48NPQIzMsSprxw8VXfStr8eE5uU4vvKfVNQNUgvpkRmHmel8BrYdh1WnERXJJ3yKUgQ==", "requires": { - "@react-types/overlays": "^3.6.5", - "@react-types/shared": "^3.16.0" + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/meter": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.2.5.tgz", - "integrity": "sha512-pBrHoWRSwrfo3JtCCxoniSEd27Pokt20Fj4ZkJxjjDtLdcHOM4Z1JIKvOlcXMCV35iknrVu4veDHpmXolI+vAw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.3.0.tgz", + "integrity": "sha512-/IAHquSb+tC/YjcXdcYinFTb7puakkQWzNwS4lkhisIoZ0K0Ym/3fat/nzjgG9s2+sqQrW6f3Ndp9GCfSzvHLg==", "requires": { - "@react-types/progress": "^3.2.5", - "@react-types/shared": "^3.16.0" + "@react-types/progress": "^3.3.0", + "@react-types/shared": "^3.17.0" } }, "@react-types/numberfield": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.3.5.tgz", - "integrity": "sha512-qBhUSkahiIeTW5IvKvyfLtVHgzyqwKfuDIOlJQiBwgrOPR96X8KDDsOib4r5SFv0lhibv0gQ5L5ucXbmwLyQ8A==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.4.0.tgz", + "integrity": "sha512-3kKkCFJ9cqCHuoz2BWy3DZLg6SQzqjzbO3DvNTrORd2k7bsI0Ydlfsz1rkCU53GStqovgopX4jo6EZLeRfv05Q==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/overlays": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.6.5.tgz", - "integrity": "sha512-IeWcF+YTucCYYHagNh8fZLH6R4YUONO1VHY57WJyIHwMy0qgEaKSQCwq72VO1fQJ0ySZgOgm31FniOyKkg6+eQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.7.0.tgz", + "integrity": "sha512-LstucncZ8dM+xJYEijI1V6jGH20w5XO/T60r7JTrgQElMC86phPeoWkMTN4c2lsRikybolDbvXL6XsF76YO56A==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/progress": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.2.5.tgz", - "integrity": "sha512-pFSqaj6rlSdPqGHVErJ8G3RkIyYigoJ3EVozvhR9bcKkLlhnzJiFgOZl+k5u/ZKJOA+YHivIHJwg+Kl1sG0J6A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.3.0.tgz", + "integrity": "sha512-k4xivWiEYogsROLyNqVDVjl33rm+X9RKNbKQXg5pqjGikaC8T9hmIwE4tJr26XkMIIvQS6duEBCcuQN/U1+dGQ==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/radio": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.3.1.tgz", - "integrity": "sha512-q/x0kMvBsu6mH4bIkp/Jjrm9ff5y/p3UR0V4CmQFI7604gQd2Dt1dZMU/2HV9x70r1JfWRrDeRrVjUHVfFL5Vg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.4.0.tgz", + "integrity": "sha512-klgEU+987xVUCRqBoxXJiPJvy0upfo76dFnK5eF7U7BzcxhuiFeLDUcqUHtK92Cy5QOiDAF2ML0vUYGIabKMPA==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/searchfield": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.3.6.tgz", - "integrity": "sha512-DIv5eznnJVv0CM4f8SEEiptEZSzXUJWUyxRPkTzYNWt91pPPaCNbCQbmzZtyR9/R9KRJ9hlZN2bMkrtfVLvl1g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.4.0.tgz", + "integrity": "sha512-rYupNbyBAjycx6SXCALjINj/nOx7lIq9f4Dk1xo1dd8X6yYU0EF4WlahNua7UV8JC5oYlxN40G7yi4lAS+CdWQ==", "requires": { - "@react-types/shared": "^3.16.0", - "@react-types/textfield": "^3.6.2" + "@react-types/shared": "^3.17.0", + "@react-types/textfield": "^3.7.0" } }, "@react-types/select": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.6.5.tgz", - "integrity": "sha512-FDeSA7TYMNnhsbXREnD4dWRSu21T5M4BLy+J/5VgwDpr3IN9pzbvngK8a3jc8Yg2S3igKYLMLYfmcsx+yk7ohA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.7.0.tgz", + "integrity": "sha512-BaynMuW0dQ9ModFzW291+3n1D9bwKSFh03g3+1PvhRcBg1EXq1vFyfFBj4uuBymI0T7oCbnjGh19xo0vKIYRrA==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/shared": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.16.0.tgz", - "integrity": "sha512-IQgU4oAEvMwylEvaTsr2XB1G/mAoMe1JFYLD6G78v++oAR9l8o9MQxZ0YSeANDkqTamb2gKezGoT1RxvSKjVxw==" + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.17.0.tgz", + "integrity": "sha512-1SNZ/RhVrrQ1e6yE0bPV7d5Sfp+Uv0dfUEhwF9MAu2v5msu7AMewnsiojKNA0QA6Ing1gpDLjHCxtayQfuxqcg==" }, "@react-types/slider": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.3.1.tgz", - "integrity": "sha512-CbEa1v1IcUJD7VrFhWyOOlT7VyQ5DHEf/pNMkvICOBLMAwnWxS+tnTiRFgA/EbvV/vp24ydeszHYtMvsyRONRw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.4.0.tgz", + "integrity": "sha512-Kj+B6njpm4ltiu3gCBOPRnbzllV21IVr0bCQdNnWcf5DX8aN4VdI8EFkTz0DSwMm2WPCwZop0MDWDoRwXJK1ng==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/switch": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.2.5.tgz", - "integrity": "sha512-DlUL0Bz79SUTRje/i8m6qn4Ipn+q8QnyIkyJhkoHeH1R0YNude8xZrBPWbj3zfdddAGDFSF1NzP69q0xmNAcTQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.3.0.tgz", + "integrity": "sha512-6h+s//PwWf7/WJQOZKT6k1vdOQCcvPmMZW333AqyxtZX8WV8Q0illgcLMYo5qxT3IWsjYNuPIqMCY+tRbSeA2Q==", "requires": { - "@react-types/checkbox": "^3.4.1", - "@react-types/shared": "^3.16.0" + "@react-types/checkbox": "^3.4.2", + "@react-types/shared": "^3.17.0" } }, "@react-types/table": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.4.0.tgz", - "integrity": "sha512-G2L5WtaBMeG3v/5Kj/ZXH4ywz95vyPUBj7qy9UZJOYNaAR7uJWZkbe+Ka4xD4H/AaOk4mqW8dSo8cj7gtD66GQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.5.0.tgz", + "integrity": "sha512-/Mvn1MQbdnk7i6ivam8kdIh2PKF9GD3A7KC8v1E4JNAgsbOzOkt5JC4PMc1EtAK2eppMEKTN+B84oHKMl1F8Hg==", "requires": { - "@react-types/grid": "^3.1.5", - "@react-types/shared": "^3.16.0" + "@react-types/grid": "^3.1.6", + "@react-types/shared": "^3.17.0" } }, "@react-types/tabs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.1.5.tgz", - "integrity": "sha512-YgWY8IajCDBZmBzR3eii0aW6+SjcAT/dmqDNmfIuVVnDN7sHQ3PFa0nbmByvb0SfjOkJYumt8TJwFUCugohS8A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.2.0.tgz", + "integrity": "sha512-rOQm+JDYcGV+HE/EQ23vr6J3tqvXjFiDA107rU7n4B4mNjJ46k5gOhPdGTosv6wr1+Tp7XD5XMaFfqk+O0/ZZw==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/textfield": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.6.2.tgz", - "integrity": "sha512-QhFcpXvmSEW1/PwkWkvHJkcjsVezLW0OAvA0kMt/FMOChQNxnO36Pha+WjfcVbiFHXMhCBl6akbY2xG9NsHJrQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.7.0.tgz", + "integrity": "sha512-4Rqld8VZG324hecw6bqGY2gta1gm5sDhO48nyChfdmjVlFHXLDKazAcrgP76uSmUI6tffUPj3eYxQyTp5uLhyQ==", "requires": { - "@react-types/shared": "^3.16.0" + "@react-types/shared": "^3.17.0" } }, "@react-types/tooltip": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.2.5.tgz", - "integrity": "sha512-D4lN32JwQuA3JbCgcI26mgCkLHIj1WE8MTzf1McaasPkx7gVaqW+wfPyFwt99/Oo52TLvA/1oin78qePP67PSw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.3.0.tgz", + "integrity": "sha512-TMaKkjYbysZbMnY8zjI2Djh8QMHvB8LoN9EjOZX++3ZsO74CeCeOoGARh6+4c0Bu5rg4BXhNyi+y1JL3jtUEBg==", "requires": { - "@react-types/overlays": "^3.6.5", - "@react-types/shared": "^3.16.0" + "@react-types/overlays": "^3.7.0", + "@react-types/shared": "^3.17.0" } }, "@serjlee/gatsby-plugin-algolia": { @@ -5767,24 +5767,24 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "algoliasearch": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.3.tgz", - "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.3", - "@algolia/cache-common": "4.14.3", - "@algolia/cache-in-memory": "4.14.3", - "@algolia/client-account": "4.14.3", - "@algolia/client-analytics": "4.14.3", - "@algolia/client-common": "4.14.3", - "@algolia/client-personalization": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/logger-console": "4.14.3", - "@algolia/requester-browser-xhr": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/requester-node-http": "4.14.3", - "@algolia/transporter": "4.14.3" + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.15.0.tgz", + "integrity": "sha512-+vgKQF5944dYsz9zhKk07JbOYeNdKisoD5GeG0woBL3nLzbn2a+nGwki60DXg7CXvaFXBcTXyJG4C+VaBVd44g==", + "requires": { + "@algolia/cache-browser-local-storage": "4.15.0", + "@algolia/cache-common": "4.15.0", + "@algolia/cache-in-memory": "4.15.0", + "@algolia/client-account": "4.15.0", + "@algolia/client-analytics": "4.15.0", + "@algolia/client-common": "4.15.0", + "@algolia/client-personalization": "4.15.0", + "@algolia/client-search": "4.15.0", + "@algolia/logger-common": "4.15.0", + "@algolia/logger-console": "4.15.0", + "@algolia/requester-browser-xhr": "4.15.0", + "@algolia/requester-common": "4.15.0", + "@algolia/requester-node-http": "4.15.0", + "@algolia/transporter": "4.15.0" } }, "algoliasearch-helper": { @@ -10245,25 +10245,25 @@ }, "dependencies": { "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==" }, "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.0", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -10272,19 +10272,20 @@ }, "dependencies": { "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -10310,10 +10311,31 @@ "semver": "^6.3.0" } }, + "@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "requires": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "dependencies": { + "@babel/types": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + } + } + }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -10321,14 +10343,14 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "dependencies": { "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -10338,19 +10360,19 @@ } }, "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "requires": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "dependencies": { "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -10360,9 +10382,9 @@ } }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==" + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", @@ -10395,9 +10417,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -10407,36 +10429,37 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -12215,9 +12238,9 @@ "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" }, "immutable": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.3.tgz", - "integrity": "sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==" }, "import-fresh": { "version": "3.3.0", @@ -12365,13 +12388,13 @@ } }, "intl-messageformat": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.3.0.tgz", - "integrity": "sha512-FKeBZKH9T2Ue4RUXCuwY/hEaRHU8cgICevlGKog0qSBuz/amtRKNBLetBLmRxiHeEkF7JBBckC+56GIwshlRwA==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.3.1.tgz", + "integrity": "sha512-mqHc6arhbogrdImIsEscdjWnJcg2bvg3MiyGXDsTSGmPbbM2KtRUe7oNgDUbkM3HMn4KbyOct2JyJScmwRgGSQ==", "requires": { "@formatjs/ecma402-abstract": "1.14.3", "@formatjs/fast-memoize": "1.2.8", - "@formatjs/icu-messageformat-parser": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.3.0", "tslib": "^2.4.0" }, "dependencies": { @@ -12438,13 +12461,25 @@ } }, "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + } } }, "is-arrayish": { @@ -15462,44 +15497,44 @@ } }, "react-aria": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.22.0.tgz", - "integrity": "sha512-GA+qwnVVTvSirdhB/PsYPwix24vFDlGeK5Lk3zUgB9Q5VHnTfMMJ4+tyu9G38UR0clLQ5SAG1ArNjgzmhexQYg==", - "requires": { - "@react-aria/breadcrumbs": "^3.4.1", - "@react-aria/button": "^3.6.4", - "@react-aria/calendar": "^3.0.5", - "@react-aria/checkbox": "^3.7.1", - "@react-aria/combobox": "^3.4.4", - "@react-aria/datepicker": "^3.2.1", - "@react-aria/dialog": "^3.4.2", - "@react-aria/dnd": "^3.0.1", - "@react-aria/focus": "^3.10.1", - "@react-aria/gridlist": "^3.1.2", - "@react-aria/i18n": "^3.6.3", - "@react-aria/interactions": "^3.13.1", - "@react-aria/label": "^3.4.4", - "@react-aria/link": "^3.3.6", - "@react-aria/listbox": "^3.7.2", - "@react-aria/menu": "^3.7.1", - "@react-aria/meter": "^3.3.4", - "@react-aria/numberfield": "^3.3.4", - "@react-aria/overlays": "^3.12.1", - "@react-aria/progress": "^3.3.4", - "@react-aria/radio": "^3.4.2", - "@react-aria/searchfield": "^3.4.4", - "@react-aria/select": "^3.8.4", - "@react-aria/selection": "^3.12.1", - "@react-aria/separator": "^3.2.6", - "@react-aria/slider": "^3.2.4", - "@react-aria/ssr": "^3.4.1", - "@react-aria/switch": "^3.3.1", - "@react-aria/table": "^3.7.0", - "@react-aria/tabs": "^3.3.4", - "@react-aria/textfield": "^3.8.1", - "@react-aria/tooltip": "^3.3.4", - "@react-aria/utils": "^3.14.2", - "@react-aria/visually-hidden": "^3.6.1" + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.23.1.tgz", + "integrity": "sha512-fptvkglL/HiX/llx2QCCt4WUJzuj6SLoyUJzF50kOLnX+sz5QhWQ+6dCEN/d3TWCRaXudC1nREUu8MgoV+lg7g==", + "requires": { + "@react-aria/breadcrumbs": "^3.5.0", + "@react-aria/button": "^3.7.0", + "@react-aria/calendar": "^3.1.0", + "@react-aria/checkbox": "^3.8.0", + "@react-aria/combobox": "^3.5.1", + "@react-aria/datepicker": "^3.3.0", + "@react-aria/dialog": "^3.5.0", + "@react-aria/dnd": "^3.1.0", + "@react-aria/focus": "^3.11.0", + "@react-aria/gridlist": "^3.2.1", + "@react-aria/i18n": "^3.7.0", + "@react-aria/interactions": "^3.14.0", + "@react-aria/label": "^3.5.0", + "@react-aria/link": "^3.4.0", + "@react-aria/listbox": "^3.8.1", + "@react-aria/menu": "^3.8.1", + "@react-aria/meter": "^3.4.0", + "@react-aria/numberfield": "^3.4.0", + "@react-aria/overlays": "^3.13.0", + "@react-aria/progress": "^3.4.0", + "@react-aria/radio": "^3.5.0", + "@react-aria/searchfield": "^3.5.0", + "@react-aria/select": "^3.9.1", + "@react-aria/selection": "^3.13.1", + "@react-aria/separator": "^3.3.0", + "@react-aria/slider": "^3.3.0", + "@react-aria/ssr": "^3.5.0", + "@react-aria/switch": "^3.4.0", + "@react-aria/table": "^3.8.1", + "@react-aria/tabs": "^3.4.1", + "@react-aria/textfield": "^3.9.0", + "@react-aria/tooltip": "^3.4.0", + "@react-aria/utils": "^3.15.0", + "@react-aria/visually-hidden": "^3.7.0" } }, "react-autosize-textarea": { @@ -15874,32 +15909,32 @@ "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==" }, "react-stately": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.20.0.tgz", - "integrity": "sha512-5011Pmn8d17d1kbl7ScnQw1z+tXKsmTwVsAqrTARdZdH6NBmVNHEMlybU1t3/3PfcVn5XoRYwWvCgeTNZtNb8w==", - "requires": { - "@react-stately/calendar": "^3.0.5", - "@react-stately/checkbox": "^3.3.2", - "@react-stately/collections": "^3.5.1", - "@react-stately/combobox": "^3.3.1", - "@react-stately/data": "^3.8.1", - "@react-stately/datepicker": "^3.2.1", - "@react-stately/dnd": "^3.0.1", - "@react-stately/list": "^3.6.1", - "@react-stately/menu": "^3.4.4", - "@react-stately/numberfield": "^3.3.1", - "@react-stately/overlays": "^3.4.4", - "@react-stately/radio": "^3.6.2", - "@react-stately/searchfield": "^3.3.4", - "@react-stately/select": "^3.3.4", - "@react-stately/selection": "^3.11.2", - "@react-stately/slider": "^3.2.4", - "@react-stately/table": "^3.7.0", - "@react-stately/tabs": "^3.2.4", - "@react-stately/toggle": "^3.4.4", - "@react-stately/tooltip": "^3.2.4", - "@react-stately/tree": "^3.4.1", - "@react-types/shared": "^3.16.0" + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.21.0.tgz", + "integrity": "sha512-nnGkuRAoq9auj5SYRwxM6eVYvkS9WhxH9iKuzlqE1Gverp3JDFMFgKSaG/DFWG/m1TPlGvwYUwdVjyhINsFUqA==", + "requires": { + "@react-stately/calendar": "^3.1.0", + "@react-stately/checkbox": "^3.4.0", + "@react-stately/collections": "^3.6.0", + "@react-stately/combobox": "^3.4.0", + "@react-stately/data": "^3.9.0", + "@react-stately/datepicker": "^3.3.0", + "@react-stately/dnd": "^3.1.0", + "@react-stately/list": "^3.7.0", + "@react-stately/menu": "^3.5.0", + "@react-stately/numberfield": "^3.4.0", + "@react-stately/overlays": "^3.5.0", + "@react-stately/radio": "^3.7.0", + "@react-stately/searchfield": "^3.4.0", + "@react-stately/select": "^3.4.0", + "@react-stately/selection": "^3.12.0", + "@react-stately/slider": "^3.3.0", + "@react-stately/table": "^3.8.0", + "@react-stately/tabs": "^3.3.0", + "@react-stately/toggle": "^3.5.0", + "@react-stately/tooltip": "^3.3.0", + "@react-stately/tree": "^3.5.0", + "@react-types/shared": "^3.17.0" } }, "react-swipeable": { @@ -15952,9 +15987,9 @@ } }, "react-zoom-pan-pinch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-2.3.2.tgz", - "integrity": "sha512-SIz1+wDV51Yx+VsXkC/xopKY4L519tQROe2k19EDN0o95Tp/2u+o5q/s2RAqMjQF9JPOde1x7pgojz3+HrKGXA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-2.6.1.tgz", + "integrity": "sha512-4Cgdnn6OwN4DomY/E9NpAf0TyCtslEgwdYn96ZV/f5LKuw/FE3gcIBJiaKFmMGThDGV0yKN5mzO8noi34+UE4Q==" }, "read": { "version": "1.0.7", @@ -16768,9 +16803,9 @@ } }, "sass": { - "version": "1.58.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz", - "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==", + "version": "1.58.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.3.tgz", + "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==", "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -17424,12 +17459,22 @@ "internal-slot": "^1.0.4" }, "dependencies": { + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } diff --git a/package.json b/package.json index a458d3809b..9ea2abe9b0 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "homepage": "https://github.com/arduino/docs-content#readme", "dependencies": { - "@arduino/docs-arduino-cc": "^1.7.85", + "@arduino/docs-arduino-cc": "^1.8.2", "gatsby": "^4.9.2" }, "volta": {